From f3774c6f0780acf0f91c0d02fb7340caea94cc59 Mon Sep 17 00:00:00 2001 From: Aleksander <170264518+t-aleksander@users.noreply.github.com> Date: Tue, 12 May 2026 10:54:56 +0200 Subject: [PATCH 001/155] Report pre-release version (#862) * report pre-release version * fix cve --- .github/workflows/build-macos.yaml | 3 + .github/workflows/release.yaml | 6 +- src-tauri/Cargo.lock | 145 ++++++++++++++++------------- src-tauri/build.rs | 2 + src-tauri/src/commands.rs | 42 ++++++++- 5 files changed, 133 insertions(+), 65 deletions(-) diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index 984ae01b6..264867a30 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -32,6 +32,9 @@ jobs: VERSION=$(echo ${GITHUB_REF_NAME#v} | cut -d '-' -f1) echo Version: $VERSION echo "VERSION=$VERSION" >> ${GITHUB_ENV} + if [ "${GITHUB_REF_TYPE}" = "tag" ]; then + echo "DEFGUARD_CLIENT_BUILD_VERSION=${GITHUB_REF_NAME#v}" >> ${GITHUB_ENV} + fi - uses: actions/setup-node@v6 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 39924ac2c..01949c61b 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -73,6 +73,7 @@ jobs: VERSION=$(echo ${GITHUB_REF_NAME#v} | cut -d '-' -f1) echo Version: $VERSION echo "VERSION=$VERSION" >> ${GITHUB_ENV} + echo "DEFGUARD_CLIENT_BUILD_VERSION=${GITHUB_REF_NAME#v}" >> ${GITHUB_ENV} - uses: actions/cache@v5 name: Setup pnpm cache with: @@ -147,6 +148,7 @@ jobs: VERSION=$(echo ${GITHUB_REF_NAME#v} | cut -d '-' -f1) echo Version: $VERSION echo "VERSION=$VERSION" >> ${GITHUB_ENV} + echo "DEFGUARD_CLIENT_BUILD_VERSION=${GITHUB_REF_NAME#v}" >> ${GITHUB_ENV} - uses: actions/setup-node@v6 with: node-version: "24" @@ -311,9 +313,11 @@ jobs: submodules: recursive - name: Write release version run: | - $env:VERSION=echo ($env:GITHUB_REF_NAME.Substring(1) -Split "-")[0] + $reportedVersion = $env:GITHUB_REF_NAME.Substring(1) + $env:VERSION = ($reportedVersion -Split "-")[0] echo Version: $env:VERSION echo "VERSION=$env:VERSION" >> $env:GITHUB_ENV + echo "DEFGUARD_CLIENT_BUILD_VERSION=$reportedVersion" >> $env:GITHUB_ENV - uses: actions/setup-node@v6 with: node-version: "24" diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 6b2b88c85..8da067606 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1278,14 +1278,20 @@ dependencies = [ [[package]] name = "ctor" -version = "0.2.9" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" +checksum = "352d39c2f7bef1d6ad73db6f5160efcaed66d94ef8c6c573a8410c00bf909a98" dependencies = [ - "quote", - "syn 2.0.117", + "ctor-proc-macro", + "dtor", ] +[[package]] +name = "ctor-proc-macro" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" + [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -1402,6 +1408,17 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" +[[package]] +name = "dbus" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b942602992bb7acfd1f51c49811c58a610ef9181b6e66f3e519d79b540a3bf73" +dependencies = [ + "libc", + "libdbus-sys", + "windows-sys 0.61.2", +] + [[package]] name = "defguard-client" version = "1.6.8" @@ -1800,6 +1817,21 @@ dependencies = [ "dtoa", ] +[[package]] +name = "dtor" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1057d6c64987086ff8ed0fd3fbf377a6b7d205cc7715868cd401705f715cbe4" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" + [[package]] name = "dunce" version = "1.0.5" @@ -2888,7 +2920,7 @@ dependencies = [ "tokio", "tower-service", "tracing", - "windows-registry 0.6.1", + "windows-registry", ] [[package]] @@ -3400,6 +3432,15 @@ version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +[[package]] +name = "libdbus-sys" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043" +dependencies = [ + "pkg-config", +] + [[package]] name = "libgit2-sys" version = "0.18.3+1.9.2" @@ -3661,9 +3702,9 @@ dependencies = [ [[package]] name = "muda" -version = "0.17.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c9fec5a4e89860383d778d10563a605838f8f0b2f9303868937e5ff32e86177" +checksum = "0ae8844f63b5b118e334e205585b8c5c17b984121dbdb179d44aeb087ffad3cb" dependencies = [ "crossbeam-channel", "dpi", @@ -3674,10 +3715,10 @@ dependencies = [ "objc2-core-foundation", "objc2-foundation 0.3.2", "once_cell", - "png 0.17.16", + "png 0.18.1", "serde", "thiserror 2.0.18", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -4341,7 +4382,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.48.0", ] [[package]] @@ -4468,7 +4509,6 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ - "phf_macros 0.11.3", "phf_shared 0.11.3", ] @@ -4567,19 +4607,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "phf_macros" version = "0.13.1" @@ -6602,15 +6629,16 @@ dependencies = [ [[package]] name = "tao" -version = "0.34.8" +version = "0.35.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9103edf55f2da3c82aea4c7fab7c4241032bfeea0e71fa557d98e00e7ce7cc20" +checksum = "a33f7f9e486ade65fcf1e45c440f9236c904f5c1002cdc7fc6ae582777345ce4" dependencies = [ "bitflags 2.11.1", "block2 0.6.2", "core-foundation 0.10.1", "core-graphics", "crossbeam-channel", + "dbus", "dispatch2", "dlopen2", "dpi", @@ -6621,13 +6649,14 @@ dependencies = [ "libc", "log", "ndk", - "ndk-context", "ndk-sys", "objc2 0.6.4", "objc2-app-kit", "objc2-foundation 0.3.2", + "objc2-ui-kit", "once_cell", "parking_lot", + "percent-encoding", "raw-window-handle", "tao-macros", "unicode-segmentation", @@ -6663,9 +6692,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.10.3" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da77cc00fb9028caf5b5d4650f75e31f1ef3693459dfca7f7e506d1ecef0ba2d" +checksum = "b93bd86d231f0a8138f11a02a584769fe4b703dc36ae133d783228dbc4801405" dependencies = [ "anyhow", "bytes", @@ -6715,9 +6744,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.5.6" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bbc990d1dbf57a8e1c7fa2327f2a614d8b757805603c1b9ba5c81bade09fd4d" +checksum = "3a318b234cc2dea65f575467bafcfb76286bce228ebc3778e337d61d03213007" dependencies = [ "anyhow", "cargo_toml", @@ -6731,15 +6760,14 @@ dependencies = [ "serde_json", "tauri-utils", "tauri-winres", - "toml 0.9.12+spec-1.1.0", "walkdir", ] [[package]] name = "tauri-codegen" -version = "2.5.5" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a24476afd977c5d5d169f72425868613d82747916dd29e0a357c84c4bd6d29" +checksum = "6bd11644962add2549a60b7e7c6800f17d7020156e02f516021d8103e80cc528" dependencies = [ "base64 0.22.1", "brotli", @@ -6764,9 +6792,9 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.5.5" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d39b349a98dadaffebb73f0a40dcd1f23c999211e5a2e744403db384d0c33de7" +checksum = "fed9d3742a37a355d2e47c9af924e9fbc112abb76f9835d35d4780e318419502" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -6825,7 +6853,7 @@ dependencies = [ "thiserror 2.0.18", "tracing", "url", - "windows-registry 0.5.3", + "windows-registry", "windows-result 0.3.4", ] @@ -7019,9 +7047,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.10.1" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2826d79a3297ed08cd6ea7f412644ef58e32969504bc4fbd8d7dbeabc4445ea2" +checksum = "8fef478ba1d2ac21c2d528740b24d0cb315e1e8b1111aae53fafac34804371fc" dependencies = [ "cookie", "dpi", @@ -7044,9 +7072,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.10.1" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11ea2e6f801d275fdd890d6c9603736012742a1c33b96d0db788c9cdebf7f9e" +checksum = "a3989df2ae1c476404fe0a2e8ffc4cfbde97e51efd613c2bb5355fbc9ab52cf0" dependencies = [ "gtk", "http", @@ -7070,14 +7098,15 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.8.3" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219a1f983a2af3653f75b5747f76733b0da7ff03069c7a41901a5eb3ace4557d" +checksum = "d57200389a2f82b4b0a40ae29ca19b6978116e8f4d4e974c3234ce40c0ffbdec" dependencies = [ "anyhow", "brotli", "cargo_metadata", "ctor", + "dom_query", "dunce", "glob", "html5ever 0.29.1", @@ -7087,7 +7116,8 @@ dependencies = [ "kuchikiki", "log", "memchr", - "phf 0.11.3", + "phf 0.13.1", + "plist", "proc-macro2", "quote", "regex", @@ -7099,7 +7129,7 @@ dependencies = [ "serde_with", "swift-rs", "thiserror 2.0.18", - "toml 0.9.12+spec-1.1.0", + "toml 1.1.2+spec-1.1.0", "url", "urlpattern", "uuid", @@ -7704,9 +7734,9 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.21.3" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e85aa143ceb072062fc4d6356c1b520a51d636e7bc8e77ec94be3608e5e80c" +checksum = "15edbb0d80583e85ee8df283410038e17314df5cba30da2087a54a85216c0773" dependencies = [ "crossbeam-channel", "dirs", @@ -7718,10 +7748,10 @@ dependencies = [ "objc2-core-graphics", "objc2-foundation 0.3.2", "once_cell", - "png 0.17.16", + "png 0.18.1", "serde", "thiserror 2.0.18", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -8581,7 +8611,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.48.0", ] [[package]] @@ -8773,17 +8803,6 @@ dependencies = [ "windows-strings 0.4.2", ] -[[package]] -name = "windows-registry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" -dependencies = [ - "windows-link 0.2.1", - "windows-result 0.4.1", - "windows-strings 0.5.1", -] - [[package]] name = "windows-result" version = "0.3.4" @@ -9338,9 +9357,9 @@ checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "wry" -version = "0.54.4" +version = "0.55.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a8135d8676225e5744de000d4dff5a082501bf7db6a1c1495034f8c314edbc" +checksum = "186f9871daa55fd9c016578b810d149de58367113db7fb72b462d2323ce19514" dependencies = [ "base64 0.22.1", "block2 0.6.2", diff --git a/src-tauri/build.rs b/src-tauri/build.rs index 91455f0e1..c9a18d781 100644 --- a/src-tauri/build.rs +++ b/src-tauri/build.rs @@ -1,6 +1,8 @@ use vergen_git2::{Emitter, Git2Builder}; fn main() -> Result<(), Box> { + println!("cargo:rerun-if-env-changed=DEFGUARD_CLIENT_BUILD_VERSION"); + // set VERGEN_GIT_SHA env variable based on git commit hash let git2 = Git2Builder::default().branch(true).sha(true).build()?; Emitter::default().add_instructions(&git2)?.emit()?; diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 1fc1c55fd..5e2764589 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -1291,9 +1291,26 @@ pub struct AppVersionInfo { const PRODUCT_NAME: &str = "defguard-client"; +fn select_reported_app_version( + package_version: &str, + build_version_override: Option<&str>, +) -> String { + build_version_override + .filter(|version| !version.trim().is_empty()) + .map(str::to_owned) + .unwrap_or_else(|| package_version.to_owned()) +} + +fn reported_app_version(handle: &AppHandle) -> String { + select_reported_app_version( + &handle.package_info().version.to_string(), + option_env!("DEFGUARD_CLIENT_BUILD_VERSION"), + ) +} + #[tauri::command(async)] pub async fn get_latest_app_version(handle: AppHandle) -> Result { - let app_version = handle.package_info().version.to_string(); + let app_version = reported_app_version(&handle); let operating_system = env::consts::OS; let mut request_data = HashMap::new(); @@ -1395,3 +1412,26 @@ pub fn get_provisioning_config( pub fn get_platform_header() -> String { construct_platform_header() } + +#[cfg(test)] +mod tests { + use super::select_reported_app_version; + + #[test] + fn reported_app_version_uses_override_when_present() { + assert_eq!( + select_reported_app_version("1.6.8", Some("1.6.8-beta1")), + "1.6.8-beta1" + ); + } + + #[test] + fn reported_app_version_falls_back_to_package_version_without_override() { + assert_eq!(select_reported_app_version("1.6.8", None), "1.6.8"); + } + + #[test] + fn reported_app_version_ignores_empty_override() { + assert_eq!(select_reported_app_version("1.6.8", Some(" ")), "1.6.8"); + } +} From af679915ed8992af73613e6222914c705b6ded70 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 13 May 2026 12:26:39 +0200 Subject: [PATCH 002/155] Device posture (#865) --- .github/workflows/build-macos.yaml | 11 +- .github/workflows/lint.yaml | 14 +- .github/workflows/release.yaml | 283 +++-- .gitignore | 1 + biome.json | 14 +- package.json | 42 +- pnpm-lock.yaml | 1089 +++++++++-------- ...ff42252aa0833f57c8ffa98e3471b9e663a1.json} | 10 +- ...e22962668200b1ffb1fb7df967be5af0c50c.json} | 6 +- ...37ec18e3c0fd94b6ded74a60ac6edc57a5b3.json} | 10 +- ...d8f373772e3c406f4482e6a4022a796cd46b.json} | 10 +- ...603c2d351b677f6fac46e944d34b4913ab71.json} | 6 +- ...df0afd4bd8488391475908272d9cf7c6dbd0.json} | 10 +- src-tauri/Cargo.lock | 792 ++++-------- src-tauri/Cargo.toml | 13 +- src-tauri/build.rs | 9 +- src-tauri/cli/build.rs | 2 +- src-tauri/cli/src/bin/dg.rs | 52 +- .../20260511093103_posture_check_required.sql | 1 + src-tauri/proto | 2 +- src-tauri/src/apple.rs | 21 +- src-tauri/src/commands.rs | 32 +- src-tauri/src/database/models/instance.rs | 12 +- src-tauri/src/database/models/location.rs | 48 +- .../src/database/models/location_stats.rs | 3 +- src-tauri/src/enterprise/inspector/linux.rs | 69 ++ src-tauri/src/enterprise/inspector/macos.rs | 25 + src-tauri/src/enterprise/inspector/mod.rs | 167 +++ .../src/enterprise/inspector/tests/linux.rs | 17 + .../src/enterprise/inspector/tests/macos.rs | 23 + .../src/enterprise/inspector/tests/mod.rs | 6 + .../src/enterprise/inspector/tests/windows.rs | 38 + src-tauri/src/enterprise/inspector/windows.rs | 164 +++ src-tauri/src/enterprise/mod.rs | 1 + src-tauri/src/enterprise/periodic/config.rs | 4 +- .../src/log_watcher/global_log_watcher.rs | 2 +- src-tauri/src/periodic/purge_stats.rs | 3 +- src-tauri/src/periodic/version.rs | 2 +- src-tauri/src/proto.rs | 24 +- src-tauri/src/service/mod.rs | 2 +- src-tauri/src/tray.rs | 10 +- src-tauri/src/utils.rs | 8 +- src-tauri/tauri.conf.json | 6 +- .../client/components/MfaModalProvider.tsx | 17 +- .../modals/MFAModal/MFAModal.tsx | 4 + .../MfaMobileApprove/MfaMobileApprove.tsx | 52 +- src/pages/client/types.ts | 1 + .../VPNExtension.xcodeproj/project.pbxproj | 4 +- 48 files changed, 1729 insertions(+), 1413 deletions(-) rename src-tauri/.sqlx/{query-9137d3329ed718f211b5654af41b297c31706f5a5ad9ac400be116db7113a056.json => query-50543a38f8f09cd45b16bf8b93d2ff42252aa0833f57c8ffa98e3471b9e663a1.json} (84%) rename src-tauri/.sqlx/{query-ea39145f2cdc783bc78b32363cce32a87bd603debccaec23b160150766bdcd9f.json => query-7b9f3c02d868a7da19beed6aad5ee22962668200b1ffb1fb7df967be5af0c50c.json} (56%) rename src-tauri/.sqlx/{query-d8d908979a8573ee2c32828fa562d1bf171b4a6e224cc238680e2e856811c62e.json => query-858556d40a6fc015f2664045a00837ec18e3c0fd94b6ded74a60ac6edc57a5b3.json} (77%) rename src-tauri/.sqlx/{query-76c5c9b75df39afca9cd07530ab0569d3d6f9d8924458c8b357dd400966f4175.json => query-865203f8f64866f1895aede956dfd8f373772e3c406f4482e6a4022a796cd46b.json} (86%) rename src-tauri/.sqlx/{query-b882379427740576d70c89eaeb815dede3c312162dcc73cea9c883289ba9fa8e.json => query-95133767a4ebbd331c17667752e9603c2d351b677f6fac46e944d34b4913ab71.json} (60%) rename src-tauri/.sqlx/{query-85f8edf373d3bf1d405a8fed804d9d04839e69a6c2c5cb8ad5c2f8e19547a2f6.json => query-ec008998cc09e79017a3edd82550df0afd4bd8488391475908272d9cf7c6dbd0.json} (86%) create mode 100644 src-tauri/migrations/20260511093103_posture_check_required.sql create mode 100644 src-tauri/src/enterprise/inspector/linux.rs create mode 100644 src-tauri/src/enterprise/inspector/macos.rs create mode 100644 src-tauri/src/enterprise/inspector/mod.rs create mode 100644 src-tauri/src/enterprise/inspector/tests/linux.rs create mode 100644 src-tauri/src/enterprise/inspector/tests/macos.rs create mode 100644 src-tauri/src/enterprise/inspector/tests/mod.rs create mode 100644 src-tauri/src/enterprise/inspector/tests/windows.rs create mode 100644 src-tauri/src/enterprise/inspector/windows.rs diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index 264867a30..1ef16da54 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -40,15 +40,18 @@ jobs: with: node-version: 25 - - uses: pnpm/action-setup@v5 + - uses: pnpm/action-setup@v6 with: cache: true version: 10 - - name: Install deps - run: pnpm install --frozen-lockfile + # Change to '--frozen-lockfile' once this gets fixed: + # https://github.com/pnpm/action-setup/issues/40 + - name: Install Node dependencies + run: pnpm install --no-frozen-lockfile - - uses: dtolnay/rust-toolchain@stable + - name: Install Rust stable + uses: dtolnay/rust-toolchain@stable with: targets: aarch64-apple-darwin,x86_64-apple-darwin diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 508a6ff87..b1b883b51 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -30,9 +30,9 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: '24' + node-version: 25 - - uses: pnpm/action-setup@v5 + - uses: pnpm/action-setup@v6 with: version: 10 run_install: false @@ -42,16 +42,18 @@ jobs: run: | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - uses: actions/cache@v5 - name: Setup pnpm cache + - name: Setup pnpm cache + uses: actions/cache@v5 with: path: ${{ env.STORE_PATH }} key: ${{ runner.os }}-pnpm-lint-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-lint-store- - - name: Install deps - run: pnpm install --frozen-lockfile + # Change to '--frozen-lockfile' once this gets fixed: + # https://github.com/pnpm/action-setup/issues/40 + - name: Install Node dependencies + run: pnpm install --no-frozen-lockfile - name: Run Biome and Prettier Lint run: pnpm lint diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 01949c61b..f7519b1f8 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -58,16 +58,20 @@ jobs: - uses: actions/checkout@v6 with: submodules: recursive - - uses: pnpm/action-setup@v5 + + - name: Install pnpm + uses: pnpm/action-setup@v6 with: version: 10 - run_install: false + - uses: actions/setup-node@v6 with: - node-version: "24" + node-version: 25 + - name: Get pnpm store directory run: | echo "STORE_PATH=$(pnpm store path --silent)" >> ${GITHUB_ENV} + - name: Write release version run: | VERSION=$(echo ${GITHUB_REF_NAME#v} | cut -d '-' -f1) @@ -81,18 +85,26 @@ jobs: key: ${{ runner.os }}-pnpm-build-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-build-store- + + # Change to '--frozen-lockfile' once this gets fixed: + # https://github.com/pnpm/action-setup/issues/40 - name: Install Node dependencies - run: pnpm install --frozen-lockfile - - uses: dtolnay/rust-toolchain@stable + run: pnpm install --no-frozen-lockfile + + - name: Install Rust stable + uses: dtolnay/rust-toolchain@stable + - name: Install dependencies run: | apt-get install -y build-essential libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf libssl-dev libxdo-dev unzip protobuf-compiler libprotobuf-dev rpm + - name: Build packages uses: tauri-apps/tauri-action@v0.5.23 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: "--bundles deb" + - name: Upload DEB uses: actions/upload-release-asset@v1 env: @@ -102,13 +114,16 @@ jobs: asset_path: src-tauri/target/release/bundle/deb/defguard-client_${{ env.VERSION }}_${{ matrix.deb_arch }}.deb asset_name: defguard-client${{ env.VERSION }}_${{ matrix.deb_arch }}_ubuntu-22-04-lts.deb asset_content_type: application/octet-stream + - name: Rename dg binary run: mv src-tauri/target/release/dg dg-linux-${{ env.VERSION }}_${{ matrix.deb_arch }} + - name: Build dg deb uses: defGuard/fpm-action@main with: fpm_args: "dg-linux-${{ env.VERSION }}_${{ matrix.deb_arch }}=/usr/sbin/dg dg.service=/usr/lib/systemd/system/dg.service src-tauri/cli/.env=/etc/defguard/dg.conf" fpm_opts: "--architecture ${{ matrix.binary_arch }} --debug --output-type deb --version ${{ env.VERSION }} --package dg-linux-${{ env.VERSION }}_${{ matrix.deb_arch }}_ubuntu-22-04-lts.deb" + - name: Upload DEB uses: actions/upload-release-asset@v1 env: @@ -151,35 +166,46 @@ jobs: echo "DEFGUARD_CLIENT_BUILD_VERSION=${GITHUB_REF_NAME#v}" >> ${GITHUB_ENV} - uses: actions/setup-node@v6 with: - node-version: "24" - - uses: pnpm/action-setup@v5 + node-version: 25 + + - uses: pnpm/action-setup@v6 with: version: 10 run_install: false + - name: Get pnpm store directory shell: bash run: | echo "STORE_PATH=$(pnpm store path --silent)" >> ${GITHUB_ENV} - - uses: actions/cache@v5 - name: Setup pnpm cache + + - name: Setup pnpm cache + uses: actions/cache@v5 with: path: ${{ env.STORE_PATH }} key: ${{ runner.os }}-pnpm-build-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-build-store- + + # Change to '--frozen-lockfile' once this gets fixed: + # https://github.com/pnpm/action-setup/issues/40 - name: Install Node dependencies - run: pnpm install --frozen-lockfile - - uses: dtolnay/rust-toolchain@stable + run: pnpm install --no-frozen-lockfile + + - name: Install Rust stable + uses: dtolnay/rust-toolchain@stable + - name: Install Linux dependencies run: | sudo apt-get update sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf libssl-dev libxdo-dev unzip protobuf-compiler libprotobuf-dev rpm + - name: Build packages uses: tauri-apps/tauri-action@v0.5.23 # .24 seems broken, TODO: update when fixed env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: "--bundles deb,rpm" + - name: Calculate DEB SHA256 id: calculate-sha256 if: matrix.deb_arch == 'amd64' @@ -189,6 +215,7 @@ jobs: echo "DEB SHA256: $DEB_SHA256" echo "DEB_SHA256=$DEB_SHA256" >> ${GITHUB_ENV} echo "deb_sha256_${{ matrix.deb_arch }}=$DEB_SHA256" >> ${GITHUB_OUTPUT} + - name: Upload RPM uses: actions/upload-release-asset@v1 env: @@ -198,6 +225,7 @@ jobs: asset_path: src-tauri/target/release/bundle/rpm/defguard-client-${{ env.VERSION }}-1.${{ matrix.binary_arch }}.rpm asset_name: defguard-client-${{ env.VERSION }}-1.${{ matrix.binary_arch }}.rpm asset_content_type: application/octet-stream + - name: Upload DEB uses: actions/upload-release-asset@v1 env: @@ -207,15 +235,13 @@ jobs: asset_path: src-tauri/target/release/bundle/deb/defguard-client_${{ env.VERSION }}_${{ matrix.deb_arch }}.deb asset_name: defguard-client_${{ env.VERSION }}_${{ matrix.deb_arch }}.deb asset_content_type: application/octet-stream - - name: Rename client binary - run: mv src-tauri/target/release/defguard-client defguard-client-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} - - name: Tar client binary - uses: a7ul/tar-action@v1.2.0 - with: - command: c - files: | + + - name: Rename and tar client binary + run: | + mv src-tauri/target/release/defguard-client defguard-client-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} + tar -zcf defguard-client-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz \ defguard-client-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} - outPath: defguard-client-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz + - name: Upload client archive uses: actions/upload-release-asset@v1 env: @@ -225,15 +251,13 @@ jobs: asset_path: defguard-client-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz asset_name: defguard-client-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz asset_content_type: application/octet-stream - - name: Rename daemon binary - run: mv src-tauri/target/release/defguard-service defguard-service-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} - - name: Tar daemon binary - uses: a7ul/tar-action@v1.2.0 - with: - command: c - files: | + + - name: Rename and tar daemon binary + run: | + mv src-tauri/target/release/defguard-service defguard-service-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} + tar -zcf defguard-service-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz \ defguard-service-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} - outPath: defguard-service-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz + - name: Upload daemon archive uses: actions/upload-release-asset@v1 env: @@ -244,15 +268,12 @@ jobs: asset_name: defguard-service-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz asset_content_type: application/octet-stream - - name: Rename dg binary - run: mv src-tauri/target/release/dg dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} - - name: Tar dg binary - uses: a7ul/tar-action@v1.2.0 - with: - command: c - files: | + - name: Rename and tar dg binary + run: | + mv src-tauri/target/release/dg dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} + tar -zcf dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz \ dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} - outPath: dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz + - name: Upload dg archive uses: actions/upload-release-asset@v1 env: @@ -262,11 +283,13 @@ jobs: asset_path: dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz asset_name: dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz asset_content_type: application/octet-stream + - name: Build dg deb uses: defGuard/fpm-action@main with: fpm_args: "dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}=/usr/sbin/dg dg.service=/usr/lib/systemd/system/dg.service src-tauri/cli/.env=/etc/defguard/dg.conf" fpm_opts: "--architecture ${{ matrix.binary_arch }} --debug --output-type deb --version ${{ env.VERSION }} --package dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.deb" + - name: Upload DEB uses: actions/upload-release-asset@v1.0.2 env: @@ -276,11 +299,13 @@ jobs: asset_path: dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.deb asset_name: dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.deb asset_content_type: application/octet-stream + - name: Build dg rpm uses: defGuard/fpm-action@main with: fpm_args: "dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}=/usr/sbin/dg dg.service=/usr/lib/systemd/system/dg.service src-tauri/cli/.env=/etc/defguard/dg.conf" fpm_opts: "--architecture ${{ matrix.binary_arch }} --debug --output-type rpm --version ${{ env.VERSION }} --package dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.rpm" + - name: Upload RPM uses: actions/upload-release-asset@v1.0.2 env: @@ -292,100 +317,98 @@ jobs: asset_content_type: application/octet-stream # Builds Windows MSI and uploads it as artifact - build-windows: - needs: - - create-release - strategy: - fail-fast: false - matrix: - windows_runner: - - windows-latest - - windows-11-arm - include: - - windows_runner: windows-latest - cpu: x64 - - windows_runner: windows-11-arm - cpu: arm64 - runs-on: ${{ matrix.windows_runner }} - steps: - - uses: actions/checkout@v6 - with: - submodules: recursive - - name: Write release version - run: | - $reportedVersion = $env:GITHUB_REF_NAME.Substring(1) - $env:VERSION = ($reportedVersion -Split "-")[0] - echo Version: $env:VERSION - echo "VERSION=$env:VERSION" >> $env:GITHUB_ENV - echo "DEFGUARD_CLIENT_BUILD_VERSION=$reportedVersion" >> $env:GITHUB_ENV - - uses: actions/setup-node@v6 - with: - node-version: "24" - - uses: pnpm/action-setup@v5 - with: - version: 10 - run_install: false - - name: Get pnpm store directory - shell: bash - run: echo "STORE_PATH=$(pnpm store path --silent)" >> ${GITHUB_ENV} - - uses: actions/cache@v5 - name: Setup pnpm cache - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-build-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-build-store- - - name: Install deps - run: pnpm install --frozen-lockfile - - uses: dtolnay/rust-toolchain@stable - - name: Install Protoc - uses: arduino/setup-protoc@v3 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - - name: Build packages - uses: tauri-apps/tauri-action@v0.5.23 # 0.5.24 - 0.6.1 give: Error: Could not find workspace directory, but version and/or name specifies to use workspace package - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Upload unsigned bundle - uses: actions/upload-artifact@v4 - with: - name: unsigned-bundle-${{ matrix.cpu }} - path: src-tauri/target/release/bundle/msi/Defguard_${{ env.VERSION }}_${{ matrix.cpu }}_en-US.msi + # build-windows: + # needs: + # - create-release + # strategy: + # fail-fast: false + # matrix: + # windows_runner: + # - windows-latest + # - windows-11-arm + # include: + # - windows_runner: windows-latest + # cpu: x64 + # - windows_runner: windows-11-arm + # cpu: arm64 + # runs-on: ${{ matrix.windows_runner }} + # steps: + # - uses: actions/checkout@v6 + # with: + # submodules: recursive + # - name: Write release version + # run: | + # $env:VERSION=echo ($env:GITHUB_REF_NAME.Substring(1) -Split "-")[0] + # echo Version: $env:VERSION + # echo "VERSION=$env:VERSION" >> $env:GITHUB_ENV + # - uses: actions/setup-node@v6 + # with: + # node-version: 25 + # - uses: pnpm/action-setup@v6 + # with: + # version: 10 + # run_install: false + # - name: Get pnpm store directory + # shell: bash + # run: echo "STORE_PATH=$(pnpm store path --silent)" >> ${GITHUB_ENV} + # - uses: actions/cache@v5 + # name: Setup pnpm cache + # with: + # path: ${{ env.STORE_PATH }} + # key: ${{ runner.os }}-pnpm-build-store-${{ hashFiles('**/pnpm-lock.yaml') }} + # restore-keys: | + # ${{ runner.os }}-pnpm-build-store- + # - name: Install deps + # run: pnpm install --frozen-lockfile + # - uses: dtolnay/rust-toolchain@stable + # - name: Install Protoc + # uses: arduino/setup-protoc@v3 + # with: + # repo-token: ${{ secrets.GITHUB_TOKEN }} + # - name: Build packages + # uses: tauri-apps/tauri-action@v0.5.23 # 0.5.24 - 0.6.1 give: Error: Could not find workspace directory, but version and/or name specifies to use workspace package + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # - name: Upload unsigned bundle + # uses: actions/upload-artifact@v4 + # with: + # name: unsigned-bundle-${{ matrix.cpu }} + # path: src-tauri/target/release/bundle/msi/Defguard_${{ env.VERSION }}_${{ matrix.cpu }}_en-US.msi # Signs the MSI and uploads it as release asset - sign-bundle: - needs: - - create-release - - build-windows - strategy: - fail-fast: false - matrix: - # Match CPUs from build-windows above. - cpu: - - x64 - - arm64 - runs-on: - - self-hosted - - Linux - - X64 - steps: - - name: Write release version - run: | - VERSION=$(echo ${GITHUB_REF_NAME#v} | cut -d '-' -f1) - echo Version: $VERSION - echo "VERSION=$VERSION" >> ${GITHUB_ENV} - - name: Download unsigned bundle - uses: actions/download-artifact@v4 - with: - name: unsigned-bundle-${{ matrix.cpu }} - - name: Sign bundle - run: osslsigncode sign -pkcs11module /srv/codesign/certum/sc30pkcs11-3.0.6.72-MS.so -pkcs11cert ${{ secrets.CODESIGN_KEYID }} -key ${{ secrets.CODESIGN_KEYID }} -pass ${{ secrets.CODESIGN_PIN }} -h sha256 -t http://time.certum.pl/ -in Defguard_${{ env.VERSION }}_${{ matrix.cpu }}_en-US.msi -out Defguard-signed.msi - - name: Upload installer asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ needs.create-release.outputs.upload_url }} - asset_path: Defguard-signed.msi - asset_name: Defguard_${{ env.VERSION }}_${{ matrix.cpu }}_en-US.msi - asset_content_type: application/octet-stream + # sign-bundle: + # needs: + # - create-release + # - build-windows + # strategy: + # fail-fast: false + # matrix: + # # Match CPUs from build-windows above. + # cpu: + # - x64 + # - arm64 + # runs-on: + # - self-hosted + # - Linux + # - X64 + # steps: + # - name: Write release version + # run: | + # VERSION=$(echo ${GITHUB_REF_NAME#v} | cut -d '-' -f1) + # echo Version: $VERSION + # echo "VERSION=$VERSION" >> ${GITHUB_ENV} + # - name: Download unsigned bundle + # uses: actions/download-artifact@v4 + # with: + # name: unsigned-bundle-${{ matrix.cpu }} + # - name: Sign bundle + # run: osslsigncode sign -pkcs11module /srv/codesign/certum/sc30pkcs11-3.0.6.72-MS.so -pkcs11cert ${{ secrets.CODESIGN_KEYID }} -key ${{ secrets.CODESIGN_KEYID }} -pass ${{ secrets.CODESIGN_PIN }} -h sha256 -t http://time.certum.pl/ -in Defguard_${{ env.VERSION }}_${{ matrix.cpu }}_en-US.msi -out Defguard-signed.msi + # - name: Upload installer asset + # uses: actions/upload-release-asset@v1 + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # with: + # upload_url: ${{ needs.create-release.outputs.upload_url }} + # asset_path: Defguard-signed.msi + # asset_name: Defguard_${{ env.VERSION }}_${{ matrix.cpu }}_en-US.msi + # asset_content_type: application/octet-stream diff --git a/.gitignore b/.gitignore index 3f17dab15..d7a8490a2 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ dist-ssr *.db *.db-shm *.db-wal +*.provisionprofile src-tauri/gen/ diff --git a/biome.json b/biome.json index 92a029b6f..4bc6b7c6a 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.4.13/schema.json", + "$schema": "https://biomejs.dev/schemas/2.4.15/schema.json", "vcs": { "enabled": false, "clientKind": "git", @@ -27,9 +27,7 @@ "bracketSpacing": true, "expand": "auto", "useEditorconfig": true, - "includes": [ - "./src/**" - ] + "includes": ["./src/**"] }, "linter": { "enabled": true, @@ -70,9 +68,7 @@ "noArrayIndexKey": "off" } }, - "includes": [ - "src/**" - ] + "includes": ["src/**"] }, "javascript": { "formatter": { @@ -94,9 +90,7 @@ }, "overrides": [ { - "includes": [ - "**/*.js" - ] + "includes": ["**/*.js"] } ], "assist": { diff --git a/package.json b/package.json index 087818775..d4db1374e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "defguard-client", "private": false, - "version": "1.6.8", + "version": "1.6.9", "type": "module", "scripts": { "dev": "npm-run-all --parallel vite typesafe-i18n", @@ -56,17 +56,17 @@ "@react-hook/resize-observer": "^2.0.2", "@stablelib/base64": "^2.0.1", "@stablelib/x25519": "^2.0.1", - "@tanstack/query-core": "^5.100.5", + "@tanstack/query-core": "^5.100.10", "@tanstack/react-virtual": "^3.13.24", - "@tauri-apps/api": "^2.10.1", + "@tauri-apps/api": "^2.11.0", "@tauri-apps/plugin-clipboard-manager": "^2.3.2", - "@tauri-apps/plugin-deep-link": "^2.4.8", - "@tauri-apps/plugin-dialog": "^2.7.0", - "@tauri-apps/plugin-fs": "^2.5.0", - "@tauri-apps/plugin-http": "^2.5.8", + "@tauri-apps/plugin-deep-link": "^2.4.9", + "@tauri-apps/plugin-dialog": "^2.7.1", + "@tauri-apps/plugin-fs": "^2.5.1", + "@tauri-apps/plugin-http": "^2.5.9", "@tauri-apps/plugin-log": "^2.8.0", "@tauri-apps/plugin-notification": "^2.3.3", - "@tauri-apps/plugin-opener": "^2.5.3", + "@tauri-apps/plugin-opener": "^2.5.4", "@tauri-apps/plugin-os": "^2.3.2", "@tauri-apps/plugin-process": "^2.3.1", "@tauri-apps/plugin-window-state": "^2.4.1", @@ -92,15 +92,15 @@ "p-timeout": "^6.1.4", "prop-types": "^15.8.1", "radash": "^12.1.1", - "react": "^19.2.5", + "react": "^19.2.6", "react-auth-code-input": "^3.2.1", "react-click-away-listener": "^2.4.1", - "react-dom": "^19.2.5", - "react-hook-form": "^7.74.0", - "react-hotkeys-hook": "^5.2.4", + "react-dom": "^19.2.6", + "react-hook-form": "^7.75.0", + "react-hotkeys-hook": "^5.3.2", "react-loading-skeleton": "^3.5.0", "react-markdown": "^10.1.0", - "react-qr-code": "^2.0.18", + "react-qr-code": "^2.0.21", "react-router-dom": "^6.30.3", "react-use-websocket": "^4.13.0", "react-virtualized-auto-sizer": "^1.0.26", @@ -109,31 +109,31 @@ "rxjs": "^7.8.2", "use-breakpoint": "^4.0.10", "zod": "^3.25.76", - "zustand": "^5.0.12" + "zustand": "^5.0.13" }, "devDependencies": { - "@biomejs/biome": "^2.4.13", + "@biomejs/biome": "^2.4.15", "@hookform/devtools": "^4.4.0", "@svgr/cli": "^8.1.0", - "@tanstack/react-query": "^5.100.5", - "@tanstack/react-query-devtools": "^5.100.5", - "@tauri-apps/cli": "^2.10.1", + "@tanstack/react-query": "^5.100.10", + "@tanstack/react-query-devtools": "^5.100.10", + "@tauri-apps/cli": "^2.11.1", "@types/file-saver": "^2.0.7", "@types/lodash-es": "^4.17.12", - "@types/node": "^24.12.2", + "@types/node": "^24.12.4", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.2.0", "@vitejs/plugin-react-swc": "^4.3.0", "autoprefixer": "^10.5.0", "npm-run-all": "^4.1.5", - "postcss": "^8.5.12", + "postcss": "^8.5.14", "prettier": "^3.8.3", "sass": "~1.92.1", "typedoc": "^0.28.19", "typesafe-i18n": "^5.27.1", "typescript": "^5.9.3", - "vite": "^7.3.2" + "vite": "^7.3.3" }, "volta": { "node": "20.5.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ae5e3e41d..c6795db28 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,22 +4,19 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -overrides: - mdast-util-to-hast: 13.2.1 - importers: .: dependencies: '@floating-ui/react': specifier: ^0.27.19 - version: 0.27.19(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 0.27.19(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@hookform/resolvers': specifier: ^3.10.0 - version: 3.10.0(react-hook-form@7.74.0(react@19.2.5)) + version: 3.10.0(react-hook-form@7.75.0(react@19.2.6)) '@react-hook/resize-observer': specifier: ^2.0.2 - version: 2.0.2(react@19.2.5) + version: 2.0.2(react@19.2.6) '@stablelib/base64': specifier: ^2.0.1 version: 2.0.1 @@ -27,29 +24,29 @@ importers: specifier: ^2.0.1 version: 2.0.1 '@tanstack/query-core': - specifier: ^5.100.5 - version: 5.100.5 + specifier: ^5.100.10 + version: 5.100.10 '@tanstack/react-virtual': specifier: ^3.13.24 - version: 3.13.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 3.13.24(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tauri-apps/api': - specifier: ^2.10.1 - version: 2.10.1 + specifier: ^2.11.0 + version: 2.11.0 '@tauri-apps/plugin-clipboard-manager': specifier: ^2.3.2 version: 2.3.2 '@tauri-apps/plugin-deep-link': - specifier: ^2.4.8 - version: 2.4.8 + specifier: ^2.4.9 + version: 2.4.9 '@tauri-apps/plugin-dialog': - specifier: ^2.7.0 - version: 2.7.0 + specifier: ^2.7.1 + version: 2.7.1 '@tauri-apps/plugin-fs': - specifier: ^2.5.0 - version: 2.5.0 + specifier: ^2.5.1 + version: 2.5.1 '@tauri-apps/plugin-http': - specifier: ^2.5.8 - version: 2.5.8 + specifier: ^2.5.9 + version: 2.5.9 '@tauri-apps/plugin-log': specifier: ^2.8.0 version: 2.8.0 @@ -57,8 +54,8 @@ importers: specifier: ^2.3.3 version: 2.3.3 '@tauri-apps/plugin-opener': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^2.5.4 + version: 2.5.4 '@tauri-apps/plugin-os': specifier: ^2.3.2 version: 2.3.2 @@ -73,7 +70,7 @@ importers: version: 8.1.2 '@use-gesture/react': specifier: ^10.3.1 - version: 10.3.1(react@19.2.5) + version: 10.3.1(react@19.2.6) byte-size: specifier: ^9.0.1 version: 9.0.1 @@ -106,7 +103,7 @@ importers: version: 1.0.3 html-react-parser: specifier: ^5.2.17 - version: 5.2.17(@types/react@19.2.14)(react@19.2.5) + version: 5.2.17(@types/react@19.2.14)(react@19.2.6) itertools: specifier: ^2.6.0 version: 2.6.0 @@ -124,7 +121,7 @@ importers: version: 6.1.0 motion: specifier: ^12.38.0 - version: 12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) p-timeout: specifier: ^6.1.4 version: 6.1.4 @@ -135,44 +132,44 @@ importers: specifier: ^12.1.1 version: 12.1.1 react: - specifier: ^19.2.5 - version: 19.2.5 + specifier: ^19.2.6 + version: 19.2.6 react-auth-code-input: specifier: ^3.2.1 - version: 3.2.1(react@19.2.5) + version: 3.2.1(react@19.2.6) react-click-away-listener: specifier: ^2.4.1 - version: 2.4.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 2.4.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) react-dom: - specifier: ^19.2.5 - version: 19.2.5(react@19.2.5) + specifier: ^19.2.6 + version: 19.2.6(react@19.2.6) react-hook-form: - specifier: ^7.74.0 - version: 7.74.0(react@19.2.5) + specifier: ^7.75.0 + version: 7.75.0(react@19.2.6) react-hotkeys-hook: - specifier: ^5.2.4 - version: 5.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + specifier: ^5.3.2 + version: 5.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) react-loading-skeleton: specifier: ^3.5.0 - version: 3.5.0(react@19.2.5) + version: 3.5.0(react@19.2.6) react-markdown: specifier: ^10.1.0 - version: 10.1.0(@types/react@19.2.14)(react@19.2.5) + version: 10.1.0(@types/react@19.2.14)(react@19.2.6) react-qr-code: - specifier: ^2.0.18 - version: 2.0.18(react@19.2.5) + specifier: ^2.0.21 + version: 2.0.21(react@19.2.6) react-router-dom: specifier: ^6.30.3 - version: 6.30.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 6.30.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) react-use-websocket: specifier: ^4.13.0 version: 4.13.0 react-virtualized-auto-sizer: specifier: ^1.0.26 - version: 1.0.26(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 1.0.26(react-dom@19.2.6(react@19.2.6))(react@19.2.6) recharts: specifier: ^3.8.1 - version: 3.8.1(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react-is@16.13.1)(react@19.2.5)(redux@5.0.1) + version: 3.8.1(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react-is@16.13.1)(react@19.2.6)(redux@5.0.1) rehype-sanitize: specifier: ^6.0.0 version: 6.0.0 @@ -181,32 +178,32 @@ importers: version: 7.8.2 use-breakpoint: specifier: ^4.0.10 - version: 4.0.10(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 4.0.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6) zod: specifier: ^3.25.76 version: 3.25.76 zustand: - specifier: ^5.0.12 - version: 5.0.12(@types/react@19.2.14)(immer@11.1.4)(react@19.2.5)(use-sync-external-store@1.6.0(react@19.2.5)) + specifier: ^5.0.13 + version: 5.0.13(@types/react@19.2.14)(immer@11.1.8)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)) devDependencies: '@biomejs/biome': - specifier: ^2.4.13 - version: 2.4.13 + specifier: ^2.4.15 + version: 2.4.15 '@hookform/devtools': specifier: ^4.4.0 - version: 4.4.0(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 4.4.0(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@svgr/cli': specifier: ^8.1.0 version: 8.1.0(typescript@5.9.3) '@tanstack/react-query': - specifier: ^5.100.5 - version: 5.100.5(react@19.2.5) + specifier: ^5.100.10 + version: 5.100.10(react@19.2.6) '@tanstack/react-query-devtools': - specifier: ^5.100.5 - version: 5.100.5(@tanstack/react-query@5.100.5(react@19.2.5))(react@19.2.5) + specifier: ^5.100.10 + version: 5.100.10(@tanstack/react-query@5.100.10(react@19.2.6))(react@19.2.6) '@tauri-apps/cli': - specifier: ^2.10.1 - version: 2.10.1 + specifier: ^2.11.1 + version: 2.11.1 '@types/file-saver': specifier: ^2.0.7 version: 2.0.7 @@ -214,8 +211,8 @@ importers: specifier: ^4.17.12 version: 4.17.12 '@types/node': - specifier: ^24.12.2 - version: 24.12.2 + specifier: ^24.12.4 + version: 24.12.4 '@types/react': specifier: ^19.2.14 version: 19.2.14 @@ -224,19 +221,19 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^5.2.0 - version: 5.2.0(vite@7.3.2(@types/node@24.12.2)(sass@1.92.1)(yaml@2.8.3)) + version: 5.2.0(vite@7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0)) '@vitejs/plugin-react-swc': specifier: ^4.3.0 - version: 4.3.0(vite@7.3.2(@types/node@24.12.2)(sass@1.92.1)(yaml@2.8.3)) + version: 4.3.0(vite@7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0)) autoprefixer: specifier: ^10.5.0 - version: 10.5.0(postcss@8.5.12) + version: 10.5.0(postcss@8.5.14) npm-run-all: specifier: ^4.1.5 version: 4.1.5 postcss: - specifier: ^8.5.12 - version: 8.5.12 + specifier: ^8.5.14 + version: 8.5.14 prettier: specifier: ^3.8.3 version: 3.8.3 @@ -253,8 +250,8 @@ importers: specifier: ^5.9.3 version: 5.9.3 vite: - specifier: ^7.3.2 - version: 7.3.2(@types/node@24.12.2)(sass@1.92.1)(yaml@2.8.3) + specifier: ^7.3.3 + version: 7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0) packages: @@ -262,8 +259,8 @@ packages: resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.29.0': - resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + '@babel/compat-data@7.29.3': + resolution: {integrity: sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==} engines: {node: '>=6.9.0'} '@babel/core@7.29.0': @@ -312,8 +309,8 @@ packages: resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + '@babel/parser@7.29.3': + resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} engines: {node: '>=6.0.0'} hasBin: true @@ -345,59 +342,59 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@biomejs/biome@2.4.13': - resolution: {integrity: sha512-gLXOwkOBBg0tr7bDsqlkIh4uFeKuMjxvqsrb1Tukww1iDmHcfr4Uu8MoQxp0Rcte+69+osRNWXwHsu/zxT6XqA==} + '@biomejs/biome@2.4.15': + resolution: {integrity: sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.4.13': - resolution: {integrity: sha512-2KImO1jhNFBa2oWConyr0x6flxbQpGKv6902uGXpYM62Xyem8U80j441SyUJ8KyngsmKbQjeIv1q2CQfDkNnYg==} + '@biomejs/cli-darwin-arm64@2.4.15': + resolution: {integrity: sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.4.13': - resolution: {integrity: sha512-BKrJklbaFN4p1Ts4kPBczo+PkbsHQg57kmJ+vON9u2t6uN5okYHaSr7h/MutPCWQgg2lglaWoSmm+zhYW+oOkg==} + '@biomejs/cli-darwin-x64@2.4.15': + resolution: {integrity: sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.4.13': - resolution: {integrity: sha512-U5MsuBQW25dXaYtqWWSPM3P96H6Y+fHuja3TQpMNnylocHW0tEbtFTDlUj6oM+YJLntvEkQy4grBvQNUD4+RCg==} + '@biomejs/cli-linux-arm64-musl@2.4.15': + resolution: {integrity: sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.4.13': - resolution: {integrity: sha512-NzkUDSqfvMBrPplKgVr3aXLHZ2NEELvvF4vZxXulEylKWIGqlvNEcwUcj9OLrn75TD3lJ/GIqCVlBwd1MZCuYQ==} + '@biomejs/cli-linux-arm64@2.4.15': + resolution: {integrity: sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.4.13': - resolution: {integrity: sha512-Z601MienRgTBDza/+u2CH3RSrWoXo9rtr8NK6A4KJzqGgfxx+H3VlyLgTJ4sRo40T3pIsqpTmiOQEvYzQvBRvQ==} + '@biomejs/cli-linux-x64-musl@2.4.15': + resolution: {integrity: sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.4.13': - resolution: {integrity: sha512-Az3ZZedYRBo9EQzNnD9SxFcR1G5QsGo6VEc2hIyVPZ1rdKwee/7E9oeBBZFpE8Z44ekxsDQBqbiWGW5ShOhUSQ==} + '@biomejs/cli-linux-x64@2.4.15': + resolution: {integrity: sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.4.13': - resolution: {integrity: sha512-Px9PS2B5/Q183bUwy/5VHqp3J2lzdOCeVGzMpphYfl8oSa7VDCqenBdqWpy6DCy/en4Rbf/Y1RieZF6dJPcc9A==} + '@biomejs/cli-win32-arm64@2.4.15': + resolution: {integrity: sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.4.13': - resolution: {integrity: sha512-tTcMkXyBrmHi9BfrD2VNHs/5rYIUKETqsBlYOvSAABwBkJhSDVb5e7wPukftsQbO3WzQkXe6kaztC6WtUOXSoQ==} + '@biomejs/cli-win32-x64@2.4.15': + resolution: {integrity: sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -787,141 +784,141 @@ packages: '@rolldown/pluginutils@1.0.0-rc.7': resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} - '@rollup/rollup-android-arm-eabi@4.60.2': - resolution: {integrity: sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==} + '@rollup/rollup-android-arm-eabi@4.60.3': + resolution: {integrity: sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.60.2': - resolution: {integrity: sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==} + '@rollup/rollup-android-arm64@4.60.3': + resolution: {integrity: sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.60.2': - resolution: {integrity: sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==} + '@rollup/rollup-darwin-arm64@4.60.3': + resolution: {integrity: sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.60.2': - resolution: {integrity: sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==} + '@rollup/rollup-darwin-x64@4.60.3': + resolution: {integrity: sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.60.2': - resolution: {integrity: sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==} + '@rollup/rollup-freebsd-arm64@4.60.3': + resolution: {integrity: sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.60.2': - resolution: {integrity: sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==} + '@rollup/rollup-freebsd-x64@4.60.3': + resolution: {integrity: sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.60.2': - resolution: {integrity: sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==} + '@rollup/rollup-linux-arm-gnueabihf@4.60.3': + resolution: {integrity: sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.60.2': - resolution: {integrity: sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==} + '@rollup/rollup-linux-arm-musleabihf@4.60.3': + resolution: {integrity: sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.60.2': - resolution: {integrity: sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==} + '@rollup/rollup-linux-arm64-gnu@4.60.3': + resolution: {integrity: sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.60.2': - resolution: {integrity: sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==} + '@rollup/rollup-linux-arm64-musl@4.60.3': + resolution: {integrity: sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.60.2': - resolution: {integrity: sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==} + '@rollup/rollup-linux-loong64-gnu@4.60.3': + resolution: {integrity: sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.60.2': - resolution: {integrity: sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==} + '@rollup/rollup-linux-loong64-musl@4.60.3': + resolution: {integrity: sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.60.2': - resolution: {integrity: sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==} + '@rollup/rollup-linux-ppc64-gnu@4.60.3': + resolution: {integrity: sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.60.2': - resolution: {integrity: sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==} + '@rollup/rollup-linux-ppc64-musl@4.60.3': + resolution: {integrity: sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.60.2': - resolution: {integrity: sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==} + '@rollup/rollup-linux-riscv64-gnu@4.60.3': + resolution: {integrity: sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.60.2': - resolution: {integrity: sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==} + '@rollup/rollup-linux-riscv64-musl@4.60.3': + resolution: {integrity: sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.60.2': - resolution: {integrity: sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==} + '@rollup/rollup-linux-s390x-gnu@4.60.3': + resolution: {integrity: sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.60.2': - resolution: {integrity: sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==} + '@rollup/rollup-linux-x64-gnu@4.60.3': + resolution: {integrity: sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.60.2': - resolution: {integrity: sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==} + '@rollup/rollup-linux-x64-musl@4.60.3': + resolution: {integrity: sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.60.2': - resolution: {integrity: sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==} + '@rollup/rollup-openbsd-x64@4.60.3': + resolution: {integrity: sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.60.2': - resolution: {integrity: sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==} + '@rollup/rollup-openharmony-arm64@4.60.3': + resolution: {integrity: sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.60.2': - resolution: {integrity: sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==} + '@rollup/rollup-win32-arm64-msvc@4.60.3': + resolution: {integrity: sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.60.2': - resolution: {integrity: sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==} + '@rollup/rollup-win32-ia32-msvc@4.60.3': + resolution: {integrity: sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.60.2': - resolution: {integrity: sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==} + '@rollup/rollup-win32-x64-gnu@4.60.3': + resolution: {integrity: sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.2': - resolution: {integrity: sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==} + '@rollup/rollup-win32-x64-msvc@4.60.3': + resolution: {integrity: sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA==} cpu: [x64] os: [win32] @@ -1055,86 +1052,86 @@ packages: peerDependencies: '@svgr/core': '*' - '@swc/core-darwin-arm64@1.15.30': - resolution: {integrity: sha512-VvpP+vq08HmGYewMWvrdsxh9s2lthz/808zXm8Yu5kaqeR8Yia2b0eYXleHQ3VAjoStUDk6LzTheBW9KXYQdMA==} + '@swc/core-darwin-arm64@1.15.33': + resolution: {integrity: sha512-N+L0uXhuO7FIfzqwgxmzv0zIpV0qEp8wPX3QQs2p4atjMoywup2JTeDlXPw+z9pWJGCae3JjM+tZ6myclI+2gA==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.15.30': - resolution: {integrity: sha512-WiJA0hiZI3nwQAO6mu5RqigtWGDtth4Hiq6rbZxAaQyhIcqKIg5IoMRc1Y071lrNJn29eEDMC86Rq58xgUxlDg==} + '@swc/core-darwin-x64@1.15.33': + resolution: {integrity: sha512-/Il4QHSOhV4FekbsDtkrNmKbsX26oSysvgrRswa/RYOHXAkwXDbB4jaeKq6PsJLSPkzJ2KzQ061gtBnk0vNHfA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.15.30': - resolution: {integrity: sha512-YANuFUo48kIT6plJgCD0keae9HFXfjxsbvsgevqc0hr/07X/p7sAWTFOGYEc2SXcASaK7UvuQqzlbW8pr7R79g==} + '@swc/core-linux-arm-gnueabihf@1.15.33': + resolution: {integrity: sha512-C64hBnBxq4viOPQ8hlx+2lJ23bzZBGnjw7ryALmS+0Q3zHmwO8lw1/DArLENw4Q18/0w5wdEO1k3m1wWNtKGqQ==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.15.30': - resolution: {integrity: sha512-VndG8jaR4ugY6u+iVOT0Q+d2fZd7sLgjPgN8W/Le+3EbZKl+cRfFxV7Eoz4gfLqhmneZPdcIzf9T3LkgkmqNLg==} + '@swc/core-linux-arm64-gnu@1.15.33': + resolution: {integrity: sha512-TRJfnJbX3jqpxRDRoieMzRiCBS5jOmXNb3iQXmcgjFEHKLnAgK1RZRU8Cq1MsPqO4jAJp/ld1G4O3fXuxv85uw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] libc: [glibc] - '@swc/core-linux-arm64-musl@1.15.30': - resolution: {integrity: sha512-1SYGs2l0Yyyi0pR/P/NKz/x0kqxkoiw+BXeJjLUdecSk/KasncWlJrc6hOvFSgKHOBrzgM5jwuluKtlT8dnrcA==} + '@swc/core-linux-arm64-musl@1.15.33': + resolution: {integrity: sha512-il7tYM+CpUNzieQbwAjFT1P8zqAhmGWNAGhQZBnxurXZ0aNn+5nqYFTEUKNZl7QibtT0uQXzTZrNGHCIj6Y1Og==} engines: {node: '>=10'} cpu: [arm64] os: [linux] libc: [musl] - '@swc/core-linux-ppc64-gnu@1.15.30': - resolution: {integrity: sha512-TXREtiXeRhbfDFbmhnkIsXpKfzbfT73YkV2ZF6w0sfxgjC5zI2ZAbaCOq25qxvegofj2K93DtOpm9RLaBgqR2g==} + '@swc/core-linux-ppc64-gnu@1.15.33': + resolution: {integrity: sha512-ZtNBwN0Z7CFj9Il0FcPaKdjgP7URyKu/3RfH46vq+0paOBqLj4NYldD6Qo//Duif/7IOtAraUfDOmp0PLAufog==} engines: {node: '>=10'} cpu: [ppc64] os: [linux] libc: [glibc] - '@swc/core-linux-s390x-gnu@1.15.30': - resolution: {integrity: sha512-DCR2YYeyd6DQE4OuDhImouuNcjXEiEdnn1Y0DyGteugPEDvVuvYk8Xddi+4o2SgWH6jiW8/I+3emZvbep1NC+g==} + '@swc/core-linux-s390x-gnu@1.15.33': + resolution: {integrity: sha512-De1IyajoOmhOYYjw/lx66bKlyDpHZTueqwpDrWgf5O7T6d1ODeJJO9/OqMBmrBQc5C+dNnlmIufHsp4QVCWufA==} engines: {node: '>=10'} cpu: [s390x] os: [linux] libc: [glibc] - '@swc/core-linux-x64-gnu@1.15.30': - resolution: {integrity: sha512-5Pizw3NgfOJ5BJOBK8TIRa59xFW2avESTOBDPTAYwZYa1JNDs+KMF9lUfjJiJLM5HiMs/wPheA9eiT0q9m2AoA==} + '@swc/core-linux-x64-gnu@1.15.33': + resolution: {integrity: sha512-mGTH0YxmUN+x6vRN/I6NOk5X0ogNktkwPnJ94IMvR7QjhRDwL0O8RXEDhyUM0YtwWrryBOqaJQBX4zruxEPRGw==} engines: {node: '>=10'} cpu: [x64] os: [linux] libc: [glibc] - '@swc/core-linux-x64-musl@1.15.30': - resolution: {integrity: sha512-qyqydP/wyH8alcIP4a2hnGSjHLJjm9H7yDFup+CPy9oTahFgLLwnNcv5UHXqO2Qs3AIND+cls5f/Bb6hqpxdgA==} + '@swc/core-linux-x64-musl@1.15.33': + resolution: {integrity: sha512-hj628ZkSEJf6zMf5VMbYrG2O6QqyTIp2qwY6VlCjvIa9lAEZ5c2lfPblCLVGYubTeLJDxadLB/CxqQYOQABeEQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] libc: [musl] - '@swc/core-win32-arm64-msvc@1.15.30': - resolution: {integrity: sha512-CaQENgDHVGOg1mSF5sQVgvfFHG9kjMor2rkLMLeLOkfZYNj13ppnJ9+lfaBZLZUMMbnlGQnavCJb8PVBUOso7Q==} + '@swc/core-win32-arm64-msvc@1.15.33': + resolution: {integrity: sha512-GV2oohtN2/5+KSccl86VULu3aT+LrISC8uzgSq0FRnikpD+Zwc+sBlXmoKQ+Db6jI57ITUOIB8jRkdGMABC29g==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.15.30': - resolution: {integrity: sha512-30VdLeGk6fugiUs/kUdJ/pAg7z/zpvVbR11RH60jZ0Z42WIeIniYx0rLEWN7h/pKJ3CopqsQ3RsogCAkRKiA2g==} + '@swc/core-win32-ia32-msvc@1.15.33': + resolution: {integrity: sha512-gtyvzSNR8DHKfFEA2uqb8Ld1myqi6uEg2jyeUq3ikn5ytYs7H8RpZYC8mdy4NXr8hfcdJfCLXPlYaqqfBXpoEQ==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.15.30': - resolution: {integrity: sha512-4iObHPR+Q4oDY110EF5SF5eIaaVJNpMdG9C0q3Q92BsJ5y467uHz7sYQhP60WYlLFsLQ1el2YrIPUItUAQGOKg==} + '@swc/core-win32-x64-msvc@1.15.33': + resolution: {integrity: sha512-d6fRqQSkJI+kmMEBWaDQ7TMl8+YjLYbwRUPZQ9DY0ORBJeTzOrG0twvfvlZ2xgw6jA0ScQKgfBm4vHLSLl5Hqg==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.15.30': - resolution: {integrity: sha512-R8VQbQY1BZcbIF2p3gjlTCwAQzx1A194ugWfwld5y+WgVVWqVKm7eURGGOVbQVubgKWzidP2agomBbg96rZilQ==} + '@swc/core@1.15.33': + resolution: {integrity: sha512-jOlwnFV2xhuuZeAUILGFULeR6vDPfijEJ57evfocwznQldLU3w2cZ9bSDryY9ip+AsM3r1NJKzf47V2NXebkeQ==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -1148,20 +1145,20 @@ packages: '@swc/types@0.1.26': resolution: {integrity: sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==} - '@tanstack/query-core@5.100.5': - resolution: {integrity: sha512-t20KrhKkf0HXzqQkPbJ5erhFesup68BAbwFgYmTrS7bxMF7O5MdmL8jUkik4thsG7Hg00fblz30h6yF1d5TxGg==} + '@tanstack/query-core@5.100.10': + resolution: {integrity: sha512-8UR0yJR+GiQ40m3lPhUr0xbfAupe6GSQiksSBSa9SM2NjezFyxXCIA69/lz8cSoNKZLrw1/PktIyQBJcVeMi3w==} - '@tanstack/query-devtools@5.100.5': - resolution: {integrity: sha512-SuCkVCqqliRYJvm+LEL2U/TcFv92zTnHj6OGrJFHp1v/RsiwamI+ZDgQzbeUrLsJb8/Nj/52aIw0NyDMcVHl4A==} + '@tanstack/query-devtools@5.100.10': + resolution: {integrity: sha512-3DmJf25hDPus5IpVvp6ujXv6bKV2zPzI9vpbAmpJigsL/H6DPvPjmf7/Q9yVKEke//8fgeQ45abjgnLuyYxAiw==} - '@tanstack/react-query-devtools@5.100.5': - resolution: {integrity: sha512-bItQERx7dJoiI0WEoS4tIrvNnmk4kUYsaQLdIpm4o9Kttmsi5B6xlY6JBDkavstR3hH/R2+VT5dr3L5LBFPW4g==} + '@tanstack/react-query-devtools@5.100.10': + resolution: {integrity: sha512-zes0+o9ef5rAZXJ9f/SeaLs2nufJaeVkZkl/Or9NGrWVF41kL9Od9ED9nCwtQlgiF2VGtrzhEw5AU/igAO+aAg==} peerDependencies: - '@tanstack/react-query': ^5.100.5 + '@tanstack/react-query': ^5.100.10 react: ^18 || ^19 - '@tanstack/react-query@5.100.5': - resolution: {integrity: sha512-aNwj1mi2v2bQ9IxkyR1grLOUkv3BYWoykHy9KDyLNbjC3tsahbOHJibK+Wjtr1wRhG59/AvJhiJG5OlthaCgJA==} + '@tanstack/react-query@5.100.10': + resolution: {integrity: sha512-FLaZf2RCrA/Zgp4aiu5tG3TyasTRO7aZ99skxQpr3Hg/zXOhu6yq5FZCYQ/tRaJtM9ylnoK8tFK7PolXQadv6Q==} peerDependencies: react: ^18 || ^19 @@ -1174,99 +1171,99 @@ packages: '@tanstack/virtual-core@3.14.0': resolution: {integrity: sha512-JLANqGy/D6k4Ujmh8Tr25lGimuOXNiaVyXaCAZS0W+1390sADdGnyUdSWNIfd49gebtIxGMij4IktRVzrdr12Q==} - '@tauri-apps/api@2.10.1': - resolution: {integrity: sha512-hKL/jWf293UDSUN09rR69hrToyIXBb8CjGaWC7gfinvnQrBVvnLr08FeFi38gxtugAVyVcTa5/FD/Xnkb1siBw==} + '@tauri-apps/api@2.11.0': + resolution: {integrity: sha512-7CinYODhky9lmO23xHnUFv0Xt43fbtWMyxZcLcRBlFkcgXKuEirBvHpmtJ89YMhyeGcq20Wuc47Fa4XjyniywA==} - '@tauri-apps/cli-darwin-arm64@2.10.1': - resolution: {integrity: sha512-Z2OjCXiZ+fbYZy7PmP3WRnOpM9+Fy+oonKDEmUE6MwN4IGaYqgceTjwHucc/kEEYZos5GICve35f7ZiizgqEnQ==} + '@tauri-apps/cli-darwin-arm64@2.11.1': + resolution: {integrity: sha512-6eEKMBXsQPCuM1EmvrjT2+aBuxWQuFdKdW8pzNuNQtpq45nEEpBlD5gr8pUeAyOU1DQKlkFaEc/MPBxb/Pfjtg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tauri-apps/cli-darwin-x64@2.10.1': - resolution: {integrity: sha512-V/irQVvjPMGOTQqNj55PnQPVuH4VJP8vZCN7ajnj+ZS8Kom1tEM2hR3qbbIRoS3dBKs5mbG8yg1WC+97dq17Pw==} + '@tauri-apps/cli-darwin-x64@2.11.1': + resolution: {integrity: sha512-LQUO7exfRWjWALNhetph5guWpMeHphRpokOLk0OIbTTExaNwJNFu3I4vb+CCM/4G/QGoZe/5XikZOJdNEFP1ig==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tauri-apps/cli-linux-arm-gnueabihf@2.10.1': - resolution: {integrity: sha512-Hyzwsb4VnCWKGfTw+wSt15Z2pLw2f0JdFBfq2vHBOBhvg7oi6uhKiF87hmbXOBXUZaGkyRDkCHsdzJcIfoJC2w==} + '@tauri-apps/cli-linux-arm-gnueabihf@2.11.1': + resolution: {integrity: sha512-5i/awiBCRRhOUG8yjn0fMHXIWD5Ez8eEk5LtvOxyQrKuJkRaZDvnbIjZbE183blAwkoA4xN3aO/prJiqscl02Q==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tauri-apps/cli-linux-arm64-gnu@2.10.1': - resolution: {integrity: sha512-OyOYs2t5GkBIvyWjA1+h4CZxTcdz1OZPCWAPz5DYEfB0cnWHERTnQ/SLayQzncrT0kwRoSfSz9KxenkyJoTelA==} + '@tauri-apps/cli-linux-arm64-gnu@2.11.1': + resolution: {integrity: sha512-9LrwDw3S9Fygtw/Q6WDhOP+3svJRGAsejeE+GKrc0eO1ThMVhwi2LL6hw4dlKw93IfS7VY1G19sWGxJ/NcU4nA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@tauri-apps/cli-linux-arm64-musl@2.10.1': - resolution: {integrity: sha512-MIj78PDDGjkg3NqGptDOGgfXks7SYJwhiMh8SBoZS+vfdz7yP5jN18bNaLnDhsVIPARcAhE1TlsZe/8Yxo2zqg==} + '@tauri-apps/cli-linux-arm64-musl@2.11.1': + resolution: {integrity: sha512-mNA5dbbqPqDUdTIwdUYYuhO2GvIe9UnB2r0VU2njxBOS3Opbx4gKNC5yP0Iu4rYmEmqdlwry9VzGZQ3wq9dyFg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@tauri-apps/cli-linux-riscv64-gnu@2.10.1': - resolution: {integrity: sha512-X0lvOVUg8PCVaoEtEAnpxmnkwlE1gcMDTqfhbefICKDnOTJ5Est3qL0SrWxizDackIOKBcvtpejrSiVpuJI1kw==} + '@tauri-apps/cli-linux-riscv64-gnu@2.11.1': + resolution: {integrity: sha512-fZj3Gwq+6fUs305T5WQiD5iSGJw+j/4w/HGmk4sHDAcy+rp9zU5eaxB7nOyz5/I/nkNAuKPqfp6uIbiUBXkBCw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] libc: [glibc] - '@tauri-apps/cli-linux-x64-gnu@2.10.1': - resolution: {integrity: sha512-2/12bEzsJS9fAKybxgicCDFxYD1WEI9kO+tlDwX5znWG2GwMBaiWcmhGlZ8fi+DMe9CXlcVarMTYc0L3REIRxw==} + '@tauri-apps/cli-linux-x64-gnu@2.11.1': + resolution: {integrity: sha512-XFxGxOvHM7jjeD6ozCKdGfhzJ7lERYDGZl1/Kb4fsvchaJsfLJ981TlyTG8Qy/gFq+f5GitH3bfrX9JAkjPEyw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@tauri-apps/cli-linux-x64-musl@2.10.1': - resolution: {integrity: sha512-Y8J0ZzswPz50UcGOFuXGEMrxbjwKSPgXftx5qnkuMs2rmwQB5ssvLb6tn54wDSYxe7S6vlLob9vt0VKuNOaCIQ==} + '@tauri-apps/cli-linux-x64-musl@2.11.1': + resolution: {integrity: sha512-d5C2/Zm+68v7R9wTuTCjRQEVrWjcdMkJBZ1+rXse+QdMMlTB9+u9PDNDLw9PQflWxYLaYZ7tjxxL9Nb9II6PbA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@tauri-apps/cli-win32-arm64-msvc@2.10.1': - resolution: {integrity: sha512-iSt5B86jHYAPJa/IlYw++SXtFPGnWtFJriHn7X0NFBVunF6zu9+/zOn8OgqIWSl8RgzhLGXQEEtGBdR4wzpVgg==} + '@tauri-apps/cli-win32-arm64-msvc@2.11.1': + resolution: {integrity: sha512-YdeVWFAR1pTXzUU6NLstPq4G6OLxuDrXCXEBdmBH+5EZIDXUx0D2kJlz3+YjpazkKvAzYpgziTsyRagls0OfRQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tauri-apps/cli-win32-ia32-msvc@2.10.1': - resolution: {integrity: sha512-gXyxgEzsFegmnWywYU5pEBURkcFN/Oo45EAwvZrHMh+zUSEAvO5E8TXsgPADYm31d1u7OQU3O3HsYfVBf2moHw==} + '@tauri-apps/cli-win32-ia32-msvc@2.11.1': + resolution: {integrity: sha512-VBGkuH0eB9K9LLSMv361Gzr5Ou72sCS4+ztpmkWEQ+wd/amhcYOsf3X6qn1RJZDzIhiOYHJEOysZUC3baD01rA==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@tauri-apps/cli-win32-x64-msvc@2.10.1': - resolution: {integrity: sha512-6Cn7YpPFwzChy0ERz6djKEmUehWrYlM+xTaNzGPgZocw3BD7OfwfWHKVWxXzdjEW2KfKkHddfdxK1XXTYqBRLg==} + '@tauri-apps/cli-win32-x64-msvc@2.11.1': + resolution: {integrity: sha512-b3ORhIAKgp9ZYY+zBt7b7r0kLU2kjvyGF0+MS2SBym3emsweGPybEqocJcmtMuxyBhkOKHP4CiuEJEDuAlTx6A==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tauri-apps/cli@2.10.1': - resolution: {integrity: sha512-jQNGF/5quwORdZSSLtTluyKQ+o6SMa/AUICfhf4egCGFdMHqWssApVgYSbg+jmrZoc8e1DscNvjTnXtlHLS11g==} + '@tauri-apps/cli@2.11.1': + resolution: {integrity: sha512-rpEbaJ/HzNb6fwsquwoAbq29/Vt4gADhS423A8fdkwL4edJ0wZmoB8ar7O6JPDL834MUKOCm/rrJ7c9oAaEaYQ==} engines: {node: '>= 10'} hasBin: true '@tauri-apps/plugin-clipboard-manager@2.3.2': resolution: {integrity: sha512-CUlb5Hqi2oZbcZf4VUyUH53XWPPdtpw43EUpCza5HWZJwxEoDowFzNUDt1tRUXA8Uq+XPn17Ysfptip33sG4eQ==} - '@tauri-apps/plugin-deep-link@2.4.8': - resolution: {integrity: sha512-Cd2Cs960MGuGONeIwxOPx9wqwedetAHOGlwK5boJ/SMTfAtAyfErpfVPEn+EJzgXsJun8EKzsEumHjr+64V4fw==} + '@tauri-apps/plugin-deep-link@2.4.9': + resolution: {integrity: sha512-u0SKOUHnJ1wqeqXsDFq2+kASCBj9xxbG0g9XZWPy9SOmU4wXtp6b/wiYpm6oH6/5fBTQsLqnLhIvqLBRpgHJlA==} - '@tauri-apps/plugin-dialog@2.7.0': - resolution: {integrity: sha512-4nS/hfGMGCXiAS3LtVjH9AgsSAPJeG/7R+q8agTFqytjnMa4Zq95Bq8WzVDkckpanX+yyRHXnRtrKXkANKDHvw==} + '@tauri-apps/plugin-dialog@2.7.1': + resolution: {integrity: sha512-OK1UBXYt+ojcmxMktzzuyonYIFta8CmAASpX+CA+DTGK24KlHjhYI6x2iOJ/TjZF4N7/ACK1oFmEOjIY9IhzOQ==} - '@tauri-apps/plugin-fs@2.5.0': - resolution: {integrity: sha512-c83kbz61AK+rKjhS+je9+stIO27nXj7p9cqeg36TwkIUtxpCFTttlHHtqon6h6FN54cXjyAjlMPOJcW3mwE5XQ==} + '@tauri-apps/plugin-fs@2.5.1': + resolution: {integrity: sha512-9Lz+Jopp6QyeEWhlpkMx4R/+P9HgR+AVAI4vOZhlT8Xaymtz8iVI/Ov984/XTqgJz/5gz5NretqPB/XEMS3NhQ==} - '@tauri-apps/plugin-http@2.5.8': - resolution: {integrity: sha512-oxd7oypzQeu8kAfFCrw534Kq7Cw+NzozcnCY21O4rz3A+veJiIiuSCMIprgGcZOcLAXFP9GmDhKUbhuKWcunRw==} + '@tauri-apps/plugin-http@2.5.9': + resolution: {integrity: sha512-lCiY0+vs4HvIUSvZrBs8TC3TiCB0MOPRmiUjTq4prW7SlcJE2jdLeT6KBsJrT9Tlplufl7W1pY6SFAO3gCWxDA==} '@tauri-apps/plugin-log@2.8.0': resolution: {integrity: sha512-a+7rOq3MJwpTOLLKbL8d0qGZ85hgHw5pNOWusA9o3cf7cEgtYHiGY/+O8fj8MvywQIGqFv0da2bYQDlrqLE7rw==} @@ -1274,8 +1271,8 @@ packages: '@tauri-apps/plugin-notification@2.3.3': resolution: {integrity: sha512-Zw+ZH18RJb41G4NrfHgIuofJiymusqN+q8fGUIIV7vyCH+5sSn5coqRv/MWB9qETsUs97vmU045q7OyseCV3Qg==} - '@tauri-apps/plugin-opener@2.5.3': - resolution: {integrity: sha512-CCcUltXMOfUEArbf3db3kCE7Ggy1ExBEBl51Ko2ODJ6GDYHRp1nSNlQm5uNCFY5k7/ufaK5Ib3Du/Zir19IYQQ==} + '@tauri-apps/plugin-opener@2.5.4': + resolution: {integrity: sha512-1HnPkb+AmgO29HBazm4uPLKB+r7zzcTBW1d0fyYp1uP+jwtpoiNDGKMMzz58SFp49nOIrxdE3aUJtT57lfO9CQ==} '@tauri-apps/plugin-os@2.3.2': resolution: {integrity: sha512-n+nXWeuSeF9wcEsSPmRnBEGrRgOy6jjkSU+UVCOV8YUGKb2erhDOxis7IqRXiRVHhY8XMKks00BJ0OAdkpf6+A==} @@ -1337,6 +1334,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/file-saver@2.0.7': resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==} @@ -1355,8 +1355,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.12.2': - resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==} + '@types/node@24.12.4': + resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -1378,8 +1378,8 @@ packages: '@types/use-sync-external-store@0.0.6': resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@ungap/structured-clone@1.3.1': + resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} '@use-gesture/core@10.3.1': resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==} @@ -1453,8 +1453,8 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.23: - resolution: {integrity: sha512-xwVXGqevyKPsiuQdLj+dZMVjidjJV508TBqexND5HrF89cGdCYCJFB3qhcxRHSeMctdCfbR1jrxBajhDy7o29g==} + baseline-browser-mapping@2.10.29: + resolution: {integrity: sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -1467,8 +1467,8 @@ packages: brace-expansion@2.1.0: resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} browserslist@4.28.2: @@ -1505,8 +1505,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001791: - resolution: {integrity: sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==} + caniuse-lite@1.0.30001792: + resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1749,8 +1749,8 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - electron-to-chromium@1.5.344: - resolution: {integrity: sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==} + electron-to-chromium@1.5.353: + resolution: {integrity: sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1790,8 +1790,8 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - es-toolkit@1.46.0: - resolution: {integrity: sha512-IToJ6ct9OLl5zz6WsC/1vZEwfSZ7Myil+ygl5Tf30Xjn9AEkzNB4kqp2G7VUJKF1DtTx/ra5M5KLlXvzOg51BA==} + es-toolkit@1.46.1: + resolution: {integrity: sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==} esbuild@0.27.7: resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} @@ -1986,8 +1986,8 @@ packages: immer@10.2.0: resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==} - immer@11.1.4: - resolution: {integrity: sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==} + immer@11.1.8: + resolution: {integrity: sha512-/tbkHMW7y10Lx6i1crLjD4/OhNkRG+Fo7byZHtah0547nIeXYcpIXaUh0IAQY6gO5459qpGGYapcEOHtFXkIuA==} immutable@5.1.5: resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} @@ -2043,8 +2043,8 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} is-data-view@1.0.2: @@ -2359,8 +2359,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -2373,8 +2373,8 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-releases@2.0.38: - resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==} + node-releases@2.0.44: + resolution: {integrity: sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==} normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -2467,8 +2467,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.12: - resolution: {integrity: sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==} + postcss@8.5.14: + resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} prettier@2.8.8: @@ -2511,19 +2511,19 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom@19.2.5: - resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==} + react-dom@19.2.6: + resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} peerDependencies: - react: ^19.2.5 + react: ^19.2.6 - react-hook-form@7.74.0: - resolution: {integrity: sha512-yR6wHr99p9wFv686jhRWVSFhUvDvNbdUf2dKlbno8/VKOCuoNobDGC6S+M2dua9A9Yo8vpcrp8assIYbsZCQ9g==} + react-hook-form@7.75.0: + resolution: {integrity: sha512-Ovv94H+0p3sJ7B9B5QxPuCP1u8V/cHuVGyH55cSwodYDtoJwK+fqk3vjfIgSX59I2U/bU4z0nRJ9HMLpNiWEmw==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - react-hotkeys-hook@5.2.4: - resolution: {integrity: sha512-BgKg+A1+TawkYluh5Bo4cTmcgMN5L29uhJbDUQdHwPX+qgXRjIPYU5kIDHyxnAwCkCBiu9V5OpB2mpyeluVF2A==} + react-hotkeys-hook@5.3.2: + resolution: {integrity: sha512-DDDy9xK6mbTQ6aPlQvIl0dA/a90T/AWml4Rm21JXFDLlRHalIg4/Rv3equUQYs5xPTWq+oEl6RD7mi/nBpU3Uw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -2545,8 +2545,8 @@ packages: react-property@2.0.2: resolution: {integrity: sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug==} - react-qr-code@2.0.18: - resolution: {integrity: sha512-v1Jqz7urLMhkO6jkgJuBYhnqvXagzceg3qJUWayuCK/c6LTIonpWbwxR1f1APGd4xrW/QcQEovNrAojbUz65Tg==} + react-qr-code@2.0.21: + resolution: {integrity: sha512-xaywjo0eaF4S3LOz6ns5eoPbM2E+q9HYl4VATYpxK4bBniOhQ9noY2RJ9G4SnZFhUwzx63FUT6KdHzfKgUwyuQ==} peerDependencies: react: '*' @@ -2593,8 +2593,8 @@ packages: react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0 - react@19.2.5: - resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} + react@19.2.6: + resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} engines: {node: '>=0.10.0'} read-pkg@3.0.0: @@ -2654,8 +2654,8 @@ packages: engines: {node: '>= 0.4'} hasBin: true - rollup@4.60.2: - resolution: {integrity: sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==} + rollup@4.60.3: + resolution: {integrity: sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2931,6 +2931,7 @@ packages: uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true validate-npm-package-license@3.0.4: @@ -2945,8 +2946,8 @@ packages: victory-vendor@37.3.6: resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} - vite@7.3.2: - resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} + vite@7.3.3: + resolution: {integrity: sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3023,8 +3024,8 @@ packages: resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true @@ -3039,8 +3040,8 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zustand@5.0.12: - resolution: {integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==} + zustand@5.0.13: + resolution: {integrity: sha512-efI2tVaVQPqtOh114loML/Z80Y4NP3yc+Ff0fYiZJPauNeWZeIp/bRFD7I9bfmCOYBh/PHxlglQ9+wvlwnPikQ==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -3068,7 +3069,7 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.29.0': {} + '@babel/compat-data@7.29.3': {} '@babel/core@7.29.0': dependencies: @@ -3077,7 +3078,7 @@ snapshots: '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helpers': 7.29.2 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 @@ -3092,7 +3093,7 @@ snapshots: '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 @@ -3100,7 +3101,7 @@ snapshots: '@babel/helper-compilation-targets@7.28.6': dependencies: - '@babel/compat-data': 7.29.0 + '@babel/compat-data': 7.29.3 '@babel/helper-validator-option': 7.27.1 browserslist: 4.28.2 lru-cache: 5.1.1 @@ -3137,7 +3138,7 @@ snapshots: '@babel/template': 7.28.6 '@babel/types': 7.29.0 - '@babel/parser@7.29.2': + '@babel/parser@7.29.3': dependencies: '@babel/types': 7.29.0 @@ -3156,7 +3157,7 @@ snapshots: '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@babel/traverse@7.29.0': @@ -3164,7 +3165,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3 @@ -3176,39 +3177,39 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@biomejs/biome@2.4.13': + '@biomejs/biome@2.4.15': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.4.13 - '@biomejs/cli-darwin-x64': 2.4.13 - '@biomejs/cli-linux-arm64': 2.4.13 - '@biomejs/cli-linux-arm64-musl': 2.4.13 - '@biomejs/cli-linux-x64': 2.4.13 - '@biomejs/cli-linux-x64-musl': 2.4.13 - '@biomejs/cli-win32-arm64': 2.4.13 - '@biomejs/cli-win32-x64': 2.4.13 - - '@biomejs/cli-darwin-arm64@2.4.13': + '@biomejs/cli-darwin-arm64': 2.4.15 + '@biomejs/cli-darwin-x64': 2.4.15 + '@biomejs/cli-linux-arm64': 2.4.15 + '@biomejs/cli-linux-arm64-musl': 2.4.15 + '@biomejs/cli-linux-x64': 2.4.15 + '@biomejs/cli-linux-x64-musl': 2.4.15 + '@biomejs/cli-win32-arm64': 2.4.15 + '@biomejs/cli-win32-x64': 2.4.15 + + '@biomejs/cli-darwin-arm64@2.4.15': optional: true - '@biomejs/cli-darwin-x64@2.4.13': + '@biomejs/cli-darwin-x64@2.4.15': optional: true - '@biomejs/cli-linux-arm64-musl@2.4.13': + '@biomejs/cli-linux-arm64-musl@2.4.15': optional: true - '@biomejs/cli-linux-arm64@2.4.13': + '@biomejs/cli-linux-arm64@2.4.15': optional: true - '@biomejs/cli-linux-x64-musl@2.4.13': + '@biomejs/cli-linux-x64-musl@2.4.15': optional: true - '@biomejs/cli-linux-x64@2.4.13': + '@biomejs/cli-linux-x64@2.4.15': optional: true - '@biomejs/cli-win32-arm64@2.4.13': + '@biomejs/cli-win32-arm64@2.4.15': optional: true - '@biomejs/cli-win32-x64@2.4.13': + '@biomejs/cli-win32-x64@2.4.15': optional: true '@emotion/babel-plugin@11.13.5': @@ -3243,17 +3244,17 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.5)': + '@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6)': dependencies: '@babel/runtime': 7.29.2 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.5) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.6) '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 - react: 19.2.5 + react: 19.2.6 optionalDependencies: '@types/react': 19.2.14 transitivePeerDependencies: @@ -3269,16 +3270,16 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.5))(@types/react@19.2.14)(react@19.2.5)': + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)': dependencies: '@babel/runtime': 7.29.2 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.4.0 - '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.5) + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6) '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.5) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.6) '@emotion/utils': 1.4.2 - react: 19.2.5 + react: 19.2.6 optionalDependencies: '@types/react': 19.2.14 transitivePeerDependencies: @@ -3286,9 +3287,9 @@ snapshots: '@emotion/unitless@0.10.0': {} - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.5)': + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.6)': dependencies: - react: 19.2.5 + react: 19.2.6 '@emotion/utils@1.4.2': {} @@ -3381,18 +3382,18 @@ snapshots: '@floating-ui/core': 1.7.5 '@floating-ui/utils': 0.2.11 - '@floating-ui/react-dom@2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@floating-ui/react-dom@2.1.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@floating-ui/dom': 1.7.6 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) - '@floating-ui/react@0.27.19(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@floating-ui/react@0.27.19(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@floating-ui/react-dom': 2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@floating-ui/utils': 0.2.11 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) tabbable: 6.4.0 '@floating-ui/utils@0.2.11': {} @@ -3405,25 +3406,25 @@ snapshots: '@shikijs/types': 3.23.0 '@shikijs/vscode-textmate': 10.0.2 - '@hookform/devtools@4.4.0(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@hookform/devtools@4.4.0(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.5) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.5))(@types/react@19.2.14)(react@19.2.5) + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6) '@types/lodash': 4.17.24 - little-state-machine: 4.8.1(react@19.2.5) + little-state-machine: 4.8.1(react@19.2.6) lodash: 4.18.1 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - react-simple-animate: 3.5.3(react-dom@19.2.5(react@19.2.5)) - use-deep-compare-effect: 1.8.1(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-simple-animate: 3.5.3(react-dom@19.2.6(react@19.2.6)) + use-deep-compare-effect: 1.8.1(react@19.2.6) uuid: 8.3.2 transitivePeerDependencies: - '@types/react' - supports-color - '@hookform/resolvers@3.10.0(react-hook-form@7.74.0(react@19.2.5))': + '@hookform/resolvers@3.10.0(react-hook-form@7.75.0(react@19.2.6))': dependencies: - react-hook-form: 7.74.0(react@19.2.5) + react-hook-form: 7.75.0(react@19.2.6) '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -3505,31 +3506,31 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.6 optional: true - '@react-hook/latest@1.0.3(react@19.2.5)': + '@react-hook/latest@1.0.3(react@19.2.6)': dependencies: - react: 19.2.5 + react: 19.2.6 - '@react-hook/passive-layout-effect@1.2.1(react@19.2.5)': + '@react-hook/passive-layout-effect@1.2.1(react@19.2.6)': dependencies: - react: 19.2.5 + react: 19.2.6 - '@react-hook/resize-observer@2.0.2(react@19.2.5)': + '@react-hook/resize-observer@2.0.2(react@19.2.6)': dependencies: - '@react-hook/latest': 1.0.3(react@19.2.5) - '@react-hook/passive-layout-effect': 1.2.1(react@19.2.5) - react: 19.2.5 + '@react-hook/latest': 1.0.3(react@19.2.6) + '@react-hook/passive-layout-effect': 1.2.1(react@19.2.6) + react: 19.2.6 - '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.5)(redux@5.0.1))(react@19.2.5)': + '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1))(react@19.2.6)': dependencies: '@standard-schema/spec': 1.1.0 '@standard-schema/utils': 0.3.0 - immer: 11.1.4 + immer: 11.1.8 redux: 5.0.1 redux-thunk: 3.1.0(redux@5.0.1) reselect: 5.1.1 optionalDependencies: - react: 19.2.5 - react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.5)(redux@5.0.1) + react: 19.2.6 + react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1) '@remix-run/router@1.23.2': {} @@ -3537,79 +3538,79 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.7': {} - '@rollup/rollup-android-arm-eabi@4.60.2': + '@rollup/rollup-android-arm-eabi@4.60.3': optional: true - '@rollup/rollup-android-arm64@4.60.2': + '@rollup/rollup-android-arm64@4.60.3': optional: true - '@rollup/rollup-darwin-arm64@4.60.2': + '@rollup/rollup-darwin-arm64@4.60.3': optional: true - '@rollup/rollup-darwin-x64@4.60.2': + '@rollup/rollup-darwin-x64@4.60.3': optional: true - '@rollup/rollup-freebsd-arm64@4.60.2': + '@rollup/rollup-freebsd-arm64@4.60.3': optional: true - '@rollup/rollup-freebsd-x64@4.60.2': + '@rollup/rollup-freebsd-x64@4.60.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.60.2': + '@rollup/rollup-linux-arm-gnueabihf@4.60.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.60.2': + '@rollup/rollup-linux-arm-musleabihf@4.60.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.60.2': + '@rollup/rollup-linux-arm64-gnu@4.60.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.60.2': + '@rollup/rollup-linux-arm64-musl@4.60.3': optional: true - '@rollup/rollup-linux-loong64-gnu@4.60.2': + '@rollup/rollup-linux-loong64-gnu@4.60.3': optional: true - '@rollup/rollup-linux-loong64-musl@4.60.2': + '@rollup/rollup-linux-loong64-musl@4.60.3': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.2': + '@rollup/rollup-linux-ppc64-gnu@4.60.3': optional: true - '@rollup/rollup-linux-ppc64-musl@4.60.2': + '@rollup/rollup-linux-ppc64-musl@4.60.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.2': + '@rollup/rollup-linux-riscv64-gnu@4.60.3': optional: true - '@rollup/rollup-linux-riscv64-musl@4.60.2': + '@rollup/rollup-linux-riscv64-musl@4.60.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.2': + '@rollup/rollup-linux-s390x-gnu@4.60.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.60.2': + '@rollup/rollup-linux-x64-gnu@4.60.3': optional: true - '@rollup/rollup-linux-x64-musl@4.60.2': + '@rollup/rollup-linux-x64-musl@4.60.3': optional: true - '@rollup/rollup-openbsd-x64@4.60.2': + '@rollup/rollup-openbsd-x64@4.60.3': optional: true - '@rollup/rollup-openharmony-arm64@4.60.2': + '@rollup/rollup-openharmony-arm64@4.60.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.60.2': + '@rollup/rollup-win32-arm64-msvc@4.60.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.60.2': + '@rollup/rollup-win32-ia32-msvc@4.60.3': optional: true - '@rollup/rollup-win32-x64-gnu@4.60.2': + '@rollup/rollup-win32-x64-gnu@4.60.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.60.2': + '@rollup/rollup-win32-x64-msvc@4.60.3': optional: true '@shikijs/engine-oniguruma@3.23.0': @@ -3764,59 +3765,59 @@ snapshots: transitivePeerDependencies: - typescript - '@swc/core-darwin-arm64@1.15.30': + '@swc/core-darwin-arm64@1.15.33': optional: true - '@swc/core-darwin-x64@1.15.30': + '@swc/core-darwin-x64@1.15.33': optional: true - '@swc/core-linux-arm-gnueabihf@1.15.30': + '@swc/core-linux-arm-gnueabihf@1.15.33': optional: true - '@swc/core-linux-arm64-gnu@1.15.30': + '@swc/core-linux-arm64-gnu@1.15.33': optional: true - '@swc/core-linux-arm64-musl@1.15.30': + '@swc/core-linux-arm64-musl@1.15.33': optional: true - '@swc/core-linux-ppc64-gnu@1.15.30': + '@swc/core-linux-ppc64-gnu@1.15.33': optional: true - '@swc/core-linux-s390x-gnu@1.15.30': + '@swc/core-linux-s390x-gnu@1.15.33': optional: true - '@swc/core-linux-x64-gnu@1.15.30': + '@swc/core-linux-x64-gnu@1.15.33': optional: true - '@swc/core-linux-x64-musl@1.15.30': + '@swc/core-linux-x64-musl@1.15.33': optional: true - '@swc/core-win32-arm64-msvc@1.15.30': + '@swc/core-win32-arm64-msvc@1.15.33': optional: true - '@swc/core-win32-ia32-msvc@1.15.30': + '@swc/core-win32-ia32-msvc@1.15.33': optional: true - '@swc/core-win32-x64-msvc@1.15.30': + '@swc/core-win32-x64-msvc@1.15.33': optional: true - '@swc/core@1.15.30': + '@swc/core@1.15.33': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.26 optionalDependencies: - '@swc/core-darwin-arm64': 1.15.30 - '@swc/core-darwin-x64': 1.15.30 - '@swc/core-linux-arm-gnueabihf': 1.15.30 - '@swc/core-linux-arm64-gnu': 1.15.30 - '@swc/core-linux-arm64-musl': 1.15.30 - '@swc/core-linux-ppc64-gnu': 1.15.30 - '@swc/core-linux-s390x-gnu': 1.15.30 - '@swc/core-linux-x64-gnu': 1.15.30 - '@swc/core-linux-x64-musl': 1.15.30 - '@swc/core-win32-arm64-msvc': 1.15.30 - '@swc/core-win32-ia32-msvc': 1.15.30 - '@swc/core-win32-x64-msvc': 1.15.30 + '@swc/core-darwin-arm64': 1.15.33 + '@swc/core-darwin-x64': 1.15.33 + '@swc/core-linux-arm-gnueabihf': 1.15.33 + '@swc/core-linux-arm64-gnu': 1.15.33 + '@swc/core-linux-arm64-musl': 1.15.33 + '@swc/core-linux-ppc64-gnu': 1.15.33 + '@swc/core-linux-s390x-gnu': 1.15.33 + '@swc/core-linux-x64-gnu': 1.15.33 + '@swc/core-linux-x64-musl': 1.15.33 + '@swc/core-win32-arm64-msvc': 1.15.33 + '@swc/core-win32-ia32-msvc': 1.15.33 + '@swc/core-win32-x64-msvc': 1.15.33 '@swc/counter@0.1.3': {} @@ -3824,125 +3825,125 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@tanstack/query-core@5.100.5': {} + '@tanstack/query-core@5.100.10': {} - '@tanstack/query-devtools@5.100.5': {} + '@tanstack/query-devtools@5.100.10': {} - '@tanstack/react-query-devtools@5.100.5(@tanstack/react-query@5.100.5(react@19.2.5))(react@19.2.5)': + '@tanstack/react-query-devtools@5.100.10(@tanstack/react-query@5.100.10(react@19.2.6))(react@19.2.6)': dependencies: - '@tanstack/query-devtools': 5.100.5 - '@tanstack/react-query': 5.100.5(react@19.2.5) - react: 19.2.5 + '@tanstack/query-devtools': 5.100.10 + '@tanstack/react-query': 5.100.10(react@19.2.6) + react: 19.2.6 - '@tanstack/react-query@5.100.5(react@19.2.5)': + '@tanstack/react-query@5.100.10(react@19.2.6)': dependencies: - '@tanstack/query-core': 5.100.5 - react: 19.2.5 + '@tanstack/query-core': 5.100.10 + react: 19.2.6 - '@tanstack/react-virtual@3.13.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@tanstack/react-virtual@3.13.24(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@tanstack/virtual-core': 3.14.0 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) '@tanstack/virtual-core@3.14.0': {} - '@tauri-apps/api@2.10.1': {} + '@tauri-apps/api@2.11.0': {} - '@tauri-apps/cli-darwin-arm64@2.10.1': + '@tauri-apps/cli-darwin-arm64@2.11.1': optional: true - '@tauri-apps/cli-darwin-x64@2.10.1': + '@tauri-apps/cli-darwin-x64@2.11.1': optional: true - '@tauri-apps/cli-linux-arm-gnueabihf@2.10.1': + '@tauri-apps/cli-linux-arm-gnueabihf@2.11.1': optional: true - '@tauri-apps/cli-linux-arm64-gnu@2.10.1': + '@tauri-apps/cli-linux-arm64-gnu@2.11.1': optional: true - '@tauri-apps/cli-linux-arm64-musl@2.10.1': + '@tauri-apps/cli-linux-arm64-musl@2.11.1': optional: true - '@tauri-apps/cli-linux-riscv64-gnu@2.10.1': + '@tauri-apps/cli-linux-riscv64-gnu@2.11.1': optional: true - '@tauri-apps/cli-linux-x64-gnu@2.10.1': + '@tauri-apps/cli-linux-x64-gnu@2.11.1': optional: true - '@tauri-apps/cli-linux-x64-musl@2.10.1': + '@tauri-apps/cli-linux-x64-musl@2.11.1': optional: true - '@tauri-apps/cli-win32-arm64-msvc@2.10.1': + '@tauri-apps/cli-win32-arm64-msvc@2.11.1': optional: true - '@tauri-apps/cli-win32-ia32-msvc@2.10.1': + '@tauri-apps/cli-win32-ia32-msvc@2.11.1': optional: true - '@tauri-apps/cli-win32-x64-msvc@2.10.1': + '@tauri-apps/cli-win32-x64-msvc@2.11.1': optional: true - '@tauri-apps/cli@2.10.1': + '@tauri-apps/cli@2.11.1': optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 2.10.1 - '@tauri-apps/cli-darwin-x64': 2.10.1 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.10.1 - '@tauri-apps/cli-linux-arm64-gnu': 2.10.1 - '@tauri-apps/cli-linux-arm64-musl': 2.10.1 - '@tauri-apps/cli-linux-riscv64-gnu': 2.10.1 - '@tauri-apps/cli-linux-x64-gnu': 2.10.1 - '@tauri-apps/cli-linux-x64-musl': 2.10.1 - '@tauri-apps/cli-win32-arm64-msvc': 2.10.1 - '@tauri-apps/cli-win32-ia32-msvc': 2.10.1 - '@tauri-apps/cli-win32-x64-msvc': 2.10.1 + '@tauri-apps/cli-darwin-arm64': 2.11.1 + '@tauri-apps/cli-darwin-x64': 2.11.1 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.11.1 + '@tauri-apps/cli-linux-arm64-gnu': 2.11.1 + '@tauri-apps/cli-linux-arm64-musl': 2.11.1 + '@tauri-apps/cli-linux-riscv64-gnu': 2.11.1 + '@tauri-apps/cli-linux-x64-gnu': 2.11.1 + '@tauri-apps/cli-linux-x64-musl': 2.11.1 + '@tauri-apps/cli-win32-arm64-msvc': 2.11.1 + '@tauri-apps/cli-win32-ia32-msvc': 2.11.1 + '@tauri-apps/cli-win32-x64-msvc': 2.11.1 '@tauri-apps/plugin-clipboard-manager@2.3.2': dependencies: - '@tauri-apps/api': 2.10.1 + '@tauri-apps/api': 2.11.0 - '@tauri-apps/plugin-deep-link@2.4.8': + '@tauri-apps/plugin-deep-link@2.4.9': dependencies: - '@tauri-apps/api': 2.10.1 + '@tauri-apps/api': 2.11.0 - '@tauri-apps/plugin-dialog@2.7.0': + '@tauri-apps/plugin-dialog@2.7.1': dependencies: - '@tauri-apps/api': 2.10.1 + '@tauri-apps/api': 2.11.0 - '@tauri-apps/plugin-fs@2.5.0': + '@tauri-apps/plugin-fs@2.5.1': dependencies: - '@tauri-apps/api': 2.10.1 + '@tauri-apps/api': 2.11.0 - '@tauri-apps/plugin-http@2.5.8': + '@tauri-apps/plugin-http@2.5.9': dependencies: - '@tauri-apps/api': 2.10.1 + '@tauri-apps/api': 2.11.0 '@tauri-apps/plugin-log@2.8.0': dependencies: - '@tauri-apps/api': 2.10.1 + '@tauri-apps/api': 2.11.0 '@tauri-apps/plugin-notification@2.3.3': dependencies: - '@tauri-apps/api': 2.10.1 + '@tauri-apps/api': 2.11.0 - '@tauri-apps/plugin-opener@2.5.3': + '@tauri-apps/plugin-opener@2.5.4': dependencies: - '@tauri-apps/api': 2.10.1 + '@tauri-apps/api': 2.11.0 '@tauri-apps/plugin-os@2.3.2': dependencies: - '@tauri-apps/api': 2.10.1 + '@tauri-apps/api': 2.11.0 '@tauri-apps/plugin-process@2.3.1': dependencies: - '@tauri-apps/api': 2.10.1 + '@tauri-apps/api': 2.11.0 '@tauri-apps/plugin-window-state@2.4.1': dependencies: - '@tauri-apps/api': 2.10.1 + '@tauri-apps/api': 2.11.0 '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 @@ -3954,7 +3955,7 @@ snapshots: '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@types/babel__traverse@7.28.0': @@ -3993,10 +3994,12 @@ snapshots: '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} + '@types/file-saver@2.0.7': {} '@types/hast@3.0.4': @@ -4015,7 +4018,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.12.2': + '@types/node@24.12.4': dependencies: undici-types: 7.16.0 @@ -4035,24 +4038,24 @@ snapshots: '@types/use-sync-external-store@0.0.6': {} - '@ungap/structured-clone@1.3.0': {} + '@ungap/structured-clone@1.3.1': {} '@use-gesture/core@10.3.1': {} - '@use-gesture/react@10.3.1(react@19.2.5)': + '@use-gesture/react@10.3.1(react@19.2.6)': dependencies: '@use-gesture/core': 10.3.1 - react: 19.2.5 + react: 19.2.6 - '@vitejs/plugin-react-swc@4.3.0(vite@7.3.2(@types/node@24.12.2)(sass@1.92.1)(yaml@2.8.3))': + '@vitejs/plugin-react-swc@4.3.0(vite@7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.7 - '@swc/core': 1.15.30 - vite: 7.3.2(@types/node@24.12.2)(sass@1.92.1)(yaml@2.8.3) + '@swc/core': 1.15.33 + vite: 7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@5.2.0(vite@7.3.2(@types/node@24.12.2)(sass@1.92.1)(yaml@2.8.3))': + '@vitejs/plugin-react@5.2.0(vite@7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -4060,7 +4063,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.2(@types/node@24.12.2)(sass@1.92.1)(yaml@2.8.3) + vite: 7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -4093,13 +4096,13 @@ snapshots: async-function@1.0.0: {} - autoprefixer@10.5.0(postcss@8.5.12): + autoprefixer@10.5.0(postcss@8.5.14): dependencies: browserslist: 4.28.2 - caniuse-lite: 1.0.30001791 + caniuse-lite: 1.0.30001792 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.12 + postcss: 8.5.14 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -4118,7 +4121,7 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.10.23: {} + baseline-browser-mapping@2.10.29: {} boolbase@1.0.0: {} @@ -4131,16 +4134,16 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.5: + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.23 - caniuse-lite: 1.0.30001791 - electron-to-chromium: 1.5.344 - node-releases: 2.0.38 + baseline-browser-mapping: 2.10.29 + caniuse-lite: 1.0.30001792 + electron-to-chromium: 1.5.353 + node-releases: 2.0.44 update-browserslist-db: 1.2.3(browserslist@4.28.2) byte-size@9.0.1: {} @@ -4166,7 +4169,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001791: {} + caniuse-lite@1.0.30001792: {} ccount@2.0.1: {} @@ -4406,7 +4409,7 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - electron-to-chromium@1.5.344: {} + electron-to-chromium@1.5.353: {} emoji-regex@8.0.0: {} @@ -4496,7 +4499,7 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es-toolkit@1.46.0: {} + es-toolkit@1.46.1: {} esbuild@0.27.7: optionalDependencies: @@ -4555,15 +4558,15 @@ snapshots: fraction.js@5.3.4: {} - framer-motion@12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + framer-motion@12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: motion-dom: 12.38.0 motion-utils: 12.36.0 tslib: 2.8.1 optionalDependencies: '@emotion/is-prop-valid': 1.4.0 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) fs.realpath@1.0.0: {} @@ -4659,12 +4662,12 @@ snapshots: hast-util-sanitize@5.0.2: dependencies: '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.3.0 + '@ungap/structured-clone': 1.3.1 unist-util-position: 5.0.0 hast-util-to-jsx-runtime@2.3.6: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/hast': 3.0.4 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 @@ -4697,11 +4700,11 @@ snapshots: domhandler: 5.0.3 htmlparser2: 10.1.0 - html-react-parser@5.2.17(@types/react@19.2.14)(react@19.2.5): + html-react-parser@5.2.17(@types/react@19.2.14)(react@19.2.6): dependencies: domhandler: 5.0.3 html-dom-parser: 5.1.8 - react: 19.2.5 + react: 19.2.6 react-property: 2.0.2 style-to-js: 1.1.21 optionalDependencies: @@ -4718,7 +4721,7 @@ snapshots: immer@10.2.0: {} - immer@11.1.4: {} + immer@11.1.8: {} immutable@5.1.5: {} @@ -4778,7 +4781,7 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.16.1: + is-core-module@2.16.2: dependencies: hasown: 2.0.3 @@ -4897,9 +4900,9 @@ snapshots: dependencies: uc.micro: 2.1.0 - little-state-machine@4.8.1(react@19.2.5): + little-state-machine@4.8.1(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 load-json-file@4.0.0: dependencies: @@ -5004,7 +5007,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.0 + '@ungap/structured-clone': 1.3.1 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 @@ -5179,7 +5182,7 @@ snapshots: minimatch@10.2.5: dependencies: - brace-expansion: 5.0.5 + brace-expansion: 5.0.6 minimatch@3.1.5: dependencies: @@ -5195,18 +5198,18 @@ snapshots: motion-utils@12.36.0: {} - motion@12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + motion@12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - framer-motion: 12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + framer-motion: 12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) tslib: 2.8.1 optionalDependencies: '@emotion/is-prop-valid': 1.4.0 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) ms@2.1.3: {} - nanoid@3.3.11: {} + nanoid@3.3.12: {} nice-try@1.0.5: {} @@ -5218,7 +5221,7 @@ snapshots: node-addon-api@7.1.1: optional: true - node-releases@2.0.38: {} + node-releases@2.0.44: {} normalize-package-data@2.5.0: dependencies: @@ -5318,9 +5321,9 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.12: + postcss@8.5.14: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -5342,36 +5345,36 @@ snapshots: radash@12.1.1: {} - react-auth-code-input@3.2.1(react@19.2.5): + react-auth-code-input@3.2.1(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 - react-click-away-listener@2.4.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + react-click-away-listener@2.4.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) - react-dom@19.2.5(react@19.2.5): + react-dom@19.2.6(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 scheduler: 0.27.0 - react-hook-form@7.74.0(react@19.2.5): + react-hook-form@7.75.0(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 - react-hotkeys-hook@5.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + react-hotkeys-hook@5.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) react-is@16.13.1: {} - react-loading-skeleton@3.5.0(react@19.2.5): + react-loading-skeleton@3.5.0(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 - react-markdown@10.1.0(@types/react@19.2.14)(react@19.2.5): + react-markdown@10.1.0(@types/react@19.2.14)(react@19.2.6): dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 @@ -5380,7 +5383,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 mdast-util-to-hast: 13.2.1 - react: 19.2.5 + react: 19.2.6 remark-parse: 11.0.0 remark-rehype: 11.1.2 unified: 11.0.5 @@ -5391,47 +5394,47 @@ snapshots: react-property@2.0.2: {} - react-qr-code@2.0.18(react@19.2.5): + react-qr-code@2.0.21(react@19.2.6): dependencies: prop-types: 15.8.1 qr.js: 0.0.0 - react: 19.2.5 + react: 19.2.6 - react-redux@9.2.0(@types/react@19.2.14)(react@19.2.5)(redux@5.0.1): + react-redux@9.2.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 - react: 19.2.5 - use-sync-external-store: 1.6.0(react@19.2.5) + react: 19.2.6 + use-sync-external-store: 1.6.0(react@19.2.6) optionalDependencies: '@types/react': 19.2.14 redux: 5.0.1 react-refresh@0.18.0: {} - react-router-dom@6.30.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + react-router-dom@6.30.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: '@remix-run/router': 1.23.2 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - react-router: 6.30.3(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-router: 6.30.3(react@19.2.6) - react-router@6.30.3(react@19.2.5): + react-router@6.30.3(react@19.2.6): dependencies: '@remix-run/router': 1.23.2 - react: 19.2.5 + react: 19.2.6 - react-simple-animate@3.5.3(react-dom@19.2.5(react@19.2.5)): + react-simple-animate@3.5.3(react-dom@19.2.6(react@19.2.6)): dependencies: - react-dom: 19.2.5(react@19.2.5) + react-dom: 19.2.6(react@19.2.6) react-use-websocket@4.13.0: {} - react-virtualized-auto-sizer@1.0.26(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + react-virtualized-auto-sizer@1.0.26(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) - react@19.2.5: {} + react@19.2.6: {} read-pkg@3.0.0: dependencies: @@ -5441,21 +5444,21 @@ snapshots: readdirp@4.1.2: {} - recharts@3.8.1(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react-is@16.13.1)(react@19.2.5)(redux@5.0.1): + recharts@3.8.1(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react-is@16.13.1)(react@19.2.6)(redux@5.0.1): dependencies: - '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.5)(redux@5.0.1))(react@19.2.5) + '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1))(react@19.2.6) clsx: 2.1.1 decimal.js-light: 2.5.1 - es-toolkit: 1.46.0 + es-toolkit: 1.46.1 eventemitter3: 5.0.4 immer: 10.2.0 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) react-is: 16.13.1 - react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.5)(redux@5.0.1) + react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1) reselect: 5.1.1 tiny-invariant: 1.3.3 - use-sync-external-store: 1.6.0(react@19.2.5) + use-sync-external-store: 1.6.0(react@19.2.6) victory-vendor: 37.3.6 transitivePeerDependencies: - '@types/react' @@ -5518,39 +5521,39 @@ snapshots: resolve@1.22.12: dependencies: es-errors: 1.3.0 - is-core-module: 2.16.1 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - rollup@4.60.2: + rollup@4.60.3: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.60.2 - '@rollup/rollup-android-arm64': 4.60.2 - '@rollup/rollup-darwin-arm64': 4.60.2 - '@rollup/rollup-darwin-x64': 4.60.2 - '@rollup/rollup-freebsd-arm64': 4.60.2 - '@rollup/rollup-freebsd-x64': 4.60.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.60.2 - '@rollup/rollup-linux-arm-musleabihf': 4.60.2 - '@rollup/rollup-linux-arm64-gnu': 4.60.2 - '@rollup/rollup-linux-arm64-musl': 4.60.2 - '@rollup/rollup-linux-loong64-gnu': 4.60.2 - '@rollup/rollup-linux-loong64-musl': 4.60.2 - '@rollup/rollup-linux-ppc64-gnu': 4.60.2 - '@rollup/rollup-linux-ppc64-musl': 4.60.2 - '@rollup/rollup-linux-riscv64-gnu': 4.60.2 - '@rollup/rollup-linux-riscv64-musl': 4.60.2 - '@rollup/rollup-linux-s390x-gnu': 4.60.2 - '@rollup/rollup-linux-x64-gnu': 4.60.2 - '@rollup/rollup-linux-x64-musl': 4.60.2 - '@rollup/rollup-openbsd-x64': 4.60.2 - '@rollup/rollup-openharmony-arm64': 4.60.2 - '@rollup/rollup-win32-arm64-msvc': 4.60.2 - '@rollup/rollup-win32-ia32-msvc': 4.60.2 - '@rollup/rollup-win32-x64-gnu': 4.60.2 - '@rollup/rollup-win32-x64-msvc': 4.60.2 + '@rollup/rollup-android-arm-eabi': 4.60.3 + '@rollup/rollup-android-arm64': 4.60.3 + '@rollup/rollup-darwin-arm64': 4.60.3 + '@rollup/rollup-darwin-x64': 4.60.3 + '@rollup/rollup-freebsd-arm64': 4.60.3 + '@rollup/rollup-freebsd-x64': 4.60.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.3 + '@rollup/rollup-linux-arm-musleabihf': 4.60.3 + '@rollup/rollup-linux-arm64-gnu': 4.60.3 + '@rollup/rollup-linux-arm64-musl': 4.60.3 + '@rollup/rollup-linux-loong64-gnu': 4.60.3 + '@rollup/rollup-linux-loong64-musl': 4.60.3 + '@rollup/rollup-linux-ppc64-gnu': 4.60.3 + '@rollup/rollup-linux-ppc64-musl': 4.60.3 + '@rollup/rollup-linux-riscv64-gnu': 4.60.3 + '@rollup/rollup-linux-riscv64-musl': 4.60.3 + '@rollup/rollup-linux-s390x-gnu': 4.60.3 + '@rollup/rollup-linux-x64-gnu': 4.60.3 + '@rollup/rollup-linux-x64-musl': 4.60.3 + '@rollup/rollup-openbsd-x64': 4.60.3 + '@rollup/rollup-openharmony-arm64': 4.60.3 + '@rollup/rollup-win32-arm64-msvc': 4.60.3 + '@rollup/rollup-win32-ia32-msvc': 4.60.3 + '@rollup/rollup-win32-x64-gnu': 4.60.3 + '@rollup/rollup-win32-x64-msvc': 4.60.3 fsevents: 2.3.3 rxjs@7.8.2: @@ -5814,7 +5817,7 @@ snapshots: markdown-it: 14.1.1 minimatch: 10.2.5 typescript: 5.9.3 - yaml: 2.8.3 + yaml: 2.9.0 typesafe-i18n@5.27.1(typescript@5.9.3): dependencies: @@ -5872,20 +5875,20 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - use-breakpoint@4.0.10(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + use-breakpoint@4.0.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) - use-deep-compare-effect@1.8.1(react@19.2.5): + use-deep-compare-effect@1.8.1(react@19.2.6): dependencies: '@babel/runtime': 7.29.2 dequal: 2.0.3 - react: 19.2.5 + react: 19.2.6 - use-sync-external-store@1.6.0(react@19.2.5): + use-sync-external-store@1.6.0(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 uuid@8.3.2: {} @@ -5921,19 +5924,19 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite@7.3.2(@types/node@24.12.2)(sass@1.92.1)(yaml@2.8.3): + vite@7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - postcss: 8.5.12 - rollup: 4.60.2 + postcss: 8.5.14 + rollup: 4.60.3 tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 fsevents: 2.3.3 sass: 1.92.1 - yaml: 2.8.3 + yaml: 2.9.0 which-boxed-primitive@1.1.1: dependencies: @@ -5994,7 +5997,7 @@ snapshots: yaml@1.10.3: {} - yaml@2.8.3: {} + yaml@2.9.0: {} yargs-parser@21.1.1: {} @@ -6010,11 +6013,11 @@ snapshots: zod@3.25.76: {} - zustand@5.0.12(@types/react@19.2.14)(immer@11.1.4)(react@19.2.5)(use-sync-external-store@1.6.0(react@19.2.5)): + zustand@5.0.13(@types/react@19.2.14)(immer@11.1.8)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)): optionalDependencies: '@types/react': 19.2.14 - immer: 11.1.4 - react: 19.2.5 - use-sync-external-store: 1.6.0(react@19.2.5) + immer: 11.1.8 + react: 19.2.6 + use-sync-external-store: 1.6.0(react@19.2.6) zwitch@2.0.4: {} diff --git a/src-tauri/.sqlx/query-9137d3329ed718f211b5654af41b297c31706f5a5ad9ac400be116db7113a056.json b/src-tauri/.sqlx/query-50543a38f8f09cd45b16bf8b93d2ff42252aa0833f57c8ffa98e3471b9e663a1.json similarity index 84% rename from src-tauri/.sqlx/query-9137d3329ed718f211b5654af41b297c31706f5a5ad9ac400be116db7113a056.json rename to src-tauri/.sqlx/query-50543a38f8f09cd45b16bf8b93d2ff42252aa0833f57c8ffa98e3471b9e663a1.json index 012a54b34..7692367f0 100644 --- a/src-tauri/.sqlx/query-9137d3329ed718f211b5654af41b297c31706f5a5ad9ac400be116db7113a056.json +++ b/src-tauri/.sqlx/query-50543a38f8f09cd45b16bf8b93d2ff42252aa0833f57c8ffa98e3471b9e663a1.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\" FROM location WHERE instance_id = $1 AND service_location_mode <= $2 ORDER BY name ASC", + "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\",\n posture_check_required FROM location WHERE instance_id = $1 AND service_location_mode <= $2 ORDER BY name ASC", "describe": { "columns": [ { @@ -67,6 +67,11 @@ "name": "service_location_mode: ServiceLocationMode", "ordinal": 12, "type_info": "Integer" + }, + { + "name": "posture_check_required", + "ordinal": 13, + "type_info": "Bool" } ], "parameters": { @@ -85,8 +90,9 @@ false, false, false, + false, false ] }, - "hash": "9137d3329ed718f211b5654af41b297c31706f5a5ad9ac400be116db7113a056" + "hash": "50543a38f8f09cd45b16bf8b93d2ff42252aa0833f57c8ffa98e3471b9e663a1" } diff --git a/src-tauri/.sqlx/query-ea39145f2cdc783bc78b32363cce32a87bd603debccaec23b160150766bdcd9f.json b/src-tauri/.sqlx/query-7b9f3c02d868a7da19beed6aad5ee22962668200b1ffb1fb7df967be5af0c50c.json similarity index 56% rename from src-tauri/.sqlx/query-ea39145f2cdc783bc78b32363cce32a87bd603debccaec23b160150766bdcd9f.json rename to src-tauri/.sqlx/query-7b9f3c02d868a7da19beed6aad5ee22962668200b1ffb1fb7df967be5af0c50c.json index a05f49a06..7eb7d1e7f 100644 --- a/src-tauri/.sqlx/query-ea39145f2cdc783bc78b32363cce32a87bd603debccaec23b160150766bdcd9f.json +++ b/src-tauri/.sqlx/query-7b9f3c02d868a7da19beed6aad5ee22962668200b1ffb1fb7df967be5af0c50c.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "INSERT INTO location (instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode, service_location_mode) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) RETURNING id \"id!\"", + "query": "INSERT INTO location (instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode, service_location_mode, posture_check_required) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13) RETURNING id \"id!\"", "describe": { "columns": [ { @@ -10,11 +10,11 @@ } ], "parameters": { - "Right": 12 + "Right": 13 }, "nullable": [ true ] }, - "hash": "ea39145f2cdc783bc78b32363cce32a87bd603debccaec23b160150766bdcd9f" + "hash": "7b9f3c02d868a7da19beed6aad5ee22962668200b1ffb1fb7df967be5af0c50c" } diff --git a/src-tauri/.sqlx/query-d8d908979a8573ee2c32828fa562d1bf171b4a6e224cc238680e2e856811c62e.json b/src-tauri/.sqlx/query-858556d40a6fc015f2664045a00837ec18e3c0fd94b6ded74a60ac6edc57a5b3.json similarity index 77% rename from src-tauri/.sqlx/query-d8d908979a8573ee2c32828fa562d1bf171b4a6e224cc238680e2e856811c62e.json rename to src-tauri/.sqlx/query-858556d40a6fc015f2664045a00837ec18e3c0fd94b6ded74a60ac6edc57a5b3.json index e023a3a77..c6135a032 100644 --- a/src-tauri/.sqlx/query-d8d908979a8573ee2c32828fa562d1bf171b4a6e224cc238680e2e856811c62e.json +++ b/src-tauri/.sqlx/query-858556d40a6fc015f2664045a00837ec18e3c0fd94b6ded74a60ac6edc57a5b3.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id, instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id,route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\" FROM location WHERE service_location_mode <= $1 ORDER BY name ASC;", + "query": "SELECT id, instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\", posture_check_required FROM location WHERE service_location_mode <= $1 ORDER BY name ASC;", "describe": { "columns": [ { @@ -67,6 +67,11 @@ "name": "service_location_mode: ServiceLocationMode", "ordinal": 12, "type_info": "Integer" + }, + { + "name": "posture_check_required", + "ordinal": 13, + "type_info": "Bool" } ], "parameters": { @@ -85,8 +90,9 @@ false, false, false, + false, false ] }, - "hash": "d8d908979a8573ee2c32828fa562d1bf171b4a6e224cc238680e2e856811c62e" + "hash": "858556d40a6fc015f2664045a00837ec18e3c0fd94b6ded74a60ac6edc57a5b3" } diff --git a/src-tauri/.sqlx/query-76c5c9b75df39afca9cd07530ab0569d3d6f9d8924458c8b357dd400966f4175.json b/src-tauri/.sqlx/query-865203f8f64866f1895aede956dfd8f373772e3c406f4482e6a4022a796cd46b.json similarity index 86% rename from src-tauri/.sqlx/query-76c5c9b75df39afca9cd07530ab0569d3d6f9d8924458c8b357dd400966f4175.json rename to src-tauri/.sqlx/query-865203f8f64866f1895aede956dfd8f373772e3c406f4482e6a4022a796cd46b.json index 9c6f65ed8..ddf2ceb96 100644 --- a/src-tauri/.sqlx/query-76c5c9b75df39afca9cd07530ab0569d3d6f9d8924458c8b357dd400966f4175.json +++ b/src-tauri/.sqlx/query-865203f8f64866f1895aede956dfd8f373772e3c406f4482e6a4022a796cd46b.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\" FROM location WHERE id = $1", + "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\",\n posture_check_required FROM location WHERE id = $1", "describe": { "columns": [ { @@ -67,6 +67,11 @@ "name": "service_location_mode: ServiceLocationMode", "ordinal": 12, "type_info": "Integer" + }, + { + "name": "posture_check_required", + "ordinal": 13, + "type_info": "Bool" } ], "parameters": { @@ -85,8 +90,9 @@ false, false, false, + false, false ] }, - "hash": "76c5c9b75df39afca9cd07530ab0569d3d6f9d8924458c8b357dd400966f4175" + "hash": "865203f8f64866f1895aede956dfd8f373772e3c406f4482e6a4022a796cd46b" } diff --git a/src-tauri/.sqlx/query-b882379427740576d70c89eaeb815dede3c312162dcc73cea9c883289ba9fa8e.json b/src-tauri/.sqlx/query-95133767a4ebbd331c17667752e9603c2d351b677f6fac46e944d34b4913ab71.json similarity index 60% rename from src-tauri/.sqlx/query-b882379427740576d70c89eaeb815dede3c312162dcc73cea9c883289ba9fa8e.json rename to src-tauri/.sqlx/query-95133767a4ebbd331c17667752e9603c2d351b677f6fac46e944d34b4913ab71.json index 5163c8ca3..372f9e15a 100644 --- a/src-tauri/.sqlx/query-b882379427740576d70c89eaeb815dede3c312162dcc73cea9c883289ba9fa8e.json +++ b/src-tauri/.sqlx/query-95133767a4ebbd331c17667752e9603c2d351b677f6fac46e944d34b4913ab71.json @@ -1,12 +1,12 @@ { "db_name": "SQLite", - "query": "UPDATE location SET instance_id = $1, name = $2, address = $3, pubkey = $4, endpoint = $5, allowed_ips = $6, dns = $7, network_id = $8, route_all_traffic = $9, keepalive_interval = $10, location_mfa_mode = $11, service_location_mode = $12 WHERE id = $13", + "query": "UPDATE location SET instance_id = $1, name = $2, address = $3, pubkey = $4, endpoint = $5, allowed_ips = $6, dns = $7, network_id = $8, route_all_traffic = $9, keepalive_interval = $10, location_mfa_mode = $11, service_location_mode = $12, posture_check_required = $13 WHERE id = $14", "describe": { "columns": [], "parameters": { - "Right": 13 + "Right": 14 }, "nullable": [] }, - "hash": "b882379427740576d70c89eaeb815dede3c312162dcc73cea9c883289ba9fa8e" + "hash": "95133767a4ebbd331c17667752e9603c2d351b677f6fac46e944d34b4913ab71" } diff --git a/src-tauri/.sqlx/query-85f8edf373d3bf1d405a8fed804d9d04839e69a6c2c5cb8ad5c2f8e19547a2f6.json b/src-tauri/.sqlx/query-ec008998cc09e79017a3edd82550df0afd4bd8488391475908272d9cf7c6dbd0.json similarity index 86% rename from src-tauri/.sqlx/query-85f8edf373d3bf1d405a8fed804d9d04839e69a6c2c5cb8ad5c2f8e19547a2f6.json rename to src-tauri/.sqlx/query-ec008998cc09e79017a3edd82550df0afd4bd8488391475908272d9cf7c6dbd0.json index 1615e9b40..dd6d4011f 100644 --- a/src-tauri/.sqlx/query-85f8edf373d3bf1d405a8fed804d9d04839e69a6c2c5cb8ad5c2f8e19547a2f6.json +++ b/src-tauri/.sqlx/query-ec008998cc09e79017a3edd82550df0afd4bd8488391475908272d9cf7c6dbd0.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\" FROM location WHERE pubkey = $1;", + "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\",\n posture_check_required FROM location WHERE pubkey = $1;", "describe": { "columns": [ { @@ -67,6 +67,11 @@ "name": "service_location_mode: ServiceLocationMode", "ordinal": 12, "type_info": "Integer" + }, + { + "name": "posture_check_required", + "ordinal": 13, + "type_info": "Bool" } ], "parameters": { @@ -85,8 +90,9 @@ false, false, false, + false, false ] }, - "hash": "85f8edf373d3bf1d405a8fed804d9d04839e69a6c2c5cb8ad5c2f8e19547a2f6" + "hash": "ec008998cc09e79017a3edd82550df0afd4bd8488391475908272d9cf7c6dbd0" } diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 8da067606..8ebb68502 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -727,6 +727,15 @@ dependencies = [ "alloc-stdlib", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bumpalo" version = "3.20.2" @@ -863,9 +872,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.61" +version = "1.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" dependencies = [ "find-msvc-tools", "jobserver", @@ -1037,9 +1046,9 @@ dependencies = [ [[package]] name = "common" -version = "1.6.8" +version = "1.6.9" dependencies = [ - "nix 0.31.2", + "nix 0.31.3", ] [[package]] @@ -1077,12 +1086,6 @@ dependencies = [ "tiny-keccak", ] -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - [[package]] name = "cookie" version = "0.18.1" @@ -1236,23 +1239,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "cssparser" -version = "0.29.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa", - "matches", - "phf 0.10.1", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", -] - [[package]] name = "cssparser" version = "0.36.0" @@ -1262,7 +1248,7 @@ dependencies = [ "cssparser-macros", "dtoa-short", "itoa", - "phf 0.13.1", + "phf", "smallvec", ] @@ -1421,7 +1407,7 @@ dependencies = [ [[package]] name = "defguard-client" -version = "1.6.8" +version = "1.6.9" dependencies = [ "anyhow", "async-stream", @@ -1437,14 +1423,14 @@ dependencies = [ "hyper-util", "known-folders", "log", - "nix 0.31.2", + "nix 0.31.3", "objc2 0.6.4", "objc2-foundation 0.3.2", "objc2-network-extension", "os_info", "prost", "regex", - "reqwest 0.13.2", + "reqwest 0.13.3", "rust-ini", "semver", "serde", @@ -1453,7 +1439,7 @@ dependencies = [ "sqlx", "struct-patch", "strum", - "swift-rs", + "sysinfo", "tauri", "tauri-build", "tauri-plugin-clipboard-manager", @@ -1486,19 +1472,20 @@ dependencies = [ "windows-acl", "windows-service", "windows-sys 0.61.2", + "wmi", "x25519-dalek", ] [[package]] name = "defguard-dg" -version = "1.6.8" +version = "1.6.9" dependencies = [ "clap", "common", "defguard_wireguard_rs", "dirs-next", "prost", - "reqwest 0.13.2", + "reqwest 0.13.3", "serde", "serde_json", "thiserror 2.0.18", @@ -1525,7 +1512,7 @@ dependencies = [ "ip_network", "ip_network_table", "libc", - "nix 0.31.2", + "nix 0.31.3", "parking_lot", "ring", "socket2", @@ -1538,9 +1525,9 @@ dependencies = [ [[package]] name = "defguard_wireguard_rs" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6805597cb34bef686b2c3f732ca1f88e6de676d92d43acd632ea5aae5169466" +checksum = "c25476f197cec498e72de55dcaa34f966720ae000eda3171f5144f0433256acc" dependencies = [ "base64 0.22.1", "defguard_boringtun", @@ -1553,7 +1540,7 @@ dependencies = [ "netlink-packet-utils", "netlink-packet-wireguard", "netlink-sys", - "nix 0.31.2", + "nix 0.31.3", "regex", "serde", "thiserror 2.0.18", @@ -1614,19 +1601,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "derive_more" -version = "0.99.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 2.0.117", -] - [[package]] name = "derive_more" version = "2.1.1" @@ -1773,12 +1747,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" dependencies = [ "bit-set", - "cssparser 0.36.0", + "cssparser", "foldhash 0.2.0", - "html5ever 0.38.0", + "html5ever", "precomputed-hash", - "selectors 0.36.1", - "tendril 0.5.0", + "selectors", + "tendril", ] [[package]] @@ -1998,23 +1972,9 @@ checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "fax" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" -dependencies = [ - "fax_derive", -] - -[[package]] -name = "fax_derive" -version = "0.2.0" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] +checksum = "caf1079563223d5d59d83c85886a56e586cfd5c1a26292e971a0fa266531ac5a" [[package]] name = "fdeflate" @@ -2174,13 +2134,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] -name = "futf" -version = "0.1.5" +name = "futures" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ - "mac", - "new_debug_unreachable", + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", ] [[package]] @@ -2269,6 +2234,7 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ + "futures-channel", "futures-core", "futures-io", "futures-macro", @@ -2279,15 +2245,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - [[package]] name = "gdk" version = "0.18.2" @@ -2407,17 +2364,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "getrandom" version = "0.2.17" @@ -2427,7 +2373,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] @@ -2644,9 +2590,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" +checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733" dependencies = [ "atomic-waker", "bytes", @@ -2700,9 +2646,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "hashlink" @@ -2764,18 +2710,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "html5ever" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" -dependencies = [ - "log", - "mac", - "markup5ever 0.14.1", - "match_token", -] - [[package]] name = "html5ever" version = "0.38.0" @@ -2783,7 +2717,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" dependencies = [ "log", - "markup5ever 0.38.0", + "markup5ever", ] [[package]] @@ -2920,7 +2854,7 @@ dependencies = [ "tokio", "tower-service", "tracing", - "windows-registry", + "windows-registry 0.6.1", ] [[package]] @@ -3064,9 +2998,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", @@ -3104,7 +3038,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.17.0", + "hashbrown 0.17.1", "serde", "serde_core", ] @@ -3155,16 +3089,6 @@ version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" -[[package]] -name = "iri-string" -version = "0.7.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "is-docker" version = "0.2.0" @@ -3314,9 +3238,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.95" +version = "0.3.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" +checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" dependencies = [ "cfg-if", "futures-util", @@ -3366,18 +3290,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "kuchikiki" -version = "0.8.8-speedreader" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" -dependencies = [ - "cssparser 0.29.6", - "html5ever 0.29.1", - "indexmap 2.14.0", - "selectors 0.24.0", -] - [[package]] name = "kv-log-macro" version = "1.0.7" @@ -3443,9 +3355,9 @@ dependencies = [ [[package]] name = "libgit2-sys" -version = "0.18.3+1.9.2" +version = "0.18.4+1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9b3acc4b91781bb0b3386669d325163746af5f6e4f73e6d2d630e09a35f3487" +checksum = "9b26f66f35e1871b22efcf7191564123d2a446ca0538cde63c23adfefa9b15b7" dependencies = [ "cc", "libc", @@ -3488,7 +3400,7 @@ dependencies = [ "bitflags 2.11.1", "libc", "plain", - "redox_syscall 0.7.4", + "redox_syscall 0.7.5", ] [[package]] @@ -3557,12 +3469,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - [[package]] name = "mac-notification-sys" version = "0.6.12" @@ -3575,20 +3481,6 @@ dependencies = [ "time", ] -[[package]] -name = "markup5ever" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" -dependencies = [ - "log", - "phf 0.11.3", - "phf_codegen 0.11.3", - "string_cache 0.8.9", - "string_cache_codegen 0.5.4", - "tendril 0.4.3", -] - [[package]] name = "markup5ever" version = "0.38.0" @@ -3596,21 +3488,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" dependencies = [ "log", - "tendril 0.5.0", + "tendril", "web_atoms", ] -[[package]] -name = "match_token" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "matchers" version = "0.2.0" @@ -3620,12 +3501,6 @@ dependencies = [ "regex-automata", ] -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - [[package]] name = "matchit" version = "0.8.4" @@ -3686,7 +3561,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "windows-sys 0.61.2", ] @@ -3794,9 +3669,9 @@ dependencies = [ [[package]] name = "netlink-packet-route" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9854ea6ad14e3f4698a7f03b65bce0833dd2d81d594a0e4a984170537146b6" +checksum = "be8919612f6028ab4eacbbfe1234a9a43e3722c6e0915e7ff519066991905092" dependencies = [ "bitflags 2.11.1", "libc", @@ -3817,9 +3692,9 @@ dependencies = [ [[package]] name = "netlink-packet-wireguard" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037892b0e01ce41f30398a47be2051e712a2cf1eed9cb7e5e6a92b05c423255b" +checksum = "205d2bad950c9cbbbf08cc5432d6501edfe02d3a34ecad822a3e91c98e97dbf6" dependencies = [ "libc", "log", @@ -3858,9 +3733,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.31.2" +version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3" +checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" dependencies = [ "bitflags 2.11.1", "cfg-if", @@ -3869,12 +3744,6 @@ dependencies = [ "memoffset", ] -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - [[package]] name = "nom" version = "7.1.3" @@ -3896,9 +3765,9 @@ dependencies = [ [[package]] name = "notify-rust" -version = "4.16.0" +version = "4.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e551a9f0db223eaf3eb156906f99f46897fd951ee66dd1cb0be14db4d36d2fa" +checksum = "50ff2e74231b72c832d82982193b417f230945be6bdb5575b251d941d31adb00" dependencies = [ "futures-lite", "log", @@ -3908,6 +3777,15 @@ dependencies = [ "zbus", ] +[[package]] +name = "ntapi" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae" +dependencies = [ + "winapi", +] + [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -4157,6 +4035,16 @@ dependencies = [ "objc2-core-foundation", ] +[[package]] +name = "objc2-io-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" +dependencies = [ + "libc", + "objc2-core-foundation", +] + [[package]] name = "objc2-io-surface" version = "0.3.2" @@ -4270,9 +4158,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "open" -version = "5.3.4" +version = "5.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3bab717c29a857abf75fcef718d441ec7cb2725f937343c734740a985d37fd" +checksum = "2fbaa89d2ddc8473c78a3adf69eea8cffa28c483b8e02a971ef31527cd0fc92c" dependencies = [ "dunce", "is-wsl", @@ -4382,7 +4270,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -4483,104 +4371,25 @@ dependencies = [ "indexmap 2.14.0", ] -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_shared 0.8.0", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_macros 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_shared 0.11.3", -] - [[package]] name = "phf" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ - "phf_macros 0.13.1", - "phf_shared 0.13.1", + "phf_macros", + "phf_shared", "serde", ] -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_codegen" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", -] - [[package]] name = "phf_codegen" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.6", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared 0.11.3", - "rand 0.8.6", + "phf_generator", + "phf_shared", ] [[package]] @@ -4590,21 +4399,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" dependencies = [ "fastrand", - "phf_shared 0.13.1", -] - -[[package]] -name = "phf_macros" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", + "phf_shared", ] [[package]] @@ -4613,63 +4408,36 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", + "phf_generator", + "phf_shared", "proc-macro2", "quote", "syn 2.0.117", ] -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher 0.3.11", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher 0.3.11", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher 1.0.2", -] - [[package]] name = "phf_shared" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" dependencies = [ - "siphasher 1.0.2", + "siphasher", ] [[package]] name = "pin-project" -version = "1.1.11" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" +checksum = "cbf0d9e68100b3a7989b4901972f265cd542e560a3a8a724e1e20322f4d06ce9" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.11" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" +checksum = "a990e22f43e84855daf260dded30524ef4a9021cc7541c26540500a50b624389" dependencies = [ "proc-macro2", "quote", @@ -4740,7 +4508,7 @@ checksum = "092791278e026273c1b65bbdcfbba3a300f2994c896bd01ab01da613c29c46f1" dependencies = [ "base64 0.22.1", "indexmap 2.14.0", - "quick-xml 0.39.2", + "quick-xml 0.39.4", "serde", "time", ] @@ -4889,12 +4657,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - [[package]] name = "proc-macro2" version = "1.0.106" @@ -5036,9 +4798,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.39.2" +version = "0.39.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958f21e8e7ceb5a1aa7fa87fab28e7c75976e0bfe7e23ff069e0a260f894067d" +checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" dependencies = [ "memchr", ] @@ -5126,20 +4888,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - [[package]] name = "rand" version = "0.8.6" @@ -5161,16 +4909,6 @@ dependencies = [ "rand_core 0.9.5", ] -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - [[package]] name = "rand_chacha" version = "0.3.1" @@ -5191,15 +4929,6 @@ dependencies = [ "rand_core 0.9.5", ] -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - [[package]] name = "rand_core" version = "0.6.4" @@ -5218,24 +4947,6 @@ dependencies = [ "getrandom 0.3.4", ] -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - [[package]] name = "raw-window-handle" version = "0.6.2" @@ -5253,9 +4964,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" +checksum = "4666a1a60d8412eab19d94f6d13dcc9cea0a5ef4fdf6a5db306537413c661b1b" dependencies = [ "bitflags 2.11.1", ] @@ -5388,9 +5099,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" +checksum = "62e0021ea2c22aed41653bc7e1419abb2c97e038ff2c33d0e1309e49a97deec0" dependencies = [ "base64 0.22.1", "bytes", @@ -5533,9 +5244,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.41.0" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ce901f9a19d251159075a4c37af514c3b8ef99c22e02dd8c19161cf397ee94a" +checksum = "0c5108e3d4d903e21aac27f12ba5377b6b34f9f44b325e4894c7924169d06995" dependencies = [ "arrayvec", "borsh", @@ -5578,9 +5289,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.39" +version = "0.23.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2c118cb077cca2822033836dfb1b975355dfb784b5e8da48f7b6c5db74e60e" +checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" dependencies = [ "aws-lc-rs", "log", @@ -5616,13 +5327,13 @@ dependencies = [ [[package]] name = "rustls-platform-verifier" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" dependencies = [ "core-foundation 0.10.1", "core-foundation-sys", - "jni 0.21.1", + "jni 0.22.4", "log", "once_cell", "rustls", @@ -5789,24 +5500,6 @@ dependencies = [ "libc", ] -[[package]] -name = "selectors" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" -dependencies = [ - "bitflags 1.3.2", - "cssparser 0.29.6", - "derive_more 0.99.20", - "fxhash", - "log", - "phf 0.8.0", - "phf_codegen 0.8.0", - "precomputed-hash", - "servo_arc 0.2.0", - "smallvec", -] - [[package]] name = "selectors" version = "0.36.1" @@ -5814,15 +5507,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" dependencies = [ "bitflags 2.11.1", - "cssparser 0.36.0", - "derive_more 2.1.1", + "cssparser", + "derive_more", "log", "new_debug_unreachable", - "phf 0.13.1", - "phf_codegen 0.13.1", + "phf", + "phf_codegen", "precomputed-hash", "rustc-hash", - "servo_arc 0.4.3", + "servo_arc", "smallvec", ] @@ -5945,11 +5638,12 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.18.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f" +checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2" dependencies = [ "base64 0.22.1", + "bs58", "chrono", "hex", "indexmap 1.9.3", @@ -5964,9 +5658,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.18.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65" +checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac" dependencies = [ "darling 0.23.0", "proc-macro2", @@ -5996,16 +5690,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "servo_arc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - [[package]] name = "servo_arc" version = "0.4.3" @@ -6096,15 +5780,9 @@ checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "siphasher" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "slab" @@ -6412,19 +6090,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "string_cache" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared 0.11.3", - "precomputed-hash", - "serde", -] - [[package]] name = "string_cache" version = "0.9.0" @@ -6433,30 +6098,18 @@ checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" dependencies = [ "new_debug_unreachable", "parking_lot", - "phf_shared 0.13.1", + "phf_shared", "precomputed-hash", ] -[[package]] -name = "string_cache_codegen" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", -] - [[package]] name = "string_cache_codegen" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", + "phf_generator", + "phf_shared", "proc-macro2", "quote", ] @@ -6480,18 +6133,18 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "struct-patch" -version = "0.10.5" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d4caaaccd69c9b56c5f5b33d4dca462464d3275230e4d2d3739ba6d4bf5bcb" +checksum = "f19113e4a69e522707bfc091d0bf34def27cb734506a58e086288bec295093ac" dependencies = [ "struct-patch-derive", ] [[package]] name = "struct-patch-derive" -version = "0.10.5" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1671c6f0992b1b4cb4f5f8ea4a58f9a5f7f895a7638ef9690633dcec0aa67944" +checksum = "65b68ee01d5cbcd4f403fd8a9cb4ad1af95debf22d66de15603afe3f74598e45" dependencies = [ "proc-macro2", "quote", @@ -6593,6 +6246,20 @@ dependencies = [ "libc", ] +[[package]] +name = "sysinfo" +version = "0.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4deba334e1190ba7cb498327affa11e5ece10d26a30ab2f27fcf09504b8d8b6" +dependencies = [ + "libc", + "memchr", + "ntapi", + "objc2-core-foundation", + "objc2-io-kit", + "windows 0.62.2", +] + [[package]] name = "system-configuration" version = "0.7.0" @@ -6721,7 +6388,7 @@ dependencies = [ "percent-encoding", "plist", "raw-window-handle", - "reqwest 0.13.2", + "reqwest 0.13.3", "serde", "serde_json", "serde_repr", @@ -6806,9 +6473,9 @@ dependencies = [ [[package]] name = "tauri-plugin" -version = "2.5.4" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddde7d51c907b940fb573006cdda9a642d6a7c8153657e88f8a5c3c9290cd4aa" +checksum = "eefb2c18e8a605c23edb48fc56bb77381199e1a1e7f6ff0c9b970afe7b3cb8ee" dependencies = [ "anyhow", "glob", @@ -6817,7 +6484,6 @@ dependencies = [ "serde", "serde_json", "tauri-utils", - "toml 0.9.12+spec-1.1.0", "walkdir", ] @@ -6838,9 +6504,9 @@ dependencies = [ [[package]] name = "tauri-plugin-deep-link" -version = "2.4.7" +version = "2.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94deb2e2e4641514ac496db2cddcfc850d6fc9d51ea17b82292a0490bd20ba5b" +checksum = "70ee75bc5627f77bfdf40c913255ebc258117b10ebe2b2239a1a1cf40b0b58aa" dependencies = [ "dunce", "plist", @@ -6853,15 +6519,15 @@ dependencies = [ "thiserror 2.0.18", "tracing", "url", - "windows-registry", + "windows-registry 0.5.3", "windows-result 0.3.4", ] [[package]] name = "tauri-plugin-dialog" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1fa4150c95ae391946cc8b8f905ab14797427caba3a8a2f79628e956da91809" +checksum = "65981abb771e74e571a38196c3baa11c459379164791eba0e67abc1a5fac9884" dependencies = [ "log", "raw-window-handle", @@ -6877,9 +6543,9 @@ dependencies = [ [[package]] name = "tauri-plugin-fs" -version = "2.5.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36e1ec28b79f3d0683f4507e1615c36292c0ea6716668770d4396b9b39871ed8" +checksum = "b7ecc274121aca0c036a2b42d1cbe83d368d348f54e0bb8a735c2b1548e8f371" dependencies = [ "anyhow", "dunce", @@ -6895,15 +6561,15 @@ dependencies = [ "tauri-plugin", "tauri-utils", "thiserror 2.0.18", - "toml 0.9.12+spec-1.1.0", + "toml 1.1.2+spec-1.1.0", "url", ] [[package]] name = "tauri-plugin-http" -version = "2.5.8" +version = "2.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfba7d4ec72763f9d1fdf73c217747f01e2c84b08b87a8cacd2f94f35853f84d" +checksum = "b5bd512048e1985b7ec78f96d99083e2ddaf7e0d906b2b63c44ce5bb8b894067" dependencies = [ "bytes", "cookie_store", @@ -6966,9 +6632,9 @@ dependencies = [ [[package]] name = "tauri-plugin-opener" -version = "2.5.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc624469b06f59f5a29f874bbc61a2ed737c0f9c23ef09855a292c389c42e83f" +checksum = "17e1bea14edce6b793a04e2417e3fd924b9bc4faae83cdee7d714156cceeed29" dependencies = [ "dunce", "glob", @@ -7016,9 +6682,9 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" -version = "2.4.0" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc61e4822b8f74d68278e09161d3e3fdd1b14b9eb781e24edccaabf10c420e8c" +checksum = "5c8f29386f5e9fdc699182388a33ee80a56de436d91b67459e86afef426282af" dependencies = [ "serde", "serde_json", @@ -7109,14 +6775,12 @@ dependencies = [ "dom_query", "dunce", "glob", - "html5ever 0.29.1", "http", "infer", "json-patch", - "kuchikiki", "log", "memchr", - "phf 0.13.1", + "phf", "plist", "proc-macro2", "quote", @@ -7172,17 +6836,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - [[package]] name = "tendril" version = "0.5.0" @@ -7334,9 +6987,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.1" +version = "1.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ "bytes", "libc", @@ -7526,9 +7179,9 @@ checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] name = "tonic" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fec7c61a0695dc1887c1b53952990f3ad2e3a31453e1f49f10e75424943a93ec" +checksum = "ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef" dependencies = [ "async-trait", "axum", @@ -7558,9 +7211,9 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1882ac3bf5ef12877d7ed57aad87e75154c11931c2ba7e6cde5e22d63522c734" +checksum = "c68f61875ac5293cf72e6c8cf0158086428c82c37229e98c840878f1706b0322" dependencies = [ "prettyplease", "proc-macro2", @@ -7570,9 +7223,9 @@ dependencies = [ [[package]] name = "tonic-prost" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55376a0bbaa4975a3f10d009ad763d8f4108f067c7c2e74f3001fb49778d309" +checksum = "50849f68853be452acf590cde0b146665b8d507b3b8af17261df47e02c209ea0" dependencies = [ "bytes", "prost", @@ -7581,9 +7234,9 @@ dependencies = [ [[package]] name = "tonic-prost-build" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3144df636917574672e93d0f56d7edec49f90305749c668df5101751bb8f95a" +checksum = "654e5643eff75d7f8c99197ce1440ed19a3474eada74c12bbac488b2cafdae27" dependencies = [ "prettyplease", "proc-macro2", @@ -7616,20 +7269,20 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.8" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +checksum = "68d6fdd9f81c2819c9a8b0e0cd91660e7746a8e6ea2ba7c6b2b057985f6bcb51" dependencies = [ "bitflags 2.11.1", "bytes", "futures-util", "http", "http-body", - "iri-string", "pin-project-lite", "tower", "tower-layer", "tower-service", + "url", ] [[package]] @@ -7983,7 +7636,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "431d2f443e7828a6c29d188de98b6771a6491ee98bba2d4372643bf93f988a18" dependencies = [ "anyhow", - "siphasher 1.0.2", + "siphasher", "uniffi_internal_macros", "uniffi_pipeline", ] @@ -8198,12 +7851,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -8236,9 +7883,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.118" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" +checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" dependencies = [ "cfg-if", "once_cell", @@ -8249,9 +7896,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.68" +version = "0.4.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1ebf8" +checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" dependencies = [ "js-sys", "wasm-bindgen", @@ -8259,9 +7906,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.118" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" +checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8269,9 +7916,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.118" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" +checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" dependencies = [ "bumpalo", "proc-macro2", @@ -8282,9 +7929,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.118" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" +checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" dependencies = [ "unicode-ident", ] @@ -8393,7 +8040,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" dependencies = [ "proc-macro2", - "quick-xml 0.39.2", + "quick-xml 0.39.4", "quote", ] @@ -8408,9 +8055,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.95" +version = "0.3.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d" +checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" dependencies = [ "js-sys", "wasm-bindgen", @@ -8432,10 +8079,10 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7cff6eef815df1834fd250e3a2ff436044d82a9f1bc1980ca1dbdf07effc538" dependencies = [ - "phf 0.13.1", - "phf_codegen 0.13.1", - "string_cache 0.9.0", - "string_cache_codegen 0.6.1", + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", ] [[package]] @@ -8611,7 +8258,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -8803,6 +8450,17 @@ dependencies = [ "windows-strings 0.4.2", ] +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + [[package]] name = "windows-result" version = "0.3.4" @@ -8823,13 +8481,13 @@ dependencies = [ [[package]] name = "windows-service" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193cae8e647981c35bc947fdd57ba7928b1fa0d4a79305f6dd2dc55221ac35ac" +checksum = "857224b3b211c6f3616921f081ee54721ee3ad2ace2fac6a6337e032f7b4dcf2" dependencies = [ "bitflags 2.11.1", "widestring 1.2.1", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -9349,6 +9007,20 @@ dependencies = [ "wayland-protocols-wlr", ] +[[package]] +name = "wmi" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c81b85c57a57500e56669586496bf2abd5cf082b9d32995251185d105208b64" +dependencies = [ + "futures", + "log", + "serde", + "thiserror 2.0.18", + "windows 0.62.2", + "windows-core 0.62.2", +] + [[package]] name = "writeable" version = "0.6.3" @@ -9564,9 +9236,9 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] @@ -9659,9 +9331,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.10.1" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db0ecb8987cf5e92653c57c098f7f0e39a03112edb796f4fe089fb7eaa14ff" +checksum = "1c1567a6ec68df868cbbfde844cfc6d81649fe5109a62b116b19fabd53e618ee" dependencies = [ "endi", "enumflags2", @@ -9674,9 +9346,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.10.1" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b949b639ab1b4bed763aa7481ba0e368af68d8b55532f8ed4bec86a59f2ca98" +checksum = "c7d5b780599bbde114e39d9a0799577fad1ced5105d38515745f7b3099d8ceda" dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 9cb9ddba0..c7fe49e15 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -30,8 +30,8 @@ authors = ["Defguard"] edition = "2021" homepage = "https://github.com/DefGuard/client" license-file = "../LICENSE.md" -rust-version = "1.87" -version = "1.6.8" +rust-version = "1.95" +version = "1.6.9" [package] name = "defguard-client" @@ -69,6 +69,7 @@ defguard_wireguard_rs = { workspace = true, features = ["check_dependencies"] } dirs-next.workspace = true hyper-util = "0.1" log = { version = "0.4", features = ["serde"] } +os_info = { version = "3.14", default-features = false } prost.workspace = true regex = "1.12" reqwest.workspace = true @@ -84,8 +85,9 @@ sqlx = { version = "0.8", features = [ "uuid", "macros", ] } -struct-patch = "0.10" +struct-patch = "0.12" strum = { version = "0.28", features = ["derive"] } +sysinfo = { version = "0.39", default-features = false, features = ["apple-app-store", "system"] } tauri = { version = "2", features = [ "native-tls-vendored", "image-png", @@ -120,7 +122,6 @@ x25519-dalek = { version = "2", features = [ "serde", "static_secrets", ] } -os_info = "3.12" [target.'cfg(target_os = "macos")'.dependencies] block2 = "0.6" @@ -128,9 +129,6 @@ objc2 = "0.6" objc2-foundation = "0.3" objc2-network-extension = "0.3" -[target.'cfg(target_os = "macos")'.build-dependencies] -swift-rs = { version = "1.0", features = ["build"] } - [target.'cfg(unix)'.dependencies] nix = { version = "0.31", features = ["user", "fs"] } tokio-stream = "0.1" @@ -164,6 +162,7 @@ windows-sys = { version = "0.61", features = [ # Network address change notifications (NotifyAddrChange) "Win32_NetworkManagement_IpHelper", ] } +wmi = {version = "0.18", default-features = false} [features] # this feature is used for production builds or when `devPath` points to the filesystem and the built-in dev server is disabled. diff --git a/src-tauri/build.rs b/src-tauri/build.rs index c9a18d781..3be5441f4 100644 --- a/src-tauri/build.rs +++ b/src-tauri/build.rs @@ -19,8 +19,13 @@ fn main() -> Result<(), Box> { // Make all messages serde-serializable. .type_attribute(".", "#[derive(serde::Serialize,serde::Deserialize)]") .compile_protos( - &["proto/client/client.proto", "proto/core/proxy.proto"], - &["proto/client", "proto/core"], + &[ + "proto/v1/client/client.proto", + "proto/v1/core/proxy.proto", + "proto/enterprise/v2/posture/posture.proto", + "proto/common/client_types.proto", + ], + &["proto"], )?; tauri_build::build(); diff --git a/src-tauri/cli/build.rs b/src-tauri/cli/build.rs index fb4ca05e1..a25227de8 100644 --- a/src-tauri/cli/build.rs +++ b/src-tauri/cli/build.rs @@ -10,7 +10,7 @@ fn main() -> Result<(), Box> { ) // Make all messages serde-serializable. .type_attribute(".", "#[derive(serde::Deserialize,serde::Serialize)]") - .compile_protos(&["../proto/core/proxy.proto"], &["../proto/core"])?; + .compile_protos(&["../proto/v1/core/proxy.proto"], &["../proto"])?; Ok(()) } diff --git a/src-tauri/cli/src/bin/dg.rs b/src-tauri/cli/src/bin/dg.rs index 13c20b7e8..f485b09dd 100644 --- a/src-tauri/cli/src/bin/dg.rs +++ b/src-tauri/cli/src/bin/dg.rs @@ -19,6 +19,10 @@ use defguard_wireguard_rs::{ error::WireguardInterfaceError, key::Key, net::IpAddrMask, peer::Peer, InterfaceConfiguration, WGApi, WireguardInterfaceApi, }; +use proto::defguard::client_types::{ + Device, DeviceConfig, DeviceConfigResponse, EnrollmentStartRequest, EnrollmentStartResponse, + InstanceInfo, InstanceInfoRequest, InstanceInfoResponse, NewDevice, +}; use reqwest::{Client, StatusCode, Url}; use serde::{Deserialize, Serialize}; use thiserror::Error; @@ -31,15 +35,37 @@ use tracing::{debug, error, info, level_filters::LevelFilter, trace, warn}; use tracing_subscriber::EnvFilter; mod proto { - include!(concat!(env!("OUT_DIR"), "/defguard.proxy.rs")); + pub mod defguard { + pub mod client_types { + include!(concat!(env!("OUT_DIR"), "/defguard.client_types.rs")); + } + + #[allow(dead_code)] + pub mod enterprise { + pub mod posture { + pub mod v2 { + include!(concat!( + env!("OUT_DIR"), + "/defguard.enterprise.posture.v2.rs" + )); + } + } + } + + pub mod proxy { + pub mod v1 { + include!(concat!(env!("OUT_DIR"), "/defguard.proxy.v1.rs")); + } + } + } } #[derive(Clone, Default, Deserialize, Serialize)] struct CliConfig { private_key: Key, - device: proto::Device, - device_config: proto::DeviceConfig, - instance_info: proto::InstanceInfo, + device: Device, + device_config: DeviceConfig, + instance_info: InstanceInfo, // polling token used for further client-core communication token: Option, } @@ -283,11 +309,11 @@ async fn enroll(base_url: &Url, token: String) -> Result { url.set_path("/api/v1/enrollment/start"); let result = client .post(url) - .json(&proto::EnrollmentStartRequest { token }) + .json(&EnrollmentStartRequest { token }) .send() .await?; - let response: proto::EnrollmentStartResponse = if result.status() == StatusCode::OK { + let response: EnrollmentStartResponse = if result.status() == StatusCode::OK { let result = result.json().await?; debug!( "Enrollment start request has been successfully sent to Defguard Proxy. Received a \ @@ -314,7 +340,7 @@ async fn enroll(base_url: &Url, token: String) -> Result { url.set_path("/api/v1/enrollment/create_device"); let result = client .post(url) - .json(&proto::NewDevice { + .json(&NewDevice { // The name is ignored by the server as it's set by the user before the enrollment. name: String::new(), pubkey: pubkey.to_string(), @@ -323,7 +349,7 @@ async fn enroll(base_url: &Url, token: String) -> Result { .send() .await?; - let response: proto::DeviceConfigResponse = if result.status() == StatusCode::OK { + let response: DeviceConfigResponse = if result.status() == StatusCode::OK { let result = result.json().await?; debug!( "The device public key has been successfully sent to Defguard Proxy. The device should \ @@ -367,19 +393,15 @@ const INTERVAL_SECONDS: Duration = Duration::from_secs(30); const HTTP_REQ_TIMEOUT: Duration = Duration::from_secs(5); /// Fetch configuration from Defguard proxy. -async fn fetch_config( - client: &Client, - url: Url, - token: String, -) -> Result { +async fn fetch_config(client: &Client, url: Url, token: String) -> Result { let result = client .post(url.clone()) - .json(&proto::InstanceInfoRequest { token }) + .json(&InstanceInfoRequest { token }) .timeout(HTTP_REQ_TIMEOUT) .send() .await?; - let instance_response: proto::InstanceInfoResponse = if result.status() == StatusCode::OK { + let instance_response: InstanceInfoResponse = if result.status() == StatusCode::OK { result.json().await? } else if result.status() == StatusCode::PAYMENT_REQUIRED { return Err(CliError::EnterpriseDisabled); diff --git a/src-tauri/migrations/20260511093103_posture_check_required.sql b/src-tauri/migrations/20260511093103_posture_check_required.sql new file mode 100644 index 000000000..c9743138e --- /dev/null +++ b/src-tauri/migrations/20260511093103_posture_check_required.sql @@ -0,0 +1 @@ +ALTER TABLE location ADD COLUMN posture_check_required BOOLEAN NOT NULL DEFAULT false; diff --git a/src-tauri/proto b/src-tauri/proto index 5dfc8c8d2..84a2bf71b 160000 --- a/src-tauri/proto +++ b/src-tauri/proto @@ -1 +1 @@ -Subproject commit 5dfc8c8d23ac0613108a2b7b921fd9a97613bb3a +Subproject commit 84a2bf71b1435d956cae2f7933ab9b7e880292b6 diff --git a/src-tauri/src/apple.rs b/src-tauri/src/apple.rs index 708afea28..b388e6f26 100644 --- a/src-tauri/src/apple.rs +++ b/src-tauri/src/apple.rs @@ -60,18 +60,21 @@ const SYSTEM_SYNC_DELAY: Duration = Duration::from_millis(500); const LOCATION_ID: &str = "locationId"; const TUNNEL_ID: &str = "tunnelId"; -static OBSERVER_COMMS: LazyLock<( - Mutex>, - Mutex>>, -)> = LazyLock::new(|| { +type ObserverSender = Mutex>; +type ObserverReceiver = Mutex>>; + +static OBSERVER_COMMS: LazyLock<(ObserverSender, ObserverReceiver)> = LazyLock::new(|| { + let (tx, rx) = mpsc::channel(); + (Mutex::new(tx), Mutex::new(Some(rx))) +}); + +type VpnStateSender = Mutex>; +type VpnStateReceiver = Mutex>>; + +static VPN_STATE_UPDATE_COMMS: LazyLock<(VpnStateSender, VpnStateReceiver)> = LazyLock::new(|| { let (tx, rx) = mpsc::channel(); (Mutex::new(tx), Mutex::new(Some(rx))) }); -static VPN_STATE_UPDATE_COMMS: LazyLock<(Mutex>, Mutex>>)> = - LazyLock::new(|| { - let (tx, rx) = mpsc::channel(); - (Mutex::new(tx), Mutex::new(Some(rx))) - }); /// Thread responsible for handling VPN status update requests. /// This is an async function. diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 5e2764589..eaf5cdb0b 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -36,7 +36,7 @@ use crate::{ global_log_watcher::{spawn_global_log_watcher_task, stop_global_log_watcher_task}, service_log_watcher::stop_log_watcher_task, }, - proto::DeviceConfigResponse, + proto::defguard::client_types::DeviceConfigResponse, tray::{configure_tray_icon, reload_tray_menu}, utils::{ construct_platform_header, disconnect_interface, get_location_interface_details, @@ -242,7 +242,7 @@ pub async fn save_device_config( let instance_info = response .instance .expect("Missing instance info in device config response"); - let mut instance: Instance = instance_info.into(); + let mut instance = Instance::from(instance_info); if response.token.is_some() { debug!( "The newly saved device config has a polling token, automatic configuration polling \ @@ -250,7 +250,7 @@ pub async fn save_device_config( ); } else { warn!( - "Missing polling token for instance {}, core and/or proxy services may need an update, \ + "Missing polling token for instance {}, Core and/or Edge services may need an update, \ configuration polling won't work", instance.name, ); @@ -539,22 +539,21 @@ pub(crate) async fn locations_changed( instance: &Instance, device_config: &DeviceConfigResponse, ) -> Result { - let db_locations: HashSet> = - Location::find_by_instance_id(transaction.as_mut(), instance.id, true) - .await? - .into_iter() - .map(|location| { - let mut new_location = Location::::from(location); - // Ignore `route_all_traffic` flag as Defguard core does not have it. - new_location.route_all_traffic = false; - new_location - }) - .collect(); - let core_locations: HashSet = device_config + let db_locations = Location::find_by_instance_id(transaction.as_mut(), instance.id, true) + .await? + .into_iter() + .map(|location| { + let mut new_location = Location::::from(location); + // Ignore `route_all_traffic` flag as Defguard core does not have it. + new_location.route_all_traffic = false; + new_location + }) + .collect::>(); + let core_locations = device_config .configs .iter() .map(|config| config.clone().into_location(instance.id)) - .collect(); + .collect::>(); Ok(db_locations != core_locations) } @@ -638,6 +637,7 @@ pub(crate) async fn do_update_instance( current_location.dns = new_location.dns; current_location.location_mfa_mode = new_location.location_mfa_mode; current_location.service_location_mode = new_location.service_location_mode; + current_location.posture_check_required = new_location.posture_check_required; current_location.save(transaction.as_mut()).await?; info!("Location {current_location} configuration updated for instance {instance}"); current_location diff --git a/src-tauri/src/database/models/instance.rs b/src-tauri/src/database/models/instance.rs index 0227afcee..9779e1497 100644 --- a/src-tauri/src/database/models/instance.rs +++ b/src-tauri/src/database/models/instance.rs @@ -26,8 +26,8 @@ impl fmt::Display for Instance { } } -impl From for Instance { - fn from(instance_info: proto::InstanceInfo) -> Self { +impl From for Instance { + fn from(instance_info: proto::defguard::client_types::InstanceInfo) -> Self { let client_traffic_policy = ClientTrafficPolicy::from(&instance_info); Self { id: NoId, @@ -138,8 +138,8 @@ impl Instance { } // This compares proto::InstanceInfo, not to be confused with regular InstanceInfo defined below -impl PartialEq for Instance { - fn eq(&self, other: &proto::InstanceInfo) -> bool { +impl PartialEq for Instance { + fn eq(&self, other: &proto::defguard::client_types::InstanceInfo) -> bool { let other_policy = ClientTrafficPolicy::from(other); self.name == other.name && self.uuid == other.id @@ -223,8 +223,8 @@ pub enum ClientTrafficPolicy { } /// Retrieves `ClientTrafficPolicy` from `proto::InstanceInfo` while ensuring backwards compatibility -impl From<&proto::InstanceInfo> for ClientTrafficPolicy { - fn from(instance: &proto::InstanceInfo) -> Self { +impl From<&proto::defguard::client_types::InstanceInfo> for ClientTrafficPolicy { + fn from(instance: &proto::defguard::client_types::InstanceInfo) -> Self { match ( instance.client_traffic_policy, #[allow(deprecated)] diff --git a/src-tauri/src/database/models/location.rs b/src-tauri/src/database/models/location.rs index 7381bc298..6891b8f6b 100644 --- a/src-tauri/src/database/models/location.rs +++ b/src-tauri/src/database/models/location.rs @@ -17,7 +17,7 @@ use crate::{ }; use crate::{ error::Error, - proto::{ + proto::defguard::client_types::{ LocationMfaMode as ProtoLocationMfaMode, ServiceLocationMode as ProtoServiceLocationMode, }, }; @@ -80,6 +80,8 @@ pub struct Location { pub keepalive_interval: i64, pub location_mfa_mode: LocationMfaMode, pub service_location_mode: ServiceLocationMode, + #[serde(default)] + pub posture_check_required: bool, } impl fmt::Display for Location { @@ -107,14 +109,16 @@ impl Location { let max_service_location_mode = Self::get_service_location_mode_filter(include_service_locations); query_as!( - Self, - "SELECT id, instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id,\ - route_all_traffic, keepalive_interval, \ - location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\" \ + Self, + "SELECT id, instance_id, name, address, pubkey, endpoint, allowed_ips, dns, \ + network_id, route_all_traffic, keepalive_interval, \ + location_mfa_mode \"location_mfa_mode: LocationMfaMode\", \ + service_location_mode \"service_location_mode: ServiceLocationMode\", \ + posture_check_required \ FROM location WHERE service_location_mode <= $1 \ ORDER BY name ASC;", max_service_location_mode - ) + ) .fetch_all(executor) .await } @@ -127,7 +131,9 @@ impl Location { query!( "UPDATE location SET instance_id = $1, name = $2, address = $3, pubkey = $4, \ endpoint = $5, allowed_ips = $6, dns = $7, network_id = $8, route_all_traffic = $9, \ - keepalive_interval = $10, location_mfa_mode = $11, service_location_mode = $12 WHERE id = $13", + keepalive_interval = $10, location_mfa_mode = $11, service_location_mode = $12, \ + posture_check_required = $13 \ + WHERE id = $14", self.instance_id, self.name, self.address, @@ -140,6 +146,7 @@ impl Location { self.keepalive_interval, self.location_mfa_mode, self.service_location_mode, + self.posture_check_required, self.id, ) .execute(executor) @@ -159,7 +166,9 @@ impl Location { Self, "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, \ network_id, route_all_traffic, keepalive_interval, \ - location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\" \ + location_mfa_mode \"location_mfa_mode: LocationMfaMode\", \ + service_location_mode \"service_location_mode: ServiceLocationMode\", + posture_check_required \ FROM location WHERE id = $1", location_id ) @@ -180,7 +189,10 @@ impl Location { query_as!( Self, "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, \ - network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\" \ + network_id, route_all_traffic, keepalive_interval, \ + location_mfa_mode \"location_mfa_mode: LocationMfaMode\", \ + service_location_mode \"service_location_mode: ServiceLocationMode\", + posture_check_required \ FROM location WHERE instance_id = $1 AND service_location_mode <= $2 \ ORDER BY name ASC", instance_id, @@ -200,7 +212,10 @@ impl Location { query_as!( Self, "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, \ - network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\" \ + network_id, route_all_traffic, keepalive_interval, \ + location_mfa_mode \"location_mfa_mode: LocationMfaMode\", \ + service_location_mode \"service_location_mode: ServiceLocationMode\", + posture_check_required \ FROM location WHERE pubkey = $1;", pubkey ) @@ -345,8 +360,9 @@ impl Location { Ok(interface_config) } - /// Returns a filter value that can be used in SQL queries like `service_location_mode <= ?` when querying locations - /// to exclude (<= 1) or include service locations (all service locations modes). + /// Returns a filter value that can be used in SQL queries like `service_location_mode <= ?` + /// when querying locations to exclude (<= 1) or include service locations (all service + /// locations modes). fn get_service_location_mode_filter(include_service_locations: bool) -> i32 { if include_service_locations { i32::MAX @@ -364,8 +380,9 @@ impl Location { // Insert a new record when there is no ID let id = query_scalar!( "INSERT INTO location (instance_id, name, address, pubkey, endpoint, allowed_ips, \ - dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode, service_location_mode) \ - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) \ + dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode, \ + service_location_mode, posture_check_required) \ + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13) \ RETURNING id \"id!\"", self.instance_id, self.name, @@ -379,6 +396,7 @@ impl Location { self.keepalive_interval, self.location_mfa_mode, self.service_location_mode, + self.posture_check_required, ) .fetch_one(executor) .await?; @@ -397,6 +415,7 @@ impl Location { keepalive_interval: self.keepalive_interval, location_mfa_mode: self.location_mfa_mode, service_location_mode: self.service_location_mode, + posture_check_required: self.posture_check_required, }) } } @@ -424,6 +443,7 @@ impl From> for Location { keepalive_interval: location.keepalive_interval, location_mfa_mode: location.location_mfa_mode, service_location_mode: location.service_location_mode, + posture_check_required: location.posture_check_required, } } } diff --git a/src-tauri/src/database/models/location_stats.rs b/src-tauri/src/database/models/location_stats.rs index 7966cdde0..c0740ceb9 100644 --- a/src-tauri/src/database/models/location_stats.rs +++ b/src-tauri/src/database/models/location_stats.rs @@ -59,7 +59,8 @@ where } impl LocationStats { - #[cfg(not(target_os = "macos"))] + // Although not used on macOS, allow dead code for `sqlx prepare`. + #[cfg_attr(target_os = "macos", allow(dead_code))] pub(crate) async fn get_name<'e, E>(&self, executor: E) -> Result where E: SqliteExecutor<'e>, diff --git a/src-tauri/src/enterprise/inspector/linux.rs b/src-tauri/src/enterprise/inspector/linux.rs new file mode 100644 index 000000000..bce09a524 --- /dev/null +++ b/src-tauri/src/enterprise/inspector/linux.rs @@ -0,0 +1,69 @@ +use std::process::Command; + +use serde::Deserialize; + +use super::UnavailableReason; + +#[derive(Deserialize)] +struct LsblkDevice { + fstype: Option, + #[serde(rename = "type")] + device_type: Option, + children: Option>, +} + +impl LsblkDevice { + // Check if device is encrypted. + #[must_use] + fn is_crypto(&self) -> bool { + if let Some(fstype) = &self.fstype { + fstype == "crypto_LUKS" + } else if let Some(device_type) = &self.device_type { + device_type == "crypt" + } else { + false + } + } +} + +#[derive(Deserialize)] +struct LsblkOutput { + blockdevices: Vec, +} + +/// Determine if any block device has "crypto_LUKS" type. +fn check_luks() -> Result { + let output = Command::new("lsblk") + .args(["-Jo", "NAME,FSTYPE,TYPE"]) + .output() + .map_err(|_| UnavailableReason::DetectionFailed)?; + if !output.status.success() { + return Err(UnavailableReason::DetectionFailed); + } + + let output: LsblkOutput = + serde_json::from_slice(&output.stdout).map_err(|_| UnavailableReason::DetectionFailed)?; + + // Check for LUKS. + for device in output.blockdevices { + if device.is_crypto() { + return Ok(true); + } + if let Some(children) = &device.children { + for child in children { + if child.is_crypto() { + return Ok(true); + } + } + } + } + + Ok(false) +} + +// https://labex.io/tutorials/linux-how-to-check-if-disk-encryption-is-enabled-in-linux-558786 +// FIXME: This will check all available disks, so if any is encrypted, it will succeed. +pub(super) fn disk_encryption_status() -> Result { + // TODO: `zfs list -jo name,encryption,mountpoint` and check for `/` and `on`. + check_luks() +} diff --git a/src-tauri/src/enterprise/inspector/macos.rs b/src-tauri/src/enterprise/inspector/macos.rs new file mode 100644 index 000000000..779aaaf24 --- /dev/null +++ b/src-tauri/src/enterprise/inspector/macos.rs @@ -0,0 +1,25 @@ +use std::process::Command; + +use super::UnavailableReason; + +/// Check if FileVault has been enabled. +pub(super) fn disk_encryption_status() -> Result { + let output = Command::new("fdesetup") + .arg("isactive") + .output() + .map_err(|_| UnavailableReason::DetectionFailed)?; + let stdout = String::from_utf8_lossy(&output.stdout); + + Ok(stdout.trim_end() == "true") +} + +/// Check if System Integrity Protection has been enabled. +pub(super) fn system_integrity_status() -> Result { + let output = Command::new("csrutil") + .arg("status") + .output() + .map_err(|_| UnavailableReason::DetectionFailed)?; + let stdout = String::from_utf8_lossy(&output.stdout); + + Ok(stdout.trim_end() == "System Integrity Protection status: enabled.") +} diff --git a/src-tauri/src/enterprise/inspector/mod.rs b/src-tauri/src/enterprise/inspector/mod.rs new file mode 100644 index 000000000..bbf641958 --- /dev/null +++ b/src-tauri/src/enterprise/inspector/mod.rs @@ -0,0 +1,167 @@ +#[cfg(target_os = "linux")] +pub(crate) mod linux; +#[cfg(target_os = "macos")] +pub(crate) mod macos; +#[cfg(test)] +mod tests; +#[cfg(windows)] +pub(crate) mod windows; + +use std::{env::consts::OS, error::Error, fmt}; + +use sysinfo::System; + +use crate::{ + proto::defguard::enterprise::posture::v2::{ + bool_check, string_check, BoolCheck, DevicePostureData, StringCheck, UnavailableReason, + }, + VERSION, +}; + +impl fmt::Display for UnavailableReason { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Unspecified => f.write_str("unspecified"), + Self::DetectionFailed => f.write_str("detection failed"), + Self::NotApplicable => f.write_str("not applicable on this platform"), + Self::InsufficientPermissions => f.write_str("insufficient permissions"), + } + } +} + +impl Error for UnavailableReason {} + +/// Returns the operating system name. +fn os_name() -> Result { + System::name().ok_or(UnavailableReason::DetectionFailed) +} + +/// Returns the operating system version. +fn os_version() -> Result { + System::os_version().ok_or(UnavailableReason::DetectionFailed) +} + +/// Returns the Linux kernel version. +fn linux_kernel_version() -> Result { + #[cfg(target_os = "linux")] + { + System::kernel_version().ok_or(UnavailableReason::DetectionFailed) + } + + #[cfg(not(target_os = "linux"))] + { + Err(UnavailableReason::NotApplicable) + } +} + +/// Returns the disk encryption status, preferably for the system volume. +fn disk_encryption_status() -> Result { + #[cfg(target_os = "macos")] + { + macos::disk_encryption_status() + } + + #[cfg(windows)] + { + windows::disk_encryption_status() + } + + #[cfg(target_os = "linux")] + { + linux::disk_encryption_status() + } +} + +/// Returns the antivirus status. +fn anti_virus_status() -> Result { + #[cfg(windows)] + { + windows::anti_virus_status() + } + + #[cfg(not(windows))] + { + Err(UnavailableReason::NotApplicable) + } +} + +/// Checks whether the computer is part of a domain. +fn part_of_domain() -> Result { + #[cfg(windows)] + { + windows::part_of_domain() + } + + #[cfg(not(windows))] + { + Err(UnavailableReason::NotApplicable) + } +} + +/// Returns the device integrity status. +fn device_integrity() -> Result { + #[cfg(target_os = "macos")] + { + macos::system_integrity_status() + } + + #[cfg(not(target_os = "macos"))] + Err(UnavailableReason::NotApplicable) +} + +/// Returns the security update status. +fn security_update_status() -> Result { + #[cfg(windows)] + { + windows::security_update_status() + } + + #[cfg(not(windows))] + { + Err(UnavailableReason::NotApplicable) + } +} + +/// Convert `Result` to `BoolCheck`. +impl From> for BoolCheck { + fn from(value: Result) -> Self { + Self { + result: Some(match value { + Ok(inner) => bool_check::Result::Value(inner), + Err(err) => bool_check::Result::Unavailable(err as i32), + }), + } + } +} + +/// Convert `Result` to `StringCheck`. +impl From> for StringCheck { + fn from(value: Result) -> Self { + Self { + result: Some(match value { + Ok(inner) => string_check::Result::Value(inner), + Err(err) => string_check::Result::Unavailable(err as i32), + }), + } + } +} + +#[allow(unused)] +impl DevicePostureData { + /// Performs system inspection and returns the results. + #[must_use] + pub fn new() -> Self { + Self { + defguard_client_version: VERSION.to_owned(), + os_type: OS.to_string(), + os_name: Some(StringCheck::from(os_name())), + os_version: Some(StringCheck::from(os_version())), + disk_encryption: Some(BoolCheck::from(disk_encryption_status())), + antivirus_present: Some(BoolCheck::from(anti_virus_status())), + windows_ad_domain_joined: Some(BoolCheck::from(part_of_domain())), + windows_security_update_current: Some(BoolCheck::from(security_update_status())), + linux_kernel_version: Some(StringCheck::from(linux_kernel_version())), + device_integrity: Some(BoolCheck::from(device_integrity())), + } + } +} diff --git a/src-tauri/src/enterprise/inspector/tests/linux.rs b/src-tauri/src/enterprise/inspector/tests/linux.rs new file mode 100644 index 000000000..128293ae3 --- /dev/null +++ b/src-tauri/src/enterprise/inspector/tests/linux.rs @@ -0,0 +1,17 @@ +use super::super::{disk_encryption_status, os_name, os_version}; + +#[test] +fn test_os_name() { + assert!(os_name().unwrap().ends_with("Linux")); +} + +#[test] +fn test_os_version() { + assert!(os_version().is_ok()); +} + +#[test] +#[ignore = "development machine only"] +fn test_disk_encryption() { + assert!(!disk_encryption_status().unwrap()); +} diff --git a/src-tauri/src/enterprise/inspector/tests/macos.rs b/src-tauri/src/enterprise/inspector/tests/macos.rs new file mode 100644 index 000000000..755d7062c --- /dev/null +++ b/src-tauri/src/enterprise/inspector/tests/macos.rs @@ -0,0 +1,23 @@ +use super::super::{device_integrity, disk_encryption_status, os_name, os_version}; + +#[test] +fn test_os_name() { + assert_eq!(os_name().unwrap(), "Darwin"); +} + +#[test] +fn test_os_version() { + assert!(os_version().is_ok()); +} + +#[test] +#[ignore = "development machine only"] +fn test_disk_encryption() { + assert!(disk_encryption_status().unwrap()); +} + +#[test] +#[ignore = "development machine only"] +fn test_device_integrity() { + assert!(device_integrity().unwrap()); +} diff --git a/src-tauri/src/enterprise/inspector/tests/mod.rs b/src-tauri/src/enterprise/inspector/tests/mod.rs new file mode 100644 index 000000000..0337daa13 --- /dev/null +++ b/src-tauri/src/enterprise/inspector/tests/mod.rs @@ -0,0 +1,6 @@ +#[cfg(target_os = "linux")] +mod linux; +#[cfg(target_os = "macos")] +mod macos; +#[cfg(windows)] +mod windows; diff --git a/src-tauri/src/enterprise/inspector/tests/windows.rs b/src-tauri/src/enterprise/inspector/tests/windows.rs new file mode 100644 index 000000000..d1bfaf24b --- /dev/null +++ b/src-tauri/src/enterprise/inspector/tests/windows.rs @@ -0,0 +1,38 @@ +use super::super::{ + anti_virus_status, disk_encryption_status, os_name, os_version, part_of_domain, + security_update_status, +}; + +#[test] +fn test_os_name() { + assert_eq!(os_name().unwrap(), "Windows"); +} + +#[test] +fn test_os_version() { + assert!(os_version().is_ok()); +} + +#[test] +#[ignore = "development machine only"] +fn test_disk_encryption() { + assert!(!disk_encryption_status().unwrap()); +} + +#[test] +#[ignore = "development machine only"] +fn test_anti_virus() { + assert!(anti_virus_status().unwrap()); +} + +#[test] +#[ignore = "development machine only"] +fn test_part_of_domain() { + assert!(!part_of_domain().unwrap()); +} + +#[test] +#[ignore = "development machine only"] +fn test_security_update_status() { + assert!(security_update_status().unwrap()); +} diff --git a/src-tauri/src/enterprise/inspector/windows.rs b/src-tauri/src/enterprise/inspector/windows.rs new file mode 100644 index 000000000..7351e0431 --- /dev/null +++ b/src-tauri/src/enterprise/inspector/windows.rs @@ -0,0 +1,164 @@ +// TODO: use `async_raw_query` + +use serde::Deserialize; +use time::{Date, OffsetDateTime}; + +use wmi::{AuthLevel, WMIConnection, WMIError}; + +use super::UnavailableReason; + +const MAX_QUICKFIX_DAYS: i64 = 60; + +#[derive(Deserialize)] +#[serde(rename = "Win32_EncryptableVolume")] +#[serde(rename_all = "PascalCase")] +struct Win32EncryptableVolume { + drive_letter: Option, + // 0 = unprotected, 1 = protected, 2 = unknown + protection_status: u32, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +struct AntiVirusProduct { + product_state: u32, +} + +#[derive(Deserialize)] +#[serde(rename = "Win32_ComputerSystem")] +#[serde(rename_all = "PascalCase")] +struct Win32ComputerSystem { + part_of_domain: bool, +} + +#[derive(Deserialize)] +#[serde(rename = "Win32_OperatingSystem")] +#[serde(rename_all = "PascalCase")] +struct Win32OperatingSystem { + system_drive: String, +} + +// Custom format for `installed_on`. +time::serde::format_description!( + wmidate, + Date, + "[month padding:none]/[day padding:none]/[year]" +); + +#[derive(Deserialize)] +#[serde(rename = "Win32_QuickFixEngineering")] +#[serde(rename_all = "PascalCase")] +struct Win32QuickFixEngineering { + #[serde(with = "wmidate::option", default)] + installed_on: Option, + //description: Option, // "Update" or "Security Update" +} + +/// Convert `WMIError` to `UnavailableReason`. +impl From for UnavailableReason { + fn from(err: WMIError) -> Self { + if let WMIError::HResultError { .. } = err { + UnavailableReason::InsufficientPermissions + } else { + UnavailableReason::DetectionFailed + } + } +} + +/// Determine system drive letter. +fn system_drive_letter() -> Result { + let conn = WMIConnection::new()?; + let mut results: Vec = conn.query()?; + match results.pop() { + Some(result) => Ok(result.system_drive), + None => Err(UnavailableReason::DetectionFailed), + } +} + +/// This requires Administrator access, and only detects BitLocker for drive C:. +/// +/// Equivalent to PowerShell command: +/// `Get-WmiObject -Namespace "root\CIMV2\Security\MicrosoftVolumeEncryption" -query "SELECT * FROM Win32_EncryptableVolume"` +pub(super) fn disk_encryption_status() -> Result { + let system_drive_letter = system_drive_letter()?; + + let conn = + WMIConnection::with_namespace_path("root\\CIMV2\\Security\\MicrosoftVolumeEncryption")?; + conn.set_proxy_blanket(AuthLevel::PktPrivacy)?; + + let volumes: Vec = conn.query()?; + for volume in volumes { + if let Some(drive_letter) = volume.drive_letter { + if drive_letter == system_drive_letter { + return match volume.protection_status { + 0 => Ok(false), + 1 => Ok(true), + _ => Err(UnavailableReason::DetectionFailed), + }; + } + } + } + + Err(UnavailableReason::DetectionFailed) +} + +/// Determine AntiVirus status. +/// +/// Check manually in PowerShell: +/// `Get-CimInstance -Namespace root\SecurityCenter2 -ClassName AntivirusProduct` +/// +/// Equivalent to PowerShell command: +/// `Get-WmiObject -Namespace "root\SecurityCenter2" -query "SELECT * FROM AntiVirusProduct"` +pub(super) fn anti_virus_status() -> Result { + let conn = WMIConnection::with_namespace_path("root\\SecurityCenter2")?; + let products: Vec = conn.query()?; + for product in products { + let enabled = (product.product_state & 0x0001_0000) != 0; + let realtime = (product.product_state & 0x0002_0000) != 0; + // let up_to_date = (product.product_state & 0x0004_0000) != 0; + if enabled || realtime { + return Ok(true); + } + } + + Ok(false) +} + +/// Check if this machine is part of an Active Directory domain. +/// +/// Check manually in PowerShell: +/// `Get-CimInstance -ClassName Win32_ComputerSystem` +/// +/// Equivalent to PowerShell command: +/// `Get-WmiObject -query "SELECT * FROM Win32_ComputerSystem"` +pub(super) fn part_of_domain() -> Result { + let conn = WMIConnection::new()?; + let system = conn.get::()?; + Ok(system.part_of_domain) +} + +/// Find the latest security patch. +/// +/// Check manually in PowerShell: +/// `Get-CimInstance -ClassName Win32_QuickFixEngineering` +/// +/// Equivalent to PowerShell command: +/// `Get-WmiObject -query "SELECT * FROM Win32_QuickFixEngineering"` +pub(super) fn security_update_status() -> Result { + let conn = WMIConnection::new()?; + let fixes: Vec = conn.query()?; + + // Days from today + let today = OffsetDateTime::now_utc().date(); + let mut max_days = i64::MAX; + for fix in fixes { + if let Some(installed_on) = fix.installed_on { + let days = (today - installed_on).whole_days(); + if days < max_days { + max_days = days; + } + } + } + + Ok(max_days <= MAX_QUICKFIX_DAYS) +} diff --git a/src-tauri/src/enterprise/mod.rs b/src-tauri/src/enterprise/mod.rs index 8e1f8e8ad..6074c0543 100644 --- a/src-tauri/src/enterprise/mod.rs +++ b/src-tauri/src/enterprise/mod.rs @@ -1,3 +1,4 @@ +pub mod inspector; pub mod models; pub mod periodic; pub mod provisioning; diff --git a/src-tauri/src/enterprise/periodic/config.rs b/src-tauri/src/enterprise/periodic/config.rs index 6153c8222..7aca24948 100644 --- a/src-tauri/src/enterprise/periodic/config.rs +++ b/src-tauri/src/enterprise/periodic/config.rs @@ -21,7 +21,9 @@ use crate::{ }, error::Error, events::EventKey, - proto::{DeviceConfigResponse, InstanceInfoRequest, InstanceInfoResponse}, + proto::defguard::client_types::{ + DeviceConfigResponse, InstanceInfoRequest, InstanceInfoResponse, + }, utils::construct_platform_header, CLIENT_PLATFORM_HEADER, CLIENT_VERSION_HEADER, MIN_CORE_VERSION, MIN_PROXY_VERSION, PKG_VERSION, diff --git a/src-tauri/src/log_watcher/global_log_watcher.rs b/src-tauri/src/log_watcher/global_log_watcher.rs index 74ed2b82d..86a92d710 100644 --- a/src-tauri/src/log_watcher/global_log_watcher.rs +++ b/src-tauri/src/log_watcher/global_log_watcher.rs @@ -637,7 +637,7 @@ pub async fn spawn_global_log_watcher_task( let app_state = handle.state::(); // Show logs only from the last hour - let from = Some(Utc::now() - Duration::from_secs(60 * 60)); + let from = Some(Utc::now() - Duration::from_hours(1)); let event_topic = "log-update-global".to_string(); diff --git a/src-tauri/src/periodic/purge_stats.rs b/src-tauri/src/periodic/purge_stats.rs index 81fafd063..c8ca24945 100644 --- a/src-tauri/src/periodic/purge_stats.rs +++ b/src-tauri/src/periodic/purge_stats.rs @@ -7,8 +7,7 @@ use crate::database::{ DB_POOL, }; -// 12 hours -const PURGE_INTERVAL: Duration = Duration::from_secs(12 * 60 * 60); +const PURGE_INTERVAL: Duration = Duration::from_hours(12); /// Periodically purges location and tunnel stats. /// diff --git a/src-tauri/src/periodic/version.rs b/src-tauri/src/periodic/version.rs index 9b8b9c109..b58c5c13b 100644 --- a/src-tauri/src/periodic/version.rs +++ b/src-tauri/src/periodic/version.rs @@ -5,7 +5,7 @@ use tokio::time::interval; use crate::{appstate::AppState, commands::get_latest_app_version, events::EventKey}; -const INTERVAL_IN_SECONDS: Duration = Duration::from_secs(12 * 60 * 60); // 12 hours +const INTERVAL_IN_SECONDS: Duration = Duration::from_hours(12); pub async fn poll_version(app_handle: AppHandle) { debug!("Starting the latest application version polling loop."); diff --git a/src-tauri/src/proto.rs b/src-tauri/src/proto.rs index ad0417094..32d99cd91 100644 --- a/src-tauri/src/proto.rs +++ b/src-tauri/src/proto.rs @@ -3,9 +3,28 @@ use crate::database::models::{ Id, NoId, }; -tonic::include_proto!("defguard.proxy"); +pub(crate) mod defguard { + #[allow(dead_code)] + pub(crate) mod enterprise { + pub(crate) mod posture { + pub(crate) mod v2 { + tonic::include_proto!("defguard.enterprise.posture.v2"); + } + } + } + + pub(crate) mod proxy { + pub(crate) mod v1 { + tonic::include_proto!("defguard.proxy.v1"); + } + } + + pub mod client_types { + tonic::include_proto!("defguard.client_types"); + } +} -impl DeviceConfig { +impl defguard::client_types::DeviceConfig { #[must_use] pub(crate) fn into_location(self, instance_id: Id) -> Location { let location_mfa_mode = match self.location_mfa_mode { @@ -41,6 +60,7 @@ impl DeviceConfig { keepalive_interval: self.keepalive_interval.into(), location_mfa_mode, service_location_mode, + posture_check_required: self.posture_check_required.unwrap_or_default(), } } } diff --git a/src-tauri/src/service/mod.rs b/src-tauri/src/service/mod.rs index 4d617432a..9ba7bf308 100644 --- a/src-tauri/src/service/mod.rs +++ b/src-tauri/src/service/mod.rs @@ -2,7 +2,7 @@ pub mod client; pub mod config; pub mod proto { - tonic::include_proto!("client"); + tonic::include_proto!("defguard.client.v1"); } #[cfg(not(target_os = "macos"))] pub mod daemon; diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index 94ff99c75..db6fcca1f 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -271,19 +271,13 @@ async fn handle_location_tray_menu(id: String, app: &AppHandle) { info!("Connect location with ID {id}"); // Check if MFA is enabled. If so, trigger modal on frontend. if location.mfa_enabled() { - info!( - "MFA enabled for location with ID {:?}, trigger MFA modal", - location.id - ); + info!("MFA enabled for location with ID {id}, trigger MFA modal"); show_main_window(app); let _ = app.emit(EventKey::MfaTrigger.into(), &location); } else if let Err(err) = connect(location_id, ConnectionType::Location, None, app.clone()).await { - info!( - "Unable to connect location with ID {}, error: {err:?}", - location.id - ); + info!("Unable to connect location with ID {id}, error: {err:?}"); } } } diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index 7e0eb05cd..e98c2d60c 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -43,7 +43,7 @@ use crate::{ error::Error, events::EventKey, log_watcher::service_log_watcher::spawn_log_watcher_task, - proto::ClientPlatformInfo, + proto::defguard::client_types::ClientPlatformInfo, ConnectionType, }; #[cfg(not(target_os = "macos"))] @@ -1092,13 +1092,13 @@ pub(crate) fn construct_platform_header() -> String { let os = os_info::get(); let platform_info = ClientPlatformInfo { - os_family: std::env::consts::OS.to_string(), - os_type: os.os_type().to_string(), + os_family: env::consts::FAMILY.to_string(), + os_type: env::consts::OS.to_string(), version: os.version().to_string(), edition: os.edition().map(str::to_string), codename: os.codename().map(str::to_string), bitness: Some(os.bitness().to_string()), - architecture: os.architecture().map(str::to_string), + architecture: Some(env::consts::ARCH.to_string()), }; debug!("Constructed platform info header: {platform_info:?}"); diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 2fbc00c93..8359fac6c 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -23,9 +23,9 @@ "icons/icon.ico" ], "windows": { - "certificateThumbprint": null, + "certificateThumbprint": "9d3df627dbf037f1553582ce9a806d09c9b78654", "digestAlgorithm": "sha256", - "timestampUrl": "", + "timestampUrl": "http://time.certum.pl/", "wix": { "upgradeCode": "923b21f5-7d3f-4f5e-8dcb-43fe1c65fb43", "bannerPath": "./resources-windows/msi/top_banner.png", @@ -86,7 +86,7 @@ "productName": "Defguard", "mainBinaryName": "defguard-client", "identifier": "net.defguard", - "version": "1.6.8", + "version": "1.6.9", "app": { "security": { "capabilities": [ diff --git a/src/pages/client/components/MfaModalProvider.tsx b/src/pages/client/components/MfaModalProvider.tsx index 680100c50..50447b692 100644 --- a/src/pages/client/components/MfaModalProvider.tsx +++ b/src/pages/client/components/MfaModalProvider.tsx @@ -3,7 +3,7 @@ import { type PropsWithChildren, useEffect } from 'react'; import { isPresent } from '../../../shared/defguard-ui/utils/isPresent'; import { MFAModal } from '../pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal'; import { useMFAModal } from '../pages/ClientInstancePage/components/LocationsList/modals/MFAModal/useMFAModal'; -import type { CommonWireguardFields } from '../types'; +import { type CommonWireguardFields, TauriEventKey } from '../types'; type Props = PropsWithChildren; @@ -13,17 +13,20 @@ type Payload = { export const MfaModalProvider = ({ children }: Props) => { const openMFAModal = useMFAModal((state) => state.open); - // listen for rust backend requesting MFA + // listen for Rust backend requesting MFA useEffect(() => { let unlisten: UnlistenFn; (async () => { - unlisten = await listen('mfa-trigger', ({ payload: { location } }) => { - if (isPresent(location)) { - openMFAModal(location); - } - }); + unlisten = await listen( + TauriEventKey.MFA_TRIGGER, + ({ payload: { location } }) => { + if (isPresent(location)) { + openMFAModal(location); + } + }, + ); })(); return () => { diff --git a/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal.tsx b/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal.tsx index 153b2d2d7..cc63098cb 100644 --- a/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal.tsx +++ b/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal.tsx @@ -266,9 +266,13 @@ export const MFAModal = () => { isPresent(startResponse) && isPresent(selectedInstance) && ( { + handleMfaStart(4); + }} data={{ challenge: startResponse.challenge as string, token: startResponse.token, diff --git a/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/components/MfaMobileApprove/MfaMobileApprove.tsx b/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/components/MfaMobileApprove/MfaMobileApprove.tsx index 62b3f1f5f..f10c9061a 100644 --- a/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/components/MfaMobileApprove/MfaMobileApprove.tsx +++ b/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/components/MfaMobileApprove/MfaMobileApprove.tsx @@ -2,7 +2,7 @@ import './style.scss'; import { debug, error } from '@tauri-apps/plugin-log'; import { fromUint8Array } from 'js-base64'; -import { useEffect, useMemo } from 'react'; +import { useEffect, useMemo, useRef } from 'react'; import QrCode from 'react-qr-code'; import useWebSocket from 'react-use-websocket'; import z from 'zod'; @@ -25,6 +25,7 @@ type Props = { proxyUrl: string; instanceUuid: string; onCancel: () => void; + onRefresh: () => void; }; const { connect } = clientApi; @@ -39,9 +40,10 @@ export const MfaMobileApprove = ({ proxyUrl, instanceUuid, onCancel, + onRefresh, }: Props) => { const toaster = useToaster(); - const [closeModal] = useMFAModal((s) => [s.close], shallow); + const [closeModal, isModalOpen] = useMFAModal((s) => [s.close, s.isOpen], shallow); const location = useMFAModal((s) => s.instance as CommonWireguardFields); const wsUrl = useMemo( @@ -50,25 +52,32 @@ export const MfaMobileApprove = ({ [proxyUrl], ); - var manuallyCancelled = false; - const { getWebSocket, lastMessage } = useWebSocket(wsUrl, { - queryParams: { - token, - }, - onClose: () => { - debug('WebSocket connection to proxy for mobile app MFA closed.'); + const expectedClose = useRef(false); + const { getWebSocket, lastMessage } = useWebSocket( + wsUrl, + { + queryParams: { + token, + }, + onClose: () => { + debug('WebSocket connection to proxy for mobile app MFA closed.'); + if (!expectedClose.current && isModalOpen) { + expectedClose.current = true; + onRefresh(); + } + }, + onError: () => { + if (!expectedClose.current && isModalOpen) { + expectedClose.current = true; + debug( + 'WebSocket connection to proxy for mobile app MFA failed, refreshing QR.', + ); + onRefresh(); + } + }, }, - onError: () => { - if (!manuallyCancelled) { - toaster.error('Unexpected error in WebSocket connection to proxy'); - error( - 'MFA auth using mobile app failed. Unexpected error in WebSocket connection to proxy.', - ); - // go back to previous step - onCancel(); - } - }, - }); + isModalOpen, + ); const qrString = useMemo(() => { const data = { @@ -94,6 +103,7 @@ export const MfaMobileApprove = ({ presharedKey: schemaResult.data.preshared_key, }) .then(() => { + expectedClose.current = true; closeModal(); toaster.success('Connection authorized.'); }) @@ -109,7 +119,7 @@ export const MfaMobileApprove = ({ }, [lastMessage]); const cancel = () => { - manuallyCancelled = true; + expectedClose.current = true; const socket = getWebSocket(); socket?.close(); // go back to previous step diff --git a/src/pages/client/types.ts b/src/pages/client/types.ts index 3434187b1..8c0b1e665 100644 --- a/src/pages/client/types.ts +++ b/src/pages/client/types.ts @@ -75,6 +75,7 @@ export type CommonWireguardFields = { pubkey: string; instance_id: number; network_id: number; + // TODO: device posture data, if available }; export type SelectedInstance = { diff --git a/swift/extension/VPNExtension.xcodeproj/project.pbxproj b/swift/extension/VPNExtension.xcodeproj/project.pbxproj index 6d7a926c2..d50452eab 100644 --- a/swift/extension/VPNExtension.xcodeproj/project.pbxproj +++ b/swift/extension/VPNExtension.xcodeproj/project.pbxproj @@ -322,7 +322,7 @@ ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MACOSX_DEPLOYMENT_TARGET = 13.5; - MARKETING_VERSION = 1.6.8; + MARKETING_VERSION = 1.6.9; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -417,7 +417,7 @@ ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MACOSX_DEPLOYMENT_TARGET = 13.5; - MARKETING_VERSION = 1.6.8; + MARKETING_VERSION = 1.6.9; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = net.defguard.VPNExtension; From 08c005c9b447dae54be5e2ee1c656a88ef4a9d39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Mon, 18 May 2026 15:21:27 +0200 Subject: [PATCH 003/155] alpha client v2 (#866) --- .github/workflows/build-macos.yaml | 17 +- .github/workflows/lint.yaml | 33 +- .github/workflows/release.yaml | 56 +- .github/workflows/test.yml | 1 + .trivyignore.yaml | 2 +- .typesafe-i18n.json | 2 +- biome.json | 1 + justfile | 13 + new-ui/.gitignore | 24 + new-ui/.nvmrc | 1 + new-ui/.prettierignore | 3 + new-ui/.prettierrc | 8 + new-ui/.stylelintrc.json | 10 + new-ui/README.md | 73 + new-ui/biome.json | 77 + new-ui/index.html | 16 + new-ui/package.json | 54 + new-ui/pnpm-lock.yaml | 3135 +++++++++++++++++ new-ui/pnpm-workspace.yaml | 2 + new-ui/public/favicon.svg | 1 + new-ui/public/fonts/geist/Geist-Bold.woff2 | Bin 0 -> 42596 bytes .../public/fonts/geist/Geist-BoldItalic.woff2 | Bin 0 -> 43144 bytes new-ui/public/fonts/geist/Geist-Medium.woff2 | Bin 0 -> 42444 bytes .../fonts/geist/Geist-MediumItalic.woff2 | Bin 0 -> 43136 bytes new-ui/public/fonts/geist/Geist-Regular.woff2 | Bin 0 -> 41592 bytes .../fonts/geist/Geist-RegularItalic.woff2 | Bin 0 -> 42248 bytes .../public/fonts/geist/Geist-SemiBold.woff2 | Bin 0 -> 42488 bytes .../fonts/geist/Geist-SemiBoldItalic.woff2 | Bin 0 -> 43076 bytes .../jetbrains_mono/JetBrainsMono-Italic.woff2 | Bin 0 -> 95864 bytes .../jetbrains_mono/JetBrainsMono-Medium.woff2 | Bin 0 -> 93824 bytes .../JetBrainsMono-MediumItalic.woff2 | Bin 0 -> 97808 bytes .../JetBrainsMono-Regular.woff2 | Bin 0 -> 92164 bytes .../JetBrainsMono-SemiBold.woff2 | Bin 0 -> 94472 bytes .../JetBrainsMono-SemiBoldItalic.woff2 | Bin 0 -> 98124 bytes .../SourceCodePro-Regular.woff2 | Bin 0 -> 74052 bytes new-ui/public/icons.svg | 24 + new-ui/src/app/App.tsx | 23 + new-ui/src/app/day.ts | 10 + new-ui/src/app/query.ts | 40 + new-ui/src/app/router.ts | 20 + new-ui/src/main.tsx | 12 + .../CompactEmptyPage/CompactEmptyPage.tsx | 29 + .../pages/compact/CompactEmptyPage/style.scss | 24 + .../CompactLocationsPage.tsx | 109 + .../components/InstanceSwitcher.tsx | 84 + .../hooks/useCompactLocationsStore.tsx | 28 + .../compact/CompactLocationsPage/style.scss | 31 + .../pages/compact/CompactPage/CompactPage.tsx | 15 + .../src/pages/compact/CompactPage/style.scss | 4 + .../src/pages/playground/PlaygroundIndex.tsx | 83 + new-ui/src/routeTree.gen.ts | 95 + new-ui/src/routes/__root.tsx | 16 + new-ui/src/routes/empty.tsx | 9 + new-ui/src/routes/index.tsx | 58 + new-ui/src/routes/playground/index.tsx | 6 + .../src/shared/components/BoxIcon/BoxIcon.tsx | 6 + .../src/shared/components/BoxIcon/style.scss | 14 + .../src/shared/components/Button/Button.tsx | 103 + .../src/shared/components/Button/style.scss | 215 ++ new-ui/src/shared/components/Button/types.ts | 32 + .../shared/components/Checkbox/Checkbox.tsx | 45 + .../src/shared/components/Checkbox/style.scss | 48 + .../src/shared/components/Checkbox/types.ts | 10 + .../CheckboxIndicator/CheckboxIndicator.tsx | 50 + .../components/CheckboxIndicator/style.scss | 75 + .../shared/components/CodeInput/CodeInput.tsx | 137 + .../shared/components/CodeInput/style.scss | 30 + .../shared/components/Controls/Controls.tsx | 13 + .../src/shared/components/Controls/style.scss | 16 + .../src/shared/components/Divider/Divider.tsx | 59 + .../src/shared/components/Divider/style.scss | 53 + .../components/EmptyState/EmptyState.tsx | 65 + .../shared/components/EmptyState/style.scss | 46 + .../src/shared/components/EmptyState/types.ts | 15 + .../EmptyStateFlexible/EmptyStateFlexible.tsx | 35 + .../components/EmptyStateFlexible/style.scss | 8 + .../shared/components/FieldBox/FieldBox.tsx | 58 + .../src/shared/components/FieldBox/style.scss | 88 + .../src/shared/components/FieldBox/types.ts | 22 + .../components/FieldError/FieldError.tsx | 35 + .../shared/components/FieldError/style.scss | 6 + .../components/FieldLabel/FieldLabel.tsx | 42 + .../shared/components/FieldLabel/style.scss | 33 + .../components/FloatingMenu/FloatingMenu.tsx | 14 + .../shared/components/FloatingMenu/style.scss | 8 + new-ui/src/shared/components/Fold/Fold.tsx | 29 + new-ui/src/shared/components/Fold/style.scss | 19 + new-ui/src/shared/components/Icon/Icon.tsx | 492 +++ .../src/shared/components/Icon/icon-types.ts | 141 + .../Icon/icons/IconAccessSettings.tsx | 19 + .../components/Icon/icons/IconActivity.tsx | 19 + .../Icon/icons/IconActivityNotes.tsx | 19 + .../components/Icon/icons/IconAddAlias.tsx | 19 + .../components/Icon/icons/IconAddDevice.tsx | 19 + .../components/Icon/icons/IconAddGroup.tsx | 19 + .../components/Icon/icons/IconAddLocation.tsx | 19 + .../components/Icon/icons/IconAddRule.tsx | 19 + .../components/Icon/icons/IconAddToken.tsx | 19 + .../components/Icon/icons/IconAddUser.tsx | 19 + .../components/Icon/icons/IconAliases.tsx | 19 + .../components/Icon/icons/IconAndroid.tsx | 31 + .../components/Icon/icons/IconApple.tsx | 23 + .../components/Icon/icons/IconAppstore.tsx | 47 + .../components/Icon/icons/IconArchLinux.tsx | 19 + .../components/Icon/icons/IconArrowBig.tsx | 16 + .../components/Icon/icons/IconArrowSmall.tsx | 20 + .../Icon/icons/IconAttentionFilled.tsx | 16 + .../Icon/icons/IconAttentionOutlined.tsx | 16 + .../Icon/icons/IconAuthorisedApp.tsx | 16 + .../components/Icon/icons/IconBiometric.tsx | 19 + .../shared/components/Icon/icons/IconBug.tsx | 19 + .../components/Icon/icons/IconCalendar.tsx | 19 + .../shared/components/Icon/icons/IconChat.tsx | 19 + .../components/Icon/icons/IconCheck.tsx | 19 + .../components/Icon/icons/IconCheckCircle.tsx | 19 + .../components/Icon/icons/IconCheckFilled.tsx | 19 + .../components/Icon/icons/IconClear.tsx | 19 + .../components/Icon/icons/IconClose.tsx | 19 + .../shared/components/Icon/icons/IconCode.tsx | 19 + .../components/Icon/icons/IconConfig.tsx | 19 + .../Icon/icons/IconConnectedDevices.tsx | 19 + .../shared/components/Icon/icons/IconCopy.tsx | 19 + .../components/Icon/icons/IconCreditCard.tsx | 19 + .../components/Icon/icons/IconCustomize.tsx | 19 + .../components/Icon/icons/IconDarkTheme.tsx | 19 + .../components/Icon/icons/IconDebian.tsx | 19 + .../components/Icon/icons/IconDelete.tsx | 19 + .../components/Icon/icons/IconDeploy.tsx | 19 + .../components/Icon/icons/IconDesktop.tsx | 19 + .../components/Icon/icons/IconDevices.tsx | 19 + .../Icon/icons/IconDevicesActive.tsx | 19 + .../components/Icon/icons/IconDisableMfa.tsx | 19 + .../components/Icon/icons/IconDisabled.tsx | 19 + .../Icon/icons/IconDisconnectAll.tsx | 16 + .../components/Icon/icons/IconDownload.tsx | 19 + .../shared/components/Icon/icons/IconEdit.tsx | 19 + .../components/Icon/icons/IconEmptyPoint.tsx | 19 + .../components/Icon/icons/IconEnrollment.tsx | 19 + .../components/Icon/icons/IconEnter.tsx | 19 + .../components/Icon/icons/IconExternalMFA.tsx | 19 + .../shared/components/Icon/icons/IconFile.tsx | 19 + .../components/Icon/icons/IconFileAdd.tsx | 19 + .../components/Icon/icons/IconFiltration.tsx | 19 + .../components/Icon/icons/IconGateway.tsx | 18 + .../components/Icon/icons/IconGithub.tsx | 21 + .../components/Icon/icons/IconGlobe.tsx | 19 + .../components/Icon/icons/IconGroups.tsx | 19 + .../components/Icon/icons/IconHamburger.tsx | 19 + .../shared/components/Icon/icons/IconHelp.tsx | 19 + .../shared/components/Icon/icons/IconHide.tsx | 19 + .../components/Icon/icons/IconInfoFilled.tsx | 19 + .../Icon/icons/IconInfoOutlined.tsx | 19 + .../components/Icon/icons/IconInternalMFA.tsx | 19 + .../components/Icon/icons/IconIpSuggest.tsx | 16 + .../shared/components/Icon/icons/IconKey.tsx | 19 + .../components/Icon/icons/IconLightBulb.tsx | 19 + .../components/Icon/icons/IconLightTheme.tsx | 19 + .../components/Icon/icons/IconLinux.tsx | 21 + .../components/Icon/icons/IconLoader.tsx | 17 + .../components/Icon/icons/IconLocation.tsx | 19 + .../Icon/icons/IconLocationTracking.tsx | 19 + .../shared/components/Icon/icons/IconLock.tsx | 16 + .../components/Icon/icons/IconLockClosed.tsx | 19 + .../components/Icon/icons/IconLogout.tsx | 19 + .../shared/components/Icon/icons/IconMail.tsx | 19 + .../shared/components/Icon/icons/IconMenu.tsx | 19 + .../components/Icon/icons/IconMinusCircle.tsx | 19 + .../components/Icon/icons/IconMobile.tsx | 19 + .../components/Icon/icons/IconMobileLock.tsx | 16 + .../Icon/icons/IconNetworkSettings.tsx | 19 + .../Icon/icons/IconNotification.tsx | 19 + .../Icon/icons/IconOneTimePassword.tsx | 19 + .../components/Icon/icons/IconOnline.tsx | 19 + .../components/Icon/icons/IconOpenId.tsx | 19 + .../Icon/icons/IconOpenInNewWindow.tsx | 19 + .../components/Icon/icons/IconPending.tsx | 19 + .../components/Icon/icons/IconPieChart.tsx | 19 + .../shared/components/Icon/icons/IconPlay.tsx | 18 + .../components/Icon/icons/IconPlayFilled.tsx | 18 + .../shared/components/Icon/icons/IconPlus.tsx | 16 + .../components/Icon/icons/IconPlusCircle.tsx | 19 + .../components/Icon/icons/IconProfile.tsx | 19 + .../components/Icon/icons/IconProtection.tsx | 19 + .../components/Icon/icons/IconRefresh.tsx | 28 + .../components/Icon/icons/IconRequest.tsx | 19 + .../components/Icon/icons/IconRules.tsx | 19 + .../components/Icon/icons/IconSearch.tsx | 19 + .../components/Icon/icons/IconServers.tsx | 16 + .../components/Icon/icons/IconSettings.tsx | 19 + .../shared/components/Icon/icons/IconShow.tsx | 19 + .../components/Icon/icons/IconSortable.tsx | 19 + .../Icon/icons/IconStatusAttention.tsx | 19 + .../Icon/icons/IconStatusAvailable.tsx | 19 + .../Icon/icons/IconStatusImportant.tsx | 19 + .../Icon/icons/IconStatusPremium.tsx | 19 + .../Icon/icons/IconStatusSimple.tsx | 16 + .../components/Icon/icons/IconSupport.tsx | 19 + .../shared/components/Icon/icons/IconSync.tsx | 16 + .../components/Icon/icons/IconToken.tsx | 27 + .../Icon/icons/IconTransactions.tsx | 19 + .../components/Icon/icons/IconTutorial.tsx | 18 + .../Icon/icons/IconTutorialNotAvailable.tsx | 18 + .../components/Icon/icons/IconUbuntu.tsx | 19 + .../components/Icon/icons/IconUpload.tsx | 19 + .../shared/components/Icon/icons/IconUser.tsx | 19 + .../components/Icon/icons/IconUserActive.tsx | 19 + .../components/Icon/icons/IconUsers.tsx | 19 + .../Icon/icons/IconWarningFilled.tsx | 19 + .../Icon/icons/IconWarningOutlined.tsx | 19 + .../components/Icon/icons/IconWebhooks.tsx | 19 + .../components/Icon/icons/IconWindows.tsx | 19 + new-ui/src/shared/components/Icon/index.ts | 3 + new-ui/src/shared/components/Icon/style.scss | 41 + .../components/IconButton/IconButton.tsx | 26 + .../shared/components/IconButton/style.scss | 76 + .../src/shared/components/IconButton/types.ts | 22 + .../InteractionBox/InteractionBox.tsx | 47 + .../components/InteractionBox/style.scss | 31 + .../LoaderSpinner/LoaderSpinner.tsx | 24 + .../components/LoaderSpinner/style.scss | 38 + .../components/LocationCard/LocationCard.tsx | 105 + .../LocationCard/assets/location_avatar.png | Bin 0 -> 5223 bytes .../ConnectButton/ConnectButton.tsx | 59 + .../components/ConnectButton/style.scss | 39 + .../ConnectionChart/ConnectionChart.tsx | 108 + .../components/ConnectionChart/style.scss | 21 + .../LocationCardControls.tsx | 5 + .../components/LocationCardIcon.tsx | 20 + .../LocationViewHeader/LocationViewHeader.tsx | 15 + .../components/LocationViewHeader/style.scss | 15 + .../components/MfaSelector/MfaSelector.tsx | 59 + .../components/MfaSelector/style.scss | 76 + .../LocationCard/context/context.tsx | 80 + .../components/LocationCard/context/types.ts | 14 + .../LocationCard/hooks/useMfaConnect.ts | 155 + .../shared/components/LocationCard/style.scss | 69 + .../views/ConnectedView/ConnectedView.tsx | 94 + .../views/ConnectedView/style.scss | 47 + .../views/DefaultView/DefaultView.tsx | 74 + .../LocationCard/views/DefaultView/style.scss | 35 + .../LocationCardMfaEmailView.tsx | 86 + .../LocationCardMfaSettings.tsx | 109 + .../views/LocationCardMfaSettings/style.scss | 21 + .../LocationCardMfaTotpView.tsx | 87 + .../MainBackground/MainBackground.tsx | 57 + new-ui/src/shared/components/Menu/Menu.tsx | 33 + .../components/Menu/components/MenuHeader.tsx | 29 + .../components/Menu/components/MenuItem.tsx | 48 + .../components/Menu/components/MenuSpacer.tsx | 7 + new-ui/src/shared/components/Menu/style.scss | 119 + new-ui/src/shared/components/Menu/types.ts | 33 + .../NotFoundRoute/NotFoundRoute.tsx | 19 + .../src/shared/components/Select/Select.tsx | 222 ++ .../src/shared/components/Select/style.scss | 109 + new-ui/src/shared/components/Select/types.ts | 48 + .../shared/components/SizedBox/SizedBox.tsx | 19 + .../src/shared/components/SizedBox/style.scss | 7 + .../src/shared/components/Toggle/Toggle.tsx | 35 + .../src/shared/components/Toggle/style.scss | 72 + new-ui/src/shared/components/Toggle/types.ts | 9 + .../components/TransferText/TransferText.tsx | 17 + .../shared/components/TransferText/style.scss | 13 + .../components/WindowHeader/WindowHeader.tsx | 50 + .../ConnectionWatcher/ConnectionsWatcher.tsx | 138 + .../components/ConnectionWatcher/style.scss | 93 + .../shared/components/WindowHeader/style.scss | 25 + new-ui/src/shared/consts.ts | 5 + new-ui/src/shared/form-context.tsx | 4 + new-ui/src/shared/form.tsx | 11 + .../shared/providers/TauriEventProvider.tsx | 82 + new-ui/src/shared/rust-api/api.ts | 171 + new-ui/src/shared/rust-api/query.ts | 88 + new-ui/src/shared/rust-api/types.ts | 343 ++ new-ui/src/shared/scss/_base.scss | 73 + new-ui/src/shared/scss/_fonts.scss | 125 + new-ui/src/shared/scss/_shared_tokens.scss | 260 ++ new-ui/src/shared/scss/_skeleton.scss | 4 + new-ui/src/shared/scss/_themes.scss | 56 + new-ui/src/shared/scss/global/_animate.scss | 11 + .../src/shared/scss/global/_breakpoints.scss | 112 + new-ui/src/shared/scss/global/index.scss | 2 + new-ui/src/shared/scss/index.scss | 5 + new-ui/src/shared/types.ts | 92 + new-ui/src/shared/utils/detectClickOutside.ts | 22 + new-ui/src/shared/utils/download.ts | 25 + new-ui/src/shared/utils/isComparable.ts | 10 + new-ui/src/shared/utils/isPresent.ts | 3 + new-ui/src/shared/utils/mergeRefs.ts | 29 + new-ui/src/shared/utils/mfa.ts | 16 + new-ui/src/shared/utils/sortByLabel.ts | 7 + new-ui/src/shared/utils/zod.ts | 10 + new-ui/tsconfig.app.json | 25 + new-ui/tsconfig.json | 7 + new-ui/tsconfig.node.json | 24 + new-ui/vite.config.ts | 51 + package.json | 18 +- pnpm-lock.yaml | 1116 +++--- pnpm-workspace.yaml | 4 + src-tauri/.env | 1 + ...b64da07f7023f58ff8678d828a0ba50e2470.json} | 12 +- ...a2090ba7baf9dee8cf00e8800b9a5f891fab.json} | 12 +- ...7fba459b79b74d462565088bf27d8e9fcd5d.json} | 12 +- ...eddaabf35d813a54eced9d38c951965ce83e.json} | 6 +- ...decccdb12fcb43060dd383e7c9fd1516179e.json} | 6 +- ...edb4bc14d96f3000bd58a3ca68eecb8e4a88.json} | 12 +- src-tauri/Cargo.lock | 78 +- src-tauri/build.rs | 6 + src-tauri/capabilities/default.json | 8 +- ...20260513120000_add_location_mfa_method.sql | 6 + src-tauri/permissions/default.toml | 39 + src-tauri/src/appstate.rs | 7 +- src-tauri/src/bin/defguard-client.rs | 35 +- src-tauri/src/commands.rs | 149 +- src-tauri/src/database/models/location.rs | 49 +- src-tauri/src/lib.rs | 1 + src-tauri/src/proto.rs | 6 +- src-tauri/src/tray.rs | 61 +- src-tauri/src/window.rs | 154 + src-tauri/tauri.conf.json | 52 +- src-tauri/tauri.local.conf.json | 9 + src/shared/defguard-ui | 2 +- vite.config.ts | 24 +- 322 files changed, 14258 insertions(+), 855 deletions(-) create mode 100644 justfile create mode 100644 new-ui/.gitignore create mode 100644 new-ui/.nvmrc create mode 100644 new-ui/.prettierignore create mode 100644 new-ui/.prettierrc create mode 100644 new-ui/.stylelintrc.json create mode 100644 new-ui/README.md create mode 100644 new-ui/biome.json create mode 100644 new-ui/index.html create mode 100644 new-ui/package.json create mode 100644 new-ui/pnpm-lock.yaml create mode 100644 new-ui/pnpm-workspace.yaml create mode 100644 new-ui/public/favicon.svg create mode 100644 new-ui/public/fonts/geist/Geist-Bold.woff2 create mode 100644 new-ui/public/fonts/geist/Geist-BoldItalic.woff2 create mode 100644 new-ui/public/fonts/geist/Geist-Medium.woff2 create mode 100644 new-ui/public/fonts/geist/Geist-MediumItalic.woff2 create mode 100644 new-ui/public/fonts/geist/Geist-Regular.woff2 create mode 100644 new-ui/public/fonts/geist/Geist-RegularItalic.woff2 create mode 100644 new-ui/public/fonts/geist/Geist-SemiBold.woff2 create mode 100644 new-ui/public/fonts/geist/Geist-SemiBoldItalic.woff2 create mode 100644 new-ui/public/fonts/jetbrains_mono/JetBrainsMono-Italic.woff2 create mode 100644 new-ui/public/fonts/jetbrains_mono/JetBrainsMono-Medium.woff2 create mode 100644 new-ui/public/fonts/jetbrains_mono/JetBrainsMono-MediumItalic.woff2 create mode 100644 new-ui/public/fonts/jetbrains_mono/JetBrainsMono-Regular.woff2 create mode 100644 new-ui/public/fonts/jetbrains_mono/JetBrainsMono-SemiBold.woff2 create mode 100644 new-ui/public/fonts/jetbrains_mono/JetBrainsMono-SemiBoldItalic.woff2 create mode 100644 new-ui/public/fonts/source_code_pro/SourceCodePro-Regular.woff2 create mode 100644 new-ui/public/icons.svg create mode 100644 new-ui/src/app/App.tsx create mode 100644 new-ui/src/app/day.ts create mode 100644 new-ui/src/app/query.ts create mode 100644 new-ui/src/app/router.ts create mode 100644 new-ui/src/main.tsx create mode 100644 new-ui/src/pages/compact/CompactEmptyPage/CompactEmptyPage.tsx create mode 100644 new-ui/src/pages/compact/CompactEmptyPage/style.scss create mode 100644 new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx create mode 100644 new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx create mode 100644 new-ui/src/pages/compact/CompactLocationsPage/hooks/useCompactLocationsStore.tsx create mode 100644 new-ui/src/pages/compact/CompactLocationsPage/style.scss create mode 100644 new-ui/src/pages/compact/CompactPage/CompactPage.tsx create mode 100644 new-ui/src/pages/compact/CompactPage/style.scss create mode 100644 new-ui/src/pages/playground/PlaygroundIndex.tsx create mode 100644 new-ui/src/routeTree.gen.ts create mode 100644 new-ui/src/routes/__root.tsx create mode 100644 new-ui/src/routes/empty.tsx create mode 100644 new-ui/src/routes/index.tsx create mode 100644 new-ui/src/routes/playground/index.tsx create mode 100644 new-ui/src/shared/components/BoxIcon/BoxIcon.tsx create mode 100644 new-ui/src/shared/components/BoxIcon/style.scss create mode 100644 new-ui/src/shared/components/Button/Button.tsx create mode 100644 new-ui/src/shared/components/Button/style.scss create mode 100644 new-ui/src/shared/components/Button/types.ts create mode 100644 new-ui/src/shared/components/Checkbox/Checkbox.tsx create mode 100644 new-ui/src/shared/components/Checkbox/style.scss create mode 100644 new-ui/src/shared/components/Checkbox/types.ts create mode 100644 new-ui/src/shared/components/CheckboxIndicator/CheckboxIndicator.tsx create mode 100644 new-ui/src/shared/components/CheckboxIndicator/style.scss create mode 100644 new-ui/src/shared/components/CodeInput/CodeInput.tsx create mode 100644 new-ui/src/shared/components/CodeInput/style.scss create mode 100644 new-ui/src/shared/components/Controls/Controls.tsx create mode 100644 new-ui/src/shared/components/Controls/style.scss create mode 100644 new-ui/src/shared/components/Divider/Divider.tsx create mode 100644 new-ui/src/shared/components/Divider/style.scss create mode 100644 new-ui/src/shared/components/EmptyState/EmptyState.tsx create mode 100644 new-ui/src/shared/components/EmptyState/style.scss create mode 100644 new-ui/src/shared/components/EmptyState/types.ts create mode 100644 new-ui/src/shared/components/EmptyStateFlexible/EmptyStateFlexible.tsx create mode 100644 new-ui/src/shared/components/EmptyStateFlexible/style.scss create mode 100644 new-ui/src/shared/components/FieldBox/FieldBox.tsx create mode 100644 new-ui/src/shared/components/FieldBox/style.scss create mode 100644 new-ui/src/shared/components/FieldBox/types.ts create mode 100644 new-ui/src/shared/components/FieldError/FieldError.tsx create mode 100644 new-ui/src/shared/components/FieldError/style.scss create mode 100644 new-ui/src/shared/components/FieldLabel/FieldLabel.tsx create mode 100644 new-ui/src/shared/components/FieldLabel/style.scss create mode 100644 new-ui/src/shared/components/FloatingMenu/FloatingMenu.tsx create mode 100644 new-ui/src/shared/components/FloatingMenu/style.scss create mode 100644 new-ui/src/shared/components/Fold/Fold.tsx create mode 100644 new-ui/src/shared/components/Fold/style.scss create mode 100644 new-ui/src/shared/components/Icon/Icon.tsx create mode 100644 new-ui/src/shared/components/Icon/icon-types.ts create mode 100644 new-ui/src/shared/components/Icon/icons/IconAccessSettings.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconActivity.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconActivityNotes.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconAddAlias.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconAddDevice.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconAddGroup.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconAddLocation.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconAddRule.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconAddToken.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconAddUser.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconAliases.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconAndroid.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconApple.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconAppstore.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconArchLinux.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconArrowBig.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconArrowSmall.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconAttentionFilled.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconAttentionOutlined.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconAuthorisedApp.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconBiometric.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconBug.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconCalendar.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconChat.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconCheck.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconCheckCircle.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconCheckFilled.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconClear.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconClose.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconCode.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconConfig.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconConnectedDevices.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconCopy.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconCreditCard.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconCustomize.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconDarkTheme.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconDebian.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconDelete.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconDeploy.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconDesktop.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconDevices.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconDevicesActive.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconDisableMfa.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconDisabled.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconDisconnectAll.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconDownload.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconEdit.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconEmptyPoint.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconEnrollment.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconEnter.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconExternalMFA.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconFile.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconFileAdd.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconFiltration.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconGateway.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconGithub.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconGlobe.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconGroups.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconHamburger.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconHelp.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconHide.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconInfoFilled.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconInfoOutlined.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconInternalMFA.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconIpSuggest.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconKey.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconLightBulb.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconLightTheme.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconLinux.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconLoader.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconLocation.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconLocationTracking.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconLock.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconLockClosed.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconLogout.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconMail.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconMenu.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconMinusCircle.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconMobile.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconMobileLock.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconNetworkSettings.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconNotification.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconOneTimePassword.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconOnline.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconOpenId.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconOpenInNewWindow.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconPending.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconPieChart.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconPlay.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconPlayFilled.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconPlus.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconPlusCircle.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconProfile.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconProtection.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconRefresh.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconRequest.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconRules.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconSearch.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconServers.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconSettings.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconShow.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconSortable.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconStatusAttention.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconStatusAvailable.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconStatusImportant.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconStatusPremium.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconStatusSimple.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconSupport.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconSync.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconToken.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconTransactions.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconTutorial.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconTutorialNotAvailable.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconUbuntu.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconUpload.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconUser.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconUserActive.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconUsers.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconWarningFilled.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconWarningOutlined.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconWebhooks.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconWindows.tsx create mode 100644 new-ui/src/shared/components/Icon/index.ts create mode 100644 new-ui/src/shared/components/Icon/style.scss create mode 100644 new-ui/src/shared/components/IconButton/IconButton.tsx create mode 100644 new-ui/src/shared/components/IconButton/style.scss create mode 100644 new-ui/src/shared/components/IconButton/types.ts create mode 100644 new-ui/src/shared/components/InteractionBox/InteractionBox.tsx create mode 100644 new-ui/src/shared/components/InteractionBox/style.scss create mode 100644 new-ui/src/shared/components/LoaderSpinner/LoaderSpinner.tsx create mode 100644 new-ui/src/shared/components/LoaderSpinner/style.scss create mode 100644 new-ui/src/shared/components/LocationCard/LocationCard.tsx create mode 100644 new-ui/src/shared/components/LocationCard/assets/location_avatar.png create mode 100644 new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx create mode 100644 new-ui/src/shared/components/LocationCard/components/ConnectButton/style.scss create mode 100644 new-ui/src/shared/components/LocationCard/components/ConnectionChart/ConnectionChart.tsx create mode 100644 new-ui/src/shared/components/LocationCard/components/ConnectionChart/style.scss create mode 100644 new-ui/src/shared/components/LocationCard/components/LocationCardControls/LocationCardControls.tsx create mode 100644 new-ui/src/shared/components/LocationCard/components/LocationCardIcon.tsx create mode 100644 new-ui/src/shared/components/LocationCard/components/LocationViewHeader/LocationViewHeader.tsx create mode 100644 new-ui/src/shared/components/LocationCard/components/LocationViewHeader/style.scss create mode 100644 new-ui/src/shared/components/LocationCard/components/MfaSelector/MfaSelector.tsx create mode 100644 new-ui/src/shared/components/LocationCard/components/MfaSelector/style.scss create mode 100644 new-ui/src/shared/components/LocationCard/context/context.tsx create mode 100644 new-ui/src/shared/components/LocationCard/context/types.ts create mode 100644 new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts create mode 100644 new-ui/src/shared/components/LocationCard/style.scss create mode 100644 new-ui/src/shared/components/LocationCard/views/ConnectedView/ConnectedView.tsx create mode 100644 new-ui/src/shared/components/LocationCard/views/ConnectedView/style.scss create mode 100644 new-ui/src/shared/components/LocationCard/views/DefaultView/DefaultView.tsx create mode 100644 new-ui/src/shared/components/LocationCard/views/DefaultView/style.scss create mode 100644 new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx create mode 100644 new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/LocationCardMfaSettings.tsx create mode 100644 new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/style.scss create mode 100644 new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx create mode 100644 new-ui/src/shared/components/MainBackground/MainBackground.tsx create mode 100644 new-ui/src/shared/components/Menu/Menu.tsx create mode 100644 new-ui/src/shared/components/Menu/components/MenuHeader.tsx create mode 100644 new-ui/src/shared/components/Menu/components/MenuItem.tsx create mode 100644 new-ui/src/shared/components/Menu/components/MenuSpacer.tsx create mode 100644 new-ui/src/shared/components/Menu/style.scss create mode 100644 new-ui/src/shared/components/Menu/types.ts create mode 100644 new-ui/src/shared/components/NotFoundRoute/NotFoundRoute.tsx create mode 100644 new-ui/src/shared/components/Select/Select.tsx create mode 100644 new-ui/src/shared/components/Select/style.scss create mode 100644 new-ui/src/shared/components/Select/types.ts create mode 100644 new-ui/src/shared/components/SizedBox/SizedBox.tsx create mode 100644 new-ui/src/shared/components/SizedBox/style.scss create mode 100644 new-ui/src/shared/components/Toggle/Toggle.tsx create mode 100644 new-ui/src/shared/components/Toggle/style.scss create mode 100644 new-ui/src/shared/components/Toggle/types.ts create mode 100644 new-ui/src/shared/components/TransferText/TransferText.tsx create mode 100644 new-ui/src/shared/components/TransferText/style.scss create mode 100644 new-ui/src/shared/components/WindowHeader/WindowHeader.tsx create mode 100644 new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx create mode 100644 new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/style.scss create mode 100644 new-ui/src/shared/components/WindowHeader/style.scss create mode 100644 new-ui/src/shared/consts.ts create mode 100644 new-ui/src/shared/form-context.tsx create mode 100644 new-ui/src/shared/form.tsx create mode 100644 new-ui/src/shared/providers/TauriEventProvider.tsx create mode 100644 new-ui/src/shared/rust-api/api.ts create mode 100644 new-ui/src/shared/rust-api/query.ts create mode 100644 new-ui/src/shared/rust-api/types.ts create mode 100644 new-ui/src/shared/scss/_base.scss create mode 100644 new-ui/src/shared/scss/_fonts.scss create mode 100644 new-ui/src/shared/scss/_shared_tokens.scss create mode 100644 new-ui/src/shared/scss/_skeleton.scss create mode 100644 new-ui/src/shared/scss/_themes.scss create mode 100644 new-ui/src/shared/scss/global/_animate.scss create mode 100644 new-ui/src/shared/scss/global/_breakpoints.scss create mode 100644 new-ui/src/shared/scss/global/index.scss create mode 100644 new-ui/src/shared/scss/index.scss create mode 100644 new-ui/src/shared/types.ts create mode 100644 new-ui/src/shared/utils/detectClickOutside.ts create mode 100644 new-ui/src/shared/utils/download.ts create mode 100644 new-ui/src/shared/utils/isComparable.ts create mode 100644 new-ui/src/shared/utils/isPresent.ts create mode 100644 new-ui/src/shared/utils/mergeRefs.ts create mode 100644 new-ui/src/shared/utils/mfa.ts create mode 100644 new-ui/src/shared/utils/sortByLabel.ts create mode 100644 new-ui/src/shared/utils/zod.ts create mode 100644 new-ui/tsconfig.app.json create mode 100644 new-ui/tsconfig.json create mode 100644 new-ui/tsconfig.node.json create mode 100644 new-ui/vite.config.ts create mode 100644 pnpm-workspace.yaml create mode 100644 src-tauri/.env rename src-tauri/.sqlx/{query-50543a38f8f09cd45b16bf8b93d2ff42252aa0833f57c8ffa98e3471b9e663a1.json => query-1c07ca7013959226ca9af064037bb64da07f7023f58ff8678d828a0ba50e2470.json} (84%) rename src-tauri/.sqlx/{query-858556d40a6fc015f2664045a00837ec18e3c0fd94b6ded74a60ac6edc57a5b3.json => query-49039d91cfdefbb32284d15af739a2090ba7baf9dee8cf00e8800b9a5f891fab.json} (86%) rename src-tauri/.sqlx/{query-865203f8f64866f1895aede956dfd8f373772e3c406f4482e6a4022a796cd46b.json => query-a25979219918af2df8abca48a48d7fba459b79b74d462565088bf27d8e9fcd5d.json} (86%) rename src-tauri/.sqlx/{query-95133767a4ebbd331c17667752e9603c2d351b677f6fac46e944d34b4913ab71.json => query-e16f46ba4c2365de31db15551084eddaabf35d813a54eced9d38c951965ce83e.json} (58%) rename src-tauri/.sqlx/{query-7b9f3c02d868a7da19beed6aad5ee22962668200b1ffb1fb7df967be5af0c50c.json => query-e27705d75d504385fbaea05c43eadecccdb12fcb43060dd383e7c9fd1516179e.json} (55%) rename src-tauri/.sqlx/{query-ec008998cc09e79017a3edd82550df0afd4bd8488391475908272d9cf7c6dbd0.json => query-f88f92313f52f0b2c584f48b40e6edb4bc14d96f3000bd58a3ca68eecb8e4a88.json} (86%) create mode 100644 src-tauri/migrations/20260513120000_add_location_mfa_method.sql create mode 100644 src-tauri/permissions/default.toml create mode 100644 src-tauri/src/window.rs create mode 100644 src-tauri/tauri.local.conf.json diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index 1ef16da54..709bb89dc 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -11,6 +11,9 @@ on: tags: - v*.*.* +env: + SQLX_OFFLINE: "1" + jobs: build-macos: runs-on: @@ -38,18 +41,23 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: 25 + node-version: 26 - uses: pnpm/action-setup@v6 with: cache: true - version: 10 + version: 11 # Change to '--frozen-lockfile' once this gets fixed: # https://github.com/pnpm/action-setup/issues/40 - name: Install Node dependencies run: pnpm install --no-frozen-lockfile + - name: Install Node dependencies for New UI + run: | + cd new-ui + pnpm install --no-frozen-lockfile + - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: @@ -63,6 +71,11 @@ jobs: - name: Unlock keychain run: security -v unlock-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" login.keychain + - name: Build new UI + run: | + cd new-ui + pnpm build + - name: Build app uses: tauri-apps/tauri-action@v0 env: diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index b1b883b51..f7bb499b3 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -30,11 +30,12 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: 25 + node-version: 26 - uses: pnpm/action-setup@v6 with: - version: 10 + cache: true + version: 11 run_install: false - name: Get pnpm store directory @@ -42,22 +43,28 @@ jobs: run: | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - name: Setup pnpm cache - uses: actions/cache@v5 - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-lint-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-lint-store- - # Change to '--frozen-lockfile' once this gets fixed: # https://github.com/pnpm/action-setup/issues/40 - name: Install Node dependencies run: pnpm install --no-frozen-lockfile + - name: Install Node dependencies for new UI + run: | + cd new-ui + pnpm install --no-frozen-lockfile + - name: Run Biome and Prettier Lint run: pnpm lint - # TODO: Restore when it works again: https://github.com/pnpm/pnpm/issues/11265 - # - name: Audit - # run: pnpm audit --prod + - name: Audit + run: pnpm audit --prod + + - name: Run Biome and Prettier Lint for new UI + run: | + cd new-ui + pnpm lint + + - name: Audit new UI + run: | + cd new-ui + pnpm audit --prod diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index f7519b1f8..c1ee01735 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -62,11 +62,12 @@ jobs: - name: Install pnpm uses: pnpm/action-setup@v6 with: - version: 10 + cache: true + version: 11 - uses: actions/setup-node@v6 with: - node-version: 25 + node-version: 26 - name: Get pnpm store directory run: | @@ -78,19 +79,17 @@ jobs: echo Version: $VERSION echo "VERSION=$VERSION" >> ${GITHUB_ENV} echo "DEFGUARD_CLIENT_BUILD_VERSION=${GITHUB_REF_NAME#v}" >> ${GITHUB_ENV} - - uses: actions/cache@v5 - name: Setup pnpm cache - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-build-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-build-store- # Change to '--frozen-lockfile' once this gets fixed: # https://github.com/pnpm/action-setup/issues/40 - name: Install Node dependencies run: pnpm install --no-frozen-lockfile + - name: Install Node dependencies for new UI + run: | + cd new-ui + pnpm install --no-frozen-lockfile + - name: Install Rust stable uses: dtolnay/rust-toolchain@stable @@ -98,6 +97,11 @@ jobs: run: | apt-get install -y build-essential libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf libssl-dev libxdo-dev unzip protobuf-compiler libprotobuf-dev rpm + - name: Build new UI + run: | + cd new-ui + pnpm build + - name: Build packages uses: tauri-apps/tauri-action@v0.5.23 env: @@ -166,11 +170,12 @@ jobs: echo "DEFGUARD_CLIENT_BUILD_VERSION=${GITHUB_REF_NAME#v}" >> ${GITHUB_ENV} - uses: actions/setup-node@v6 with: - node-version: 25 + node-version: 26 - uses: pnpm/action-setup@v6 with: - version: 10 + cache: true + version: 11 run_install: false - name: Get pnpm store directory @@ -178,19 +183,16 @@ jobs: run: | echo "STORE_PATH=$(pnpm store path --silent)" >> ${GITHUB_ENV} - - name: Setup pnpm cache - uses: actions/cache@v5 - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-build-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-build-store- - # Change to '--frozen-lockfile' once this gets fixed: # https://github.com/pnpm/action-setup/issues/40 - name: Install Node dependencies run: pnpm install --no-frozen-lockfile + - name: Install Node dependencies for new UI + run: | + cd new-ui + pnpm install --no-frozen-lockfile + - name: Install Rust stable uses: dtolnay/rust-toolchain@stable @@ -199,6 +201,11 @@ jobs: sudo apt-get update sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf libssl-dev libxdo-dev unzip protobuf-compiler libprotobuf-dev rpm + - name: Build new UI + run: | + cd new-ui + pnpm build + - name: Build packages uses: tauri-apps/tauri-action@v0.5.23 # .24 seems broken, TODO: update when fixed env: @@ -343,21 +350,14 @@ jobs: # echo "VERSION=$env:VERSION" >> $env:GITHUB_ENV # - uses: actions/setup-node@v6 # with: - # node-version: 25 + # node-version: 26 # - uses: pnpm/action-setup@v6 # with: - # version: 10 + # version: 11 # run_install: false # - name: Get pnpm store directory # shell: bash # run: echo "STORE_PATH=$(pnpm store path --silent)" >> ${GITHUB_ENV} - # - uses: actions/cache@v5 - # name: Setup pnpm cache - # with: - # path: ${{ env.STORE_PATH }} - # key: ${{ runner.os }}-pnpm-build-store-${{ hashFiles('**/pnpm-lock.yaml') }} - # restore-keys: | - # ${{ runner.os }}-pnpm-build-store- # - name: Install deps # run: pnpm install --frozen-lockfile # - uses: dtolnay/rust-toolchain@stable diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 38dbb2846..ef8abe27d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,6 +20,7 @@ on: env: CARGO_TERM_COLOR: always + SQLX_OFFLINE: "1" # sccache SCCACHE_GHA_ENABLED: "true" RUSTC_WRAPPER: "sccache" diff --git a/.trivyignore.yaml b/.trivyignore.yaml index 67f4f5026..3c5ed2002 100644 --- a/.trivyignore.yaml +++ b/.trivyignore.yaml @@ -1,4 +1,4 @@ vulnerabilities: - id: GHSA-wrw7-89jp-8q8g - expired_at: 2026-05-16 + expired_at: 2026-06-16 statement: 'glib is a transitive dependency of Tauri which we cannot update ourselves. Waiting for tauri to finish migration to gtk4-rs: https://github.com/tauri-apps/tauri/issues/12563' diff --git a/.typesafe-i18n.json b/.typesafe-i18n.json index b3224e1e2..e5c757695 100644 --- a/.typesafe-i18n.json +++ b/.typesafe-i18n.json @@ -1,4 +1,4 @@ { "adapter": "react", - "$schema": "https://unpkg.com/typesafe-i18n@5.26.2/schema/typesafe-i18n.json" + "$schema": "https://unpkg.com/typesafe-i18n@5.27.1/schema/typesafe-i18n.json" } \ No newline at end of file diff --git a/biome.json b/biome.json index 4bc6b7c6a..3a3177345 100644 --- a/biome.json +++ b/biome.json @@ -9,6 +9,7 @@ "ignoreUnknown": false, "includes": [ "src/**", + "!new-ui", "!src/i18n/*.ts", "!src/i18n/*.tsx", "!src/i18n/i18n-util", diff --git a/justfile b/justfile new file mode 100644 index 000000000..9e53b3e33 --- /dev/null +++ b/justfile @@ -0,0 +1,13 @@ +set shell := ["powershell.exe", "-c"] + +dev: + npx concurrently \ + -n "NEW,OLD,TAURI" \ + "cd new-ui && pnpm dev" \ + "pnpm dev" \ + "cargo tauri dev" + +build: + cd new-ui; pnpm build + pnpm build + cargo tauri build --config .\src-tauri\tauri.local.conf.json diff --git a/new-ui/.gitignore b/new-ui/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/new-ui/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/new-ui/.nvmrc b/new-ui/.nvmrc new file mode 100644 index 000000000..a682cfb97 --- /dev/null +++ b/new-ui/.nvmrc @@ -0,0 +1 @@ +v25 diff --git a/new-ui/.prettierignore b/new-ui/.prettierignore new file mode 100644 index 000000000..402ea0086 --- /dev/null +++ b/new-ui/.prettierignore @@ -0,0 +1,3 @@ +/src/**/*.tsx +/src/**/*.ts +/src/**/*.js diff --git a/new-ui/.prettierrc b/new-ui/.prettierrc new file mode 100644 index 000000000..71a0f3291 --- /dev/null +++ b/new-ui/.prettierrc @@ -0,0 +1,8 @@ +{ + "semi": true, + "tabWidth": 2, + "singleQuote": true, + "useTabs": false, + "printWidth": 90, + "endOfLine": "lf" +} diff --git a/new-ui/.stylelintrc.json b/new-ui/.stylelintrc.json new file mode 100644 index 000000000..6a4e21333 --- /dev/null +++ b/new-ui/.stylelintrc.json @@ -0,0 +1,10 @@ +{ + "extends": ["stylelint-config-standard-scss"], + "plugins": ["stylelint-scss"], + "rules": { + "at-rule-no-unknown": null, + "scss/at-rule-no-unknown": true, + "custom-property-empty-line-before": null, + "value-keyword-case": null + } +} diff --git a/new-ui/README.md b/new-ui/README.md new file mode 100644 index 000000000..7dbf7ebf3 --- /dev/null +++ b/new-ui/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/new-ui/biome.json b/new-ui/biome.json new file mode 100644 index 000000000..06f797beb --- /dev/null +++ b/new-ui/biome.json @@ -0,0 +1,77 @@ +{ + "root": true, + "$schema": "https://biomejs.dev/schemas/2.4.15/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "includes": [ + "src/**", + "!src/messages", + "!src/paraglide/**/*.js", + "!src/routeTree.gen.ts", + "!src/**/*.scss" + ] + }, + "formatter": { + "enabled": true, + "formatWithErrors": false, + "attributePosition": "auto", + "bracketSameLine": false, + "bracketSpacing": true, + "expand": "auto", + "lineEnding": "lf", + "lineWidth": 90, + "indentStyle": "space", + "useEditorconfig": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "a11y": "off", + "correctness": { + "useUniqueElementIds": "off" + }, + "style": { + "useLiteralEnumMembers": "off", + "useBlockStatements": "off" + }, + "suspicious": { + "noArrayIndexKey": "off" + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "single", + "jsxQuoteStyle": "double", + "quoteProperties": "asNeeded", + "trailingCommas": "all", + "semicolons": "always", + "arrowParentheses": "always", + "attributePosition": "auto", + "bracketSameLine": false, + "bracketSpacing": true + } + }, + "css": { + "linter": { + "enabled": false + }, + "formatter": { + "enabled": false + } + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": "on" + } + } + } +} diff --git a/new-ui/index.html b/new-ui/index.html new file mode 100644 index 000000000..07f928d05 --- /dev/null +++ b/new-ui/index.html @@ -0,0 +1,16 @@ + + + + + + + + webnext + + + +
+ + + + diff --git a/new-ui/package.json b/new-ui/package.json new file mode 100644 index 000000000..53a754951 --- /dev/null +++ b/new-ui/package.json @@ -0,0 +1,54 @@ +{ + "name": "new-ui", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "biome": "biome", + "lint": "biome check ./src/ && prettier src/**/*.scss --check --log-level error && stylelint \"src/**/*.scss\" -c ./.stylelintrc.json --fix && tsc -b", + "fix": "biome check ./src/ --write --unsafe && prettier src/**/*.scss -w --log-level silent", + "tsc": "tsc", + "preview": "vite preview" + }, + "dependencies": { + "@biomejs/biome": "^2.4.15", + "@floating-ui/react": "^0.27.19", + "@tanstack/react-form": "^1.32.0", + "@tanstack/react-query": "^5.100.10", + "@tanstack/react-router": "^1.169.2", + "@tanstack/router-plugin": "^1.167.35", + "@tauri-apps/api": "^2.11.0", + "@tauri-apps/plugin-http": "^2.5.9", + "@tauri-apps/plugin-log": "^2.8.0", + "@uidotdev/usehooks": "^2.4.1", + "chart.js": "^4.5.1", + "clsx": "^2.1.1", + "dayjs": "^1.11.20", + "motion": "^12.38.0", + "p-timeout": "^7.0.1", + "prettier": "^3.8.3", + "radashi": "^12.9.1", + "react": "^19.2.6", + "react-chartjs-2": "^5.3.1", + "react-dom": "^19.2.6", + "sass": "^1.99.0", + "zod": "^4.4.3", + "zustand": "^5.0.13" + }, + "devDependencies": { + "@tanstack/devtools-vite": "^0.7.0", + "@types/node": "^25.7.0", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "autoprefixer": "^10.5.0", + "globals": "^17.6.0", + "stylelint": "^17.11.1", + "stylelint-config-standard-scss": "^17.0.0", + "stylelint-scss": "^7.1.1", + "typescript": "~6.0.3", + "vite": "^8.0.13" + } +} diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml new file mode 100644 index 000000000..4bf983487 --- /dev/null +++ b/new-ui/pnpm-lock.yaml @@ -0,0 +1,3135 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@biomejs/biome': + specifier: ^2.4.15 + version: 2.4.15 + '@floating-ui/react': + specifier: ^0.27.19 + version: 0.27.19(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@tanstack/react-form': + specifier: ^1.32.0 + version: 1.32.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@tanstack/react-query': + specifier: ^5.100.10 + version: 5.100.10(react@19.2.6) + '@tanstack/react-router': + specifier: ^1.169.2 + version: 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@tanstack/router-plugin': + specifier: ^1.167.35 + version: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0)) + '@tauri-apps/api': + specifier: ^2.11.0 + version: 2.11.0 + '@tauri-apps/plugin-http': + specifier: ^2.5.9 + version: 2.5.9 + '@tauri-apps/plugin-log': + specifier: ^2.8.0 + version: 2.8.0 + '@uidotdev/usehooks': + specifier: ^2.4.1 + version: 2.4.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + chart.js: + specifier: ^4.5.1 + version: 4.5.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + dayjs: + specifier: ^1.11.20 + version: 1.11.20 + motion: + specifier: ^12.38.0 + version: 12.38.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + p-timeout: + specifier: ^7.0.1 + version: 7.0.1 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + radashi: + specifier: ^12.9.1 + version: 12.9.1 + react: + specifier: ^19.2.6 + version: 19.2.6 + react-chartjs-2: + specifier: ^5.3.1 + version: 5.3.1(chart.js@4.5.1)(react@19.2.6) + react-dom: + specifier: ^19.2.6 + version: 19.2.6(react@19.2.6) + sass: + specifier: ^1.99.0 + version: 1.99.0 + zod: + specifier: ^4.4.3 + version: 4.4.3 + zustand: + specifier: ^5.0.13 + version: 5.0.13(@types/react@19.2.14)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)) + devDependencies: + '@tanstack/devtools-vite': + specifier: ^0.7.0 + version: 0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0)) + '@types/node': + specifier: ^25.7.0 + version: 25.7.0 + '@types/react': + specifier: ^19.2.14 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.14) + '@vitejs/plugin-react': + specifier: ^6.0.1 + version: 6.0.1(vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0)) + autoprefixer: + specifier: ^10.5.0 + version: 10.5.0(postcss@8.5.14) + globals: + specifier: ^17.6.0 + version: 17.6.0 + stylelint: + specifier: ^17.11.1 + version: 17.11.1(typescript@6.0.3) + stylelint-config-standard-scss: + specifier: ^17.0.0 + version: 17.0.0(postcss@8.5.14)(stylelint@17.11.1(typescript@6.0.3)) + stylelint-scss: + specifier: ^7.1.1 + version: 7.1.1(stylelint@17.11.1(typescript@6.0.3)) + typescript: + specifier: ~6.0.3 + version: 6.0.3 + vite: + specifier: ^8.0.13 + version: 8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0) + +packages: + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.3': + resolution: {integrity: sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.3': + resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-jsx@7.28.6': + resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.28.6': + resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + + '@biomejs/biome@2.4.15': + resolution: {integrity: sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@2.4.15': + resolution: {integrity: sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@2.4.15': + resolution: {integrity: sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@2.4.15': + resolution: {integrity: sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@biomejs/cli-linux-arm64@2.4.15': + resolution: {integrity: sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@biomejs/cli-linux-x64-musl@2.4.15': + resolution: {integrity: sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@biomejs/cli-linux-x64@2.4.15': + resolution: {integrity: sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@biomejs/cli-win32-arm64@2.4.15': + resolution: {integrity: sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@2.4.15': + resolution: {integrity: sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@cacheable/memory@2.0.8': + resolution: {integrity: sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==} + + '@cacheable/utils@2.4.1': + resolution: {integrity: sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==} + + '@csstools/css-calc@3.2.1': + resolution: {integrity: sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.1.4': + resolution: {integrity: sha512-wgsqt92b7C7tQhIdPNxj0n9zuUbQlvAuI1exyzeNrOKOi62SD7ren8zqszmpVREjAOqg8cD2FqYhQfAuKjk4sw==} + peerDependencies: + css-tree: ^3.2.1 + peerDependenciesMeta: + css-tree: + optional: true + + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} + + '@csstools/media-query-list-parser@5.0.0': + resolution: {integrity: sha512-T9lXmZOfnam3eMERPsszjY5NK0jX8RmThmmm99FZ8b7z8yMaFZWKwLWGZuTwdO3ddRY5fy13GmmEYZXB4I98Eg==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/selector-resolve-nested@4.0.0': + resolution: {integrity: sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss-selector-parser: ^7.1.1 + + '@csstools/selector-specificity@6.0.0': + resolution: {integrity: sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss-selector-parser: ^7.1.1 + + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + + '@floating-ui/react-dom@2.1.8': + resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/react@0.27.19': + resolution: {integrity: sha512-31B8h5mm8YxotlE7/AU/PhNAl8eWxAmjL/v2QOxroDNkTFLk3Uu82u63N3b6TXa4EGJeeZLVcd/9AlNlVqzeog==} + peerDependencies: + react: '>=17.0.0' + react-dom: '>=17.0.0' + + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@keyv/bigmap@1.3.1': + resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==} + engines: {node: '>= 18'} + peerDependencies: + keyv: ^5.6.0 + + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + + '@kurkle/color@0.3.4': + resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} + + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@oxc-parser/binding-android-arm-eabi@0.120.0': + resolution: {integrity: sha512-WU3qtINx802wOl8RxAF1v0VvmC2O4D9M8Sv486nLeQ7iPHVmncYZrtBhB4SYyX+XZxj2PNnCcN+PW21jHgiOxg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-parser/binding-android-arm64@0.120.0': + resolution: {integrity: sha512-SEf80EHdhlbjZEgzeWm0ZA/br4GKMenDW3QB/gtyeTV1gStvvZeFi40ioHDZvds2m4Z9J1bUAUL8yn1/+A6iGg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-darwin-arm64@0.120.0': + resolution: {integrity: sha512-xVrrbCai8R8CUIBu3CjryutQnEYhZqs1maIqDvtUCFZb8vY33H7uh9mHpL3a0JBIKoBUKjPH8+rzyAeXnS2d6A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.120.0': + resolution: {integrity: sha512-xyHBbnJ6mydnQUH7MAcafOkkrNzQC6T+LXgDH/3InEq2BWl/g424IMRiJVSpVqGjB+p2bd0h0WRR8iIwzjU7rw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-freebsd-x64@0.120.0': + resolution: {integrity: sha512-UMnVRllquXUYTeNfFKmxTTEdZ/ix1nLl0ducDzMSREoWYGVIHnOOxoKMWlCOvRr9Wk/HZqo2rh1jeumbPGPV9A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.120.0': + resolution: {integrity: sha512-tkvn2CQ7QdcsMnpfiX3fd3wA3EFsWKYlcQzq9cFw/xc89Al7W6Y4O0FgLVkVQpo0Tnq/qtE1XfkJOnRRA9S/NA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.120.0': + resolution: {integrity: sha512-WN5y135Ic42gQDk9grbwY9++fDhqf8knN6fnP+0WALlAUh4odY/BDK1nfTJRSfpJD9P3r1BwU0m3pW2DU89whQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.120.0': + resolution: {integrity: sha512-1GgQBCcXvFMw99EPdMy+4NZ3aYyXsxjf9kbUUg8HuAy3ZBXzOry5KfFEzT9nqmgZI1cuetvApkiJBZLAPo8uaw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-arm64-musl@0.120.0': + resolution: {integrity: sha512-gmMQ70gsPdDBgpcErvJEoWNBr7bJooSLlvOBVBSGfOzlP5NvJ3bFvnUeZZ9d+dPrqSngtonf7nyzWUTUj/U+lw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-ppc64-gnu@0.120.0': + resolution: {integrity: sha512-T/kZuU0ajop0xhzVMwH5r3srC9Nqup5HaIo+3uFjIN5uPxa0LvSxC1ZqP4aQGJVW5G0z8/nCkjIfSMS91P/wzw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-gnu@0.120.0': + resolution: {integrity: sha512-vn21KXLAXzaI3N5CZWlBr1iWeXLl9QFIMor7S1hUjUGTeUuWCoE6JZB040/ZNDwf+JXPX8Ao9KbmJq9FMC2iGw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-musl@0.120.0': + resolution: {integrity: sha512-SUbUxlar007LTGmSLGIC5x/WJvwhdX+PwNzFJ9f/nOzZOrCFbOT4ikt7pJIRg1tXVsEfzk5mWpGO1NFiSs4PIw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-s390x-gnu@0.120.0': + resolution: {integrity: sha512-hYiPJTxyfJY2+lMBFk3p2bo0R9GN+TtpPFlRqVchL1qvLG+pznstramHNvJlw9AjaoRUHwp9IKR7UZQnRPGjgQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-gnu@0.120.0': + resolution: {integrity: sha512-q+5jSVZkprJCIy3dzJpApat0InJaoxQLsJuD6DkX8hrUS61z2lHQ1Fe9L2+TYbKHXCLWbL0zXe7ovkIdopBGMQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-musl@0.120.0': + resolution: {integrity: sha512-D9QDDZNnH24e7X4ftSa6ar/2hCavETfW3uk0zgcMIrZNy459O5deTbWrjGzZiVrSWigGtlQwzs2McBP0QsfV1w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-openharmony-arm64@0.120.0': + resolution: {integrity: sha512-TBU8ZwOUWAOUWVfmI16CYWbvh4uQb9zHnGBHsw5Cp2JUVG044OIY1CSHODLifqzQIMTXvDvLzcL89GGdUIqNrA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-wasm32-wasi@0.120.0': + resolution: {integrity: sha512-WG/FOZgDJCpJnuF3ToG/K28rcOmSY7FmFmfBKYb2fmLyhDzPpUldFGV7/Fz4ru0Iz/v4KPmf8xVgO8N3lO4KHA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-parser/binding-win32-arm64-msvc@0.120.0': + resolution: {integrity: sha512-1T0HKGcsz/BKo77t7+89L8Qvu4f9DoleKWHp3C5sJEcbCjDOLx3m9m722bWZTY+hANlUEs+yjlK+lBFsA+vrVQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.120.0': + resolution: {integrity: sha512-L7vfLzbOXsjBXV0rv/6Y3Jd9BRjPeCivINZAqrSyAOZN3moCopDN+Psq9ZrGNZtJzP8946MtlRFZ0Als0wBCOw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.120.0': + resolution: {integrity: sha512-ys+upfqNtSu58huAhJMBKl3XCkGzyVFBlMlGPzHeFKgpFF/OdgNs1MMf8oaJIbgMH8ZxgGF7qfue39eJohmKIg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.120.0': + resolution: {integrity: sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==} + + '@oxc-project/types@0.130.0': + resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==} + + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + engines: {node: '>= 10.0.0'} + + '@rolldown/binding-android-arm64@1.0.1': + resolution: {integrity: sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.1': + resolution: {integrity: sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.1': + resolution: {integrity: sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.1': + resolution: {integrity: sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.1': + resolution: {integrity: sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.1': + resolution: {integrity: sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.1': + resolution: {integrity: sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.1': + resolution: {integrity: sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.1': + resolution: {integrity: sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.1': + resolution: {integrity: sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.1': + resolution: {integrity: sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.1': + resolution: {integrity: sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.1': + resolution: {integrity: sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.1': + resolution: {integrity: sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.1': + resolution: {integrity: sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-rc.7': + resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + + '@tanstack/devtools-client@0.0.6': + resolution: {integrity: sha512-f85ZJXJnDIFOoykG/BFIixuAevJovCvJF391LPs6YjBAPhGYC50NWlx1y4iF/UmK5/cCMx+/JqI5SBOz7FanQQ==} + engines: {node: '>=18'} + + '@tanstack/devtools-event-bus@0.4.1': + resolution: {integrity: sha512-cNnJ89Q021Zf883rlbBTfsaxTfi2r73/qejGtyTa7ksErF3hyDyAq1aTbo5crK9dAL7zSHh9viKY1BtMls1QOA==} + engines: {node: '>=18'} + + '@tanstack/devtools-event-client@0.4.3': + resolution: {integrity: sha512-OZI6QyULw0FI0wjgmeYzCIfbgPsOEzwJtCpa69XrfLMtNXLGnz3d/dIabk7frg0TmHo+Ah49w5I4KC7Tufwsvw==} + engines: {node: '>=18'} + hasBin: true + + '@tanstack/devtools-vite@0.7.0': + resolution: {integrity: sha512-VXki7K+Xwnpo3IKdNSWGe7YOvtZv33YlulGqaQ+YCpeQhYg8JFuxP50BXibDoRLj5EOX4r21Hs7COdxbRHXkTw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@tanstack/form-core@1.32.0': + resolution: {integrity: sha512-Tn5VRDSjyqjmaet2tJMuEWDRFyrCaon03vxXPlSSaiSs6C/N7lCIwGCXJbZXEUq1kTj8jYN9qyXHbsz4LQHcow==} + + '@tanstack/history@1.161.6': + resolution: {integrity: sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==} + engines: {node: '>=20.19'} + + '@tanstack/pacer-lite@0.1.1': + resolution: {integrity: sha512-y/xtNPNt/YeyoVxE/JCx+T7yjEzpezmbb+toK8DDD1P4m7Kzs5YR956+7OKexG3f8aXgC3rLZl7b1V+yNUSy5w==} + engines: {node: '>=18'} + + '@tanstack/query-core@5.100.10': + resolution: {integrity: sha512-8UR0yJR+GiQ40m3lPhUr0xbfAupe6GSQiksSBSa9SM2NjezFyxXCIA69/lz8cSoNKZLrw1/PktIyQBJcVeMi3w==} + + '@tanstack/react-form@1.32.0': + resolution: {integrity: sha512-6WP5SQTA6/H9crCpvpq3ZppYWqtrdE5NjOy6ebABi6uAQPqhfTzrdjS9t40mCZCFtGI5585OhJV6zBP/KN2zcw==} + peerDependencies: + '@tanstack/react-start': '*' + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@tanstack/react-start': + optional: true + + '@tanstack/react-query@5.100.10': + resolution: {integrity: sha512-FLaZf2RCrA/Zgp4aiu5tG3TyasTRO7aZ99skxQpr3Hg/zXOhu6yq5FZCYQ/tRaJtM9ylnoK8tFK7PolXQadv6Q==} + peerDependencies: + react: ^18 || ^19 + + '@tanstack/react-router@1.169.2': + resolution: {integrity: sha512-OJM7Kguc7ERnweaNRWsyWgIKcl3z23rD1B4jaxjzd9RGdnzpt2HfrWa9rggbT0Hfzhfo4D2ZmsfoTme035tniQ==} + engines: {node: '>=20.19'} + peerDependencies: + react: '>=18.0.0 || >=19.0.0' + react-dom: '>=18.0.0 || >=19.0.0' + + '@tanstack/react-store@0.9.3': + resolution: {integrity: sha512-y2iHd/N9OkoQbFJLUX1T9vbc2O9tjH0pQRgTcx1/Nz4IlwLvkgpuglXUx+mXt0g5ZDFrEeDnONPqkbfxXJKwRg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@tanstack/router-core@1.169.2': + resolution: {integrity: sha512-5sm0DJF1A7Mz+9gy4Gz/lLovNailK3yot4vYvz9MkBUPw26uLnhQiR8hSCYxucjE0wD6Mdlc5l+Z0/XTlZ7xHw==} + engines: {node: '>=20.19'} + + '@tanstack/router-generator@1.166.42': + resolution: {integrity: sha512-2qBWC0t78r6b3vI+AbnvCZcFAvbYBDlLuWZrTjQbcjUmwG3qyeQp983tJyDuj9wb5//adG1tgAGXZkJ3aDwdBg==} + engines: {node: '>=20.19'} + + '@tanstack/router-plugin@1.167.35': + resolution: {integrity: sha512-UAScU5VAzLYVY4FML/Cbc5S5TucT4I8Ata05yozGOe4ZfepTKRffA5xWLtD2N+ov5svdv0KTX/kqlZnYPe28mA==} + engines: {node: '>=20.19'} + peerDependencies: + '@rsbuild/core': '>=1.0.2 || ^2.0.0' + '@tanstack/react-router': ^1.169.2 + vite: '>=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0' + vite-plugin-solid: ^2.11.10 || ^3.0.0-0 + webpack: '>=5.92.0' + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@tanstack/react-router': + optional: true + vite: + optional: true + vite-plugin-solid: + optional: true + webpack: + optional: true + + '@tanstack/router-utils@1.161.8': + resolution: {integrity: sha512-xyiLWEKjfBAVhauDSSjXxyf7s8elU6SM+V050sbkofvGmIIvkwPFtDsX7Gvwh14kBd6iCwAT+RiPvXTxAptY0Q==} + engines: {node: '>=20.19'} + + '@tanstack/store@0.9.3': + resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==} + + '@tanstack/virtual-file-routes@1.161.7': + resolution: {integrity: sha512-olW33+Cn+bsCsZKPwEGhlkqS6w3M2slFv11JIobdnCFKMLG97oAI2kWKdx5/zsywTL8flpnoIgaZZPlQTFYhdQ==} + engines: {node: '>=20.19'} + hasBin: true + + '@tauri-apps/api@2.11.0': + resolution: {integrity: sha512-7CinYODhky9lmO23xHnUFv0Xt43fbtWMyxZcLcRBlFkcgXKuEirBvHpmtJ89YMhyeGcq20Wuc47Fa4XjyniywA==} + + '@tauri-apps/plugin-http@2.5.9': + resolution: {integrity: sha512-lCiY0+vs4HvIUSvZrBs8TC3TiCB0MOPRmiUjTq4prW7SlcJE2jdLeT6KBsJrT9Tlplufl7W1pY6SFAO3gCWxDA==} + + '@tauri-apps/plugin-log@2.8.0': + resolution: {integrity: sha512-a+7rOq3MJwpTOLLKbL8d0qGZ85hgHw5pNOWusA9o3cf7cEgtYHiGY/+O8fj8MvywQIGqFv0da2bYQDlrqLE7rw==} + + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + + '@types/node@25.7.0': + resolution: {integrity: sha512-z+pdZyxE+RTQE9AcboAZCb4otwcrvgHD+GlBpPgn0emDVt0ohrTMhAwlr2Wd9nZ+nihhYFxO2pThz3C5qSu2Eg==} + + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + + '@uidotdev/usehooks@2.4.1': + resolution: {integrity: sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg==} + engines: {node: '>=16'} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@vitejs/plugin-react@6.0.1': + resolution: {integrity: sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 + babel-plugin-react-compiler: ^1.0.0 + vite: ^8.0.0 + peerDependenciesMeta: + '@rolldown/plugin-babel': + optional: true + babel-plugin-react-compiler: + optional: true + + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansis@4.3.0: + resolution: {integrity: sha512-44mvgtPvohuU/70DdY5Oz2AIrLJ9k6/5x4KmoSvPwO+5Moijo0+N9D0fKbbYZQWP1hNm5CpOf+E01jhxG/r8xg==} + engines: {node: '>=14'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + autoprefixer@10.5.0: + resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + babel-dead-code-elimination@1.0.12: + resolution: {integrity: sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==} + + baseline-browser-mapping@2.10.29: + resolution: {integrity: sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + cacheable@2.3.5: + resolution: {integrity: sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001792: + resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chart.js@4.5.1: + resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} + engines: {pnpm: '>=8'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-es@3.1.1: + resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==} + + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + css-functions-list@3.3.3: + resolution: {integrity: sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==} + engines: {node: '>=12'} + + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + dayjs@1.11.20: + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + diff@8.0.4: + resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} + engines: {node: '>=0.3.1'} + + electron-to-chromium@1.5.355: + resolution: {integrity: sha512-LUPZhKzZPYSPme1jEYohpkA+ybYCJztr1quAdBd7E7h3+VOBVcKkwwtBJu41nrjawrRzfb8mtMfzWozoaK0ZIQ==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@11.1.3: + resolution: {integrity: sha512-oMbq0PD6VIiIwMF6LIa7MEwd/l9huKwmqRKXqmrkqIZv8CvRbfowL+L0ryAl8h//HfAS0zS+4SbYoRyAoA6BJA==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + flat-cache@6.1.22: + resolution: {integrity: sha512-N2dnzVJIphnNsjHcrxGW7DePckJ6haPrSFqpsBUhHYgwtKGVq4JrBGielEGD2fCVnsGm1zlBVZ8wGhkyuetgug==} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + + framer-motion@12.38.0: + resolution: {integrity: sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + + global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + + globals@17.6.0: + resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} + engines: {node: '>=18'} + + globby@16.2.0: + resolution: {integrity: sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==} + engines: {node: '>=20'} + + globjoin@0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + + has-flag@5.0.1: + resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} + engines: {node: '>=12'} + + hashery@1.5.1: + resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==} + engines: {node: '>=20'} + + hookified@1.15.1: + resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==} + + hookified@2.2.0: + resolution: {integrity: sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==} + + html-tags@5.1.0: + resolution: {integrity: sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==} + engines: {node: '>=20.10'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + immutable@5.1.5: + resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + isbot@5.1.40: + resolution: {integrity: sha512-yNeeynhhtIVRBk12tBV4eHNxwB42HzR4Q3Ea7vCOiJhImGaAIdIMrbJtacQlBizGLjUPw+akkFI5Dn9T70XoVQ==} + engines: {node: '>=18'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keyv@5.6.0: + resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + known-css-properties@0.37.0: + resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} + + launch-editor@2.13.2: + resolution: {integrity: sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + mathml-tag-names@4.0.0: + resolution: {integrity: sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==} + + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + + meow@14.1.0: + resolution: {integrity: sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==} + engines: {node: '>=20'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + motion-dom@12.38.0: + resolution: {integrity: sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==} + + motion-utils@12.36.0: + resolution: {integrity: sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==} + + motion@12.38.0: + resolution: {integrity: sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-releases@2.0.44: + resolution: {integrity: sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + oxc-parser@0.120.0: + resolution: {integrity: sha512-WyPWZlcIm+Fkte63FGfgFB8mAAk33aH9h5N9lphXVOHSXEBFFsmYdOBedVKly363aWABjZdaj/m9lBfEY4wt+w==} + engines: {node: ^20.19.0 || >=22.12.0} + + p-timeout@7.0.1: + resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} + engines: {node: '>=20'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + + postcss-resolve-nested-selector@0.1.6: + resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==} + + postcss-safe-parser@7.0.1: + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + + postcss-scss@4.0.9: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.14: + resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} + engines: {node: ^10 || ^12 || >=14} + + prettier@3.8.3: + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} + engines: {node: '>=14'} + hasBin: true + + qified@0.10.1: + resolution: {integrity: sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==} + engines: {node: '>=20'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + radashi@12.9.1: + resolution: {integrity: sha512-HCvrL1Ag7qnyH11UiSWQaEIiizJ7kldHjBw63aELoum7C8nQrSLqotLDuKKvoRPtO0w8azCzUQcL3yrU3lBksw==} + engines: {node: '>=16.0.0'} + + react-chartjs-2@5.3.1: + resolution: {integrity: sha512-h5IPXKg9EXpjoBzUfyWJvllMjG2mQ4EiuHQFhms/AjUm0XSZHhyRy2xVmLXHKrtcdrPO4mnGqRtYoD0vp95A0A==} + peerDependencies: + chart.js: ^4.1.1 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + react-dom@19.2.6: + resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} + peerDependencies: + react: ^19.2.6 + + react@19.2.6: + resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} + engines: {node: '>=0.10.0'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rolldown@1.0.1: + resolution: {integrity: sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + sass@1.99.0: + resolution: {integrity: sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==} + engines: {node: '>=14.0.0'} + hasBin: true + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + seroval-plugins@1.5.4: + resolution: {integrity: sha512-S0xQPhUTefAhNvNWFg0c1J8qJArHt5KdtJ/cFAofo06KD1MVSeFWyl4iiu+ApDIuw0WhjpOfCdgConOfAnLgkw==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + + seroval@1.5.4: + resolution: {integrity: sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==} + engines: {node: '>=10'} + + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@8.2.1: + resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} + engines: {node: '>=20'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + stylelint-config-recommended-scss@17.0.1: + resolution: {integrity: sha512-x5DVehzJudcwF0od3sGpgkln2PLLranFE7twwbp7dqDINCyZvwzFkMc6TLhNOvazRiVBJYATQLouJY0xPGB8WA==} + engines: {node: '>=20'} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^17.0.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-recommended@18.0.0: + resolution: {integrity: sha512-mxgT2XY6YZ3HWWe3Di8umG6aBmWmHTblTgu/f10rqFXnyWxjKWwNdjSWkgkwCtxIKnqjSJzvFmPT5yabVIRxZg==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^17.0.0 + + stylelint-config-standard-scss@17.0.0: + resolution: {integrity: sha512-uLJS6xgOCBw5EMsDW7Ukji8l28qRoMnkRch15s0qwZpskXvWt9oPzMmcYM307m9GN4MxuWLsQh4I6hU9yI53cQ==} + engines: {node: '>=20'} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^17.0.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-standard@40.0.0: + resolution: {integrity: sha512-EznGJxOUhtWck2r6dJpbgAdPATIzvpLdK9+i5qPd4Lx70es66TkBPljSg4wN3Qnc6c4h2n+WbUrUynQ3fanjHw==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^17.0.0 + + stylelint-scss@7.1.1: + resolution: {integrity: sha512-pLPXJZ7RtAFNLXe8gqarf3B56ScVTd1vPiL9IFgcJkIZsYPzAgLJPh2h9NHrp3BFeKrtAkIgwQ08QSmhvlv1gA==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^16.8.2 || ^17.0.0 + + stylelint@17.11.1: + resolution: {integrity: sha512-+smN/HqVTggUx3iuAzOi9fPh8SrH+cJWlZrYVldXoJ06orWBhZ4Ue/QEp64oei6pVrAh4w3tG+Y12Vw7MbCFRQ==} + engines: {node: '>=20.19.0'} + hasBin: true + + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + + supports-hyperlinks@4.4.0: + resolution: {integrity: sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==} + engines: {node: '>=20'} + + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.21.0: + resolution: {integrity: sha512-w9IMgQrz4O0YN1LtB7K5P63vhlIOvC7opSmouCJ+ZywlPAlO9gIkJ+otk6LvGpAs2wg4econaCz3TvQ9xPoyuQ==} + + unicorn-magic@0.4.0: + resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} + engines: {node: '>=20'} + + unplugin@3.0.0: + resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==} + engines: {node: ^20.19.0 || >=22.12.0} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vite@8.0.13: + resolution: {integrity: sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + write-file-atomic@7.0.1: + resolution: {integrity: sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==} + engines: {node: ^20.17.0 || >=22.9.0} + + ws@8.20.1: + resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + + zustand@5.0.13: + resolution: {integrity: sha512-efI2tVaVQPqtOh114loML/Z80Y4NP3yc+Ff0fYiZJPauNeWZeIp/bRFD7I9bfmCOYBh/PHxlglQ9+wvlwnPikQ==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + +snapshots: + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.3': {} + + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.3 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.3 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.28.6': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.29.2': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + + '@babel/parser@7.29.3': + dependencies: + '@babel/types': 7.29.0 + + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.3 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@biomejs/biome@2.4.15': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.4.15 + '@biomejs/cli-darwin-x64': 2.4.15 + '@biomejs/cli-linux-arm64': 2.4.15 + '@biomejs/cli-linux-arm64-musl': 2.4.15 + '@biomejs/cli-linux-x64': 2.4.15 + '@biomejs/cli-linux-x64-musl': 2.4.15 + '@biomejs/cli-win32-arm64': 2.4.15 + '@biomejs/cli-win32-x64': 2.4.15 + + '@biomejs/cli-darwin-arm64@2.4.15': + optional: true + + '@biomejs/cli-darwin-x64@2.4.15': + optional: true + + '@biomejs/cli-linux-arm64-musl@2.4.15': + optional: true + + '@biomejs/cli-linux-arm64@2.4.15': + optional: true + + '@biomejs/cli-linux-x64-musl@2.4.15': + optional: true + + '@biomejs/cli-linux-x64@2.4.15': + optional: true + + '@biomejs/cli-win32-arm64@2.4.15': + optional: true + + '@biomejs/cli-win32-x64@2.4.15': + optional: true + + '@cacheable/memory@2.0.8': + dependencies: + '@cacheable/utils': 2.4.1 + '@keyv/bigmap': 1.3.1(keyv@5.6.0) + hookified: 1.15.1 + keyv: 5.6.0 + + '@cacheable/utils@2.4.1': + dependencies: + hashery: 1.5.1 + keyv: 5.6.0 + + '@csstools/css-calc@3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.1.4(css-tree@3.2.1)': + optionalDependencies: + css-tree: 3.2.1 + + '@csstools/css-tokenizer@4.0.0': {} + + '@csstools/media-query-list-parser@5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + + '@csstools/selector-specificity@6.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/react-dom@2.1.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@floating-ui/dom': 1.7.6 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@floating-ui/react@0.27.19(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@floating-ui/utils': 0.2.11 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + tabbable: 6.4.0 + + '@floating-ui/utils@0.2.11': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@keyv/bigmap@1.3.1(keyv@5.6.0)': + dependencies: + hashery: 1.5.1 + hookified: 1.15.1 + keyv: 5.6.0 + + '@keyv/serialize@1.1.1': {} + + '@kurkle/color@0.3.4': {} + + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@oxc-parser/binding-android-arm-eabi@0.120.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.120.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.120.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.120.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.120.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.120.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.120.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.120.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.120.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.120.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.120.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.120.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.120.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.120.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.120.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.120.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.120.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.120.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.120.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.120.0': + optional: true + + '@oxc-project/types@0.120.0': {} + + '@oxc-project/types@0.130.0': {} + + '@parcel/watcher-android-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-x64@2.5.6': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.6': + optional: true + + '@parcel/watcher-win32-arm64@2.5.6': + optional: true + + '@parcel/watcher-win32-ia32@2.5.6': + optional: true + + '@parcel/watcher-win32-x64@2.5.6': + optional: true + + '@parcel/watcher@2.5.6': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.4 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 + optional: true + + '@rolldown/binding-android-arm64@1.0.1': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.1': + optional: true + + '@rolldown/binding-darwin-x64@1.0.1': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.1': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.1': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.1': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.1': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.1': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.1': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.1': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.1': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.1': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.1': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.1': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.1': + optional: true + + '@rolldown/pluginutils@1.0.0-rc.7': {} + + '@rolldown/pluginutils@1.0.1': {} + + '@sindresorhus/merge-streams@4.0.0': {} + + '@tanstack/devtools-client@0.0.6': + dependencies: + '@tanstack/devtools-event-client': 0.4.3 + + '@tanstack/devtools-event-bus@0.4.1': + dependencies: + ws: 8.20.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@tanstack/devtools-event-client@0.4.3': {} + + '@tanstack/devtools-vite@0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0))': + dependencies: + '@tanstack/devtools-client': 0.0.6 + '@tanstack/devtools-event-bus': 0.4.1 + chalk: 5.6.2 + launch-editor: 2.13.2 + magic-string: 0.30.21 + oxc-parser: 0.120.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + picomatch: 4.0.4 + vite: 8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + - bufferutil + - utf-8-validate + + '@tanstack/form-core@1.32.0': + dependencies: + '@tanstack/devtools-event-client': 0.4.3 + '@tanstack/pacer-lite': 0.1.1 + '@tanstack/store': 0.9.3 + + '@tanstack/history@1.161.6': {} + + '@tanstack/pacer-lite@0.1.1': {} + + '@tanstack/query-core@5.100.10': {} + + '@tanstack/react-form@1.32.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@tanstack/form-core': 1.32.0 + '@tanstack/react-store': 0.9.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + transitivePeerDependencies: + - react-dom + + '@tanstack/react-query@5.100.10(react@19.2.6)': + dependencies: + '@tanstack/query-core': 5.100.10 + react: 19.2.6 + + '@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@tanstack/history': 1.161.6 + '@tanstack/react-store': 0.9.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@tanstack/router-core': 1.169.2 + isbot: 5.1.40 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@tanstack/react-store@0.9.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@tanstack/store': 0.9.3 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + use-sync-external-store: 1.6.0(react@19.2.6) + + '@tanstack/router-core@1.169.2': + dependencies: + '@tanstack/history': 1.161.6 + cookie-es: 3.1.1 + seroval: 1.5.4 + seroval-plugins: 1.5.4(seroval@1.5.4) + + '@tanstack/router-generator@1.166.42': + dependencies: + '@babel/types': 7.29.0 + '@tanstack/router-core': 1.169.2 + '@tanstack/router-utils': 1.161.8 + '@tanstack/virtual-file-routes': 1.161.7 + jiti: 2.7.0 + magic-string: 0.30.21 + prettier: 3.8.3 + zod: 3.25.76 + transitivePeerDependencies: + - supports-color + + '@tanstack/router-plugin@1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0))': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@tanstack/router-core': 1.169.2 + '@tanstack/router-generator': 1.166.42 + '@tanstack/router-utils': 1.161.8 + '@tanstack/virtual-file-routes': 1.161.7 + chokidar: 3.6.0 + unplugin: 3.0.0 + zod: 3.25.76 + optionalDependencies: + '@tanstack/react-router': 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + vite: 8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0) + transitivePeerDependencies: + - supports-color + + '@tanstack/router-utils@1.161.8': + dependencies: + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + ansis: 4.3.0 + babel-dead-code-elimination: 1.0.12 + diff: 8.0.4 + pathe: 2.0.3 + tinyglobby: 0.2.16 + transitivePeerDependencies: + - supports-color + + '@tanstack/store@0.9.3': {} + + '@tanstack/virtual-file-routes@1.161.7': {} + + '@tauri-apps/api@2.11.0': {} + + '@tauri-apps/plugin-http@2.5.9': + dependencies: + '@tauri-apps/api': 2.11.0 + + '@tauri-apps/plugin-log@2.8.0': + dependencies: + '@tauri-apps/api': 2.11.0 + + '@tybys/wasm-util@0.10.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/node@25.7.0': + dependencies: + undici-types: 7.21.0 + + '@types/react-dom@19.2.3(@types/react@19.2.14)': + dependencies: + '@types/react': 19.2.14 + + '@types/react@19.2.14': + dependencies: + csstype: 3.2.3 + + '@uidotdev/usehooks@2.4.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@vitejs/plugin-react@6.0.1(vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0))': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.7 + vite: 8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0) + + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansis@4.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 + + argparse@2.0.1: {} + + astral-regex@2.0.0: {} + + autoprefixer@10.5.0(postcss@8.5.14): + dependencies: + browserslist: 4.28.2 + caniuse-lite: 1.0.30001792 + fraction.js: 5.3.4 + picocolors: 1.1.1 + postcss: 8.5.14 + postcss-value-parser: 4.2.0 + + babel-dead-code-elimination@1.0.12: + dependencies: + '@babel/core': 7.29.0 + '@babel/parser': 7.29.3 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + baseline-browser-mapping@2.10.29: {} + + binary-extensions@2.3.0: {} + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.29 + caniuse-lite: 1.0.30001792 + electron-to-chromium: 1.5.355 + node-releases: 2.0.44 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + + cacheable@2.3.5: + dependencies: + '@cacheable/memory': 2.0.8 + '@cacheable/utils': 2.4.1 + hookified: 1.15.1 + keyv: 5.6.0 + qified: 0.10.1 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001792: {} + + chalk@5.6.2: {} + + chart.js@4.5.1: + dependencies: + '@kurkle/color': 0.3.4 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colord@2.9.3: {} + + convert-source-map@2.0.0: {} + + cookie-es@3.1.1: {} + + cosmiconfig@9.0.1(typescript@6.0.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + optionalDependencies: + typescript: 6.0.3 + + css-functions-list@3.3.3: {} + + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 + + cssesc@3.0.0: {} + + csstype@3.2.3: {} + + dayjs@1.11.20: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + detect-libc@2.1.2: {} + + diff@8.0.4: {} + + electron-to-chromium@1.5.355: {} + + emoji-regex@8.0.0: {} + + env-paths@2.2.1: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + escalade@3.2.0: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-uri@3.1.2: {} + + fastest-levenshtein@1.0.16: {} + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + file-entry-cache@11.1.3: + dependencies: + flat-cache: 6.1.22 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + flat-cache@6.1.22: + dependencies: + cacheable: 2.3.5 + flatted: 3.4.2 + hookified: 1.15.1 + + flatted@3.4.2: {} + + fraction.js@5.3.4: {} + + framer-motion@12.38.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + dependencies: + motion-dom: 12.38.0 + motion-utils: 12.36.0 + tslib: 2.8.1 + optionalDependencies: + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + fsevents@2.3.3: + optional: true + + gensync@1.0.0-beta.2: {} + + get-east-asian-width@1.6.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + global-modules@2.0.0: + dependencies: + global-prefix: 3.0.0 + + global-prefix@3.0.0: + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + + globals@17.6.0: {} + + globby@16.2.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + is-path-inside: 4.0.0 + slash: 5.1.0 + unicorn-magic: 0.4.0 + + globjoin@0.1.4: {} + + has-flag@5.0.1: {} + + hashery@1.5.1: + dependencies: + hookified: 1.15.1 + + hookified@1.15.1: {} + + hookified@2.2.0: {} + + html-tags@5.1.0: {} + + ignore@7.0.5: {} + + immutable@5.1.5: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-meta-resolve@4.2.0: {} + + ini@1.3.8: {} + + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-path-inside@4.0.0: {} + + is-plain-object@5.0.0: {} + + isbot@5.1.40: {} + + isexe@2.0.0: {} + + jiti@2.7.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@1.0.0: {} + + json5@2.2.3: {} + + keyv@5.6.0: + dependencies: + '@keyv/serialize': 1.1.1 + + kind-of@6.0.3: {} + + known-css-properties@0.37.0: {} + + launch-editor@2.13.2: + dependencies: + picocolors: 1.1.1 + shell-quote: 1.8.3 + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + lines-and-columns@1.2.4: {} + + lodash.truncate@4.4.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + mathml-tag-names@4.0.0: {} + + mdn-data@2.27.1: {} + + meow@14.1.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + motion-dom@12.38.0: + dependencies: + motion-utils: 12.36.0 + + motion-utils@12.36.0: {} + + motion@12.38.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + dependencies: + framer-motion: 12.38.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + tslib: 2.8.1 + optionalDependencies: + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + ms@2.1.3: {} + + nanoid@3.3.12: {} + + node-addon-api@7.1.1: + optional: true + + node-releases@2.0.44: {} + + normalize-path@3.0.0: {} + + oxc-parser@0.120.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + dependencies: + '@oxc-project/types': 0.120.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.120.0 + '@oxc-parser/binding-android-arm64': 0.120.0 + '@oxc-parser/binding-darwin-arm64': 0.120.0 + '@oxc-parser/binding-darwin-x64': 0.120.0 + '@oxc-parser/binding-freebsd-x64': 0.120.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.120.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.120.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.120.0 + '@oxc-parser/binding-linux-arm64-musl': 0.120.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.120.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.120.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.120.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.120.0 + '@oxc-parser/binding-linux-x64-gnu': 0.120.0 + '@oxc-parser/binding-linux-x64-musl': 0.120.0 + '@oxc-parser/binding-openharmony-arm64': 0.120.0 + '@oxc-parser/binding-wasm32-wasi': 0.120.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@oxc-parser/binding-win32-arm64-msvc': 0.120.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.120.0 + '@oxc-parser/binding-win32-x64-msvc': 0.120.0 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + p-timeout@7.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.29.0 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + pathe@2.0.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.4: {} + + postcss-media-query-parser@0.2.3: {} + + postcss-resolve-nested-selector@0.1.6: {} + + postcss-safe-parser@7.0.1(postcss@8.5.14): + dependencies: + postcss: 8.5.14 + + postcss-scss@4.0.9(postcss@8.5.14): + dependencies: + postcss: 8.5.14 + + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.14: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prettier@3.8.3: {} + + qified@0.10.1: + dependencies: + hookified: 2.2.0 + + queue-microtask@1.2.3: {} + + radashi@12.9.1: {} + + react-chartjs-2@5.3.1(chart.js@4.5.1)(react@19.2.6): + dependencies: + chart.js: 4.5.1 + react: 19.2.6 + + react-dom@19.2.6(react@19.2.6): + dependencies: + react: 19.2.6 + scheduler: 0.27.0 + + react@19.2.6: {} + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.2 + + readdirp@4.1.2: {} + + require-from-string@2.0.2: {} + + resolve-from@4.0.0: {} + + reusify@1.1.0: {} + + rolldown@1.0.1: + dependencies: + '@oxc-project/types': 0.130.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.1 + '@rolldown/binding-darwin-arm64': 1.0.1 + '@rolldown/binding-darwin-x64': 1.0.1 + '@rolldown/binding-freebsd-x64': 1.0.1 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.1 + '@rolldown/binding-linux-arm64-gnu': 1.0.1 + '@rolldown/binding-linux-arm64-musl': 1.0.1 + '@rolldown/binding-linux-ppc64-gnu': 1.0.1 + '@rolldown/binding-linux-s390x-gnu': 1.0.1 + '@rolldown/binding-linux-x64-gnu': 1.0.1 + '@rolldown/binding-linux-x64-musl': 1.0.1 + '@rolldown/binding-openharmony-arm64': 1.0.1 + '@rolldown/binding-wasm32-wasi': 1.0.1 + '@rolldown/binding-win32-arm64-msvc': 1.0.1 + '@rolldown/binding-win32-x64-msvc': 1.0.1 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + sass@1.99.0: + dependencies: + chokidar: 4.0.3 + immutable: 5.1.5 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.6 + + scheduler@0.27.0: {} + + semver@6.3.1: {} + + seroval-plugins@1.5.4(seroval@1.5.4): + dependencies: + seroval: 1.5.4 + + seroval@1.5.4: {} + + shell-quote@1.8.3: {} + + signal-exit@4.1.0: {} + + slash@5.1.0: {} + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + source-map-js@1.2.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@8.2.1: + dependencies: + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + + stylelint-config-recommended-scss@17.0.1(postcss@8.5.14)(stylelint@17.11.1(typescript@6.0.3)): + dependencies: + postcss-scss: 4.0.9(postcss@8.5.14) + stylelint: 17.11.1(typescript@6.0.3) + stylelint-config-recommended: 18.0.0(stylelint@17.11.1(typescript@6.0.3)) + stylelint-scss: 7.1.1(stylelint@17.11.1(typescript@6.0.3)) + optionalDependencies: + postcss: 8.5.14 + + stylelint-config-recommended@18.0.0(stylelint@17.11.1(typescript@6.0.3)): + dependencies: + stylelint: 17.11.1(typescript@6.0.3) + + stylelint-config-standard-scss@17.0.0(postcss@8.5.14)(stylelint@17.11.1(typescript@6.0.3)): + dependencies: + stylelint: 17.11.1(typescript@6.0.3) + stylelint-config-recommended-scss: 17.0.1(postcss@8.5.14)(stylelint@17.11.1(typescript@6.0.3)) + stylelint-config-standard: 40.0.0(stylelint@17.11.1(typescript@6.0.3)) + optionalDependencies: + postcss: 8.5.14 + + stylelint-config-standard@40.0.0(stylelint@17.11.1(typescript@6.0.3)): + dependencies: + stylelint: 17.11.1(typescript@6.0.3) + stylelint-config-recommended: 18.0.0(stylelint@17.11.1(typescript@6.0.3)) + + stylelint-scss@7.1.1(stylelint@17.11.1(typescript@6.0.3)): + dependencies: + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-syntax-patches-for-csstree': 1.1.4(css-tree@3.2.1) + '@csstools/css-tokenizer': 4.0.0 + css-tree: 3.2.1 + is-plain-object: 5.0.0 + known-css-properties: 0.37.0 + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.6 + postcss-selector-parser: 7.1.1 + postcss-value-parser: 4.2.0 + stylelint: 17.11.1(typescript@6.0.3) + + stylelint@17.11.1(typescript@6.0.3): + dependencies: + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-syntax-patches-for-csstree': 1.1.4(css-tree@3.2.1) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) + colord: 2.9.3 + cosmiconfig: 9.0.1(typescript@6.0.3) + css-functions-list: 3.3.3 + css-tree: 3.2.1 + debug: 4.4.3 + fast-glob: 3.3.3 + fastest-levenshtein: 1.0.16 + file-entry-cache: 11.1.3 + global-modules: 2.0.0 + globby: 16.2.0 + globjoin: 0.1.4 + html-tags: 5.1.0 + ignore: 7.0.5 + import-meta-resolve: 4.2.0 + mathml-tag-names: 4.0.0 + meow: 14.1.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.14 + postcss-safe-parser: 7.0.1(postcss@8.5.14) + postcss-selector-parser: 7.1.1 + postcss-value-parser: 4.2.0 + string-width: 8.2.1 + supports-hyperlinks: 4.4.0 + svg-tags: 1.0.0 + table: 6.9.0 + write-file-atomic: 7.0.1 + transitivePeerDependencies: + - supports-color + - typescript + + supports-color@10.2.2: {} + + supports-hyperlinks@4.4.0: + dependencies: + has-flag: 5.0.1 + supports-color: 10.2.2 + + svg-tags@1.0.0: {} + + tabbable@6.4.0: {} + + table@6.9.0: + dependencies: + ajv: 8.20.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tslib@2.8.1: {} + + typescript@6.0.3: {} + + undici-types@7.21.0: {} + + unicorn-magic@0.4.0: {} + + unplugin@3.0.0: + dependencies: + '@jridgewell/remapping': 2.3.5 + picomatch: 4.0.4 + webpack-virtual-modules: 0.6.2 + + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + use-sync-external-store@1.6.0(react@19.2.6): + dependencies: + react: 19.2.6 + + util-deprecate@1.0.2: {} + + vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.14 + rolldown: 1.0.1 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 25.7.0 + fsevents: 2.3.3 + jiti: 2.7.0 + sass: 1.99.0 + + webpack-virtual-modules@0.6.2: {} + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + write-file-atomic@7.0.1: + dependencies: + signal-exit: 4.1.0 + + ws@8.20.1: {} + + yallist@3.1.1: {} + + zod@3.25.76: {} + + zod@4.4.3: {} + + zustand@5.0.13(@types/react@19.2.14)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)): + optionalDependencies: + '@types/react': 19.2.14 + react: 19.2.6 + use-sync-external-store: 1.6.0(react@19.2.6) diff --git a/new-ui/pnpm-workspace.yaml b/new-ui/pnpm-workspace.yaml new file mode 100644 index 000000000..620a7bb79 --- /dev/null +++ b/new-ui/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +allowBuilds: + '@parcel/watcher': true diff --git a/new-ui/public/favicon.svg b/new-ui/public/favicon.svg new file mode 100644 index 000000000..6893eb132 --- /dev/null +++ b/new-ui/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/new-ui/public/fonts/geist/Geist-Bold.woff2 b/new-ui/public/fonts/geist/Geist-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..46f524f4ffe6cc59bbb66dfc4b933c98ea98d79c GIT binary patch literal 42596 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 literal 0 HcmV?d00001 diff --git a/new-ui/public/fonts/geist/Geist-BoldItalic.woff2 b/new-ui/public/fonts/geist/Geist-BoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..240acb99e7f8faef65923c9ba54cf8d6fba4e7d5 GIT binary patch literal 43144 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 E09B1k6#xJL literal 0 HcmV?d00001 diff --git a/new-ui/public/fonts/geist/Geist-Medium.woff2 b/new-ui/public/fonts/geist/Geist-Medium.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ef6dbb21156083d34f49777e0abc16c1e2583d6b GIT binary patch literal 42444 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 literal 0 HcmV?d00001 diff --git a/new-ui/public/fonts/geist/Geist-MediumItalic.woff2 b/new-ui/public/fonts/geist/Geist-MediumItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..344fedaf930f0c1abc1b6c2804b6008f04c480bb GIT binary patch literal 43136 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 jd|6{r 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 literal 0 HcmV?d00001 diff --git a/new-ui/public/fonts/geist/Geist-SemiBold.woff2 b/new-ui/public/fonts/geist/Geist-SemiBold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..83845230394cf20fbe0f7ecf631bd0dda5a7c871 GIT binary patch literal 42488 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 Y_aFXWBme2g^la|Wv(FR1dI|sl0L(0scmMzZ literal 0 HcmV?d00001 diff --git a/new-ui/public/fonts/geist/Geist-SemiBoldItalic.woff2 b/new-ui/public/fonts/geist/Geist-SemiBoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2f53ced420091394b417e1b70fbd495033a01388 GIT binary patch literal 43076 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

K+^{$}hu*DPFI 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 kKiR`SaT? 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

n;(xiy1rmCEH9%+5AkK0c9Mmp$Bpno>X5 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%0A8;vgQ=!?I3ie`l+=pu?>UlrjFQ?&c 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

3}`083+mir3b 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

u0;?uWO_?-|8O8&D*j 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 Qsd`%9Nuz;I8UO&`KVo}q*Z=?k literal 0 HcmV?d00001 diff --git a/new-ui/public/fonts/jetbrains_mono/JetBrainsMono-SemiBoldItalic.woff2 b/new-ui/public/fonts/jetbrains_mono/JetBrainsMono-SemiBoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c5dd294b472e6ab380a34c14e19895f6a2d365c9 GIT binary patch literal 98124 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≶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 Bf)fA$ literal 0 HcmV?d00001 diff --git a/new-ui/public/icons.svg b/new-ui/public/icons.svg new file mode 100644 index 000000000..e9522193d --- /dev/null +++ b/new-ui/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/new-ui/src/app/App.tsx b/new-ui/src/app/App.tsx new file mode 100644 index 000000000..b1ffd0fc3 --- /dev/null +++ b/new-ui/src/app/App.tsx @@ -0,0 +1,23 @@ +import { QueryClientProvider } from '@tanstack/react-query'; +import { RouterProvider } from '@tanstack/react-router'; +import { MainBackground } from '../shared/components/MainBackground/MainBackground'; +import { TauriEventProvider } from '../shared/providers/TauriEventProvider'; +import { queryClient } from './query'; +import { router } from './router'; + +function App() { + return ( +

+ +
+ + + + + +
+
+ ); +} + +export default App; diff --git a/new-ui/src/app/day.ts b/new-ui/src/app/day.ts new file mode 100644 index 000000000..ef815f1ee --- /dev/null +++ b/new-ui/src/app/day.ts @@ -0,0 +1,10 @@ +import dayjs from 'dayjs'; +import relativeTime from 'dayjs/plugin/relativeTime'; +import 'dayjs/locale/en'; +import localizedFormat from 'dayjs/plugin/localizedFormat'; +import utc from 'dayjs/plugin/utc'; + +dayjs.extend(relativeTime); +dayjs.extend(utc); +dayjs.extend(localizedFormat); +dayjs.locale('en'); diff --git a/new-ui/src/app/query.ts b/new-ui/src/app/query.ts new file mode 100644 index 000000000..98775f699 --- /dev/null +++ b/new-ui/src/app/query.ts @@ -0,0 +1,40 @@ +import { MutationCache, QueryClient, type QueryKey } from '@tanstack/react-query'; + +type InvalidateMeta = { invalidate?: QueryKey[] | QueryKey }; + +let queryClient: QueryClient; + +type RO = readonly unknown[]; + +const isArrayFlat = (arr: RO | readonly RO[]): boolean => + arr.every((item) => !Array.isArray(item)); + +const mutationCache = new MutationCache({ + onSuccess: async (_data, _variables, _context, mutation) => { + const keys = (mutation.meta as InvalidateMeta | undefined)?.invalidate; + if (!Array.isArray(keys) || keys.length === 0) return; + if (isArrayFlat(keys)) { + await queryClient.invalidateQueries({ queryKey: keys }); + } else { + await Promise.all( + keys.map((key) => queryClient.invalidateQueries({ queryKey: key as QueryKey })), + ); + } + }, +}); + +queryClient = new QueryClient({ + mutationCache, + defaultOptions: { + queries: { + staleTime: 30_000, + gcTime: 10 * 60_000, + refetchOnWindowFocus: true, + refetchOnMount: true, + refetchOnReconnect: true, + retry: false, + }, + }, +}); + +export { queryClient }; diff --git a/new-ui/src/app/router.ts b/new-ui/src/app/router.ts new file mode 100644 index 000000000..100bf812f --- /dev/null +++ b/new-ui/src/app/router.ts @@ -0,0 +1,20 @@ +import { createRouter } from '@tanstack/react-router'; +import { routeTree } from '../routeTree.gen'; +import { NotFoundRoute } from '../shared/components/NotFoundRoute/NotFoundRoute'; +import { queryClient } from './query'; + +export const router = createRouter({ + routeTree, + basepath: import.meta.env.BASE_URL, + defaultPreloadStaleTime: 0, + defaultNotFoundComponent: NotFoundRoute, + context: { + queryClient, + }, +}); + +declare module '@tanstack/react-router' { + interface Register { + router: typeof router; + } +} diff --git a/new-ui/src/main.tsx b/new-ui/src/main.tsx new file mode 100644 index 000000000..8d5ec030d --- /dev/null +++ b/new-ui/src/main.tsx @@ -0,0 +1,12 @@ +import './app/day.ts'; +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import App from './app/App.tsx'; +import './shared/scss/index.scss'; + +// biome-ignore lint/style/noNonNullAssertion: this element is static in index.html +createRoot(document.getElementById('root')!).render( + + + , +); diff --git a/new-ui/src/pages/compact/CompactEmptyPage/CompactEmptyPage.tsx b/new-ui/src/pages/compact/CompactEmptyPage/CompactEmptyPage.tsx new file mode 100644 index 000000000..3c414b688 --- /dev/null +++ b/new-ui/src/pages/compact/CompactEmptyPage/CompactEmptyPage.tsx @@ -0,0 +1,29 @@ +import './style.scss'; +import { Button } from '../../../shared/components/Button/Button'; +import { ButtonSize, ButtonVariant } from '../../../shared/components/Button/types'; +import { Icon, IconKind } from '../../../shared/components/Icon'; +import { WindowHeader } from '../../../shared/components/WindowHeader/WindowHeader'; +import { api } from '../../../shared/rust-api/api'; +import { CompactPage } from '../CompactPage/CompactPage'; + +export const CompactEmptyPage = () => { + return ( + + +
+
+ +

{`You don't have any instances or tunnels yet. Click the button below to open Defguard.`}

+
+
+
+ ); +}; diff --git a/new-ui/src/pages/compact/CompactEmptyPage/style.scss b/new-ui/src/pages/compact/CompactEmptyPage/style.scss new file mode 100644 index 000000000..7fed3b63a --- /dev/null +++ b/new-ui/src/pages/compact/CompactEmptyPage/style.scss @@ -0,0 +1,24 @@ +#compact-empty-page { + .empty-card { + border-radius: 12px; + box-sizing: border-box; + padding: var(--spacing-lg); + background-color: var(--bg-dark-blue-40); + width: 100%; + min-height: 277px; + display: flex; + flex-flow: column; + align-items: center; + justify-content: center; + + > .icon { + margin-bottom: var(--spacing-lg); + } + + > p { + font: var(--t-body-xs-400); + color: var(--bg-white-100); + padding-bottom: var(--spacing-xl); + } + } +} diff --git a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx new file mode 100644 index 000000000..8549451bd --- /dev/null +++ b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx @@ -0,0 +1,109 @@ +import './style.scss'; +import { useQuery } from '@tanstack/react-query'; +import { useLoaderData } from '@tanstack/react-router'; +import { useEffect, useMemo } from 'react'; +import { Button } from '../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../shared/components/Button/types'; +import { Controls } from '../../../shared/components/Controls/Controls'; +import { Divider } from '../../../shared/components/Divider/Divider'; +import { LocationCard } from '../../../shared/components/LocationCard/LocationCard'; +import { WindowHeader } from '../../../shared/components/WindowHeader/WindowHeader'; +import { api } from '../../../shared/rust-api/api'; +import { + getInstancesQueryOptions, + getLocationsQueryOptions, +} from '../../../shared/rust-api/query'; +import { ThemeSpacing } from '../../../shared/types'; +import { isPresent } from '../../../shared/utils/isPresent'; +import { CompactPage } from '../CompactPage/CompactPage'; +import { InstanceSwitcher } from './components/InstanceSwitcher'; +import { useCompactLocationStore } from './hooks/useCompactLocationsStore'; + +export const CompactLocationsPage = () => { + const selection = useCompactLocationStore((s) => s.compactViewSelection); + const openLocation = useCompactLocationStore((s) => s.expandedLocation); + + const routeData = useLoaderData({ from: '/' }); + + const queryInstanceId = useMemo(() => { + if (!isPresent(selection)) return routeData.instances[0].id; + if (selection.kind === 'instance') return selection.data.id; + return selection.data.instance_id; + }, [selection, routeData.instances]); + + const { data: locations } = useQuery(getLocationsQueryOptions(queryInstanceId)); + + const { data: instances } = useQuery(getInstancesQueryOptions); + + const instanceInfo = useMemo(() => { + const allInstances = instances ?? routeData.instances; + if (!isPresent(selection)) return allInstances[0]; + if (selection.kind === 'instance') + return allInstances.find((i) => i.id === selection.data.id); + return allInstances.find((i) => i.id === selection.data.instance_id); + }, [selection, instances, routeData.instances]); + + const displayedLocations = useMemo(() => { + if (!isPresent(selection) || selection.kind === 'instance') { + return locations ?? routeData.locations; + } + return [selection.data]; + }, [selection, locations, routeData.locations]); + + useEffect(() => { + if (selection === null || instanceInfo === undefined) { + useCompactLocationStore.setState({ + compactViewSelection: { kind: 'instance', data: routeData.instances[0] }, + }); + } + }, [routeData.instances, instanceInfo, selection]); + + return ( + + +
+ +
+ {isPresent(instanceInfo) && + displayedLocations.map((location) => { + const isOpen = + location.id === openLocation || displayedLocations.length === 1; + return ( + { + if (isOpen) { + useCompactLocationStore.setState({ expandedLocation: null }); + } else { + useCompactLocationStore.setState({ expandedLocation: location.id }); + } + }} + /> + ); + })} +
+
+
+ + +
+
+ ); +}; diff --git a/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx b/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx new file mode 100644 index 000000000..cc7d6ff38 --- /dev/null +++ b/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx @@ -0,0 +1,84 @@ +import { useQuery } from '@tanstack/react-query'; +import { useMemo } from 'react'; +import { Select } from '../../../../shared/components/Select/Select'; +import type { + SelectOption, + SelectOptionGroup, +} from '../../../../shared/components/Select/types'; +import { + getInstancesQueryOptions, + getTunnelsQueryOptions, +} from '../../../../shared/rust-api/query'; +import { isPresent } from '../../../../shared/utils/isPresent'; +import { + type CompactViewSelection, + useCompactLocationStore, +} from '../hooks/useCompactLocationsStore'; + +export const InstanceSwitcher = () => { + const selectedInstance = useCompactLocationStore((s) => s.compactViewSelection); + + const { data: tunnels } = useQuery(getTunnelsQueryOptions); + const { data: instances } = useQuery(getInstancesQueryOptions); + + const groups = useMemo((): readonly SelectOptionGroup[] => { + if (!isPresent(instances) || !isPresent(tunnels)) return []; + + const instanceGroup: SelectOptionGroup = { + key: 'instances', + label: 'Instances', + options: instances.map((instance) => ({ + key: instance.id, + label: instance.name, + value: { kind: 'instance', data: instance }, + })), + }; + + const tunnelGroup: SelectOptionGroup = { + key: 'tunnels', + label: 'Tunnels', + options: tunnels.map((tunnel) => ({ + key: tunnel.id ?? tunnel.name, + label: tunnel.name, + value: { kind: 'tunnel', data: tunnel }, + })), + }; + + return [instanceGroup, tunnelGroup]; + }, [instances, tunnels]); + + const totalOptions = useMemo( + () => groups.reduce((acc, g) => acc + g.options.length, 0), + [groups], + ); + + const selectedOption = useMemo((): SelectOption | undefined => { + if (!isPresent(selectedInstance)) return undefined; + for (const group of groups) { + const found = group.options.find((o) => { + if (selectedInstance.kind === 'instance' && o.value.kind === 'instance') { + return o.value.data.id === selectedInstance.data.id; + } + if (selectedInstance.kind === 'tunnel' && o.value.kind === 'tunnel') { + return o.value.data.id === selectedInstance.data.id; + } + return false; + }); + if (found) return found; + } + return undefined; + }, [selectedInstance, groups]); + + if (!isPresent(instances) || !isPresent(tunnels)) return null; + if (totalOptions <= 1) return null; + + return ( + + + + ); +}; diff --git a/new-ui/src/routeTree.gen.ts b/new-ui/src/routeTree.gen.ts new file mode 100644 index 000000000..c52b87831 --- /dev/null +++ b/new-ui/src/routeTree.gen.ts @@ -0,0 +1,95 @@ +/* eslint-disable */ + +// @ts-nocheck + +// noinspection JSUnusedGlobalSymbols + +// This file was automatically generated by TanStack Router. +// You should NOT make any changes in this file as it will be overwritten. +// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. + +import { Route as rootRouteImport } from './routes/__root' +import { Route as EmptyRouteImport } from './routes/empty' +import { Route as IndexRouteImport } from './routes/index' +import { Route as PlaygroundIndexRouteImport } from './routes/playground/index' + +const EmptyRoute = EmptyRouteImport.update({ + id: '/empty', + path: '/empty', + getParentRoute: () => rootRouteImport, +} as any) +const IndexRoute = IndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => rootRouteImport, +} as any) +const PlaygroundIndexRoute = PlaygroundIndexRouteImport.update({ + id: '/playground/', + path: '/playground/', + getParentRoute: () => rootRouteImport, +} as any) + +export interface FileRoutesByFullPath { + '/': typeof IndexRoute + '/empty': typeof EmptyRoute + '/playground/': typeof PlaygroundIndexRoute +} +export interface FileRoutesByTo { + '/': typeof IndexRoute + '/empty': typeof EmptyRoute + '/playground': typeof PlaygroundIndexRoute +} +export interface FileRoutesById { + __root__: typeof rootRouteImport + '/': typeof IndexRoute + '/empty': typeof EmptyRoute + '/playground/': typeof PlaygroundIndexRoute +} +export interface FileRouteTypes { + fileRoutesByFullPath: FileRoutesByFullPath + fullPaths: '/' | '/empty' | '/playground/' + fileRoutesByTo: FileRoutesByTo + to: '/' | '/empty' | '/playground' + id: '__root__' | '/' | '/empty' | '/playground/' + fileRoutesById: FileRoutesById +} +export interface RootRouteChildren { + IndexRoute: typeof IndexRoute + EmptyRoute: typeof EmptyRoute + PlaygroundIndexRoute: typeof PlaygroundIndexRoute +} + +declare module '@tanstack/react-router' { + interface FileRoutesByPath { + '/empty': { + id: '/empty' + path: '/empty' + fullPath: '/empty' + preLoaderRoute: typeof EmptyRouteImport + parentRoute: typeof rootRouteImport + } + '/': { + id: '/' + path: '/' + fullPath: '/' + preLoaderRoute: typeof IndexRouteImport + parentRoute: typeof rootRouteImport + } + '/playground/': { + id: '/playground/' + path: '/playground' + fullPath: '/playground/' + preLoaderRoute: typeof PlaygroundIndexRouteImport + parentRoute: typeof rootRouteImport + } + } +} + +const rootRouteChildren: RootRouteChildren = { + IndexRoute: IndexRoute, + EmptyRoute: EmptyRoute, + PlaygroundIndexRoute: PlaygroundIndexRoute, +} +export const routeTree = rootRouteImport + ._addFileChildren(rootRouteChildren) + ._addFileTypes() diff --git a/new-ui/src/routes/__root.tsx b/new-ui/src/routes/__root.tsx new file mode 100644 index 000000000..0bf726153 --- /dev/null +++ b/new-ui/src/routes/__root.tsx @@ -0,0 +1,16 @@ +import type { QueryClient } from '@tanstack/react-query'; +import { createRootRouteWithContext, Outlet } from '@tanstack/react-router'; + +interface RouterContext { + queryClient: QueryClient; +} + +export const Route = createRootRouteWithContext()({ + component: RootComponent, + pendingMs: 500, + pendingMinMs: 250, +}); + +function RootComponent() { + return ; +} diff --git a/new-ui/src/routes/empty.tsx b/new-ui/src/routes/empty.tsx new file mode 100644 index 000000000..d01978392 --- /dev/null +++ b/new-ui/src/routes/empty.tsx @@ -0,0 +1,9 @@ +import { createFileRoute } from '@tanstack/react-router'; + +export const Route = createFileRoute('/empty')({ + component: RouteComponent, +}); + +function RouteComponent() { + return
Hello "/empty"!
; +} diff --git a/new-ui/src/routes/index.tsx b/new-ui/src/routes/index.tsx new file mode 100644 index 000000000..7b2a9767c --- /dev/null +++ b/new-ui/src/routes/index.tsx @@ -0,0 +1,58 @@ +import { createFileRoute, redirect } from '@tanstack/react-router'; +import { CompactLocationsPage } from '../pages/compact/CompactLocationsPage/CompactLocationsPage'; +import { useCompactLocationStore } from '../pages/compact/CompactLocationsPage/hooks/useCompactLocationsStore'; +import { + getInstancesQueryOptions, + getLocationsQueryOptions, + getTunnelsQueryOptions, +} from '../shared/rust-api/query'; +import type { LocationInfo } from '../shared/rust-api/types'; + +export const Route = createFileRoute('/')({ + loader: async ({ context }) => { + const [instances, tunnels] = await Promise.all([ + context.queryClient.fetchQuery(getInstancesQueryOptions), + context.queryClient.fetchQuery(getTunnelsQueryOptions), + ]); + + if (instances.length === 0 && tunnels.length === 0) { + throw redirect({ to: '/empty' }); + } + + const stored = useCompactLocationStore.getState().compactViewSelection; + + let storedIsValid: boolean; + if (stored === null) { + storedIsValid = false; + } else if (stored.kind === 'instance') { + storedIsValid = instances.some((i) => i.id === stored.data.id); + } else { + storedIsValid = tunnels.some((t) => t.id === stored.data.id); + } + + let selected: NonNullable; + if (storedIsValid && stored !== null) { + selected = stored; + } else if (instances.length > 0) { + selected = { kind: 'instance', data: instances[0] }; + } else { + selected = { kind: 'tunnel', data: tunnels[0] }; + } + + if (!storedIsValid) { + useCompactLocationStore.setState({ compactViewSelection: selected }); + } + + let locations: LocationInfo[]; + if (selected.kind === 'instance') { + locations = await context.queryClient.fetchQuery( + getLocationsQueryOptions(selected.data.id), + ); + } else { + locations = []; + } + + return { instances, tunnels, locations }; + }, + component: CompactLocationsPage, +}); diff --git a/new-ui/src/routes/playground/index.tsx b/new-ui/src/routes/playground/index.tsx new file mode 100644 index 000000000..3bf3cf213 --- /dev/null +++ b/new-ui/src/routes/playground/index.tsx @@ -0,0 +1,6 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { PlaygroundIndex } from '../../pages/playground/PlaygroundIndex'; + +export const Route = createFileRoute('/playground/')({ + component: PlaygroundIndex, +}); diff --git a/new-ui/src/shared/components/BoxIcon/BoxIcon.tsx b/new-ui/src/shared/components/BoxIcon/BoxIcon.tsx new file mode 100644 index 000000000..4fc899612 --- /dev/null +++ b/new-ui/src/shared/components/BoxIcon/BoxIcon.tsx @@ -0,0 +1,6 @@ +import './style.scss'; +import type { PropsWithChildren } from 'react'; + +export const BoxIcon = ({ children }: PropsWithChildren) => { + return
{children}
; +}; diff --git a/new-ui/src/shared/components/BoxIcon/style.scss b/new-ui/src/shared/components/BoxIcon/style.scss new file mode 100644 index 000000000..20394a2ef --- /dev/null +++ b/new-ui/src/shared/components/BoxIcon/style.scss @@ -0,0 +1,14 @@ +.box-icon { + background: var(--bg-white-10); + border-radius: 8px; + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: center; + height: 24px; + width: 24px; + + .icon { + --icon-size: 16px; + } +} diff --git a/new-ui/src/shared/components/Button/Button.tsx b/new-ui/src/shared/components/Button/Button.tsx new file mode 100644 index 000000000..b1258b72e --- /dev/null +++ b/new-ui/src/shared/components/Button/Button.tsx @@ -0,0 +1,103 @@ +import './style.scss'; +import { clsx } from 'clsx'; +import { motion } from 'motion/react'; +import { useEffect, useRef, useState } from 'react'; +import { motionTransitionStandard } from '../../consts'; +import { isPresent } from '../../utils/isPresent'; +import { Icon } from '../Icon'; +import { LoaderSpinner } from '../LoaderSpinner/LoaderSpinner'; +import { type ButtonProps, ButtonSize, ButtonVariant } from './types'; + +export const Button = ({ + text, + testId, + iconLeft, + iconRight, + iconRightRotation, + containerProps, + onClick, + size = ButtonSize.Primary, + variant = ButtonVariant.Primary, + disabled = false, + loading = false, +}: ButtonProps) => { + const isLoading = loading && !disabled; + const [swapDirection, setSwapDirection] = useState<'to-loading' | 'to-content' | null>( + null, + ); + const previousLoadingRef = useRef(isLoading); + + useEffect(() => { + if (previousLoadingRef.current !== isLoading) { + setSwapDirection(isLoading ? 'to-loading' : 'to-content'); + previousLoadingRef.current = isLoading; + } + }, [isLoading]); + + const contentTransition = { + ...motionTransitionStandard, + delay: + !isLoading && swapDirection === 'to-content' + ? motionTransitionStandard.duration + : 0, + }; + + const loaderTransition = { + ...motionTransitionStandard, + delay: + isLoading && swapDirection === 'to-loading' ? motionTransitionStandard.duration : 0, + }; + + return ( +
+ +
+ ); +}; diff --git a/new-ui/src/shared/components/Button/style.scss b/new-ui/src/shared/components/Button/style.scss new file mode 100644 index 000000000..468282974 --- /dev/null +++ b/new-ui/src/shared/components/Button/style.scss @@ -0,0 +1,215 @@ +.btn-wrap { + display: inline-block; + min-width: 0; + position: relative; +} + +.btn { + --btn-font: var(--t-button-label-primary); + --btn-size: var(--button-size-primary); + --border-color: transparent; + --bg-color: transparent; + --text-color: var(--fg-white-100); + --loader-bg: transparent; + + height: var(--btn-size); + border: 1px solid var(--border-color); + box-sizing: border-box; + border-radius: var(--button-border-radius-primary); + background: var(--bg-color); + color: var(--text-color); + min-height: var(--btn-size); + padding: var(--spacing-sm) var(--spacing-lg); + position: relative; + display: inline-block; + min-width: 0; + user-select: none; + + > .btn-content { + display: inline-grid; + grid-template-columns: auto; + grid-template-rows: 1fr; + align-items: center; + column-gap: var(--spacing-md); + text-decoration: none !important; + justify-content: center; + color: inherit; + } + + @include animate(background-color, border-color, opacity); + + &:not(.disabled, .loading) { + cursor: pointer; + } + + &.disabled { + cursor: not-allowed; + pointer-events: none; + } + + .icon svg { + --icon-color: var(--text-color); + + path { + fill: var(--icon-color); + + @include animate(fill); + } + } + + .text { + font: var(--btn-font); + color: inherit; + + @include animate(color); + } + + &.icon-left { + > .btn-content { + grid-template-columns: 20px auto; + } + } + + &.icon-right { + > .btn-content { + grid-template-columns: auto 20px; + } + } + + &.icon-both { + > .btn-content { + grid-template-columns: 20px auto 20px; + } + } + + &.size-primary { + --btn-font: var(--t-button-label-primary); + --btn-size: 40px; + + border-radius: 8px; + padding: var(--spacing-sm) var(--spacing-lg); + } + + &.size-big { + --btn-font: var(--t-button-label-big); + --btn-size: 44px; + + border-radius: 100px; + padding: var(--spacing-sm) var(--spacing-lg); + } + + &.variant-primary { + --bg-color: var(--bg-white-100); + --border-color: var(--bg-white-100); + --text-color: var(--fg-action); + --loader-bg: var(--bg-white-10); + + &:hover { + --bg-color: var(--fg-white-80); + --border-color: var(--bg-color); + } + + &.disabled { + --bg-color: var(--bg-white-20); + --border-color: var(--bg-color); + --text-color: var(--fg-white-40); + } + + &:not(.disabled).loading { + --bg-color: var(--c-white-10); + --border-color: var(--bg-color); + } + } + + &.variant-secondary { + --bg-color: var(--bg-white-10); + --border-color: var(--bg-color); + --text-color: var(--fg-white-100); + --loader-bg: var(--bg-white-10); + + &:hover { + --bg-color: var(--bg-white-20); + } + + &.disabled { + --bg-color: var(--bg-white-5); + --border-color: var(--bg-color); + --text-color: var(--fg-white-40); + } + + &:not(.disabled).loading { + --bg-color: var(--bg-white-10); + --border-color: var(--bg-color); + } + } + + &.variant-critical { + --bg-color: var(--bg-critical); + --border-color: var(--bg-color); + --text-color: var(--fg-white-100); + --loader-bg: var(--bg-critical-disabled); + + &:hover { + --bg-color: var(--bg-critical-faded); + } + + &.disabled { + --bg-color: var(--bg-critical-disabled); + --border-color: var(--bg-color); + --text-color: var(--fg-white-40); + } + + &:not(.disabled).loading { + --bg-color: var(--bg-critical-disabled); + --border-color: var(--bg-color); + } + } + + &.variant-outlined { + --bg-color: transparent; + --border-color: var(--border-default); + --loader-bg: var(--bg-white-10); + --text-color: var(--fg-white-100); + + &:hover { + --bg-color: var(--bg-white-5); + } + + &.disabled { + --bg-color: transparent; + --border-color: var(--border-disabled); + --text-color: var(--fg-white-40); + } + + &:not(.disabled).loading { + --bg-color: transparent; + --border-color: var(--border-disabled); + } + } + + // since box-shadow adds on top of element it's needed to be set with loader overlay + &:not(.disabled).loading { + --loader-bg: var(--loader-bg); + + cursor: default; + } + + .loader-overlay { + background-color: var(--loader-bg); + border: none; + border-radius: inherit; + position: absolute; + inset: 0; + pointer-events: none; + width: 100%; + height: 100%; + display: flex; + flex-flow: row; + align-items: center; + justify-content: center; + } +} + +a:has(.btn) { + text-decoration: none; +} diff --git a/new-ui/src/shared/components/Button/types.ts b/new-ui/src/shared/components/Button/types.ts new file mode 100644 index 000000000..fd1c7b3cb --- /dev/null +++ b/new-ui/src/shared/components/Button/types.ts @@ -0,0 +1,32 @@ +import type { HTMLAttributes, MouseEventHandler } from 'react'; +import type { DirectionValue } from '../../types'; +import type { IconKindValue } from '../Icon/icon-types'; + +export const ButtonVariant = { + Primary: 'primary', + Secondary: 'secondary', + Critical: 'critical', + Outlined: 'outlined', +} as const; + +export type ButtonVariantValue = (typeof ButtonVariant)[keyof typeof ButtonVariant]; + +export const ButtonSize = { + Primary: 'primary', + Big: 'big', +} as const; +export type ButtonSizeValue = (typeof ButtonSize)[keyof typeof ButtonSize]; + +export type ButtonProps = { + text: string; + variant?: ButtonVariantValue; + size?: ButtonSizeValue; + iconLeft?: IconKindValue; + iconRight?: IconKindValue; + iconRightRotation?: DirectionValue; + testId?: string; + disabled?: boolean; + loading?: boolean; + containerProps?: Omit, 'onClick'>; + onClick?: MouseEventHandler; +}; diff --git a/new-ui/src/shared/components/Checkbox/Checkbox.tsx b/new-ui/src/shared/components/Checkbox/Checkbox.tsx new file mode 100644 index 000000000..97467ea42 --- /dev/null +++ b/new-ui/src/shared/components/Checkbox/Checkbox.tsx @@ -0,0 +1,45 @@ +import clsx from 'clsx'; +import './style.scss'; +import { isPresent } from '../../utils/isPresent'; +import { CheckboxIndicator } from '../CheckboxIndicator/CheckboxIndicator'; +import { FieldError } from '../FieldError/FieldError'; +import type { CheckboxProps } from './types'; + +export const Checkbox = ({ + text, + error, + testId, + active = false, + disabled = false, + children, + onClick, +}: CheckboxProps) => { + const hasError = isPresent(error); + + return ( +
+
+ + {isPresent(text) && {text}} + {isPresent(children) &&
{children}
} +
+ {isPresent(error) && error.length > 0 && } +
+ ); +}; diff --git a/new-ui/src/shared/components/Checkbox/style.scss b/new-ui/src/shared/components/Checkbox/style.scss new file mode 100644 index 000000000..21354e13d --- /dev/null +++ b/new-ui/src/shared/components/Checkbox/style.scss @@ -0,0 +1,48 @@ +/* stylelint-disable no-descending-specificity */ +.checkbox { + display: inline-flex; + flex-flow: column; + user-select: none; + + &.disabled { + cursor: not-allowed; + } + + & > .track { + &:not(.text) { + display: inline-block; + } + + &.text { + display: grid; + grid-template-columns: 24px auto; + grid-template-rows: 1fr; + column-gap: var(--spacing-sm); + align-items: center; + } + + &:not(.disabled) { + cursor: pointer; + } + + &.disabled { + pointer-events: none; + cursor: not-allowed; + + span { + color: var(--fg-disabled); + } + } + + span { + font: var(--t-body-sm-400); + color: var(--fg-white-100); + } + + &:not(.active, .disabled, .error):hover { + .box { + --border: var(--border-emphasis); + } + } + } +} diff --git a/new-ui/src/shared/components/Checkbox/types.ts b/new-ui/src/shared/components/Checkbox/types.ts new file mode 100644 index 000000000..2e972f629 --- /dev/null +++ b/new-ui/src/shared/components/Checkbox/types.ts @@ -0,0 +1,10 @@ +import type { PropsWithChildren } from 'react'; + +export interface CheckboxProps extends PropsWithChildren { + testId?: string; + active?: boolean; + error?: string; + disabled?: boolean; + text?: string; + onClick?: () => void; +} diff --git a/new-ui/src/shared/components/CheckboxIndicator/CheckboxIndicator.tsx b/new-ui/src/shared/components/CheckboxIndicator/CheckboxIndicator.tsx new file mode 100644 index 000000000..21f6d6be8 --- /dev/null +++ b/new-ui/src/shared/components/CheckboxIndicator/CheckboxIndicator.tsx @@ -0,0 +1,50 @@ +import './style.scss'; +import clsx from 'clsx'; +import type { MouseEventHandler, Ref } from 'react'; +import { ThemeVariable } from '../../types'; + +type Props = { + active: boolean; + disabled?: boolean; + error?: boolean; + onClick?: MouseEventHandler; + ref?: Ref; +}; + +export const CheckboxIndicator = ({ error, active, disabled, ref, onClick }: Props) => { + return ( +
+
+
+ {active && ( + + + + )} +
+
+ ); +}; diff --git a/new-ui/src/shared/components/CheckboxIndicator/style.scss b/new-ui/src/shared/components/CheckboxIndicator/style.scss new file mode 100644 index 000000000..8384eaf91 --- /dev/null +++ b/new-ui/src/shared/components/CheckboxIndicator/style.scss @@ -0,0 +1,75 @@ +/* stylelint-disable no-descending-specificity */ +.checkbox-indicator { + & > .box-positioner { + display: grid; + grid-template-columns: 24px; + grid-template-rows: 24px; + place-items: center center; + justify-content: center; + overflow: hidden; + + svg { + z-index: 0; + + path { + @include animate(fill); + } + } + + .box, + svg { + grid-column: 1 / 2; + grid-row: 1; + } + } +} + +.checkbox-indicator .box { + --bg: transparent; + --border: var(--border-action); + --icon: var(--fg-action); + + content: ' '; + display: block; + width: 20px; + height: 20px; + box-sizing: border-box; + border-radius: var(--radius-sm); + background-color: var(--bg); + background-clip: padding-box; + position: relative; + + &::before { + content: ''; + position: absolute; + inset: 0; + border: var(--border-1) solid var(--border); + border-radius: inherit; + pointer-events: none; + background-color: transparent; + background-clip: padding-box; + } + + @include animate(border-color, background-color); + + &.error { + --border: var(--border-critical); + } + + &:not(.disabled).active { + --bg: var(--bg-white-100); + --border: var(--bg); + --icon: var(--fg-action); + } + + &:not(.active).disabled { + --border: var(--border-disabled); + --bg: var(--bg-white-5); + } + + &.active.disabled { + --border: var(--bg); + --bg: var(--bg-white-10); + --icon: var(--fg-white-60); + } +} diff --git a/new-ui/src/shared/components/CodeInput/CodeInput.tsx b/new-ui/src/shared/components/CodeInput/CodeInput.tsx new file mode 100644 index 000000000..9ad3e4f12 --- /dev/null +++ b/new-ui/src/shared/components/CodeInput/CodeInput.tsx @@ -0,0 +1,137 @@ +import './style.scss'; +import { + type ClipboardEvent, + type KeyboardEvent, + useEffect, + useRef, + useState, +} from 'react'; +import { isPresent } from '../../utils/isPresent'; +import { FieldBox } from '../FieldBox/FieldBox'; +import { FieldError } from '../FieldError/FieldError'; + +interface Props { + length?: number; + value: string | null; + error?: string | null; + onChange: (value: string) => void; +} + +const toDigits = (value: string | null, length: number): string[] => { + const arr = Array.from({ length }, () => ''); + if (!value) return arr; + for (let i = 0; i < Math.min(value.length, length); i++) { + arr[i] = value[i] ?? ''; + } + return arr; +}; + +export const CodeInput = ({ onChange, value, error, length = 6 }: Props) => { + const [digits, setDigits] = useState(() => toDigits(value, length)); + const [focusedIndex, setFocusedIndex] = useState(null); + const inputRefs = useRef<(HTMLInputElement | null)[]>([]); + const prevLengthRef = useRef(length); + + useEffect(() => { + const lengthChanged = prevLengthRef.current !== length; + prevLengthRef.current = length; + + if (lengthChanged) { + setDigits(Array.from({ length }, () => '')); + requestAnimationFrame(() => inputRefs.current[0]?.focus()); + } else { + setDigits((current) => { + if (current.join('') === (value ?? '')) return current; + return toDigits(value, length); + }); + } + }, [value, length]); + + const focus = (index: number) => { + const clamped = Math.max(0, Math.min(index, length - 1)); + inputRefs.current[clamped]?.focus(); + }; + + const updateDigit = (index: number, digit: string) => { + setDigits((prev) => { + const updated = [...prev]; + updated[index] = digit; + onChange(updated.join('')); + return updated; + }); + }; + + const handleKeyDown = (index: number, e: KeyboardEvent) => { + if (e.ctrlKey || e.metaKey) return; + + if (e.key === 'Backspace') { + e.preventDefault(); + updateDigit(index, ''); + focus(index - 1); + } else if (e.key === 'Delete') { + e.preventDefault(); + updateDigit(index, ''); + } else if (e.key === 'ArrowLeft') { + e.preventDefault(); + focus(index - 1); + } else if (e.key === 'ArrowRight') { + e.preventDefault(); + focus(index + 1); + } else if (/^[0-9]$/.test(e.key)) { + e.preventDefault(); + updateDigit(index, e.key); + if (index < length - 1) { + focus(index + 1); + } + } else if (e.key.length === 1) { + e.preventDefault(); + } + }; + + const handlePaste = (e: ClipboardEvent) => { + e.preventDefault(); + const cleaned = e.clipboardData.getData('text').trim().replace(/\D/g, ''); + if (cleaned.length === length) { + const newDigits = cleaned.split(''); + setDigits(newDigits); + onChange(cleaned); + focus(length - 1); + } + }; + + return ( +
+
+ {digits.map((digit, i) => ( + 0} + size="default" + onClick={() => { + const input = inputRefs.current[i]; + if (input) { + input.focus(); + } + }} + > + { + inputRefs.current[i] = el; + }} + type="text" + inputMode="numeric" + value={digit} + onFocus={() => setFocusedIndex(i)} + onBlur={() => setFocusedIndex(null)} + onKeyDown={(e) => handleKeyDown(i, e)} + onPaste={handlePaste} + onChange={() => {}} + /> + + ))} +
+ +
+ ); +}; diff --git a/new-ui/src/shared/components/CodeInput/style.scss b/new-ui/src/shared/components/CodeInput/style.scss new file mode 100644 index 000000000..d1e7ba993 --- /dev/null +++ b/new-ui/src/shared/components/CodeInput/style.scss @@ -0,0 +1,30 @@ +.code-input > .inputs-grid { + display: flex; + flex-flow: row nowrap; + gap: var(--spacing-md); + justify-content: center; + align-items: center; + + .field-box { + height: 36px; + width: 36px; + min-height: unset; + padding: 0; + cursor: text; + + input { + width: auto; + min-width: 12px; + height: 20px; + text-align: center; + background: transparent; + border: none; + outline: none; + color: var(--fg-white-100); + font: var(--t-input-text-primary); + line-height: 20px; + caret-color: transparent; + cursor: text; + } + } +} diff --git a/new-ui/src/shared/components/Controls/Controls.tsx b/new-ui/src/shared/components/Controls/Controls.tsx new file mode 100644 index 000000000..bc0ba3e7d --- /dev/null +++ b/new-ui/src/shared/components/Controls/Controls.tsx @@ -0,0 +1,13 @@ +import type { HTMLProps, PropsWithChildren } from 'react'; +import './style.scss'; +import clsx from 'clsx'; + +type Props = PropsWithChildren & HTMLProps; + +export const Controls = ({ children, className, ...props }: Props) => { + return ( +
+ {children} +
+ ); +}; diff --git a/new-ui/src/shared/components/Controls/style.scss b/new-ui/src/shared/components/Controls/style.scss new file mode 100644 index 000000000..b688d42ba --- /dev/null +++ b/new-ui/src/shared/components/Controls/style.scss @@ -0,0 +1,16 @@ +.controls { + display: flex; + flex-flow: row nowrap; + column-gap: var(--spacing-md); + align-items: center; + justify-content: flex-start; + + .right { + margin-left: auto; + display: flex; + flex-flow: row nowrap; + column-gap: var(--spacing-md); + align-items: center; + justify-content: flex-end; + } +} diff --git a/new-ui/src/shared/components/Divider/Divider.tsx b/new-ui/src/shared/components/Divider/Divider.tsx new file mode 100644 index 000000000..2cf8076c3 --- /dev/null +++ b/new-ui/src/shared/components/Divider/Divider.tsx @@ -0,0 +1,59 @@ +import './style.scss'; +import clsx from 'clsx'; +import { type CSSProperties, useMemo } from 'react'; +import type { OrientationValue, ThemeSpacingValue } from '../../types'; +import { isPresent } from '../../utils/isPresent'; + +type Props = { + text?: string; + orientation?: OrientationValue; + spacing?: ThemeSpacingValue; +}; + +export const Divider = ({ text, spacing, orientation = 'horizontal' }: Props) => { + const textPresent = isPresent(text) && text.length > 0; + + const style = useMemo((): CSSProperties => { + const res: CSSProperties = {}; + if (spacing) { + switch (orientation) { + case 'horizontal': + res.paddingTop = spacing; + res.paddingBottom = spacing; + break; + case 'vertical': + res.paddingLeft = spacing; + res.paddingRight = spacing; + break; + } + } + return res; + }, [orientation, spacing]); + + return ( +
+ {orientation === 'horizontal' && ( + <> + {textPresent && ( + <> + + {text} + + + )} + {!textPresent && } + + )} + {orientation === 'vertical' && } +
+ ); +}; + +const Line = () => { + return
; +}; diff --git a/new-ui/src/shared/components/Divider/style.scss b/new-ui/src/shared/components/Divider/style.scss new file mode 100644 index 000000000..a75bd2fb9 --- /dev/null +++ b/new-ui/src/shared/components/Divider/style.scss @@ -0,0 +1,53 @@ +.divider { + --divider-line-size: 1px; + --divider-color: var(--bg-white-20); + + user-select: none; + + .line { + content: ' '; + display: block; + background-color: var(--divider-color); + border-radius: 0; + margin: 0; + padding: 0; + } + + &.vertical { + display: inline-block; + height: 10px; + + .line { + height: inherit; + width: var(--divider-line-size); + } + } + + &.horizontal { + width: 100%; + + .line { + width: 100%; + height: var(--divider-line-size); + } + } + + &.horizontal.text { + --divider-color: var(--bg-action-faded); + + display: grid; + grid-template-columns: 1fr auto 1fr; + grid-template-rows: 1fr; + column-gap: var(--spacing-lg); + align-items: center; + + .line { + width: 100%; + } + } + + span { + font: var(--t-body-xs-500); + color: var(--fg-white-70); + } +} diff --git a/new-ui/src/shared/components/EmptyState/EmptyState.tsx b/new-ui/src/shared/components/EmptyState/EmptyState.tsx new file mode 100644 index 000000000..a42c3da8a --- /dev/null +++ b/new-ui/src/shared/components/EmptyState/EmptyState.tsx @@ -0,0 +1,65 @@ +import { useMemo } from 'react'; +import './style.scss'; +import clsx from 'clsx'; +import { ThemeSpacing } from '../../types'; +import { isPresent } from '../../utils/isPresent'; +import { Button } from '../Button/Button'; +import { SizedBox } from '../SizedBox/SizedBox'; +import type { EmptyStateProps } from './types'; + +const Empty = () => { + return null; +}; + +export const EmptyState = ({ + ref, + icon, + primaryAction, + secondaryAction, + secondaryActionText, + subtitle, + title, + className, + id, + testId, +}: EmptyStateProps) => { + const RenderIcon = useMemo(() => { + if (!icon) return Empty; + return Empty; + }, [icon]); + + return ( +
+ {isPresent(icon) && ( + <> + + + + )} + {isPresent(title) && ( + <> +

{title}

+ + + )} + {isPresent(subtitle) &&

{subtitle}

} + + {isPresent(primaryAction) && ( + <> + + )} +
+ ); +}; diff --git a/new-ui/src/shared/components/EmptyState/style.scss b/new-ui/src/shared/components/EmptyState/style.scss new file mode 100644 index 000000000..90a3b5964 --- /dev/null +++ b/new-ui/src/shared/components/EmptyState/style.scss @@ -0,0 +1,46 @@ +.empty-state { + display: flex; + flex-flow: column; + flex: none; + align-items: center; + justify-content: flex-start; + height: auto; + user-select: none; + + & > p, + & > span { + text-align: center; + } + + .title { + color: var(--fg-muted); + font: var(--t-body-primary-500); + } + + .subtitle { + color: var(--fg-muted); + font: var(--t-body-sm-400); + } + + .secondary-action { + background-color: transparent; + text-align: center; + color: var(--fg-action); + border: none; + padding: 0; + margin: 0; + } + + .empty-icon { + width: 40px; + height: 40px; + display: flex; + flex-flow: row; + align-items: center; + justify-content: center; + flex: none; + padding: 4px; + border: 1px dashed var(--border-faded); + border-radius: 100px; + } +} diff --git a/new-ui/src/shared/components/EmptyState/types.ts b/new-ui/src/shared/components/EmptyState/types.ts new file mode 100644 index 000000000..7288f512b --- /dev/null +++ b/new-ui/src/shared/components/EmptyState/types.ts @@ -0,0 +1,15 @@ +import type { Ref } from 'react'; +import type { ButtonProps } from '../Button/types'; + +export type EmptyStateProps = { + ref?: Ref; + title?: string; + subtitle?: string; + icon?: string; + className?: string; + testId?: string; + id?: string; + primaryAction?: ButtonProps; + secondaryAction?: () => void; + secondaryActionText?: string; +}; diff --git a/new-ui/src/shared/components/EmptyStateFlexible/EmptyStateFlexible.tsx b/new-ui/src/shared/components/EmptyStateFlexible/EmptyStateFlexible.tsx new file mode 100644 index 000000000..4e47d97dd --- /dev/null +++ b/new-ui/src/shared/components/EmptyStateFlexible/EmptyStateFlexible.tsx @@ -0,0 +1,35 @@ +import './style.scss'; +import { useWindowSize } from '@uidotdev/usehooks'; +import { useMemo, useRef } from 'react'; +import { EmptyState } from '../EmptyState/EmptyState'; +import type { EmptyStateProps } from '../EmptyState/types'; + +type Props = EmptyStateProps; + +export const EmptyStateFlexible = (props: Props) => { + const containerRef = useRef(null); + const windowHeight = useWindowSize().height; + + const initHeight = useMemo(() => { + if (!containerRef.current) return 0; + return window.innerHeight - containerRef.current.getBoundingClientRect().top; + }, []); + + const minHeight = useMemo(() => { + const container = containerRef.current; + if (!container || !windowHeight) return null; + return windowHeight - container.getBoundingClientRect().top; + }, [windowHeight]); + + return ( +
+ +
+ ); +}; diff --git a/new-ui/src/shared/components/EmptyStateFlexible/style.scss b/new-ui/src/shared/components/EmptyStateFlexible/style.scss new file mode 100644 index 000000000..8023b98d4 --- /dev/null +++ b/new-ui/src/shared/components/EmptyStateFlexible/style.scss @@ -0,0 +1,8 @@ +.flexible-empty-state { + display: flex; + flex-flow: column; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: var(--spacing-2xl) 0; +} diff --git a/new-ui/src/shared/components/FieldBox/FieldBox.tsx b/new-ui/src/shared/components/FieldBox/FieldBox.tsx new file mode 100644 index 000000000..9a8801579 --- /dev/null +++ b/new-ui/src/shared/components/FieldBox/FieldBox.tsx @@ -0,0 +1,58 @@ +import './style.scss'; +import clsx from 'clsx'; +import { isPresent } from '../../utils/isPresent'; +import { InteractionBox } from '../InteractionBox/InteractionBox'; +import type { FieldBoxProps } from './types'; + +// generalized field box for components like Input, shouldn't be in layout on it's own +export const FieldBox = ({ + children, + disabled, + error, + className, + boxRef, + interactionRef, + iconLeft, + iconRight, + size, + forceFocusState, + onInteractionClick, + reserveInteraction = false, + ...rest +}: FieldBoxProps) => { + const hasIconLeft = isPresent(iconLeft); + const hasIconRight = isPresent(iconRight) || reserveInteraction; + return ( +
+ {hasIconLeft && iconLeft} + {children} + {hasIconRight && ( + <> + {isPresent(iconRight) && ( + + {iconRight} + + )} + {!isPresent(iconRight) &&
} + + )} +
+ ); +}; diff --git a/new-ui/src/shared/components/FieldBox/style.scss b/new-ui/src/shared/components/FieldBox/style.scss new file mode 100644 index 000000000..8f69c3695 --- /dev/null +++ b/new-ui/src/shared/components/FieldBox/style.scss @@ -0,0 +1,88 @@ +.field-box { + --border-color: var(--border-default); + --background-color: transparent; + + position: relative; + box-sizing: border-box; + display: grid; + grid-template-rows: 1fr; + align-items: center; + column-gap: var(--spacing-sm); + overflow: hidden; + cursor: pointer; + border: 1px solid var(--border-color); + border-radius: 8px; + padding: var(--spacing-sm) var(--spacing-md); + outline: none; + background-color: var(--background-color); + + @include animate(border-color, background-color); + + p, + span { + max-width: 100%; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + + &.size-default { + min-height: 36px; + + p, + span { + font: var(--t-input-text-primary); + color: var(--fg-white-100); + } + } + + &.grid-default { + grid-template-columns: 1fr; + } + + &.grid-left { + grid-template-columns: 20px 1fr; + } + + &.grid-right { + grid-template-columns: 1fr 20px; + } + + &.grid-both { + grid-template-columns: 20px 1fr 20px; + } + + .placeholder { + color: var(--fg-white-50); + font: var(--t-input-text-primary); + } + + .interaction-box { + & > button { + height: 28px; + width: 28px; + } + } + + &:not(.disabled, .error) { + &:hover { + --border-color: var(--border-emphasis); + } + + &:focus-within, + &.focus { + --border-color: var(--border-action); + } + } + + &.error { + --border-color: var(--border-critical); + } + + &.disabled { + --border-color: var(--border-disabled); + --background-color: var(--bg-white-10); + + cursor: not-allowed; + } +} diff --git a/new-ui/src/shared/components/FieldBox/types.ts b/new-ui/src/shared/components/FieldBox/types.ts new file mode 100644 index 000000000..5c8f117f2 --- /dev/null +++ b/new-ui/src/shared/components/FieldBox/types.ts @@ -0,0 +1,22 @@ +import type { + HTMLAttributes, + MouseEventHandler, + PropsWithChildren, + ReactNode, + Ref, +} from 'react'; + +export type FieldSize = 'lg' | 'default'; + +export interface FieldBoxProps extends HTMLAttributes, PropsWithChildren { + boxRef?: Ref; + interactionRef?: Ref; + error?: boolean; + disabled?: boolean; + iconLeft?: ReactNode; + iconRight?: ReactNode; + size?: FieldSize; + forceFocusState?: boolean; + onInteractionClick?: MouseEventHandler; + reserveInteraction?: boolean; +} diff --git a/new-ui/src/shared/components/FieldError/FieldError.tsx b/new-ui/src/shared/components/FieldError/FieldError.tsx new file mode 100644 index 000000000..0bb3e48cc --- /dev/null +++ b/new-ui/src/shared/components/FieldError/FieldError.tsx @@ -0,0 +1,35 @@ +import { motion } from 'motion/react'; +import './style.scss'; +import { motionTransitionStandard } from '../../consts'; +import { isPresent } from '../../utils/isPresent'; + +type Props = { + error?: string | null; +}; + +export const FieldError = ({ error }: Props) => { + return ( + <> + {isPresent(error) && error.length > 0 && ( + + {error} + + )} + + ); +}; diff --git a/new-ui/src/shared/components/FieldError/style.scss b/new-ui/src/shared/components/FieldError/style.scss new file mode 100644 index 000000000..d606952ea --- /dev/null +++ b/new-ui/src/shared/components/FieldError/style.scss @@ -0,0 +1,6 @@ +.field-error { + padding-top: 8px; + font: var(--t-input-error-message); + color: var(--bg-critical-muted); + user-select: none; +} diff --git a/new-ui/src/shared/components/FieldLabel/FieldLabel.tsx b/new-ui/src/shared/components/FieldLabel/FieldLabel.tsx new file mode 100644 index 000000000..3aadd31b1 --- /dev/null +++ b/new-ui/src/shared/components/FieldLabel/FieldLabel.tsx @@ -0,0 +1,42 @@ +import './style.scss'; + +import clsx from 'clsx'; +import type { MouseEventHandler, Ref } from 'react'; + +type Props = { + text: string; + id?: string; + ref?: Ref; + required?: boolean; + onClick?: MouseEventHandler; +}; + +export const FieldLabel = ({ text, ref, required, id, onClick }: Props) => { + return ( +
+ {required && ( + + + + )} + {text} +
+ ); +}; diff --git a/new-ui/src/shared/components/FieldLabel/style.scss b/new-ui/src/shared/components/FieldLabel/style.scss new file mode 100644 index 000000000..7647a723e --- /dev/null +++ b/new-ui/src/shared/components/FieldLabel/style.scss @@ -0,0 +1,33 @@ +.field-label { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-sm); + position: relative; + padding-bottom: var(--spacing-xs); + + span { + font: var(--t-input-title); + color: var(--fg-white-80); + } + + .required-icon { + user-select: none; + position: absolute; + left: 0; + top: 2px; + + path { + fill: var(--c-red); + } + } + + &.required { + padding-left: 8px; + } + + svg path { + fill: var(--fg-white-60); + } +} diff --git a/new-ui/src/shared/components/FloatingMenu/FloatingMenu.tsx b/new-ui/src/shared/components/FloatingMenu/FloatingMenu.tsx new file mode 100644 index 000000000..980b9456c --- /dev/null +++ b/new-ui/src/shared/components/FloatingMenu/FloatingMenu.tsx @@ -0,0 +1,14 @@ +import './style.scss'; +import clsx from 'clsx'; +import type { HTMLProps, PropsWithChildren } from 'react'; + +interface Props extends PropsWithChildren { + containerProps: HTMLProps; +} +export const FloatingMenu = ({ containerProps, children }: Props) => { + return ( +
+ {children} +
+ ); +}; diff --git a/new-ui/src/shared/components/FloatingMenu/style.scss b/new-ui/src/shared/components/FloatingMenu/style.scss new file mode 100644 index 000000000..efa24cdfc --- /dev/null +++ b/new-ui/src/shared/components/FloatingMenu/style.scss @@ -0,0 +1,8 @@ +.floating-menu { + border-radius: 12px; + box-sizing: border-box; + padding: 8px; + background-color: var(--c-saturated-dark-blue-60); + box-shadow: 0 4px 12px 0 rgb(0 0 0 / 7%); + backdrop-filter: blur(12.5px); +} diff --git a/new-ui/src/shared/components/Fold/Fold.tsx b/new-ui/src/shared/components/Fold/Fold.tsx new file mode 100644 index 000000000..362786373 --- /dev/null +++ b/new-ui/src/shared/components/Fold/Fold.tsx @@ -0,0 +1,29 @@ +import './style.scss'; +import clsx from 'clsx'; +import type { HTMLAttributes, PropsWithChildren, Ref } from 'react'; + +export const Fold = ({ + ref, + className, + children, + open, + contentClassName, + ...rest +}: { + open: boolean; + ref?: Ref; + contentClassName?: string; +} & PropsWithChildren & + HTMLAttributes) => { + return ( +
+
{children}
+
+ ); +}; diff --git a/new-ui/src/shared/components/Fold/style.scss b/new-ui/src/shared/components/Fold/style.scss new file mode 100644 index 000000000..f11e4fc81 --- /dev/null +++ b/new-ui/src/shared/components/Fold/style.scss @@ -0,0 +1,19 @@ +.fold { + display: grid; + grid-template-columns: 1fr; + grid-template-rows: 1fr; + + @include animate(grid-template-rows); + + &.folded { + grid-template-rows: 0fr; + } + + .fold-content { + overflow: hidden; + + // fix for content with single button in place + padding-bottom: 1px; + padding-left: 1px; + } +} diff --git a/new-ui/src/shared/components/Icon/Icon.tsx b/new-ui/src/shared/components/Icon/Icon.tsx new file mode 100644 index 000000000..73337ee7c --- /dev/null +++ b/new-ui/src/shared/components/Icon/Icon.tsx @@ -0,0 +1,492 @@ +import { type CSSProperties, type Ref, useMemo } from 'react'; +import type { IconKindValue } from './icon-types'; +import './style.scss'; +import clsx from 'clsx'; +import type { DirectionValue, ThemeVariableValue } from '../../types'; +import { isPresent } from '../../utils/isPresent'; +import { IconAccessSettings } from './icons/IconAccessSettings'; +import { IconActivity } from './icons/IconActivity'; +import { IconActivityNotes } from './icons/IconActivityNotes'; +import { IconAddAlias } from './icons/IconAddAlias'; +import { IconAddDevice } from './icons/IconAddDevice'; +import { IconAddGroup } from './icons/IconAddGroup'; +import { IconAddLocation } from './icons/IconAddLocation'; +import { IconAddRule } from './icons/IconAddRule'; +import { IconAddToken } from './icons/IconAddToken'; +import { IconAddUser } from './icons/IconAddUser'; +import { IconAliases } from './icons/IconAliases'; +import { IconAndroid } from './icons/IconAndroid'; +import { IconApple } from './icons/IconApple'; +import { IconAppStore } from './icons/IconAppstore'; +import { IconArchLinux } from './icons/IconArchLinux'; +import { IconArrowBig } from './icons/IconArrowBig'; +import { IconArrowSmall } from './icons/IconArrowSmall'; +import { IconAttentionFilled } from './icons/IconAttentionFilled'; +import { IconAttentionOutlined } from './icons/IconAttentionOutlined'; +import { IconAuthorisedApp } from './icons/IconAuthorisedApp'; +import { IconBiometric } from './icons/IconBiometric'; +import { IconBug } from './icons/IconBug'; +import { IconCalendar } from './icons/IconCalendar'; +import { IconChat } from './icons/IconChat'; +import { IconCheck } from './icons/IconCheck'; +import { IconCheckCircle } from './icons/IconCheckCircle'; +import { IconCheckFilled } from './icons/IconCheckFilled'; +import { IconClear } from './icons/IconClear'; +import { IconClose } from './icons/IconClose'; +import { IconCode } from './icons/IconCode'; +import { IconConfig } from './icons/IconConfig'; +import { IconConnectedDevices } from './icons/IconConnectedDevices'; +import { IconCopy } from './icons/IconCopy'; +import { IconCreditCard } from './icons/IconCreditCard'; +import { IconCustomize } from './icons/IconCustomize'; +import { IconDarkTheme } from './icons/IconDarkTheme'; +import { IconDebian } from './icons/IconDebian'; +import { IconDelete } from './icons/IconDelete'; +import { IconDeploy } from './icons/IconDeploy'; +import { IconDesktop } from './icons/IconDesktop'; +import { IconDevices } from './icons/IconDevices'; +import { IconDevicesActive } from './icons/IconDevicesActive'; +import { IconDisabled } from './icons/IconDisabled'; +import { IconDisableMfa } from './icons/IconDisableMfa'; +import { IconDisconnectAll } from './icons/IconDisconnectAll'; +import { IconDownload } from './icons/IconDownload'; +import { IconEdit } from './icons/IconEdit'; +import { IconEmptyPoint } from './icons/IconEmptyPoint'; +import { IconEnrollment } from './icons/IconEnrollment'; +import { IconEnter } from './icons/IconEnter'; +import { IconExternalMfa } from './icons/IconExternalMFA'; +import { IconFile } from './icons/IconFile'; +import { IconFileAdd } from './icons/IconFileAdd'; +import { IconFiltration } from './icons/IconFiltration'; +import { IconGateway } from './icons/IconGateway'; +import { IconGithub } from './icons/IconGithub'; +import { IconGlobe } from './icons/IconGlobe'; +import { IconGroups } from './icons/IconGroups'; +import { IconHamburger } from './icons/IconHamburger'; +import { IconHelp } from './icons/IconHelp'; +import { IconHide } from './icons/IconHide'; +import { IconInfoFilled } from './icons/IconInfoFilled'; +import { IconInfoOutlined } from './icons/IconInfoOutlined'; +import { IconInternalMfa } from './icons/IconInternalMFA'; +import { IconIpSuggest } from './icons/IconIpSuggest'; +import { IconKey } from './icons/IconKey'; +import { IconLightBulb } from './icons/IconLightBulb'; +import { IconLightTheme } from './icons/IconLightTheme'; +import { IconLinux } from './icons/IconLinux'; +import { IconLoader } from './icons/IconLoader'; +import { IconLocation } from './icons/IconLocation'; +import { IconLocationTracking } from './icons/IconLocationTracking'; +import { IconLockOpen } from './icons/IconLock'; +import { IconLockClosed } from './icons/IconLockClosed'; +import { IconLogout } from './icons/IconLogout'; +import { IconMail } from './icons/IconMail'; +import { IconMenu } from './icons/IconMenu'; +import { IconMinusCircle } from './icons/IconMinusCircle'; +import { IconMobile } from './icons/IconMobile'; +import { IconMobileLock } from './icons/IconMobileLock'; +import { IconNetworkSettings } from './icons/IconNetworkSettings'; +import { IconNotification } from './icons/IconNotification'; +import { IconOneTimePassword } from './icons/IconOneTimePassword'; +import { IconOnline } from './icons/IconOnline'; +import { IconOpenId } from './icons/IconOpenId'; +import { IconOpenInNewWindow } from './icons/IconOpenInNewWindow'; +import { IconPending } from './icons/IconPending'; +import { IconPieChart } from './icons/IconPieChart'; +import { IconPlay } from './icons/IconPlay'; +import { IconPlayFilled } from './icons/IconPlayFilled'; +import { IconPlus } from './icons/IconPlus'; +import { IconPlusCircle } from './icons/IconPlusCircle'; +import { IconProfile } from './icons/IconProfile'; +import { IconProtection } from './icons/IconProtection'; +import { IconRefresh } from './icons/IconRefresh'; +import { IconRequest } from './icons/IconRequest'; +import { IconRules } from './icons/IconRules'; +import { IconSearch } from './icons/IconSearch'; +import { IconServers } from './icons/IconServers'; +import { IconSettings } from './icons/IconSettings'; +import { IconShow } from './icons/IconShow'; +import { IconSortable } from './icons/IconSortable'; +import { IconStatusAttention } from './icons/IconStatusAttention'; +import { IconStatusAvailable } from './icons/IconStatusAvailable'; +import { IconStatusImportant } from './icons/IconStatusImportant'; +import { IconStatusPremium } from './icons/IconStatusPremium'; +import { IconStatusSimple } from './icons/IconStatusSimple'; +import { IconSupport } from './icons/IconSupport'; +import { IconSync } from './icons/IconSync'; +import { IconToken } from './icons/IconToken'; +import { IconTransactions } from './icons/IconTransactions'; +import { IconTutorial } from './icons/IconTutorial'; +import { IconTutorialNotAvailable } from './icons/IconTutorialNotAvailable'; +import { IconUbuntu } from './icons/IconUbuntu'; +import { IconUpload } from './icons/IconUpload'; +import { IconUser } from './icons/IconUser'; +import { IconUserActive } from './icons/IconUserActive'; +import { IconUsers } from './icons/IconUsers'; +import { IconWarningFilled } from './icons/IconWarningFilled'; +import { IconWarningOutlined } from './icons/IconWarningOutlined'; +import { IconWebhooks } from './icons/IconWebhooks'; +import { IconWindows } from './icons/IconWindows'; + +type Props = { + icon: T; + staticColor?: ThemeVariableValue; + size?: number; + rotationDirection?: DirectionValue; + customRotation?: number; + ref?: Ref; + className?: string; +}; + +type RotationMap = Record; + +const mapRotation = (kind: IconKindValue, direction: DirectionValue): number => { + switch (kind) { + case 'arrow-small': + case 'arrow-big': { + const map: RotationMap = { + down: 90, + right: 0, + up: -90, + left: 180, + }; + return map[direction]; + } + } + console.error(`Unimplemented rotation mapping for icon kind of ${kind}`); + // safe return for unimplemented + return 0; +}; + +const EmptyIcon = () => { + return null; +}; + +// Color should be set by css bcs some icons have different structures like 'loader' +export const Icon = ({ + icon: iconKind, + rotationDirection, + customRotation, + ref, + className, + staticColor, + size, +}: Props) => { + const IconToRender = useMemo(() => { + switch (iconKind) { + case 'mobile-lock': + return IconMobileLock; + case 'sync': + return IconSync; + case 'attention-filled': + return IconAttentionFilled; + case 'ip-suggest': + return IconIpSuggest; + case 'filtration': + return IconFiltration; + case 'rules': + return IconRules; + case 'add-rule': + return IconAddRule; + case 'add-alias': + return IconAddAlias; + case 'aliases': + return IconAliases; + case 'upload': + return IconUpload; + case 'lock-closed': + return IconLockClosed; + case 'enrollment': + return IconEnrollment; + case 'customize': + return IconCustomize; + case 'light-theme': + return IconLightTheme; + case 'dark-theme': + return IconDarkTheme; + case 'refresh': + return IconRefresh; + case 'network-settings': + return IconNetworkSettings; + case 'connected-devices': + return IconConnectedDevices; + case 'external-mfa': + return IconExternalMfa; + case 'internal-mfa': + return IconInternalMfa; + case 'token': + return IconToken; + case 'add-location': + return IconAddLocation; + case 'add-group': + return IconAddGroup; + case 'add-token': + return IconAddToken; + case 'online': + return IconOnline; + case 'key': + return IconKey; + case 'add-device': + return IconAddDevice; + case 'warning-filled': + return IconWarningFilled; + case 'warning-outlined': + return IconWarningOutlined; + case 'ubuntu': + return IconUbuntu; + case 'debian': + return IconDebian; + case 'arch-linux': + return IconArchLinux; + case 'disabled': + return IconDisabled; + case 'disable-mfa': + return IconDisableMfa; + case 'show': + return IconShow; + case 'hide': + return IconHide; + case 'copy': + return IconCopy; + case 'config': + return IconConfig; + case 'open-in-new-window': + return IconOpenInNewWindow; + case 'arrow-big': + return IconArrowBig; + case 'arrow-small': + return IconArrowSmall; + case 'loader': + return IconLoader; + case 'plus': + return IconPlus; + case 'status-simple': + return IconStatusSimple; + case 'lock-open': + return IconLockOpen; + case 'check-circle': + return IconCheckCircle; + case 'check-filled': + return IconCheckFilled; + case 'empty-point': + return IconEmptyPoint; + case 'desktop': + return IconDesktop; + case 'mobile': + return IconMobile; + case 'windows': + return IconWindows; + case 'linux': + return IconLinux; + case 'app-store': + return IconAppStore; + case 'apple': + return IconApple; + case 'android': + return IconAndroid; + case 'close': + return IconClose; + case 'file': + return IconFile; + case 'file-add': + return IconFileAdd; + case 'globe': + return IconGlobe; + case 'help': + return IconHelp; + case 'access-settings': + return IconAccessSettings; + case 'activity': + return IconActivity; + case 'activity-notes': + return IconActivityNotes; + case 'add-user': + return IconAddUser; + case 'analytics': + return EmptyIcon; + case 'archive': + return EmptyIcon; + case 'attention-outlined': + return IconAttentionOutlined; + case 'check': + return IconCheck; + case 'clear': + return IconClear; + case 'code': + return IconCode; + case 'collapse': + return EmptyIcon; + case 'credit-card': + return IconCreditCard; + case 'date': + return EmptyIcon; + case 'delete': + return IconDelete; + case 'deploy': + return IconDeploy; + case 'devices': + return IconDevices; + case 'devices-active': + return IconDevicesActive; + case 'download': + return IconDownload; + case 'edit': + return IconEdit; + case 'enter': + return IconEnter; + case 'expand': + return EmptyIcon; + case 'filter': + return EmptyIcon; + case 'gateway': + return IconGateway; + case 'gift': + return EmptyIcon; + case 'github': + return IconGithub; + case 'groups': + return IconGroups; + case 'hamburger': + return IconHamburger; + case 'info-filled': + return IconInfoFilled; + case 'info-outlined': + return IconInfoOutlined; + case 'location': + return IconLocation; + case 'location-preview': + return EmptyIcon; + case 'location-tracking': + return IconLocationTracking; + case 'logout': + return IconLogout; + case 'mail': + return IconMail; + case 'manage-keys': + return EmptyIcon; + case 'menu': + return IconMenu; + case 'minus-circle': + return IconMinusCircle; + case 'navigation-collapse': + return EmptyIcon; + case 'navigation-uncollapse': + return EmptyIcon; + case 'notification': + return IconNotification; + case 'one-time-password': + return IconOneTimePassword; + case 'openid': + return IconOpenId; + case 'pdf': + return EmptyIcon; + case 'pie-chart': + return IconPieChart; + case 'plus-circle': + return IconPlusCircle; + case 'profile': + return IconProfile; + case 'protection': + return IconProtection; + case 'qr': + return EmptyIcon; + case 'search': + return IconSearch; + case 'servers': + return IconServers; + case 'settings': + return IconSettings; + case 'sort': + return EmptyIcon; + case 'sortable': + return IconSortable; + case 'status-premium': + return IconStatusPremium; + case 'status-attention': + return IconStatusAttention; + case 'status-available': + return IconStatusAvailable; + case 'status-important': + return IconStatusImportant; + case 'support': + return IconSupport; + case 'transactions': + return IconTransactions; + case 'user': + return IconUser; + case 'user-active': + return IconUserActive; + case 'users': + return IconUsers; + case 'webhooks': + return IconWebhooks; + case 'yubi-keys': + return EmptyIcon; + case 'biometric': + return IconBiometric; + case 'pending': + return IconPending; + case 'bug': + return IconBug; + case 'chat': + return IconChat; + case 'request': + return IconRequest; + case 'calendar': + return IconCalendar; + case 'light-bulb': + return IconLightBulb; + case 'tutorial': + return IconTutorial; + case 'tutorial-not-available': + return IconTutorialNotAvailable; + case 'authorised-app': + return IconAuthorisedApp; + case 'play': + return IconPlay; + case 'play-filled': + return IconPlayFilled; + case 'disconnect-all': + return IconDisconnectAll; + } + }, [iconKind]); + + const getStyle = useMemo((): CSSProperties => { + const styles: CSSProperties = {}; + if (isPresent(staticColor)) { + // @ts-expect-error + styles['--icon-color'] = staticColor; + } + const transform: string[] = []; + // kind specific configurations + switch (iconKind) { + case 'arrow-big': + case 'arrow-small': + if (rotationDirection) { + transform.push(`rotate(${mapRotation(iconKind, rotationDirection)}deg)`); + } + break; + } + if (customRotation && !rotationDirection) { + transform.push(`rotate(${customRotation}deg)`); + } + if (size) { + styles.width = size; + styles.height = size; + } + if (transform.length) { + styles.transform = transform.join(' '); + } + return styles; + }, [iconKind, size, rotationDirection, customRotation, staticColor]); + + return ( +
+ +
+ ); +}; diff --git a/new-ui/src/shared/components/Icon/icon-types.ts b/new-ui/src/shared/components/Icon/icon-types.ts new file mode 100644 index 000000000..e3cff9a34 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icon-types.ts @@ -0,0 +1,141 @@ +export const IconKind = { + DisconnectAll: 'disconnect-all', + MobileLock: 'mobile-lock', + IpSuggest: 'ip-suggest', + Filtration: 'filtration', + AddAlias: 'add-alias', + Aliases: 'aliases', + Customize: 'customize', + NetworkSettings: 'network-settings', + AddGroup: 'add-group', + AddToken: 'add-token', + Key: 'key', + Biometric: 'biometric', + Hide: 'hide', + ArrowBig: 'arrow-big', + ArrowSmall: 'arrow-small', + PlusCircle: 'plus-circle', + MinusCircle: 'minus-circle', + Edit: 'edit', + Show: 'show', + Analytics: 'analytics', + Search: 'search', + Delete: 'delete', + Transactions: 'transactions', + Enrollment: 'enrollment', + Copy: 'copy', + Settings: 'settings', + Close: 'close', + Plus: 'plus', + Support: 'support', + Menu: 'menu', + Sync: 'sync', + Pending: 'pending', + Check: 'check', + Date: 'date', + CreditCard: 'credit-card', + Archive: 'archive', + PieChart: 'pie-chart', + Notification: 'notification', + Globe: 'globe', + Groups: 'groups', + OpenInNewWindow: 'open-in-new-window', + Users: 'users', + Mail: 'mail', + Filter: 'filter', + User: 'user', + LockOpen: 'lock-open', + LockClosed: 'lock-closed', + Servers: 'servers', + Protection: 'protection', + NavigationCollapse: 'navigation-collapse', + NavigationUncollapse: 'navigation-uncollapse', + Devices: 'devices', + Logout: 'logout', + YubiKeys: 'yubi-keys', + OpenId: 'openid', + Webhooks: 'webhooks', + Help: 'help', + ActivityNotes: 'activity-notes', + Activity: 'activity', + AccessSettings: 'access-settings', + Profile: 'profile', + AttentionOutlined: 'attention-outlined', + AttentionFilled: 'attention-filled', + WarningOutlined: 'warning-outlined', + Download: 'download', + Code: 'code', + Deploy: 'deploy', + Expand: 'expand', + Collapse: 'collapse', + CheckCircle: 'check-circle', + Location: 'location', + InfoOutlined: 'info-outlined', + InfoFilled: 'info-filled', + LocationPreview: 'location-preview', + AddUser: 'add-user', + QR: 'qr', + File: 'file', + FileAdd: 'file-add', + LocationTracking: 'location-tracking', + Config: 'config', + Gift: 'gift', + Hamburger: 'hamburger', + Sort: 'sort', + Sortable: 'sortable', + Gateway: 'gateway', + EmptyPoint: 'empty-point', + DevicesActive: 'devices-active', + UserActive: 'user-active', + Windows: 'windows', + AppStore: 'app-store', + Apple: 'apple', + Desktop: 'desktop', + Mobile: 'mobile', + Android: 'android', + Pdf: 'pdf', + Linux: 'linux', + Clear: 'clear', + CheckFilled: 'check-filled', + Enter: 'enter', + Github: 'github', + OneTimePassword: 'one-time-password', + Loader: 'loader', + ManageKeys: 'manage-keys', + StatusSimple: 'status-simple', + StatusAttention: 'status-attention', + StatusAvailable: 'status-available', + StatusImportant: 'status-important', + StatusPremium: 'status-premium', + Disabled: 'disabled', + ArchLinux: 'arch-linux', + Debian: 'debian', + Ubuntu: 'ubuntu', + AddDevice: 'add-device', + Token: 'token', + AddLocation: 'add-location', + InternalMFA: 'internal-mfa', + ExternalMFa: 'external-mfa', + ConnectedDevices: 'connected-devices', + Refresh: 'refresh', + Online: 'online', + LightTheme: 'light-theme', + DarkTheme: 'dark-theme', + WarningFilled: 'warning-filled', + Upload: 'upload', + AddRule: 'add-rule', + Rules: 'rules', + DisableMfa: 'disable-mfa', + Bug: 'bug', + Chat: 'chat', + Request: 'request', + Calendar: 'calendar', + LightBulb: 'light-bulb', + Tutorial: 'tutorial', + TutorialNotAvailable: 'tutorial-not-available', + AuthorisedApp: 'authorised-app', + Play: 'play', + PlayFilled: 'play-filled', +} as const; + +export type IconKindValue = (typeof IconKind)[keyof typeof IconKind]; diff --git a/new-ui/src/shared/components/Icon/icons/IconAccessSettings.tsx b/new-ui/src/shared/components/Icon/icons/IconAccessSettings.tsx new file mode 100644 index 000000000..5cb508a04 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAccessSettings.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconAccessSettings = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconActivity.tsx b/new-ui/src/shared/components/Icon/icons/IconActivity.tsx new file mode 100644 index 000000000..28091c682 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconActivity.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconActivity = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconActivityNotes.tsx b/new-ui/src/shared/components/Icon/icons/IconActivityNotes.tsx new file mode 100644 index 000000000..37935b98f --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconActivityNotes.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconActivityNotes = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconAddAlias.tsx b/new-ui/src/shared/components/Icon/icons/IconAddAlias.tsx new file mode 100644 index 000000000..3e50787b8 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAddAlias.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconAddAlias = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconAddDevice.tsx b/new-ui/src/shared/components/Icon/icons/IconAddDevice.tsx new file mode 100644 index 000000000..5a77a88ce --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAddDevice.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconAddDevice = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconAddGroup.tsx b/new-ui/src/shared/components/Icon/icons/IconAddGroup.tsx new file mode 100644 index 000000000..61585b2fc --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAddGroup.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconAddGroup = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconAddLocation.tsx b/new-ui/src/shared/components/Icon/icons/IconAddLocation.tsx new file mode 100644 index 000000000..cb009a8d9 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAddLocation.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconAddLocation = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconAddRule.tsx b/new-ui/src/shared/components/Icon/icons/IconAddRule.tsx new file mode 100644 index 000000000..4a2273290 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAddRule.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconAddRule = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconAddToken.tsx b/new-ui/src/shared/components/Icon/icons/IconAddToken.tsx new file mode 100644 index 000000000..e1017c5ef --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAddToken.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconAddToken = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconAddUser.tsx b/new-ui/src/shared/components/Icon/icons/IconAddUser.tsx new file mode 100644 index 000000000..d9072e447 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAddUser.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconAddUser = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconAliases.tsx b/new-ui/src/shared/components/Icon/icons/IconAliases.tsx new file mode 100644 index 000000000..1e68e1acb --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAliases.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconAliases = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconAndroid.tsx b/new-ui/src/shared/components/Icon/icons/IconAndroid.tsx new file mode 100644 index 000000000..bf37eaa56 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAndroid.tsx @@ -0,0 +1,31 @@ +import type { SVGProps } from 'react'; + +export const IconAndroid = (props: SVGProps) => { + return ( + + + + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconApple.tsx b/new-ui/src/shared/components/Icon/icons/IconApple.tsx new file mode 100644 index 000000000..d0bb87aef --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconApple.tsx @@ -0,0 +1,23 @@ +import type { SVGProps } from 'react'; + +export const IconApple = (props: SVGProps) => { + return ( + + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconAppstore.tsx b/new-ui/src/shared/components/Icon/icons/IconAppstore.tsx new file mode 100644 index 000000000..1f75861a3 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAppstore.tsx @@ -0,0 +1,47 @@ +import type { SVGProps } from 'react'; + +export const IconAppStore = (props: SVGProps) => { + return ( + + + + + + + + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconArchLinux.tsx b/new-ui/src/shared/components/Icon/icons/IconArchLinux.tsx new file mode 100644 index 000000000..ab1de5bec --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconArchLinux.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconArchLinux = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconArrowBig.tsx b/new-ui/src/shared/components/Icon/icons/IconArrowBig.tsx new file mode 100644 index 000000000..3d80a8518 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconArrowBig.tsx @@ -0,0 +1,16 @@ +import type { SVGProps } from 'react'; + +export const IconArrowBig = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconArrowSmall.tsx b/new-ui/src/shared/components/Icon/icons/IconArrowSmall.tsx new file mode 100644 index 000000000..4092fa37e --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconArrowSmall.tsx @@ -0,0 +1,20 @@ +import type { SVGProps } from 'react'; + +export const IconArrowSmall = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconAttentionFilled.tsx b/new-ui/src/shared/components/Icon/icons/IconAttentionFilled.tsx new file mode 100644 index 000000000..875a07208 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAttentionFilled.tsx @@ -0,0 +1,16 @@ +export const IconAttentionFilled = () => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconAttentionOutlined.tsx b/new-ui/src/shared/components/Icon/icons/IconAttentionOutlined.tsx new file mode 100644 index 000000000..fd3ed62ab --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAttentionOutlined.tsx @@ -0,0 +1,16 @@ +export const IconAttentionOutlined = () => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconAuthorisedApp.tsx b/new-ui/src/shared/components/Icon/icons/IconAuthorisedApp.tsx new file mode 100644 index 000000000..d1994d0a5 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAuthorisedApp.tsx @@ -0,0 +1,16 @@ +export const IconAuthorisedApp = () => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconBiometric.tsx b/new-ui/src/shared/components/Icon/icons/IconBiometric.tsx new file mode 100644 index 000000000..f84219583 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconBiometric.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconBiometric = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconBug.tsx b/new-ui/src/shared/components/Icon/icons/IconBug.tsx new file mode 100644 index 000000000..dab4f86ca --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconBug.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconBug = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconCalendar.tsx b/new-ui/src/shared/components/Icon/icons/IconCalendar.tsx new file mode 100644 index 000000000..d3078da9e --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconCalendar.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconCalendar = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconChat.tsx b/new-ui/src/shared/components/Icon/icons/IconChat.tsx new file mode 100644 index 000000000..2b3a636b0 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconChat.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconChat = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconCheck.tsx b/new-ui/src/shared/components/Icon/icons/IconCheck.tsx new file mode 100644 index 000000000..580b0728d --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconCheck.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconCheck = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconCheckCircle.tsx b/new-ui/src/shared/components/Icon/icons/IconCheckCircle.tsx new file mode 100644 index 000000000..9a94792cf --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconCheckCircle.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconCheckCircle = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconCheckFilled.tsx b/new-ui/src/shared/components/Icon/icons/IconCheckFilled.tsx new file mode 100644 index 000000000..0fc9b0909 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconCheckFilled.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconCheckFilled = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconClear.tsx b/new-ui/src/shared/components/Icon/icons/IconClear.tsx new file mode 100644 index 000000000..4cda92d4f --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconClear.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconClear = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconClose.tsx b/new-ui/src/shared/components/Icon/icons/IconClose.tsx new file mode 100644 index 000000000..cb8e9d1a1 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconClose.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconClose = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconCode.tsx b/new-ui/src/shared/components/Icon/icons/IconCode.tsx new file mode 100644 index 000000000..b0b763705 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconCode.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconCode = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconConfig.tsx b/new-ui/src/shared/components/Icon/icons/IconConfig.tsx new file mode 100644 index 000000000..12886c2f0 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconConfig.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconConfig = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconConnectedDevices.tsx b/new-ui/src/shared/components/Icon/icons/IconConnectedDevices.tsx new file mode 100644 index 000000000..d87efe7f9 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconConnectedDevices.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconConnectedDevices = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconCopy.tsx b/new-ui/src/shared/components/Icon/icons/IconCopy.tsx new file mode 100644 index 000000000..eb5706fa6 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconCopy.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconCopy = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconCreditCard.tsx b/new-ui/src/shared/components/Icon/icons/IconCreditCard.tsx new file mode 100644 index 000000000..e2004ac39 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconCreditCard.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconCreditCard = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconCustomize.tsx b/new-ui/src/shared/components/Icon/icons/IconCustomize.tsx new file mode 100644 index 000000000..6bbbbf2b2 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconCustomize.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconCustomize = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconDarkTheme.tsx b/new-ui/src/shared/components/Icon/icons/IconDarkTheme.tsx new file mode 100644 index 000000000..9ec3eb405 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconDarkTheme.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconDarkTheme = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconDebian.tsx b/new-ui/src/shared/components/Icon/icons/IconDebian.tsx new file mode 100644 index 000000000..74295c5b3 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconDebian.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconDebian = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconDelete.tsx b/new-ui/src/shared/components/Icon/icons/IconDelete.tsx new file mode 100644 index 000000000..3d7b881ad --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconDelete.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconDelete = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconDeploy.tsx b/new-ui/src/shared/components/Icon/icons/IconDeploy.tsx new file mode 100644 index 000000000..d5e20fe4f --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconDeploy.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconDeploy = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconDesktop.tsx b/new-ui/src/shared/components/Icon/icons/IconDesktop.tsx new file mode 100644 index 000000000..335b047cb --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconDesktop.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconDesktop = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconDevices.tsx b/new-ui/src/shared/components/Icon/icons/IconDevices.tsx new file mode 100644 index 000000000..ec5bd61c7 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconDevices.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconDevices = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconDevicesActive.tsx b/new-ui/src/shared/components/Icon/icons/IconDevicesActive.tsx new file mode 100644 index 000000000..2bbe756f2 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconDevicesActive.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconDevicesActive = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconDisableMfa.tsx b/new-ui/src/shared/components/Icon/icons/IconDisableMfa.tsx new file mode 100644 index 000000000..7e823b7bf --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconDisableMfa.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconDisableMfa = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconDisabled.tsx b/new-ui/src/shared/components/Icon/icons/IconDisabled.tsx new file mode 100644 index 000000000..33bb4931a --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconDisabled.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconDisabled = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconDisconnectAll.tsx b/new-ui/src/shared/components/Icon/icons/IconDisconnectAll.tsx new file mode 100644 index 000000000..14b80ec63 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconDisconnectAll.tsx @@ -0,0 +1,16 @@ +export const IconDisconnectAll = () => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconDownload.tsx b/new-ui/src/shared/components/Icon/icons/IconDownload.tsx new file mode 100644 index 000000000..e822c6476 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconDownload.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconDownload = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconEdit.tsx b/new-ui/src/shared/components/Icon/icons/IconEdit.tsx new file mode 100644 index 000000000..021da95e6 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconEdit.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconEdit = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconEmptyPoint.tsx b/new-ui/src/shared/components/Icon/icons/IconEmptyPoint.tsx new file mode 100644 index 000000000..a5b5323bc --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconEmptyPoint.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconEmptyPoint = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconEnrollment.tsx b/new-ui/src/shared/components/Icon/icons/IconEnrollment.tsx new file mode 100644 index 000000000..b0454e35d --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconEnrollment.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconEnrollment = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconEnter.tsx b/new-ui/src/shared/components/Icon/icons/IconEnter.tsx new file mode 100644 index 000000000..c8b375a8b --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconEnter.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconEnter = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconExternalMFA.tsx b/new-ui/src/shared/components/Icon/icons/IconExternalMFA.tsx new file mode 100644 index 000000000..e30fdbc02 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconExternalMFA.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconExternalMfa = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconFile.tsx b/new-ui/src/shared/components/Icon/icons/IconFile.tsx new file mode 100644 index 000000000..0f4266cf2 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconFile.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconFile = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconFileAdd.tsx b/new-ui/src/shared/components/Icon/icons/IconFileAdd.tsx new file mode 100644 index 000000000..7c92896f9 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconFileAdd.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconFileAdd = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconFiltration.tsx b/new-ui/src/shared/components/Icon/icons/IconFiltration.tsx new file mode 100644 index 000000000..e3b64c3ce --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconFiltration.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconFiltration = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconGateway.tsx b/new-ui/src/shared/components/Icon/icons/IconGateway.tsx new file mode 100644 index 000000000..46348328a --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconGateway.tsx @@ -0,0 +1,18 @@ +import type { SVGProps } from 'react'; + +export const IconGateway = (_props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconGithub.tsx b/new-ui/src/shared/components/Icon/icons/IconGithub.tsx new file mode 100644 index 000000000..fc901b720 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconGithub.tsx @@ -0,0 +1,21 @@ +import type { SVGProps } from 'react'; + +export const IconGithub = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconGlobe.tsx b/new-ui/src/shared/components/Icon/icons/IconGlobe.tsx new file mode 100644 index 000000000..c7d51e12c --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconGlobe.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconGlobe = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconGroups.tsx b/new-ui/src/shared/components/Icon/icons/IconGroups.tsx new file mode 100644 index 000000000..376b25f47 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconGroups.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconGroups = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconHamburger.tsx b/new-ui/src/shared/components/Icon/icons/IconHamburger.tsx new file mode 100644 index 000000000..5c54f7421 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconHamburger.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconHamburger = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconHelp.tsx b/new-ui/src/shared/components/Icon/icons/IconHelp.tsx new file mode 100644 index 000000000..602470385 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconHelp.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconHelp = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconHide.tsx b/new-ui/src/shared/components/Icon/icons/IconHide.tsx new file mode 100644 index 000000000..3dbe44a08 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconHide.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconHide = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconInfoFilled.tsx b/new-ui/src/shared/components/Icon/icons/IconInfoFilled.tsx new file mode 100644 index 000000000..38343d480 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconInfoFilled.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconInfoFilled = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconInfoOutlined.tsx b/new-ui/src/shared/components/Icon/icons/IconInfoOutlined.tsx new file mode 100644 index 000000000..ea68ad989 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconInfoOutlined.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconInfoOutlined = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconInternalMFA.tsx b/new-ui/src/shared/components/Icon/icons/IconInternalMFA.tsx new file mode 100644 index 000000000..4bd770667 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconInternalMFA.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconInternalMfa = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconIpSuggest.tsx b/new-ui/src/shared/components/Icon/icons/IconIpSuggest.tsx new file mode 100644 index 000000000..0ca67dce6 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconIpSuggest.tsx @@ -0,0 +1,16 @@ +export const IconIpSuggest = () => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconKey.tsx b/new-ui/src/shared/components/Icon/icons/IconKey.tsx new file mode 100644 index 000000000..774c8d06f --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconKey.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconKey = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconLightBulb.tsx b/new-ui/src/shared/components/Icon/icons/IconLightBulb.tsx new file mode 100644 index 000000000..097c646e9 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconLightBulb.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconLightBulb = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconLightTheme.tsx b/new-ui/src/shared/components/Icon/icons/IconLightTheme.tsx new file mode 100644 index 000000000..b1fb5827e --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconLightTheme.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconLightTheme = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconLinux.tsx b/new-ui/src/shared/components/Icon/icons/IconLinux.tsx new file mode 100644 index 000000000..f0a86fb38 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconLinux.tsx @@ -0,0 +1,21 @@ +import type { SVGProps } from 'react'; + +export const IconLinux = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconLoader.tsx b/new-ui/src/shared/components/Icon/icons/IconLoader.tsx new file mode 100644 index 000000000..117773e4c --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconLoader.tsx @@ -0,0 +1,17 @@ +export const IconLoader = () => { + return ( + + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconLocation.tsx b/new-ui/src/shared/components/Icon/icons/IconLocation.tsx new file mode 100644 index 000000000..fa792b7d1 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconLocation.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconLocation = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconLocationTracking.tsx b/new-ui/src/shared/components/Icon/icons/IconLocationTracking.tsx new file mode 100644 index 000000000..f35049cc0 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconLocationTracking.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconLocationTracking = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconLock.tsx b/new-ui/src/shared/components/Icon/icons/IconLock.tsx new file mode 100644 index 000000000..9bd4ef7fe --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconLock.tsx @@ -0,0 +1,16 @@ +export const IconLockOpen = () => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconLockClosed.tsx b/new-ui/src/shared/components/Icon/icons/IconLockClosed.tsx new file mode 100644 index 000000000..3ad83281e --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconLockClosed.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconLockClosed = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconLogout.tsx b/new-ui/src/shared/components/Icon/icons/IconLogout.tsx new file mode 100644 index 000000000..675ddd674 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconLogout.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconLogout = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconMail.tsx b/new-ui/src/shared/components/Icon/icons/IconMail.tsx new file mode 100644 index 000000000..1c2b8cfbd --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconMail.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconMail = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconMenu.tsx b/new-ui/src/shared/components/Icon/icons/IconMenu.tsx new file mode 100644 index 000000000..2ca7cd474 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconMenu.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconMenu = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconMinusCircle.tsx b/new-ui/src/shared/components/Icon/icons/IconMinusCircle.tsx new file mode 100644 index 000000000..14285d6c5 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconMinusCircle.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconMinusCircle = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconMobile.tsx b/new-ui/src/shared/components/Icon/icons/IconMobile.tsx new file mode 100644 index 000000000..a9a3c5910 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconMobile.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconMobile = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconMobileLock.tsx b/new-ui/src/shared/components/Icon/icons/IconMobileLock.tsx new file mode 100644 index 000000000..cb4c45892 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconMobileLock.tsx @@ -0,0 +1,16 @@ +export const IconMobileLock = () => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconNetworkSettings.tsx b/new-ui/src/shared/components/Icon/icons/IconNetworkSettings.tsx new file mode 100644 index 000000000..f7a4b65b4 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconNetworkSettings.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconNetworkSettings = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconNotification.tsx b/new-ui/src/shared/components/Icon/icons/IconNotification.tsx new file mode 100644 index 000000000..bd0c947e7 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconNotification.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconNotification = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconOneTimePassword.tsx b/new-ui/src/shared/components/Icon/icons/IconOneTimePassword.tsx new file mode 100644 index 000000000..a138f9120 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconOneTimePassword.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconOneTimePassword = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconOnline.tsx b/new-ui/src/shared/components/Icon/icons/IconOnline.tsx new file mode 100644 index 000000000..0e63d6a8e --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconOnline.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconOnline = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconOpenId.tsx b/new-ui/src/shared/components/Icon/icons/IconOpenId.tsx new file mode 100644 index 000000000..c23dccb5e --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconOpenId.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconOpenId = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconOpenInNewWindow.tsx b/new-ui/src/shared/components/Icon/icons/IconOpenInNewWindow.tsx new file mode 100644 index 000000000..69514713c --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconOpenInNewWindow.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconOpenInNewWindow = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconPending.tsx b/new-ui/src/shared/components/Icon/icons/IconPending.tsx new file mode 100644 index 000000000..eb0e6e28f --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconPending.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconPending = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconPieChart.tsx b/new-ui/src/shared/components/Icon/icons/IconPieChart.tsx new file mode 100644 index 000000000..5b57078e3 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconPieChart.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconPieChart = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconPlay.tsx b/new-ui/src/shared/components/Icon/icons/IconPlay.tsx new file mode 100644 index 000000000..5f5109463 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconPlay.tsx @@ -0,0 +1,18 @@ +import type { SVGProps } from 'react'; + +export const IconPlay = (_props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconPlayFilled.tsx b/new-ui/src/shared/components/Icon/icons/IconPlayFilled.tsx new file mode 100644 index 000000000..eab194510 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconPlayFilled.tsx @@ -0,0 +1,18 @@ +import type { SVGProps } from 'react'; + +export const IconPlayFilled = (_props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconPlus.tsx b/new-ui/src/shared/components/Icon/icons/IconPlus.tsx new file mode 100644 index 000000000..b375db67c --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconPlus.tsx @@ -0,0 +1,16 @@ +import type { SVGProps } from 'react'; + +export const IconPlus = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconPlusCircle.tsx b/new-ui/src/shared/components/Icon/icons/IconPlusCircle.tsx new file mode 100644 index 000000000..0bd3e2af1 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconPlusCircle.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconPlusCircle = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconProfile.tsx b/new-ui/src/shared/components/Icon/icons/IconProfile.tsx new file mode 100644 index 000000000..1aea62122 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconProfile.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconProfile = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconProtection.tsx b/new-ui/src/shared/components/Icon/icons/IconProtection.tsx new file mode 100644 index 000000000..11d0c0ced --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconProtection.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconProtection = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconRefresh.tsx b/new-ui/src/shared/components/Icon/icons/IconRefresh.tsx new file mode 100644 index 000000000..782f7958f --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconRefresh.tsx @@ -0,0 +1,28 @@ +import { type SVGProps, useId } from 'react'; + +export const IconRefresh = (props: SVGProps) => { + const id = useId(); + + return ( + + + + + + + + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconRequest.tsx b/new-ui/src/shared/components/Icon/icons/IconRequest.tsx new file mode 100644 index 000000000..ea84919ea --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconRequest.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconRequest = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconRules.tsx b/new-ui/src/shared/components/Icon/icons/IconRules.tsx new file mode 100644 index 000000000..8137f5e72 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconRules.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconRules = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconSearch.tsx b/new-ui/src/shared/components/Icon/icons/IconSearch.tsx new file mode 100644 index 000000000..8d51c753b --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconSearch.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconSearch = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconServers.tsx b/new-ui/src/shared/components/Icon/icons/IconServers.tsx new file mode 100644 index 000000000..47f90f5fb --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconServers.tsx @@ -0,0 +1,16 @@ +export const IconServers = () => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconSettings.tsx b/new-ui/src/shared/components/Icon/icons/IconSettings.tsx new file mode 100644 index 000000000..e0408ebd5 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconSettings.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconSettings = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconShow.tsx b/new-ui/src/shared/components/Icon/icons/IconShow.tsx new file mode 100644 index 000000000..54ee682f1 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconShow.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconShow = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconSortable.tsx b/new-ui/src/shared/components/Icon/icons/IconSortable.tsx new file mode 100644 index 000000000..47efe0233 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconSortable.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconSortable = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconStatusAttention.tsx b/new-ui/src/shared/components/Icon/icons/IconStatusAttention.tsx new file mode 100644 index 000000000..48ad14fb9 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconStatusAttention.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconStatusAttention = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconStatusAvailable.tsx b/new-ui/src/shared/components/Icon/icons/IconStatusAvailable.tsx new file mode 100644 index 000000000..c2c6ebb36 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconStatusAvailable.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconStatusAvailable = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconStatusImportant.tsx b/new-ui/src/shared/components/Icon/icons/IconStatusImportant.tsx new file mode 100644 index 000000000..8c1cd791c --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconStatusImportant.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconStatusImportant = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconStatusPremium.tsx b/new-ui/src/shared/components/Icon/icons/IconStatusPremium.tsx new file mode 100644 index 000000000..cceac1440 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconStatusPremium.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconStatusPremium = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconStatusSimple.tsx b/new-ui/src/shared/components/Icon/icons/IconStatusSimple.tsx new file mode 100644 index 000000000..8ca913e8c --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconStatusSimple.tsx @@ -0,0 +1,16 @@ +import type { SVGProps } from 'react'; + +export const IconStatusSimple = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconSupport.tsx b/new-ui/src/shared/components/Icon/icons/IconSupport.tsx new file mode 100644 index 000000000..edfea7fd5 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconSupport.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconSupport = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconSync.tsx b/new-ui/src/shared/components/Icon/icons/IconSync.tsx new file mode 100644 index 000000000..1383a5fbb --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconSync.tsx @@ -0,0 +1,16 @@ +export const IconSync = () => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconToken.tsx b/new-ui/src/shared/components/Icon/icons/IconToken.tsx new file mode 100644 index 000000000..33e2572e0 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconToken.tsx @@ -0,0 +1,27 @@ +import { type SVGProps, useId } from 'react'; + +export const IconToken = (props: SVGProps) => { + const id = useId(); + return ( + + + + + + + + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconTransactions.tsx b/new-ui/src/shared/components/Icon/icons/IconTransactions.tsx new file mode 100644 index 000000000..0b3039c46 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconTransactions.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconTransactions = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconTutorial.tsx b/new-ui/src/shared/components/Icon/icons/IconTutorial.tsx new file mode 100644 index 000000000..387953fdc --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconTutorial.tsx @@ -0,0 +1,18 @@ +import type { SVGProps } from 'react'; + +export const IconTutorial = (_props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconTutorialNotAvailable.tsx b/new-ui/src/shared/components/Icon/icons/IconTutorialNotAvailable.tsx new file mode 100644 index 000000000..dccae3c67 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconTutorialNotAvailable.tsx @@ -0,0 +1,18 @@ +import type { SVGProps } from 'react'; + +export const IconTutorialNotAvailable = (_props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconUbuntu.tsx b/new-ui/src/shared/components/Icon/icons/IconUbuntu.tsx new file mode 100644 index 000000000..4279ff447 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconUbuntu.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconUbuntu = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconUpload.tsx b/new-ui/src/shared/components/Icon/icons/IconUpload.tsx new file mode 100644 index 000000000..b7760ba64 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconUpload.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconUpload = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconUser.tsx b/new-ui/src/shared/components/Icon/icons/IconUser.tsx new file mode 100644 index 000000000..8658cba76 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconUser.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconUser = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconUserActive.tsx b/new-ui/src/shared/components/Icon/icons/IconUserActive.tsx new file mode 100644 index 000000000..b27531714 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconUserActive.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconUserActive = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconUsers.tsx b/new-ui/src/shared/components/Icon/icons/IconUsers.tsx new file mode 100644 index 000000000..a8dbcd0d0 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconUsers.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconUsers = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconWarningFilled.tsx b/new-ui/src/shared/components/Icon/icons/IconWarningFilled.tsx new file mode 100644 index 000000000..ba4a994b8 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconWarningFilled.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconWarningFilled = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconWarningOutlined.tsx b/new-ui/src/shared/components/Icon/icons/IconWarningOutlined.tsx new file mode 100644 index 000000000..12dd4dca7 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconWarningOutlined.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconWarningOutlined = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconWebhooks.tsx b/new-ui/src/shared/components/Icon/icons/IconWebhooks.tsx new file mode 100644 index 000000000..b47e332ed --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconWebhooks.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconWebhooks = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconWindows.tsx b/new-ui/src/shared/components/Icon/icons/IconWindows.tsx new file mode 100644 index 000000000..773876cc5 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconWindows.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconWindows = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/index.ts b/new-ui/src/shared/components/Icon/index.ts new file mode 100644 index 000000000..a9ebdc3e2 --- /dev/null +++ b/new-ui/src/shared/components/Icon/index.ts @@ -0,0 +1,3 @@ +export { Icon } from './Icon'; +export type { IconKindValue } from './icon-types'; +export { IconKind } from './icon-types'; diff --git a/new-ui/src/shared/components/Icon/style.scss b/new-ui/src/shared/components/Icon/style.scss new file mode 100644 index 000000000..6a81db60d --- /dev/null +++ b/new-ui/src/shared/components/Icon/style.scss @@ -0,0 +1,41 @@ +.icon { + display: inline-block; + overflow: hidden; + user-select: none; + transition-property: transform; + width: var(--icon-size); + height: var(--icon-size); + + @include animate; + + svg { + width: inherit; + height: inherit; + + path { + @include animate(fill); + } + + circle { + @include animate(stroke); + } + } +} + +.icon svg { + path { + fill: var(--c-white-100); + } + + circle { + stroke: var(--c-white-100); + } +} + +.icon[style*='--icon-color'] svg path { + fill: var(--icon-color); +} + +.icon[style*='--icon-color'] svg circle { + stroke: var(--icon-color); +} diff --git a/new-ui/src/shared/components/IconButton/IconButton.tsx b/new-ui/src/shared/components/IconButton/IconButton.tsx new file mode 100644 index 000000000..3ae3800a0 --- /dev/null +++ b/new-ui/src/shared/components/IconButton/IconButton.tsx @@ -0,0 +1,26 @@ +import './style.scss'; +import clsx from 'clsx'; +import { Icon } from '../Icon/Icon'; +import { type IconButtonProps, IconButtonVariant } from './types'; + +export const IconButton = ({ + icon, + ref, + iconRotation, + className, + variant = IconButtonVariant.Big, + onClick, +}: IconButtonProps) => { + return ( +
{ + onClick?.(e); + }} + role="button" + > + +
+ ); +}; diff --git a/new-ui/src/shared/components/IconButton/style.scss b/new-ui/src/shared/components/IconButton/style.scss new file mode 100644 index 000000000..1182e3679 --- /dev/null +++ b/new-ui/src/shared/components/IconButton/style.scss @@ -0,0 +1,76 @@ +.icon-button { + --size: 36px; + --bg: transparent; + --icon: var(--c-white-80); + --icon-size: 20px; + + border-radius: 8px; + height: var(--size); + width: var(--size); + display: inline-flex; + flex-flow: column; + align-items: center; + justify-content: center; + background: var(--bg); + cursor: pointer; + + @include animate(background); + + svg { + --icon-color: var(--icon); + } + + &.variant { + &-big, + &-big-selected { + --size: 36px; + --icon-size: 20px; + } + + &-small, + &-small-selected { + --size: 24px; + --icon-size: 16px; + } + + &-big { + --bg: transparent; + --icon: var(--c-white-80); + + &:hover { + --bg: var(--c-white-5); + --icon: var(--c-white-100); + } + } + + &-big-selected { + --bg: var(--c-white-10); + --icon: var(--c-white-100); + + &:hover { + --bg: var(--c-white-20); + --icon: var(--c-white-100); + } + } + + &-small { + --bg: var(--c-white-5); + --icon: var(--c-white-80); + + &:hover { + --bg: var(--c-white-10); + --icon: var(--c-white-100); + } + } + + &-small-selected { + --bg: var(--c-white-10); + --icon: var(--c-white-100); + + &:hover { + --bg: var(--c-white-20); + --icon: var(--c-white-100); + } + } + } +} diff --git a/new-ui/src/shared/components/IconButton/types.ts b/new-ui/src/shared/components/IconButton/types.ts new file mode 100644 index 000000000..6b1efaf3f --- /dev/null +++ b/new-ui/src/shared/components/IconButton/types.ts @@ -0,0 +1,22 @@ +import type { MouseEventHandler, Ref } from 'react'; +import type { DirectionValue } from '../../types'; +import type { IconKindValue } from '../Icon/icon-types'; + +export const IconButtonVariant = { + Big: 'big', + BigSelected: 'big-selected', + Small: 'small', + SmallSelected: 'small-selected', +} as const; + +export type IconButtonVariantValue = + (typeof IconButtonVariant)[keyof typeof IconButtonVariant]; + +export type IconButtonProps = { + variant: IconButtonVariantValue; + icon: IconKindValue; + iconRotation?: DirectionValue; + ref?: Ref; + className?: string; + onClick?: MouseEventHandler; +}; diff --git a/new-ui/src/shared/components/InteractionBox/InteractionBox.tsx b/new-ui/src/shared/components/InteractionBox/InteractionBox.tsx new file mode 100644 index 000000000..b29b64b7c --- /dev/null +++ b/new-ui/src/shared/components/InteractionBox/InteractionBox.tsx @@ -0,0 +1,47 @@ +import { type MouseEventHandler, type PropsWithChildren, type Ref, useMemo } from 'react'; +import './style.scss'; +import clsx from 'clsx'; + +type Props = { + interactionSize?: number; + onClick?: MouseEventHandler; + id?: string; + className?: string; + ref?: Ref; + disabled?: boolean; + tabIndex?: number; +}; + +export const InteractionBox = ({ + onClick, + className, + id, + ref, + tabIndex, + interactionSize, + disabled = false, + children, +}: Props & PropsWithChildren) => { + const style = useMemo(() => { + const res: Record = {}; + if (interactionSize) { + res['--interaction-size'] = `${interactionSize}px`; + } + return res; + }, [interactionSize]); + + return ( +
+ {children} + +
+ ); +}; diff --git a/new-ui/src/shared/components/InteractionBox/style.scss b/new-ui/src/shared/components/InteractionBox/style.scss new file mode 100644 index 000000000..18f2694d9 --- /dev/null +++ b/new-ui/src/shared/components/InteractionBox/style.scss @@ -0,0 +1,31 @@ +.interaction-box { + --interaction-size: 36px; + + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: center; + flex: none; + position: relative; + user-select: none; + + & > button { + display: block; + position: absolute; + content: ' '; + width: var(--interaction-size); + height: var(--interaction-size); + background-color: transparent; + border: none; + cursor: pointer; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + padding: 0; + margin: 0; + + &:disabled { + cursor: not-allowed; + } + } +} diff --git a/new-ui/src/shared/components/LoaderSpinner/LoaderSpinner.tsx b/new-ui/src/shared/components/LoaderSpinner/LoaderSpinner.tsx new file mode 100644 index 000000000..20e2bbabf --- /dev/null +++ b/new-ui/src/shared/components/LoaderSpinner/LoaderSpinner.tsx @@ -0,0 +1,24 @@ +import clsx from 'clsx'; +import { Icon } from '../Icon'; +import './style.scss'; +import { useMemo } from 'react'; + +type Props = { + size?: number; + variant?: 'empty' | 'primary'; +}; + +export const LoaderSpinner = ({ size = 20, variant }: Props) => { + const variantClass = useMemo(() => (variant ? `variant-${variant}` : null), [variant]); + return ( +
+ +
+ ); +}; diff --git a/new-ui/src/shared/components/LoaderSpinner/style.scss b/new-ui/src/shared/components/LoaderSpinner/style.scss new file mode 100644 index 000000000..c538dc820 --- /dev/null +++ b/new-ui/src/shared/components/LoaderSpinner/style.scss @@ -0,0 +1,38 @@ +.loader-spinner { + display: inline-block; + user-select: none; + + &.variant-primary { + --spinner-track: var(--c-white-30); + --spinner-indicator: var(--c-white-100); + } + + & > .icon { + animation: spin 1s ease-in-out infinite; + } + + svg { + & > path { + stroke: var(--spinner-indicator); + fill: unset !important; + + @include animate(stroke); + } + + & > circle { + stroke: var(--spinner-track); + + @include animate(stroke); + } + } +} + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} diff --git a/new-ui/src/shared/components/LocationCard/LocationCard.tsx b/new-ui/src/shared/components/LocationCard/LocationCard.tsx new file mode 100644 index 000000000..a4d076fb6 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/LocationCard.tsx @@ -0,0 +1,105 @@ +import './style.scss'; +import clsx from 'clsx'; +import type { ReactNode } from 'react'; +import { + ConnectionType, + type InstanceInfo, + type LocationInfo, +} from '../../rust-api/types'; +import { Direction } from '../../types'; +import { Fold } from '../Fold/Fold'; +import { IconKind } from '../Icon'; +import { IconButton } from '../IconButton/IconButton'; +import { IconButtonVariant } from '../IconButton/types'; +import { LocationCardIcon } from './components/LocationCardIcon'; +import { LocationCardProvider, useLocationCardContext } from './context/context'; +import { LocationCardViews, type LocationCardViewsValue } from './context/types'; +import { ConnectedView } from './views/ConnectedView/ConnectedView'; +import { DefaultView } from './views/DefaultView/DefaultView'; +import { LocationCardMfaEmailView } from './views/LocationCardMfaEmailView/LocationCardMfaEmailView'; +import { LocationCardMfaSettings } from './views/LocationCardMfaSettings/LocationCardMfaSettings'; +import { LocationCardMfaTotpView } from './views/LocationCardMfaTotpView/LocationCardMfaTotpView'; + +interface Props { + location: LocationInfo; + isOpen: boolean; + onOpen: () => void; + disableOpen?: boolean; + instance: InstanceInfo; +} + +const views: Record = { + [LocationCardViews.Default]: , + [LocationCardViews.MfaTotp]: , + [LocationCardViews.MfaEmail]: , + [LocationCardViews.MfaOidc]: null, + [LocationCardViews.MfaMobile]: null, + [LocationCardViews.MfaSettings]: , + [LocationCardViews.Connecting]: null, + [LocationCardViews.Connected]: , + [LocationCardViews.PostureCheckFail]: null, +}; + +interface InnerProps { + isOpen: boolean; + onOpen: () => void; + disableOpen: boolean; +} + +const LocationCardInner = ({ isOpen, onOpen, disableOpen }: InnerProps) => { + const { location, currentView } = useLocationCardContext(); + + return ( +
+
+
+ +
+

+ {location.connection_type === ConnectionType.Location + ? 'Location' + : 'Tunnel'} +

+
+

{location.name}

+ {location.active && ( +
+

Online

+
+ )} +
+
+
+
+ {!disableOpen && ( + + )} +
+
+ {views[currentView]} +
+ ); +}; + +export const LocationCard = ({ + location, + isOpen, + onOpen, + instance, + disableOpen = false, +}: Props) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/LocationCard/assets/location_avatar.png b/new-ui/src/shared/components/LocationCard/assets/location_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..ce0ce633269e8336f3ff3ce77f7728a9ae9614b9 GIT binary patch literal 5223 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 literal 0 HcmV?d00001 diff --git a/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx b/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx new file mode 100644 index 000000000..19a583b85 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx @@ -0,0 +1,59 @@ +import './style.scss'; +import { useMutation } from '@tanstack/react-query'; +import clsx from 'clsx'; +import { api } from '../../../../rust-api/api'; +import { LocationMfaMode } from '../../../../rust-api/types'; +import { useLocationCardContext } from '../../context/context'; +import { LocationCardViews } from '../../context/types'; + +export const ConnectButton = () => { + const { location, setView, startMfa } = useLocationCardContext(); + + const { mutate: connect } = useMutation({ + mutationFn: api.connect, + onSuccess: () => { + setView(LocationCardViews.Connected); + }, + meta: { + invalidate: ['locations'], + }, + }); + + const { mutate: disconnect } = useMutation({ + mutationFn: api.disconnect, + onSuccess: () => { + setView(LocationCardViews.Default); + }, + meta: { + invalidate: ['locations'], + }, + }); + + return ( + + ); +}; diff --git a/new-ui/src/shared/components/LocationCard/components/ConnectButton/style.scss b/new-ui/src/shared/components/LocationCard/components/ConnectButton/style.scss new file mode 100644 index 000000000..9b63060ed --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/ConnectButton/style.scss @@ -0,0 +1,39 @@ +.connect-button { + --bg: linear-gradient(180deg, #fff 0%, #d3ddfb 100%); + --shadow: 0 4px 5px 0 rgb(53 84 179 / 7%); + --color: var(--fg-action); + --border: var(--bg); + + background: var(--bg); + border: 1px solid var(--border); + color: var(--color); + box-shadow: var(--shadow); + transition-duration: 200ms; + transition-property: background, border-color, box-shadow, color; + transition-timing-function: ease-in-out; + cursor: pointer; + display: inline-flex; + width: 100%; + align-items: center; + justify-content: center; + border-radius: 100px; + min-height: 38px; + box-sizing: border-box; + padding: 0 var(--spacing-lg); + + &.connected { + --bg: linear-gradient(rgb(255 255 255 / 0%), rgb(255 255 255 / 0%)); + --color: var(--fg-white-100); + --border: var(--border-default); + + &:hover { + --border: var(--bg-white-5); + --bg: linear-gradient(rgb(255 255 255 / 5%), rgb(255 255 255 / 5%)); + } + } + + p { + font: var(--t-body-sm-600); + color: inherit; + } +} diff --git a/new-ui/src/shared/components/LocationCard/components/ConnectionChart/ConnectionChart.tsx b/new-ui/src/shared/components/LocationCard/components/ConnectionChart/ConnectionChart.tsx new file mode 100644 index 000000000..9332293c9 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/ConnectionChart/ConnectionChart.tsx @@ -0,0 +1,108 @@ +import './style.scss'; +import { useQuery } from '@tanstack/react-query'; +import { BarElement, CategoryScale, Chart as ChartJS, LinearScale } from 'chart.js'; +import { sum } from 'radashi'; +import { useMemo } from 'react'; +import { Bar } from 'react-chartjs-2'; +import { getLocationStatsQueryOptions } from '../../../../rust-api/query'; +import type { ConnectionType } from '../../../../rust-api/types'; +import { BoxIcon } from '../../../BoxIcon/BoxIcon'; +import { Icon, IconKind } from '../../../Icon'; +import { TransferText } from '../../../TransferText/TransferText'; + +ChartJS.register(BarElement, CategoryScale, LinearScale); + +const UPLOAD_COLOR = 'rgba(255, 255, 255, 0.20)'; +const DOWNLOAD_COLOR = 'rgba(255, 255, 255, 1.0)'; + +interface Props { + locationId: number; + connectionType: ConnectionType; +} + +export const ConnectionChart = ({ locationId, connectionType }: Props) => { + const { data: stats } = useQuery( + getLocationStatsQueryOptions({ locationId, connectionType }), + ); + + const statsSum = useMemo( + () => ({ + download: sum(stats ?? [], (s) => s.download), + upload: sum(stats ?? [], (s) => s.upload), + }), + [stats], + ); + + const chartData = { + labels: stats?.map((s) => s.collected_at) ?? [], + datasets: [ + { + label: 'upload', + data: stats?.map((s) => s.upload) ?? [], + backgroundColor: UPLOAD_COLOR, + borderWidth: 0, + borderRadius: 0, + categoryPercentage: 0.95, + barPercentage: 1.0, + maxBarThickness: 2.2, + }, + { + label: 'download', + data: stats?.map((s) => s.download) ?? [], + backgroundColor: DOWNLOAD_COLOR, + borderWidth: 0, + borderRadius: 0, + categoryPercentage: 0.95, + barPercentage: 1.0, + maxBarThickness: 2.2, + }, + ], + }; + + const options = { + responsive: true, + maintainAspectRatio: false, + animation: false as const, + layout: { padding: 0 }, + plugins: { + legend: { display: false }, + tooltip: { enabled: false }, + }, + scales: { + x: { + display: false, + grid: { display: false }, + border: { display: false }, + }, + y: { + display: false, + grid: { display: false }, + border: { display: false }, + }, + }, + }; + + if (!stats?.length) return null; + + return ( +
+
+ +
+
+
+ + + + +
+
+ + + + +
+
+
+ ); +}; diff --git a/new-ui/src/shared/components/LocationCard/components/ConnectionChart/style.scss b/new-ui/src/shared/components/LocationCard/components/ConnectionChart/style.scss new file mode 100644 index 000000000..20aeb93c2 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/ConnectionChart/style.scss @@ -0,0 +1,21 @@ +.connection-chart { + > .chart-container { + padding-bottom: var(--spacing-lg); + } + + > .stats-summary { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-3xl); + + > .summary { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-sm); + } + } +} diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardControls/LocationCardControls.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardControls/LocationCardControls.tsx new file mode 100644 index 000000000..a86ee1571 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardControls/LocationCardControls.tsx @@ -0,0 +1,5 @@ +import { Controls } from '../../../Controls/Controls'; + +export const LocationCardControls = () => { + return ; +}; diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardIcon.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardIcon.tsx new file mode 100644 index 000000000..3912e2243 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardIcon.tsx @@ -0,0 +1,20 @@ +import cardImage from '../assets/location_avatar.png'; + +export const LocationCardIcon = () => { + return ( +
+ +
+ ); +}; diff --git a/new-ui/src/shared/components/LocationCard/components/LocationViewHeader/LocationViewHeader.tsx b/new-ui/src/shared/components/LocationCard/components/LocationViewHeader/LocationViewHeader.tsx new file mode 100644 index 000000000..a45fc9d5b --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/LocationViewHeader/LocationViewHeader.tsx @@ -0,0 +1,15 @@ +import './style.scss'; +import type { PropsWithChildren } from 'react'; + +interface Props extends PropsWithChildren { + title: string; +} + +export const LocationViewHeader = ({ title, children }: Props) => { + return ( +
+

{title}

+ {children} +
+ ); +}; diff --git a/new-ui/src/shared/components/LocationCard/components/LocationViewHeader/style.scss b/new-ui/src/shared/components/LocationCard/components/LocationViewHeader/style.scss new file mode 100644 index 000000000..a6563063e --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/LocationViewHeader/style.scss @@ -0,0 +1,15 @@ +.location-card-view-header { + display: flex; + flex-flow: column; + row-gap: var(--spacing-xs); + + p { + font: var(--t-body-xs-400); + color: var(--fg-white-70); + } + + > .title { + font: var(--t-body-sm-500); + color: var(--fg-white-100); + } +} diff --git a/new-ui/src/shared/components/LocationCard/components/MfaSelector/MfaSelector.tsx b/new-ui/src/shared/components/LocationCard/components/MfaSelector/MfaSelector.tsx new file mode 100644 index 000000000..7f1f65ce2 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/MfaSelector/MfaSelector.tsx @@ -0,0 +1,59 @@ +import './style.scss'; +import clsx from 'clsx'; +import { type HTMLProps, type MouseEventHandler, useMemo } from 'react'; +import type { MfaMethodValue } from '../../../../rust-api/types'; +import { mfaToText } from '../../../../utils/mfa'; +import { Icon, IconKind, type IconKindValue } from '../../../Icon'; + +interface Props { + factor: MfaMethodValue; + selected?: boolean; + isDefault?: boolean; + onClick?: MouseEventHandler; + containerProps?: Omit, 'onClick'>; +} + +export const MfaSelector = ({ + factor, + onClick, + containerProps, + selected = false, + isDefault = false, +}: Props) => { + const iconKind = useMemo((): IconKindValue => { + switch (factor) { + case 'email': + return 'mail'; + case 'mobileapprove': + return 'mobile-lock'; + case 'oidc': + return 'token'; + case 'totp': + return 'mobile-lock'; + case 'biometric': + return 'biometric'; + } + }, [factor]); + + return ( +
+ +
+

{mfaToText(factor)}

+ {isDefault && ( +
+

Default

+
+ )} +
+ {selected && } +
+ ); +}; diff --git a/new-ui/src/shared/components/LocationCard/components/MfaSelector/style.scss b/new-ui/src/shared/components/LocationCard/components/MfaSelector/style.scss new file mode 100644 index 000000000..3d33c107c --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/MfaSelector/style.scss @@ -0,0 +1,76 @@ +.mfa-selector { + --bg: transparent; + --border: var(--border-default); + --icon: var(--fg-white-80); + --color: var(--fg-white-80); + + display: grid; + grid-template-columns: 20px minmax(0, 1fr) 16px; + column-gap: var(--spacing-sm); + background: var(--bg); + border: 1px solid var(--border); + color: var(--color); + user-select: none; + align-items: center; + box-sizing: border-box; + padding: 0 var(--spacing-md); + min-height: 40px; + border-radius: 8px; + cursor: pointer; + transition-duration: 250ms; + transition-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1); + transition-property: border-color, background, color; + + &:hover { + --bg: var(--bg-white-5); + --color: var(--fg-white-100); + --border: var(--border-default); + --icon: var(--fg-white-100); + } + + &.selected { + --bg: var(--bg-white-5); + --color: var(--fg-white-100); + --border: transparent; + --icon: var(--fg-white-100); + } + + > .middle { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-xs); + } + + .default-badge { + display: inline-block; + box-sizing: border-box; + padding: 2px 5px; + border-radius: 5px; + background: var(--bg-white-10); + + p { + font-family: var(--font-family-body); + font-size: 11px; + font-weight: 400; + line-height: normal; + letter-spacing: -0.11px; + } + } + + .factor-icon { + --icon-color: var(--icon); + + path { + transition-duration: 250ms; + transition-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1); + transition-property: fill; + } + } + + .name { + color: inherit; + font: var(--t-body-xs); + } +} diff --git a/new-ui/src/shared/components/LocationCard/context/context.tsx b/new-ui/src/shared/components/LocationCard/context/context.tsx new file mode 100644 index 000000000..b2e7e8b4e --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/context/context.tsx @@ -0,0 +1,80 @@ +import { createContext, type ReactNode, useCallback, useContext, useState } from 'react'; +import type { InstanceInfo, LocationInfo } from '../../../rust-api/types'; +import { MfaMethod } from '../../../rust-api/types'; +import { LocationCardViews, type LocationCardViewsValue } from './types'; + +interface LocationCardContextValue { + location: LocationInfo; + instance: InstanceInfo; + currentView: LocationCardViewsValue; + previousView: LocationCardViewsValue | null; + setView: (view: LocationCardViewsValue) => void; + startMfa: () => void; +} + +const LocationCardContext = createContext(null); + +export const useLocationCardContext = (): LocationCardContextValue => { + const ctx = useContext(LocationCardContext); + if (!ctx) { + throw new Error('useLocationCardContext must be used within a LocationCardProvider'); + } + return ctx; +}; + +interface LocationCardProviderProps { + instance: InstanceInfo; + location: LocationInfo; + children: ReactNode; +} + +export const LocationCardProvider = ({ + location, + instance, + children, +}: LocationCardProviderProps) => { + const [previousView, setPreviousView] = useState(null); + const [currentView, setCurrentView] = useState( + location.active ? LocationCardViews.Connected : LocationCardViews.Default, + ); + + const setView = useCallback( + (view: LocationCardViewsValue) => { + setPreviousView(currentView); + setCurrentView(view); + }, + [currentView], + ); + + const startMfa = useCallback(() => { + switch (location.mfa_method) { + case MfaMethod.Totp: + setView(LocationCardViews.MfaTotp); + break; + case MfaMethod.Email: + setView(LocationCardViews.MfaEmail); + break; + case MfaMethod.Oidc: + setView(LocationCardViews.MfaOidc); + break; + case MfaMethod.MobileApprove: + setView(LocationCardViews.MfaMobile); + break; + } + }, [location.mfa_method, setView]); + + return ( + + {children} + + ); +}; diff --git a/new-ui/src/shared/components/LocationCard/context/types.ts b/new-ui/src/shared/components/LocationCard/context/types.ts new file mode 100644 index 000000000..a17e666e3 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/context/types.ts @@ -0,0 +1,14 @@ +export const LocationCardViews = { + Default: 'default', + MfaTotp: 'mfa-totp', + MfaEmail: 'mfa-email', + MfaOidc: 'mfa-oidc', + MfaMobile: 'mfa-mobile', + MfaSettings: 'mfa-settings', + Connecting: 'connecting', + Connected: 'connected', + PostureCheckFail: 'posture-check-fail', +} as const; + +export type LocationCardViewsValue = + (typeof LocationCardViews)[keyof typeof LocationCardViews]; diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts new file mode 100644 index 000000000..60a2e730f --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts @@ -0,0 +1,155 @@ +import { useMutation, useQuery } from '@tanstack/react-query'; +import { fetch } from '@tauri-apps/plugin-http'; +import { error } from '@tauri-apps/plugin-log'; +import { useCallback, useEffect, useRef, useState } from 'react'; +import { api } from '../../../rust-api/api'; +import { + getInstancesQueryOptions, + getPlatformHeaderQueryOptions, +} from '../../../rust-api/query'; +import type { EdgeRequestHeaders } from '../../../rust-api/types'; +import { useLocationCardContext } from '../context/context'; +import { LocationCardViews } from '../context/types'; + +const MFA_ENDPOINT = 'api/v1/client-mfa'; + +type MfaStartResponse = { + token: string; + challenge?: string; +}; + +type MfaFinishResponse = { + preshared_key: string; +}; + +type MfaErrorResponse = { + error: string; +}; + +export const useMfaConnect = (method: 0 | 1) => { + const { location, setView } = useLocationCardContext(); + + const [token, setToken] = useState(null); + const [isStarting, setIsStarting] = useState(false); + const [startError, setStartError] = useState(null); + const [isVerifying, setIsVerifying] = useState(false); + const [verifyError, setVerifyError] = useState(null); + const [requestHeaders, setRequestHeaders] = useState(null); + + const { data: instances } = useQuery(getInstancesQueryOptions); + const { data: platformHeader } = useQuery(getPlatformHeaderQueryOptions); + + const instance = instances?.find((i) => i.id === location.instance_id); + + const { mutate: connectMutate } = useMutation({ + mutationFn: api.connect, + meta: { invalidate: ['locations'] }, + onSuccess: () => { + setView(LocationCardViews.Connected); + }, + onError: (err) => { + error(`Connect command failed after successful code verification\n${err}`); + }, + }); + + // Fire the /start request exactly once when instance + platformHeader are ready. + const startCalled = useRef(false); + + // biome-ignore lint/correctness/useExhaustiveDependencies: intentional one-shot trigger via startCalled ref + useEffect(() => { + if (!instance || !platformHeader || startCalled.current) return; + startCalled.current = true; + + setIsStarting(true); + + (async () => { + let headers: EdgeRequestHeaders; + try { + headers = await api.getEdgeRequestHeaders(); + setRequestHeaders(headers); + } catch { + setStartError('Failed to load request headers'); + setIsStarting(false); + return; + } + + try { + const res = await fetch(`${instance.proxy_url}${MFA_ENDPOINT}/start`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...headers, + }, + body: JSON.stringify({ + method, + pubkey: instance.pubkey, + location_id: location.network_id, + }), + }); + + if (res.ok) { + const data = (await res.json()) as MfaStartResponse; + setToken(data.token); + } else { + const data = (await res.json()) as MfaErrorResponse; + setStartError(data.error ?? 'Failed to start MFA'); + } + } catch { + setStartError('Failed to reach server'); + } finally { + setIsStarting(false); + } + })(); + }, [instance, platformHeader]); + + const verifyCode = useCallback( + async (code: string) => { + if (!token || !instance || !platformHeader || !requestHeaders) return; + + setIsVerifying(true); + setVerifyError(null); + + const body = JSON.stringify({ token, code }); + + try { + const res = await fetch(`${instance.proxy_url}${MFA_ENDPOINT}/finish`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...requestHeaders, + }, + body, + }); + + if (res.ok) { + const data = (await res.json()) as MfaFinishResponse; + connectMutate({ + locationId: location.id, + connectionType: location.connection_type, + presharedKey: data.preshared_key, + }); + } else { + const data = (await res.json()) as MfaErrorResponse; + const { error: errorMessage } = data; + if (errorMessage === 'Unauthorized') { + setVerifyError('Invalid code'); + } else if ( + errorMessage === 'invalid token' || + errorMessage === 'login session not found' + ) { + setView(LocationCardViews.Default); + } else { + setVerifyError('Verification failed'); + } + } + } catch { + setVerifyError('Failed to reach server'); + } finally { + setIsVerifying(false); + } + }, + [token, instance, platformHeader, requestHeaders, location, connectMutate, setView], + ); + + return { token, isStarting, startError, verifyCode, isVerifying, verifyError }; +}; diff --git a/new-ui/src/shared/components/LocationCard/style.scss b/new-ui/src/shared/components/LocationCard/style.scss new file mode 100644 index 000000000..9221d88a9 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/style.scss @@ -0,0 +1,69 @@ +.location-card { + border-radius: 12px; + box-sizing: border-box; + padding: var(--spacing-md) var(--spacing-lg); + background-color: var(--bg-dark-blue-40); + + > .top-track { + display: flex; + flex-flow: row; + align-items: center; + justify-content: flex-start; + user-select: none; + + > .left { + display: flex; + flex-flow: row; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-md); + + > .info { + display: flex; + flex-flow: column; + + .label { + font: var(--t-body-xs-400); + color: var(--fg-white-70); + } + + .location-name { + font: var(--t-body-primary-600); + color: var(--fg-white-100); + } + + > .bottom { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-sm); + } + + .online-badge { + display: inline-block; + box-sizing: border-box; + padding: 1px 4px; + border-radius: 4px; + background-color: #74ffb8; + + p { + font-family: var(--font-family-body); + font-size: 10px; + letter-spacing: 0.1px; + font-weight: 600; + color: #2f50c2; + } + } + } + } + + > .right { + margin-left: auto; + } + } + + .controls { + padding-top: var(--spacing-3xl); + } +} diff --git a/new-ui/src/shared/components/LocationCard/views/ConnectedView/ConnectedView.tsx b/new-ui/src/shared/components/LocationCard/views/ConnectedView/ConnectedView.tsx new file mode 100644 index 000000000..84ab3a929 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/ConnectedView/ConnectedView.tsx @@ -0,0 +1,94 @@ +import './style.scss'; +import { useQuery } from '@tanstack/react-query'; +import dayjs from 'dayjs'; +import { useEffect, useMemo } from 'react'; +import { api } from '../../../../rust-api/api'; +import { LocationMfaMode } from '../../../../rust-api/types'; +import { ThemeSpacing } from '../../../../types'; +import { mfaToText } from '../../../../utils/mfa'; +import { BoxIcon } from '../../../BoxIcon/BoxIcon'; +import { Divider } from '../../../Divider/Divider'; +import { Icon, IconKind } from '../../../Icon'; +import { SizedBox } from '../../../SizedBox/SizedBox'; +import { ConnectButton } from '../../components/ConnectButton/ConnectButton'; +import { ConnectionChart } from '../../components/ConnectionChart/ConnectionChart'; +import { useLocationCardContext } from '../../context/context'; +import { LocationCardViews } from '../../context/types'; + +export const ConnectedView = () => { + const { location, setView } = useLocationCardContext(); + + // const { data: currentConnection } = useQuery({ + // queryKey: ['locations', location.id, 'connection'], + // queryFn: () => + // api.getActiveConnection({ + // connectionType: location.connection_type, + // locationId: location.id, + // }), + // }); + + const { data: lastConnection } = useQuery({ + queryKey: ['locations', location.id, 'last-connect'], + queryFn: () => + api.getLastConnection({ + connectionType: location.connection_type, + locationId: location.id, + }), + }); + + const lastConnectedText = useMemo(() => { + if (!lastConnection) return 'Never'; + return dayjs.utc(lastConnection.end).local().format('DD MMM YYYY'); + }, [lastConnection]); + + // biome-ignore lint/correctness/useExhaustiveDependencies: side-effect + useEffect(() => { + if (!location.active) { + setView(LocationCardViews.Default); + } + }, [location.active]); + + return ( +
+ +
+
+ + + +

Allowed traffic

+

+ {location.route_all_traffic ? 'All traffic' : 'Predefined traffic'} +

+
+ {location.location_mfa_mode !== LocationMfaMode.Disabled && ( +
+ + + +

Active MFA

+

{mfaToText(location.mfa_method ?? 'totp')}

+
+ )} +
+ +
+
+
Last connected
+
{lastConnectedText}
+
+
+
Assigned IP
+
{location.address}
+
+
+ + + + +
+ ); +}; diff --git a/new-ui/src/shared/components/LocationCard/views/ConnectedView/style.scss b/new-ui/src/shared/components/LocationCard/views/ConnectedView/style.scss new file mode 100644 index 000000000..6b076ace8 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/ConnectedView/style.scss @@ -0,0 +1,47 @@ +.location-view-connected { + > .tiles { + display: grid; + grid-template-columns: repeat(2, 1fr); + column-gap: var(--spacing-md); + + > .tile { + background: var(--bg-white-5); + border-radius: 8px; + box-sizing: border-box; + padding: var(--spacing-sm) var(--spacing-md); + + > .box-icon { + margin-bottom: 13px; + } + + > .label { + font: var(--t-body-xxs-400); + color: var(--fg-white-50); + padding-bottom: var(--spacing-xs); + } + + > .label-value { + font: var(--t-body-xs-500); + } + } + } + + > .connection-info { + display: flex; + flex-flow: row nowrap; + align-items: flex-start; + justify-content: space-between; + + > .info { + > .label { + font: var(--t-body-xxs-400); + color: var(--fg-white-50); + padding-bottom: var(--spacing-xs); + } + + > .label-value { + font: var(--t-body-xs-500); + } + } + } +} diff --git a/new-ui/src/shared/components/LocationCard/views/DefaultView/DefaultView.tsx b/new-ui/src/shared/components/LocationCard/views/DefaultView/DefaultView.tsx new file mode 100644 index 000000000..acfb49a9d --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/DefaultView/DefaultView.tsx @@ -0,0 +1,74 @@ +import './style.scss'; +import { useMutation } from '@tanstack/react-query'; +import { Fragment } from 'react/jsx-runtime'; +import { api } from '../../../../rust-api/api'; +import { + ClientTrafficPolicy, + LocationMfaMode, + MfaMethod, +} from '../../../../rust-api/types'; +import { ThemeSpacing } from '../../../../types'; +import { mfaToText } from '../../../../utils/mfa'; +import { Divider } from '../../../Divider/Divider'; +import { IconButton } from '../../../IconButton/IconButton'; +import { IconButtonVariant } from '../../../IconButton/types'; +import { SizedBox } from '../../../SizedBox/SizedBox'; +import { Toggle } from '../../../Toggle/Toggle'; +import { ConnectButton } from '../../components/ConnectButton/ConnectButton'; +import { useLocationCardContext } from '../../context/context'; +import { LocationCardViews } from '../../context/types'; + +export const DefaultView = () => { + const { location, instance, setView } = useLocationCardContext(); + + const mfaMethod = location.mfa_method ?? MfaMethod.Totp; + + const { mutate: updateRouting } = useMutation({ + mutationFn: api.updateLocationRouting, + meta: { + invalidate: ['locations'], + }, + }); + + return ( +
+ {instance.client_traffic_policy === ClientTrafficPolicy.None && ( + + + { + updateRouting({ + connectionType: location.connection_type, + locationId: location.id, + routeAllTraffic: !location.route_all_traffic, + }); + }} + /> + + )} + {location.location_mfa_mode !== LocationMfaMode.Disabled && mfaMethod && ( + + +
+
+

MFA

+
+

{mfaToText(mfaMethod)}

+ { + setView(LocationCardViews.MfaSettings); + }} + /> +
+
+ )} + + +
+ ); +}; diff --git a/new-ui/src/shared/components/LocationCard/views/DefaultView/style.scss b/new-ui/src/shared/components/LocationCard/views/DefaultView/style.scss new file mode 100644 index 000000000..b32113ff5 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/DefaultView/style.scss @@ -0,0 +1,35 @@ +.location-view-default { + .location-mfa-row { + display: grid; + grid-template-columns: auto minmax(0, 1fr) 24px; + grid-template-rows: 1fr; + align-items: center; + column-gap: var(--spacing-md); + + > .name { + font: var(--t-body-xs-500); + color: var(--fg-white-100); + } + + .mfa-badge { + border-radius: 4px; + box-sizing: border-box; + display: inline-flex; + flex-flow: row nowrap; + align-items: center; + padding: 0 4px; + height: 18px; + width: 32px; + background-color: var(--bg-white-100); + + p { + font: var(--font-family-body); + font-size: 11px; + font-weight: 500; + line-height: 16px; + letter-spacing: 0.11px; + color: var(--fg-action); + } + } + } +} diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx new file mode 100644 index 000000000..9b908c776 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx @@ -0,0 +1,86 @@ +import { useCallback, useEffect, useState } from 'react'; +import { ThemeSpacing } from '../../../../types'; +import { isPresent } from '../../../../utils/isPresent'; +import { Button } from '../../../Button/Button'; +import { ButtonVariant } from '../../../Button/types'; +import { CodeInput } from '../../../CodeInput/CodeInput'; +import { Controls } from '../../../Controls/Controls'; +import { Divider } from '../../../Divider/Divider'; +import { IconKind } from '../../../Icon'; +import { IconButton } from '../../../IconButton/IconButton'; +import { IconButtonVariant } from '../../../IconButton/types'; +import { SizedBox } from '../../../SizedBox/SizedBox'; +import { LocationViewHeader } from '../../components/LocationViewHeader/LocationViewHeader'; +import { useLocationCardContext } from '../../context/context'; +import { LocationCardViews } from '../../context/types'; +import { useMfaConnect } from '../../hooks/useMfaConnect'; + +export const LocationCardMfaEmailView = () => { + const { setView } = useLocationCardContext(); + const { verifyCode, isVerifying, verifyError, isStarting, startError } = + useMfaConnect(1); + + const [emailCode, setEmailCode] = useState(null); + const [error, setError] = useState(null); + + const handleVerify = useCallback(() => { + if (!isPresent(emailCode)) { + setError('Enter code'); + return; + } + if (emailCode.length !== 6) { + setError('6 digits are required'); + return; + } + verifyCode(emailCode); + }, [emailCode, verifyCode]); + + // biome-ignore lint/correctness/useExhaustiveDependencies: side effect of code input + useEffect(() => { + setError(null); + }, [emailCode, setError]); + + // Reflect server-side verify errors into the local error state + useEffect(() => { + if (verifyError) setError(verifyError); + }, [verifyError]); + + return ( +
{ + if (e.key === 'Enter') handleVerify(); + }} + > + + +

Enter the 6-digit code sent to your email address.

+
+ + + + { + setView(LocationCardViews.Default); + }} + /> +
+
+
+
+ ); +}; diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/LocationCardMfaSettings.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/LocationCardMfaSettings.tsx new file mode 100644 index 000000000..c8314ae61 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/LocationCardMfaSettings.tsx @@ -0,0 +1,109 @@ +import './style.scss'; +import { useMutation } from '@tanstack/react-query'; +import { useMemo, useState } from 'react'; +import { api } from '../../../../rust-api/api'; +import { + LocationMfaMode, + MfaMethod, + type MfaMethodValue, +} from '../../../../rust-api/types'; +import { ThemeSpacing } from '../../../../types'; +import { Button } from '../../../Button/Button'; +import { ButtonVariant } from '../../../Button/types'; +import { Checkbox } from '../../../Checkbox/Checkbox'; +import { Controls } from '../../../Controls/Controls'; +import { Divider } from '../../../Divider/Divider'; +import { IconKind } from '../../../Icon'; +import { IconButton } from '../../../IconButton/IconButton'; +import { IconButtonVariant } from '../../../IconButton/types'; +import { SizedBox } from '../../../SizedBox/SizedBox'; +import { LocationViewHeader } from '../../components/LocationViewHeader/LocationViewHeader'; +import { MfaSelector } from '../../components/MfaSelector/MfaSelector'; +import { useLocationCardContext } from '../../context/context'; +import { LocationCardViews } from '../../context/types'; + +export const LocationCardMfaSettings = () => { + const { mutate: setMfaMethod } = useMutation({ + mutationFn: api.setLocationMfaMethod, + meta: { + invalidate: [['locations']], + }, + }); + + const { previousView, setView, location } = useLocationCardContext(); + + const mfaMethod = location.mfa_method ?? MfaMethod.Totp; + + const [selectedPref, setSelectedPref] = useState( + mfaMethod ?? MfaMethod.Totp, + ); + + const MfaFactorsList = useMemo((): MfaMethodValue[] => { + if (location.location_mfa_mode === LocationMfaMode.Internal) { + return [MfaMethod.Totp, MfaMethod.Email, MfaMethod.MobileApprove]; + } + return [MfaMethod.Oidc]; + }, [location.location_mfa_mode]); + + const handleSubmit = () => { + if (selectedPref !== mfaMethod) { + setMfaMethod({ + locationId: location.id, + mfaMethod: selectedPref, + }); + setView(previousView ?? LocationCardViews.Default); + } + }; + + return ( +
+ + +

+ If you're having issues with your current verification method, you can choose + another one or set a new default. +

+
+ +
+ {MfaFactorsList.map((factor) => ( + setSelectedPref(factor)} + /> + ))} +
+ + + { + setView(previousView ?? LocationCardViews.Default); + }} + /> +
+
+
+
+ ); +}; diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/style.scss b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/style.scss new file mode 100644 index 000000000..f1133fe78 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/style.scss @@ -0,0 +1,21 @@ +.location-card-mfa-settings { + > .header { + padding-bottom: var(--spacing-xl); + + :nth-child(1) { + font: var(--t-body-sm-500); + } + + :nth-child(2) { + font: var(--t-body-xs-400); + color: var(--fg-white-70); + } + } + + > .methods { + display: flex; + flex-flow: column; + row-gap: var(--spacing-md); + padding-bottom: var(--spacing-md); + } +} diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx new file mode 100644 index 000000000..fc64eec15 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx @@ -0,0 +1,87 @@ +import { useCallback, useEffect, useState } from 'react'; +import { ThemeSpacing } from '../../../../types'; +import { isPresent } from '../../../../utils/isPresent'; +import { Button } from '../../../Button/Button'; +import { ButtonVariant } from '../../../Button/types'; +import { CodeInput } from '../../../CodeInput/CodeInput'; +import { Controls } from '../../../Controls/Controls'; +import { Divider } from '../../../Divider/Divider'; +import { IconKind } from '../../../Icon'; +import { IconButton } from '../../../IconButton/IconButton'; +import { IconButtonVariant } from '../../../IconButton/types'; +import { SizedBox } from '../../../SizedBox/SizedBox'; +import { LocationViewHeader } from '../../components/LocationViewHeader/LocationViewHeader'; +import { useLocationCardContext } from '../../context/context'; +import { LocationCardViews } from '../../context/types'; +import { useMfaConnect } from '../../hooks/useMfaConnect'; + +export const LocationCardMfaTotpView = () => { + const { setView } = useLocationCardContext(); + const { verifyCode, isVerifying, verifyError, isStarting, startError } = + useMfaConnect(0); + + const [totpCode, setTotpCode] = useState(null); + const [error, setError] = useState(null); + + const handleVerify = useCallback(() => { + if (!isPresent(totpCode)) { + setError('Enter code'); + return; + } + if (totpCode.replaceAll(' ', '').length !== 6) { + setError('6 digits are required'); + return; + } + verifyCode(totpCode); + }, [totpCode, verifyCode]); + + // biome-ignore lint/correctness/useExhaustiveDependencies: side effect of code input + useEffect(() => { + setError(null); + }, [totpCode, setError]); + + // Reflect server-side verify errors into the local error state + useEffect(() => { + if (verifyError) setError(verifyError); + }, [verifyError]); + + return ( +
{ + if (e.key === 'Enter') handleVerify(); + }} + > + + +

Paste the code from your Authenticator Application.

+
+ + + + { + setView(LocationCardViews.Default); + }} + /> +
+
+
+
+ ); +}; diff --git a/new-ui/src/shared/components/MainBackground/MainBackground.tsx b/new-ui/src/shared/components/MainBackground/MainBackground.tsx new file mode 100644 index 000000000..5807ec1eb --- /dev/null +++ b/new-ui/src/shared/components/MainBackground/MainBackground.tsx @@ -0,0 +1,57 @@ +import { useEffect, useRef } from 'react'; + +export const MainBackground = () => { + const canvasRef = useRef(null); + + useEffect(() => { + const canvas = canvasRef.current; + if (!canvas) return; + const ctx = canvas.getContext('2d'); + if (!ctx) return; + + const handleResize = () => { + // Get parent dimensions + // biome-ignore lint/style/noNonNullAssertion: Always have parent + const { clientWidth: w, clientHeight: h } = canvas.parentElement!; + + // Update internal resolution + canvas.width = w; + canvas.height = h; + + // Draw Gradient (134deg) + const angle = (134 * Math.PI) / 180; + const length = Math.sqrt(w ** 2 + h ** 2); + + const x1 = w / 2 - (Math.sin(angle) * length) / 2; + const y1 = h / 2 + (Math.cos(angle) * length) / 2; + const x2 = w / 2 + (Math.sin(angle) * length) / 2; + const y2 = h / 2 - (Math.cos(angle) * length) / 2; + + const gradient = ctx.createLinearGradient(x1, y1, x2, y2); + gradient.addColorStop(0, '#5B83FF'); + gradient.addColorStop(1, '#0036DB'); + + ctx.fillStyle = gradient; + ctx.fillRect(0, 0, w, h); + }; + + // Initial draw + handleResize(); + + window.addEventListener('resize', handleResize); + return () => window.removeEventListener('resize', handleResize); + }, []); + return ( + + ); +}; diff --git a/new-ui/src/shared/components/Menu/Menu.tsx b/new-ui/src/shared/components/Menu/Menu.tsx new file mode 100644 index 000000000..6be5111fa --- /dev/null +++ b/new-ui/src/shared/components/Menu/Menu.tsx @@ -0,0 +1,33 @@ +import { Fragment } from 'react'; +import { MenuItem } from './components/MenuItem'; +import './style.scss'; +import clsx from 'clsx'; +import { isPresent } from '../../utils/isPresent'; +import { MenuHeader } from './components/MenuHeader'; +import { MenuSpacer } from './components/MenuSpacer'; +import type { MenuProps } from './types'; + +export const Menu = ({ + itemGroups, + ref, + className, + onClose, + testId, + ...props +}: MenuProps) => { + return ( +
+ {itemGroups.map((group, groupIndex) => ( + + {isPresent(group.header) && } + {group.items.map((item) => ( + + ))} + {groupIndex !== itemGroups.length - 1 && itemGroups.length !== 1 && ( + + )} + + ))} +
+ ); +}; diff --git a/new-ui/src/shared/components/Menu/components/MenuHeader.tsx b/new-ui/src/shared/components/Menu/components/MenuHeader.tsx new file mode 100644 index 000000000..0e51cd771 --- /dev/null +++ b/new-ui/src/shared/components/Menu/components/MenuHeader.tsx @@ -0,0 +1,29 @@ +import clsx from 'clsx'; +import { isPresent } from '../../../utils/isPresent'; +import { Icon } from '../../Icon'; +import { InteractionBox } from '../../InteractionBox/InteractionBox'; +import type { MenuHeaderProps } from '../types'; + +export const MenuHeader = ({ text, testId, onHelp, onClose }: MenuHeaderProps) => { + return ( +
+

{text}

+ {isPresent(onHelp) && ( + { + onClose?.(); + onHelp(); + }} + > + + + )} +
+ ); +}; diff --git a/new-ui/src/shared/components/Menu/components/MenuItem.tsx b/new-ui/src/shared/components/Menu/components/MenuItem.tsx new file mode 100644 index 000000000..b6bafc867 --- /dev/null +++ b/new-ui/src/shared/components/Menu/components/MenuItem.tsx @@ -0,0 +1,48 @@ +import clsx from 'clsx'; +import { isPresent } from '../../../utils/isPresent'; +import { Icon } from '../../Icon'; +import type { MenuItemProps } from '../types'; + +export const MenuItem = ({ + disabled, + text, + icon, + items, + testId, + variant, + onClick, + onClose, +}: MenuItemProps) => { + const hasItems = isPresent(items) && items.length > 0; + const hasIcon = isPresent(icon); + + return ( +
{ + if (!disabled) { + onClick?.(); + if (!hasItems) { + onClose?.(); + } + } + }} + > + {isPresent(icon) && } +

{text}

+ {hasItems && ( +
+ +
+ )} +
+ ); +}; diff --git a/new-ui/src/shared/components/Menu/components/MenuSpacer.tsx b/new-ui/src/shared/components/Menu/components/MenuSpacer.tsx new file mode 100644 index 000000000..4510f86e7 --- /dev/null +++ b/new-ui/src/shared/components/Menu/components/MenuSpacer.tsx @@ -0,0 +1,7 @@ +export const MenuSpacer = () => { + return ( +
+
+
+ ); +}; diff --git a/new-ui/src/shared/components/Menu/style.scss b/new-ui/src/shared/components/Menu/style.scss new file mode 100644 index 000000000..78f595a47 --- /dev/null +++ b/new-ui/src/shared/components/Menu/style.scss @@ -0,0 +1,119 @@ +/* stylelint-disable no-descending-specificity */ +.menu { + display: flex; + flex-flow: column; + box-sizing: border-box; + padding: var(--spacing-sm); + border-radius: var(--radius-lg); + border: 1px solid var(--border-disabled); + background-color: var(--bg-default); + box-shadow: 0 4px 12px 0 rgb(0 0 0 / 7%); + overflow: hidden auto; + z-index: 5; + + .menu-spacer { + user-select: none; + padding: var(--spacing-sm) 0; + + & > .line { + display: block; + content: ' '; + background-color: var(--bg-white-20); + height: 1px; + width: 100%; + } + } + + .menu-header { + display: flex; + flex-flow: row nowrap; + column-gap: var(--spacing-md); + justify-content: space-between; + flex: none; + + p { + font: var(--t-menu-title); + color: var(--fg-muted); + padding-left: var(--spacing-sm); + } + + .interaction-box { + button { + height: 26px; + width: 26px; + } + + &:hover { + svg { + path { + fill: var(--fg-action); + } + } + } + } + } + + .menu-item { + --bg-color: var(--bg-default); + --color: var(--fg-default); + --icon-fill: var(--fg-muted); + + display: flex; + flex-flow: row nowrap; + flex: none; + align-items: center; + border-radius: var(--radius-md); + padding: 0 var(--spacing-sm); + column-gap: var(--spacing-md); + background-color: var(--bg-color); + cursor: pointer; + height: 36px; + color: var(--color); + position: relative; + min-width: 115px; + + @include animate(background-color); + + &.disabled { + cursor: not-allowed; + } + + &.nested { + // account for positioned icon on the right side + padding: 0 calc(var(--spacing-sm) + var(--spacing-md) + 20px) 0 var(--spacing-sm); + } + + &.variant-danger { + --color: var(--fg-critical); + --icon-fill: var(--fg-critical); + } + + &:not(.disabled) { + &:hover { + --bg-color: var(--bg-muted); + } + } + + p { + font: var(--t-menu-text); + color: inherit; + } + + & > .icon svg path { + fill: var(--icon-fill); + } + + & > .suffix { + position: absolute; + height: 20px; + width: 20px; + top: 50%; + right: var(--spacing-sm); + transform: translateY(-50%); + + svg path { + fill: var(--fg-muted); + } + } + } +} diff --git a/new-ui/src/shared/components/Menu/types.ts b/new-ui/src/shared/components/Menu/types.ts new file mode 100644 index 000000000..8537a9326 --- /dev/null +++ b/new-ui/src/shared/components/Menu/types.ts @@ -0,0 +1,33 @@ +import type { HTMLAttributes, Ref } from 'react'; +import type { IconKindValue } from '../Icon/icon-types'; + +export interface MenuProps extends HTMLAttributes { + itemGroups: MenuItemsGroup[]; + ref?: Ref; + testId?: string; + onClose?: () => void; +} + +export interface MenuItemsGroup { + header?: MenuHeaderProps; + items: MenuItemProps[]; +} + +export interface MenuItemProps { + text: string; + variant?: 'default' | 'danger'; + disabled?: boolean; + icon?: IconKindValue; + items?: MenuItemProps[]; + testId?: string; + onClick?: () => void; + onClose?: () => void; +} + +export interface MenuHeaderProps { + text: string; + tooltip?: string; + testId?: string; + onClose?: () => void; + onHelp?: () => void; +} diff --git a/new-ui/src/shared/components/NotFoundRoute/NotFoundRoute.tsx b/new-ui/src/shared/components/NotFoundRoute/NotFoundRoute.tsx new file mode 100644 index 000000000..9705caeb6 --- /dev/null +++ b/new-ui/src/shared/components/NotFoundRoute/NotFoundRoute.tsx @@ -0,0 +1,19 @@ +import { useRouter } from '@tanstack/react-router'; + +export const NotFoundRoute = () => { + const router = useRouter(); + const availableRoutes = Object.keys(router.routesById); + + return ( +
+

Route not found

+

Detected: {window.location.href}

+

Available routes:

+
    + {availableRoutes.map((route) => ( +
  • {route}
  • + ))} +
+
+ ); +}; diff --git a/new-ui/src/shared/components/Select/Select.tsx b/new-ui/src/shared/components/Select/Select.tsx new file mode 100644 index 000000000..040debffe --- /dev/null +++ b/new-ui/src/shared/components/Select/Select.tsx @@ -0,0 +1,222 @@ +import './style.scss'; +import { + autoUpdate, + FloatingPortal, + flip, + size as floatingSize, + offset, + shift, + useClick, + useDismiss, + useFloating, + useInteractions, +} from '@floating-ui/react'; +import clsx from 'clsx'; +import { Fragment, type JSX, useCallback, useId, useMemo, useState } from 'react'; +import { Direction, ThemeSpacing, ThemeVariable } from '../../types'; +import { isPresent } from '../../utils/isPresent'; +import { Divider } from '../Divider/Divider'; +import { FieldBox } from '../FieldBox/FieldBox'; +import { FieldError } from '../FieldError/FieldError'; +import { FieldLabel } from '../FieldLabel/FieldLabel'; +import { FloatingMenu } from '../FloatingMenu/FloatingMenu'; +import { Icon, IconKind } from '../Icon'; +import type { SelectOption, SelectOptionGroup, SelectProps } from './types'; + +export function Select(props: SelectProps): JSX.Element { + const labelId = useId(); + + const { + label, + options, + groups, + className, + placeholder, + testId, + error, + size = 'default', + disabled = false, + required = false, + } = props; + + const [floatingOpen, setFloatingOpen] = useState(false); + + const { refs, context, floatingStyles } = useFloating({ + placement: 'bottom-start', + open: floatingOpen, + onOpenChange: setFloatingOpen, + middleware: [ + offset(4), + flip(), + shift(), + floatingSize({ + apply({ rects, elements, availableHeight }) { + const refWidth = `${rects.reference.width}px`; + elements.floating.style.minWidth = refWidth; + elements.floating.style.maxHeight = `${availableHeight - 10}px`; + }, + }), + ], + whileElementsMounted: autoUpdate, + }); + + const selectedLabel = useMemo(() => props.value?.label ?? null, [props.value]); + + const renderedGroups: readonly SelectOptionGroup[] = groups ?? []; + const renderedOptions: readonly SelectOption[] = options ?? []; + + // biome-ignore lint/correctness/useExhaustiveDependencies: onChange + const handleChange = useCallback( + (option: SelectOption, isSelected: boolean) => { + if (isSelected) return; + props.onChange(option); + setFloatingOpen(false); + }, + [props.onChange, setFloatingOpen], + ); + + const click = useClick(context, { + toggle: true, + enabled: !disabled, + }); + + const dismiss = useDismiss(context, { + ancestorScroll: true, + escapeKey: true, + outsidePress: true, + }); + + const { getFloatingProps, getReferenceProps } = useInteractions([click, dismiss]); + + return ( + <> +
+
+ {isPresent(label) && ( + + )} + + } + forceFocusState={floatingOpen} + aria-labelledby={labelId} + {...getReferenceProps()} + > +
+ {isPresent(placeholder) && !isPresent(selectedLabel) && ( + {placeholder} + )} + {isPresent(selectedLabel) && {selectedLabel}} +
+
+ +
+
+ {floatingOpen && ( + + + {renderedOptions.map((option, optionIndex) => { + const isSelected = props.value?.key === option.key; + const isLast = renderedOptions.length - 1 === optionIndex; + return ( + + ); + })} + {renderedGroups + .filter((group) => group.options.length > 0) + .map((group, groupIndex, activeGroups) => { + const isLast = activeGroups.length - 1 === groupIndex; + const groupKey = group.key ?? `${group.label}-${groupIndex}`; + + return ( + +
+
+

{group.label}

+
+
+ {group.options.map((option, optionIndex) => { + const isSelected = props.value?.key === option.key; + const isLast = group.options.length - 1 === optionIndex; + return ( + + ); + })} + {!isLast && } +
+ ); + })} +
+
+ )} + + ); +} + +type SelectOptionItemProps = { + isLast: boolean; + isSelected: boolean; + onSelect: (option: SelectOption, isSelected: boolean) => void; + option: SelectOption; +}; + +function SelectOptionItem({ + isLast, + isSelected, + onSelect, + option, +}: SelectOptionItemProps): JSX.Element { + return ( +
{ + onSelect(option, isSelected); + }} + role="listitem" + > + {option.label} + {isSelected && ( + + )} +
+ ); +} diff --git a/new-ui/src/shared/components/Select/style.scss b/new-ui/src/shared/components/Select/style.scss new file mode 100644 index 000000000..b7291ba6c --- /dev/null +++ b/new-ui/src/shared/components/Select/style.scss @@ -0,0 +1,109 @@ +.select { + & > .inner { + box-sizing: border-box; + + .field-label { + cursor: pointer; + user-select: none; + } + + .field-box { + .box-track { + min-width: 0; + + .placeholder, + .value { + display: block; + user-select: none; + } + } + + &.size-default { + .box-track { + .value, + .placeholder { + font: var(--t-input-text-primary); + } + } + } + + &.size-lg { + .box-track { + .value, + .placeholder { + font: var(--t-input-text-big); + } + } + } + } + + &.disabled { + user-select: none; + + & > .field-label { + cursor: not-allowed; + } + } + } +} + +.select-floating { + z-index: 5; + position: absolute; + + .section-title { + box-sizing: border-box; + padding-left: var(--spacing-sm); + min-height: 24px; + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + margin-bottom: 4px; + + p { + font: var(--t-menu-title); + color: var(--fg-white-60); + } + } + + .select-option { + --bg-color: transparent; + + display: grid; + grid-template-columns: minmax(0, 1fr) 20px; + grid-template-rows: 1fr; + box-sizing: border-box; + padding: 0 var(--spacing-sm); + user-select: none; + align-items: center; + justify-content: start; + background-color: var(--bg-color); + width: 100%; + min-height: 36px; + border-radius: 8px; + cursor: pointer; + column-gap: var(--spacing-md); + + @include animate(background-color); + + &:not(.last) { + margin-bottom: var(--spacing-xs); + } + + &:hover { + --bg-color: var(--bg-white-10); + } + + &.selected { + --bg-color: var(--bg-white-5); + } + + span { + font: var(--t-menu-text); + color: var(--fg-white-100); + + @include animate(color); + } + } +} diff --git a/new-ui/src/shared/components/Select/types.ts b/new-ui/src/shared/components/Select/types.ts new file mode 100644 index 000000000..31fa1dba3 --- /dev/null +++ b/new-ui/src/shared/components/Select/types.ts @@ -0,0 +1,48 @@ +import type { FieldBoxProps } from '../FieldBox/types'; + +export type SelectOption = { + key: string | number; + label: string; + value: T; + meta?: unknown; +}; + +export type SelectOptionGroup = { + key?: string | number; + label: string; + options: readonly SelectOption[]; +}; + +export type SelectSingleValue = SelectOption; + +type SelectOptionsSourceProps = + | { + options: readonly SelectOption[]; + groups?: never; + } + | { + options?: never; + groups: readonly SelectOptionGroup[]; + } + | { + options: readonly SelectOption[]; + groups: readonly SelectOptionGroup[]; + }; + +type BaseProps = { + testId?: string; + placeholder?: string; + disabled?: boolean; + className?: string; + label?: string; + required?: boolean; + error?: string; +} & Pick & + SelectOptionsSourceProps; + +export type SelectSingleProps = BaseProps & { + value: SelectSingleValue; + onChange: (v: SelectSingleValue) => void; +}; + +export type SelectProps = SelectSingleProps; diff --git a/new-ui/src/shared/components/SizedBox/SizedBox.tsx b/new-ui/src/shared/components/SizedBox/SizedBox.tsx new file mode 100644 index 000000000..544312fd4 --- /dev/null +++ b/new-ui/src/shared/components/SizedBox/SizedBox.tsx @@ -0,0 +1,19 @@ +import './style.scss'; + +type Props = { + height: string | number; + width?: string | number; +}; + +/**Spawns a block with a strict size, meant to fill spaces that are not regular like layouts that can't utilize "gap" css property due to irregular gaps in across same axis*/ +export const SizedBox = ({ width, height }: Props) => { + return ( +
+ ); +}; diff --git a/new-ui/src/shared/components/SizedBox/style.scss b/new-ui/src/shared/components/SizedBox/style.scss new file mode 100644 index 000000000..7897d8cce --- /dev/null +++ b/new-ui/src/shared/components/SizedBox/style.scss @@ -0,0 +1,7 @@ +.sized-box { + display: block; + user-select: none; + pointer-events: none; + content: ''; + flex: 0 0 auto; +} diff --git a/new-ui/src/shared/components/Toggle/Toggle.tsx b/new-ui/src/shared/components/Toggle/Toggle.tsx new file mode 100644 index 000000000..a0713353a --- /dev/null +++ b/new-ui/src/shared/components/Toggle/Toggle.tsx @@ -0,0 +1,35 @@ +import './style.scss'; +import clsx from 'clsx'; +import { isPresent } from '../../utils/isPresent'; +import type { ToggleProps } from './types'; + +export const Toggle = ({ + active, + testId, + label, + disabled = false, + onClick, +}: ToggleProps) => { + return ( +
{ + if (!disabled) { + onClick?.(e); + } + }} + > +
+
+
+ {isPresent(label) &&

{label}

} +
+ ); +}; diff --git a/new-ui/src/shared/components/Toggle/style.scss b/new-ui/src/shared/components/Toggle/style.scss new file mode 100644 index 000000000..f8eb8a32a --- /dev/null +++ b/new-ui/src/shared/components/Toggle/style.scss @@ -0,0 +1,72 @@ +.toggle { + --circle-x: 3px; + --circle-shadow: 0 1px 1px 0 rgb(0 0 0 0); + --border: var(--bg); + --bg: var(--bg-white-30); + --circle: var(--fg-white-100); + + cursor: pointer; + display: inline-flex; + flex-flow: row nowrap; + align-items: flex-start; + justify-content: flex-start; + column-gap: var(--spacing-md); + + .inner { + user-select: none; + display: flex; + flex-flow: row; + align-items: center; + justify-content: flex-start; + width: 36px; + height: 20px; + box-sizing: border-box; + border-radius: var(--radius-full); + background-color: var(--bg); + border: var(--border-1) solid var(--border); + min-width: 36px; + flex-shrink: 0; + + @include animate(border-color, background-color); + + .circle { + display: inline-block; + width: 14px; + height: 14px; + background-color: var(--circle); + margin-left: var(--circle-x); + border-radius: var(--radius-full); + box-shadow: var(--circle-shadow); + + @include animate(background-color, margin-left, box-shadow); + } + } + + & > p { + user-select: none; + font: var(--t-body-sm-400); + color: var(--fg-white-100); + + @include animate(color); + } + + &.disabled { + --circle: var(--border-disabled); + --circle-x: 3px; + --border: var(--circle); + --bg: var(--bg-white-5); + + cursor: not-allowed; + + p { + color: var(--fg-white-60); + } + } + + &:not(.disabled).active { + --border: var(--bg); + --bg: var(--bg-white-90); + --circle: var(--c-saturated-additional-blue-neutral); + --circle-x: 16px; + } +} diff --git a/new-ui/src/shared/components/Toggle/types.ts b/new-ui/src/shared/components/Toggle/types.ts new file mode 100644 index 000000000..5cf0c9fe1 --- /dev/null +++ b/new-ui/src/shared/components/Toggle/types.ts @@ -0,0 +1,9 @@ +import type { MouseEventHandler } from 'react'; + +export interface ToggleProps { + active: boolean; + disabled?: boolean; + label?: string; + onClick?: MouseEventHandler; + testId?: string; +} diff --git a/new-ui/src/shared/components/TransferText/TransferText.tsx b/new-ui/src/shared/components/TransferText/TransferText.tsx new file mode 100644 index 000000000..3cf88fd92 --- /dev/null +++ b/new-ui/src/shared/components/TransferText/TransferText.tsx @@ -0,0 +1,17 @@ +import byteSize from 'byte-size'; +import clsx from 'clsx'; +import './style.scss'; + +type Props = { + data: number; +}; + +export const TransferText = ({ data }: Props) => { + const size = byteSize(data, { precision: 1 }); + + return ( +
+ {`${size.value} ${size.unit}`} +
+ ); +}; diff --git a/new-ui/src/shared/components/TransferText/style.scss b/new-ui/src/shared/components/TransferText/style.scss new file mode 100644 index 000000000..46552fa84 --- /dev/null +++ b/new-ui/src/shared/components/TransferText/style.scss @@ -0,0 +1,13 @@ +.transfer-text { + --color: var(--fg-white-100); + + display: flex; + flex-flow: row nowrap; + align-items: center; + column-gap: var(--spacing-xs); + + span { + font: var(--t-body-xxs-500); + color: var(--color); + } +} diff --git a/new-ui/src/shared/components/WindowHeader/WindowHeader.tsx b/new-ui/src/shared/components/WindowHeader/WindowHeader.tsx new file mode 100644 index 000000000..ecac32c8d --- /dev/null +++ b/new-ui/src/shared/components/WindowHeader/WindowHeader.tsx @@ -0,0 +1,50 @@ +import clsx from 'clsx'; +import './style.scss'; +import { ConnectionWatcher } from './components/ConnectionWatcher/ConnectionsWatcher'; + +interface Props { + variant: 'compact' | 'desktop'; +} + +export const WindowHeader = ({ variant }: Props) => { + return ( +
+ +
+

Defguard VPN Client

+ +
+
+ ); +}; + +const LogoIcon = () => { + return ( + + + + + + + + + + + ); +}; diff --git a/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx b/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx new file mode 100644 index 000000000..5f3308bc8 --- /dev/null +++ b/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx @@ -0,0 +1,138 @@ +import './style.scss'; +import { + autoUpdate, + FloatingPortal, + size as floatingSize, + offset, + shift, + useClick, + useDismiss, + useFloating, + useInteractions, +} from '@floating-ui/react'; +import { useMutation, useQuery } from '@tanstack/react-query'; +import clsx from 'clsx'; +import { useEffect, useState } from 'react'; +import { api } from '../../../../rust-api/api'; +import { ThemeSpacing, ThemeVariable } from '../../../../types'; +import { isPresent } from '../../../../utils/isPresent'; +import { Divider } from '../../../Divider/Divider'; +import { FloatingMenu } from '../../../FloatingMenu/FloatingMenu'; +import { Icon } from '../../../Icon'; + +export const ConnectionWatcher = () => { + const { mutate: disconnect } = useMutation({ + mutationFn: api.disconnectLocations, + }); + + const { data: connections } = useQuery({ + queryKey: ['alive-connection'], + queryFn: api.getAllActiveConnections, + refetchInterval: 5_000, + }); + + const connected = (connections?.length ?? 0) > 0; + + const [floatingOpen, setFloatingOpen] = useState(false); + + useEffect(() => { + if (!connected) { + setFloatingOpen(false); + } + }, [connected]); + + const { refs, context, floatingStyles } = useFloating({ + placement: 'bottom-start', + open: floatingOpen, + onOpenChange: setFloatingOpen, + middleware: [ + offset(4), + shift(), + floatingSize({ + apply({ rects, elements }) { + elements.floating.style.minWidth = `${rects.reference.width}px`; + }, + }), + ], + whileElementsMounted: autoUpdate, + }); + + const click = useClick(context, { + toggle: true, + enabled: connected, + }); + + const dismiss = useDismiss(context, { + ancestorScroll: true, + outsidePress: true, + }); + + const { getFloatingProps, getReferenceProps } = useInteractions([click, dismiss]); + + return ( + <> +
+ {!connected &&

Not connected

} + {connected && isPresent(connections) && ( +
+ +

{`Connected (${connections.length})`}

+ +
+ )} +
+ {floatingOpen && ( + + +

Connected locations

+ {connections?.map((con) => ( +
+ + + +

{con.name}

+
+ ))} + + +
+
+ )} + + ); +}; diff --git a/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/style.scss b/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/style.scss new file mode 100644 index 000000000..e40bfe4c2 --- /dev/null +++ b/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/style.scss @@ -0,0 +1,93 @@ +.connection-watcher { + display: block; + box-sizing: border-box; + border-radius: 8px; + user-select: none; + min-height: 20px; + + &:not(.connected) { + padding: 0 var(--spacing-sm); + display: inline-flex; + flex-flow: row nowrap; + align-items: center; + justify-content: center; + border: 1px solid var(--border-default); + background: transparent; + flex-grow: 0; + min-width: 0; + + .no-connection-label { + font: var(--t-body-xxs-500); + color: var(--fg-white-60); + } + } + + &.connected { + display: flex; + flex-flow: row nowrap; + align-items: center; + cursor: pointer; + padding: 0 var(--spacing-xs); + background-color: var(--bg-success); + + > .connected-row { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-xs); + + p { + font: var(--t-body-xxs-500); + color: var(--fg-action); + } + } + } +} + +.connection-watcher-floating { + display: flex; + flex-flow: column; + + .label { + box-sizing: border-box; + padding-left: var(--spacing-sm); + font: var(--t-menu-title); + color: var(--fg-white-60); + min-height: 24px; + } + + .connection { + display: flex; + flex-flow: row; + align-items: center; + justify-content: flex-start; + box-sizing: border-box; + padding: 0 var(--spacing-sm); + column-gap: var(--spacing-md); + min-height: 36px; + + svg circle { + fill: var(--bg-success); + } + } + + .disconnect { + box-sizing: border-box; + background: transparent; + border: 0; + padding: 0 var(--spacing-sm); + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-sm); + min-height: 36px; + cursor: pointer; + + p { + font: var(--t-menu-text); + color: var(--fg-white-100); + } + } +} diff --git a/new-ui/src/shared/components/WindowHeader/style.scss b/new-ui/src/shared/components/WindowHeader/style.scss new file mode 100644 index 000000000..62603930d --- /dev/null +++ b/new-ui/src/shared/components/WindowHeader/style.scss @@ -0,0 +1,25 @@ +#window-header { + &.variant { + &-compact { + display: flex; + flex-flow: row; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-lg); + padding-bottom: var(--spacing-lg); + } + } + + > .info { + display: flex; + flex-flow: column; + align-items: flex-start; + row-gap: var(--spacing-xs); + + > .label { + font: var(--t-body-sm-500); + color: var(--fg-white-100); + text-align: left; + } + } +} diff --git a/new-ui/src/shared/consts.ts b/new-ui/src/shared/consts.ts new file mode 100644 index 000000000..0be8e07ae --- /dev/null +++ b/new-ui/src/shared/consts.ts @@ -0,0 +1,5 @@ +export const motionTransitionStandard = { + type: 'tween', + ease: 'easeOut', + duration: 0.16, +} as const; diff --git a/new-ui/src/shared/form-context.tsx b/new-ui/src/shared/form-context.tsx new file mode 100644 index 000000000..a6705eabe --- /dev/null +++ b/new-ui/src/shared/form-context.tsx @@ -0,0 +1,4 @@ +import { createFormHookContexts } from '@tanstack/react-form'; + +export const { fieldContext, formContext, useFieldContext, useFormContext } = + createFormHookContexts(); diff --git a/new-ui/src/shared/form.tsx b/new-ui/src/shared/form.tsx new file mode 100644 index 000000000..0507726fb --- /dev/null +++ b/new-ui/src/shared/form.tsx @@ -0,0 +1,11 @@ +import { createFormHook } from '@tanstack/react-form'; +import { fieldContext, formContext } from './form-context'; + +export { useFieldContext, useFormContext } from './form-context'; + +export const { useAppForm, withFieldGroup, withForm } = createFormHook({ + fieldContext, + formContext, + fieldComponents: {}, + formComponents: {}, +}); diff --git a/new-ui/src/shared/providers/TauriEventProvider.tsx b/new-ui/src/shared/providers/TauriEventProvider.tsx new file mode 100644 index 000000000..94aabbc2e --- /dev/null +++ b/new-ui/src/shared/providers/TauriEventProvider.tsx @@ -0,0 +1,82 @@ +import { useQueryClient } from '@tanstack/react-query'; +import { listen } from '@tauri-apps/api/event'; +import { Fragment, type PropsWithChildren, useEffect } from 'react'; + +import { + type AddInstanceEventPayload, + type DeadConnectionDroppedPayload, + type DeadConnectionReconnectedPayload, + TauriEvent, +} from '../rust-api/types'; + +export const TauriEventProvider = ({ children }: PropsWithChildren) => { + const queryClient = useQueryClient(); + + useEffect(() => { + const unlisteners = Promise.all([ + listen(TauriEvent.ConnectionChanged, () => { + void queryClient.invalidateQueries({ queryKey: ['alive-connection'] }); + void queryClient.invalidateQueries({ queryKey: ['active-connection'] }); + void queryClient.invalidateQueries({ queryKey: ['locations'] }); + void queryClient.invalidateQueries({ queryKey: ['instances'] }); + void queryClient.invalidateQueries({ queryKey: ['location-details'] }); + void queryClient.invalidateQueries({ queryKey: ['last-connection'] }); + }), + + listen(TauriEvent.InstanceUpdate, () => { + void queryClient.invalidateQueries({ queryKey: ['instances'] }); + void queryClient.invalidateQueries({ queryKey: ['locations'] }); + }), + + listen(TauriEvent.LocationUpdate, () => { + void queryClient.invalidateQueries({ queryKey: ['locations'] }); + void queryClient.invalidateQueries({ queryKey: ['location-details'] }); + }), + + listen(TauriEvent.AppVersionFetch, () => { + void queryClient.invalidateQueries({ queryKey: ['latest-app-version'] }); + }), + + listen(TauriEvent.ConfigChanged, () => { + void queryClient.invalidateQueries({ queryKey: ['settings'] }); + void queryClient.invalidateQueries({ queryKey: ['provisioning-config'] }); + void queryClient.invalidateQueries({ queryKey: ['instances'] }); + }), + + listen(TauriEvent.DeadConnectionDropped, () => { + void queryClient.invalidateQueries({ queryKey: ['alive-connection'] }); + void queryClient.invalidateQueries({ queryKey: ['active-connection'] }); + void queryClient.invalidateQueries({ queryKey: ['locations'] }); + void queryClient.invalidateQueries({ queryKey: ['instances'] }); + }), + + listen( + TauriEvent.DeadConnectionReconnected, + () => { + void queryClient.invalidateQueries({ queryKey: ['alive-connection'] }); + void queryClient.invalidateQueries({ queryKey: ['active-connection'] }); + void queryClient.invalidateQueries({ queryKey: ['locations'] }); + void queryClient.invalidateQueries({ queryKey: ['instances'] }); + }, + ), + + listen(TauriEvent.ApplicationConfigChanged, () => { + void queryClient.invalidateQueries({ queryKey: ['settings'] }); + }), + + listen(TauriEvent.AddInstance, () => { + void queryClient.invalidateQueries({ queryKey: ['instances'] }); + }), + + listen(TauriEvent.UuidMismatch, () => { + void queryClient.invalidateQueries({ queryKey: ['instances'] }); + }), + ]); + + return () => { + void unlisteners.then((fns) => fns.forEach((fn) => void fn())); + }; + }, [queryClient]); + + return {children}; +}; diff --git a/new-ui/src/shared/rust-api/api.ts b/new-ui/src/shared/rust-api/api.ts new file mode 100644 index 000000000..4628ab90c --- /dev/null +++ b/new-ui/src/shared/rust-api/api.ts @@ -0,0 +1,171 @@ +import { getVersion } from '@tauri-apps/api/app'; + +import { invoke } from '@tauri-apps/api/core'; + +import type { + ActiveConnectionSummary, + AppConfig, + AppConfigPatch, + Connection, + ConnectionArgs, + EdgeRequestHeaders, + InstanceInfo, + LocationDetails, + LocationDetailsArgs, + LocationInfo, + LocationStats, + NewAppVersionInfo, + ProvisioningConfig, + RoutingArgs, + SaveConfigArgs, + SaveDeviceConfigResponse, + SetLocationMfaMethodArgs, + StatsArgs, + TunnelInfo, + TunnelRequest, + UpdateInstanceArgs, +} from './types'; +import { TauriCommand } from './types'; + +const getInstances = (): Promise => invoke(TauriCommand.AllInstances); + +const deleteInstance = (instanceId: number): Promise => + invoke(TauriCommand.DeleteInstance, { instanceId }); + +const updateInstance = (args: UpdateInstanceArgs): Promise => + invoke(TauriCommand.UpdateInstance, args); + +const saveDeviceConfig = (args: SaveConfigArgs): Promise => + invoke(TauriCommand.SaveDeviceConfig, args); + +const getLocations = (instanceId: number): Promise => + invoke(TauriCommand.AllLocations, { instanceId }); + +const getLocationDetails = (args: LocationDetailsArgs): Promise => + invoke(TauriCommand.LocationInterfaceDetails, args); + +const updateLocationRouting = (args: RoutingArgs): Promise => + invoke(TauriCommand.UpdateLocationRouting, args); + +const setLocationMfaMethod = (args: SetLocationMfaMethodArgs): Promise => + invoke(TauriCommand.SetLocationMfaMethod, args); + +const connect = (args: ConnectionArgs): Promise => + invoke(TauriCommand.Connect, args); + +const disconnect = (args: ConnectionArgs): Promise => + invoke(TauriCommand.Disconnect, args); + +const getLastConnection = (args: ConnectionArgs): Promise => + invoke(TauriCommand.LastConnection, args); + +const getConnectionHistory = (args: ConnectionArgs): Promise => + invoke(TauriCommand.AllConnections, args); + +const getActiveConnection = (args: ConnectionArgs): Promise => + invoke(TauriCommand.ActiveConnection, args); + +const getLocationStats = (args: StatsArgs): Promise => + invoke(TauriCommand.LocationStats, args); + +const getTunnels = (): Promise => invoke(TauriCommand.AllTunnels); + +const getTunnelDetails = (tunnelId: number): Promise => + invoke(TauriCommand.TunnelDetails, { tunnelId }); + +const parseTunnelConfig = ( + filename: string, + config: string, +): Promise> => + invoke(TauriCommand.ParseTunnelConfig, { filename, config }); + +const saveTunnel = (tunnel: TunnelRequest): Promise => + invoke(TauriCommand.SaveTunnel, { tunnel }); + +const updateTunnel = (tunnel: TunnelRequest): Promise => + invoke(TauriCommand.UpdateTunnel, { tunnel }); + +const deleteTunnel = (tunnelId: number): Promise => + invoke(TauriCommand.DeleteTunnel, { tunnelId }); + +const getAppConfig = (): Promise => invoke(TauriCommand.GetAppConfig); + +const setAppConfig = ( + configPatch: AppConfigPatch, + emitEvent: boolean, +): Promise => invoke(TauriCommand.SetAppConfig, { configPatch, emitEvent }); + +const getProvisioningConfig = (): Promise => + invoke(TauriCommand.GetProvisioningConfig); + +const getPlatformHeader = (): Promise => invoke(TauriCommand.GetPlatformHeader); + +const getLatestAppVersion = (): Promise => + invoke(TauriCommand.GetLatestAppVersion); + +const openLink = (link: string): Promise => invoke(TauriCommand.OpenLink, { link }); + +const startGlobalLogWatcher = (): Promise => + invoke(TauriCommand.StartGlobalLogWatcher); + +const stopGlobalLogWatcher = (): Promise => + invoke(TauriCommand.StopGlobalLogWatcher); + +const getAllActiveConnections = (): Promise => + invoke(TauriCommand.AllActiveConnections); + +const disconnectLocations = (locationIds: number[]): Promise => + invoke(TauriCommand.DisconnectLocations, { locationIds }); + +const getEdgeRequestHeaders = async (): Promise => { + const platform = await getPlatformHeader(); + const version = await getVersion().catch(() => 'unknown'); + return { + 'defguard-client-platform': platform, + 'defguard-client-version': version, + }; +}; + +const swapToOldUi = async () => invoke(TauriCommand.SwapToOldUi); + +export const api = { + getEdgeRequestHeaders, + // Instances + getInstances, + deleteInstance, + updateInstance, + saveDeviceConfig, + // Locations + getLocations, + getLocationDetails, + updateLocationRouting, + setLocationMfaMethod, + // Connections + connect, + disconnect, + getLastConnection, + getConnectionHistory, + getActiveConnection, + getLocationStats, + // Tunnels + getTunnels, + getTunnelDetails, + parseTunnelConfig, + saveTunnel, + updateTunnel, + deleteTunnel, + // App config + getAppConfig, + setAppConfig, + // Misc + getProvisioningConfig, + getPlatformHeader, + getLatestAppVersion, + openLink, + startGlobalLogWatcher, + stopGlobalLogWatcher, + getAllActiveConnections, + disconnectLocations, + // Window + swapToOldUi, +}; diff --git a/new-ui/src/shared/rust-api/query.ts b/new-ui/src/shared/rust-api/query.ts new file mode 100644 index 000000000..d42ef1a61 --- /dev/null +++ b/new-ui/src/shared/rust-api/query.ts @@ -0,0 +1,88 @@ +import { queryOptions } from '@tanstack/react-query'; + +import { api } from './api'; +import type { ConnectionArgs, LocationDetailsArgs, StatsArgs } from './types'; + +export const getAllActiveConnectionQueryOptions = queryOptions({ + queryKey: ['alive-connections'] as const, + queryFn: api.getAllActiveConnections, + refetchInterval: 5_000, +}); + +export const getInstancesQueryOptions = queryOptions({ + queryKey: ['instances'] as const, + queryFn: () => api.getInstances(), + refetchInterval: 30_000, +}); + +export const getLocationsQueryOptions = (instanceId: number) => + queryOptions({ + queryKey: ['locations', instanceId] as const, + queryFn: () => api.getLocations(instanceId), + }); + +export const getLocationDetailsQueryOptions = (args: LocationDetailsArgs) => + queryOptions({ + queryKey: ['location-details', args.locationId, args.connectionType] as const, + queryFn: () => api.getLocationDetails(args), + }); + +export const getLastConnectionQueryOptions = (args: ConnectionArgs) => + queryOptions({ + queryKey: ['last-connection', args.locationId, args.connectionType] as const, + queryFn: () => api.getLastConnection(args), + }); + +export const getConnectionHistoryQueryOptions = (args: ConnectionArgs) => + queryOptions({ + queryKey: ['connection-history', args.locationId, args.connectionType] as const, + queryFn: () => api.getConnectionHistory(args), + }); + +export const getActiveConnectionQueryOptions = (args: ConnectionArgs) => + queryOptions({ + queryKey: ['active-connection', args.locationId, args.connectionType] as const, + queryFn: () => api.getActiveConnection(args), + }); + +export const getLocationStatsQueryOptions = (args: StatsArgs) => + queryOptions({ + queryKey: [ + 'location-stats', + args.locationId, + args.connectionType, + args.from, + ] as const, + queryFn: () => api.getLocationStats(args), + }); + +export const getTunnelsQueryOptions = queryOptions({ + queryKey: ['tunnels'] as const, + queryFn: () => api.getTunnels(), +}); + +export const getTunnelDetailsQueryOptions = (tunnelId: number) => + queryOptions({ + queryKey: ['tunnel-details', tunnelId] as const, + queryFn: () => api.getTunnelDetails(tunnelId), + }); + +export const getAppConfigQueryOptions = queryOptions({ + queryKey: ['settings'] as const, + queryFn: () => api.getAppConfig(), +}); + +export const getLatestAppVersionQueryOptions = queryOptions({ + queryKey: ['latest-app-version'] as const, + queryFn: () => api.getLatestAppVersion(), +}); + +export const getProvisioningConfigQueryOptions = queryOptions({ + queryKey: ['provisioning-config'] as const, + queryFn: () => api.getProvisioningConfig(), +}); + +export const getPlatformHeaderQueryOptions = queryOptions({ + queryKey: ['platform-header'] as const, + queryFn: () => api.getPlatformHeader(), +}); diff --git a/new-ui/src/shared/rust-api/types.ts b/new-ui/src/shared/rust-api/types.ts new file mode 100644 index 000000000..4b852311f --- /dev/null +++ b/new-ui/src/shared/rust-api/types.ts @@ -0,0 +1,343 @@ +export type EdgeRequestHeaders = { + 'defguard-client-version': string; + 'defguard-client-platform': string; +}; + +export const AppTheme = { + Light: 'light', + Dark: 'dark', +} as const; + +export type AppThemeValue = (typeof AppTheme)[keyof typeof AppTheme]; + +export const AppTrayTheme = { + Color: 'color', + White: 'white', + Black: 'black', + Gray: 'gray', +} as const; + +export type AppTrayTheme = (typeof AppTrayTheme)[keyof typeof AppTrayTheme]; + +export const LogLevel = { + Off: 'OFF', + Error: 'ERROR', + Warn: 'WARN', + Info: 'INFO', + Debug: 'DEBUG', + Trace: 'TRACE', +} as const; + +export type LogLevel = (typeof LogLevel)[keyof typeof LogLevel]; + +export const ClientTrafficPolicy = { + None: 'none', + DisableAllTraffic: 'disable_all_traffic', + ForceAllTraffic: 'force_all_traffic', +} as const; + +export type ClientTrafficPolicy = + (typeof ClientTrafficPolicy)[keyof typeof ClientTrafficPolicy]; + +export const LocationMfaMode = { + Disabled: 'disabled', + Internal: 'internal', + External: 'external', +} as const; + +export type LocationMfaMode = (typeof LocationMfaMode)[keyof typeof LocationMfaMode]; + +export const MfaMethod = { + Totp: 'totp', + Email: 'email', + Oidc: 'oidc', + Biometric: 'biometric', + MobileApprove: 'mobileapprove', +} as const; + +export type MfaMethodValue = (typeof MfaMethod)[keyof typeof MfaMethod]; + +export const ConnectionType = { + Location: 'Location', + Tunnel: 'Tunnel', +} as const; + +export type ConnectionType = (typeof ConnectionType)[keyof typeof ConnectionType]; + +/** Typed enum for every Tauri command available on the backend. */ +export const TauriCommand = { + // Instances + AllInstances: 'all_instances', + DeleteInstance: 'delete_instance', + UpdateInstance: 'update_instance', + SaveDeviceConfig: 'save_device_config', + // Locations + AllLocations: 'all_locations', + LocationInterfaceDetails: 'location_interface_details', + UpdateLocationRouting: 'update_location_routing', + SetLocationMfaMethod: 'set_location_mfa_method', + // Connections + Connect: 'connect', + Disconnect: 'disconnect', + LastConnection: 'last_connection', + AllConnections: 'all_connections', + ActiveConnection: 'active_connection', + LocationStats: 'location_stats', + // Tunnels + AllTunnels: 'all_tunnels', + TunnelDetails: 'tunnel_details', + ParseTunnelConfig: 'parse_tunnel_config', + SaveTunnel: 'save_tunnel', + UpdateTunnel: 'update_tunnel', + DeleteTunnel: 'delete_tunnel', + // App config + GetAppConfig: 'command_get_app_config', + SetAppConfig: 'command_set_app_config', + // Misc + GetProvisioningConfig: 'get_provisioning_config', + GetPlatformHeader: 'get_platform_header', + GetLatestAppVersion: 'get_latest_app_version', + OpenLink: 'open_link', + StartGlobalLogWatcher: 'start_global_logwatcher', + StopGlobalLogWatcher: 'stop_global_logwatcher', + AllActiveConnections: 'all_active_connections', + DisconnectLocations: 'disconnect_locations', + //Window + SwapToOldUi: 'swap_to_old_ui', +} as const; + +export type TauriCommand = (typeof TauriCommand)[keyof typeof TauriCommand]; + +/** Typed enum for every Tauri event emitted by the backend. */ +export const TauriEvent = { + ConnectionChanged: 'connection-changed', + InstanceUpdate: 'instance-update', + LocationUpdate: 'location-update', + AppVersionFetch: 'app-version-fetch', + ConfigChanged: 'config-changed', + DeadConnectionDropped: 'dead-connection-dropped', + DeadConnectionReconnected: 'dead-connection-reconnected', + ApplicationConfigChanged: 'application-config-changed', + AddInstance: 'add-instance', + MfaTrigger: 'mfa-trigger', + VersionMismatch: 'version-mismatch', + UuidMismatch: 'uuid-mismatch', +} as const; + +export type TauriEventValue = (typeof TauriEvent)[keyof typeof TauriEvent]; + +/** Payload for the `dead-connection-dropped` event. Mirrors `DeadConnDroppedOut` in events.rs. */ +export type DeadConnectionDroppedPayload = { + name: string; + con_type: ConnectionType; + peer_alive_period: number; +}; + +/** Payload for the `dead-connection-reconnected` event. Mirrors `DeadConnReconnected` in events.rs. */ +export type DeadConnectionReconnectedPayload = { + name: string; + con_type: ConnectionType; + peer_alive_period: number; +}; + +/** Payload for the `add-instance` event. Mirrors `AddInstancePayload` in events.rs. */ +export type AddInstanceEventPayload = { + token: string; + url: string; +}; + +export type ActiveConnectionSummary = { + id: number; + name: string; + connection_type: ConnectionType; +}; + +export type AppConfig = { + theme: AppThemeValue; + tray_theme: AppTrayTheme; + check_for_updates: boolean; + log_level: LogLevel; + /** Idle seconds before the connection is automatically dropped. */ + peer_alive_period: number; + /** Maximum transmission unit; 0 means system default. */ + mtu: number; +}; + +export type AppConfigPatch = Partial; + +export type InstanceInfo = { + id: number; + name: string; + /** Server-side UUID (not the SQLite row id). */ + uuid: string; + url: string; + proxy_url: string; + /** True when at least one location of this instance has an active connection. */ + active: boolean; + pubkey: string; + client_traffic_policy: ClientTrafficPolicy; + enterprise_enabled: boolean; + openid_display_name: string | null; +}; + +export type LocationInfo = { + id: number; + instance_id: number; + name: string; + address: string; + endpoint: string; + active: boolean; + route_all_traffic: boolean; + connection_type: ConnectionType; + pubkey: string; + network_id: number; + location_mfa_mode: LocationMfaMode; + mfa_method?: MfaMethodValue; +}; + +export type LocationStats = { + collected_at: number; + download: number; + upload: number; +}; + +export type Connection = { + id: number; + location_id: number; + connected_from: string; + start: string; + end: string; + upload?: number; + download?: number; +}; + +export type TunnelInfo = { + id?: number; + name: string; + address: string; + endpoint: string; + route_all_traffic: boolean; + active: boolean; + connection_type: ConnectionType; + instance_id: number; + network_id: number; + pubkey: string; + prvkey: string; + server_pubkey: string; + preshared_key?: string; + allowed_ips?: string; + dns?: string; + persistent_keep_alive: number; + pre_up?: string; + post_up?: string; + pre_down?: string; + post_down?: string; +}; + +export type LocationDetails = { + location_id: number; + name: string; + pubkey: string; + address: string; + dns?: string; + listen_port: number; + peer_pubkey: string; + peer_endpoint: string; + allowed_ips: string; + persistent_keepalive_interval?: number; + last_handshake?: number; +}; + +export type NewAppVersionInfo = { + version: string; + release_date: string; + release_notes_url: string; + update_url: string; +}; + +export type ProvisioningConfig = { + enrollment_token: string; + enrollment_url: string; +}; + +export type Device = { + id: number; + name: string; + pubkey: string; + privateKey?: string; + user_id: number; + created_at: number; +}; + +export type DeviceConfig = { + network_id: number; + network_name: string; + config: string; +}; + +export type CreateDeviceResponse = { + device: Device; + configs: DeviceConfig[]; + instance: InstanceInfo; +}; + +export type SaveDeviceConfigResponse = { + instance: InstanceInfo; + locations: LocationInfo[]; +}; + +// ── Request argument types ─────────────────────────────────────────────────── + +export type ConnectionArgs = { + locationId: number; + connectionType: ConnectionType; + presharedKey?: string; +}; + +export type RoutingArgs = { + locationId: number; + connectionType: ConnectionType; + routeAllTraffic?: boolean; +}; + +export type StatsArgs = { + locationId: number; + connectionType: ConnectionType; + from?: string; +}; + +export type LocationDetailsArgs = { + locationId: number; + connectionType: ConnectionType; +}; + +export type TunnelRequest = { + name: string; + pubkey: string; + prvkey: string; + address: string; + server_pubkey: string; + allowed_ips?: string; + endpoint: string; + dns?: string; + persistent_keep_alive: number; + pre_up?: string; + post_up?: string; + pre_down?: string; + post_down?: string; +}; + +export type SaveConfigArgs = { + privateKey: string; + response: CreateDeviceResponse; +}; + +export type UpdateInstanceArgs = { + instanceId: number; + response: CreateDeviceResponse; +}; + +export type SetLocationMfaMethodArgs = { + locationId: number; + mfaMethod: MfaMethodValue; +}; diff --git a/new-ui/src/shared/scss/_base.scss b/new-ui/src/shared/scss/_base.scss new file mode 100644 index 000000000..1efbcd5b7 --- /dev/null +++ b/new-ui/src/shared/scss/_base.scss @@ -0,0 +1,73 @@ +*:-moz-focus-inner { + border: 0; +} + +input:-webkit-autofill, +input:-webkit-autofill:hover, +input:-webkit-autofill:focus, +input:-webkit-autofill:active { + transition: background-color 8553600s; + -webkit-text-fill-color: #fff !important; +} + +html, +body { + padding: 0; + margin: 0; +} + +// for apple +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: auto; +} + +#root, +#app { + min-height: 100dvh; + overflow: hidden; +} + +input[type='number']::-webkit-outer-spin-button, +input[type='number']::-webkit-inner-spin-button { + appearance: none; + margin: 0; +} + +input[type='number'] { + appearance: textfield; +} + +p, +span, +div, +section, +a, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + color: var(--fg-white-100); + font-family: + geist, + system-ui, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Open Sans', + 'Helvetica Neue', + sans-serif; +} + +ul, +ol { + margin: 0; + padding: 0; +} diff --git a/new-ui/src/shared/scss/_fonts.scss b/new-ui/src/shared/scss/_fonts.scss new file mode 100644 index 000000000..88635eb6a --- /dev/null +++ b/new-ui/src/shared/scss/_fonts.scss @@ -0,0 +1,125 @@ +/* stylelint-disable font-family-name-quotes */ +// fonts.scss +@font-face { + font-family: 'Geist'; + src: url('/fonts/geist/Geist-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Geist'; + src: url('/fonts/geist/Geist-RegularItalic.woff2') format('woff2'); + font-weight: 400; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Geist'; + src: url('/fonts/geist/Geist-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Geist'; + src: url('/fonts/geist/Geist-MediumItalic.woff2') format('woff2'); + font-weight: 500; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Geist'; + src: url('/fonts/geist/Geist-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Geist'; + src: url('/fonts/geist/Geist-SemiBoldItalic.woff2') format('woff2'); + font-weight: 600; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Geist'; + src: url('/fonts/geist/Geist-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Geist'; + src: url('/fonts/geist/Geist-BoldItalic.woff2') format('woff2'); + font-weight: 700; + font-style: italic; + font-display: swap; +} + +// source-code-pro + +@font-face { + font-family: 'Source Code Pro'; + src: url('/fonts/source_code_pro/SourceCodePro-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +// JetBrains Mono + +@font-face { + font-family: 'JetBrains Mono'; + src: url('/fonts/jetbrains_mono/JetBrainsMono-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'JetBrains Mono'; + src: url('/fonts/jetbrains_mono/JetBrainsMono-Italic.woff2') format('woff2'); + font-weight: 400; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'JetBrains Mono'; + src: url('/fonts/jetbrains_mono/JetBrainsMono-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'JetBrains Mono'; + src: url('/fonts/jetbrains_mono/JetBrainsMono-MediumItalic.woff2') format('woff2'); + font-weight: 500; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'JetBrains Mono'; + src: url('/fonts/jetbrains_mono/JetBrainsMono-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'JetBrains Mono'; + src: url('/fonts/jetbrains_mono/JetBrainsMono-SemiBoldItalic.woff2') format('woff2'); + font-weight: 600; + font-style: italic; + font-display: swap; +} diff --git a/new-ui/src/shared/scss/_shared_tokens.scss b/new-ui/src/shared/scss/_shared_tokens.scss new file mode 100644 index 000000000..5ba876149 --- /dev/null +++ b/new-ui/src/shared/scss/_shared_tokens.scss @@ -0,0 +1,260 @@ +$font-fallback: + system-ui, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Open Sans', + 'Helvetica Neue', + sans-serif; +$geist: + geist, + #{$font-fallback}; +$source-code-pro: + 'Source Code Pro', + #{$font-fallback}; +$jetbrains: + 'JetBrains Mono', + #{$font-fallback}; +/* stylelint-disable value-keyword-case */ +:root { + // font settings + --font-family-title: #{$geist}; + --font-family-body: #{$geist}; + --font-family-component: #{$geist}; + --font-family-code: #{$source-code-pro}; + --font-family-jetbrains: #{$jetbrains}; + + --t-body-xxs-600: normal 600 11px/14px #{$geist}; + --t-body-xxs-500: normal 500 11px/14px #{$geist}; + --t-body-xxs-400: normal 400 11px/14px #{$geist}; + + --t-body-xs-600: normal 600 12px/16px #{$geist}; + --t-body-xs-500: normal 500 12px/16px #{$geist}; + --t-body-xs-400: normal 400 12px/16px #{$geist}; + + --t-body-sm-600: normal 600 14px/20px #{$geist}; + --t-body-sm-500: normal 500 14px/20px #{$geist}; + --t-body-sm-400: normal 400 14px/20px #{$geist}; + + --t-body-primary-400: normal 400 16px/24px #{$geist}; + --t-body-primary-600: normal 600 16px/24px #{$geist}; + --t-body-primary-500: normal 500 16px/24px #{$geist}; + + --t-h1: normal 600 32px/44px #{$geist}; + --t-h2: normal 600 28px/40px #{$geist}; + --t-h3: normal 600 24px/32px #{$geist}; + --t-h4: normal 600 20px/28px #{$geist}; + --t-h5: normal 600 18px/28px #{$geist}; + + --t-primary-400: normal 400 16px/24px #{$geist}; + --t-primary-500: normal 500 16px/24px #{$geist}; + --t-primary-600: normal 600 16px/24px #{$geist}; + + --t-small-400: normal 400 14px/20px #{$geist}; + --t-small-500: normal 500 14px/20px #{$geist}; + --t-small-600: normal 600 14px/20px #{$geist}; + + --t-tiny-400: normal 400 12px/16px #{$geist}; + --t-tiny-500: normal 500 12px/16px #{$geist}; + --t-tiny-600: normal 600 12px/16px #{$geist}; + + --t-smallest-400: normal 400 11px/16px #{$geist}; + --t-smallest-500: normal 500 11px/16px #{$geist}; + --t-smallest-600: normal 600 11px/16px #{$geist}; + + // border width + --border-1: 1px; + --border-2: 2px; + + // border-radius + --radius-sm: 4px; + --radius-md: 8px; + --radius-lg: 12px; + --radius-xl: 16px; + --radius-xxl: 24px; + --radius-xxxl: 32px; + --radius-full: 100px; + + // scale + --size-xs: 16px; + --size-sm: 20px; + --size-md: 24px; + --size-xl: 32px; + --size-2xl: 36px; + --size-3xl: 40px; + --size-4xl: 44px; + --size-5xl: 60px; + + // spacing + --spacing-xs: 4px; + --spacing-sm: 8px; + --spacing-md: 12px; + --spacing-lg: 16px; + --spacing-xl: 20px; + --spacing-2xl: 24px; + --spacing-3xl: 32px; + --spacing-4xl: 40px; + --spacing-5xl: 48px; + --spacing-6xl: 64px; + --spacing-7xl: 80px; + --spacing-8xl: 96px; + --spacing-9xl: 120px; + + // color basis + --c-white-100: rgb(255 255 255); + --c-white-90: rgb(255 255 255 / 90%); + --c-white-80: rgb(255 255 255 / 80%); + --c-white-70: rgb(255 255 255 / 70%); + --c-white-60: rgb(255 255 255 / 60%); + --c-white-50: rgb(255 255 255 / 50%); + --c-white-40: rgb(255 255 255 / 40%); + --c-white-30: rgb(255 255 255 / 30%); + --c-white-20: rgb(255 255 255 / 20%); + --c-white-10: rgb(255 255 255 / 10%); + --c-white-5: rgb(255 255 255 / 5%); + --c-dark-neutral-1400: rgb(20 21 23); + --c-dark-neutral-1300: rgb(25 26 28); + --c-dark-neutral-1200: rgb(36 38 41); + --c-dark-neutral-1100: rgb(46 49 54); + --c-dark-neutral-1000: rgb(50 54 60); + --c-dark-neutral-900: rgb(61 67 75); + --c-dark-neutral-800: rgb(74 80 89); + --c-dark-neutral-700: rgb(94 102 114); + --c-dark-neutral-600: rgb(126 135 148); + --c-dark-neutral-500: rgb(147 156 169); + --c-dark-neutral-400: rgb(162 172 186); + --c-dark-neutral-300: rgb(184 192 205); + --c-dark-neutral-200: rgb(223 227 233); + --c-dark-neutral-100: rgb(240 242 245); + --c-dark-neutral-50: rgb(247 248 250); + --c-saturated-additional-error: rgb(204 60 60); + --c-saturated-additional-warning: rgb(255 149 0); + --c-saturated-additional-success: rgb(116 255 184); + --c-saturated-additional-blue-neutral: rgb(80 115 225); + --c-saturated-red-800: rgb(35 24 26); + --c-saturated-red-700: rgb(124 37 37); + --c-saturated-red-600: rgb(143 42 42); + --c-saturated-red-500: rgb(204 60 60); + --c-saturated-red-400: rgb(213 93 93); + --c-saturated-red-300: rgb(225 142 142); + --c-saturated-red-200: rgb(234 175 175); + --c-saturated-red-100: rgb(250 236 236); + --c-saturated-red-500-transparent: rgb(204 60 60 / 20%); + --c-saturated-dark-blue-100: rgb(0 25 137); + --c-saturated-dark-blue-90: rgb(0 25 137 / 90%); + --c-saturated-dark-blue-80: rgb(0 25 137 / 80%); + --c-saturated-dark-blue-70: rgb(0 25 137 / 70%); + --c-saturated-dark-blue-60: rgb(0 25 137 / 60%); + --c-saturated-dark-blue-50: rgb(0 25 137 / 50%); + --c-saturated-dark-blue-40: rgb(0 25 137 / 40%); + --c-saturated-dark-blue-30: rgb(0 25 137 / 30%); + --c-saturated-dark-blue-20: rgb(0 25 137 / 20%); + --c-saturated-dark-blue-10: rgb(0 25 137 / 10%); + --c-saturated-dark-blue-5: rgb(0 25 137 / 5%); + --c-saturated-green-700: rgb(2 78 23); + --c-saturated-green-600: rgb(2 90 27); + --c-saturated-green-500: rgb(3 128 38); + --c-saturated-green-400: rgb(46 150 75); + --c-saturated-green-300: rgb(109 181 129); + --c-saturated-green-200: rgb(152 203 166); + --c-saturated-green-100: rgb(230 242 233); + --c-saturated-green-500-transparent: rgb(3 128 38 / 8%); + --c-saturated-orange-700: rgb(156 91 0); + --c-saturated-orange-600: rgb(179 104 0); + --c-saturated-orange-500: rgb(255 149 0); + --c-saturated-orange-400: rgb(255 167 43); + --c-saturated-orange-300: rgb(255 194 107); + --c-saturated-orange-200: rgb(255 212 150); + --c-saturated-orange-100: rgb(255 244 230); + --c-saturated-orange-500-transparent: rgb(255 149 0 / 8%); + --c-saturated-violet-700: rgb(53 36 82); + --c-saturated-violet-600: rgb(83 55 128); + --c-saturated-violet-500: rgb(102 55 178); + --c-saturated-violet-400: rgb(136 106 186); + --c-saturated-violet-300: rgb(172 151 207); + --c-saturated-violet-200: rgb(196 181 221); + --c-saturated-violet-100: rgb(241 237 247); + --c-saturated-violet-transparent: rgb(102 55 178 / 8%); + --c-saturated-blue-800: rgb(21 24 31); + --c-saturated-blue-700: rgb(38 57 115); + --c-saturated-blue-600: rgb(51 77 156); + --c-saturated-blue-500: rgb(57 97 219); + --c-saturated-blue-400: rgb(87 119 217); + --c-saturated-blue-300: rgb(140 161 222); + --c-saturated-blue-200: rgb(180 196 242); + --c-saturated-blue-100: rgb(237 241 252); + --c-saturated-blue-50: rgb(249 250 254); + --c-saturated-blue-500-transparent: rgb(50 92 219 / 8%); + + // Components + + // Menu + --t-menu-title: 600 12px/24px #{$geist}; + --t-menu-text: 400 14px/24px #{$geist}; + --menu-spacing-icon: var(--spacing-md); + --menu-padding-sides: var(--spacing-sm); + --menu-border-radius-group: var(--radius-lg); + --menu-border-radius-item: var(--radius-md); + --menu-height: var(--size-2xl); + + // Icons + + --icon-size-lg: 32px; + --icon-size: 20px; + --icon-size-xs: 16px; + + // Modals + + --modal-title-size: 16px; + --modal-size-md: 640px; + --modal-size-sm: 480px; + --modal-spacing: var(--spacing-md); + --modal-spacing-sides: var(--spacing-lg); + --modal-border-radius: var(--radius-lg); + + // Buttons + + --t-button-label-big: normal 500 14px / normal #{$geist}; + --t-button-label-primary: normal 500 14px / normal #{$geist}; + + // Badge + --badge-border-radius: var(--radius-md); + --badge-spacing: var(--spacing-sm); + --badge-gap: var(--spacing-xs); + --t-badge: var(--t-body-xs-500); + --badge-height: 24px; + + // Inputs + --t-input-title: normal 500 12px / 16px #{$geist}; + --t-input-text-primary: normal 400 14px / 20px #{$geist}; + --t-input-text-big: normal 400 16px / 20px #{$geist}; + --t-input-error-message: normal 400 12px / 16px #{$geist}; + --input-border-radius: var(--radius-md); + --input-size-primary: 36px; + --input-size-lg: 44px; + --input-spacing-xs: var(--spacing-xs); + --input-spacing-sm: var(--spacing-sm); + --input-spacing-lg: var(--spacing-md); + + // Tooltip + --t-tooltip: normal 400 12px / 16px #{$geist}; + --tooltip-letter-spacing: 0.3; + --tooltip-spacing: var(--spacing-sm) var(--spacing-md); + + // custom + + // how much space does error message in all takes + --form-field-error-space: 24px; + + // how much space error should gap from main container + --form-field-error-gap: 8px; + + // navigation + --nav-width: 270px; + + --menu-shadow: 0 4px 12px 0 rgb(0 0 0 / 7%); +} diff --git a/new-ui/src/shared/scss/_skeleton.scss b/new-ui/src/shared/scss/_skeleton.scss new file mode 100644 index 000000000..6bb25ae61 --- /dev/null +++ b/new-ui/src/shared/scss/_skeleton.scss @@ -0,0 +1,4 @@ +.react-loading-skeleton { + --base-color: var(--bg-disabled); + --highlight-color: var(--bg-active); +} diff --git a/new-ui/src/shared/scss/_themes.scss b/new-ui/src/shared/scss/_themes.scss new file mode 100644 index 000000000..1746ccb87 --- /dev/null +++ b/new-ui/src/shared/scss/_themes.scss @@ -0,0 +1,56 @@ +:root[data-theme='light'] { + --bg-white-100: var(--c-white-100); + --bg-white-90: var(--c-white-90); + --bg-white-80: var(--c-white-80); + --bg-white-70: var(--c-white-70); + --bg-white-60: var(--c-white-60); + --bg-white-50: var(--c-white-50); + --bg-white-40: var(--c-white-40); + --bg-white-30: var(--c-white-30); + --bg-white-20: var(--c-white-20); + --bg-white-10: var(--c-white-10); + --bg-white-5: var(--c-white-5); + --fg-white-100: var(--c-white-100); + --fg-white-90: var(--c-white-90); + --fg-white-80: var(--c-white-80); + --fg-white-70: var(--c-white-70); + --fg-white-60: var(--c-white-60); + --fg-white-50: var(--c-white-50); + --fg-white-40: var(--c-white-40); + --fg-white-30: var(--c-white-30); + --fg-white-20: var(--c-white-20); + --fg-white-10: var(--c-white-10); + --fg-white-5: var(--c-white-5); + --bg-critical: var(--c-saturated-red-500); + --bg-neutral: var(--c-saturated-additional-blue-neutral); + --bg-dark-blue-60: var(--c-saturated-dark-blue-60); + --bg-dark-blue-40: var(--c-saturated-dark-blue-40); + --bg-dark-blue-30: var(--c-saturated-dark-blue-30); + --bg-dark-blue-20: var(--c-saturated-dark-blue-20); + --bg-success: var(--c-saturated-additional-success); + --bg-warning: var(--c-saturated-orange-500); + --bg-critical-faded: var(--c-saturated-red-400); + --bg-critical-muted: var(--c-saturated-red-200); + --bg-critical-disabled: var(--c-saturated-red-500-transparent); + --border-bg: var(--c-white-100); + --border-action: var(--fg-white-100); + --border-action-disabled: var(--fg-white-20); + --border-default: var(--c-white-40); + --border-disabled: var(--c-white-20); + --border-emphasis: var(--c-white-60); + --border-muted: var(--c-white-20); + --border-faded: var(--c-white-10); + --border-critical: var(--c-saturated-red-200); + --border-success: var(--c-saturated-additional-success); + --border-warning: var(--c-saturated-orange-300); + --fg-action: var(--c-saturated-blue-500); + --fg-attention: var(--c-saturated-orange-300); + --fg-critical: var(--c-saturated-red-200); + --fg-critical-muted: var(--c-saturated-red-100); + --fg-black: var(--c-dark-neutral-1400); + --fg-faded: var(--c-dark-neutral-900); + --fg-neutral: var(--c-dark-neutral-800); + --fg-muted: var(--c-dark-neutral-600); + --fg-disabled: var(--c-dark-neutral-500); + --fg-success: var(--c-saturated-additional-success); +} diff --git a/new-ui/src/shared/scss/global/_animate.scss b/new-ui/src/shared/scss/global/_animate.scss new file mode 100644 index 000000000..024cc9240 --- /dev/null +++ b/new-ui/src/shared/scss/global/_animate.scss @@ -0,0 +1,11 @@ +@use 'sass:list'; + +// for now no prop required +@mixin animate($properties...) { + transition-timing-function: ease-out; + transition-duration: 160ms; + + @if list.length($properties) > 0 { + transition-property: $properties; + } +} diff --git a/new-ui/src/shared/scss/global/_breakpoints.scss b/new-ui/src/shared/scss/global/_breakpoints.scss new file mode 100644 index 000000000..cda8eaa86 --- /dev/null +++ b/new-ui/src/shared/scss/global/_breakpoints.scss @@ -0,0 +1,112 @@ +@use 'sass:map'; +@use 'sass:list'; + +$grid-breakpoints: ( + xs: 0, + sm: 320px, + md: 768px, + lg: 992px, + xl: 1200px, + xxl: 1600px, +); + +@function break-next( + $name, + $breakpoints: $grid-breakpoints, + $breakpoint-names: map.keys($breakpoints) +) { + $n: list.index($breakpoint-names, $name); + + @if not $n { + @error "breakpoint `#{$name}` not found in `#{$breakpoints}`"; + } + + @if $n < list.length($breakpoint-names) { + @return list.nth($breakpoint-names, $n + 1); + } + + @return null; +} + +@function break-min($name, $breakpoints: $grid-breakpoints) { + $min: map.get($breakpoints, $name); + + @if $min != 0 { + @return $min; + } + + @return null; +} + +@function break-max($name, $breakpoints: $grid-breakpoints) { + $max: map.get($breakpoints, $name); + + @if $max and $max > 0 { + @return $max - 0.02; + } + + @return null; +} + +@mixin break-up($name, $breakpoints: $grid-breakpoints) { + $min: break-min($name, $breakpoints); + + @if $min { + @media (min-width: $min) { + @content; + } + } @else { + @content; + } +} + +@mixin break-down($name, $breakpoints: $grid-breakpoints) { + $max: break-max($name, $breakpoints); + + @if $max { + @media (max-width: $max) { + @content; + } + } @else { + @content; + } +} + +@mixin break-between($lower, $upper, $breakpoints: $grid-breakpoints) { + $min: break-min($lower, $breakpoints); + $max: break-max($upper, $breakpoints); + + @if $min != null and $max != null { + @media (min-width: $min) and (max-width: $max) { + @content; + } + } @else if $max == null { + @include break-up($lower, $breakpoints) { + @content; + } + } @else if $min == null { + @include break-down($upper, $breakpoints) { + @content; + } + } +} + +@mixin break-only($name, $breakpoints: $grid-breakpoints) { + $min: break-min($name, $breakpoints); + $next: break-next($name, $breakpoints); + $max: break-max($next, $breakpoints); + + @if $min != null and $max != null { + @media (min-width: $min) and (max-width: $max) { + @content; + } + } @else if $max == null { + @include break-up($name, $breakpoints) { + @content; + } + } @else if $min == null { + @include break-down($next, $breakpoints) { + @content; + } + } +} diff --git a/new-ui/src/shared/scss/global/index.scss b/new-ui/src/shared/scss/global/index.scss new file mode 100644 index 000000000..875467349 --- /dev/null +++ b/new-ui/src/shared/scss/global/index.scss @@ -0,0 +1,2 @@ +@forward './animate'; +@forward './breakpoints'; diff --git a/new-ui/src/shared/scss/index.scss b/new-ui/src/shared/scss/index.scss new file mode 100644 index 000000000..f8d430ca7 --- /dev/null +++ b/new-ui/src/shared/scss/index.scss @@ -0,0 +1,5 @@ +@use './base'; +@use './shared_tokens'; +@use './skeleton'; +@use './themes'; +@use './fonts'; diff --git a/new-ui/src/shared/types.ts b/new-ui/src/shared/types.ts new file mode 100644 index 000000000..70b7b15f8 --- /dev/null +++ b/new-ui/src/shared/types.ts @@ -0,0 +1,92 @@ +export const Direction = { + UP: 'up', + DOWN: 'down', + LEFT: 'left', + RIGHT: 'right', +} as const; + +export type DirectionValue = (typeof Direction)[keyof typeof Direction]; + +export const Orientation = { + Horizontal: 'horizontal', + Vertical: 'vertical', +} as const; + +export type OrientationValue = (typeof Orientation)[keyof typeof Orientation]; + +export const ThemeSpacing = { + Xs: 'var(--spacing-xs)', + Sm: 'var(--spacing-sm)', + Md: 'var(--spacing-md)', + Lg: 'var(--spacing-lg)', + Xl: 'var(--spacing-xl)', + Xl2: 'var(--spacing-2xl)', + Xl3: 'var(--spacing-3xl)', + Xl4: 'var(--spacing-4xl)', + Xl5: 'var(--spacing-5xl)', + Xl6: 'var(--spacing-6xl)', + Xl7: 'var(--spacing-7xl)', + Xl8: 'var(--spacing-8xl)', + Xl9: 'var(--spacing-9xl)', +} as const; + +export type ThemeSpacingValue = (typeof ThemeSpacing)[keyof typeof ThemeSpacing]; + +export const ThemeVariable = { + BgWhite100: 'var(--bg-white-100)', + BgWhite90: 'var(--bg-white-90)', + BgWhite80: 'var(--bg-white-80)', + BgWhite70: 'var(--bg-white-70)', + BgWhite60: 'var(--bg-white-60)', + BgWhite50: 'var(--bg-white-50)', + BgWhite40: 'var(--bg-white-40)', + BgWhite30: 'var(--bg-white-30)', + BgWhite20: 'var(--bg-white-20)', + BgWhite10: 'var(--bg-white-10)', + BgWhite5: 'var(--bg-white-5)', + FgWhite100: 'var(--fg-white-100)', + FgWhite90: 'var(--fg-white-90)', + FgWhite80: 'var(--fg-white-80)', + FgWhite70: 'var(--fg-white-70)', + FgWhite60: 'var(--fg-white-60)', + FgWhite50: 'var(--fg-white-50)', + FgWhite40: 'var(--fg-white-40)', + FgWhite30: 'var(--fg-white-30)', + FgWhite20: 'var(--fg-white-20)', + FgWhite10: 'var(--fg-white-10)', + FgWhite5: 'var(--fg-white-5)', + BgCritical: 'var(--bg-critical)', + BgNeutral: 'var(--bg-neutral)', + BgDarkBlue60: 'var(--bg-dark-blue-60)', + BgDarkBlue40: 'var(--bg-dark-blue-40)', + BgDarkBlue30: 'var(--bg-dark-blue-30)', + BgDarkBlue20: 'var(--bg-dark-blue-20)', + BgSuccess: 'var(--bg-success)', + BgWarning: 'var(--bg-warning)', + BgCriticalFaded: 'var(--bg-critical-faded)', + BgCriticalMuted: 'var(--bg-critical-muted)', + BgCriticalDisabled: 'var(--bg-critical-disabled)', + BorderBg: 'var(--border-bg)', + BorderAction: 'var(--border-action)', + BorderActionDisabled: 'var(--border-action-disabled)', + BorderDefault: 'var(--border-default)', + BorderDisabled: 'var(--border-disabled)', + BorderEmphasis: 'var(--border-emphasis)', + BorderMuted: 'var(--border-muted)', + BorderFaded: 'var(--border-faded)', + BorderCritical: 'var(--border-critical)', + BorderSuccess: 'var(--border-success)', + BorderWarning: 'var(--border-warning)', + FgAction: 'var(--fg-action)', + FgAttention: 'var(--fg-attention)', + FgCritical: 'var(--fg-critical)', + FgCriticalMuted: 'var(--fg-critical-muted)', + FgBlack: 'var(--fg-black)', + FgFaded: 'var(--fg-faded)', + FgNeutral: 'var(--fg-neutral)', + FgMuted: 'var(--fg-muted)', + FgDisabled: 'var(--fg-disabled)', + FgSuccess: 'var(--fg-success)', +} as const; + +export type ThemeVariableValue = (typeof ThemeVariable)[keyof typeof ThemeVariable]; diff --git a/new-ui/src/shared/utils/detectClickOutside.ts b/new-ui/src/shared/utils/detectClickOutside.ts new file mode 100644 index 000000000..933609a88 --- /dev/null +++ b/new-ui/src/shared/utils/detectClickOutside.ts @@ -0,0 +1,22 @@ +/** + * Checks if mouse event clicked within any of provided rects + */ +export const detectClickInside = (event: MouseEvent, rects: DOMRect[]) => { + for (const domRect of rects) { + if (domRect) { + const start_x = domRect?.x; + const start_y = domRect?.y; + const end_x = start_x + domRect?.width; + const end_y = start_y + domRect.height; + if ( + event.clientX >= start_x && + event.clientX <= end_x && + event.clientY >= start_y && + event.clientY <= end_y + ) { + return true; + } + } + } + return false; +}; diff --git a/new-ui/src/shared/utils/download.ts b/new-ui/src/shared/utils/download.ts new file mode 100644 index 000000000..d8d09571c --- /dev/null +++ b/new-ui/src/shared/utils/download.ts @@ -0,0 +1,25 @@ +export const downloadText = ( + content: string, + filename: string, + extension: 'txt' | 'pub' | 'conf' = 'txt', +) => { + const blob = new Blob([content], { type: 'text/plain;charset=utf-8' }); + downloadFile(blob, filename, extension); +}; + +export const downloadFile = (blob: Blob, filename: string, extension: string) => { + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + + link.href = url; + link.style = 'visibility: hidden;'; + link.download = `${filename}.${extension}`; + + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + + setTimeout(() => { + URL.revokeObjectURL(url); + }, 5_000); +}; diff --git a/new-ui/src/shared/utils/isComparable.ts b/new-ui/src/shared/utils/isComparable.ts new file mode 100644 index 000000000..120180f1a --- /dev/null +++ b/new-ui/src/shared/utils/isComparable.ts @@ -0,0 +1,10 @@ +export const isComparableWithStrictEquality = (val: unknown) => { + const t = typeof val; + return ( + t === 'number' || + t === 'string' || + t === 'boolean' || + t === 'undefined' || + val === null + ); +}; diff --git a/new-ui/src/shared/utils/isPresent.ts b/new-ui/src/shared/utils/isPresent.ts new file mode 100644 index 000000000..510ce8d49 --- /dev/null +++ b/new-ui/src/shared/utils/isPresent.ts @@ -0,0 +1,3 @@ +export const isPresent = (value: T): value is NonNullable => { + return value !== null && value !== undefined; +}; diff --git a/new-ui/src/shared/utils/mergeRefs.ts b/new-ui/src/shared/utils/mergeRefs.ts new file mode 100644 index 000000000..5d13c288a --- /dev/null +++ b/new-ui/src/shared/utils/mergeRefs.ts @@ -0,0 +1,29 @@ +// extracted from https://github.com/gregberge/react-merge-refs +import type { Ref, RefCallback } from 'react'; + +function assignRef( + ref: Ref | undefined | null, + value: T | null, +): ReturnType> { + if (typeof ref === 'function') { + return ref(value); + } else if (ref) { + ref.current = value; + } +} + +export function mergeRefs(refs: (Ref | undefined)[]): Ref { + return (value: T | null) => { + const cleanups: (() => void)[] = []; + + for (const ref of refs) { + const cleanup = assignRef(ref, value); + const isCleanup = typeof cleanup === 'function'; + cleanups.push(isCleanup ? cleanup : () => assignRef(ref, null)); + } + + return () => { + for (const cleanup of cleanups) cleanup(); + }; + }; +} diff --git a/new-ui/src/shared/utils/mfa.ts b/new-ui/src/shared/utils/mfa.ts new file mode 100644 index 000000000..e7e2228a8 --- /dev/null +++ b/new-ui/src/shared/utils/mfa.ts @@ -0,0 +1,16 @@ +import type { MfaMethodValue } from '../rust-api/types'; + +export const mfaToText = (factor: MfaMethodValue): string => { + switch (factor) { + case 'email': + return 'Email'; + case 'mobileapprove': + return 'Mobile Client'; + case 'oidc': + return 'OpenID'; + case 'totp': + return 'Authenticator app'; + case 'biometric': + return 'Biometric'; + } +}; diff --git a/new-ui/src/shared/utils/sortByLabel.ts b/new-ui/src/shared/utils/sortByLabel.ts new file mode 100644 index 000000000..ede65fc95 --- /dev/null +++ b/new-ui/src/shared/utils/sortByLabel.ts @@ -0,0 +1,7 @@ +const collator = new Intl.Collator(undefined, { + numeric: true, + sensitivity: 'base', +}); + +export const sortByLabel = (items: readonly T[], selector: (item: T) => string): T[] => + [...items].sort((a, b) => collator.compare(selector(a), selector(b))); diff --git a/new-ui/src/shared/utils/zod.ts b/new-ui/src/shared/utils/zod.ts new file mode 100644 index 000000000..fcad50861 --- /dev/null +++ b/new-ui/src/shared/utils/zod.ts @@ -0,0 +1,10 @@ +import type z from 'zod'; + +export const createZodIssue = ( + message: string, + path: PropertyKey[], +): z.core.$ZodIssueCustom => ({ + code: 'custom', + message, + path, +}); diff --git a/new-ui/tsconfig.app.json b/new-ui/tsconfig.app.json new file mode 100644 index 000000000..7f42e5f7c --- /dev/null +++ b/new-ui/tsconfig.app.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023", "DOM"], + "module": "esnext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/new-ui/tsconfig.json b/new-ui/tsconfig.json new file mode 100644 index 000000000..1ffef600d --- /dev/null +++ b/new-ui/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/new-ui/tsconfig.node.json b/new-ui/tsconfig.node.json new file mode 100644 index 000000000..d3c52ea64 --- /dev/null +++ b/new-ui/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023"], + "module": "esnext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/new-ui/vite.config.ts b/new-ui/vite.config.ts new file mode 100644 index 000000000..10f4a4e68 --- /dev/null +++ b/new-ui/vite.config.ts @@ -0,0 +1,51 @@ +import react from '@vitejs/plugin-react'; +import autoprefixer from 'autoprefixer'; +import * as path from 'path'; +import { defineConfig } from 'vite'; +import { tanstackRouter } from '@tanstack/router-plugin/vite'; +import { devtools } from '@tanstack/devtools-vite'; + +const host = process.env.TAURI_DEV_HOST; + +// https://vitejs.dev/config/ +export default defineConfig(async ({ command }) => ({ + plugins: [devtools(), tanstackRouter(), react()], + clearScreen: false, + server: { + strictPort: true, + port: 5072, + host: host || false, + hmr: host + ? { + protocol: 'ws', + host, + port: 1421, + } + : undefined, + watch: { + // 3. tell Vite to ignore watching `src-tauri` + ignored: ['**/src-tauri/**'], + }, + }, + resolve: { + alias: { + '@scssutils': path.resolve('./src/shared/scss/global'), + }, + }, + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@scssutils" as *;\n`, + }, + }, + postcss: { + plugins: [autoprefixer], + }, + }, + envPrefix: ['VITE_', 'TAURI_'], + base: command === 'build' ? '/new-ui/' : './', + build: { + outDir: '../dist/new-ui', + emptyOutDir: true, + }, +})); diff --git a/package.json b/package.json index d4db1374e..ea89a2acf 100644 --- a/package.json +++ b/package.json @@ -82,21 +82,21 @@ "fast-deep-equal": "^3.1.3", "file-saver": "^2.0.5", "get-text-width": "^1.0.3", - "html-react-parser": "^5.2.17", + "html-react-parser": "^6.1.1", "itertools": "^2.6.0", "js-base64": "^3.7.8", "lodash-es": "^4.18.1", "merge-refs": "^2.0.0", "millify": "^6.1.0", "motion": "^12.38.0", - "p-timeout": "^6.1.4", + "p-timeout": "^7.0.1", "prop-types": "^15.8.1", "radash": "^12.1.1", "react": "^19.2.6", "react-auth-code-input": "^3.2.1", "react-click-away-listener": "^2.4.1", "react-dom": "^19.2.6", - "react-hook-form": "^7.75.0", + "react-hook-form": "^7.76.0", "react-hotkeys-hook": "^5.3.2", "react-loading-skeleton": "^3.5.0", "react-markdown": "^10.1.0", @@ -117,23 +117,23 @@ "@svgr/cli": "^8.1.0", "@tanstack/react-query": "^5.100.10", "@tanstack/react-query-devtools": "^5.100.10", - "@tauri-apps/cli": "^2.11.1", + "@tauri-apps/cli": "^2.11.2", "@types/file-saver": "^2.0.7", "@types/lodash-es": "^4.17.12", - "@types/node": "^24.12.4", + "@types/node": "^25.8.0", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^5.2.0", - "@vitejs/plugin-react-swc": "^4.3.0", + "@vitejs/plugin-react": "^6.0.2", + "@vitejs/plugin-react-swc": "^4.3.1", "autoprefixer": "^10.5.0", "npm-run-all": "^4.1.5", "postcss": "^8.5.14", "prettier": "^3.8.3", - "sass": "~1.92.1", + "sass": "~1.99.0", "typedoc": "^0.28.19", "typesafe-i18n": "^5.27.1", "typescript": "^5.9.3", - "vite": "^7.3.3" + "vite": "^8.0.13" }, "volta": { "node": "20.5.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c6795db28..bf1eda962 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: version: 0.27.19(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@hookform/resolvers': specifier: ^3.10.0 - version: 3.10.0(react-hook-form@7.75.0(react@19.2.6)) + version: 3.10.0(react-hook-form@7.76.0(react@19.2.6)) '@react-hook/resize-observer': specifier: ^2.0.2 version: 2.0.2(react@19.2.6) @@ -102,8 +102,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 html-react-parser: - specifier: ^5.2.17 - version: 5.2.17(@types/react@19.2.14)(react@19.2.6) + specifier: ^6.1.1 + version: 6.1.1(@types/react@19.2.14)(react@19.2.6) itertools: specifier: ^2.6.0 version: 2.6.0 @@ -123,8 +123,8 @@ importers: specifier: ^12.38.0 version: 12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) p-timeout: - specifier: ^6.1.4 - version: 6.1.4 + specifier: ^7.0.1 + version: 7.0.1 prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -144,8 +144,8 @@ importers: specifier: ^19.2.6 version: 19.2.6(react@19.2.6) react-hook-form: - specifier: ^7.75.0 - version: 7.75.0(react@19.2.6) + specifier: ^7.76.0 + version: 7.76.0(react@19.2.6) react-hotkeys-hook: specifier: ^5.3.2 version: 5.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -202,8 +202,8 @@ importers: specifier: ^5.100.10 version: 5.100.10(@tanstack/react-query@5.100.10(react@19.2.6))(react@19.2.6) '@tauri-apps/cli': - specifier: ^2.11.1 - version: 2.11.1 + specifier: ^2.11.2 + version: 2.11.2 '@types/file-saver': specifier: ^2.0.7 version: 2.0.7 @@ -211,8 +211,8 @@ importers: specifier: ^4.17.12 version: 4.17.12 '@types/node': - specifier: ^24.12.4 - version: 24.12.4 + specifier: ^25.8.0 + version: 25.8.0 '@types/react': specifier: ^19.2.14 version: 19.2.14 @@ -220,11 +220,11 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': - specifier: ^5.2.0 - version: 5.2.0(vite@7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0)) + specifier: ^6.0.2 + version: 6.0.2(vite@8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0)) '@vitejs/plugin-react-swc': - specifier: ^4.3.0 - version: 4.3.0(vite@7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0)) + specifier: ^4.3.1 + version: 4.3.1(vite@8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0)) autoprefixer: specifier: ^10.5.0 version: 10.5.0(postcss@8.5.14) @@ -238,8 +238,8 @@ importers: specifier: ^3.8.3 version: 3.8.3 sass: - specifier: ~1.92.1 - version: 1.92.1 + specifier: ~1.99.0 + version: 1.99.0 typedoc: specifier: ^0.28.19 version: 0.28.19(typescript@5.9.3) @@ -250,8 +250,8 @@ importers: specifier: ^5.9.3 version: 5.9.3 vite: - specifier: ^7.3.3 - version: 7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0) + specifier: ^8.0.13 + version: 8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0) packages: @@ -289,10 +289,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -314,18 +310,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-transform-react-jsx-self@7.27.1': - resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-source@7.27.1': - resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/runtime@7.29.2': resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} @@ -399,6 +383,15 @@ packages: cpu: [x64] os: [win32] + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -453,162 +446,6 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - '@esbuild/aix-ppc64@0.27.7': - resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.27.7': - resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.27.7': - resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.27.7': - resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.27.7': - resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.7': - resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.27.7': - resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.7': - resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.27.7': - resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.27.7': - resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.27.7': - resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.27.7': - resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.27.7': - resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.27.7': - resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.7': - resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.27.7': - resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.27.7': - resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.27.7': - resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.7': - resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.27.7': - resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.7': - resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.27.7': - resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.27.7': - resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.27.7': - resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.27.7': - resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.27.7': - resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@floating-ui/core@1.7.5': resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} @@ -660,6 +497,15 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@oxc-project/types@0.130.0': + resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==} + '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} engines: {node: '>= 10.0.0'} @@ -763,8 +609,8 @@ packages: peerDependencies: react: '>=18' - '@reduxjs/toolkit@2.11.2': - resolution: {integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==} + '@reduxjs/toolkit@2.12.0': + resolution: {integrity: sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw==} peerDependencies: react: ^16.9.0 || ^17.0.0 || ^18 || ^19 react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 @@ -778,149 +624,103 @@ packages: resolution: {integrity: sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==} engines: {node: '>=14.0.0'} - '@rolldown/pluginutils@1.0.0-rc.3': - resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} - - '@rolldown/pluginutils@1.0.0-rc.7': - resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} - - '@rollup/rollup-android-arm-eabi@4.60.3': - resolution: {integrity: sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.60.3': - resolution: {integrity: sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw==} + '@rolldown/binding-android-arm64@1.0.1': + resolution: {integrity: sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.60.3': - resolution: {integrity: sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g==} + '@rolldown/binding-darwin-arm64@1.0.1': + resolution: {integrity: sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.60.3': - resolution: {integrity: sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw==} + '@rolldown/binding-darwin-x64@1.0.1': + resolution: {integrity: sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.60.3': - resolution: {integrity: sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.60.3': - resolution: {integrity: sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA==} + '@rolldown/binding-freebsd-x64@1.0.1': + resolution: {integrity: sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.60.3': - resolution: {integrity: sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.60.3': - resolution: {integrity: sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.1': + resolution: {integrity: sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.60.3': - resolution: {integrity: sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==} + '@rolldown/binding-linux-arm64-gnu@1.0.1': + resolution: {integrity: sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.60.3': - resolution: {integrity: sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==} + '@rolldown/binding-linux-arm64-musl@1.0.1': + resolution: {integrity: sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.60.3': - resolution: {integrity: sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==} - cpu: [loong64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-loong64-musl@4.60.3': - resolution: {integrity: sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==} - cpu: [loong64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-ppc64-gnu@4.60.3': - resolution: {integrity: sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-ppc64-musl@4.60.3': - resolution: {integrity: sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==} + '@rolldown/binding-linux-ppc64-gnu@1.0.1': + resolution: {integrity: sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [musl] - - '@rollup/rollup-linux-riscv64-gnu@4.60.3': - resolution: {integrity: sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==} - cpu: [riscv64] - os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.60.3': - resolution: {integrity: sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-s390x-gnu@4.60.3': - resolution: {integrity: sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==} + '@rolldown/binding-linux-s390x-gnu@1.0.1': + resolution: {integrity: sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.60.3': - resolution: {integrity: sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==} + '@rolldown/binding-linux-x64-gnu@1.0.1': + resolution: {integrity: sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.60.3': - resolution: {integrity: sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==} + '@rolldown/binding-linux-x64-musl@1.0.1': + resolution: {integrity: sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.60.3': - resolution: {integrity: sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.60.3': - resolution: {integrity: sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg==} + '@rolldown/binding-openharmony-arm64@1.0.1': + resolution: {integrity: sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.60.3': - resolution: {integrity: sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg==} - cpu: [arm64] - os: [win32] + '@rolldown/binding-wasm32-wasi@1.0.1': + resolution: {integrity: sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] - '@rollup/rollup-win32-ia32-msvc@4.60.3': - resolution: {integrity: sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA==} - cpu: [ia32] + '@rolldown/binding-win32-arm64-msvc@1.0.1': + resolution: {integrity: sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.60.3': - resolution: {integrity: sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A==} + '@rolldown/binding-win32-x64-msvc@1.0.1': + resolution: {integrity: sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.3': - resolution: {integrity: sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA==} - cpu: [x64] - os: [win32] + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} '@shikijs/engine-oniguruma@3.23.0': resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} @@ -1174,79 +974,79 @@ packages: '@tauri-apps/api@2.11.0': resolution: {integrity: sha512-7CinYODhky9lmO23xHnUFv0Xt43fbtWMyxZcLcRBlFkcgXKuEirBvHpmtJ89YMhyeGcq20Wuc47Fa4XjyniywA==} - '@tauri-apps/cli-darwin-arm64@2.11.1': - resolution: {integrity: sha512-6eEKMBXsQPCuM1EmvrjT2+aBuxWQuFdKdW8pzNuNQtpq45nEEpBlD5gr8pUeAyOU1DQKlkFaEc/MPBxb/Pfjtg==} + '@tauri-apps/cli-darwin-arm64@2.11.2': + resolution: {integrity: sha512-+4UZzLt+eOAEQCwgd+TqKgyUJMrvx+BgdXLLaqJYmPqzP+nE6YZr/hY6CWLYGQb8jFn99jEkmC6uA3tNvamA1w==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tauri-apps/cli-darwin-x64@2.11.1': - resolution: {integrity: sha512-LQUO7exfRWjWALNhetph5guWpMeHphRpokOLk0OIbTTExaNwJNFu3I4vb+CCM/4G/QGoZe/5XikZOJdNEFP1ig==} + '@tauri-apps/cli-darwin-x64@2.11.2': + resolution: {integrity: sha512-VjYYtZUPqDMLutSfJEyxFE3Bz+DPi7c8wC3imckgvciLDZLq4qwKJxBicg0BXGhXjJsl8vKWgWRFNMPELQ+Xyg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tauri-apps/cli-linux-arm-gnueabihf@2.11.1': - resolution: {integrity: sha512-5i/awiBCRRhOUG8yjn0fMHXIWD5Ez8eEk5LtvOxyQrKuJkRaZDvnbIjZbE183blAwkoA4xN3aO/prJiqscl02Q==} + '@tauri-apps/cli-linux-arm-gnueabihf@2.11.2': + resolution: {integrity: sha512-yMemD6f4i95AQriS8EazyOFzbE34yjnP16i3IOzpHGQvBoy2DjypFMFBq0NtPuITURv/cOGguRtHR5d79/9CSA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tauri-apps/cli-linux-arm64-gnu@2.11.1': - resolution: {integrity: sha512-9LrwDw3S9Fygtw/Q6WDhOP+3svJRGAsejeE+GKrc0eO1ThMVhwi2LL6hw4dlKw93IfS7VY1G19sWGxJ/NcU4nA==} + '@tauri-apps/cli-linux-arm64-gnu@2.11.2': + resolution: {integrity: sha512-cgI91D2wL8GSgoWwZXDqt+DwnuZCP2/bz03QAE4TrhgAKIsrB4hX26W/H1EONPUUNkqrsgeCD0wU6pcNjV/5kw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@tauri-apps/cli-linux-arm64-musl@2.11.1': - resolution: {integrity: sha512-mNA5dbbqPqDUdTIwdUYYuhO2GvIe9UnB2r0VU2njxBOS3Opbx4gKNC5yP0Iu4rYmEmqdlwry9VzGZQ3wq9dyFg==} + '@tauri-apps/cli-linux-arm64-musl@2.11.2': + resolution: {integrity: sha512-X1rm0BERqAAggtYTESSgXrS3sz4Sb/OiPiz54UqISlXW+GkR3vNIGnsy/lejNmoXGVqri3Q53BCfQiclOIyRPw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@tauri-apps/cli-linux-riscv64-gnu@2.11.1': - resolution: {integrity: sha512-fZj3Gwq+6fUs305T5WQiD5iSGJw+j/4w/HGmk4sHDAcy+rp9zU5eaxB7nOyz5/I/nkNAuKPqfp6uIbiUBXkBCw==} + '@tauri-apps/cli-linux-riscv64-gnu@2.11.2': + resolution: {integrity: sha512-usbMLJbT3KtkOrBMDVeGYNM35aTHXx38SJSzTMSqqjeUIOQ+iVPjb2yAGNAE+KqmBbAx4FOFIyMeKXx2M/JKGQ==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] libc: [glibc] - '@tauri-apps/cli-linux-x64-gnu@2.11.1': - resolution: {integrity: sha512-XFxGxOvHM7jjeD6ozCKdGfhzJ7lERYDGZl1/Kb4fsvchaJsfLJ981TlyTG8Qy/gFq+f5GitH3bfrX9JAkjPEyw==} + '@tauri-apps/cli-linux-x64-gnu@2.11.2': + resolution: {integrity: sha512-Ru4gwJKPG0ctVGchRGpRup4Y4lW2SSfFnrbQcyHhCliKy4g8Qz97TrUgCur4CbWyAgKxvGh3SjrkA0LDYzDGiw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@tauri-apps/cli-linux-x64-musl@2.11.1': - resolution: {integrity: sha512-d5C2/Zm+68v7R9wTuTCjRQEVrWjcdMkJBZ1+rXse+QdMMlTB9+u9PDNDLw9PQflWxYLaYZ7tjxxL9Nb9II6PbA==} + '@tauri-apps/cli-linux-x64-musl@2.11.2': + resolution: {integrity: sha512-eUm7T6clN1MMmNSRQ9gaWsQdyehQx2Gmn5hht/QUlqZQI/qcP2OJK5dnaxqwFzCr2HdsEo9ydxaqcS1oJzMvUw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@tauri-apps/cli-win32-arm64-msvc@2.11.1': - resolution: {integrity: sha512-YdeVWFAR1pTXzUU6NLstPq4G6OLxuDrXCXEBdmBH+5EZIDXUx0D2kJlz3+YjpazkKvAzYpgziTsyRagls0OfRQ==} + '@tauri-apps/cli-win32-arm64-msvc@2.11.2': + resolution: {integrity: sha512-HeeZW80jU+gVTOEX4X/hC6NVSAdDVXajwP5fxIZ/3z9WvUC7qrudX2GMTilYq6Dg0e0sk0XgsAJD1hZ5wPBXUA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tauri-apps/cli-win32-ia32-msvc@2.11.1': - resolution: {integrity: sha512-VBGkuH0eB9K9LLSMv361Gzr5Ou72sCS4+ztpmkWEQ+wd/amhcYOsf3X6qn1RJZDzIhiOYHJEOysZUC3baD01rA==} + '@tauri-apps/cli-win32-ia32-msvc@2.11.2': + resolution: {integrity: sha512-YhjQNZcXfbkCLyazSv1nPnJ9iRFE1wm6kc51FDbU10/Dk09io+6PAGMLjkxnX2GdM0qMnDmTjstY8mTDVvtKeA==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@tauri-apps/cli-win32-x64-msvc@2.11.1': - resolution: {integrity: sha512-b3ORhIAKgp9ZYY+zBt7b7r0kLU2kjvyGF0+MS2SBym3emsweGPybEqocJcmtMuxyBhkOKHP4CiuEJEDuAlTx6A==} + '@tauri-apps/cli-win32-x64-msvc@2.11.2': + resolution: {integrity: sha512-d2JchlFIpZevZVReyqhQOekJmb1UH3rhZ5VX6sH3ty9ETE0TKQavpihvoScUXfKKpW6HZC0MrFGRU0ZtD+w3gA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tauri-apps/cli@2.11.1': - resolution: {integrity: sha512-rpEbaJ/HzNb6fwsquwoAbq29/Vt4gADhS423A8fdkwL4edJ0wZmoB8ar7O6JPDL834MUKOCm/rrJ7c9oAaEaYQ==} + '@tauri-apps/cli@2.11.2': + resolution: {integrity: sha512-bk3HemqvGRoy+5D/dVMUQHKMYLglD0jVnMm/0iGMH6ufZ+p8r14m6BpIixwij3PBvZdvORUp1YifTD8QxVZ1Nw==} engines: {node: '>= 10'} hasBin: true @@ -1283,17 +1083,8 @@ packages: '@tauri-apps/plugin-window-state@2.4.1': resolution: {integrity: sha512-OuvdrzyY8Q5Dbzpj+GcrnV1iCeoZbcFdzMjanZMMcAEUNy/6PH5pxZPXpaZLOR7whlzXiuzx0L9EKZbH7zpdRw==} - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.27.0': - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.28.0': - resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} '@types/byte-size@8.1.2': resolution: {integrity: sha512-jGyVzYu6avI8yuqQCNTZd65tzI8HZrLjKX9sdMqZrGWVlNChu0rf6p368oVEDCYJe5BMx2Ov04tD1wqtgTwGSA==} @@ -1331,9 +1122,6 @@ packages: '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} @@ -1355,8 +1143,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.12.4': - resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==} + '@types/node@25.8.0': + resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -1389,17 +1177,24 @@ packages: peerDependencies: react: '>= 16.8.0' - '@vitejs/plugin-react-swc@4.3.0': - resolution: {integrity: sha512-mOkXCII839dHyAt/gpoSlm28JIVDwhZ6tnG6wJxUy2bmOx7UaPjvOyIDf3SFv5s7Eo7HVaq6kRcu6YMEzt5Z7w==} + '@vitejs/plugin-react-swc@4.3.1': + resolution: {integrity: sha512-PaeokKjAGraNN+s5SIApgsktnJprIyt3zgEIu7awnEdfn29QiB2crTcCzyi2XGpX9rUnTc0cKU07Wm0N0g7H2w==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^4 || ^5 || ^6 || ^7 || ^8 - '@vitejs/plugin-react@5.2.0': - resolution: {integrity: sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==} + '@vitejs/plugin-react@6.0.2': + resolution: {integrity: sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 + babel-plugin-react-compiler: ^1.0.0 + vite: ^8.0.0 + peerDependenciesMeta: + '@rolldown/plugin-babel': + optional: true + babel-plugin-react-compiler: + optional: true ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -1453,8 +1248,8 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.29: - resolution: {integrity: sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==} + baseline-browser-mapping@2.10.30: + resolution: {integrity: sha512-xjOFN16Ha1+Rz4nFYKqHU/LSB+gx/Vi3yQLX7r7sAW+Wa+8hhF2h4pvqTrTMc8+WcDBEunnUurr46Jvv0jk3Vg==} engines: {node: '>=6.0.0'} hasBin: true @@ -1732,16 +1527,32 @@ packages: dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-serializer@3.1.1: + resolution: {integrity: sha512-4MEa38/QexBob6gFNwu+EGdWvhJ1OKuNwdYY3Y3NyeWDQfnGeDYQUDfIRzWu5B5gsv03so2Uxd28YC6zrsx3Lw==} + engines: {node: '>=20.19.0'} + domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + domelementtype@3.0.0: + resolution: {integrity: sha512-umCQid3jKbDmVjx8jGaW7uUykm4DEUeyV21hPxNMo2nV955DhUThwqyOIDtreepP31hl84X7G5U9ZfsWvIB3Pg==} + engines: {node: '>=20.19.0'} + domhandler@5.0.3: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} + domhandler@6.0.1: + resolution: {integrity: sha512-gYzvtM72ZtxQO0T048kd6HWSbbGCNOUwcnfQ01cqIJ4X2IYKFFHZ5mKvrQETcFXxsRObZulDaKmy//R7TPtsBg==} + engines: {node: '>=20.19.0'} + domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + domutils@4.0.2: + resolution: {integrity: sha512-qI4JLRKnSzqFqr7hAlS5xQDusBCjKSEG4t4+7aNrIQMHBcsC2TGEhuyABJdYkgSewL57PNLYEiibY2iPKhKpaA==} + engines: {node: '>=20.19.0'} + dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -1749,8 +1560,8 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - electron-to-chromium@1.5.353: - resolution: {integrity: sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w==} + electron-to-chromium@1.5.357: + resolution: {integrity: sha512-NHlTIQDK8fmVwHwuIzmXYEJ1Ewq3D9wDNc0cWXxDGysP6Pb21giwGNkxiTifyKy/4SoPuN5l6GLP1W9Sv7zB2g==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1759,9 +1570,9 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@7.0.1: - resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} - engines: {node: '>=0.12'} + entities@8.0.0: + resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} + engines: {node: '>=20.19.0'} error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} @@ -1793,11 +1604,6 @@ packages: es-toolkit@1.46.1: resolution: {integrity: sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==} - esbuild@0.27.7: - resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} - engines: {node: '>=18'} - hasBin: true - escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -1965,11 +1771,11 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - html-dom-parser@5.1.8: - resolution: {integrity: sha512-MCIUng//mF2qTtGHXJWr6OLfHWmg3Pm8ezpfiltF83tizPWY17JxT4dRLE8lykJ5bChJELoY3onQKPbufJHxYA==} + html-dom-parser@7.1.0: + resolution: {integrity: sha512-83BgaFSW/Sj6QTotGenvPvKfGxFzpFfrJNYes77mzqnq+YjVm12d4qeG0+108w4ejnam/+nCnnLuyyJlXkuPtA==} - html-react-parser@5.2.17: - resolution: {integrity: sha512-m+K/7Moq1jodAB4VL0RXSOmtwLUYoAsikZhwd+hGQe5Vtw2dbWfpFd60poxojMU0Tsh9w59mN1QLEcoHz0Dx9w==} + html-react-parser@6.1.1: + resolution: {integrity: sha512-TitVBqKNyZYGVutHdALEtaNZV29QmuBgJcqeWnF4voLunG6YBlMpnm5XCVHQhxhUPW14nw1LW27NReGbCfPU0A==} peerDependencies: '@types/react': 0.14 || 15 || 16 || 17 || 18 || 19 react: 0.14 || 15 || 16 || 17 || 18 || 19 @@ -1980,8 +1786,9 @@ packages: html-url-attributes@3.0.1: resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} - htmlparser2@10.1.0: - resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} + htmlparser2@12.0.0: + resolution: {integrity: sha512-Tz7u1i95/g2x2jz81+x0FBVhBhY5aRTvD3tXXdFaljuNdzDLJ8UGNRrTcj2cgQvAg3iW/h77Fz15nLW0L0CrZw==} + engines: {node: '>=20.19.0'} immer@10.2.0: resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==} @@ -2168,6 +1975,80 @@ packages: engines: {node: '>=6'} hasBin: true + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -2410,9 +2291,9 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - p-timeout@6.1.4: - resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} - engines: {node: '>=14.16'} + p-timeout@7.0.1: + resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} + engines: {node: '>=20'} parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -2516,8 +2397,8 @@ packages: peerDependencies: react: ^19.2.6 - react-hook-form@7.75.0: - resolution: {integrity: sha512-Ovv94H+0p3sJ7B9B5QxPuCP1u8V/cHuVGyH55cSwodYDtoJwK+fqk3vjfIgSX59I2U/bU4z0nRJ9HMLpNiWEmw==} + react-hook-form@7.76.0: + resolution: {integrity: sha512-eKtLGgFeSgkHqQD8J59AMZ9a4uD1D83iSIzt4YlTGD7liDen5rrjcUO1rVIGd9yC1gofryjtHbv+4ny4hkLWlw==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 @@ -2550,8 +2431,8 @@ packages: peerDependencies: react: '*' - react-redux@9.2.0: - resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} + react-redux@9.3.0: + resolution: {integrity: sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==} peerDependencies: '@types/react': ^18.2.25 || ^19 react: ^18.0 || ^19 @@ -2562,10 +2443,6 @@ packages: redux: optional: true - react-refresh@0.18.0: - resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} - engines: {node: '>=0.10.0'} - react-router-dom@6.30.3: resolution: {integrity: sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==} engines: {node: '>=14.0.0'} @@ -2654,9 +2531,9 @@ packages: engines: {node: '>= 0.4'} hasBin: true - rollup@4.60.3: - resolution: {integrity: sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} + rolldown@1.0.1: + resolution: {integrity: sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true rxjs@7.8.2: @@ -2674,8 +2551,8 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} - sass@1.92.1: - resolution: {integrity: sha512-ffmsdbwqb3XeyR8jJR6KelIXARM9bFQe8A6Q3W4Klmwy5Ckd5gz7jgUNHo4UOqutU5Sk1DtKLbpDP0nLCg1xqQ==} + sass@1.99.0: + resolution: {integrity: sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==} engines: {node: '>=14.0.0'} hasBin: true @@ -2884,8 +2761,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -2946,15 +2823,16 @@ packages: victory-vendor@37.3.6: resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} - vite@7.3.3: - resolution: {integrity: sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==} + vite@8.0.13: + resolution: {integrity: sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 - lightningcss: ^1.21.0 sass: ^1.70.0 sass-embedded: ^1.70.0 stylus: '>=0.54.8' @@ -2965,12 +2843,14 @@ packages: peerDependenciesMeta: '@types/node': optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true jiti: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -3125,8 +3005,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.28.6': {} - '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.28.5': {} @@ -3142,16 +3020,6 @@ snapshots: dependencies: '@babel/types': 7.29.0 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/runtime@7.29.2': {} '@babel/template@7.28.6': @@ -3212,6 +3080,22 @@ snapshots: '@biomejs/cli-win32-x64@2.4.15': optional: true + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.28.6 @@ -3295,84 +3179,6 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@esbuild/aix-ppc64@0.27.7': - optional: true - - '@esbuild/android-arm64@0.27.7': - optional: true - - '@esbuild/android-arm@0.27.7': - optional: true - - '@esbuild/android-x64@0.27.7': - optional: true - - '@esbuild/darwin-arm64@0.27.7': - optional: true - - '@esbuild/darwin-x64@0.27.7': - optional: true - - '@esbuild/freebsd-arm64@0.27.7': - optional: true - - '@esbuild/freebsd-x64@0.27.7': - optional: true - - '@esbuild/linux-arm64@0.27.7': - optional: true - - '@esbuild/linux-arm@0.27.7': - optional: true - - '@esbuild/linux-ia32@0.27.7': - optional: true - - '@esbuild/linux-loong64@0.27.7': - optional: true - - '@esbuild/linux-mips64el@0.27.7': - optional: true - - '@esbuild/linux-ppc64@0.27.7': - optional: true - - '@esbuild/linux-riscv64@0.27.7': - optional: true - - '@esbuild/linux-s390x@0.27.7': - optional: true - - '@esbuild/linux-x64@0.27.7': - optional: true - - '@esbuild/netbsd-arm64@0.27.7': - optional: true - - '@esbuild/netbsd-x64@0.27.7': - optional: true - - '@esbuild/openbsd-arm64@0.27.7': - optional: true - - '@esbuild/openbsd-x64@0.27.7': - optional: true - - '@esbuild/openharmony-arm64@0.27.7': - optional: true - - '@esbuild/sunos-x64@0.27.7': - optional: true - - '@esbuild/win32-arm64@0.27.7': - optional: true - - '@esbuild/win32-ia32@0.27.7': - optional: true - - '@esbuild/win32-x64@0.27.7': - optional: true - '@floating-ui/core@1.7.5': dependencies: '@floating-ui/utils': 0.2.11 @@ -3422,9 +3228,9 @@ snapshots: - '@types/react' - supports-color - '@hookform/resolvers@3.10.0(react-hook-form@7.75.0(react@19.2.6))': + '@hookform/resolvers@3.10.0(react-hook-form@7.76.0(react@19.2.6))': dependencies: - react-hook-form: 7.75.0(react@19.2.6) + react-hook-form: 7.76.0(react@19.2.6) '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -3445,6 +3251,15 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@oxc-project/types@0.130.0': {} + '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -3520,7 +3335,7 @@ snapshots: '@react-hook/passive-layout-effect': 1.2.1(react@19.2.6) react: 19.2.6 - '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1))(react@19.2.6)': + '@reduxjs/toolkit@2.12.0(react-redux@9.3.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1))(react@19.2.6)': dependencies: '@standard-schema/spec': 1.1.0 '@standard-schema/utils': 0.3.0 @@ -3530,88 +3345,60 @@ snapshots: reselect: 5.1.1 optionalDependencies: react: 19.2.6 - react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1) + react-redux: 9.3.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1) '@remix-run/router@1.23.2': {} - '@rolldown/pluginutils@1.0.0-rc.3': {} - - '@rolldown/pluginutils@1.0.0-rc.7': {} - - '@rollup/rollup-android-arm-eabi@4.60.3': - optional: true - - '@rollup/rollup-android-arm64@4.60.3': - optional: true - - '@rollup/rollup-darwin-arm64@4.60.3': - optional: true - - '@rollup/rollup-darwin-x64@4.60.3': - optional: true - - '@rollup/rollup-freebsd-arm64@4.60.3': - optional: true - - '@rollup/rollup-freebsd-x64@4.60.3': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.60.3': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.60.3': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.60.3': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.60.3': + '@rolldown/binding-android-arm64@1.0.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.60.3': + '@rolldown/binding-darwin-arm64@1.0.1': optional: true - '@rollup/rollup-linux-loong64-musl@4.60.3': + '@rolldown/binding-darwin-x64@1.0.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.3': + '@rolldown/binding-freebsd-x64@1.0.1': optional: true - '@rollup/rollup-linux-ppc64-musl@4.60.3': + '@rolldown/binding-linux-arm-gnueabihf@1.0.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.3': + '@rolldown/binding-linux-arm64-gnu@1.0.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.60.3': + '@rolldown/binding-linux-arm64-musl@1.0.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.3': + '@rolldown/binding-linux-ppc64-gnu@1.0.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.60.3': + '@rolldown/binding-linux-s390x-gnu@1.0.1': optional: true - '@rollup/rollup-linux-x64-musl@4.60.3': + '@rolldown/binding-linux-x64-gnu@1.0.1': optional: true - '@rollup/rollup-openbsd-x64@4.60.3': + '@rolldown/binding-linux-x64-musl@1.0.1': optional: true - '@rollup/rollup-openharmony-arm64@4.60.3': + '@rolldown/binding-openharmony-arm64@1.0.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.60.3': + '@rolldown/binding-wasm32-wasi@1.0.1': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rollup/rollup-win32-ia32-msvc@4.60.3': + '@rolldown/binding-win32-arm64-msvc@1.0.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.60.3': + '@rolldown/binding-win32-x64-msvc@1.0.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.60.3': - optional: true + '@rolldown/pluginutils@1.0.1': {} '@shikijs/engine-oniguruma@3.23.0': dependencies: @@ -3850,52 +3637,52 @@ snapshots: '@tauri-apps/api@2.11.0': {} - '@tauri-apps/cli-darwin-arm64@2.11.1': + '@tauri-apps/cli-darwin-arm64@2.11.2': optional: true - '@tauri-apps/cli-darwin-x64@2.11.1': + '@tauri-apps/cli-darwin-x64@2.11.2': optional: true - '@tauri-apps/cli-linux-arm-gnueabihf@2.11.1': + '@tauri-apps/cli-linux-arm-gnueabihf@2.11.2': optional: true - '@tauri-apps/cli-linux-arm64-gnu@2.11.1': + '@tauri-apps/cli-linux-arm64-gnu@2.11.2': optional: true - '@tauri-apps/cli-linux-arm64-musl@2.11.1': + '@tauri-apps/cli-linux-arm64-musl@2.11.2': optional: true - '@tauri-apps/cli-linux-riscv64-gnu@2.11.1': + '@tauri-apps/cli-linux-riscv64-gnu@2.11.2': optional: true - '@tauri-apps/cli-linux-x64-gnu@2.11.1': + '@tauri-apps/cli-linux-x64-gnu@2.11.2': optional: true - '@tauri-apps/cli-linux-x64-musl@2.11.1': + '@tauri-apps/cli-linux-x64-musl@2.11.2': optional: true - '@tauri-apps/cli-win32-arm64-msvc@2.11.1': + '@tauri-apps/cli-win32-arm64-msvc@2.11.2': optional: true - '@tauri-apps/cli-win32-ia32-msvc@2.11.1': + '@tauri-apps/cli-win32-ia32-msvc@2.11.2': optional: true - '@tauri-apps/cli-win32-x64-msvc@2.11.1': + '@tauri-apps/cli-win32-x64-msvc@2.11.2': optional: true - '@tauri-apps/cli@2.11.1': + '@tauri-apps/cli@2.11.2': optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 2.11.1 - '@tauri-apps/cli-darwin-x64': 2.11.1 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.11.1 - '@tauri-apps/cli-linux-arm64-gnu': 2.11.1 - '@tauri-apps/cli-linux-arm64-musl': 2.11.1 - '@tauri-apps/cli-linux-riscv64-gnu': 2.11.1 - '@tauri-apps/cli-linux-x64-gnu': 2.11.1 - '@tauri-apps/cli-linux-x64-musl': 2.11.1 - '@tauri-apps/cli-win32-arm64-msvc': 2.11.1 - '@tauri-apps/cli-win32-ia32-msvc': 2.11.1 - '@tauri-apps/cli-win32-x64-msvc': 2.11.1 + '@tauri-apps/cli-darwin-arm64': 2.11.2 + '@tauri-apps/cli-darwin-x64': 2.11.2 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.11.2 + '@tauri-apps/cli-linux-arm64-gnu': 2.11.2 + '@tauri-apps/cli-linux-arm64-musl': 2.11.2 + '@tauri-apps/cli-linux-riscv64-gnu': 2.11.2 + '@tauri-apps/cli-linux-x64-gnu': 2.11.2 + '@tauri-apps/cli-linux-x64-musl': 2.11.2 + '@tauri-apps/cli-win32-arm64-msvc': 2.11.2 + '@tauri-apps/cli-win32-ia32-msvc': 2.11.2 + '@tauri-apps/cli-win32-x64-msvc': 2.11.2 '@tauri-apps/plugin-clipboard-manager@2.3.2': dependencies: @@ -3941,26 +3728,10 @@ snapshots: dependencies: '@tauri-apps/api': 2.11.0 - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.29.3 - '@babel/types': 7.29.0 - '@types/babel__generator': 7.27.0 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.28.0 - - '@types/babel__generator@7.27.0': - dependencies: - '@babel/types': 7.29.0 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.29.3 - '@babel/types': 7.29.0 - - '@types/babel__traverse@7.28.0': + '@tybys/wasm-util@0.10.2': dependencies: - '@babel/types': 7.29.0 + tslib: 2.8.1 + optional: true '@types/byte-size@8.1.2': {} @@ -3996,8 +3767,6 @@ snapshots: dependencies: '@types/estree': 1.0.9 - '@types/estree@1.0.8': {} - '@types/estree@1.0.9': {} '@types/file-saver@2.0.7': {} @@ -4018,9 +3787,9 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.12.4': + '@types/node@25.8.0': dependencies: - undici-types: 7.16.0 + undici-types: 7.24.6 '@types/parse-json@4.0.2': {} @@ -4047,25 +3816,18 @@ snapshots: '@use-gesture/core': 10.3.1 react: 19.2.6 - '@vitejs/plugin-react-swc@4.3.0(vite@7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0))': + '@vitejs/plugin-react-swc@4.3.1(vite@8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0))': dependencies: - '@rolldown/pluginutils': 1.0.0-rc.7 + '@rolldown/pluginutils': 1.0.1 '@swc/core': 1.15.33 - vite: 7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@5.2.0(vite@7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0))': + '@vitejs/plugin-react@6.0.2(vite@8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0))': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) - '@rolldown/pluginutils': 1.0.0-rc.3 - '@types/babel__core': 7.20.5 - react-refresh: 0.18.0 - vite: 7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0) - transitivePeerDependencies: - - supports-color + '@rolldown/pluginutils': 1.0.1 + vite: 8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0) ansi-regex@5.0.1: {} @@ -4121,7 +3883,7 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.10.29: {} + baseline-browser-mapping@2.10.30: {} boolbase@1.0.0: {} @@ -4140,9 +3902,9 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.29 + baseline-browser-mapping: 2.10.30 caniuse-lite: 1.0.30001792 - electron-to-chromium: 1.5.353 + electron-to-chromium: 1.5.357 node-releases: 2.0.44 update-browserslist-db: 1.2.3(browserslist@4.28.2) @@ -4373,8 +4135,7 @@ snapshots: detect-browser@5.3.0: {} - detect-libc@2.1.2: - optional: true + detect-libc@2.1.2: {} devlop@1.1.0: dependencies: @@ -4386,18 +4147,36 @@ snapshots: domhandler: 5.0.3 entities: 4.5.0 + dom-serializer@3.1.1: + dependencies: + domelementtype: 3.0.0 + domhandler: 6.0.1 + entities: 8.0.0 + domelementtype@2.3.0: {} + domelementtype@3.0.0: {} + domhandler@5.0.3: dependencies: domelementtype: 2.3.0 + domhandler@6.0.1: + dependencies: + domelementtype: 3.0.0 + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 + domutils@4.0.2: + dependencies: + dom-serializer: 3.1.1 + domelementtype: 3.0.0 + domhandler: 6.0.1 + dot-case@3.0.4: dependencies: no-case: 3.0.4 @@ -4409,13 +4188,13 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - electron-to-chromium@1.5.353: {} + electron-to-chromium@1.5.357: {} emoji-regex@8.0.0: {} entities@4.5.0: {} - entities@7.0.1: {} + entities@8.0.0: {} error-ex@1.3.4: dependencies: @@ -4501,35 +4280,6 @@ snapshots: es-toolkit@1.46.1: {} - esbuild@0.27.7: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.7 - '@esbuild/android-arm': 0.27.7 - '@esbuild/android-arm64': 0.27.7 - '@esbuild/android-x64': 0.27.7 - '@esbuild/darwin-arm64': 0.27.7 - '@esbuild/darwin-x64': 0.27.7 - '@esbuild/freebsd-arm64': 0.27.7 - '@esbuild/freebsd-x64': 0.27.7 - '@esbuild/linux-arm': 0.27.7 - '@esbuild/linux-arm64': 0.27.7 - '@esbuild/linux-ia32': 0.27.7 - '@esbuild/linux-loong64': 0.27.7 - '@esbuild/linux-mips64el': 0.27.7 - '@esbuild/linux-ppc64': 0.27.7 - '@esbuild/linux-riscv64': 0.27.7 - '@esbuild/linux-s390x': 0.27.7 - '@esbuild/linux-x64': 0.27.7 - '@esbuild/netbsd-arm64': 0.27.7 - '@esbuild/netbsd-x64': 0.27.7 - '@esbuild/openbsd-arm64': 0.27.7 - '@esbuild/openbsd-x64': 0.27.7 - '@esbuild/openharmony-arm64': 0.27.7 - '@esbuild/sunos-x64': 0.27.7 - '@esbuild/win32-arm64': 0.27.7 - '@esbuild/win32-ia32': 0.27.7 - '@esbuild/win32-x64': 0.27.7 - escalade@3.2.0: {} escape-string-regexp@1.0.5: {} @@ -4695,15 +4445,15 @@ snapshots: hosted-git-info@2.8.9: {} - html-dom-parser@5.1.8: + html-dom-parser@7.1.0: dependencies: - domhandler: 5.0.3 - htmlparser2: 10.1.0 + domhandler: 6.0.1 + htmlparser2: 12.0.0 - html-react-parser@5.2.17(@types/react@19.2.14)(react@19.2.6): + html-react-parser@6.1.1(@types/react@19.2.14)(react@19.2.6): dependencies: - domhandler: 5.0.3 - html-dom-parser: 5.1.8 + domhandler: 6.0.1 + html-dom-parser: 7.1.0 react: 19.2.6 react-property: 2.0.2 style-to-js: 1.1.21 @@ -4712,12 +4462,12 @@ snapshots: html-url-attributes@3.0.1: {} - htmlparser2@10.1.0: + htmlparser2@12.0.0: dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 7.0.1 + domelementtype: 3.0.0 + domhandler: 6.0.1 + domutils: 4.0.2 + entities: 8.0.0 immer@10.2.0: {} @@ -4894,6 +4644,55 @@ snapshots: json5@2.2.3: {} + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + lines-and-columns@1.2.4: {} linkify-it@5.0.0: @@ -5271,7 +5070,7 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - p-timeout@6.1.4: {} + p-timeout@7.0.1: {} parent-module@1.0.1: dependencies: @@ -5359,7 +5158,7 @@ snapshots: react: 19.2.6 scheduler: 0.27.0 - react-hook-form@7.75.0(react@19.2.6): + react-hook-form@7.76.0(react@19.2.6): dependencies: react: 19.2.6 @@ -5400,7 +5199,7 @@ snapshots: qr.js: 0.0.0 react: 19.2.6 - react-redux@9.2.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1): + react-redux@9.3.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 react: 19.2.6 @@ -5409,8 +5208,6 @@ snapshots: '@types/react': 19.2.14 redux: 5.0.1 - react-refresh@0.18.0: {} - react-router-dom@6.30.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: '@remix-run/router': 1.23.2 @@ -5446,7 +5243,7 @@ snapshots: recharts@3.8.1(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react-is@16.13.1)(react@19.2.6)(redux@5.0.1): dependencies: - '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1))(react@19.2.6) + '@reduxjs/toolkit': 2.12.0(react-redux@9.3.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1))(react@19.2.6) clsx: 2.1.1 decimal.js-light: 2.5.1 es-toolkit: 1.46.1 @@ -5455,7 +5252,7 @@ snapshots: react: 19.2.6 react-dom: 19.2.6(react@19.2.6) react-is: 16.13.1 - react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1) + react-redux: 9.3.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1) reselect: 5.1.1 tiny-invariant: 1.3.3 use-sync-external-store: 1.6.0(react@19.2.6) @@ -5525,36 +5322,26 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - rollup@4.60.3: + rolldown@1.0.1: dependencies: - '@types/estree': 1.0.8 + '@oxc-project/types': 0.130.0 + '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.60.3 - '@rollup/rollup-android-arm64': 4.60.3 - '@rollup/rollup-darwin-arm64': 4.60.3 - '@rollup/rollup-darwin-x64': 4.60.3 - '@rollup/rollup-freebsd-arm64': 4.60.3 - '@rollup/rollup-freebsd-x64': 4.60.3 - '@rollup/rollup-linux-arm-gnueabihf': 4.60.3 - '@rollup/rollup-linux-arm-musleabihf': 4.60.3 - '@rollup/rollup-linux-arm64-gnu': 4.60.3 - '@rollup/rollup-linux-arm64-musl': 4.60.3 - '@rollup/rollup-linux-loong64-gnu': 4.60.3 - '@rollup/rollup-linux-loong64-musl': 4.60.3 - '@rollup/rollup-linux-ppc64-gnu': 4.60.3 - '@rollup/rollup-linux-ppc64-musl': 4.60.3 - '@rollup/rollup-linux-riscv64-gnu': 4.60.3 - '@rollup/rollup-linux-riscv64-musl': 4.60.3 - '@rollup/rollup-linux-s390x-gnu': 4.60.3 - '@rollup/rollup-linux-x64-gnu': 4.60.3 - '@rollup/rollup-linux-x64-musl': 4.60.3 - '@rollup/rollup-openbsd-x64': 4.60.3 - '@rollup/rollup-openharmony-arm64': 4.60.3 - '@rollup/rollup-win32-arm64-msvc': 4.60.3 - '@rollup/rollup-win32-ia32-msvc': 4.60.3 - '@rollup/rollup-win32-x64-gnu': 4.60.3 - '@rollup/rollup-win32-x64-msvc': 4.60.3 - fsevents: 2.3.3 + '@rolldown/binding-android-arm64': 1.0.1 + '@rolldown/binding-darwin-arm64': 1.0.1 + '@rolldown/binding-darwin-x64': 1.0.1 + '@rolldown/binding-freebsd-x64': 1.0.1 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.1 + '@rolldown/binding-linux-arm64-gnu': 1.0.1 + '@rolldown/binding-linux-arm64-musl': 1.0.1 + '@rolldown/binding-linux-ppc64-gnu': 1.0.1 + '@rolldown/binding-linux-s390x-gnu': 1.0.1 + '@rolldown/binding-linux-x64-gnu': 1.0.1 + '@rolldown/binding-linux-x64-musl': 1.0.1 + '@rolldown/binding-openharmony-arm64': 1.0.1 + '@rolldown/binding-wasm32-wasi': 1.0.1 + '@rolldown/binding-win32-arm64-msvc': 1.0.1 + '@rolldown/binding-win32-x64-msvc': 1.0.1 rxjs@7.8.2: dependencies: @@ -5579,7 +5366,7 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 - sass@1.92.1: + sass@1.99.0: dependencies: chokidar: 4.0.3 immutable: 5.1.5 @@ -5834,7 +5621,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.16.0: {} + undici-types@7.24.6: {} unified@11.0.5: dependencies: @@ -5924,18 +5711,17 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite@7.3.3(@types/node@24.12.4)(sass@1.92.1)(yaml@2.9.0): + vite@8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0): dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.4) + lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.14 - rollup: 4.60.3 + rolldown: 1.0.1 tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 24.12.4 + '@types/node': 25.8.0 fsevents: 2.3.3 - sass: 1.92.1 + sass: 1.99.0 yaml: 2.9.0 which-boxed-primitive@1.1.1: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 000000000..65c830c84 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +allowBuilds: + '@parcel/watcher': true + '@swc/core': true + esbuild: true diff --git a/src-tauri/.env b/src-tauri/.env new file mode 100644 index 000000000..4303819c4 --- /dev/null +++ b/src-tauri/.env @@ -0,0 +1 @@ +DATABASE_URL=sqlite:dev.db diff --git a/src-tauri/.sqlx/query-50543a38f8f09cd45b16bf8b93d2ff42252aa0833f57c8ffa98e3471b9e663a1.json b/src-tauri/.sqlx/query-1c07ca7013959226ca9af064037bb64da07f7023f58ff8678d828a0ba50e2470.json similarity index 84% rename from src-tauri/.sqlx/query-50543a38f8f09cd45b16bf8b93d2ff42252aa0833f57c8ffa98e3471b9e663a1.json rename to src-tauri/.sqlx/query-1c07ca7013959226ca9af064037bb64da07f7023f58ff8678d828a0ba50e2470.json index 7692367f0..d5164870d 100644 --- a/src-tauri/.sqlx/query-50543a38f8f09cd45b16bf8b93d2ff42252aa0833f57c8ffa98e3471b9e663a1.json +++ b/src-tauri/.sqlx/query-1c07ca7013959226ca9af064037bb64da07f7023f58ff8678d828a0ba50e2470.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\",\n posture_check_required FROM location WHERE instance_id = $1 AND service_location_mode <= $2 ORDER BY name ASC", + "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\",\n mfa_method \"mfa_method: _\", posture_check_required FROM location WHERE instance_id = $1 AND service_location_mode <= $2 ORDER BY name ASC", "describe": { "columns": [ { @@ -69,8 +69,13 @@ "type_info": "Integer" }, { - "name": "posture_check_required", + "name": "mfa_method: _", "ordinal": 13, + "type_info": "Integer" + }, + { + "name": "posture_check_required", + "ordinal": 14, "type_info": "Bool" } ], @@ -91,8 +96,9 @@ false, false, false, + true, false ] }, - "hash": "50543a38f8f09cd45b16bf8b93d2ff42252aa0833f57c8ffa98e3471b9e663a1" + "hash": "1c07ca7013959226ca9af064037bb64da07f7023f58ff8678d828a0ba50e2470" } diff --git a/src-tauri/.sqlx/query-858556d40a6fc015f2664045a00837ec18e3c0fd94b6ded74a60ac6edc57a5b3.json b/src-tauri/.sqlx/query-49039d91cfdefbb32284d15af739a2090ba7baf9dee8cf00e8800b9a5f891fab.json similarity index 86% rename from src-tauri/.sqlx/query-858556d40a6fc015f2664045a00837ec18e3c0fd94b6ded74a60ac6edc57a5b3.json rename to src-tauri/.sqlx/query-49039d91cfdefbb32284d15af739a2090ba7baf9dee8cf00e8800b9a5f891fab.json index c6135a032..c6b90053b 100644 --- a/src-tauri/.sqlx/query-858556d40a6fc015f2664045a00837ec18e3c0fd94b6ded74a60ac6edc57a5b3.json +++ b/src-tauri/.sqlx/query-49039d91cfdefbb32284d15af739a2090ba7baf9dee8cf00e8800b9a5f891fab.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id, instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\", posture_check_required FROM location WHERE service_location_mode <= $1 ORDER BY name ASC;", + "query": "SELECT id, instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\", mfa_method \"mfa_method: _\", posture_check_required FROM location WHERE service_location_mode <= $1 ORDER BY name ASC;", "describe": { "columns": [ { @@ -69,8 +69,13 @@ "type_info": "Integer" }, { - "name": "posture_check_required", + "name": "mfa_method: _", "ordinal": 13, + "type_info": "Integer" + }, + { + "name": "posture_check_required", + "ordinal": 14, "type_info": "Bool" } ], @@ -91,8 +96,9 @@ false, false, false, + true, false ] }, - "hash": "858556d40a6fc015f2664045a00837ec18e3c0fd94b6ded74a60ac6edc57a5b3" + "hash": "49039d91cfdefbb32284d15af739a2090ba7baf9dee8cf00e8800b9a5f891fab" } diff --git a/src-tauri/.sqlx/query-865203f8f64866f1895aede956dfd8f373772e3c406f4482e6a4022a796cd46b.json b/src-tauri/.sqlx/query-a25979219918af2df8abca48a48d7fba459b79b74d462565088bf27d8e9fcd5d.json similarity index 86% rename from src-tauri/.sqlx/query-865203f8f64866f1895aede956dfd8f373772e3c406f4482e6a4022a796cd46b.json rename to src-tauri/.sqlx/query-a25979219918af2df8abca48a48d7fba459b79b74d462565088bf27d8e9fcd5d.json index ddf2ceb96..48cdb545a 100644 --- a/src-tauri/.sqlx/query-865203f8f64866f1895aede956dfd8f373772e3c406f4482e6a4022a796cd46b.json +++ b/src-tauri/.sqlx/query-a25979219918af2df8abca48a48d7fba459b79b74d462565088bf27d8e9fcd5d.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\",\n posture_check_required FROM location WHERE id = $1", + "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\",\n mfa_method \"mfa_method: _\", posture_check_required FROM location WHERE id = $1", "describe": { "columns": [ { @@ -69,8 +69,13 @@ "type_info": "Integer" }, { - "name": "posture_check_required", + "name": "mfa_method: _", "ordinal": 13, + "type_info": "Integer" + }, + { + "name": "posture_check_required", + "ordinal": 14, "type_info": "Bool" } ], @@ -91,8 +96,9 @@ false, false, false, + true, false ] }, - "hash": "865203f8f64866f1895aede956dfd8f373772e3c406f4482e6a4022a796cd46b" + "hash": "a25979219918af2df8abca48a48d7fba459b79b74d462565088bf27d8e9fcd5d" } diff --git a/src-tauri/.sqlx/query-95133767a4ebbd331c17667752e9603c2d351b677f6fac46e944d34b4913ab71.json b/src-tauri/.sqlx/query-e16f46ba4c2365de31db15551084eddaabf35d813a54eced9d38c951965ce83e.json similarity index 58% rename from src-tauri/.sqlx/query-95133767a4ebbd331c17667752e9603c2d351b677f6fac46e944d34b4913ab71.json rename to src-tauri/.sqlx/query-e16f46ba4c2365de31db15551084eddaabf35d813a54eced9d38c951965ce83e.json index 372f9e15a..01577f676 100644 --- a/src-tauri/.sqlx/query-95133767a4ebbd331c17667752e9603c2d351b677f6fac46e944d34b4913ab71.json +++ b/src-tauri/.sqlx/query-e16f46ba4c2365de31db15551084eddaabf35d813a54eced9d38c951965ce83e.json @@ -1,12 +1,12 @@ { "db_name": "SQLite", - "query": "UPDATE location SET instance_id = $1, name = $2, address = $3, pubkey = $4, endpoint = $5, allowed_ips = $6, dns = $7, network_id = $8, route_all_traffic = $9, keepalive_interval = $10, location_mfa_mode = $11, service_location_mode = $12, posture_check_required = $13 WHERE id = $14", + "query": "UPDATE location SET instance_id = $1, name = $2, address = $3, pubkey = $4, endpoint = $5, allowed_ips = $6, dns = $7, network_id = $8, route_all_traffic = $9, keepalive_interval = $10, location_mfa_mode = $11, service_location_mode = $12, mfa_method = $13, posture_check_required = $14 WHERE id = $15", "describe": { "columns": [], "parameters": { - "Right": 14 + "Right": 15 }, "nullable": [] }, - "hash": "95133767a4ebbd331c17667752e9603c2d351b677f6fac46e944d34b4913ab71" + "hash": "e16f46ba4c2365de31db15551084eddaabf35d813a54eced9d38c951965ce83e" } diff --git a/src-tauri/.sqlx/query-7b9f3c02d868a7da19beed6aad5ee22962668200b1ffb1fb7df967be5af0c50c.json b/src-tauri/.sqlx/query-e27705d75d504385fbaea05c43eadecccdb12fcb43060dd383e7c9fd1516179e.json similarity index 55% rename from src-tauri/.sqlx/query-7b9f3c02d868a7da19beed6aad5ee22962668200b1ffb1fb7df967be5af0c50c.json rename to src-tauri/.sqlx/query-e27705d75d504385fbaea05c43eadecccdb12fcb43060dd383e7c9fd1516179e.json index 7eb7d1e7f..538701cfe 100644 --- a/src-tauri/.sqlx/query-7b9f3c02d868a7da19beed6aad5ee22962668200b1ffb1fb7df967be5af0c50c.json +++ b/src-tauri/.sqlx/query-e27705d75d504385fbaea05c43eadecccdb12fcb43060dd383e7c9fd1516179e.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "INSERT INTO location (instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode, service_location_mode, posture_check_required) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13) RETURNING id \"id!\"", + "query": "INSERT INTO location (instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode, service_location_mode, mfa_method, posture_check_required) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) RETURNING id \"id!\"", "describe": { "columns": [ { @@ -10,11 +10,11 @@ } ], "parameters": { - "Right": 13 + "Right": 14 }, "nullable": [ true ] }, - "hash": "7b9f3c02d868a7da19beed6aad5ee22962668200b1ffb1fb7df967be5af0c50c" + "hash": "e27705d75d504385fbaea05c43eadecccdb12fcb43060dd383e7c9fd1516179e" } diff --git a/src-tauri/.sqlx/query-ec008998cc09e79017a3edd82550df0afd4bd8488391475908272d9cf7c6dbd0.json b/src-tauri/.sqlx/query-f88f92313f52f0b2c584f48b40e6edb4bc14d96f3000bd58a3ca68eecb8e4a88.json similarity index 86% rename from src-tauri/.sqlx/query-ec008998cc09e79017a3edd82550df0afd4bd8488391475908272d9cf7c6dbd0.json rename to src-tauri/.sqlx/query-f88f92313f52f0b2c584f48b40e6edb4bc14d96f3000bd58a3ca68eecb8e4a88.json index dd6d4011f..ee360eaf0 100644 --- a/src-tauri/.sqlx/query-ec008998cc09e79017a3edd82550df0afd4bd8488391475908272d9cf7c6dbd0.json +++ b/src-tauri/.sqlx/query-f88f92313f52f0b2c584f48b40e6edb4bc14d96f3000bd58a3ca68eecb8e4a88.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\",\n posture_check_required FROM location WHERE pubkey = $1;", + "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\",\n mfa_method \"mfa_method: _\", posture_check_required FROM location WHERE pubkey = $1;", "describe": { "columns": [ { @@ -69,8 +69,13 @@ "type_info": "Integer" }, { - "name": "posture_check_required", + "name": "mfa_method: _", "ordinal": 13, + "type_info": "Integer" + }, + { + "name": "posture_check_required", + "ordinal": 14, "type_info": "Bool" } ], @@ -91,8 +96,9 @@ false, false, false, + true, false ] }, - "hash": "ec008998cc09e79017a3edd82550df0afd4bd8488391475908272d9cf7c6dbd0" + "hash": "f88f92313f52f0b2c584f48b40e6edb4bc14d96f3000bd58a3ca68eecb8e4a88" } diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 8ebb68502..bcce63edf 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -501,9 +501,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.16.3" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f" +checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" dependencies = [ "aws-lc-sys", "zeroize", @@ -511,9 +511,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7" +checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" dependencies = [ "cc", "cmake", @@ -4170,9 +4170,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.79" +version = "0.10.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf0b434746ee2832f4f0baf10137e1cabb18cbe6912c69e2e33263c45250f542" +checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" dependencies = [ "bitflags 2.11.1", "cfg-if", @@ -4210,9 +4210,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.115" +version = "0.9.116" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "158fe5b292746440aa6e7a7e690e55aeb72d41505e2804c23c6973ad0e9c9781" +checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4" dependencies = [ "cc", "libc", @@ -4426,18 +4426,18 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.12" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf0d9e68100b3a7989b4901972f265cd542e560a3a8a724e1e20322f4d06ce9" +checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.12" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a990e22f43e84855daf260dded30524ef4a9021cc7541c26540500a50b624389" +checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", @@ -6248,9 +6248,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.39.1" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4deba334e1190ba7cb498327affa11e5ece10d26a30ab2f27fcf09504b8d8b6" +checksum = "14311e7e9a03114cd4b65eedd54e8fed2945e17f08586ae97ef53bc0669f9581" dependencies = [ "libc", "memchr", @@ -6359,9 +6359,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.11.1" +version = "2.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93bd86d231f0a8138f11a02a584769fe4b703dc36ae133d783228dbc4801405" +checksum = "437404997acf375d85f1177afa7e11bb971f274ed6a7b83a2a3e339015f4cc28" dependencies = [ "anyhow", "bytes", @@ -6411,9 +6411,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.6.1" +version = "2.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a318b234cc2dea65f575467bafcfb76286bce228ebc3778e337d61d03213007" +checksum = "4aa1f9055fc23919a54e4e125052bed16ed04aef0487086e758fe01a67b451c7" dependencies = [ "anyhow", "cargo_toml", @@ -6432,9 +6432,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.6.1" +version = "2.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bd11644962add2549a60b7e7c6800f17d7020156e02f516021d8103e80cc528" +checksum = "e4a0319528a025a38c4078e7dae2c446f4e63620ddb0659a643ede1cb38f90e9" dependencies = [ "base64 0.22.1", "brotli", @@ -6459,9 +6459,9 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.6.1" +version = "2.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed9d3742a37a355d2e47c9af924e9fbc112abb76f9835d35d4780e318419502" +checksum = "ae6cb4e3896c21d2f6da5b31251d2faea0153bba56ed0e970f918115dbee4924" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -6473,9 +6473,9 @@ dependencies = [ [[package]] name = "tauri-plugin" -version = "2.6.1" +version = "2.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eefb2c18e8a605c23edb48fc56bb77381199e1a1e7f6ff0c9b970afe7b3cb8ee" +checksum = "e126abc9e84e35cdfd01596140a73a1850cdb0df0a23acf0185776c30b469a6e" dependencies = [ "anyhow", "glob", @@ -6713,9 +6713,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.11.1" +version = "2.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fef478ba1d2ac21c2d528740b24d0cb315e1e8b1111aae53fafac34804371fc" +checksum = "48222d7116c8807eaa6fe2f372e023fae125084e61e6eca6d70b7961cdf129ef" dependencies = [ "cookie", "dpi", @@ -6738,9 +6738,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.11.1" +version = "2.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3989df2ae1c476404fe0a2e8ffc4cfbde97e51efd613c2bb5355fbc9ab52cf0" +checksum = "b83849ee63ecb27a8e8d0fe51915ca215076914aca43f96db1179f0f415f6cd9" dependencies = [ "gtk", "http", @@ -6764,9 +6764,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d57200389a2f82b4b0a40ae29ca19b6978116e8f4d4e974c3234ce40c0ffbdec" +checksum = "092379df9a707631978e6c56b1bc2401d387f01e2d4a3c123360d167bbb9aa95" dependencies = [ "anyhow", "brotli", @@ -7096,7 +7096,7 @@ dependencies = [ "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 1.0.2", + "winnow 1.0.3", ] [[package]] @@ -7159,7 +7159,7 @@ dependencies = [ "indexmap 2.14.0", "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow 1.0.2", + "winnow 1.0.3", ] [[package]] @@ -7168,7 +7168,7 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.2", + "winnow 1.0.3", ] [[package]] @@ -8852,9 +8852,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" dependencies = [ "memchr", ] @@ -9182,7 +9182,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow 1.0.2", + "winnow 1.0.3", "zbus_macros", "zbus_names", "zvariant", @@ -9210,7 +9210,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" dependencies = [ "serde", - "winnow 1.0.2", + "winnow 1.0.3", "zvariant", ] @@ -9339,7 +9339,7 @@ dependencies = [ "enumflags2", "serde", "url", - "winnow 1.0.2", + "winnow 1.0.3", "zvariant_derive", "zvariant_utils", ] @@ -9367,5 +9367,5 @@ dependencies = [ "quote", "serde", "syn 2.0.117", - "winnow 1.0.2", + "winnow 1.0.3", ] diff --git a/src-tauri/build.rs b/src-tauri/build.rs index 3be5441f4..0bbd4977f 100644 --- a/src-tauri/build.rs +++ b/src-tauri/build.rs @@ -3,6 +3,12 @@ use vergen_git2::{Emitter, Git2Builder}; fn main() -> Result<(), Box> { println!("cargo:rerun-if-env-changed=DEFGUARD_CLIENT_BUILD_VERSION"); + println!("cargo:rerun-if-env-changed=DEFGUARD_CLIENT_DEV"); + println!("cargo::rustc-check-cfg=cfg(defguard_client_dev)"); + if std::env::var("DEFGUARD_CLIENT_DEV").is_ok() { + println!("cargo::rustc-cfg=defguard_client_dev"); + } + // set VERGEN_GIT_SHA env variable based on git commit hash let git2 = Git2Builder::default().branch(true).sha(true).build()?; Emitter::default().add_instructions(&git2)?.emit()?; diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index d8b4de1ba..935bd26cb 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -3,8 +3,13 @@ "identifier": "main-capability", "description": "Capability for the main window", "local": true, - "windows": ["main"], + "remote": { + "urls": ["http://localhost:5071/*", "http://localhost:5072/*"] + }, + "windows": ["new-ui", "old-ui"], "permissions": [ + "core:webview:allow-create-webview", + "core:webview:allow-create-webview-window", "core:default", "core:window:allow-create", "core:window:allow-center", @@ -49,6 +54,7 @@ "dialog:default", "clipboard-manager:allow-write-text", "process:allow-exit", + "allow-app-commands", { "identifier": "http:default", "allow": [ diff --git a/src-tauri/migrations/20260513120000_add_location_mfa_method.sql b/src-tauri/migrations/20260513120000_add_location_mfa_method.sql new file mode 100644 index 000000000..137ef86cf --- /dev/null +++ b/src-tauri/migrations/20260513120000_add_location_mfa_method.sql @@ -0,0 +1,6 @@ +-- 0 - TOTP +-- 2 - OIDC +-- NULL - unset (used for Disabled MFA mode locations) +ALTER TABLE location ADD COLUMN mfa_method INTEGER; +UPDATE location SET mfa_method = 0 WHERE location_mfa_mode = 2; +UPDATE location SET mfa_method = 2 WHERE location_mfa_mode = 3; diff --git a/src-tauri/permissions/default.toml b/src-tauri/permissions/default.toml new file mode 100644 index 000000000..725267507 --- /dev/null +++ b/src-tauri/permissions/default.toml @@ -0,0 +1,39 @@ +[[permission]] +identifier = "allow-app-commands" +description = "Allow all application commands for both UI windows (old-ui and new-ui)." +commands.allow = [ + "all_locations", + "save_device_config", + "all_instances", + "connect", + "disconnect", + "update_instance", + "location_stats", + "location_interface_details", + "all_connections", + "last_connection", + "active_connection", + "update_location_routing", + "delete_instance", + "parse_tunnel_config", + "save_tunnel", + "all_tunnels", + "open_link", + "tunnel_details", + "update_tunnel", + "delete_tunnel", + "get_latest_app_version", + "start_global_logwatcher", + "stop_global_logwatcher", + "command_get_app_config", + "command_set_app_config", + "get_provisioning_config", + "get_platform_header", + "set_location_mfa_method", + "open_new_ui_window", + "open_old_ui_window", + "swap_to_new_ui", + "swap_to_old_ui", + "all_active_connections", + "disconnect_locations", +] diff --git a/src-tauri/src/appstate.rs b/src-tauri/src/appstate.rs index 179b9a6b7..02e6ae4d1 100644 --- a/src-tauri/src/appstate.rs +++ b/src-tauri/src/appstate.rs @@ -1,6 +1,9 @@ use std::{collections::HashMap, sync::Mutex}; -use tauri::async_runtime::{spawn, JoinHandle}; +use tauri::{ + async_runtime::{spawn, JoinHandle}, + PhysicalPosition, +}; use tokio_util::sync::CancellationToken; use crate::{ @@ -15,6 +18,7 @@ use crate::{ pub struct AppState { pub log_watchers: Mutex>, pub app_config: Mutex, + pub tray_click_position: Mutex>>, stat_threads: Mutex>>, // location ID is the key pub provisioning_config: Mutex>, } @@ -25,6 +29,7 @@ impl AppState { Self { log_watchers: Mutex::new(HashMap::new()), app_config: Mutex::new(config), + tray_click_position: Mutex::new(None), stat_threads: Mutex::new(HashMap::new()), provisioning_config: Mutex::new(provisioning_config), } diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index a01e6f994..0d0bf13e8 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -29,10 +29,11 @@ use defguard_client::{ service, tray::{configure_tray_icon, setup_tray, show_main_window}, utils::load_log_targets, + window::*, LOG_FILENAME, VERSION, }; use log::{Level, LevelFilter}; -use tauri::{AppHandle, Builder, Manager, RunEvent, WindowEvent}; +use tauri::{AppHandle, Builder, Manager, RunEvent, WebviewUrl, WebviewWindowBuilder, WindowEvent}; use tauri_plugin_log::{Target, TargetKind}; #[macro_use] @@ -180,7 +181,14 @@ fn main() { command_get_app_config, command_set_app_config, get_provisioning_config, - get_platform_header + get_platform_header, + set_location_mfa_method, + open_new_ui_window, + open_old_ui_window, + swap_to_new_ui, + swap_to_old_ui, + all_active_connections, + disconnect_locations, ]) .on_window_event(|window, event| { if let WindowEvent::CloseRequested { api, .. } = event { @@ -339,6 +347,29 @@ fn main() { let state = AppState::new(config, provisioning_config); app.manage(state); + // Open new UI window. + let new_url = if cfg!(defguard_client_dev) { + WebviewUrl::External("http://localhost:5072".parse().unwrap()) + } else { + WebviewUrl::App("new-ui/".into()) + }; + WebviewWindowBuilder::new(app, NEW_UI_WINDOW_ID, new_url) + .title("New UI") + .inner_size(NEW_UI_WIDTH, NEW_UI_HEIGHT) + .visible(false) + .build()?; + + // Open old UI window. + let old_url = if cfg!(defguard_client_dev) { + WebviewUrl::External("http://localhost:5071".parse().unwrap()) + } else { + WebviewUrl::App("old-ui/index.html/".into()) + }; + WebviewWindowBuilder::new(app, OLD_UI_WINDOW_ID, old_url) + .title("Old UI") + .inner_size(OLD_UI_WIDTH, OLD_UI_HEIGHT) + .build()?; + info!("App setup completed, log level: {log_level}"); Ok(()) }) diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index eaf5cdb0b..bb2b342ae 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -14,14 +14,14 @@ use tauri::{AppHandle, Emitter, Manager, State}; const UPDATE_URL: &str = "https://pkgs.defguard.net/api/update/check"; use crate::{ - active_connections::{find_connection, get_connection_id_by_type}, + active_connections::{find_connection, get_connection_id_by_type, ACTIVE_CONNECTIONS}, app_config::{AppConfig, AppConfigPatch}, appstate::AppState, database::{ models::{ connection::{ActiveConnection, Connection, ConnectionInfo}, instance::{ClientTrafficPolicy, Instance, InstanceInfo}, - location::{Location, LocationMfaMode}, + location::{infer_mfa_method, Location, LocationMfaMethod, LocationMfaMode}, location_stats::LocationStats, tunnel::{Tunnel, TunnelConnection, TunnelConnectionInfo, TunnelStats}, wireguard_keys::WireguardKeys, @@ -185,6 +185,78 @@ pub async fn disconnect( } } +#[tauri::command(async)] +pub async fn disconnect_locations(location_ids: Vec, handle: AppHandle) -> Result<(), Error> { + debug!( + "Received a command to disconnect {} location(s): {location_ids:?}", + location_ids.len() + ); + let state = handle.state::(); + let mut any_disconnected = false; + + for location_id in location_ids { + match Location::find_by_id(&*DB_POOL, location_id).await? { + Some(location) if location.is_service_location() => { + debug!( + "Skipping service location {location}(ID: {location_id}) in \ + disconnect_locations" + ); + continue; + } + None => { + debug!("Location with ID {location_id} not found in the database, skipping."); + continue; + } + _ => {} + } + + let name = get_tunnel_or_location_name(location_id, ConnectionType::Location).await; + debug!("Disconnecting from location {name}(ID: {location_id})"); + + if let Some(connection) = state + .remove_connection(location_id, ConnectionType::Location) + .await + { + disconnect_interface(&connection).await?; + stop_log_watcher_task(&handle, &connection.interface_name)?; + if let Err(err) = maybe_update_instance_config(location_id, &handle).await { + match err { + Error::CoreNotEnterprise => { + debug!( + "Tried to fetch instance config from core after disconnecting from \ + {name}(ID: {location_id}), but the core is not enterprise." + ); + } + Error::NoToken => { + debug!( + "Tried to fetch instance config from core after disconnecting from \ + {name}(ID: {location_id}), but the instance has no polling token." + ); + } + _ => { + warn!( + "Error while trying to fetch instance config after disconnecting \ + from {name}(ID: {location_id}): {err}" + ); + } + } + } + info!("Disconnected from location {name}(ID: {location_id})"); + any_disconnected = true; + } else { + debug!("No active connection found for location {name}(ID: {location_id}), skipping."); + } + } + + if any_disconnected { + handle.emit(EventKey::ConnectionChanged.into(), ())?; + reload_tray_menu(&handle).await; + configure_tray_icon(&handle).await?; + } + + Ok(()) +} + /// Triggers poll on location's instance config. Config will be updated if there are no more active /// connections for this instance. async fn maybe_update_instance_config(location_id: Id, handle: &AppHandle) -> Result<(), Error> { @@ -418,6 +490,7 @@ pub struct LocationInfo { pub pubkey: String, pub network_id: Id, pub location_mfa_mode: LocationMfaMode, + pub mfa_method: Option, } impl LocationInfo { @@ -470,6 +543,7 @@ pub async fn all_locations(instance_id: Id) -> Result, Error> pubkey: location.pubkey, network_id: location.network_id, location_mfa_mode: location.location_mfa_mode, + mfa_method: location.mfa_method, }; location_info.push(info); } @@ -546,10 +620,13 @@ pub(crate) async fn locations_changed( let mut new_location = Location::::from(location); // Ignore `route_all_traffic` flag as Defguard core does not have it. new_location.route_all_traffic = false; + // Canonicalize mfa_method so a user-set value doesn't falsely trigger a + // config-change detection when the mode hasn't actually changed. + new_location.mfa_method = infer_mfa_method(new_location.location_mfa_mode, None); new_location }) .collect::>(); - let core_locations = device_config + let core_locations: HashSet = device_config .configs .iter() .map(|config| config.clone().into_location(instance.id)) @@ -637,6 +714,11 @@ pub(crate) async fn do_update_instance( current_location.dns = new_location.dns; current_location.location_mfa_mode = new_location.location_mfa_mode; current_location.service_location_mode = new_location.service_location_mode; + // Correct mfa_method to remain consistent with the (possibly updated) mfa_mode. + current_location.mfa_method = infer_mfa_method( + current_location.location_mfa_mode, + current_location.mfa_method, + ); current_location.posture_check_required = new_location.posture_check_required; current_location.save(transaction.as_mut()).await?; info!("Location {current_location} configuration updated for instance {instance}"); @@ -978,6 +1060,33 @@ pub async fn update_location_routing( } } +#[tauri::command(async)] +pub async fn set_location_mfa_method( + location_id: Id, + mfa_method: LocationMfaMethod, + handle: AppHandle, +) -> Result<(), Error> { + debug!("Received command to set MFA method for location {location_id}"); + if let Some(mut location) = Location::find_by_id(&*DB_POOL, location_id).await? { + let inferred = infer_mfa_method(location.location_mfa_mode, Some(mfa_method)); + debug!( + "Setting MFA method for location {}(ID: {location_id}) to {inferred:?}", + location.name, + ); + location.mfa_method = inferred; + location.save(&*DB_POOL).await?; + debug!( + "MFA method updated for location {}(ID: {location_id})", + location.name, + ); + handle.emit(EventKey::LocationUpdate.into(), ())?; + Ok(()) + } else { + error!("Location with ID {location_id} not found, cannot set MFA method"); + Err(Error::NotFound) + } +} + #[cfg(target_os = "macos")] #[tauri::command(async)] pub async fn delete_instance(instance_id: Id, handle: AppHandle) -> Result<(), Error> { @@ -1297,8 +1406,7 @@ fn select_reported_app_version( ) -> String { build_version_override .filter(|version| !version.trim().is_empty()) - .map(str::to_owned) - .unwrap_or_else(|| package_version.to_owned()) + .map_or_else(|| package_version.to_owned(), str::to_owned) } fn reported_app_version(handle: &AppHandle) -> String { @@ -1413,6 +1521,37 @@ pub fn get_platform_header() -> String { construct_platform_header() } +#[derive(Debug, Serialize)] +pub struct ActiveConnectionSummary { + pub id: Id, + pub name: String, + pub connection_type: ConnectionType, +} + +#[tauri::command(async)] +pub async fn all_active_connections() -> Result, Error> { + debug!("Getting information about all active connections."); + let connections = ACTIVE_CONNECTIONS.lock().await; + let mut result = Vec::with_capacity(connections.len()); + for conn in connections.iter() { + if conn.connection_type == ConnectionType::Location { + match Location::find_by_id(&*DB_POOL, conn.location_id).await? { + Some(location) if location.is_service_location() => continue, + None => continue, + _ => {} + } + } + let name = get_tunnel_or_location_name(conn.location_id, conn.connection_type).await; + result.push(ActiveConnectionSummary { + id: conn.location_id, + name, + connection_type: conn.connection_type, + }); + } + debug!("Returning {} active connections.", result.len()); + Ok(result) +} + #[cfg(test)] mod tests { use super::select_reported_app_version; diff --git a/src-tauri/src/database/models/location.rs b/src-tauri/src/database/models/location.rs index 6891b8f6b..85c470c35 100644 --- a/src-tauri/src/database/models/location.rs +++ b/src-tauri/src/database/models/location.rs @@ -22,7 +22,7 @@ use crate::{ }, }; -#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Type)] +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash, Type)] #[repr(u32)] #[serde(rename_all = "lowercase")] pub enum LocationMfaMode { @@ -64,6 +64,32 @@ impl From for ServiceLocationMode { } } +/// Discriminants match the proto `MfaMethod` enum. +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash, Type)] +#[repr(u32)] +#[serde(rename_all = "lowercase")] +pub enum LocationMfaMethod { + Totp = 0, + Email = 1, + Oidc = 2, + Biometric = 3, + MobileApprove = 4, +} + +pub(crate) fn infer_mfa_method( + mode: LocationMfaMode, + method: Option, +) -> Option { + match mode { + LocationMfaMode::Disabled => method, + LocationMfaMode::Internal => match method { + Some(LocationMfaMethod::Oidc) | None => Some(LocationMfaMethod::Totp), + Some(m) => Some(m), + }, + LocationMfaMode::External => Some(LocationMfaMethod::Oidc), + } +} + #[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash)] pub struct Location { pub id: I, @@ -80,6 +106,7 @@ pub struct Location { pub keepalive_interval: i64, pub location_mfa_mode: LocationMfaMode, pub service_location_mode: ServiceLocationMode, + pub mfa_method: Option, #[serde(default)] pub posture_check_required: bool, } @@ -114,7 +141,7 @@ impl Location { network_id, route_all_traffic, keepalive_interval, \ location_mfa_mode \"location_mfa_mode: LocationMfaMode\", \ service_location_mode \"service_location_mode: ServiceLocationMode\", \ - posture_check_required \ + mfa_method \"mfa_method: _\", posture_check_required \ FROM location WHERE service_location_mode <= $1 \ ORDER BY name ASC;", max_service_location_mode @@ -132,8 +159,8 @@ impl Location { "UPDATE location SET instance_id = $1, name = $2, address = $3, pubkey = $4, \ endpoint = $5, allowed_ips = $6, dns = $7, network_id = $8, route_all_traffic = $9, \ keepalive_interval = $10, location_mfa_mode = $11, service_location_mode = $12, \ - posture_check_required = $13 \ - WHERE id = $14", + mfa_method = $13, posture_check_required = $14 \ + WHERE id = $15", self.instance_id, self.name, self.address, @@ -146,6 +173,7 @@ impl Location { self.keepalive_interval, self.location_mfa_mode, self.service_location_mode, + self.mfa_method, self.posture_check_required, self.id, ) @@ -168,7 +196,7 @@ impl Location { network_id, route_all_traffic, keepalive_interval, \ location_mfa_mode \"location_mfa_mode: LocationMfaMode\", \ service_location_mode \"service_location_mode: ServiceLocationMode\", - posture_check_required \ + mfa_method \"mfa_method: _\", posture_check_required \ FROM location WHERE id = $1", location_id ) @@ -192,7 +220,7 @@ impl Location { network_id, route_all_traffic, keepalive_interval, \ location_mfa_mode \"location_mfa_mode: LocationMfaMode\", \ service_location_mode \"service_location_mode: ServiceLocationMode\", - posture_check_required \ + mfa_method \"mfa_method: _\", posture_check_required \ FROM location WHERE instance_id = $1 AND service_location_mode <= $2 \ ORDER BY name ASC", instance_id, @@ -215,7 +243,7 @@ impl Location { network_id, route_all_traffic, keepalive_interval, \ location_mfa_mode \"location_mfa_mode: LocationMfaMode\", \ service_location_mode \"service_location_mode: ServiceLocationMode\", - posture_check_required \ + mfa_method \"mfa_method: _\", posture_check_required \ FROM location WHERE pubkey = $1;", pubkey ) @@ -381,8 +409,8 @@ impl Location { let id = query_scalar!( "INSERT INTO location (instance_id, name, address, pubkey, endpoint, allowed_ips, \ dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode, \ - service_location_mode, posture_check_required) \ - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13) \ + service_location_mode, mfa_method, posture_check_required) \ + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) \ RETURNING id \"id!\"", self.instance_id, self.name, @@ -396,6 +424,7 @@ impl Location { self.keepalive_interval, self.location_mfa_mode, self.service_location_mode, + self.mfa_method, self.posture_check_required, ) .fetch_one(executor) @@ -415,6 +444,7 @@ impl Location { keepalive_interval: self.keepalive_interval, location_mfa_mode: self.location_mfa_mode, service_location_mode: self.service_location_mode, + mfa_method: self.mfa_method, posture_check_required: self.posture_check_required, }) } @@ -443,6 +473,7 @@ impl From> for Location { keepalive_interval: location.keepalive_interval, location_mfa_mode: location.location_mfa_mode, service_location_mode: location.service_location_mode, + mfa_method: location.mfa_method, posture_check_required: location.posture_check_required, } } diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index ae09fd4e0..2d3137f01 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -32,6 +32,7 @@ pub mod service; pub mod tray; pub mod utils; pub mod wg_config; +pub mod window; pub const VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), "-", env!("VERGEN_GIT_SHA")); pub const MIN_CORE_VERSION: Version = Version::new(1, 6, 0); diff --git a/src-tauri/src/proto.rs b/src-tauri/src/proto.rs index 32d99cd91..5fbeef759 100644 --- a/src-tauri/src/proto.rs +++ b/src-tauri/src/proto.rs @@ -1,5 +1,8 @@ use crate::database::models::{ - location::{Location, LocationMfaMode as MfaMode, ServiceLocationMode as SLocationMode}, + location::{ + infer_mfa_method, Location, LocationMfaMode as MfaMode, + ServiceLocationMode as SLocationMode, + }, Id, NoId, }; @@ -60,6 +63,7 @@ impl defguard::client_types::DeviceConfig { keepalive_interval: self.keepalive_interval.into(), location_mfa_mode, service_location_mode, + mfa_method: infer_mfa_method(location_mfa_mode, None), posture_check_required: self.posture_check_required.unwrap_or_default(), } } diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index db6fcca1f..fa194b1ea 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -6,6 +6,8 @@ use tauri::{ AppHandle, Emitter, Manager, Runtime, }; +use tauri::tray::{MouseButton, MouseButtonState, TrayIconEvent}; + use crate::{ active_connections::{get_connection_id_by_type, ACTIVE_CONNECTIONS}, appstate::AppState, @@ -13,6 +15,7 @@ use crate::{ database::{models::location::Location, DB_POOL}, error::Error, events::EventKey, + window::{show_new_ui_window_near_tray, NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID}, ConnectionType, }; @@ -20,8 +23,6 @@ const SUBSCRIBE_UPDATES_LINK: &str = "https://defguard.net/newsletter"; const JOIN_COMMUNITY_LINK: &str = "https://github.com/DefGuard/defguard/discussions/new/choose"; const FOLLOW_US_LINK: &str = "https://floss.social/@defguard"; -const MAIN_WINDOW_ID: &str = "main"; - const TRAY_ICON_ID: &str = "tray"; const TRAY_EVENT_QUIT: &str = "quit"; @@ -31,6 +32,22 @@ const TRAY_EVENT_UPDATES: &str = "updates"; const TRAY_EVENT_COMMUNITY: &str = "community"; const TRAY_EVENT_FOLLOW: &str = "follow"; +fn store_tray_click_position(app: &AppHandle, event: &TrayIconEvent) { + let position = match event { + TrayIconEvent::Click { + button_state: MouseButtonState::Down, + position, + .. + } + | TrayIconEvent::DoubleClick { position, .. } => Some(*position), + _ => None, + }; + + if let Some(position) = position { + *app.state::().tray_click_position.lock().unwrap() = Some(position); + } +} + /// Generate contents of system tray menu. async fn generate_tray_menu(app: &AppHandle) -> Result, Error> { debug!("Generating tray menu."); @@ -129,6 +146,16 @@ pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { TrayIconBuilder::with_id(TRAY_ICON_ID) .menu(&tray_menu) .show_menu_on_left_click(true) + .on_tray_icon_event(|icon, event| { + store_tray_click_position(icon.app_handle(), &event); + if let TrayIconEvent::DoubleClick { + button: MouseButton::Left, + .. + } = event + { + show_new_ui_window_near_tray(icon.app_handle()); + } + }) .on_menu_event(handle_tray_menu_event) .build(app)?; // On other systems (especially Windows), system tray menu is on right-click, @@ -138,8 +165,13 @@ pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { .menu(&tray_menu) .show_menu_on_left_click(false) .on_tray_icon_event(|icon, event| { - if let tauri::tray::TrayIconEvent::DoubleClick { .. } = event { - show_main_window(icon.app_handle()); + store_tray_click_position(icon.app_handle(), &event); + if let TrayIconEvent::DoubleClick { + button: MouseButton::Left, + .. + } = event + { + show_new_ui_window_near_tray(icon.app_handle()); } }) .on_menu_event(handle_tray_menu_event) @@ -169,16 +201,21 @@ fn hide_main_window(app: &AppHandle) { warn!("Failed to hide application: {err}"); } #[cfg(not(target_os = "macos"))] - if let Some(main_window) = app.get_webview_window(MAIN_WINDOW_ID) { - if let Err(err) = main_window.hide() { - warn!("Failed to hide main window: {err}"); + for window_id in [NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID] { + if let Some(window) = app.get_webview_window(window_id) { + if let Err(err) = window.hide() { + warn!("Failed to hide window {window_id}: {err}"); + } } } } pub fn show_main_window(app: &AppHandle) { - if let Some(main_window) = app.get_webview_window(MAIN_WINDOW_ID) { - if let Err(err) = main_window.unminimize() { + if let Some(window) = app + .get_webview_window(NEW_UI_WINDOW_ID) + .or_else(|| app.get_webview_window(OLD_UI_WINDOW_ID)) + { + if let Err(err) = window.unminimize() { warn!("Failed to unminimize main window: {err}"); } #[cfg(target_os = "macos")] @@ -187,11 +224,11 @@ pub fn show_main_window(app: &AppHandle) { } #[cfg(not(target_os = "macos"))] { - if let Err(err) = main_window.show() { + if let Err(err) = window.show() { warn!("Failed to show main window: {err}"); } } - let _ = main_window.set_focus(); + let _ = window.set_focus(); } } @@ -203,7 +240,7 @@ pub fn handle_tray_menu_event(app: &AppHandle, event: MenuEvent) { info!("Received QUIT request. Initiating shutdown..."); handle.exit(0); } - TRAY_EVENT_SHOW => show_main_window(app), + TRAY_EVENT_SHOW => show_new_ui_window_near_tray(app), TRAY_EVENT_HIDE => hide_main_window(app), TRAY_EVENT_UPDATES => { let _ = webbrowser::open(SUBSCRIBE_UPDATES_LINK); diff --git a/src-tauri/src/window.rs b/src-tauri/src/window.rs new file mode 100644 index 000000000..e4fce3fb9 --- /dev/null +++ b/src-tauri/src/window.rs @@ -0,0 +1,154 @@ +use tauri::{ + webview::WebviewWindowBuilder, AppHandle, LogicalPosition, Manager, Monitor, Position, + WebviewUrl, WebviewWindow, +}; + +use crate::appstate::AppState; + +pub const NEW_UI_WINDOW_ID: &str = "new-ui"; +pub const OLD_UI_WINDOW_ID: &str = "old-ui"; +pub const NEW_UI_WIDTH: f64 = 360.0; +pub const NEW_UI_HEIGHT: f64 = 675.0; +pub const OLD_UI_WIDTH: f64 = 920.0; +pub const OLD_UI_HEIGHT: f64 = 720.0; + +fn new_ui_url() -> WebviewUrl { + if cfg!(defguard_client_dev) { + WebviewUrl::External("http://localhost:5072".parse().unwrap()) + } else { + WebviewUrl::App("new-ui/".into()) + } +} + +fn old_ui_url() -> WebviewUrl { + if cfg!(defguard_client_dev) { + WebviewUrl::External("http://localhost:5071".parse().unwrap()) + } else { + WebviewUrl::App("old-ui/index.html".into()) + } +} + +/// Try to get monitor at the given position, with a fall back to primary monitor, and then to the +/// first one on the list of available monitors. +fn get_monitor_for_position(app: &AppHandle, x: f64, y: f64) -> Option { + if let Ok(Some(monitor)) = app.monitor_from_point(x, y) { + return Some(monitor); + } + + if let Ok(Some(monitor)) = app.primary_monitor() { + return Some(monitor); + } + + // On macOS, it seems this is the only working method (as of Tauri 2.11), but fortunately it + // returns the current monitor as the first one. + if let Ok(mut monitors) = app.available_monitors() { + monitors.pop() + } else { + None + } +} + +fn get_tray_window_position( + app: &AppHandle, + width: f64, + height: f64, +) -> Option> { + let app_state = app.state::(); + let tray_position = app_state.tray_click_position.lock().unwrap().to_owned()?; + + let monitor = get_monitor_for_position(app, tray_position.x, tray_position.y)?; + + let scale_factor = monitor.scale_factor(); + let monitor_position = monitor.position().to_logical::(scale_factor); + let monitor_size = monitor.size().to_logical::(scale_factor); + let tray_position = tray_position.to_logical::(scale_factor); + + let mut x = tray_position.x - (width / 2.0); + let center_y = monitor_position.y + (monitor_size.height / 2.0); + let mut y = if tray_position.y < center_y { + tray_position.y + } else { + tray_position.y - height + }; + + x = x.clamp( + monitor_position.x, + monitor_position.x + monitor_size.width - width, + ); + y = y.clamp( + monitor_position.y, + monitor_position.y + monitor_size.height - height, + ); + + Some(LogicalPosition::new(x, y)) +} + +fn position_window_near_tray(app: &AppHandle, window: &WebviewWindow, width: f64, height: f64) { + if let Some(position) = get_tray_window_position(app, width, height) { + if let Err(err) = window.set_position(Position::Logical(position)) { + warn!("Failed to position window near tray icon: {err}"); + } + } +} + +fn show_new_ui_window_internal(app: &AppHandle, near_tray: bool) { + let window = if let Some(window) = app.get_webview_window(NEW_UI_WINDOW_ID) { + let _ = window.unminimize(); + window + } else { + WebviewWindowBuilder::new(app, NEW_UI_WINDOW_ID, new_ui_url()) + .title("New UI") + .inner_size(NEW_UI_WIDTH, NEW_UI_HEIGHT) + .build() + .unwrap() + }; + if near_tray { + position_window_near_tray(app, &window, NEW_UI_WIDTH, NEW_UI_HEIGHT); + } + #[cfg(target_os = "macos")] + let _ = app.show(); + let _ = window.show(); + let _ = window.set_focus(); +} + +pub(crate) fn show_new_ui_window(app: &AppHandle) { + show_new_ui_window_internal(app, false); +} + +pub(crate) fn show_new_ui_window_near_tray(app: &AppHandle) { + show_new_ui_window_internal(app, true); +} + +#[tauri::command] +pub fn open_new_ui_window(app: AppHandle) { + show_new_ui_window(&app); +} + +#[tauri::command] +pub fn open_old_ui_window(app: AppHandle) { + let _window = WebviewWindowBuilder::new(&app, OLD_UI_WINDOW_ID, old_ui_url()) + .title("Old UI") + .inner_size(OLD_UI_WIDTH, OLD_UI_HEIGHT) + .build() + .unwrap(); +} + +#[tauri::command] +pub fn swap_to_old_ui(app: AppHandle) { + WebviewWindowBuilder::new(&app, OLD_UI_WINDOW_ID, old_ui_url()) + .title("Old UI") + .inner_size(OLD_UI_WIDTH, OLD_UI_HEIGHT) + .build() + .unwrap(); + if let Some(w) = app.get_webview_window(NEW_UI_WINDOW_ID) { + w.close().unwrap(); + } +} + +#[tauri::command] +pub fn swap_to_new_ui(app: AppHandle) { + show_new_ui_window(&app); + if let Some(w) = app.get_webview_window(OLD_UI_WINDOW_ID) { + w.close().unwrap(); + } +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 8359fac6c..db27ec6ad 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,19 +1,14 @@ { "$schema": "https://schema.tauri.app/config/2", "build": { - "beforeBuildCommand": "pnpm build", - "beforeDevCommand": "pnpm dev", "frontendDist": "../dist", - "devUrl": "http://localhost:3001" + "devUrl": "http://localhost:5072" }, "bundle": { "active": true, "category": "Utility", "copyright": "Defguard", - "targets": [ - "deb", - "app" - ], + "targets": ["deb", "app"], "externalBin": [], "icon": [ "icons/32x32.png", @@ -34,10 +29,7 @@ "./resources-windows/fragments/service.wxs", "./resources-windows/fragments/provisioning.wxs" ], - "componentRefs": [ - "DefguardServiceFragment", - "ProvisioningScriptFragment" - ], + "componentRefs": ["DefguardServiceFragment", "ProvisioningScriptFragment"], "template": "./resources-windows/msi/main.wxs" } }, @@ -50,9 +42,7 @@ }, "minimumSystemVersion": "13.5" }, - "resources": [ - "resources/icons/*" - ], + "resources": ["resources/icons/*"], "shortDescription": "Defguard desktop client", "longDescription": "Defguard desktop client", "linux": { @@ -65,18 +55,14 @@ "../control/prerm": "../resources-linux/prerm", "../control/postrm": "../resources-linux/postrm" }, - "depends": [ - "desktop-file-utils" - ] + "depends": ["desktop-file-utils"] }, "rpm": { "files": { "/usr/sbin/defguard-service": "target/release/defguard-service", "/lib/systemd/system/defguard-service.service": "../resources-linux/defguard-service.service" }, - "depends": [ - "desktop-file-utils" - ], + "depends": ["desktop-file-utils"], "postInstallScript": "../resources-linux/postinst", "preRemoveScript": "../resources-linux/prerm", "postRemoveScript": "../resources-linux/postrm" @@ -89,35 +75,15 @@ "version": "1.6.9", "app": { "security": { - "capabilities": [ - "main-capability" - ], + "capabilities": ["main-capability"], "csp": null }, - "windows": [ - { - "fullscreen": false, - "center": true, - "maximized": true, - "height": 720, - "resizable": true, - "maximizable": true, - "minimizable": true, - "closable": true, - "title": "Defguard", - "width": 992, - "minWidth": 650, - "minHeight": 450, - "useHttpsScheme": true - } - ] + "windows": [] }, "plugins": { "deep-link": { "desktop": { - "schemes": [ - "defguard" - ] + "schemes": ["defguard"] } } } diff --git a/src-tauri/tauri.local.conf.json b/src-tauri/tauri.local.conf.json new file mode 100644 index 000000000..0176062c1 --- /dev/null +++ b/src-tauri/tauri.local.conf.json @@ -0,0 +1,9 @@ +{ + "bundle": { + "windows": { + "certificateThumbprint": null, + "digestAlgorithm": null, + "timestampUrl": null + } + } +} diff --git a/src/shared/defguard-ui b/src/shared/defguard-ui index 8c697a69a..1110ba807 160000 --- a/src/shared/defguard-ui +++ b/src/shared/defguard-ui @@ -1 +1 @@ -Subproject commit 8c697a69a978cf6fd3591a4d83bc6bfc6edb26cb +Subproject commit 1110ba807491689efc40a2e28383ea1c6186fcad diff --git a/vite.config.ts b/vite.config.ts index 49bf0a106..9a6a76db0 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,14 +3,27 @@ import autoprefixer from 'autoprefixer'; import * as path from 'path'; import { defineConfig } from 'vite'; +const host = process.env.TAURI_DEV_HOST; + // https://vitejs.dev/config/ -export default defineConfig({ - base: './', +export default defineConfig(async ({ command }) => ({ plugins: [react()], clearScreen: false, server: { strictPort: true, - port: 3001, + port: 5071, + host: host || false, + hmr: host + ? { + protocol: 'ws', + host, + port: 1421, + } + : undefined, + watch: { + // 3. tell Vite to ignore watching `src-tauri` + ignored: ['**/src-tauri/**'], + }, }, resolve: { alias: { @@ -28,7 +41,10 @@ export default defineConfig({ }, }, envPrefix: ['VITE_', 'TAURI_'], + base: command === 'build' ? '/old-ui/' : './', build: { chunkSizeWarningLimit: 10000000, + outDir: './dist/old-ui', + emptyOutDir: true, }, -}); +})); From 808ba8a5baaeb62924da94b0e4c2d387ddbb103e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Mon, 18 May 2026 15:27:10 +0200 Subject: [PATCH 004/155] Bump to 2.1.0 --- new-ui/package.json | 8 +- new-ui/pnpm-lock.yaml | 160 ++++++++++++++++++-------------------- package.json | 2 +- src-tauri/Cargo.lock | 10 +-- src-tauri/Cargo.toml | 2 +- src-tauri/tauri.conf.json | 32 ++++++-- 6 files changed, 112 insertions(+), 102 deletions(-) diff --git a/new-ui/package.json b/new-ui/package.json index 53a754951..6b3905ab7 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -17,8 +17,8 @@ "@floating-ui/react": "^0.27.19", "@tanstack/react-form": "^1.32.0", "@tanstack/react-query": "^5.100.10", - "@tanstack/react-router": "^1.169.2", - "@tanstack/router-plugin": "^1.167.35", + "@tanstack/react-router": "^1.170.4", + "@tanstack/router-plugin": "^1.168.6", "@tauri-apps/api": "^2.11.0", "@tauri-apps/plugin-http": "^2.5.9", "@tauri-apps/plugin-log": "^2.8.0", @@ -39,10 +39,10 @@ }, "devDependencies": { "@tanstack/devtools-vite": "^0.7.0", - "@types/node": "^25.7.0", + "@types/node": "^25.8.0", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^6.0.1", + "@vitejs/plugin-react": "^6.0.2", "autoprefixer": "^10.5.0", "globals": "^17.6.0", "stylelint": "^17.11.1", diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index 4bf983487..13f7daed2 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -21,11 +21,11 @@ importers: specifier: ^5.100.10 version: 5.100.10(react@19.2.6) '@tanstack/react-router': - specifier: ^1.169.2 - version: 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^1.170.4 + version: 1.170.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/router-plugin': - specifier: ^1.167.35 - version: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0)) + specifier: ^1.168.6 + version: 1.168.6(@tanstack/react-router@1.170.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)) '@tauri-apps/api': specifier: ^2.11.0 version: 2.11.0 @@ -80,10 +80,10 @@ importers: devDependencies: '@tanstack/devtools-vite': specifier: ^0.7.0 - version: 0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0)) + version: 0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)) '@types/node': - specifier: ^25.7.0 - version: 25.7.0 + specifier: ^25.8.0 + version: 25.8.0 '@types/react': specifier: ^19.2.14 version: 19.2.14 @@ -91,8 +91,8 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': - specifier: ^6.0.1 - version: 6.0.1(vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0)) + specifier: ^6.0.2 + version: 6.0.2(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)) autoprefixer: specifier: ^10.5.0 version: 10.5.0(postcss@8.5.14) @@ -113,7 +113,7 @@ importers: version: 6.0.3 vite: specifier: ^8.0.13 - version: 8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0) + version: 8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0) packages: @@ -257,8 +257,8 @@ packages: cpu: [x64] os: [win32] - '@cacheable/memory@2.0.8': - resolution: {integrity: sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==} + '@cacheable/memory@2.0.9': + resolution: {integrity: sha512-HdMx6DoGywB30vacDbBsITbIX4pgFqj1zsrV58jZBUw3klzkNoXhj7qOqAgledhxG7YZI5rBSJg7Zp8/VG0DuA==} '@cacheable/utils@2.4.1': resolution: {integrity: sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==} @@ -699,9 +699,6 @@ packages: cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.7': - resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} - '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} @@ -732,8 +729,8 @@ packages: '@tanstack/form-core@1.32.0': resolution: {integrity: sha512-Tn5VRDSjyqjmaet2tJMuEWDRFyrCaon03vxXPlSSaiSs6C/N7lCIwGCXJbZXEUq1kTj8jYN9qyXHbsz4LQHcow==} - '@tanstack/history@1.161.6': - resolution: {integrity: sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==} + '@tanstack/history@1.162.0': + resolution: {integrity: sha512-79pf/RkhteYZTRgcR4F9kbk84P2N8rugQJswxfIqovlbRiT3yI7eBE+5QorIrZaOKktsgzRlXh1l/du/xpl4iA==} engines: {node: '>=20.19'} '@tanstack/pacer-lite@0.1.1': @@ -757,8 +754,8 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-router@1.169.2': - resolution: {integrity: sha512-OJM7Kguc7ERnweaNRWsyWgIKcl3z23rD1B4jaxjzd9RGdnzpt2HfrWa9rggbT0Hfzhfo4D2ZmsfoTme035tniQ==} + '@tanstack/react-router@1.170.4': + resolution: {integrity: sha512-cusL4YCTuGGJhjfsXEBm6/SmOAs/G8wRVNadeyN3ofu4OZwX69KAybBEf217buxYzI+FohdJVoigEpJV+tGzIw==} engines: {node: '>=20.19'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -770,20 +767,20 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.169.2': - resolution: {integrity: sha512-5sm0DJF1A7Mz+9gy4Gz/lLovNailK3yot4vYvz9MkBUPw26uLnhQiR8hSCYxucjE0wD6Mdlc5l+Z0/XTlZ7xHw==} + '@tanstack/router-core@1.171.2': + resolution: {integrity: sha512-sUd+BhGYkBF64LVhmOHnYsc1AutPNch/huohEXiXL4IUgmk17Gy+RkUazvjQhptVdYW5QT+qtATrUr2cQZNHFA==} engines: {node: '>=20.19'} - '@tanstack/router-generator@1.166.42': - resolution: {integrity: sha512-2qBWC0t78r6b3vI+AbnvCZcFAvbYBDlLuWZrTjQbcjUmwG3qyeQp983tJyDuj9wb5//adG1tgAGXZkJ3aDwdBg==} + '@tanstack/router-generator@1.167.5': + resolution: {integrity: sha512-S7h9qs7WjwF1IlMiOxSv+xB/bSOQ6QS84NlApM9iWLVdkbOVUn7RzTaCqw2qdDa5cPrfSiZJ2wK2a6RFDmFubA==} engines: {node: '>=20.19'} - '@tanstack/router-plugin@1.167.35': - resolution: {integrity: sha512-UAScU5VAzLYVY4FML/Cbc5S5TucT4I8Ata05yozGOe4ZfepTKRffA5xWLtD2N+ov5svdv0KTX/kqlZnYPe28mA==} + '@tanstack/router-plugin@1.168.6': + resolution: {integrity: sha512-u5CNtTWGyFvV8gGWKBt9LdwVGg+ISSBXG/aeeU1/d1YpEKPqlJHS6oN3tvNKOScubeV64HjpeV0tD6fqRfCpvw==} engines: {node: '>=20.19'} peerDependencies: '@rsbuild/core': '>=1.0.2 || ^2.0.0' - '@tanstack/react-router': ^1.169.2 + '@tanstack/react-router': ^1.170.4 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0' vite-plugin-solid: ^2.11.10 || ^3.0.0-0 webpack: '>=5.92.0' @@ -799,17 +796,16 @@ packages: webpack: optional: true - '@tanstack/router-utils@1.161.8': - resolution: {integrity: sha512-xyiLWEKjfBAVhauDSSjXxyf7s8elU6SM+V050sbkofvGmIIvkwPFtDsX7Gvwh14kBd6iCwAT+RiPvXTxAptY0Q==} + '@tanstack/router-utils@1.162.0': + resolution: {integrity: sha512-c3GhqhBRCP636B41nf3TKvVz8EWzC5PTZ3I4J4LDH2tVjpxbyFNYsQKRtbNWiMFl+GTtgK4nCha346Wv7j4hcQ==} engines: {node: '>=20.19'} '@tanstack/store@0.9.3': resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==} - '@tanstack/virtual-file-routes@1.161.7': - resolution: {integrity: sha512-olW33+Cn+bsCsZKPwEGhlkqS6w3M2slFv11JIobdnCFKMLG97oAI2kWKdx5/zsywTL8flpnoIgaZZPlQTFYhdQ==} + '@tanstack/virtual-file-routes@1.162.0': + resolution: {integrity: sha512-uhOeFyxLcU41HzvrxsGpiWdcMbScY1EDgbZ5K7DVRMYInbLYWAC0EA/kx9wXAoSM8q82bUG2hRl8+EAjE6XAbA==} engines: {node: '>=20.19'} - hasBin: true '@tauri-apps/api@2.11.0': resolution: {integrity: sha512-7CinYODhky9lmO23xHnUFv0Xt43fbtWMyxZcLcRBlFkcgXKuEirBvHpmtJ89YMhyeGcq20Wuc47Fa4XjyniywA==} @@ -823,8 +819,8 @@ packages: '@tybys/wasm-util@0.10.2': resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} - '@types/node@25.7.0': - resolution: {integrity: sha512-z+pdZyxE+RTQE9AcboAZCb4otwcrvgHD+GlBpPgn0emDVt0ohrTMhAwlr2Wd9nZ+nihhYFxO2pThz3C5qSu2Eg==} + '@types/node@25.8.0': + resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==} '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} @@ -841,8 +837,8 @@ packages: react: '>=18.0.0' react-dom: '>=18.0.0' - '@vitejs/plugin-react@6.0.1': - resolution: {integrity: sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==} + '@vitejs/plugin-react@6.0.2': + resolution: {integrity: sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 @@ -894,8 +890,8 @@ packages: babel-dead-code-elimination@1.0.12: resolution: {integrity: sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==} - baseline-browser-mapping@2.10.29: - resolution: {integrity: sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==} + baseline-browser-mapping@2.10.30: + resolution: {integrity: sha512-xjOFN16Ha1+Rz4nFYKqHU/LSB+gx/Vi3yQLX7r7sAW+Wa+8hhF2h4pvqTrTMc8+WcDBEunnUurr46Jvv0jk3Vg==} engines: {node: '>=6.0.0'} hasBin: true @@ -919,8 +915,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001792: - resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} + caniuse-lite@1.0.30001793: + resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} chalk@5.6.2: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} @@ -1003,8 +999,8 @@ packages: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} - electron-to-chromium@1.5.355: - resolution: {integrity: sha512-LUPZhKzZPYSPme1jEYohpkA+ybYCJztr1quAdBd7E7h3+VOBVcKkwwtBJu41nrjawrRzfb8mtMfzWozoaK0ZIQ==} + electron-to-chromium@1.5.357: + resolution: {integrity: sha512-NHlTIQDK8fmVwHwuIzmXYEJ1Ewq3D9wDNc0cWXxDGysP6Pb21giwGNkxiTifyKy/4SoPuN5l6GLP1W9Sv7zB2g==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1620,8 +1616,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - undici-types@7.21.0: - resolution: {integrity: sha512-w9IMgQrz4O0YN1LtB7K5P63vhlIOvC7opSmouCJ+ZywlPAlO9gIkJ+otk6LvGpAs2wg4econaCz3TvQ9xPoyuQ==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} unicorn-magic@0.4.0: resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} @@ -1887,7 +1883,7 @@ snapshots: '@biomejs/cli-win32-x64@2.4.15': optional: true - '@cacheable/memory@2.0.8': + '@cacheable/memory@2.0.9': dependencies: '@cacheable/utils': 2.4.1 '@keyv/bigmap': 1.3.1(keyv@5.6.0) @@ -2195,8 +2191,6 @@ snapshots: '@rolldown/binding-win32-x64-msvc@1.0.1': optional: true - '@rolldown/pluginutils@1.0.0-rc.7': {} - '@rolldown/pluginutils@1.0.1': {} '@sindresorhus/merge-streams@4.0.0': {} @@ -2214,7 +2208,7 @@ snapshots: '@tanstack/devtools-event-client@0.4.3': {} - '@tanstack/devtools-vite@0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0))': + '@tanstack/devtools-vite@0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0))': dependencies: '@tanstack/devtools-client': 0.0.6 '@tanstack/devtools-event-bus': 0.4.1 @@ -2223,7 +2217,7 @@ snapshots: magic-string: 0.30.21 oxc-parser: 0.120.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) picomatch: 4.0.4 - vite: 8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0) + vite: 8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -2236,7 +2230,7 @@ snapshots: '@tanstack/pacer-lite': 0.1.1 '@tanstack/store': 0.9.3 - '@tanstack/history@1.161.6': {} + '@tanstack/history@1.162.0': {} '@tanstack/pacer-lite@0.1.1': {} @@ -2255,11 +2249,11 @@ snapshots: '@tanstack/query-core': 5.100.10 react: 19.2.6 - '@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@tanstack/react-router@1.170.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@tanstack/history': 1.161.6 + '@tanstack/history': 1.162.0 '@tanstack/react-store': 0.9.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@tanstack/router-core': 1.169.2 + '@tanstack/router-core': 1.171.2 isbot: 5.1.40 react: 19.2.6 react-dom: 19.2.6(react@19.2.6) @@ -2271,19 +2265,19 @@ snapshots: react-dom: 19.2.6(react@19.2.6) use-sync-external-store: 1.6.0(react@19.2.6) - '@tanstack/router-core@1.169.2': + '@tanstack/router-core@1.171.2': dependencies: - '@tanstack/history': 1.161.6 + '@tanstack/history': 1.162.0 cookie-es: 3.1.1 seroval: 1.5.4 seroval-plugins: 1.5.4(seroval@1.5.4) - '@tanstack/router-generator@1.166.42': + '@tanstack/router-generator@1.167.5': dependencies: '@babel/types': 7.29.0 - '@tanstack/router-core': 1.169.2 - '@tanstack/router-utils': 1.161.8 - '@tanstack/virtual-file-routes': 1.161.7 + '@tanstack/router-core': 1.171.2 + '@tanstack/router-utils': 1.162.0 + '@tanstack/virtual-file-routes': 1.162.0 jiti: 2.7.0 magic-string: 0.30.21 prettier: 3.8.3 @@ -2291,7 +2285,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0))': + '@tanstack/router-plugin@1.168.6(@tanstack/react-router@1.170.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -2299,20 +2293,20 @@ snapshots: '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - '@tanstack/router-core': 1.169.2 - '@tanstack/router-generator': 1.166.42 - '@tanstack/router-utils': 1.161.8 - '@tanstack/virtual-file-routes': 1.161.7 + '@tanstack/router-core': 1.171.2 + '@tanstack/router-generator': 1.167.5 + '@tanstack/router-utils': 1.162.0 + '@tanstack/virtual-file-routes': 1.162.0 chokidar: 3.6.0 unplugin: 3.0.0 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - vite: 8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0) + '@tanstack/react-router': 1.170.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + vite: 8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0) transitivePeerDependencies: - supports-color - '@tanstack/router-utils@1.161.8': + '@tanstack/router-utils@1.162.0': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -2328,7 +2322,7 @@ snapshots: '@tanstack/store@0.9.3': {} - '@tanstack/virtual-file-routes@1.161.7': {} + '@tanstack/virtual-file-routes@1.162.0': {} '@tauri-apps/api@2.11.0': {} @@ -2345,9 +2339,9 @@ snapshots: tslib: 2.8.1 optional: true - '@types/node@25.7.0': + '@types/node@25.8.0': dependencies: - undici-types: 7.21.0 + undici-types: 7.24.6 '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: @@ -2362,10 +2356,10 @@ snapshots: react: 19.2.6 react-dom: 19.2.6(react@19.2.6) - '@vitejs/plugin-react@6.0.1(vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0))': + '@vitejs/plugin-react@6.0.2(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0))': dependencies: - '@rolldown/pluginutils': 1.0.0-rc.7 - vite: 8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0) + '@rolldown/pluginutils': 1.0.1 + vite: 8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0) ajv@8.20.0: dependencies: @@ -2396,7 +2390,7 @@ snapshots: autoprefixer@10.5.0(postcss@8.5.14): dependencies: browserslist: 4.28.2 - caniuse-lite: 1.0.30001792 + caniuse-lite: 1.0.30001793 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.14 @@ -2411,7 +2405,7 @@ snapshots: transitivePeerDependencies: - supports-color - baseline-browser-mapping@2.10.29: {} + baseline-browser-mapping@2.10.30: {} binary-extensions@2.3.0: {} @@ -2421,15 +2415,15 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.29 - caniuse-lite: 1.0.30001792 - electron-to-chromium: 1.5.355 + baseline-browser-mapping: 2.10.30 + caniuse-lite: 1.0.30001793 + electron-to-chromium: 1.5.357 node-releases: 2.0.44 update-browserslist-db: 1.2.3(browserslist@4.28.2) cacheable@2.3.5: dependencies: - '@cacheable/memory': 2.0.8 + '@cacheable/memory': 2.0.9 '@cacheable/utils': 2.4.1 hookified: 1.15.1 keyv: 5.6.0 @@ -2437,7 +2431,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001792: {} + caniuse-lite@1.0.30001793: {} chalk@5.6.2: {} @@ -2505,7 +2499,7 @@ snapshots: diff@8.0.4: {} - electron-to-chromium@1.5.355: {} + electron-to-chromium@1.5.357: {} emoji-regex@8.0.0: {} @@ -3075,7 +3069,7 @@ snapshots: typescript@6.0.3: {} - undici-types@7.21.0: {} + undici-types@7.24.6: {} unicorn-magic@0.4.0: {} @@ -3097,7 +3091,7 @@ snapshots: util-deprecate@1.0.2: {} - vite@8.0.13(@types/node@25.7.0)(jiti@2.7.0)(sass@1.99.0): + vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -3105,7 +3099,7 @@ snapshots: rolldown: 1.0.1 tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 25.7.0 + '@types/node': 25.8.0 fsevents: 2.3.3 jiti: 2.7.0 sass: 1.99.0 diff --git a/package.json b/package.json index ea89a2acf..af898b441 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "defguard-client", "private": false, - "version": "1.6.9", + "version": "2.1.0", "type": "module", "scripts": { "dev": "npm-run-all --parallel vite typesafe-i18n", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index bcce63edf..4a3a58f79 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1046,7 +1046,7 @@ dependencies = [ [[package]] name = "common" -version = "1.6.9" +version = "2.1.0" dependencies = [ "nix 0.31.3", ] @@ -1407,7 +1407,7 @@ dependencies = [ [[package]] name = "defguard-client" -version = "1.6.9" +version = "2.1.0" dependencies = [ "anyhow", "async-stream", @@ -1478,7 +1478,7 @@ dependencies = [ [[package]] name = "defguard-dg" -version = "1.6.9" +version = "2.1.0" dependencies = [ "clap", "common", @@ -7269,9 +7269,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.10" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68d6fdd9f81c2819c9a8b0e0cd91660e7746a8e6ea2ba7c6b2b057985f6bcb51" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ "bitflags 2.11.1", "bytes", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index c7fe49e15..3ad98c6dd 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -31,7 +31,7 @@ edition = "2021" homepage = "https://github.com/DefGuard/client" license-file = "../LICENSE.md" rust-version = "1.95" -version = "1.6.9" +version = "2.1.0" [package] name = "defguard-client" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index db27ec6ad..92a4a8c10 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -8,7 +8,10 @@ "active": true, "category": "Utility", "copyright": "Defguard", - "targets": ["deb", "app"], + "targets": [ + "deb", + "app" + ], "externalBin": [], "icon": [ "icons/32x32.png", @@ -29,7 +32,10 @@ "./resources-windows/fragments/service.wxs", "./resources-windows/fragments/provisioning.wxs" ], - "componentRefs": ["DefguardServiceFragment", "ProvisioningScriptFragment"], + "componentRefs": [ + "DefguardServiceFragment", + "ProvisioningScriptFragment" + ], "template": "./resources-windows/msi/main.wxs" } }, @@ -42,7 +48,9 @@ }, "minimumSystemVersion": "13.5" }, - "resources": ["resources/icons/*"], + "resources": [ + "resources/icons/*" + ], "shortDescription": "Defguard desktop client", "longDescription": "Defguard desktop client", "linux": { @@ -55,14 +63,18 @@ "../control/prerm": "../resources-linux/prerm", "../control/postrm": "../resources-linux/postrm" }, - "depends": ["desktop-file-utils"] + "depends": [ + "desktop-file-utils" + ] }, "rpm": { "files": { "/usr/sbin/defguard-service": "target/release/defguard-service", "/lib/systemd/system/defguard-service.service": "../resources-linux/defguard-service.service" }, - "depends": ["desktop-file-utils"], + "depends": [ + "desktop-file-utils" + ], "postInstallScript": "../resources-linux/postinst", "preRemoveScript": "../resources-linux/prerm", "postRemoveScript": "../resources-linux/postrm" @@ -72,10 +84,12 @@ "productName": "Defguard", "mainBinaryName": "defguard-client", "identifier": "net.defguard", - "version": "1.6.9", + "version": "2.1.0", "app": { "security": { - "capabilities": ["main-capability"], + "capabilities": [ + "main-capability" + ], "csp": null }, "windows": [] @@ -83,7 +97,9 @@ "plugins": { "deep-link": { "desktop": { - "schemes": ["defguard"] + "schemes": [ + "defguard" + ] } } } From ff180528604012ebdf32d1c3f1aacb662a57fa33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Mon, 18 May 2026 15:27:28 +0200 Subject: [PATCH 005/155] Bump to 2.1.0 --- swift/extension/VPNExtension.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/swift/extension/VPNExtension.xcodeproj/project.pbxproj b/swift/extension/VPNExtension.xcodeproj/project.pbxproj index d50452eab..f54850887 100644 --- a/swift/extension/VPNExtension.xcodeproj/project.pbxproj +++ b/swift/extension/VPNExtension.xcodeproj/project.pbxproj @@ -322,7 +322,7 @@ ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MACOSX_DEPLOYMENT_TARGET = 13.5; - MARKETING_VERSION = 1.6.9; + MARKETING_VERSION = 2.1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -417,7 +417,7 @@ ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MACOSX_DEPLOYMENT_TARGET = 13.5; - MARKETING_VERSION = 1.6.9; + MARKETING_VERSION = 2.1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = net.defguard.VPNExtension; From f548fb5a43cd759c9af28290f1a76524275ddb3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Mon, 18 May 2026 16:11:46 +0200 Subject: [PATCH 006/155] Fix build --- new-ui/package.json | 2 ++ new-ui/pnpm-lock.yaml | 22 ++++++++++++++++++++++ src-tauri/src/bin/defguard-client.rs | 16 +++------------- src-tauri/src/window.rs | 4 ++-- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/new-ui/package.json b/new-ui/package.json index 6b3905ab7..29473f5b2 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -23,6 +23,7 @@ "@tauri-apps/plugin-http": "^2.5.9", "@tauri-apps/plugin-log": "^2.8.0", "@uidotdev/usehooks": "^2.4.1", + "byte-size": "^9.0.1", "chart.js": "^4.5.1", "clsx": "^2.1.1", "dayjs": "^1.11.20", @@ -39,6 +40,7 @@ }, "devDependencies": { "@tanstack/devtools-vite": "^0.7.0", + "@types/byte-size": "^8.1.2", "@types/node": "^25.8.0", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index 13f7daed2..a90dbad1c 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -38,6 +38,9 @@ importers: '@uidotdev/usehooks': specifier: ^2.4.1 version: 2.4.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + byte-size: + specifier: ^9.0.1 + version: 9.0.1 chart.js: specifier: ^4.5.1 version: 4.5.1 @@ -81,6 +84,9 @@ importers: '@tanstack/devtools-vite': specifier: ^0.7.0 version: 0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)) + '@types/byte-size': + specifier: ^8.1.2 + version: 8.1.2 '@types/node': specifier: ^25.8.0 version: 25.8.0 @@ -819,6 +825,9 @@ packages: '@tybys/wasm-util@0.10.2': resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@types/byte-size@8.1.2': + resolution: {integrity: sha512-jGyVzYu6avI8yuqQCNTZd65tzI8HZrLjKX9sdMqZrGWVlNChu0rf6p368oVEDCYJe5BMx2Ov04tD1wqtgTwGSA==} + '@types/node@25.8.0': resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==} @@ -908,6 +917,15 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + byte-size@9.0.1: + resolution: {integrity: sha512-YLe9x3rabBrcI0cueCdLS2l5ONUKywcRpTs02B8KP9/Cimhj7o3ZccGrPnRvcbyHMbb7W79/3MUJl7iGgTXKEw==} + engines: {node: '>=12.17'} + peerDependencies: + '@75lb/nature': latest + peerDependenciesMeta: + '@75lb/nature': + optional: true + cacheable@2.3.5: resolution: {integrity: sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==} @@ -2339,6 +2357,8 @@ snapshots: tslib: 2.8.1 optional: true + '@types/byte-size@8.1.2': {} + '@types/node@25.8.0': dependencies: undici-types: 7.24.6 @@ -2421,6 +2441,8 @@ snapshots: node-releases: 2.0.44 update-browserslist-db: 1.2.3(browserslist@4.28.2) + byte-size@9.0.1: {} + cacheable@2.3.5: dependencies: '@cacheable/memory': 2.0.9 diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 0d0bf13e8..f41f38122 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -33,7 +33,7 @@ use defguard_client::{ LOG_FILENAME, VERSION, }; use log::{Level, LevelFilter}; -use tauri::{AppHandle, Builder, Manager, RunEvent, WebviewUrl, WebviewWindowBuilder, WindowEvent}; +use tauri::{AppHandle, Builder, Manager, RunEvent, WebviewWindowBuilder, WindowEvent}; use tauri_plugin_log::{Target, TargetKind}; #[macro_use] @@ -348,24 +348,14 @@ fn main() { app.manage(state); // Open new UI window. - let new_url = if cfg!(defguard_client_dev) { - WebviewUrl::External("http://localhost:5072".parse().unwrap()) - } else { - WebviewUrl::App("new-ui/".into()) - }; - WebviewWindowBuilder::new(app, NEW_UI_WINDOW_ID, new_url) + WebviewWindowBuilder::new(app, NEW_UI_WINDOW_ID, new_ui_url()) .title("New UI") .inner_size(NEW_UI_WIDTH, NEW_UI_HEIGHT) .visible(false) .build()?; // Open old UI window. - let old_url = if cfg!(defguard_client_dev) { - WebviewUrl::External("http://localhost:5071".parse().unwrap()) - } else { - WebviewUrl::App("old-ui/index.html/".into()) - }; - WebviewWindowBuilder::new(app, OLD_UI_WINDOW_ID, old_url) + WebviewWindowBuilder::new(app, OLD_UI_WINDOW_ID, old_ui_url()) .title("Old UI") .inner_size(OLD_UI_WIDTH, OLD_UI_HEIGHT) .build()?; diff --git a/src-tauri/src/window.rs b/src-tauri/src/window.rs index e4fce3fb9..3b8f0e45d 100644 --- a/src-tauri/src/window.rs +++ b/src-tauri/src/window.rs @@ -12,7 +12,7 @@ pub const NEW_UI_HEIGHT: f64 = 675.0; pub const OLD_UI_WIDTH: f64 = 920.0; pub const OLD_UI_HEIGHT: f64 = 720.0; -fn new_ui_url() -> WebviewUrl { +pub fn new_ui_url() -> WebviewUrl { if cfg!(defguard_client_dev) { WebviewUrl::External("http://localhost:5072".parse().unwrap()) } else { @@ -20,7 +20,7 @@ fn new_ui_url() -> WebviewUrl { } } -fn old_ui_url() -> WebviewUrl { +pub fn old_ui_url() -> WebviewUrl { if cfg!(defguard_client_dev) { WebviewUrl::External("http://localhost:5071".parse().unwrap()) } else { From fc42dcf0d74538a5aab5b6c456961375322e5d26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Mon, 18 May 2026 17:10:29 +0200 Subject: [PATCH 007/155] add build old ui step --- .github/workflows/build-macos.yaml | 4 ++++ .github/workflows/release.yaml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index 709bb89dc..21972e7c4 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -76,6 +76,10 @@ jobs: cd new-ui pnpm build + - name: Build old UI + run: | + pnpm build + - name: Build app uses: tauri-apps/tauri-action@v0 env: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index c1ee01735..80de5efd6 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -102,6 +102,10 @@ jobs: cd new-ui pnpm build + - name: Build old UI + run: | + pnpm build + - name: Build packages uses: tauri-apps/tauri-action@v0.5.23 env: From fc11b536a22e45a2d1f4cd236368264a72f745fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Tue, 19 May 2026 08:36:24 +0200 Subject: [PATCH 008/155] add login via oidc provider (#875) --- new-ui/package.json | 1 + new-ui/pnpm-lock.yaml | 12 ++ .../components/LocationCard/LocationCard.tsx | 3 +- .../LocationCard/hooks/useMfaOidcConnect.ts | 169 ++++++++++++++++++ .../LocationCardMfaOidcView.tsx | 86 +++++++++ .../views/LocationCardMfaOidcView/style.scss | 5 + .../src/shared/components/QrCard/QrCard.tsx | 15 ++ .../src/shared/components/QrCard/style.scss | 5 + 8 files changed, 295 insertions(+), 1 deletion(-) create mode 100644 new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts create mode 100644 new-ui/src/shared/components/LocationCard/views/LocationCardMfaOidcView/LocationCardMfaOidcView.tsx create mode 100644 new-ui/src/shared/components/LocationCard/views/LocationCardMfaOidcView/style.scss create mode 100644 new-ui/src/shared/components/QrCard/QrCard.tsx create mode 100644 new-ui/src/shared/components/QrCard/style.scss diff --git a/new-ui/package.json b/new-ui/package.json index 29473f5b2..8f917f7d3 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -30,6 +30,7 @@ "motion": "^12.38.0", "p-timeout": "^7.0.1", "prettier": "^3.8.3", + "qrcode.react": "^4.2.0", "radashi": "^12.9.1", "react": "^19.2.6", "react-chartjs-2": "^5.3.1", diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index a90dbad1c..c189c6599 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -59,6 +59,9 @@ importers: prettier: specifier: ^3.8.3 version: 3.8.3 + qrcode.react: + specifier: ^4.2.0 + version: 4.2.0(react@19.2.6) radashi: specifier: ^12.9.1 version: 12.9.1 @@ -1449,6 +1452,11 @@ packages: resolution: {integrity: sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==} engines: {node: '>=20'} + qrcode.react@4.2.0: + resolution: {integrity: sha512-QpgqWi8rD9DsS9EP3z7BT+5lY5SFhsqGjpgW5DY/i3mK4M9DTBNz3ErMi8BWYEfI3L0d8GIbGmcdFAS1uIRGjA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -2873,6 +2881,10 @@ snapshots: dependencies: hookified: 2.2.0 + qrcode.react@4.2.0(react@19.2.6): + dependencies: + react: 19.2.6 + queue-microtask@1.2.3: {} radashi@12.9.1: {} diff --git a/new-ui/src/shared/components/LocationCard/LocationCard.tsx b/new-ui/src/shared/components/LocationCard/LocationCard.tsx index a4d076fb6..1c9985d12 100644 --- a/new-ui/src/shared/components/LocationCard/LocationCard.tsx +++ b/new-ui/src/shared/components/LocationCard/LocationCard.tsx @@ -17,6 +17,7 @@ import { LocationCardViews, type LocationCardViewsValue } from './context/types' import { ConnectedView } from './views/ConnectedView/ConnectedView'; import { DefaultView } from './views/DefaultView/DefaultView'; import { LocationCardMfaEmailView } from './views/LocationCardMfaEmailView/LocationCardMfaEmailView'; +import { LocationCardMfaOidcView } from './views/LocationCardMfaOidcView/LocationCardMfaOidcView'; import { LocationCardMfaSettings } from './views/LocationCardMfaSettings/LocationCardMfaSettings'; import { LocationCardMfaTotpView } from './views/LocationCardMfaTotpView/LocationCardMfaTotpView'; @@ -32,7 +33,7 @@ const views: Record = { [LocationCardViews.Default]: , [LocationCardViews.MfaTotp]: , [LocationCardViews.MfaEmail]: , - [LocationCardViews.MfaOidc]: null, + [LocationCardViews.MfaOidc]: , [LocationCardViews.MfaMobile]: null, [LocationCardViews.MfaSettings]: , [LocationCardViews.Connecting]: null, diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts new file mode 100644 index 000000000..8b6e8a355 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts @@ -0,0 +1,169 @@ +import { useMutation, useQuery } from '@tanstack/react-query'; +import { fetch } from '@tauri-apps/plugin-http'; +import { error } from '@tauri-apps/plugin-log'; +import { useCallback, useEffect, useRef, useState } from 'react'; +import { api } from '../../../rust-api/api'; +import { getInstancesQueryOptions } from '../../../rust-api/query'; +import { useLocationCardContext } from '../context/context'; +import { LocationCardViews } from '../context/types'; + +const MFA_ENDPOINT = 'api/v1/client-mfa'; +const POLL_INTERVAL_MS = 5_000; +const POLL_TIMEOUT_MS = 5 * 60 * 1_000; // 5 minutes + +type MfaStartResponse = { token: string }; +type MfaFinishResponse = { preshared_key: string }; +type MfaErrorResponse = { error: string }; + +export const useMfaOidcConnect = () => { + const { location, setView } = useLocationCardContext(); + + const [isStarting, setIsStarting] = useState(false); + const [startError, setStartError] = useState(null); + const [isPolling, setIsPolling] = useState(false); + const [pollError, setPollError] = useState(null); + + const { data: instances } = useQuery(getInstancesQueryOptions); + const instance = instances?.find((i) => i.id === location.instance_id); + + const intervalRef = useRef | null>(null); + const timeoutRef = useRef | null>(null); + + const { mutate: connectMutate } = useMutation({ + mutationFn: api.connect, + onSuccess: () => { + setView(LocationCardViews.Connected); + }, + onError: (err) => { + error(`Connect command failed after successful OIDC MFA\n${err}`); + setPollError('Failed to establish VPN connection'); + }, + }); + + const stopPolling = useCallback(() => { + if (intervalRef.current !== null) { + clearInterval(intervalRef.current); + intervalRef.current = null; + } + if (timeoutRef.current !== null) { + clearTimeout(timeoutRef.current); + timeoutRef.current = null; + } + }, []); + + // Clean up on unmount + useEffect(() => { + return () => { + stopPolling(); + }; + }, [stopPolling]); + + const startPolling = useCallback( + (token: string, proxyUrl: string, headers: Record) => { + setIsPolling(true); + setPollError(null); + + const poll = async () => { + try { + const res = await fetch(`${proxyUrl}${MFA_ENDPOINT}/finish`, { + method: 'POST', + headers: { 'Content-Type': 'application/json', ...headers }, + body: JSON.stringify({ token }), + }); + + if (res.ok) { + stopPolling(); + setIsPolling(false); + const data = (await res.json()) as MfaFinishResponse; + connectMutate({ + locationId: location.id, + connectionType: location.connection_type, + presharedKey: data.preshared_key, + }); + return; + } + + // 428 Precondition Required: user hasn't completed browser auth yet, keep polling + if (res.status === 428) return; + + // Any other error: stop polling and surface the error + stopPolling(); + setIsPolling(false); + const data = (await res.json()) as MfaErrorResponse; + const msg = data.error; + if (msg === 'invalid token' || msg === 'login session not found') { + setPollError('Session expired. Please try again.'); + } else { + setPollError('Authentication failed. Please try again.'); + } + error(`OIDC MFA poll failed for location ${location.id}: ${msg}`); + } catch (e) { + stopPolling(); + setIsPolling(false); + setPollError('Failed to reach server. Please try again.'); + error(`OIDC MFA poll network error for location ${location.id}: ${e}`); + } + }; + + intervalRef.current = setInterval(poll, POLL_INTERVAL_MS); + + timeoutRef.current = setTimeout(() => { + stopPolling(); + setIsPolling(false); + setPollError('Authentication timed out. Please try again.'); + error(`OIDC MFA timed out for location ${location.id}`); + }, POLL_TIMEOUT_MS); + }, + [location, connectMutate, stopPolling], + ); + + const start = useCallback(async () => { + if (!instance) { + setStartError('Instance not found'); + return; + } + + setIsStarting(true); + setStartError(null); + setPollError(null); + stopPolling(); + + let headers: Record; + try { + headers = await api.getEdgeRequestHeaders(); + } catch { + setStartError('Failed to load request headers'); + setIsStarting(false); + return; + } + + try { + const res = await fetch(`${instance.proxy_url}${MFA_ENDPOINT}/start`, { + method: 'POST', + headers: { 'Content-Type': 'application/json', ...headers }, + body: JSON.stringify({ + method: 2, + pubkey: instance.pubkey, + location_id: location.network_id, + }), + }); + + if (res.ok) { + const data = (await res.json()) as MfaStartResponse; + await api.openLink(`${instance.proxy_url}openid/mfa?token=${data.token}`); + startPolling(data.token, instance.proxy_url, headers); + } else { + const data = (await res.json()) as MfaErrorResponse; + setStartError(data.error ?? 'Failed to start OIDC authentication'); + error(`OIDC MFA start failed for location ${location.id}: ${data.error}`); + } + } catch (e) { + setStartError('Failed to reach server'); + error(`OIDC MFA start network error for location ${location.id}: ${e}`); + } finally { + setIsStarting(false); + } + }, [instance, location, startPolling, stopPolling]); + + return { start, isStarting, startError, isPolling, pollError }; +}; diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaOidcView/LocationCardMfaOidcView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaOidcView/LocationCardMfaOidcView.tsx new file mode 100644 index 000000000..6f7aed4a1 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaOidcView/LocationCardMfaOidcView.tsx @@ -0,0 +1,86 @@ +import './style.scss'; +import { useEffect, useState } from 'react'; +import { ThemeSpacing } from '../../../../types'; +import { Button } from '../../../Button/Button'; +import { ButtonVariant } from '../../../Button/types'; +import { Controls } from '../../../Controls/Controls'; +import { Divider } from '../../../Divider/Divider'; +import { IconKind } from '../../../Icon'; +import { IconButton } from '../../../IconButton/IconButton'; +import { IconButtonVariant } from '../../../IconButton/types'; +import { LocationViewHeader } from '../../components/LocationViewHeader/LocationViewHeader'; +import { useLocationCardContext } from '../../context/context'; +import { LocationCardViews } from '../../context/types'; +import { useMfaOidcConnect } from '../../hooks/useMfaOidcConnect'; + +type Screen = 'idle' | 'polling' | 'error'; + +export const LocationCardMfaOidcView = () => { + const { setView } = useLocationCardContext(); + const { start, isStarting, startError, isPolling, pollError } = useMfaOidcConnect(); + const [screen, setScreen] = useState('idle'); + + useEffect(() => { + if (startError ?? pollError) { + setScreen((prev) => (prev !== 'idle' ? 'error' : prev)); + } else if (isPolling) { + setScreen('polling'); + } + }, [startError, pollError, isPolling]); + + const handleStart = async () => { + await start(); + setScreen('polling'); + }; + + const errorMessage = startError ?? pollError; + + const resetToIdle = () => { + setScreen('idle'); + }; + + return ( +
+ + + {screen === 'idle' && ( +

+ To connect to the VPN, authenticate via your OpenID provider. A browser window + will open for you to sign in. +

+ )} + {screen === 'polling' && ( +

+ {`Complete the sign-in in your browser. This page will update automatically.`} +

+ )} + {screen === 'error' &&

{errorMessage}

} +
+ + setView(LocationCardViews.Default)} + /> +
+ {screen !== 'error' && ( +
+
+
+ ); +}; diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaOidcView/style.scss b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaOidcView/style.scss new file mode 100644 index 000000000..3f2d3f620 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaOidcView/style.scss @@ -0,0 +1,5 @@ +.location-card-view-header { + p.error { + color: var(--fg-critical); + } +} diff --git a/new-ui/src/shared/components/QrCard/QrCard.tsx b/new-ui/src/shared/components/QrCard/QrCard.tsx new file mode 100644 index 000000000..41750999c --- /dev/null +++ b/new-ui/src/shared/components/QrCard/QrCard.tsx @@ -0,0 +1,15 @@ +import './style.scss'; +import { QRCodeCanvas } from 'qrcode.react'; + +interface Props { + value: string; + size?: number; +} + +export const QrCard = ({ value, size = 200 }: Props) => { + return ( +
+ +
+ ); +}; diff --git a/new-ui/src/shared/components/QrCard/style.scss b/new-ui/src/shared/components/QrCard/style.scss new file mode 100644 index 000000000..93aa1d3c9 --- /dev/null +++ b/new-ui/src/shared/components/QrCard/style.scss @@ -0,0 +1,5 @@ +.qr-code-display { + background-color: var(--bg-white-100); + border-radius: var(--radius-lg); + padding: var(--spacing-md); +} From 56d8fc03039179b9e5a283073cc2bfacc616dec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Tue, 19 May 2026 11:47:37 +0200 Subject: [PATCH 009/155] connect mfa via mobile confirmation in tray ui (#877) --- new-ui/package.json | 1 + new-ui/pnpm-lock.yaml | 8 + .../components/LocationCard/LocationCard.tsx | 3 +- .../LocationCard/hooks/useMfaMobileConnect.ts | 197 ++++++++++++++++++ .../LocationCardMfaMobileView.tsx | 78 +++++++ .../LocationCardMfaMobileView/style.scss | 22 ++ new-ui/src/shared/rust-api/types.ts | 2 - 7 files changed, 308 insertions(+), 3 deletions(-) create mode 100644 new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts create mode 100644 new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx create mode 100644 new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/style.scss diff --git a/new-ui/package.json b/new-ui/package.json index 8f917f7d3..f37ffeecb 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -15,6 +15,7 @@ "dependencies": { "@biomejs/biome": "^2.4.15", "@floating-ui/react": "^0.27.19", + "@stablelib/base64": "^2.0.1", "@tanstack/react-form": "^1.32.0", "@tanstack/react-query": "^5.100.10", "@tanstack/react-router": "^1.170.4", diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index c189c6599..09514ba41 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: '@floating-ui/react': specifier: ^0.27.19 version: 0.27.19(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@stablelib/base64': + specifier: ^2.0.1 + version: 2.0.1 '@tanstack/react-form': specifier: ^1.32.0 version: 1.32.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -715,6 +718,9 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} + '@stablelib/base64@2.0.1': + resolution: {integrity: sha512-P2z89A7N1ETt6RxgpVdDT2xlg8cnm3n6td0lY9gyK7EiWK3wdq388yFX/hLknkCC0we05OZAD1rfxlQJUbl5VQ==} + '@tanstack/devtools-client@0.0.6': resolution: {integrity: sha512-f85ZJXJnDIFOoykG/BFIixuAevJovCvJF391LPs6YjBAPhGYC50NWlx1y4iF/UmK5/cCMx+/JqI5SBOz7FanQQ==} engines: {node: '>=18'} @@ -2221,6 +2227,8 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} + '@stablelib/base64@2.0.1': {} + '@tanstack/devtools-client@0.0.6': dependencies: '@tanstack/devtools-event-client': 0.4.3 diff --git a/new-ui/src/shared/components/LocationCard/LocationCard.tsx b/new-ui/src/shared/components/LocationCard/LocationCard.tsx index 1c9985d12..72b6cbc90 100644 --- a/new-ui/src/shared/components/LocationCard/LocationCard.tsx +++ b/new-ui/src/shared/components/LocationCard/LocationCard.tsx @@ -17,6 +17,7 @@ import { LocationCardViews, type LocationCardViewsValue } from './context/types' import { ConnectedView } from './views/ConnectedView/ConnectedView'; import { DefaultView } from './views/DefaultView/DefaultView'; import { LocationCardMfaEmailView } from './views/LocationCardMfaEmailView/LocationCardMfaEmailView'; +import { LocationCardMfaMobileView } from './views/LocationCardMfaMobileView/LocationCardMfaMobileView'; import { LocationCardMfaOidcView } from './views/LocationCardMfaOidcView/LocationCardMfaOidcView'; import { LocationCardMfaSettings } from './views/LocationCardMfaSettings/LocationCardMfaSettings'; import { LocationCardMfaTotpView } from './views/LocationCardMfaTotpView/LocationCardMfaTotpView'; @@ -34,7 +35,7 @@ const views: Record = { [LocationCardViews.MfaTotp]: , [LocationCardViews.MfaEmail]: , [LocationCardViews.MfaOidc]: , - [LocationCardViews.MfaMobile]: null, + [LocationCardViews.MfaMobile]: , [LocationCardViews.MfaSettings]: , [LocationCardViews.Connecting]: null, [LocationCardViews.Connected]: , diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts new file mode 100644 index 000000000..5923f6311 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts @@ -0,0 +1,197 @@ +import { encode } from '@stablelib/base64'; +import { useMutation } from '@tanstack/react-query'; +import { fetch } from '@tauri-apps/plugin-http'; +import { error } from '@tauri-apps/plugin-log'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { api } from '../../../rust-api/api'; +import { useLocationCardContext } from '../context/context'; +import { LocationCardViews } from '../context/types'; + +const MFA_ENDPOINT = 'api/v1/client-mfa'; + +type MfaStartResponse = { + token: string; + challenge: string; +}; + +type MfaErrorResponse = { + error: string; +}; + +type TokenData = { + token: string; + challenge: string; +}; + +export const useMfaMobileConnect = () => { + const { location, instance, setView } = useLocationCardContext(); + + const [isStarting, setIsStarting] = useState(false); + const [startError, setStartError] = useState(null); + const [tokenData, setTokenData] = useState(null); + const [isConnecting, setIsConnecting] = useState(false); + const [connectionError, setConnectionError] = useState(null); + + const wsRef = useRef(null); + const expectedCloseRef = useRef(false); + + const { mutate: connectMutate } = useMutation({ + mutationFn: api.connect, + onSuccess: () => { + setView(LocationCardViews.Connected); + }, + onError: (err) => { + error(`Connect command failed after successful mobile MFA\n${err}`); + setConnectionError('Failed to establish VPN connection'); + }, + }); + + // Open WebSocket when tokenData is available + useEffect(() => { + if (!tokenData) return; + + const wsUrl = `${instance.proxy_url + .replace(/^http:/, 'ws:') + .replace( + /^https:/, + 'wss:', + )}${MFA_ENDPOINT}/remote?token=${encodeURIComponent(tokenData.token)}`; + + expectedCloseRef.current = false; + const ws = new WebSocket(wsUrl); + wsRef.current = ws; + + ws.onopen = () => { + setIsConnecting(true); + setConnectionError(null); + }; + + ws.onmessage = (event: MessageEvent) => { + try { + const parsed = JSON.parse(event.data as string) as unknown; + if ( + typeof parsed === 'object' && + parsed !== null && + 'preshared_key' in parsed && + typeof (parsed as Record).preshared_key === 'string' + ) { + const presharedKey = (parsed as { preshared_key: string }).preshared_key; + expectedCloseRef.current = true; + connectMutate({ + locationId: location.id, + connectionType: location.connection_type, + presharedKey, + }); + } else { + error( + `Unexpected mobile MFA WS message for location ${location.id}: ${event.data}`, + ); + } + } catch (e) { + error(`Failed to parse mobile MFA WS message for location ${location.id}: ${e}`); + } + }; + + ws.onerror = () => { + if (!expectedCloseRef.current) { + setIsConnecting(false); + setConnectionError('Connection error. Please try again.'); + error(`Mobile MFA WebSocket error for location ${location.id}`); + } + }; + + ws.onclose = () => { + if (!expectedCloseRef.current) { + setIsConnecting(false); + setConnectionError('Connection closed unexpectedly. Please try again.'); + error(`Mobile MFA WebSocket closed unexpectedly for location ${location.id}`); + } + }; + + return () => { + expectedCloseRef.current = true; + ws.close(); + wsRef.current = null; + setIsConnecting(false); + }; + }, [tokenData, instance, connectMutate, location]); + + // Clean up WebSocket on unmount + useEffect(() => { + return () => { + if (wsRef.current) { + expectedCloseRef.current = true; + wsRef.current.close(); + wsRef.current = null; + } + }; + }, []); + + const qrValue = useMemo(() => { + if (!tokenData) return null; + const json = JSON.stringify({ + token: tokenData.token, + challenge: tokenData.challenge, + instance_id: instance.uuid, + }); + return encode(new TextEncoder().encode(json)); + }, [tokenData, instance.uuid]); + + const start = useCallback(async () => { + setIsStarting(true); + setStartError(null); + setConnectionError(null); + // Clear previous token → triggers WS cleanup via effect + setTokenData(null); + + let headers: Record; + try { + headers = await api.getEdgeRequestHeaders(); + } catch { + setStartError('Failed to load request headers'); + setIsStarting(false); + return; + } + + try { + const res = await fetch(`${instance.proxy_url}${MFA_ENDPOINT}/start`, { + method: 'POST', + headers: { 'Content-Type': 'application/json', ...headers }, + body: JSON.stringify({ + method: 4, + pubkey: instance.pubkey, + location_id: location.network_id, + }), + }); + + if (res.ok) { + const data = (await res.json()) as MfaStartResponse; + setTokenData({ token: data.token, challenge: data.challenge }); + } else { + const data = (await res.json()) as MfaErrorResponse; + setStartError(data.error ?? 'Failed to start mobile authentication'); + error(`Mobile MFA start failed for location ${location.id}: ${data.error}`); + } + } catch (e) { + setStartError('Failed to reach server'); + error(`Mobile MFA start network error for location ${location.id}: ${e}`); + } finally { + setIsStarting(false); + } + }, [instance, location]); + + const reset = useCallback(() => { + if (wsRef.current) { + expectedCloseRef.current = true; + wsRef.current.close(); + wsRef.current = null; + } + setTokenData(null); + setIsStarting(false); + setStartError(null); + setIsConnecting(false); + setConnectionError(null); + }, []); + + return { start, isStarting, startError, qrValue, isConnecting, connectionError, reset }; +}; diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx new file mode 100644 index 000000000..b0e09244f --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx @@ -0,0 +1,78 @@ +import './style.scss'; +import { useEffect, useRef, useState } from 'react'; +import { ThemeSpacing } from '../../../../types'; +import { Button } from '../../../Button/Button'; +import { ButtonVariant } from '../../../Button/types'; +import { Controls } from '../../../Controls/Controls'; +import { Divider } from '../../../Divider/Divider'; +import { IconKind } from '../../../Icon'; +import { IconButton } from '../../../IconButton/IconButton'; +import { IconButtonVariant } from '../../../IconButton/types'; +import { QrCard } from '../../../QrCard/QrCard'; +import { LocationViewHeader } from '../../components/LocationViewHeader/LocationViewHeader'; +import { useLocationCardContext } from '../../context/context'; +import { LocationCardViews } from '../../context/types'; +import { useMfaMobileConnect } from '../../hooks/useMfaMobileConnect'; + +type Screen = 'loading' | 'qr' | 'error'; + +export const LocationCardMfaMobileView = () => { + const { setView } = useLocationCardContext(); + const { start, startError, qrValue, connectionError, reset } = useMfaMobileConnect(); + const [screen, setScreen] = useState('loading'); + const startedRef = useRef(false); + + // Auto-start on mount + useEffect(() => { + if (startedRef.current) return; + startedRef.current = true; + void start(); + }, [start]); + + useEffect(() => { + if (startError ?? connectionError) { + setScreen('error'); + } else if (qrValue) { + setScreen('qr'); + } + }, [startError, connectionError, qrValue]); + + const retry = () => { + reset(); + setScreen('loading'); + void start(); + }; + + const errorMessage = startError ?? connectionError; + + return ( +
+ + + {screen === 'loading' &&

Preparing authentication...

} + {screen === 'qr' && ( +

Open your Defguard mobile app and scan the QR code you see bellow.

+ )} + {screen === 'error' &&

{errorMessage}

} +
+ {screen === 'qr' && qrValue && ( +
+ +
+ )} + + setView(LocationCardViews.Default)} + /> +
+ {screen === 'error' && ( +
+
+
+ ); +}; diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/style.scss b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/style.scss new file mode 100644 index 000000000..02de3b954 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/style.scss @@ -0,0 +1,22 @@ +.location-card-mfa-mobile { + display: flex; + flex-direction: column; + + .qr-wrapper { + display: flex; + flex-direction: column; + align-items: center; + gap: var(--spacing-md); + padding-top: var(--spacing-lg); + + p { + text-align: center; + } + } + + .location-card-view-header { + p.error { + color: var(--fg-critical); + } + } +} diff --git a/new-ui/src/shared/rust-api/types.ts b/new-ui/src/shared/rust-api/types.ts index 4b852311f..f82a67160 100644 --- a/new-ui/src/shared/rust-api/types.ts +++ b/new-ui/src/shared/rust-api/types.ts @@ -286,8 +286,6 @@ export type SaveDeviceConfigResponse = { locations: LocationInfo[]; }; -// ── Request argument types ─────────────────────────────────────────────────── - export type ConnectionArgs = { locationId: number; connectionType: ConnectionType; From db796de966c363e6bae7c270dead8be3a066f87d Mon Sep 17 00:00:00 2001 From: Jacek Chmielewski Date: Tue, 19 May 2026 15:46:42 +0200 Subject: [PATCH 010/155] Implement posture checks (#871) * nix flake update * initial work on posture checks on old UI * nix flake update * posture check for non-mfa locations * posture checks during MFA connection flow * cargo update; extend glib trivyignore * fix clippy issue * fix typing * update protos, restructure protos module * fix proto imports; only windows gets postures from service * remove console.logs * allow dead code * fix location id; better error message * whitelist new tauri commands * fix windows compilation * import Id * remove unused command argument * post_with_headers helper * fix windows proto import * update proto submodule * move non-mfa posture connection fully to backend --- flake.lock | 12 +-- nix/shell.nix | 2 + src-tauri/permissions/default.toml | 1 + src-tauri/proto | 2 +- src-tauri/src/bin/defguard-client.rs | 1 + src-tauri/src/commands.rs | 37 ++++++++- src-tauri/src/enterprise/inspector/mod.rs | 2 +- src-tauri/src/enterprise/mod.rs | 1 + src-tauri/src/enterprise/periodic/config.rs | 17 +--- src-tauri/src/enterprise/posture.rs | 79 +++++++++++++++++++ .../src/enterprise/service_locations/mod.rs | 2 +- .../enterprise/service_locations/windows.rs | 2 +- src-tauri/src/error.rs | 4 + src-tauri/src/proto.rs | 13 +-- src-tauri/src/service/client.rs | 3 +- src-tauri/src/service/daemon.rs | 36 +++++++-- src-tauri/src/service/mod.rs | 25 +++--- src-tauri/src/service/proto.rs | 18 +++++ src-tauri/src/utils.rs | 28 ++++++- src/pages/client/clientAPI/clientApi.ts | 4 + src/pages/client/clientAPI/types.ts | 1 + .../modals/MFAModal/MFAModal.tsx | 8 +- src/pages/client/types.ts | 2 +- 23 files changed, 237 insertions(+), 63 deletions(-) create mode 100644 src-tauri/src/enterprise/posture.rs create mode 100644 src-tauri/src/service/proto.rs diff --git a/flake.lock b/flake.lock index 21b6ba820..37bef6922 100644 --- a/flake.lock +++ b/flake.lock @@ -44,11 +44,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1771423170, - "narHash": "sha256-K7Dg9TQ0mOcAtWTO/FX/FaprtWQ8BmEXTpLIaNRhEwU=", + "lastModified": 1778794387, + "narHash": "sha256-BL04pOS9453Awkeb9f90XBJXBSkWxN+vB7HIgnL0iMM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bcc4a9d9533c033d806a46b37dc444f9b0da49dd", + "rev": "8a1b0127302ea51e05bf4ea5a291743fac442406", "type": "github" }, "original": { @@ -99,11 +99,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1771816254, - "narHash": "sha256-vkp3iTF6QmHMvL+34DI93IiMPjS2lqcMlA1fl7nXVsQ=", + "lastModified": 1778815121, + "narHash": "sha256-xlhD+1NVJbhrUUM2usRHW6iKWTXP2uw2Fo6sWJmLg8g=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "085bdbf5dde5477538e4c87d1684b6c6df56c0ad", + "rev": "017351829a9356423afd2cca0dde9b63346c8ab3", "type": "github" }, "original": { diff --git a/nix/shell.nix b/nix/shell.nix index 34c2be3a0..bd885377e 100644 --- a/nix/shell.nix +++ b/nix/shell.nix @@ -32,6 +32,8 @@ in trunk sqlx-cli vtsls + trivy + just ]; shellHook = with pkgs; '' diff --git a/src-tauri/permissions/default.toml b/src-tauri/permissions/default.toml index 725267507..303597ede 100644 --- a/src-tauri/permissions/default.toml +++ b/src-tauri/permissions/default.toml @@ -36,4 +36,5 @@ commands.allow = [ "swap_to_old_ui", "all_active_connections", "disconnect_locations", + "get_posture_data", ] diff --git a/src-tauri/proto b/src-tauri/proto index 84a2bf71b..971be5439 160000 --- a/src-tauri/proto +++ b/src-tauri/proto @@ -1 +1 @@ -Subproject commit 84a2bf71b1435d956cae2f7933ab9b7e880292b6 +Subproject commit 971be5439869cc66056b45d18de40b65c1ac6619 diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index f41f38122..1428af493 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -182,6 +182,7 @@ fn main() { command_set_app_config, get_provisioning_config, get_platform_header, + get_posture_data, set_location_mfa_method, open_new_ui_window, open_old_ui_window, diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index bb2b342ae..af70e7ba4 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -29,7 +29,10 @@ use crate::{ }, DB_POOL, }, - enterprise::{periodic::config::poll_instance, provisioning::ProvisioningConfig}, + enterprise::{ + periodic::config::poll_instance, posture::authorize_posture_session, + provisioning::ProvisioningConfig, + }, error::Error, events::EventKey, log_watcher::{ @@ -37,6 +40,7 @@ use crate::{ service_log_watcher::stop_log_watcher_task, }, proto::defguard::client_types::DeviceConfigResponse, + service::proto::defguard::enterprise::posture::v2::DevicePostureData, tray::{configure_tray_icon, reload_tray_menu}, utils::{ construct_platform_header, disconnect_interface, get_location_interface_details, @@ -50,7 +54,7 @@ use crate::{ use crate::{ service::{ client::DAEMON_CLIENT, - proto::{ + proto::defguard::client::v1::{ DeleteServiceLocationsRequest, RemoveInterfaceRequest, SaveServiceLocationsRequest, }, }, @@ -72,6 +76,11 @@ pub async fn connect( "Identified location with ID {location_id} as \"{}\", handling connection.", location.name ); + let preshared_key = if location.posture_check_required && preshared_key.is_none() { + Some(authorize_posture_session(&location).await?) + } else { + preshared_key + }; handle_connection_for_location(&location, preshared_key, &handle).await?; reload_tray_menu(&handle).await; info!("Connected to location {location}"); @@ -490,6 +499,7 @@ pub struct LocationInfo { pub pubkey: String, pub network_id: Id, pub location_mfa_mode: LocationMfaMode, + pub posture_check_required: bool, pub mfa_method: Option, } @@ -543,6 +553,7 @@ pub async fn all_locations(instance_id: Id) -> Result, Error> pubkey: location.pubkey, network_id: location.network_id, location_mfa_mode: location.location_mfa_mode, + posture_check_required: location.posture_check_required, mfa_method: location.mfa_method, }; location_info.push(info); @@ -1521,6 +1532,28 @@ pub fn get_platform_header() -> String { construct_platform_header() } +#[tauri::command(async)] +#[cfg(not(windows))] +pub async fn get_posture_data() -> Result { + debug!("Received a command to prepare posture report"); + Ok(DevicePostureData::new()) +} + +#[tauri::command(async)] +#[cfg(windows)] +pub async fn get_posture_data() -> Result { + debug!("Received a command to prepare posture report"); + DAEMON_CLIENT + .clone() + .get_posture_data(tonic::Request::new(())) + .await + .map(|response| response.into_inner()) + .map_err(|err| { + error!("Failed to get posture data from the daemon: {err}"); + Error::InternalError(format!("Failed to get posture data from the daemon: {err}")) + }) +} + #[derive(Debug, Serialize)] pub struct ActiveConnectionSummary { pub id: Id, diff --git a/src-tauri/src/enterprise/inspector/mod.rs b/src-tauri/src/enterprise/inspector/mod.rs index bbf641958..789bb6606 100644 --- a/src-tauri/src/enterprise/inspector/mod.rs +++ b/src-tauri/src/enterprise/inspector/mod.rs @@ -12,7 +12,7 @@ use std::{env::consts::OS, error::Error, fmt}; use sysinfo::System; use crate::{ - proto::defguard::enterprise::posture::v2::{ + service::proto::defguard::enterprise::posture::v2::{ bool_check, string_check, BoolCheck, DevicePostureData, StringCheck, UnavailableReason, }, VERSION, diff --git a/src-tauri/src/enterprise/mod.rs b/src-tauri/src/enterprise/mod.rs index 6074c0543..a76ac9a2b 100644 --- a/src-tauri/src/enterprise/mod.rs +++ b/src-tauri/src/enterprise/mod.rs @@ -1,5 +1,6 @@ pub mod inspector; pub mod models; pub mod periodic; +pub mod posture; pub mod provisioning; pub mod service_locations; diff --git a/src-tauri/src/enterprise/periodic/config.rs b/src-tauri/src/enterprise/periodic/config.rs index 7aca24948..22d680319 100644 --- a/src-tauri/src/enterprise/periodic/config.rs +++ b/src-tauri/src/enterprise/periodic/config.rs @@ -6,7 +6,7 @@ use std::{ time::Duration, }; -use reqwest::{Client, StatusCode}; +use reqwest::StatusCode; use serde::Serialize; use sqlx::{Sqlite, Transaction}; use tauri::{AppHandle, Emitter, Url}; @@ -24,13 +24,11 @@ use crate::{ proto::defguard::client_types::{ DeviceConfigResponse, InstanceInfoRequest, InstanceInfoResponse, }, - utils::construct_platform_header, - CLIENT_PLATFORM_HEADER, CLIENT_VERSION_HEADER, MIN_CORE_VERSION, MIN_PROXY_VERSION, - PKG_VERSION, + utils::post_with_headers, + MIN_CORE_VERSION, MIN_PROXY_VERSION, }; const INTERVAL_SECONDS: Duration = Duration::from_secs(30); -const HTTP_REQ_TIMEOUT: Duration = Duration::from_secs(5); static POLLING_ENDPOINT: &str = "/api/v1/poll"; /// Periodically retrieves and updates configuration for all [`Instance`]s. @@ -138,14 +136,7 @@ pub async fn poll_instance( instance.proxy_url )) })?; - let response = Client::new() - .post(url) - .json(&request) - .header(CLIENT_VERSION_HEADER, PKG_VERSION) - .header(CLIENT_PLATFORM_HEADER, construct_platform_header()) - .timeout(HTTP_REQ_TIMEOUT) - .send() - .await; + let response = post_with_headers(url, &request).await; let response = response.map_err(|err| { Error::InternalError(format!( "HTTP request failed for instance {}({}), url: {}, {err}", diff --git a/src-tauri/src/enterprise/posture.rs b/src-tauri/src/enterprise/posture.rs new file mode 100644 index 000000000..aa6472a64 --- /dev/null +++ b/src-tauri/src/enterprise/posture.rs @@ -0,0 +1,79 @@ +use reqwest::StatusCode; +use serde::Deserialize; + +use crate::{ + database::{ + models::{instance::Instance, location::Location, wireguard_keys::WireguardKeys, Id}, + DB_POOL, + }, + error::Error, + service::proto::defguard::enterprise::posture::v2::{ + DevicePostureCheckRequest, DevicePostureCheckResponse, DevicePostureData, + }, + utils::post_with_headers, +}; + +const POSTURE_ENDPOINT: &str = "/api/v1/posture/connect"; + +/// Collects device posture data, sends it to the proxy, and returns the runtime preshared key. +pub async fn authorize_posture_session(location: &Location) -> Result { + let instance = Instance::find_by_id(&*DB_POOL, location.instance_id) + .await? + .ok_or(Error::NotFound)?; + + let keys = WireguardKeys::find_by_instance_id(&*DB_POOL, location.instance_id) + .await? + .ok_or_else(|| { + Error::ResourceNotFound(format!( + "WireGuard keys not found for instance {}", + location.instance_id + )) + })?; + + let posture_data = DevicePostureData::new(); + + let request = DevicePostureCheckRequest { + location_id: location.network_id, + pubkey: keys.pubkey, + device_posture_data: Some(posture_data), + }; + + let proxy_url = tauri::Url::parse(&instance.proxy_url) + .map_err(|e| Error::InternalError(format!("Invalid proxy URL: {e}")))? + .join(POSTURE_ENDPOINT) + .map_err(|e| Error::InternalError(format!("Failed to build posture URL: {e}")))?; + + debug!("Sending posture check request to {proxy_url}"); + let response = post_with_headers(proxy_url, &request) + .await + .map_err(|e| Error::HttpError(e.to_string()))?; + + match response.status() { + StatusCode::OK => { + let body: DevicePostureCheckResponse = response + .json() + .await + .map_err(|e| Error::HttpError(e.to_string()))?; + info!("Posture check approved for location {}", location.id); + Ok(body.preshared_key) + } + StatusCode::FORBIDDEN => { + #[derive(Deserialize)] + struct PostureRejection { + error: String, + } + let body: PostureRejection = response + .json() + .await + .map_err(|e| Error::HttpError(e.to_string()))?; + error!( + "Posture check rejected for location {}: {}", + location.id, body.error + ); + Err(Error::PostureCheckFailed(body.error)) + } + status => Err(Error::HttpError(format!( + "Unexpected proxy response: {status}" + ))), + } +} diff --git a/src-tauri/src/enterprise/service_locations/mod.rs b/src-tauri/src/enterprise/service_locations/mod.rs index f120d5522..199b0c67c 100644 --- a/src-tauri/src/enterprise/service_locations/mod.rs +++ b/src-tauri/src/enterprise/service_locations/mod.rs @@ -8,7 +8,7 @@ use crate::{ location::{Location, ServiceLocationMode}, Id, }, - service::proto::ServiceLocation, + service::proto::defguard::client::v1::ServiceLocation, }; #[cfg(windows)] diff --git a/src-tauri/src/enterprise/service_locations/windows.rs b/src-tauri/src/enterprise/service_locations/windows.rs index e6aa14d6d..cf8aee722 100644 --- a/src-tauri/src/enterprise/service_locations/windows.rs +++ b/src-tauri/src/enterprise/service_locations/windows.rs @@ -32,7 +32,7 @@ use crate::{ }, service::{ daemon::setup_wgapi, - proto::{ServiceLocation, ServiceLocationMode}, + proto::defguard::client::v1::{ServiceLocation, ServiceLocationMode}, }, }; diff --git a/src-tauri/src/error.rs b/src-tauri/src/error.rs index 176710cb8..28a6db94f 100644 --- a/src-tauri/src/error.rs +++ b/src-tauri/src/error.rs @@ -46,6 +46,10 @@ pub enum Error { ConversionError(String), #[error("JSON error: {0}")] JsonError(#[from] serde_json::Error), + #[error("HTTP request error: {0}")] + HttpError(String), + #[error("Posture check failed: {0}")] + PostureCheckFailed(String), } // we must manually implement serde::Serialize diff --git a/src-tauri/src/proto.rs b/src-tauri/src/proto.rs index 5fbeef759..b89eb1cf7 100644 --- a/src-tauri/src/proto.rs +++ b/src-tauri/src/proto.rs @@ -7,24 +7,13 @@ use crate::database::models::{ }; pub(crate) mod defguard { - #[allow(dead_code)] - pub(crate) mod enterprise { - pub(crate) mod posture { - pub(crate) mod v2 { - tonic::include_proto!("defguard.enterprise.posture.v2"); - } - } - } + pub(crate) use crate::service::proto::defguard::client_types; pub(crate) mod proxy { pub(crate) mod v1 { tonic::include_proto!("defguard.proxy.v1"); } } - - pub mod client_types { - tonic::include_proto!("defguard.client_types"); - } } impl defguard::client_types::DeviceConfig { diff --git a/src-tauri/src/service/client.rs b/src-tauri/src/service/client.rs index abf9afb14..1897e2b10 100644 --- a/src-tauri/src/service/client.rs +++ b/src-tauri/src/service/client.rs @@ -12,11 +12,12 @@ use tower::service_fn; #[cfg(windows)] use windows_sys::Win32::Foundation::ERROR_PIPE_BUSY; +use crate::service::proto::defguard::client::v1::desktop_daemon_service_client::DesktopDaemonServiceClient; + #[cfg(unix)] use super::daemon::DAEMON_SOCKET_PATH; #[cfg(windows)] use super::named_pipe::PIPE_NAME; -use super::proto::desktop_daemon_service_client::DesktopDaemonServiceClient; pub(crate) static DAEMON_CLIENT: LazyLock> = LazyLock::new(|| { diff --git a/src-tauri/src/service/daemon.rs b/src-tauri/src/service/daemon.rs index 81761ceb0..4bef74b56 100644 --- a/src-tauri/src/service/daemon.rs +++ b/src-tauri/src/service/daemon.rs @@ -23,24 +23,22 @@ use tonic::{ transport::Server, Code, Response, Status, }; -use tracing::{debug, error, info, info_span, Instrument}; +use tracing::{debug, error, info, info_span, warn, Instrument}; use super::{ config::Config, - proto::{ + proto::defguard::client::v1::{ desktop_daemon_service_server::{DesktopDaemonService, DesktopDaemonServiceServer}, - CreateInterfaceRequest, InterfaceData, ReadInterfaceDataRequest, RemoveInterfaceRequest, + CreateInterfaceRequest, DeleteServiceLocationsRequest, InterfaceData, + ReadInterfaceDataRequest, RemoveInterfaceRequest, SaveServiceLocationsRequest, }, }; #[cfg(windows)] use crate::enterprise::service_locations::ServiceLocationManager; #[cfg(windows)] use crate::service::named_pipe::{get_named_pipe_server_stream, PIPE_NAME}; -use crate::{ - enterprise::service_locations::ServiceLocationError, - service::proto::{DeleteServiceLocationsRequest, SaveServiceLocationsRequest}, - VERSION, -}; +use crate::service::proto::defguard::enterprise::posture::v2::DevicePostureData; +use crate::{enterprise::service_locations::ServiceLocationError, VERSION}; #[cfg(unix)] pub(super) const DAEMON_SOCKET_PATH: &str = "/var/run/defguard.socket"; @@ -241,6 +239,19 @@ impl DesktopDaemonService for DaemonService { Ok(Response::new(())) } + #[cfg(not(windows))] + async fn get_posture_data( + &self, + _request: tonic::Request<()>, + ) -> Result, Status> { + warn!( + "Daemon service received a get_posture_data request. Daemon posture requests are only supported on windows systems. Unix systems perform client-side posture checks." + ); + Err(Status::unimplemented( + "Service-side posture checks are only supported on Unix systems", + )) + } + #[cfg(windows)] async fn delete_service_locations( &self, @@ -497,6 +508,15 @@ impl DesktopDaemonService for DaemonService { Box::pin(output_stream) as Self::ReadInterfaceDataStream )) } + + #[cfg(windows)] + async fn get_posture_data( + &self, + _request: tonic::Request<()>, + ) -> Result, Status> { + debug!("Get posture data request received"); + Ok(Response::new(DevicePostureData::new())) + } } #[cfg(unix)] diff --git a/src-tauri/src/service/mod.rs b/src-tauri/src/service/mod.rs index 9ba7bf308..345d068d8 100644 --- a/src-tauri/src/service/mod.rs +++ b/src-tauri/src/service/mod.rs @@ -1,9 +1,8 @@ #[cfg(not(target_os = "macos"))] pub mod client; pub mod config; -pub mod proto { - tonic::include_proto!("defguard.client.v1"); -} +pub mod proto; + #[cfg(not(target_os = "macos"))] pub mod daemon; #[cfg(windows)] @@ -21,7 +20,11 @@ use defguard_wireguard_rs::{ host::Host, key::Key, net::IpAddrMask, peer::Peer, InterfaceConfiguration, }; -impl From for proto::InterfaceConfig { +use crate::service::proto::defguard::client::v1::{ + InterfaceConfig, InterfaceData, Peer as ProtoPeer, +}; + +impl From for InterfaceConfig { fn from(config: InterfaceConfiguration) -> Self { Self { name: config.name, @@ -39,8 +42,8 @@ impl From for proto::InterfaceConfig { } } -impl From for InterfaceConfiguration { - fn from(config: proto::InterfaceConfig) -> Self { +impl From for InterfaceConfiguration { + fn from(config: InterfaceConfig) -> Self { let addresses = config .address .split(',') @@ -58,7 +61,7 @@ impl From for InterfaceConfiguration { } } -impl From for proto::Peer { +impl From for ProtoPeer { fn from(peer: Peer) -> Self { Self { public_key: peer.public_key.to_lower_hex(), @@ -82,8 +85,8 @@ impl From for proto::Peer { } } -impl From for Peer { - fn from(peer: proto::Peer) -> Self { +impl From for Peer { + fn from(peer: ProtoPeer) -> Self { Self { public_key: Key::decode(peer.public_key).expect("Failed to parse public key"), preshared_key: peer @@ -111,7 +114,7 @@ impl From for Peer { } } -impl From for proto::InterfaceData { +impl From for InterfaceData { fn from(host: Host) -> Self { Self { listen_port: u32::from(host.listen_port), @@ -143,7 +146,7 @@ mod tests { base_peer.tx_bytes = 100; base_peer.rx_bytes = 200; - let proto_peer: proto::Peer = base_peer.clone().into(); + let proto_peer: ProtoPeer = base_peer.clone().into(); let converted_peer: Peer = proto_peer.into(); diff --git a/src-tauri/src/service/proto.rs b/src-tauri/src/service/proto.rs new file mode 100644 index 000000000..ccc1b046c --- /dev/null +++ b/src-tauri/src/service/proto.rs @@ -0,0 +1,18 @@ +pub mod defguard { + pub mod enterprise { + pub mod posture { + pub mod v2 { + tonic::include_proto!("defguard.enterprise.posture.v2"); + } + } + } + pub mod client { + pub mod v1 { + tonic::include_proto!("defguard.client.v1"); + } + } + + pub mod client_types { + tonic::include_proto!("defguard.client_types"); + } +} diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index e98c2d60c..bcd1581d5 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -2,7 +2,7 @@ use std::str::FromStr; #[cfg(target_os = "macos")] use std::time::Duration; -use std::{env, path::Path, process::Command}; +use std::{env, path::Path, process::Command, time::Duration}; use base64::{prelude::BASE64_STANDARD, Engine}; #[cfg(not(target_os = "macos"))] @@ -10,6 +10,8 @@ use common::{find_free_tcp_port, get_interface_name}; #[cfg(not(target_os = "macos"))] use defguard_wireguard_rs::{key::Key, net::IpAddrMask, peer::Peer, InterfaceConfiguration}; use prost::Message; +use reqwest::{Client, Response}; +use serde::Serialize; use sqlx::query; use tauri::{AppHandle, Emitter, Manager}; #[cfg(not(target_os = "macos"))] @@ -44,14 +46,16 @@ use crate::{ events::EventKey, log_watcher::service_log_watcher::spawn_log_watcher_task, proto::defguard::client_types::ClientPlatformInfo, - ConnectionType, + ConnectionType, CLIENT_PLATFORM_HEADER, CLIENT_VERSION_HEADER, PKG_VERSION, }; #[cfg(not(target_os = "macos"))] use crate::{ database::models::{location_stats::peer_to_location_stats, tunnel::peer_to_tunnel_stats}, service::{ client::DAEMON_CLIENT, - proto::{CreateInterfaceRequest, ReadInterfaceDataRequest, RemoveInterfaceRequest}, + proto::defguard::client::v1::{ + CreateInterfaceRequest, ReadInterfaceDataRequest, RemoveInterfaceRequest, + }, }, }; @@ -1116,3 +1120,21 @@ pub async fn get_all_tunnels_locations() -> (Vec>, Vec>) let locations = Location::all(&*DB_POOL, false).await.unwrap_or_default(); (tunnels, locations) } + +const HTTP_REQ_TIMEOUT: Duration = Duration::from_secs(5); +pub(crate) async fn post_with_headers( + url: tauri::Url, + data: &T, +) -> Result +where + T: Serialize + ?Sized, +{ + Client::new() + .post(url) + .json(data) + .header(CLIENT_VERSION_HEADER, PKG_VERSION) + .header(CLIENT_PLATFORM_HEADER, construct_platform_header()) + .timeout(HTTP_REQ_TIMEOUT) + .send() + .await +} diff --git a/src/pages/client/clientAPI/clientApi.ts b/src/pages/client/clientAPI/clientApi.ts index 3fab2b3c7..4278415dc 100644 --- a/src/pages/client/clientAPI/clientApi.ts +++ b/src/pages/client/clientAPI/clientApi.ts @@ -130,6 +130,9 @@ const stopGlobalLogWatcher = async (): Promise => const getAppConfig = async (): Promise => invokeWrapper('command_get_app_config'); +const getPostureData = async (): Promise => + invokeWrapper('get_posture_data'); + const getProvisioningConfig = async (): Promise => invokeWrapper('get_provisioning_config'); @@ -149,6 +152,7 @@ export const clientApi = { getAppConfig, setAppConfig, getInstances, + getPostureData, getTunnels, getLocations, connect, diff --git a/src/pages/client/clientAPI/types.ts b/src/pages/client/clientAPI/types.ts index 0b970e95d..b6439509a 100644 --- a/src/pages/client/clientAPI/types.ts +++ b/src/pages/client/clientAPI/types.ts @@ -132,6 +132,7 @@ export type TauriCommandKey = | 'all_instances' | 'all_locations' | 'connect' + | 'get_posture_data' | 'disconnect' | 'location_stats' | 'last_connection' diff --git a/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal.tsx b/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal.tsx index cc63098cb..9d7a9181b 100644 --- a/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal.tsx +++ b/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal.tsx @@ -31,7 +31,7 @@ import { MfaMobileApprove } from './components/MfaMobileApprove/MfaMobileApprove import { BrowserErrorIcon, BrowserPendingIcon, GoToBrowserIcon } from './Icons'; import { useMFAModal } from './useMFAModal'; -const { connect } = clientApi; +const { connect, getPostureData } = clientApi; const CODE_LENGTH = 6; const CLIENT_MFA_ENDPOINT = 'api/v1/client-mfa'; @@ -112,10 +112,14 @@ export const MFAModal = () => { setProxyUrl(selectedInstance.proxy_url); const mfaStartUrl = `${selectedInstance.proxy_url + CLIENT_MFA_ENDPOINT}/start`; + const posture_data = location.posture_check_required + ? await getPostureData() + : undefined; const data = { method, pubkey: selectedInstance.pubkey, location_id: location.network_id, + posture_data, }; try { @@ -168,7 +172,7 @@ export const MFAModal = () => { if (errorData === 'selected MFA method not available') { toaster.error(localLL.errors.mfaNotConfigured()); } else { - toaster.error(localLL.errors.mfaStartGeneric()); + toaster.error(errorData); } return; diff --git a/src/pages/client/types.ts b/src/pages/client/types.ts index 8c0b1e665..9954bb262 100644 --- a/src/pages/client/types.ts +++ b/src/pages/client/types.ts @@ -75,7 +75,7 @@ export type CommonWireguardFields = { pubkey: string; instance_id: number; network_id: number; - // TODO: device posture data, if available + posture_check_required: boolean; }; export type SelectedInstance = { From 73f31877194e122a80f1ea8e8a6319d006bf9bea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Wed, 20 May 2026 07:34:49 +0200 Subject: [PATCH 011/155] Fix build on macOS --- src-tauri/Cargo.lock | 30 +++++++++--------------------- src-tauri/src/utils.rs | 2 -- src-tauri/src/window.rs | 2 ++ 3 files changed, 11 insertions(+), 23 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 4a3a58f79..97d34a07f 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1048,7 +1048,7 @@ dependencies = [ name = "common" version = "2.1.0" dependencies = [ - "nix 0.31.3", + "nix", ] [[package]] @@ -1423,7 +1423,7 @@ dependencies = [ "hyper-util", "known-folders", "log", - "nix 0.31.3", + "nix", "objc2 0.6.4", "objc2-foundation 0.3.2", "objc2-network-extension", @@ -1512,7 +1512,7 @@ dependencies = [ "ip_network", "ip_network_table", "libc", - "nix 0.31.3", + "nix", "parking_lot", "ring", "socket2", @@ -1540,7 +1540,7 @@ dependencies = [ "netlink-packet-utils", "netlink-packet-wireguard", "netlink-sys", - "nix 0.31.3", + "nix", "regex", "serde", "thiserror 2.0.18", @@ -3719,18 +3719,6 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" -[[package]] -name = "nix" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" -dependencies = [ - "bitflags 2.11.1", - "cfg-if", - "cfg_aliases", - "libc", -] - [[package]] name = "nix" version = "0.31.3" @@ -3813,9 +3801,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-integer" @@ -4249,13 +4237,13 @@ dependencies = [ [[package]] name = "os_info" -version = "3.14.0" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4022a17595a00d6a369236fdae483f0de7f0a339960a53118b818238e132224" +checksum = "9cf20a545b305cf1da722b236b5155c9bb35f1d5ceb28c048bd96ca842f41b5b" dependencies = [ "android_system_properties", "log", - "nix 0.30.1", + "nix", "objc2 0.6.4", "objc2-foundation 0.3.2", "objc2-ui-kit", diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index bcd1581d5..6f6bd3b47 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -1,7 +1,5 @@ #[cfg(not(target_os = "macos"))] use std::str::FromStr; -#[cfg(target_os = "macos")] -use std::time::Duration; use std::{env, path::Path, process::Command, time::Duration}; use base64::{prelude::BASE64_STANDARD, Engine}; diff --git a/src-tauri/src/window.rs b/src-tauri/src/window.rs index 3b8f0e45d..5494a34d2 100644 --- a/src-tauri/src/window.rs +++ b/src-tauri/src/window.rs @@ -12,6 +12,7 @@ pub const NEW_UI_HEIGHT: f64 = 675.0; pub const OLD_UI_WIDTH: f64 = 920.0; pub const OLD_UI_HEIGHT: f64 = 720.0; +#[must_use] pub fn new_ui_url() -> WebviewUrl { if cfg!(defguard_client_dev) { WebviewUrl::External("http://localhost:5072".parse().unwrap()) @@ -20,6 +21,7 @@ pub fn new_ui_url() -> WebviewUrl { } } +#[must_use] pub fn old_ui_url() -> WebviewUrl { if cfg!(defguard_client_dev) { WebviewUrl::External("http://localhost:5071".parse().unwrap()) From a75d6e905fad410dce499dfe9e4c6c3d01eea25e Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 20 May 2026 09:24:04 +0200 Subject: [PATCH 012/155] Better windows positioning (#879) --- src-tauri/src/service/daemon.rs | 17 +++++++++++------ src-tauri/src/tray.rs | 4 ++-- src-tauri/src/window.rs | 32 ++++++++++++++++---------------- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src-tauri/src/service/daemon.rs b/src-tauri/src/service/daemon.rs index 4bef74b56..ac54904a4 100644 --- a/src-tauri/src/service/daemon.rs +++ b/src-tauri/src/service/daemon.rs @@ -23,7 +23,9 @@ use tonic::{ transport::Server, Code, Response, Status, }; -use tracing::{debug, error, info, info_span, warn, Instrument}; +#[cfg(not(windows))] +use tracing::warn; +use tracing::{debug, error, info, info_span, Instrument}; use super::{ config::Config, @@ -33,12 +35,15 @@ use super::{ ReadInterfaceDataRequest, RemoveInterfaceRequest, SaveServiceLocationsRequest, }, }; +use crate::{ + enterprise::service_locations::ServiceLocationError, + service::proto::defguard::enterprise::posture::v2::DevicePostureData, VERSION, +}; #[cfg(windows)] -use crate::enterprise::service_locations::ServiceLocationManager; -#[cfg(windows)] -use crate::service::named_pipe::{get_named_pipe_server_stream, PIPE_NAME}; -use crate::service::proto::defguard::enterprise::posture::v2::DevicePostureData; -use crate::{enterprise::service_locations::ServiceLocationError, VERSION}; +use crate::{ + enterprise::service_locations::ServiceLocationManager, + service::named_pipe::{get_named_pipe_server_stream, PIPE_NAME}, +}; #[cfg(unix)] pub(super) const DAEMON_SOCKET_PATH: &str = "/var/run/defguard.socket"; diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index fa194b1ea..2452bdf5e 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -36,10 +36,10 @@ fn store_tray_click_position(app: &AppHandle, event: &TrayIconEvent) { let position = match event { TrayIconEvent::Click { button_state: MouseButtonState::Down, - position, + rect, .. } - | TrayIconEvent::DoubleClick { position, .. } => Some(*position), + | TrayIconEvent::DoubleClick { rect, .. } => Some(rect.position.to_physical(1.0)), _ => None, }; diff --git a/src-tauri/src/window.rs b/src-tauri/src/window.rs index 5494a34d2..dcfc13327 100644 --- a/src-tauri/src/window.rs +++ b/src-tauri/src/window.rs @@ -1,6 +1,6 @@ use tauri::{ - webview::WebviewWindowBuilder, AppHandle, LogicalPosition, Manager, Monitor, Position, - WebviewUrl, WebviewWindow, + webview::WebviewWindowBuilder, AppHandle, LogicalPosition, Manager, Monitor, PhysicalSize, + Position, WebviewUrl, WebviewWindow, }; use crate::appstate::AppState; @@ -11,6 +11,10 @@ pub const NEW_UI_WIDTH: f64 = 360.0; pub const NEW_UI_HEIGHT: f64 = 675.0; pub const OLD_UI_WIDTH: f64 = 920.0; pub const OLD_UI_HEIGHT: f64 = 720.0; +#[cfg(windows)] +const TASKBAR_HEIGHT: f64 = 48.0; +#[cfg(not(windows))] +const TASKBAR_HEIGHT: f64 = 0.0; #[must_use] pub fn new_ui_url() -> WebviewUrl { @@ -52,8 +56,7 @@ fn get_monitor_for_position(app: &AppHandle, x: f64, y: f64) -> Option fn get_tray_window_position( app: &AppHandle, - width: f64, - height: f64, + size: PhysicalSize, ) -> Option> { let app_state = app.state::(); let tray_position = app_state.tray_click_position.lock().unwrap().to_owned()?; @@ -64,29 +67,26 @@ fn get_tray_window_position( let monitor_position = monitor.position().to_logical::(scale_factor); let monitor_size = monitor.size().to_logical::(scale_factor); let tray_position = tray_position.to_logical::(scale_factor); + let window_size = size.to_logical::(scale_factor); - let mut x = tray_position.x - (width / 2.0); - let center_y = monitor_position.y + (monitor_size.height / 2.0); - let mut y = if tray_position.y < center_y { - tray_position.y - } else { - tray_position.y - height - }; + let mut x = tray_position.x; + let mut y = tray_position.y; x = x.clamp( monitor_position.x, - monitor_position.x + monitor_size.width - width, + monitor_position.x + monitor_size.width - window_size.width, ); y = y.clamp( monitor_position.y, - monitor_position.y + monitor_size.height - height, + monitor_position.y + monitor_size.height - window_size.height - TASKBAR_HEIGHT, ); Some(LogicalPosition::new(x, y)) } -fn position_window_near_tray(app: &AppHandle, window: &WebviewWindow, width: f64, height: f64) { - if let Some(position) = get_tray_window_position(app, width, height) { +fn position_window_near_tray(app: &AppHandle, window: &WebviewWindow) { + let size = window.outer_size().unwrap_or_default(); + if let Some(position) = get_tray_window_position(app, size) { if let Err(err) = window.set_position(Position::Logical(position)) { warn!("Failed to position window near tray icon: {err}"); } @@ -105,7 +105,7 @@ fn show_new_ui_window_internal(app: &AppHandle, near_tray: bool) { .unwrap() }; if near_tray { - position_window_near_tray(app, &window, NEW_UI_WIDTH, NEW_UI_HEIGHT); + position_window_near_tray(app, &window); } #[cfg(target_os = "macos")] let _ = app.show(); From 5e73b68c53b9afc7a8971675b87dea17b075fd18 Mon Sep 17 00:00:00 2001 From: Aleksander <170264518+t-aleksander@users.noreply.github.com> Date: Wed, 20 May 2026 12:54:12 +0200 Subject: [PATCH 013/155] Report number of days since last security update (#880) * report number of days * format * proto --- src-tauri/proto | 2 +- src-tauri/src/enterprise/inspector/mod.rs | 23 ++++++++++++---- .../src/enterprise/inspector/tests/windows.rs | 6 ++--- src-tauri/src/enterprise/inspector/windows.rs | 27 +++++++------------ 4 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src-tauri/proto b/src-tauri/proto index 971be5439..07397d4e8 160000 --- a/src-tauri/proto +++ b/src-tauri/proto @@ -1 +1 @@ -Subproject commit 971be5439869cc66056b45d18de40b65c1ac6619 +Subproject commit 07397d4e8712fd89804c49af3e41ddcaeb824cbf diff --git a/src-tauri/src/enterprise/inspector/mod.rs b/src-tauri/src/enterprise/inspector/mod.rs index 789bb6606..143da5f32 100644 --- a/src-tauri/src/enterprise/inspector/mod.rs +++ b/src-tauri/src/enterprise/inspector/mod.rs @@ -13,7 +13,8 @@ use sysinfo::System; use crate::{ service::proto::defguard::enterprise::posture::v2::{ - bool_check, string_check, BoolCheck, DevicePostureData, StringCheck, UnavailableReason, + bool_check, int32_check, string_check, BoolCheck, DevicePostureData, Int32Check, + StringCheck, UnavailableReason, }, VERSION, }; @@ -109,11 +110,11 @@ fn device_integrity() -> Result { Err(UnavailableReason::NotApplicable) } -/// Returns the security update status. -fn security_update_status() -> Result { +/// Returns the number of days since the last installed Windows security update. +fn security_update_age_days() -> Result { #[cfg(windows)] { - windows::security_update_status() + windows::security_update_age_days() } #[cfg(not(windows))] @@ -134,6 +135,18 @@ impl From> for BoolCheck { } } +/// Convert `Result` to `Int32Check`. +impl From> for Int32Check { + fn from(value: Result) -> Self { + Self { + result: Some(match value { + Ok(inner) => int32_check::Result::Value(inner), + Err(err) => int32_check::Result::Unavailable(err as i32), + }), + } + } +} + /// Convert `Result` to `StringCheck`. impl From> for StringCheck { fn from(value: Result) -> Self { @@ -159,7 +172,7 @@ impl DevicePostureData { disk_encryption: Some(BoolCheck::from(disk_encryption_status())), antivirus_present: Some(BoolCheck::from(anti_virus_status())), windows_ad_domain_joined: Some(BoolCheck::from(part_of_domain())), - windows_security_update_current: Some(BoolCheck::from(security_update_status())), + windows_security_update_age_days: Some(Int32Check::from(security_update_age_days())), linux_kernel_version: Some(StringCheck::from(linux_kernel_version())), device_integrity: Some(BoolCheck::from(device_integrity())), } diff --git a/src-tauri/src/enterprise/inspector/tests/windows.rs b/src-tauri/src/enterprise/inspector/tests/windows.rs index d1bfaf24b..8c743fa06 100644 --- a/src-tauri/src/enterprise/inspector/tests/windows.rs +++ b/src-tauri/src/enterprise/inspector/tests/windows.rs @@ -1,6 +1,6 @@ use super::super::{ anti_virus_status, disk_encryption_status, os_name, os_version, part_of_domain, - security_update_status, + security_update_age_days, }; #[test] @@ -33,6 +33,6 @@ fn test_part_of_domain() { #[test] #[ignore = "development machine only"] -fn test_security_update_status() { - assert!(security_update_status().unwrap()); +fn test_security_update_age_days() { + assert!(security_update_age_days().unwrap() >= 0); } diff --git a/src-tauri/src/enterprise/inspector/windows.rs b/src-tauri/src/enterprise/inspector/windows.rs index 7351e0431..d5c56a043 100644 --- a/src-tauri/src/enterprise/inspector/windows.rs +++ b/src-tauri/src/enterprise/inspector/windows.rs @@ -2,13 +2,10 @@ use serde::Deserialize; use time::{Date, OffsetDateTime}; - use wmi::{AuthLevel, WMIConnection, WMIError}; use super::UnavailableReason; -const MAX_QUICKFIX_DAYS: i64 = 60; - #[derive(Deserialize)] #[serde(rename = "Win32_EncryptableVolume")] #[serde(rename_all = "PascalCase")] @@ -137,28 +134,24 @@ pub(super) fn part_of_domain() -> Result { Ok(system.part_of_domain) } -/// Find the latest security patch. +/// Number of days since the most recently installed security patch. /// /// Check manually in PowerShell: /// `Get-CimInstance -ClassName Win32_QuickFixEngineering` /// /// Equivalent to PowerShell command: /// `Get-WmiObject -query "SELECT * FROM Win32_QuickFixEngineering"` -pub(super) fn security_update_status() -> Result { +pub(super) fn security_update_age_days() -> Result { let conn = WMIConnection::new()?; let fixes: Vec = conn.query()?; - // Days from today let today = OffsetDateTime::now_utc().date(); - let mut max_days = i64::MAX; - for fix in fixes { - if let Some(installed_on) = fix.installed_on { - let days = (today - installed_on).whole_days(); - if days < max_days { - max_days = days; - } - } - } - - Ok(max_days <= MAX_QUICKFIX_DAYS) + let min_days = fixes + .into_iter() + .filter_map(|fix| fix.installed_on) + .map(|installed_on| (today - installed_on).whole_days()) + .min() + .ok_or(UnavailableReason::DetectionFailed)?; + + i32::try_from(min_days).map_err(|_| UnavailableReason::DetectionFailed) } From 94ae32cd241b2f05b2f40e8c26752cc8b8bafa7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Thu, 21 May 2026 09:26:25 +0200 Subject: [PATCH 014/155] tray update - windows 11 window management (#881) * migrate from poc * ui fixes and fix swapping windows * clippy fix * update styles * clippy fixes * Update mod.rs --- .../pages/compact/CompactPage/CompactPage.tsx | 19 + .../src/pages/compact/CompactPage/style.scss | 9 +- .../src/shared/components/Button/style.scss | 4 +- .../src/shared/components/Divider/style.scss | 2 +- .../components/LocationCard/LocationCard.tsx | 8 +- .../components/MfaSelector/MfaSelector.tsx | 4 +- .../components/MfaSelector/style.scss | 16 +- .../LocationCard/context/context.tsx | 13 +- .../shared/components/LocationCard/style.scss | 15 +- .../views/DefaultView/DefaultView.tsx | 6 +- .../LocationCard/views/DefaultView/style.scss | 13 +- .../LocationCardMfaSettings.tsx | 42 +-- .../src/shared/components/Toggle/style.scss | 1 + .../components/WindowHeader/WindowHeader.tsx | 2 +- .../ConnectionWatcher/ConnectionsWatcher.tsx | 10 +- .../components/ConnectionWatcher/style.scss | 7 +- new-ui/src/shared/rust-api/api.ts | 3 + new-ui/src/shared/rust-api/types.ts | 1 + src-tauri/Cargo.toml | 3 + src-tauri/permissions/default.toml | 1 + src-tauri/src/bin/defguard-client.rs | 47 +-- src-tauri/src/lib.rs | 2 +- src-tauri/src/tray.rs | 8 +- src-tauri/src/window.rs | 156 -------- src-tauri/src/window_manager/macos.rs | 109 ++++++ src-tauri/src/window_manager/mod.rs | 161 +++++++++ src-tauri/src/window_manager/windows.rs | 338 ++++++++++++++++++ src/pages/client/clientAPI/clientApi.ts | 3 +- src/shared/defguard-ui | 2 +- 29 files changed, 771 insertions(+), 234 deletions(-) delete mode 100644 src-tauri/src/window.rs create mode 100644 src-tauri/src/window_manager/macos.rs create mode 100644 src-tauri/src/window_manager/mod.rs create mode 100644 src-tauri/src/window_manager/windows.rs diff --git a/new-ui/src/pages/compact/CompactPage/CompactPage.tsx b/new-ui/src/pages/compact/CompactPage/CompactPage.tsx index 23d47e31c..53ed37313 100644 --- a/new-ui/src/pages/compact/CompactPage/CompactPage.tsx +++ b/new-ui/src/pages/compact/CompactPage/CompactPage.tsx @@ -1,14 +1,33 @@ import clsx from 'clsx'; import './style.scss'; +import { useMutation } from '@tanstack/react-query'; import type { JSX, PropsWithChildren } from 'react'; +import { IconButton } from '../../../shared/components/IconButton/IconButton'; +import { IconButtonVariant } from '../../../shared/components/IconButton/types'; +import { api } from '../../../shared/rust-api/api'; interface Props extends PropsWithChildren { containerProps?: JSX.IntrinsicElements['main']; } export const CompactPage = ({ children, containerProps }: Props) => { + const { mutate: closeWindow, isPending } = useMutation({ + mutationFn: api.closeTrayWindow, + }); + return (
+
+ { + if (!isPending) { + closeWindow(); + } + }} + /> +
{children}
); diff --git a/new-ui/src/pages/compact/CompactPage/style.scss b/new-ui/src/pages/compact/CompactPage/style.scss index 0e6146f5c..b2c352758 100644 --- a/new-ui/src/pages/compact/CompactPage/style.scss +++ b/new-ui/src/pages/compact/CompactPage/style.scss @@ -1,4 +1,11 @@ .compact-page { box-sizing: border-box; - padding: 8px; + padding: var(--spacing-md); + position: relative; + + > .close-window { + position: absolute; + right: var(--spacing-md); + top: var(--spacing-md); + } } diff --git a/new-ui/src/shared/components/Button/style.scss b/new-ui/src/shared/components/Button/style.scss index 468282974..5cc175e4c 100644 --- a/new-ui/src/shared/components/Button/style.scss +++ b/new-ui/src/shared/components/Button/style.scss @@ -24,6 +24,7 @@ display: inline-block; min-width: 0; user-select: none; + background-clip: padding-box; > .btn-content { display: inline-grid; @@ -60,6 +61,7 @@ .text { font: var(--btn-font); color: inherit; + user-select: none; @include animate(color); } @@ -84,7 +86,7 @@ &.size-primary { --btn-font: var(--t-button-label-primary); - --btn-size: 40px; + --btn-size: 36px; border-radius: 8px; padding: var(--spacing-sm) var(--spacing-lg); diff --git a/new-ui/src/shared/components/Divider/style.scss b/new-ui/src/shared/components/Divider/style.scss index a75bd2fb9..e47a4feea 100644 --- a/new-ui/src/shared/components/Divider/style.scss +++ b/new-ui/src/shared/components/Divider/style.scss @@ -1,6 +1,6 @@ .divider { --divider-line-size: 1px; - --divider-color: var(--bg-white-20); + --divider-color: var(--bg-white-10); user-select: none; diff --git a/new-ui/src/shared/components/LocationCard/LocationCard.tsx b/new-ui/src/shared/components/LocationCard/LocationCard.tsx index 72b6cbc90..7216e34f5 100644 --- a/new-ui/src/shared/components/LocationCard/LocationCard.tsx +++ b/new-ui/src/shared/components/LocationCard/LocationCard.tsx @@ -57,7 +57,12 @@ const LocationCardInner = ({ isOpen, onOpen, disableOpen }: InnerProps) => { data-network={location.network_id} data-id={location.id} > -
+
@@ -82,7 +87,6 @@ const LocationCardInner = ({ isOpen, onOpen, disableOpen }: InnerProps) => { icon={IconKind.ArrowSmall} variant={isOpen ? IconButtonVariant.SmallSelected : IconButtonVariant.Small} iconRotation={isOpen ? Direction.DOWN : Direction.RIGHT} - onClick={onOpen} /> )}
diff --git a/new-ui/src/shared/components/LocationCard/components/MfaSelector/MfaSelector.tsx b/new-ui/src/shared/components/LocationCard/components/MfaSelector/MfaSelector.tsx index 7f1f65ce2..490e2eb02 100644 --- a/new-ui/src/shared/components/LocationCard/components/MfaSelector/MfaSelector.tsx +++ b/new-ui/src/shared/components/LocationCard/components/MfaSelector/MfaSelector.tsx @@ -25,11 +25,11 @@ export const MfaSelector = ({ case 'email': return 'mail'; case 'mobileapprove': - return 'mobile-lock'; + return 'mobile'; case 'oidc': return 'token'; case 'totp': - return 'mobile-lock'; + return 'lock-closed'; case 'biometric': return 'biometric'; } diff --git a/new-ui/src/shared/components/LocationCard/components/MfaSelector/style.scss b/new-ui/src/shared/components/LocationCard/components/MfaSelector/style.scss index 3d33c107c..164325802 100644 --- a/new-ui/src/shared/components/LocationCard/components/MfaSelector/style.scss +++ b/new-ui/src/shared/components/LocationCard/components/MfaSelector/style.scss @@ -3,6 +3,7 @@ --border: var(--border-default); --icon: var(--fg-white-80); --color: var(--fg-white-80); + --box-shadow: box-shadow: 0 4px 4px 0 rgb(0 0 0 / 0%); display: grid; grid-template-columns: 20px minmax(0, 1fr) 16px; @@ -13,26 +14,29 @@ user-select: none; align-items: center; box-sizing: border-box; + box-shadow: var(--box-shadow); padding: 0 var(--spacing-md); min-height: 40px; border-radius: 8px; cursor: pointer; transition-duration: 250ms; transition-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1); - transition-property: border-color, background, color; + transition-property: border-color, background, color, box-shadow; + background-clip: padding-box; &:hover { --bg: var(--bg-white-5); --color: var(--fg-white-100); - --border: var(--border-default); + --border: var(--border-action-disabled); --icon: var(--fg-white-100); } &.selected { - --bg: var(--bg-white-5); + --bg: var(--bg-white-10); --color: var(--fg-white-100); - --border: transparent; + --border: var(--border-action-disabled); --icon: var(--fg-white-100); + --box-shadow: box-shadow: 0 4px 4px 0 rgb(0 0 0 / 5%); } > .middle { @@ -40,7 +44,7 @@ flex-flow: row nowrap; align-items: center; justify-content: flex-start; - column-gap: var(--spacing-xs); + column-gap: var(--spacing-md); } .default-badge { @@ -71,6 +75,6 @@ .name { color: inherit; - font: var(--t-body-xs); + font: var(--t-body-sm-400); } } diff --git a/new-ui/src/shared/components/LocationCard/context/context.tsx b/new-ui/src/shared/components/LocationCard/context/context.tsx index b2e7e8b4e..00005f970 100644 --- a/new-ui/src/shared/components/LocationCard/context/context.tsx +++ b/new-ui/src/shared/components/LocationCard/context/context.tsx @@ -1,5 +1,5 @@ import { createContext, type ReactNode, useCallback, useContext, useState } from 'react'; -import type { InstanceInfo, LocationInfo } from '../../../rust-api/types'; +import type { InstanceInfo, LocationInfo, MfaMethodValue } from '../../../rust-api/types'; import { MfaMethod } from '../../../rust-api/types'; import { LocationCardViews, type LocationCardViewsValue } from './types'; @@ -10,6 +10,8 @@ interface LocationCardContextValue { previousView: LocationCardViewsValue | null; setView: (view: LocationCardViewsValue) => void; startMfa: () => void; + localMfaMethod: MfaMethodValue; + setLocalMfaMethod: (method: MfaMethodValue) => void; } const LocationCardContext = createContext(null); @@ -37,6 +39,9 @@ export const LocationCardProvider = ({ const [currentView, setCurrentView] = useState( location.active ? LocationCardViews.Connected : LocationCardViews.Default, ); + const [localMfaMethod, setLocalMfaMethod] = useState( + location.mfa_method ?? MfaMethod.Totp, + ); const setView = useCallback( (view: LocationCardViewsValue) => { @@ -47,7 +52,7 @@ export const LocationCardProvider = ({ ); const startMfa = useCallback(() => { - switch (location.mfa_method) { + switch (localMfaMethod) { case MfaMethod.Totp: setView(LocationCardViews.MfaTotp); break; @@ -61,7 +66,7 @@ export const LocationCardProvider = ({ setView(LocationCardViews.MfaMobile); break; } - }, [location.mfa_method, setView]); + }, [localMfaMethod, setView]); return ( {children} diff --git a/new-ui/src/shared/components/LocationCard/style.scss b/new-ui/src/shared/components/LocationCard/style.scss index 9221d88a9..c8a68b129 100644 --- a/new-ui/src/shared/components/LocationCard/style.scss +++ b/new-ui/src/shared/components/LocationCard/style.scss @@ -1,7 +1,7 @@ .location-card { - border-radius: 12px; + border-radius: 16px; box-sizing: border-box; - padding: var(--spacing-md) var(--spacing-lg); + padding: var(--spacing-lg); background-color: var(--bg-dark-blue-40); > .top-track { @@ -11,6 +11,17 @@ justify-content: flex-start; user-select: none; + &.interactive { + cursor: pointer; + + &:hover { + > .right > .icon-button { + --bg: var(--c-white-20); + --icon: var(--c-white-100); + } + } + } + > .left { display: flex; flex-flow: row; diff --git a/new-ui/src/shared/components/LocationCard/views/DefaultView/DefaultView.tsx b/new-ui/src/shared/components/LocationCard/views/DefaultView/DefaultView.tsx index acfb49a9d..0b5ce633e 100644 --- a/new-ui/src/shared/components/LocationCard/views/DefaultView/DefaultView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/DefaultView/DefaultView.tsx @@ -38,7 +38,11 @@ export const DefaultView = () => { { updateRouting({ connectionType: location.connection_type, diff --git a/new-ui/src/shared/components/LocationCard/views/DefaultView/style.scss b/new-ui/src/shared/components/LocationCard/views/DefaultView/style.scss index b32113ff5..658c869b6 100644 --- a/new-ui/src/shared/components/LocationCard/views/DefaultView/style.scss +++ b/new-ui/src/shared/components/LocationCard/views/DefaultView/style.scss @@ -5,9 +5,10 @@ grid-template-rows: 1fr; align-items: center; column-gap: var(--spacing-md); + user-select: none; > .name { - font: var(--t-body-xs-500); + font: var(--t-body-sm-400); color: var(--fg-white-100); } @@ -17,10 +18,12 @@ display: inline-flex; flex-flow: row nowrap; align-items: center; + justify-content: center; padding: 0 4px; - height: 18px; - width: 32px; - background-color: var(--bg-white-100); + min-height: 20px; + width: 36px; + background-color: transparent; + border: 1px solid var(--bg-white-60); p { font: var(--font-family-body); @@ -28,7 +31,7 @@ font-weight: 500; line-height: 16px; letter-spacing: 0.11px; - color: var(--fg-action); + color: var(--fg-white-60); } } } diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/LocationCardMfaSettings.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/LocationCardMfaSettings.tsx index c8314ae61..04b066f63 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/LocationCardMfaSettings.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/LocationCardMfaSettings.tsx @@ -30,14 +30,18 @@ export const LocationCardMfaSettings = () => { }, }); - const { previousView, setView, location } = useLocationCardContext(); + const { previousView, setView, location, localMfaMethod, setLocalMfaMethod } = + useLocationCardContext(); - const mfaMethod = location.mfa_method ?? MfaMethod.Totp; + const locationDefaultMfaMethod = location.mfa_method ?? MfaMethod.Totp; - const [selectedPref, setSelectedPref] = useState( - mfaMethod ?? MfaMethod.Totp, + const [selectedMethod, setSelectedPref] = useState( + localMfaMethod ?? MfaMethod.Totp, ); + const isFromDefault = previousView === LocationCardViews.Default; + const [setAsDefault, setSetAsDefault] = useState(true); + const MfaFactorsList = useMemo((): MfaMethodValue[] => { if (location.location_mfa_mode === LocationMfaMode.Internal) { return [MfaMethod.Totp, MfaMethod.Email, MfaMethod.MobileApprove]; @@ -46,13 +50,14 @@ export const LocationCardMfaSettings = () => { }, [location.location_mfa_mode]); const handleSubmit = () => { - if (selectedPref !== mfaMethod) { + setLocalMfaMethod(selectedMethod); + if ((isFromDefault || setAsDefault) && selectedMethod !== locationDefaultMfaMethod) { setMfaMethod({ locationId: location.id, - mfaMethod: selectedPref, + mfaMethod: selectedMethod, }); - setView(previousView ?? LocationCardViews.Default); } + setView(previousView ?? LocationCardViews.Default); }; return ( @@ -70,21 +75,19 @@ export const LocationCardMfaSettings = () => { setSelectedPref(factor)} /> ))}
- + {!isFromDefault && ( + setSetAsDefault((prev) => !prev)} + text="Set as default MFA method" + /> + )} { />
diff --git a/new-ui/src/shared/components/Toggle/style.scss b/new-ui/src/shared/components/Toggle/style.scss index f8eb8a32a..971629e59 100644 --- a/new-ui/src/shared/components/Toggle/style.scss +++ b/new-ui/src/shared/components/Toggle/style.scss @@ -26,6 +26,7 @@ border: var(--border-1) solid var(--border); min-width: 36px; flex-shrink: 0; + background-clip: padding-box; @include animate(border-color, background-color); diff --git a/new-ui/src/shared/components/WindowHeader/WindowHeader.tsx b/new-ui/src/shared/components/WindowHeader/WindowHeader.tsx index ecac32c8d..f78c6ae04 100644 --- a/new-ui/src/shared/components/WindowHeader/WindowHeader.tsx +++ b/new-ui/src/shared/components/WindowHeader/WindowHeader.tsx @@ -11,7 +11,7 @@ export const WindowHeader = ({ variant }: Props) => {
-

Defguard VPN Client

+

Defguard VPN Client

diff --git a/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx b/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx index 5f3308bc8..6e2afcf2e 100644 --- a/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx +++ b/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx @@ -4,10 +4,11 @@ import { FloatingPortal, size as floatingSize, offset, + safePolygon, shift, - useClick, useDismiss, useFloating, + useHover, useInteractions, } from '@floating-ui/react'; import { useMutation, useQuery } from '@tanstack/react-query'; @@ -57,9 +58,8 @@ export const ConnectionWatcher = () => { whileElementsMounted: autoUpdate, }); - const click = useClick(context, { - toggle: true, - enabled: connected, + const hover = useHover(context, { + handleClose: safePolygon(), }); const dismiss = useDismiss(context, { @@ -67,7 +67,7 @@ export const ConnectionWatcher = () => { outsidePress: true, }); - const { getFloatingProps, getReferenceProps } = useInteractions([click, dismiss]); + const { getFloatingProps, getReferenceProps } = useInteractions([hover, dismiss]); return ( <> diff --git a/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/style.scss b/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/style.scss index e40bfe4c2..3f2842d0e 100644 --- a/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/style.scss +++ b/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/style.scss @@ -26,7 +26,6 @@ display: flex; flex-flow: row nowrap; align-items: center; - cursor: pointer; padding: 0 var(--spacing-xs); background-color: var(--bg-success); @@ -55,6 +54,8 @@ font: var(--t-menu-title); color: var(--fg-white-60); min-height: 24px; + line-height: 24px; + font-weight: 400; } .connection { @@ -70,6 +71,10 @@ svg circle { fill: var(--bg-success); } + + p { + font: var(--t-menu-text); + } } .disconnect { diff --git a/new-ui/src/shared/rust-api/api.ts b/new-ui/src/shared/rust-api/api.ts index 4628ab90c..435966e9c 100644 --- a/new-ui/src/shared/rust-api/api.ts +++ b/new-ui/src/shared/rust-api/api.ts @@ -128,6 +128,8 @@ const getEdgeRequestHeaders = async (): Promise => { const swapToOldUi = async () => invoke(TauriCommand.SwapToOldUi); +const closeTrayWindow = async () => invoke(TauriCommand.CloseTrayWindow); + export const api = { getEdgeRequestHeaders, // Instances @@ -168,4 +170,5 @@ export const api = { disconnectLocations, // Window swapToOldUi, + closeTrayWindow, }; diff --git a/new-ui/src/shared/rust-api/types.ts b/new-ui/src/shared/rust-api/types.ts index f82a67160..708d1b51e 100644 --- a/new-ui/src/shared/rust-api/types.ts +++ b/new-ui/src/shared/rust-api/types.ts @@ -104,6 +104,7 @@ export const TauriCommand = { DisconnectLocations: 'disconnect_locations', //Window SwapToOldUi: 'swap_to_old_ui', + CloseTrayWindow: 'close_tray_window', } as const; export type TauriCommand = (typeof TauriCommand)[keyof typeof TauriCommand]; diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 3ad98c6dd..4425dd8cb 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -141,6 +141,9 @@ windows = { version = "0.62", features = [ "Win32", "Win32_System", "Win32_System_RemoteDesktop", + "Win32_Graphics_Gdi", + "Win32_UI_HiDpi", + "Win32_Foundation", ] } windows-acl = "0.3" windows-service = "0.8" diff --git a/src-tauri/permissions/default.toml b/src-tauri/permissions/default.toml index 303597ede..610c903dc 100644 --- a/src-tauri/permissions/default.toml +++ b/src-tauri/permissions/default.toml @@ -34,6 +34,7 @@ commands.allow = [ "open_old_ui_window", "swap_to_new_ui", "swap_to_old_ui", + "close_tray_window", "all_active_connections", "disconnect_locations", "get_posture_data", diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 1428af493..34a85400b 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -29,11 +29,11 @@ use defguard_client::{ service, tray::{configure_tray_icon, setup_tray, show_main_window}, utils::load_log_targets, - window::*, + window_manager::*, LOG_FILENAME, VERSION, }; use log::{Level, LevelFilter}; -use tauri::{AppHandle, Builder, Manager, RunEvent, WebviewWindowBuilder, WindowEvent}; +use tauri::{AppHandle, Builder, Manager, RunEvent, WindowEvent}; use tauri_plugin_log::{Target, TargetKind}; #[macro_use] @@ -188,18 +188,22 @@ fn main() { open_old_ui_window, swap_to_new_ui, swap_to_old_ui, + close_tray_window, all_active_connections, disconnect_locations, ]) .on_window_event(|window, event| { if let WindowEvent::CloseRequested { api, .. } = event { - #[cfg(not(target_os = "macos"))] - let _ = window.hide(); + // Only prevent close on the tray (new-ui) window; let other windows close normally. + if window.label() == NEW_UI_WINDOW_ID { + #[cfg(not(target_os = "macos"))] + let _ = window.hide(); - #[cfg(target_os = "macos")] - let _ = tauri::AppHandle::hide(window.app_handle()); + #[cfg(target_os = "macos")] + let _ = tauri::AppHandle::hide(window.app_handle()); - api.prevent_close(); + api.prevent_close(); + } } }) // Initialize plugins here, except for `tauri_plugin_log` which is handled in `setup()`. @@ -214,7 +218,6 @@ fn main() { .plugin(tauri_plugin_fs::init()) .plugin(tauri_plugin_http::init()) .plugin(tauri_plugin_notification::init()) - .plugin(tauri_plugin_window_state::Builder::new().build()) .plugin(tauri_plugin_opener::init()) .plugin(tauri_plugin_os::init()) .plugin(tauri_plugin_process::init()) @@ -348,18 +351,22 @@ fn main() { let state = AppState::new(config, provisioning_config); app.manage(state); - // Open new UI window. - WebviewWindowBuilder::new(app, NEW_UI_WINDOW_ID, new_ui_url()) - .title("New UI") - .inner_size(NEW_UI_WIDTH, NEW_UI_HEIGHT) - .visible(false) - .build()?; - - // Open old UI window. - WebviewWindowBuilder::new(app, OLD_UI_WINDOW_ID, old_ui_url()) - .title("Old UI") - .inner_size(OLD_UI_WIDTH, OLD_UI_HEIGHT) - .build()?; + #[cfg(target_os = "linux")] + { + let _ = WindowManager::open_full_view(app_handle); + } + #[cfg(not(target_os = "linux"))] + { + let has_locations = tauri::async_runtime::block_on( + defguard_client::window_manager::has_non_service_locations() + ); + if has_locations { + WindowManager::open_tray(app_handle)?; + } else { + info!("No locations found, spawning full view on startup."); + let _ = WindowManager::open_full_view(app_handle); + } + } info!("App setup completed, log level: {log_level}"); Ok(()) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 2d3137f01..abcf59370 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -32,7 +32,7 @@ pub mod service; pub mod tray; pub mod utils; pub mod wg_config; -pub mod window; +pub mod window_manager; pub const VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), "-", env!("VERGEN_GIT_SHA")); pub const MIN_CORE_VERSION: Version = Version::new(1, 6, 0); diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index 2452bdf5e..4339c6bdd 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -15,7 +15,7 @@ use crate::{ database::{models::location::Location, DB_POOL}, error::Error, events::EventKey, - window::{show_new_ui_window_near_tray, NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID}, + window_manager::{show_new_ui_window_near_tray, NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID}, ConnectionType, }; @@ -148,8 +148,9 @@ pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { .show_menu_on_left_click(true) .on_tray_icon_event(|icon, event| { store_tray_click_position(icon.app_handle(), &event); - if let TrayIconEvent::DoubleClick { + if let TrayIconEvent::Click { button: MouseButton::Left, + button_state: MouseButtonState::Up, .. } = event { @@ -166,8 +167,9 @@ pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { .show_menu_on_left_click(false) .on_tray_icon_event(|icon, event| { store_tray_click_position(icon.app_handle(), &event); - if let TrayIconEvent::DoubleClick { + if let TrayIconEvent::Click { button: MouseButton::Left, + button_state: MouseButtonState::Up, .. } = event { diff --git a/src-tauri/src/window.rs b/src-tauri/src/window.rs deleted file mode 100644 index dcfc13327..000000000 --- a/src-tauri/src/window.rs +++ /dev/null @@ -1,156 +0,0 @@ -use tauri::{ - webview::WebviewWindowBuilder, AppHandle, LogicalPosition, Manager, Monitor, PhysicalSize, - Position, WebviewUrl, WebviewWindow, -}; - -use crate::appstate::AppState; - -pub const NEW_UI_WINDOW_ID: &str = "new-ui"; -pub const OLD_UI_WINDOW_ID: &str = "old-ui"; -pub const NEW_UI_WIDTH: f64 = 360.0; -pub const NEW_UI_HEIGHT: f64 = 675.0; -pub const OLD_UI_WIDTH: f64 = 920.0; -pub const OLD_UI_HEIGHT: f64 = 720.0; -#[cfg(windows)] -const TASKBAR_HEIGHT: f64 = 48.0; -#[cfg(not(windows))] -const TASKBAR_HEIGHT: f64 = 0.0; - -#[must_use] -pub fn new_ui_url() -> WebviewUrl { - if cfg!(defguard_client_dev) { - WebviewUrl::External("http://localhost:5072".parse().unwrap()) - } else { - WebviewUrl::App("new-ui/".into()) - } -} - -#[must_use] -pub fn old_ui_url() -> WebviewUrl { - if cfg!(defguard_client_dev) { - WebviewUrl::External("http://localhost:5071".parse().unwrap()) - } else { - WebviewUrl::App("old-ui/index.html".into()) - } -} - -/// Try to get monitor at the given position, with a fall back to primary monitor, and then to the -/// first one on the list of available monitors. -fn get_monitor_for_position(app: &AppHandle, x: f64, y: f64) -> Option { - if let Ok(Some(monitor)) = app.monitor_from_point(x, y) { - return Some(monitor); - } - - if let Ok(Some(monitor)) = app.primary_monitor() { - return Some(monitor); - } - - // On macOS, it seems this is the only working method (as of Tauri 2.11), but fortunately it - // returns the current monitor as the first one. - if let Ok(mut monitors) = app.available_monitors() { - monitors.pop() - } else { - None - } -} - -fn get_tray_window_position( - app: &AppHandle, - size: PhysicalSize, -) -> Option> { - let app_state = app.state::(); - let tray_position = app_state.tray_click_position.lock().unwrap().to_owned()?; - - let monitor = get_monitor_for_position(app, tray_position.x, tray_position.y)?; - - let scale_factor = monitor.scale_factor(); - let monitor_position = monitor.position().to_logical::(scale_factor); - let monitor_size = monitor.size().to_logical::(scale_factor); - let tray_position = tray_position.to_logical::(scale_factor); - let window_size = size.to_logical::(scale_factor); - - let mut x = tray_position.x; - let mut y = tray_position.y; - - x = x.clamp( - monitor_position.x, - monitor_position.x + monitor_size.width - window_size.width, - ); - y = y.clamp( - monitor_position.y, - monitor_position.y + monitor_size.height - window_size.height - TASKBAR_HEIGHT, - ); - - Some(LogicalPosition::new(x, y)) -} - -fn position_window_near_tray(app: &AppHandle, window: &WebviewWindow) { - let size = window.outer_size().unwrap_or_default(); - if let Some(position) = get_tray_window_position(app, size) { - if let Err(err) = window.set_position(Position::Logical(position)) { - warn!("Failed to position window near tray icon: {err}"); - } - } -} - -fn show_new_ui_window_internal(app: &AppHandle, near_tray: bool) { - let window = if let Some(window) = app.get_webview_window(NEW_UI_WINDOW_ID) { - let _ = window.unminimize(); - window - } else { - WebviewWindowBuilder::new(app, NEW_UI_WINDOW_ID, new_ui_url()) - .title("New UI") - .inner_size(NEW_UI_WIDTH, NEW_UI_HEIGHT) - .build() - .unwrap() - }; - if near_tray { - position_window_near_tray(app, &window); - } - #[cfg(target_os = "macos")] - let _ = app.show(); - let _ = window.show(); - let _ = window.set_focus(); -} - -pub(crate) fn show_new_ui_window(app: &AppHandle) { - show_new_ui_window_internal(app, false); -} - -pub(crate) fn show_new_ui_window_near_tray(app: &AppHandle) { - show_new_ui_window_internal(app, true); -} - -#[tauri::command] -pub fn open_new_ui_window(app: AppHandle) { - show_new_ui_window(&app); -} - -#[tauri::command] -pub fn open_old_ui_window(app: AppHandle) { - let _window = WebviewWindowBuilder::new(&app, OLD_UI_WINDOW_ID, old_ui_url()) - .title("Old UI") - .inner_size(OLD_UI_WIDTH, OLD_UI_HEIGHT) - .build() - .unwrap(); -} - -#[tauri::command] -pub fn swap_to_old_ui(app: AppHandle) { - WebviewWindowBuilder::new(&app, OLD_UI_WINDOW_ID, old_ui_url()) - .title("Old UI") - .inner_size(OLD_UI_WIDTH, OLD_UI_HEIGHT) - .build() - .unwrap(); - if let Some(w) = app.get_webview_window(NEW_UI_WINDOW_ID) { - w.close().unwrap(); - } -} - -#[tauri::command] -pub fn swap_to_new_ui(app: AppHandle) { - show_new_ui_window(&app); - if let Some(w) = app.get_webview_window(OLD_UI_WINDOW_ID) { - w.close().unwrap(); - } -} diff --git a/src-tauri/src/window_manager/macos.rs b/src-tauri/src/window_manager/macos.rs new file mode 100644 index 000000000..d93964dce --- /dev/null +++ b/src-tauri/src/window_manager/macos.rs @@ -0,0 +1,109 @@ +use tauri::{AppHandle, LogicalPosition, Manager, Monitor, PhysicalSize, Position, WebviewWindow}; + +use crate::appstate::AppState; +use crate::window_manager::{WindowManager, NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID}; + +/// Try to get monitor at the given position, with a fall back to primary monitor, and then to the +/// first one on the list of available monitors. +fn get_monitor_for_position(app: &AppHandle, x: f64, y: f64) -> Option { + if let Ok(Some(monitor)) = app.monitor_from_point(x, y) { + return Some(monitor); + } + + if let Ok(Some(monitor)) = app.primary_monitor() { + return Some(monitor); + } + + // On macOS, it seems this is the only working method (as of Tauri 2.11), but fortunately it + // returns the current monitor as the first one. + if let Ok(mut monitors) = app.available_monitors() { + monitors.pop() + } else { + None + } +} + +fn get_tray_window_position( + app: &AppHandle, + size: PhysicalSize, +) -> Option> { + let app_state = app.state::(); + let tray_click_position = app_state.tray_click_position.lock().unwrap().to_owned(); + + if let Some(tray_position) = tray_click_position { + let monitor = get_monitor_for_position(app, tray_position.x, tray_position.y)?; + + let scale_factor = monitor.scale_factor(); + let monitor_position = monitor.position().to_logical::(scale_factor); + let monitor_size = monitor.size().to_logical::(scale_factor); + let tray_position = tray_position.to_logical::(scale_factor); + let window_size = size.to_logical::(scale_factor); + + let mut x = tray_position.x; + let mut y = tray_position.y; + + x = x.clamp( + monitor_position.x, + monitor_position.x + monitor_size.width - window_size.width, + ); + y = y.clamp( + monitor_position.y, + monitor_position.y + monitor_size.height - window_size.height, + ); + + Some(LogicalPosition::new(x, y)) + } else { + let monitor = app.primary_monitor().ok().flatten()?; + let scale_factor = monitor.scale_factor(); + let monitor_position = monitor.position().to_logical::(scale_factor); + let monitor_size = monitor.size().to_logical::(scale_factor); + let window_size = size.to_logical::(scale_factor); + + let gap = crate::window_manager::WINDOW_GAP; + + let x = monitor_position.x + monitor_size.width - window_size.width - gap; + let y = monitor_position.y + gap; + + Some(LogicalPosition::new(x, y)) + } +} + +fn position_window_near_tray(app: &AppHandle, window: &WebviewWindow) { + let size = window.outer_size().unwrap_or_default(); + if let Some(position) = get_tray_window_position(app, size) { + if let Err(err) = window.set_position(Position::Logical(position)) { + warn!("Failed to position window near tray icon: {err}"); + } + } +} + +impl WindowManager { + pub fn open_tray(app: &AppHandle) -> tauri::Result { + let window = if let Some(window) = app.get_webview_window(NEW_UI_WINDOW_ID) { + let _ = window.unminimize(); + window + } else { + Self::build_tray_window(app)? + }; + position_window_near_tray(app, &window); + #[cfg(target_os = "macos")] + let _ = app.show(); + let _ = window.show(); + let _ = window.set_focus(); + Ok(window) + } + + pub fn open_full_view(app: &AppHandle) -> tauri::Result { + let window = if let Some(window) = app.get_webview_window(OLD_UI_WINDOW_ID) { + let _ = window.unminimize(); + window + } else { + Self::build_full_window(app)? + }; + #[cfg(target_os = "macos")] + let _ = app.show(); + let _ = window.show(); + let _ = window.set_focus(); + Ok(window) + } +} diff --git a/src-tauri/src/window_manager/mod.rs b/src-tauri/src/window_manager/mod.rs new file mode 100644 index 000000000..780e41cce --- /dev/null +++ b/src-tauri/src/window_manager/mod.rs @@ -0,0 +1,161 @@ +use tauri::{AppHandle, WebviewUrl, WebviewWindow, WebviewWindowBuilder}; + +#[cfg(not(target_os = "linux"))] +use crate::database::{models::location::Location, DB_POOL}; + +/// Returns `true` if there are any non-service locations in the database. +#[cfg(not(target_os = "linux"))] +pub async fn has_non_service_locations() -> bool { + match Location::all(&*DB_POOL, false).await { + Ok(locations) => !locations.is_empty(), + Err(_) => false, + } +} + +pub const NEW_UI_WINDOW_ID: &str = "new-ui"; +pub const OLD_UI_WINDOW_ID: &str = "old-ui"; +pub const NEW_UI_WIDTH: f64 = 380.0; +pub const NEW_UI_HEIGHT: f64 = 640.0; +pub const OLD_UI_WIDTH: f64 = 1280.0; +pub const OLD_UI_HEIGHT: f64 = 920.0; +pub const WINDOW_GAP: f64 = 20.0; + +#[must_use] +pub fn new_ui_url() -> WebviewUrl { + if cfg!(any(defguard_client_dev, debug_assertions)) { + WebviewUrl::External("http://localhost:5072".parse().unwrap()) + } else { + WebviewUrl::App("new-ui/".into()) + } +} + +#[must_use] +pub fn old_ui_url() -> WebviewUrl { + if cfg!(any(defguard_client_dev, debug_assertions)) { + WebviewUrl::External("http://localhost:5071".parse().unwrap()) + } else { + WebviewUrl::App("old-ui/index.html".into()) + } +} + +pub struct WindowManager; + +impl WindowManager { + pub fn build_tray_window(app: &AppHandle) -> tauri::Result { + WebviewWindowBuilder::new(app, NEW_UI_WINDOW_ID, new_ui_url()) + .title("Defguard") + .inner_size(NEW_UI_WIDTH, NEW_UI_HEIGHT) + .resizable(false) + .decorations(false) + .visible(false) + .always_on_top(true) + .skip_taskbar(true) + .build() + } + + pub fn build_full_window(app: &AppHandle) -> tauri::Result { + WebviewWindowBuilder::new(app, OLD_UI_WINDOW_ID, old_ui_url()) + .title("Defguard") + .inner_size(OLD_UI_WIDTH, OLD_UI_HEIGHT) + .decorations(true) + .build() + } +} + +#[cfg(target_os = "windows")] +pub mod windows; + +#[cfg(not(target_os = "windows"))] +pub mod macos; + +// Export tauri commands so they can be registered in main.rs +pub(crate) fn show_new_ui_window(app: &AppHandle) { + let _ = WindowManager::open_tray(app); +} + +pub(crate) fn show_new_ui_window_near_tray(app: &AppHandle) { + show_new_ui_window(app); +} + +#[tauri::command] +pub fn open_new_ui_window(app: AppHandle) { + show_new_ui_window(&app); +} + +#[tauri::command] +pub fn open_old_ui_window(app: AppHandle) { + let _ = WindowManager::open_full_view(&app); +} + +#[tauri::command] +pub fn swap_to_old_ui(app: AppHandle) { + tracing::info!("swap_to_old_ui called"); + tauri::async_runtime::spawn(async move { + // Sleep briefly to let the IPC handler return + tokio::time::sleep(std::time::Duration::from_millis(50)).await; + tracing::info!("swap_to_old_ui task: Opening full view"); + match WindowManager::open_full_view(&app) { + Ok(_) => { + tracing::info!( + "swap_to_old_ui task: open_full_view succeeded, sleeping before destroy" + ); + tokio::time::sleep(std::time::Duration::from_millis(150)).await; + if let Some(w) = tauri::Manager::get_webview_window(&app, NEW_UI_WINDOW_ID) { + tracing::info!("swap_to_old_ui task: Destroying new-ui window"); + if let Err(e) = w.destroy() { + tracing::error!( + "swap_to_old_ui task: Failed to destroy new-ui window: {:?}", + e + ); + } + } else { + tracing::warn!("swap_to_old_ui task: new-ui window not found to destroy"); + } + } + Err(e) => { + tracing::error!("swap_to_old_ui task: open_full_view failed: {:?}", e); + } + } + }); +} + +#[tauri::command] +pub fn close_tray_window(app: AppHandle) { + tracing::info!("close_tray_window called"); + tauri::async_runtime::spawn(async move { + tokio::time::sleep(std::time::Duration::from_millis(50)).await; + if let Some(w) = tauri::Manager::get_webview_window(&app, NEW_UI_WINDOW_ID) { + tracing::info!("close_tray_window task: Destroying new-ui window"); + if let Err(e) = w.destroy() { + tracing::error!( + "close_tray_window task: Failed to destroy new-ui window: {:?}", + e + ); + } + } else { + tracing::warn!("close_tray_window task: new-ui window not found to destroy"); + } + }); +} + +#[tauri::command] +pub fn swap_to_new_ui(app: AppHandle) { + tracing::info!("swap_to_new_ui called"); + tauri::async_runtime::spawn(async move { + tokio::time::sleep(std::time::Duration::from_millis(50)).await; + tracing::info!("swap_to_new_ui task: Showing new UI window"); + show_new_ui_window(&app); + tokio::time::sleep(std::time::Duration::from_millis(150)).await; + if let Some(w) = tauri::Manager::get_webview_window(&app, OLD_UI_WINDOW_ID) { + tracing::info!("swap_to_new_ui task: Destroying old-ui window"); + if let Err(e) = w.destroy() { + tracing::error!( + "swap_to_new_ui task: Failed to destroy old-ui window: {:?}", + e + ); + } + } else { + tracing::warn!("swap_to_new_ui task: old-ui window not found to destroy"); + } + }); +} diff --git a/src-tauri/src/window_manager/windows.rs b/src-tauri/src/window_manager/windows.rs new file mode 100644 index 000000000..56c5dc469 --- /dev/null +++ b/src-tauri/src/window_manager/windows.rs @@ -0,0 +1,338 @@ +use std::ffi::OsString; +use std::os::windows::ffi::OsStringExt; + +use windows::Win32::Foundation::{LPARAM, RECT}; +use windows::Win32::Graphics::Gdi::{ + EnumDisplayMonitors, GetMonitorInfoW, HDC, HMONITOR, MONITORINFOEXW, +}; +use windows::Win32::UI::HiDpi::{GetDpiForMonitor, MDT_EFFECTIVE_DPI}; + +use crate::window_manager::{ + WindowManager, NEW_UI_HEIGHT, NEW_UI_WIDTH, NEW_UI_WINDOW_ID, OLD_UI_HEIGHT, OLD_UI_WIDTH, + OLD_UI_WINDOW_ID, WINDOW_GAP, +}; + +#[derive(Debug, Clone, PartialEq)] +pub enum TaskbarPosition { + Bottom, + Top, + Left, + Right, + HiddenOrNone, +} + +#[derive(Debug, Clone)] +pub struct MonitorInfo { + pub name: String, + pub is_primary: bool, + pub physical_x: i32, + pub physical_y: i32, + pub physical_width: u32, + pub physical_height: u32, + pub scale_factor: f64, + pub taskbar_position: TaskbarPosition, + pub taskbar_size: u32, +} + +impl WindowManager { + pub fn get_monitors() -> Vec { + let mut monitors: Vec = Vec::new(); + + unsafe extern "system" fn monitor_enum_proc( + hmonitor: HMONITOR, + _hdc: HDC, + _rect: *mut RECT, + lparam: LPARAM, + ) -> windows::core::BOOL { + let monitors = &mut *(lparam.0 as *mut Vec); + + let mut info = MONITORINFOEXW::default(); + info.monitorInfo.cbSize = std::mem::size_of::() as u32; + + if GetMonitorInfoW(hmonitor, &mut info as *mut _ as *mut _).as_bool() { + // Name + let name_len = info + .szDevice + .iter() + .position(|&c| c == 0) + .unwrap_or(info.szDevice.len()); + let name = OsString::from_wide(&info.szDevice[..name_len]) + .to_string_lossy() + .into_owned(); + + let is_primary = (info.monitorInfo.dwFlags & 1) != 0; + + // DPI and Scaling + let mut dpi_x = 0; + let mut dpi_y = 0; + let scale_factor = if GetDpiForMonitor( + hmonitor, + MDT_EFFECTIVE_DPI, + &mut dpi_x, + &mut dpi_y, + ) + .is_ok() + { + dpi_x as f64 / 96.0 + } else { + 1.0 + }; + + let physical_x = info.monitorInfo.rcMonitor.left; + let physical_y = info.monitorInfo.rcMonitor.top; + let physical_width = (info.monitorInfo.rcMonitor.right + - info.monitorInfo.rcMonitor.left) + .unsigned_abs(); + let physical_height = (info.monitorInfo.rcMonitor.bottom + - info.monitorInfo.rcMonitor.top) + .unsigned_abs(); + + // Taskbar position and size + let mut taskbar_position = TaskbarPosition::HiddenOrNone; + let mut taskbar_size = 0; + + let mon = info.monitorInfo.rcMonitor; + let work = info.monitorInfo.rcWork; + + if work.bottom < mon.bottom { + taskbar_position = TaskbarPosition::Bottom; + taskbar_size = (mon.bottom - work.bottom).unsigned_abs(); + } else if work.top > mon.top { + taskbar_position = TaskbarPosition::Top; + taskbar_size = (work.top - mon.top).unsigned_abs(); + } else if work.left > mon.left { + taskbar_position = TaskbarPosition::Left; + taskbar_size = (work.left - mon.left).unsigned_abs(); + } else if work.right < mon.right { + taskbar_position = TaskbarPosition::Right; + taskbar_size = (mon.right - work.right).unsigned_abs(); + } + + monitors.push(MonitorInfo { + name, + is_primary, + physical_x, + physical_y, + physical_width, + physical_height, + scale_factor, + taskbar_position, + taskbar_size, + }); + } + + true.into() + } + + unsafe { + let _ = EnumDisplayMonitors( + None, + None, + Some(monitor_enum_proc), + LPARAM(&mut monitors as *mut _ as isize), + ); + } + + monitors + } + + pub fn open_tray(app: &tauri::AppHandle) -> tauri::Result { + let state = tauri::Manager::state::(app); + let tray_pos = *state.tray_click_position.lock().unwrap(); + let monitors = Self::get_monitors(); + let primary = monitors + .iter() + .find(|m| m.is_primary) + .unwrap_or(&monitors[0]); + + let window = if let Some(window) = tauri::Manager::get_webview_window(app, NEW_UI_WINDOW_ID) + { + let _ = window.unminimize(); + window + } else { + Self::build_tray_window(app)? + }; + + let logical_width = NEW_UI_WIDTH; + let logical_height = NEW_UI_HEIGHT; + + let physical_width = (logical_width * primary.scale_factor) as i32; + let physical_height = (logical_height * primary.scale_factor) as i32; + + let physical_gap = (WINDOW_GAP * primary.scale_factor) as i32; + + let work_left = primary.physical_x + + if primary.taskbar_position == TaskbarPosition::Left { + primary.taskbar_size as i32 + } else { + 0 + }; + let work_top = primary.physical_y + + if primary.taskbar_position == TaskbarPosition::Top { + primary.taskbar_size as i32 + } else { + 0 + }; + let work_right = primary.physical_x + primary.physical_width as i32 + - if primary.taskbar_position == TaskbarPosition::Right { + primary.taskbar_size as i32 + } else { + 0 + }; + let work_bottom = primary.physical_y + primary.physical_height as i32 + - if primary.taskbar_position == TaskbarPosition::Bottom { + primary.taskbar_size as i32 + } else { + 0 + }; + + let (final_x, final_y) = if let Some(pos) = tray_pos { + let icon_x = pos.x as i32; + let icon_y = pos.y as i32; + let icon_width = 0; + let icon_height = 0; + + let icon_center_x = icon_x + (icon_width / 2); + let default_x = icon_center_x - (physical_width / 2); + let max_x = work_right - physical_gap - physical_width; + let min_x = work_left + physical_gap; + let clamped_x = default_x.clamp(min_x, max_x); + + let icon_center_y = icon_y + (icon_height / 2); + let default_y = icon_center_y - (physical_height / 2); + let max_y = work_bottom - physical_gap - physical_height; + let min_y = work_top + physical_gap; + let clamped_y = default_y.clamp(min_y, max_y); + + match primary.taskbar_position { + TaskbarPosition::Bottom => { + (clamped_x, work_bottom - physical_height - physical_gap) + } + TaskbarPosition::Top => (clamped_x, work_top + physical_gap), + TaskbarPosition::Left => (work_left + physical_gap, clamped_y), + TaskbarPosition::Right => (work_right - physical_width - physical_gap, clamped_y), + _ => (clamped_x, work_bottom - physical_height - physical_gap), + } + } else { + let x = work_right - physical_width - physical_gap; + let y = work_bottom - physical_height - physical_gap; + (x, y) + }; + + window.set_always_on_top(true)?; + window.set_position(tauri::PhysicalPosition::new(final_x, final_y))?; + window.show()?; + + let window_focus = window.clone(); + std::thread::spawn(move || { + std::thread::sleep(std::time::Duration::from_millis(50)); + // Toggle always_on_top to force Z-order above the Windows tray overflow popup + let _ = window_focus.set_always_on_top(false); + let _ = window_focus.set_always_on_top(true); + let _ = window_focus.set_focus(); + }); + + Ok(window) + } + + pub fn open_full_view(app: &tauri::AppHandle) -> tauri::Result { + log::info!("open_full_view: Getting monitors"); + let monitors = Self::get_monitors(); + log::info!("open_full_view: Found {} monitors", monitors.len()); + let primary = monitors + .iter() + .find(|m| m.is_primary) + .unwrap_or(&monitors[0]); + log::info!( + "open_full_view: Primary monitor scale factor: {}", + primary.scale_factor + ); + + log::info!("open_full_view: Checking if old-ui window exists"); + let window = if let Some(window) = tauri::Manager::get_webview_window(app, OLD_UI_WINDOW_ID) + { + log::info!("open_full_view: old-ui window exists, unminimizing"); + let _ = window.unminimize(); + window + } else { + log::info!("open_full_view: old-ui window does not exist, building it"); + let win = Self::build_full_window(app)?; + log::info!("open_full_view: old-ui window built successfully"); + win + }; + + log::info!("open_full_view: Querying outer_size"); + let outer_size = window.outer_size().unwrap_or(tauri::PhysicalSize { + width: (OLD_UI_WIDTH * primary.scale_factor) as u32, + height: (OLD_UI_HEIGHT * primary.scale_factor) as u32, + }); + log::info!("open_full_view: outer_size = {:?}", outer_size); + + log::info!("open_full_view: Querying inner_size"); + let inner_size = window.inner_size().unwrap_or(tauri::PhysicalSize { + width: (OLD_UI_WIDTH * primary.scale_factor) as u32, + height: (OLD_UI_HEIGHT * primary.scale_factor) as u32, + }); + log::info!("open_full_view: inner_size = {:?}", inner_size); + + let physical_width = outer_size.width as i32; + let physical_height = outer_size.height as i32; + + // Windows invisible borders (shadows) are included in outer_size for decorated windows. + let border_thickness = (physical_width - (inner_size.width as i32)) / 2; + let visible_height = physical_height - border_thickness; + + let physical_gap = (WINDOW_GAP * primary.scale_factor) as i32; + + let center_x = primary.physical_x + (primary.physical_width as i32 / 2); + let center_y = primary.physical_y + (primary.physical_height as i32 / 2); + + let mut window_x = center_x - (physical_width / 2); + let mut window_y = center_y - (visible_height / 2); + + let taskbar_size = primary.taskbar_size as i32; + + match primary.taskbar_position { + TaskbarPosition::Bottom => { + let max_y = primary.physical_y + primary.physical_height as i32 + - taskbar_size + - physical_gap; + if window_y + visible_height > max_y { + window_y = max_y - visible_height; + } + } + TaskbarPosition::Top => { + let min_y = primary.physical_y + taskbar_size + physical_gap; + if window_y < min_y { + window_y = min_y; + } + } + TaskbarPosition::Left => { + let min_x = primary.physical_x + taskbar_size + physical_gap; + if window_x + border_thickness < min_x { + window_x = min_x - border_thickness; + } + } + TaskbarPosition::Right => { + let max_x = primary.physical_x + primary.physical_width as i32 + - taskbar_size + - physical_gap; + if window_x + physical_width - border_thickness > max_x { + window_x = max_x - physical_width + border_thickness; + } + } + _ => {} + } + + log::info!( + "open_full_view: Setting position to ({}, {})", + window_x, + window_y + ); + window.set_position(tauri::PhysicalPosition::new(window_x, window_y))?; + log::info!("open_full_view: Position set, showing window"); + window.show()?; + log::info!("open_full_view: Window shown successfully"); + Ok(window) + } +} diff --git a/src/pages/client/clientAPI/clientApi.ts b/src/pages/client/clientAPI/clientApi.ts index 4278415dc..8d0aec4a0 100644 --- a/src/pages/client/clientAPI/clientApi.ts +++ b/src/pages/client/clientAPI/clientApi.ts @@ -130,8 +130,7 @@ const stopGlobalLogWatcher = async (): Promise => const getAppConfig = async (): Promise => invokeWrapper('command_get_app_config'); -const getPostureData = async (): Promise => - invokeWrapper('get_posture_data'); +const getPostureData = async (): Promise => invokeWrapper('get_posture_data'); const getProvisioningConfig = async (): Promise => invokeWrapper('get_provisioning_config'); diff --git a/src/shared/defguard-ui b/src/shared/defguard-ui index 1110ba807..4afa896cd 160000 --- a/src/shared/defguard-ui +++ b/src/shared/defguard-ui @@ -1 +1 @@ -Subproject commit 1110ba807491689efc40a2e28383ea1c6186fcad +Subproject commit 4afa896cdc09c711ce867442818fe0e7b7b9839f From 6c594b3e1a11e137252350a6bbe26d5858b2bcd1 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 21 May 2026 11:47:07 +0200 Subject: [PATCH 015/155] Optimise VPNExtension (#883) --- src-tauri/Cargo.lock | 12 +- swift/boringtun | 2 +- .../VPNExtension.xcodeproj/project.pbxproj | 1 - swift/extension/VPNExtension/Adapter.swift | 126 +++++++++++++----- 4 files changed, 98 insertions(+), 43 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 97d34a07f..dff0dfb0e 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1820,9 +1820,9 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" dependencies = [ "serde", ] @@ -3577,9 +3577,9 @@ dependencies = [ [[package]] name = "muda" -version = "0.19.1" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ae8844f63b5b118e334e205585b8c5c17b984121dbdb179d44aeb087ffad3cb" +checksum = "47a2e3dff89cd322c66647942668faee0a2b1f88ea6cbb4d374b4a8d7e92528c" dependencies = [ "crossbeam-channel", "dpi", @@ -4745,9 +4745,9 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c3a14896dfa883796f1cb410461aef38810ea05f2b2c33c5aded3649095fdad" +checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" dependencies = [ "bitflags 2.11.1", "memchr", diff --git a/swift/boringtun b/swift/boringtun index 464534922..b7c29222f 160000 --- a/swift/boringtun +++ b/swift/boringtun @@ -1 +1 @@ -Subproject commit 46453492245605418b13b79019b27a7b4427349b +Subproject commit b7c29222f9881165e514088cc8f6c6463e0aa452 diff --git a/swift/extension/VPNExtension.xcodeproj/project.pbxproj b/swift/extension/VPNExtension.xcodeproj/project.pbxproj index f54850887..8ad5e3e37 100644 --- a/swift/extension/VPNExtension.xcodeproj/project.pbxproj +++ b/swift/extension/VPNExtension.xcodeproj/project.pbxproj @@ -335,7 +335,6 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; }; diff --git a/swift/extension/VPNExtension/Adapter.swift b/swift/extension/VPNExtension/Adapter.swift index 51d152572..bd3650034 100644 --- a/swift/extension/VPNExtension/Adapter.swift +++ b/swift/extension/VPNExtension/Adapter.swift @@ -24,11 +24,14 @@ enum State { /// Network routes monitor. private var networkMonitor: NWPathMonitor? /// Keep alive timer - private var keepAliveTimer: Timer? + private var keepAliveTimer: DispatchSourceTimer? /// Unified logger (writes to both system log and file) private let log = Log(category: "Adapter") /// Adapter state. private var state: State = .stopped + /// Serialize tunnel I/O and connection state changes off the main queue. + private let ioQueue = DispatchQueue(label: "net.defguard.VPNExtension.adapter") + private let ioQueueKey = DispatchSpecificKey() /// For statistics returned to Rust code. var locationId: UInt64? @@ -40,6 +43,7 @@ enum State { /// - Parameter packetTunnelProvider: an instance of `NEPacketTunnelProvider`. Internally stored init(with packetTunnelProvider: NEPacketTunnelProvider) { self.packetTunnelProvider = packetTunnelProvider + self.ioQueue.setSpecific(key: ioQueueKey, value: ()) } deinit { @@ -47,6 +51,41 @@ enum State { } func start(tunnelConfiguration: TunnelConfiguration) throws { + try syncOnQueue { + try startOnQueue(tunnelConfiguration: tunnelConfiguration) + } + } + + func stop() { + syncOnQueue { + stopOnQueue() + } + } + + // Obtain tunnel statistics. + func stats() -> Stats? { + syncOnQueue { + guard let stats = tunnel?.stats() else { return nil } + return Stats( + txBytes: stats.txBytes, + rxBytes: stats.rxBytes, + lastHandshake: stats.lastHandshake, + locationId: locationId, + tunnelId: tunnelId + ) + } + } + + private func syncOnQueue(_ work: () throws -> T) rethrows -> T { + if DispatchQueue.getSpecific(key: ioQueueKey) == nil { + return try ioQueue.sync { + try work() + } + } + return try work() + } + + private func startOnQueue(tunnelConfiguration: TunnelConfiguration) throws { guard case .stopped = self.state else { log.error("Invalid state - cannot start tunnel") // TODO: throw invalid state @@ -63,7 +102,7 @@ enum State { networkMonitor.pathUpdateHandler = { [weak self] path in self?.networkPathUpdate(path: path) } - networkMonitor.start(queue: .main) + networkMonitor.start(queue: ioQueue) self.networkMonitor = networkMonitor log.info("Initializing Tunnel") @@ -94,12 +133,12 @@ enum State { log.info("Tunnel started successfully") } - func stop() { + private func stopOnQueue() { log.info("Stopping Adapter") connection?.cancel() connection = nil tunnel = nil - keepAliveTimer?.invalidate() + keepAliveTimer?.cancel() keepAliveTimer = nil // Cancel network monitor networkMonitor?.cancel() @@ -110,21 +149,13 @@ enum State { log.flush() } - // Obtain tunnel statistics. - func stats() -> Stats? { - if let stats = tunnel?.stats() { - return Stats( - txBytes: stats.txBytes, - rxBytes: stats.rxBytes, - lastHandshake: stats.lastHandshake, - locationId: locationId, - tunnelId: tunnelId - ) - } - return nil + private func handleTunnelResult(_ result: TunnelResult) { + var tunnelPackets = [NEPacket]() + handleTunnelResult(result, tunnelPackets: &tunnelPackets) + flushTunnelPackets(tunnelPackets) } - private func handleTunnelResult(_ result: TunnelResult) { + private func handleTunnelResult(_ result: TunnelResult, tunnelPackets: inout [NEPacket]) { switch result { case .done: // Nothing to do. @@ -151,16 +182,17 @@ enum State { case .writeToNetwork(let data): sendToEndpoint(data: data) case .writeToTunnelV4(let data): - packetTunnelProvider?.packetFlow.writePacketObjects([ - NEPacket(data: data, protocolFamily: sa_family_t(AF_INET)) - ]) + tunnelPackets.append(NEPacket(data: data, protocolFamily: sa_family_t(AF_INET))) case .writeToTunnelV6(let data): - packetTunnelProvider?.packetFlow.writePacketObjects([ - NEPacket(data: data, protocolFamily: sa_family_t(AF_INET6)) - ]) + tunnelPackets.append(NEPacket(data: data, protocolFamily: sa_family_t(AF_INET6))) } } + private func flushTunnelPackets(_ tunnelPackets: [NEPacket]) { + guard !tunnelPackets.isEmpty else { return } + packetTunnelProvider?.packetFlow.writePacketObjects(tunnelPackets) + } + /// Initialise UDP connection to endpoint. private func initEndpoint() { guard let endpoint = endpoint else { return } @@ -177,7 +209,7 @@ enum State { self?.endpointStateChange(state: state) } - connection.start(queue: .main) + connection.start(queue: ioQueue) self.connection = connection } @@ -194,15 +226,21 @@ enum State { log.debug("NWConnection path: \(String(describing: self.connection?.currentPath))") receive() - // Use Timer to send keep-alive packets. - keepAliveTimer?.invalidate() + // Use a dispatch timer to avoid bouncing keep-alives through the main run loop. + keepAliveTimer?.cancel() log.info("Creating keep-alive timer") - let timer = Timer(timeInterval: 0.25, repeats: true) { [weak self] timer in + let timer = DispatchSource.makeTimerSource(queue: ioQueue) + timer.schedule( + deadline: .now() + .milliseconds(250), + repeating: .milliseconds(250), + leeway: .milliseconds(25) + ) + timer.setEventHandler { [weak self] in guard let self = self, let tunnel = self.tunnel else { return } self.handleTunnelResult(tunnel.tick()) } keepAliveTimer = timer - RunLoop.main.add(timer, forMode: .common) + timer.resume() } /// Send packets to UDP endpoint. @@ -226,7 +264,9 @@ enum State { connection?.receiveMessage { [weak self] data, context, isComplete, error in guard let self = self else { return } if let data = data, let tunnel = self.tunnel { - self.handleTunnelResult(tunnel.read(src: data)) + autoreleasepool { + self.handleTunnelResult(tunnel.read(src: data)) + } } if error == nil { // continue receiving @@ -239,16 +279,32 @@ enum State { /// Read tunnel packets. private func readPackets() { + // Packets received to the tunnel's virtual interface. + packetTunnelProvider?.packetFlow.readPacketObjects { [weak self] packets in + guard let self = self else { return } + + self.ioQueue.async { + self.processTunnelPackets(packets) + + // continue reading + self.readPackets() + } + } + } + + private func processTunnelPackets(_ packets: [NEPacket]) { guard let tunnel = self.tunnel else { return } - // Packets received to the tunnel's virtual interface. - packetTunnelProvider?.packetFlow.readPacketObjects { packets in - for packet in packets { - self.handleTunnelResult(tunnel.write(src: packet.data)) + var tunnelPackets = [NEPacket]() + tunnelPackets.reserveCapacity(packets.count) + + for packet in packets { + autoreleasepool { + self.handleTunnelResult(tunnel.write(src: packet.data), tunnelPackets: &tunnelPackets) } - // continue reading - self.readPackets() } + + flushTunnelPackets(tunnelPackets) } /// Handle UDP connection state changes. From 76d3f4b50de05e2254a3ddb33d056195824cdab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Thu, 21 May 2026 22:13:54 +0200 Subject: [PATCH 016/155] fix window spawning behaviour (#894) * fix window spawning behaviour * fix platform specific clippy error --- new-ui/package.json | 1 + new-ui/pnpm-lock.yaml | 10 +++ new-ui/src/app/App.tsx | 5 +- .../CompactLocationsPage.tsx | 10 ++- .../compact/CompactLocationsPage/style.scss | 13 +++- new-ui/src/routes/__root.tsx | 7 +- new-ui/src/routes/empty.tsx | 17 ++++- .../shared/providers/TauriEventProvider.tsx | 3 + new-ui/src/shared/rust-api/api.ts | 4 ++ new-ui/src/shared/rust-api/query.ts | 5 ++ new-ui/src/shared/rust-api/types.ts | 1 + new-ui/src/shared/scss/_base.scss | 18 +++++ src-tauri/permissions/default.toml | 1 + src-tauri/src/bin/defguard-client.rs | 16 ++++- src-tauri/src/commands.rs | 20 ++++++ src-tauri/src/tray.rs | 70 +++++++++---------- src-tauri/src/window_manager/mod.rs | 48 ++++--------- 17 files changed, 166 insertions(+), 83 deletions(-) diff --git a/new-ui/package.json b/new-ui/package.json index f37ffeecb..5e3c05162 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -23,6 +23,7 @@ "@tauri-apps/api": "^2.11.0", "@tauri-apps/plugin-http": "^2.5.9", "@tauri-apps/plugin-log": "^2.8.0", + "@tauri-apps/plugin-os": "^2.3.2", "@uidotdev/usehooks": "^2.4.1", "byte-size": "^9.0.1", "chart.js": "^4.5.1", diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index 09514ba41..98c6a6b75 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -38,6 +38,9 @@ importers: '@tauri-apps/plugin-log': specifier: ^2.8.0 version: 2.8.0 + '@tauri-apps/plugin-os': + specifier: ^2.3.2 + version: 2.3.2 '@uidotdev/usehooks': specifier: ^2.4.1 version: 2.4.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -831,6 +834,9 @@ packages: '@tauri-apps/plugin-log@2.8.0': resolution: {integrity: sha512-a+7rOq3MJwpTOLLKbL8d0qGZ85hgHw5pNOWusA9o3cf7cEgtYHiGY/+O8fj8MvywQIGqFv0da2bYQDlrqLE7rw==} + '@tauri-apps/plugin-os@2.3.2': + resolution: {integrity: sha512-n+nXWeuSeF9wcEsSPmRnBEGrRgOy6jjkSU+UVCOV8YUGKb2erhDOxis7IqRXiRVHhY8XMKks00BJ0OAdkpf6+A==} + '@tybys/wasm-util@0.10.2': resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} @@ -2368,6 +2374,10 @@ snapshots: dependencies: '@tauri-apps/api': 2.11.0 + '@tauri-apps/plugin-os@2.3.2': + dependencies: + '@tauri-apps/api': 2.11.0 + '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 diff --git a/new-ui/src/app/App.tsx b/new-ui/src/app/App.tsx index b1ffd0fc3..f73839e68 100644 --- a/new-ui/src/app/App.tsx +++ b/new-ui/src/app/App.tsx @@ -1,7 +1,6 @@ import { QueryClientProvider } from '@tanstack/react-query'; import { RouterProvider } from '@tanstack/react-router'; import { MainBackground } from '../shared/components/MainBackground/MainBackground'; -import { TauriEventProvider } from '../shared/providers/TauriEventProvider'; import { queryClient } from './query'; import { router } from './router'; @@ -11,9 +10,7 @@ function App() {
- - - +
diff --git a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx index 8549451bd..e900e6bbd 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx +++ b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx @@ -1,6 +1,8 @@ import './style.scss'; import { useQuery } from '@tanstack/react-query'; import { useLoaderData } from '@tanstack/react-router'; +import { platform } from '@tauri-apps/plugin-os'; +import clsx from 'clsx'; import { useEffect, useMemo } from 'react'; import { Button } from '../../../shared/components/Button/Button'; import { ButtonVariant } from '../../../shared/components/Button/types'; @@ -19,6 +21,8 @@ import { CompactPage } from '../CompactPage/CompactPage'; import { InstanceSwitcher } from './components/InstanceSwitcher'; import { useCompactLocationStore } from './hooks/useCompactLocationsStore'; +const isWindows = platform() === 'windows'; + export const CompactLocationsPage = () => { const selection = useCompactLocationStore((s) => s.compactViewSelection); const openLocation = useCompactLocationStore((s) => s.expandedLocation); @@ -65,7 +69,11 @@ export const CompactLocationsPage = () => { }} > -
+
{isPresent(instanceInfo) && diff --git a/new-ui/src/pages/compact/CompactLocationsPage/style.scss b/new-ui/src/pages/compact/CompactLocationsPage/style.scss index 65b918471..e5107c8fa 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/style.scss +++ b/new-ui/src/pages/compact/CompactLocationsPage/style.scss @@ -1,7 +1,7 @@ #compact-locations-page { display: flex; flex-flow: column; - min-height: 100dvh; + height: 100dvh; > .compact-footer { display: flex; @@ -21,11 +21,22 @@ min-height: 0; row-gap: var(--spacing-sm); + &.windows { + scrollbar-gutter: stable; + overflow-y: scroll; + + > .locations { + padding-right: 6px; + } + } + > .locations { display: flex; flex-flow: column; row-gap: var(--spacing-sm); width: 100%; + box-sizing: border-box; + padding-right: 6px; } } } diff --git a/new-ui/src/routes/__root.tsx b/new-ui/src/routes/__root.tsx index 0bf726153..0ba077398 100644 --- a/new-ui/src/routes/__root.tsx +++ b/new-ui/src/routes/__root.tsx @@ -1,5 +1,6 @@ import type { QueryClient } from '@tanstack/react-query'; import { createRootRouteWithContext, Outlet } from '@tanstack/react-router'; +import { TauriEventProvider } from '../shared/providers/TauriEventProvider'; interface RouterContext { queryClient: QueryClient; @@ -12,5 +13,9 @@ export const Route = createRootRouteWithContext()({ }); function RootComponent() { - return ; + return ( + + + + ); } diff --git a/new-ui/src/routes/empty.tsx b/new-ui/src/routes/empty.tsx index d01978392..7753c91e5 100644 --- a/new-ui/src/routes/empty.tsx +++ b/new-ui/src/routes/empty.tsx @@ -1,9 +1,22 @@ -import { createFileRoute } from '@tanstack/react-router'; +import { useQuery } from '@tanstack/react-query'; +import { createFileRoute, useNavigate } from '@tanstack/react-router'; +import { useEffect } from 'react'; + +import { hasAnyVisibleLocationsQueryOptions } from '../shared/rust-api/query'; export const Route = createFileRoute('/empty')({ component: RouteComponent, }); function RouteComponent() { - return
Hello "/empty"!
; + const navigate = useNavigate(); + const { data: hasLocations } = useQuery(hasAnyVisibleLocationsQueryOptions); + + useEffect(() => { + if (hasLocations === true) { + void navigate({ to: '/' }); + } + }, [hasLocations, navigate]); + + return
; } diff --git a/new-ui/src/shared/providers/TauriEventProvider.tsx b/new-ui/src/shared/providers/TauriEventProvider.tsx index 94aabbc2e..fee0bfa13 100644 --- a/new-ui/src/shared/providers/TauriEventProvider.tsx +++ b/new-ui/src/shared/providers/TauriEventProvider.tsx @@ -26,11 +26,13 @@ export const TauriEventProvider = ({ children }: PropsWithChildren) => { listen(TauriEvent.InstanceUpdate, () => { void queryClient.invalidateQueries({ queryKey: ['instances'] }); void queryClient.invalidateQueries({ queryKey: ['locations'] }); + void queryClient.invalidateQueries({ queryKey: ['has-any-visible-locations'] }); }), listen(TauriEvent.LocationUpdate, () => { void queryClient.invalidateQueries({ queryKey: ['locations'] }); void queryClient.invalidateQueries({ queryKey: ['location-details'] }); + void queryClient.invalidateQueries({ queryKey: ['has-any-visible-locations'] }); }), listen(TauriEvent.AppVersionFetch, () => { @@ -41,6 +43,7 @@ export const TauriEventProvider = ({ children }: PropsWithChildren) => { void queryClient.invalidateQueries({ queryKey: ['settings'] }); void queryClient.invalidateQueries({ queryKey: ['provisioning-config'] }); void queryClient.invalidateQueries({ queryKey: ['instances'] }); + void queryClient.invalidateQueries({ queryKey: ['has-any-visible-locations'] }); }), listen(TauriEvent.DeadConnectionDropped, () => { diff --git a/new-ui/src/shared/rust-api/api.ts b/new-ui/src/shared/rust-api/api.ts index 435966e9c..282afd73d 100644 --- a/new-ui/src/shared/rust-api/api.ts +++ b/new-ui/src/shared/rust-api/api.ts @@ -41,6 +41,9 @@ const saveDeviceConfig = (args: SaveConfigArgs): Promise => invoke(TauriCommand.AllLocations, { instanceId }); +const hasAnyVisibleLocations = (): Promise => + invoke(TauriCommand.HasAnyVisibleLocations); + const getLocationDetails = (args: LocationDetailsArgs): Promise => invoke(TauriCommand.LocationInterfaceDetails, args); @@ -139,6 +142,7 @@ export const api = { saveDeviceConfig, // Locations getLocations, + hasAnyVisibleLocations, getLocationDetails, updateLocationRouting, setLocationMfaMethod, diff --git a/new-ui/src/shared/rust-api/query.ts b/new-ui/src/shared/rust-api/query.ts index d42ef1a61..0d44f3ce2 100644 --- a/new-ui/src/shared/rust-api/query.ts +++ b/new-ui/src/shared/rust-api/query.ts @@ -21,6 +21,11 @@ export const getLocationsQueryOptions = (instanceId: number) => queryFn: () => api.getLocations(instanceId), }); +export const hasAnyVisibleLocationsQueryOptions = queryOptions({ + queryKey: ['has-any-visible-locations'] as const, + queryFn: () => api.hasAnyVisibleLocations(), +}); + export const getLocationDetailsQueryOptions = (args: LocationDetailsArgs) => queryOptions({ queryKey: ['location-details', args.locationId, args.connectionType] as const, diff --git a/new-ui/src/shared/rust-api/types.ts b/new-ui/src/shared/rust-api/types.ts index 708d1b51e..4f1610382 100644 --- a/new-ui/src/shared/rust-api/types.ts +++ b/new-ui/src/shared/rust-api/types.ts @@ -73,6 +73,7 @@ export const TauriCommand = { SaveDeviceConfig: 'save_device_config', // Locations AllLocations: 'all_locations', + HasAnyVisibleLocations: 'has_any_visible_locations', LocationInterfaceDetails: 'location_interface_details', UpdateLocationRouting: 'update_location_routing', SetLocationMfaMethod: 'set_location_mfa_method', diff --git a/new-ui/src/shared/scss/_base.scss b/new-ui/src/shared/scss/_base.scss index 1efbcd5b7..fc20585f8 100644 --- a/new-ui/src/shared/scss/_base.scss +++ b/new-ui/src/shared/scss/_base.scss @@ -71,3 +71,21 @@ ol { margin: 0; padding: 0; } + +::-webkit-scrollbar { + width: 4px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: transparent; + border-radius: 100px; +} + +* { + scrollbar-width: thin; + scrollbar-color: var(--fg-white-50) transparent; +} diff --git a/src-tauri/permissions/default.toml b/src-tauri/permissions/default.toml index 610c903dc..11d31ed38 100644 --- a/src-tauri/permissions/default.toml +++ b/src-tauri/permissions/default.toml @@ -3,6 +3,7 @@ identifier = "allow-app-commands" description = "Allow all application commands for both UI windows (old-ui and new-ui)." commands.allow = [ "all_locations", + "has_any_visible_locations", "save_device_config", "all_instances", "connect", diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 34a85400b..15c100293 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -156,6 +156,7 @@ fn main() { let app = Builder::default() .invoke_handler(tauri::generate_handler![ all_locations, + has_any_visible_locations, save_device_config, all_instances, connect, @@ -194,8 +195,8 @@ fn main() { ]) .on_window_event(|window, event| { if let WindowEvent::CloseRequested { api, .. } = event { - // Only prevent close on the tray (new-ui) window; let other windows close normally. - if window.label() == NEW_UI_WINDOW_ID { + let label = window.label(); + if label == NEW_UI_WINDOW_ID || label == OLD_UI_WINDOW_ID { #[cfg(not(target_os = "macos"))] let _ = window.hide(); @@ -351,6 +352,15 @@ fn main() { let state = AppState::new(config, provisioning_config); app.manage(state); + // Pre-build both windows hidden so they can be shown/hidden without recreation. + if let Err(e) = WindowManager::build_tray_window(app_handle) { + warn!("Failed to pre-build tray window: {e}"); + } + if let Err(e) = WindowManager::build_full_window(app_handle) { + warn!("Failed to pre-build full window: {e}"); + } + + // Decide which window to show based on platform and available locations. #[cfg(target_os = "linux")] { let _ = WindowManager::open_full_view(app_handle); @@ -363,7 +373,7 @@ fn main() { if has_locations { WindowManager::open_tray(app_handle)?; } else { - info!("No locations found, spawning full view on startup."); + info!("No locations found, showing full view on startup."); let _ = WindowManager::open_full_view(app_handle); } } diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index af70e7ba4..4b9893116 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -567,6 +567,26 @@ pub async fn all_locations(instance_id: Id) -> Result, Error> Ok(location_info) } +/// Returns `true` if there is at least one visible (non-service) location across all instances. +/// Shares the same visibility filter as [`all_locations`] (`include_service_locations = false`). +#[tauri::command(async)] +pub async fn has_any_visible_locations() -> Result { + trace!("Checking whether any visible locations exist."); + let instances = Instance::all(&*DB_POOL).await?; + for instance in &instances { + let locations = Location::find_by_instance_id(&*DB_POOL, instance.id, false).await?; + if !locations.is_empty() { + trace!( + "Found at least one visible location in instance {}.", + instance.name + ); + return Ok(true); + } + } + trace!("No visible locations found."); + Ok(false) +} + #[derive(Serialize, Debug)] pub struct LocationInterfaceDetails { pub location_id: Id, diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index 4339c6bdd..b4efd3534 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -8,6 +8,8 @@ use tauri::{ use tauri::tray::{MouseButton, MouseButtonState, TrayIconEvent}; +#[cfg(not(target_os = "linux"))] +use crate::window_manager::WindowManager; use crate::{ active_connections::{get_connection_id_by_type, ACTIVE_CONNECTIONS}, appstate::AppState, @@ -38,8 +40,7 @@ fn store_tray_click_position(app: &AppHandle, event: &TrayIconEvent) { button_state: MouseButtonState::Down, rect, .. - } - | TrayIconEvent::DoubleClick { rect, .. } => Some(rect.position.to_physical(1.0)), + } => Some(rect.position.to_physical(1.0)), _ => None, }; @@ -141,30 +142,9 @@ async fn generate_tray_menu(app: &AppHandle) -> Result, Error pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { let tray_menu = generate_tray_menu(app).await?; - // On macOS, always show menu under system tray icon. - #[cfg(target_os = "macos")] - TrayIconBuilder::with_id(TRAY_ICON_ID) - .menu(&tray_menu) - .show_menu_on_left_click(true) - .on_tray_icon_event(|icon, event| { - store_tray_click_position(icon.app_handle(), &event); - if let TrayIconEvent::Click { - button: MouseButton::Left, - button_state: MouseButtonState::Up, - .. - } = event - { - show_new_ui_window_near_tray(icon.app_handle()); - } - }) - .on_menu_event(handle_tray_menu_event) - .build(app)?; - // On other systems (especially Windows), system tray menu is on right-click, - // and double-click shows the main window. - #[cfg(not(target_os = "macos"))] TrayIconBuilder::with_id(TRAY_ICON_ID) .menu(&tray_menu) - .show_menu_on_left_click(false) + .show_menu_on_left_click(cfg!(target_os = "macos")) .on_tray_icon_event(|icon, event| { store_tray_click_position(icon.app_handle(), &event); if let TrayIconEvent::Click { @@ -173,7 +153,29 @@ pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { .. } = event { - show_new_ui_window_near_tray(icon.app_handle()); + let app = icon.app_handle(); + let any_visible = [NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID].iter().any(|id| { + app.get_webview_window(id) + .and_then(|w| w.is_visible().ok()) + .unwrap_or(false) + }); + if any_visible { + hide_visible_windows(app); + } else { + #[cfg(not(target_os = "linux"))] + { + let has_locations = tauri::async_runtime::block_on( + crate::window_manager::has_non_service_locations(), + ); + if has_locations { + show_new_ui_window_near_tray(app); + } else { + let _ = WindowManager::open_full_view(app); + } + } + #[cfg(target_os = "linux")] + show_new_ui_window_near_tray(app); + } } }) .on_menu_event(handle_tray_menu_event) @@ -197,16 +199,15 @@ pub(crate) async fn reload_tray_menu(app: &AppHandle) { } } -fn hide_main_window(app: &AppHandle) { +fn hide_visible_windows(app: &AppHandle) { #[cfg(target_os = "macos")] if let Err(err) = app.hide() { warn!("Failed to hide application: {err}"); } - #[cfg(not(target_os = "macos"))] - for window_id in [NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID] { - if let Some(window) = app.get_webview_window(window_id) { + for (id, window) in app.webview_windows() { + if window.is_visible().unwrap_or(false) { if let Err(err) = window.hide() { - warn!("Failed to hide window {window_id}: {err}"); + warn!("Failed to hide window {id}: {err}"); } } } @@ -224,11 +225,8 @@ pub fn show_main_window(app: &AppHandle) { if let Err(err) = app.show() { warn!("Failed to show application: {err}"); } - #[cfg(not(target_os = "macos"))] - { - if let Err(err) = window.show() { - warn!("Failed to show main window: {err}"); - } + if let Err(err) = window.show() { + warn!("Failed to show main window: {err}"); } let _ = window.set_focus(); } @@ -243,7 +241,7 @@ pub fn handle_tray_menu_event(app: &AppHandle, event: MenuEvent) { handle.exit(0); } TRAY_EVENT_SHOW => show_new_ui_window_near_tray(app), - TRAY_EVENT_HIDE => hide_main_window(app), + TRAY_EVENT_HIDE => hide_visible_windows(app), TRAY_EVENT_UPDATES => { let _ = webbrowser::open(SUBSCRIBE_UPDATES_LINK); } diff --git a/src-tauri/src/window_manager/mod.rs b/src-tauri/src/window_manager/mod.rs index 780e41cce..d821fd48c 100644 --- a/src-tauri/src/window_manager/mod.rs +++ b/src-tauri/src/window_manager/mod.rs @@ -58,6 +58,7 @@ impl WindowManager { .title("Defguard") .inner_size(OLD_UI_WIDTH, OLD_UI_HEIGHT) .decorations(true) + .visible(false) .build() } } @@ -93,29 +94,14 @@ pub fn swap_to_old_ui(app: AppHandle) { tauri::async_runtime::spawn(async move { // Sleep briefly to let the IPC handler return tokio::time::sleep(std::time::Duration::from_millis(50)).await; - tracing::info!("swap_to_old_ui task: Opening full view"); - match WindowManager::open_full_view(&app) { - Ok(_) => { - tracing::info!( - "swap_to_old_ui task: open_full_view succeeded, sleeping before destroy" - ); - tokio::time::sleep(std::time::Duration::from_millis(150)).await; - if let Some(w) = tauri::Manager::get_webview_window(&app, NEW_UI_WINDOW_ID) { - tracing::info!("swap_to_old_ui task: Destroying new-ui window"); - if let Err(e) = w.destroy() { - tracing::error!( - "swap_to_old_ui task: Failed to destroy new-ui window: {:?}", - e - ); - } - } else { - tracing::warn!("swap_to_old_ui task: new-ui window not found to destroy"); - } - } - Err(e) => { - tracing::error!("swap_to_old_ui task: open_full_view failed: {:?}", e); + if let Some(w) = tauri::Manager::get_webview_window(&app, NEW_UI_WINDOW_ID) { + if let Err(e) = w.hide() { + tracing::error!("swap_to_old_ui task: Failed to hide new-ui window: {:?}", e); } } + if let Err(e) = WindowManager::open_full_view(&app) { + tracing::error!("swap_to_old_ui task: Failed to open full view: {:?}", e); + } }); } @@ -125,15 +111,15 @@ pub fn close_tray_window(app: AppHandle) { tauri::async_runtime::spawn(async move { tokio::time::sleep(std::time::Duration::from_millis(50)).await; if let Some(w) = tauri::Manager::get_webview_window(&app, NEW_UI_WINDOW_ID) { - tracing::info!("close_tray_window task: Destroying new-ui window"); - if let Err(e) = w.destroy() { + tracing::info!("close_tray_window task: Hiding new-ui window"); + if let Err(e) = w.hide() { tracing::error!( - "close_tray_window task: Failed to destroy new-ui window: {:?}", + "close_tray_window task: Failed to hide new-ui window: {:?}", e ); } } else { - tracing::warn!("close_tray_window task: new-ui window not found to destroy"); + tracing::warn!("close_tray_window task: new-ui window not found"); } }); } @@ -143,19 +129,11 @@ pub fn swap_to_new_ui(app: AppHandle) { tracing::info!("swap_to_new_ui called"); tauri::async_runtime::spawn(async move { tokio::time::sleep(std::time::Duration::from_millis(50)).await; - tracing::info!("swap_to_new_ui task: Showing new UI window"); show_new_ui_window(&app); - tokio::time::sleep(std::time::Duration::from_millis(150)).await; if let Some(w) = tauri::Manager::get_webview_window(&app, OLD_UI_WINDOW_ID) { - tracing::info!("swap_to_new_ui task: Destroying old-ui window"); - if let Err(e) = w.destroy() { - tracing::error!( - "swap_to_new_ui task: Failed to destroy old-ui window: {:?}", - e - ); + if let Err(e) = w.hide() { + tracing::error!("swap_to_new_ui task: Failed to hide old-ui window: {:?}", e); } - } else { - tracing::warn!("swap_to_new_ui task: old-ui window not found to destroy"); } }); } From 827de86655d91568c1d81c4daf3b156d11aff219 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Thu, 21 May 2026 22:21:20 +0200 Subject: [PATCH 017/155] disable overscroll on body in tray window --- new-ui/src/shared/scss/_base.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/new-ui/src/shared/scss/_base.scss b/new-ui/src/shared/scss/_base.scss index fc20585f8..e33237dfa 100644 --- a/new-ui/src/shared/scss/_base.scss +++ b/new-ui/src/shared/scss/_base.scss @@ -14,6 +14,7 @@ html, body { padding: 0; margin: 0; + overscroll-behavior: none; } // for apple From 7dddd976a13beb5d830d048ce6b36ad172cc185f Mon Sep 17 00:00:00 2001 From: Jacek Chmielewski Date: Fri, 22 May 2026 12:10:10 +0200 Subject: [PATCH 018/155] Handle posture checks in new UI (#882) * handle posture check in new UI MFA flow * fix formatting * add posture data to all MFA connection requests * startClientMfaSession helper, deduplicate mfa flow code * display posture check errors * handleMfaStartError helper * make shouldShowPostureError a type guard * handle posture errors during posture-only connect flow * posture check error styling * fix "Try again" button behavior * fix errors in old ui * docstrings * fix error typing * MfaMethod "enum" --- .../components/LocationCard/LocationCard.tsx | 3 +- .../LocationCard/api/connectError.ts | 20 +++ .../LocationCard/api/startClientMfaSession.ts | 121 ++++++++++++++++++ .../ConnectButton/ConnectButton.tsx | 14 +- .../LocationCard/context/context.tsx | 5 + .../LocationCard/hooks/handleMfaStartError.ts | 26 ++++ .../LocationCard/hooks/useMfaConnect.ts | 77 ++++------- .../LocationCard/hooks/useMfaMobileConnect.ts | 65 ++++------ .../LocationCard/hooks/useMfaOidcConnect.ts | 54 +++----- .../LocationCardMfaEmailView.tsx | 6 +- .../LocationCardMfaMobileView.tsx | 17 ++- .../LocationCardMfaOidcView.tsx | 9 +- .../LocationCardMfaTotpView.tsx | 6 +- .../LocationCardPostureCheckFailView.tsx | 38 ++++++ .../style.scss | 31 +++++ new-ui/src/shared/rust-api/api.ts | 3 + new-ui/src/shared/rust-api/types.ts | 2 + src-tauri/src/commands.rs | 30 ++++- src/pages/client/clientAPI/clientApi.ts | 18 ++- .../modals/MFAModal/MFAModal.tsx | 2 +- 20 files changed, 399 insertions(+), 148 deletions(-) create mode 100644 new-ui/src/shared/components/LocationCard/api/connectError.ts create mode 100644 new-ui/src/shared/components/LocationCard/api/startClientMfaSession.ts create mode 100644 new-ui/src/shared/components/LocationCard/hooks/handleMfaStartError.ts create mode 100644 new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/LocationCardPostureCheckFailView.tsx create mode 100644 new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/style.scss diff --git a/new-ui/src/shared/components/LocationCard/LocationCard.tsx b/new-ui/src/shared/components/LocationCard/LocationCard.tsx index 7216e34f5..d1aa09929 100644 --- a/new-ui/src/shared/components/LocationCard/LocationCard.tsx +++ b/new-ui/src/shared/components/LocationCard/LocationCard.tsx @@ -21,6 +21,7 @@ import { LocationCardMfaMobileView } from './views/LocationCardMfaMobileView/Loc import { LocationCardMfaOidcView } from './views/LocationCardMfaOidcView/LocationCardMfaOidcView'; import { LocationCardMfaSettings } from './views/LocationCardMfaSettings/LocationCardMfaSettings'; import { LocationCardMfaTotpView } from './views/LocationCardMfaTotpView/LocationCardMfaTotpView'; +import { LocationCardPostureCheckFailView } from './views/LocationCardPostureCheckFailView/LocationCardPostureCheckFailView'; interface Props { location: LocationInfo; @@ -39,7 +40,7 @@ const views: Record = { [LocationCardViews.MfaSettings]: , [LocationCardViews.Connecting]: null, [LocationCardViews.Connected]: , - [LocationCardViews.PostureCheckFail]: null, + [LocationCardViews.PostureCheckFail]: , }; interface InnerProps { diff --git a/new-ui/src/shared/components/LocationCard/api/connectError.ts b/new-ui/src/shared/components/LocationCard/api/connectError.ts new file mode 100644 index 000000000..828f64bb0 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/api/connectError.ts @@ -0,0 +1,20 @@ +import z from 'zod'; + +const connectErrorSchema = z.discriminatedUnion('kind', [ + z.object({ + kind: z.literal('postureCheckFailed'), + message: z.string(), + }), + z.object({ + kind: z.literal('other'), + message: z.string(), + }), +]); + +export type ConnectError = z.infer; + +export const parseConnectError = (err: unknown): ConnectError | null => { + const result = connectErrorSchema.safeParse(err); + + return result.success ? result.data : null; +}; diff --git a/new-ui/src/shared/components/LocationCard/api/startClientMfaSession.ts b/new-ui/src/shared/components/LocationCard/api/startClientMfaSession.ts new file mode 100644 index 000000000..21ac5f080 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/api/startClientMfaSession.ts @@ -0,0 +1,121 @@ +import { fetch } from '@tauri-apps/plugin-http'; +import { api } from '../../../rust-api/api'; +import type { + EdgeRequestHeaders, + InstanceInfo, + LocationInfo, +} from '../../../rust-api/types'; + +export const CLIENT_MFA_ENDPOINT = 'api/v1/client-mfa'; + +/** Error raised when the MFA start request or its prerequisites fail. */ +export class MfaStartError extends Error { + public readonly status?: number; + + constructor(message: string, status?: number) { + super(message); + this.name = 'MfaStartError'; + this.status = status; + } +} + +/** MFA method identifiers expected by the desktop-client MFA API */ +export const MfaStartMethod = { + Totp: 0, + Email: 1, + Oidc: 2, + MobileApprove: 4, +} as const; + +export type MfaStartMethod = (typeof MfaStartMethod)[keyof typeof MfaStartMethod]; + +/** Successful MFA start response returned by the proxy. */ +export type MfaStartResponse = { + token: string; + challenge?: string; +}; + +/** Error response shape returned by the proxy for MFA start failures. */ +type MfaStartErrorResponse = { + error?: string; +}; + +/** Narrows MFA start errors that should open the posture failure view. */ +export const shouldShowPostureError = ( + err: unknown, + location: LocationInfo, +): err is MfaStartError => + err instanceof MfaStartError && err.status === 403 && location.posture_check_required; + +/** Input required to start a desktop-client MFA session. */ +type StartClientMfaSessionParams = { + instance: InstanceInfo; + location: LocationInfo; + method: MfaStartMethod; +}; + +/** MFA start response plus request headers required by later MFA calls. */ +type StartClientMfaSessionResult = { + response: MfaStartResponse; + headers: EdgeRequestHeaders; +}; + +/** Starts an MFA session, including posture data when the location requires it. */ +export const startClientMfaSession = async ({ + instance, + location, + method, +}: StartClientMfaSessionParams): Promise => { + let headers: EdgeRequestHeaders; + try { + headers = await api.getEdgeRequestHeaders(); + } catch { + throw new MfaStartError('Failed to load request headers'); + } + + let posture_data: unknown; + try { + posture_data = location.posture_check_required + ? await api.getPostureData() + : undefined; + } catch { + throw new MfaStartError('Failed to load posture data'); + } + + try { + const response = await fetch(`${instance.proxy_url}${CLIENT_MFA_ENDPOINT}/start`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...headers, + }, + body: JSON.stringify({ + method, + pubkey: instance.pubkey, + location_id: location.network_id, + posture_data, + }), + }); + + if (!response.ok) { + let message = 'Failed to start MFA'; + try { + const data = (await response.json()) as MfaStartErrorResponse; + message = data.error ?? message; + } catch { + // Keep the response status even if the proxy sends a malformed error body. + } + throw new MfaStartError(message, response.status); + } + + return { + response: (await response.json()) as MfaStartResponse, + headers, + }; + } catch (err) { + if (err instanceof MfaStartError) { + throw err; + } + throw new MfaStartError('Failed to reach server'); + } +}; diff --git a/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx b/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx index 19a583b85..a430f3239 100644 --- a/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx +++ b/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx @@ -3,17 +3,29 @@ import { useMutation } from '@tanstack/react-query'; import clsx from 'clsx'; import { api } from '../../../../rust-api/api'; import { LocationMfaMode } from '../../../../rust-api/types'; +import { parseConnectError } from '../../api/connectError'; import { useLocationCardContext } from '../../context/context'; import { LocationCardViews } from '../../context/types'; export const ConnectButton = () => { - const { location, setView, startMfa } = useLocationCardContext(); + const { location, setPostureError, setView, startMfa } = useLocationCardContext(); const { mutate: connect } = useMutation({ mutationFn: api.connect, onSuccess: () => { setView(LocationCardViews.Connected); }, + onError: (err) => { + const connectError = parseConnectError(err); + + if ( + location.posture_check_required && + connectError?.kind === 'postureCheckFailed' + ) { + setPostureError(connectError.message); + setView(LocationCardViews.PostureCheckFail); + } + }, meta: { invalidate: ['locations'], }, diff --git a/new-ui/src/shared/components/LocationCard/context/context.tsx b/new-ui/src/shared/components/LocationCard/context/context.tsx index 00005f970..155934bd1 100644 --- a/new-ui/src/shared/components/LocationCard/context/context.tsx +++ b/new-ui/src/shared/components/LocationCard/context/context.tsx @@ -8,7 +8,9 @@ interface LocationCardContextValue { instance: InstanceInfo; currentView: LocationCardViewsValue; previousView: LocationCardViewsValue | null; + postureError: string | null; setView: (view: LocationCardViewsValue) => void; + setPostureError: (error: string | null) => void; startMfa: () => void; localMfaMethod: MfaMethodValue; setLocalMfaMethod: (method: MfaMethodValue) => void; @@ -36,6 +38,7 @@ export const LocationCardProvider = ({ children, }: LocationCardProviderProps) => { const [previousView, setPreviousView] = useState(null); + const [postureError, setPostureError] = useState(null); const [currentView, setCurrentView] = useState( location.active ? LocationCardViews.Connected : LocationCardViews.Default, ); @@ -73,7 +76,9 @@ export const LocationCardProvider = ({ value={{ currentView, previousView, + postureError, setView, + setPostureError, location, instance, startMfa, diff --git a/new-ui/src/shared/components/LocationCard/hooks/handleMfaStartError.ts b/new-ui/src/shared/components/LocationCard/hooks/handleMfaStartError.ts new file mode 100644 index 000000000..fbc929dbf --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/hooks/handleMfaStartError.ts @@ -0,0 +1,26 @@ +import type { LocationInfo } from '../../../rust-api/types'; +import { shouldShowPostureError } from '../api/startClientMfaSession'; +import { LocationCardViews, type LocationCardViewsValue } from '../context/types'; + +type HandleMfaStartErrorParams = { + err: unknown; + location: LocationInfo; + setPostureError: (error: string | null) => void; + setView: (view: LocationCardViewsValue) => void; +}; + +/** Handles MFA start posture failures and reports whether the error was consumed. */ +export const handleMfaStartError = ({ + err, + location, + setPostureError, + setView, +}: HandleMfaStartErrorParams): boolean => { + if (!shouldShowPostureError(err, location)) { + return false; + } + + setPostureError(err.message); + setView(LocationCardViews.PostureCheckFail); + return true; +}; diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts index 60a2e730f..67c52e72d 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts @@ -3,20 +3,16 @@ import { fetch } from '@tauri-apps/plugin-http'; import { error } from '@tauri-apps/plugin-log'; import { useCallback, useEffect, useRef, useState } from 'react'; import { api } from '../../../rust-api/api'; -import { - getInstancesQueryOptions, - getPlatformHeaderQueryOptions, -} from '../../../rust-api/query'; +import { getInstancesQueryOptions } from '../../../rust-api/query'; import type { EdgeRequestHeaders } from '../../../rust-api/types'; +import { + CLIENT_MFA_ENDPOINT, + type MfaStartMethod, + startClientMfaSession, +} from '../api/startClientMfaSession'; import { useLocationCardContext } from '../context/context'; import { LocationCardViews } from '../context/types'; - -const MFA_ENDPOINT = 'api/v1/client-mfa'; - -type MfaStartResponse = { - token: string; - challenge?: string; -}; +import { handleMfaStartError } from './handleMfaStartError'; type MfaFinishResponse = { preshared_key: string; @@ -26,8 +22,10 @@ type MfaErrorResponse = { error: string; }; -export const useMfaConnect = (method: 0 | 1) => { - const { location, setView } = useLocationCardContext(); +type CodeMfaStartMethod = Extract; + +export const useMfaConnect = (method: CodeMfaStartMethod) => { + const { location, setPostureError, setView } = useLocationCardContext(); const [token, setToken] = useState(null); const [isStarting, setIsStarting] = useState(false); @@ -37,7 +35,6 @@ export const useMfaConnect = (method: 0 | 1) => { const [requestHeaders, setRequestHeaders] = useState(null); const { data: instances } = useQuery(getInstancesQueryOptions); - const { data: platformHeader } = useQuery(getPlatformHeaderQueryOptions); const instance = instances?.find((i) => i.id === location.instance_id); @@ -52,59 +49,39 @@ export const useMfaConnect = (method: 0 | 1) => { }, }); - // Fire the /start request exactly once when instance + platformHeader are ready. + // Fire the /start request exactly once when instance data is ready. const startCalled = useRef(false); // biome-ignore lint/correctness/useExhaustiveDependencies: intentional one-shot trigger via startCalled ref useEffect(() => { - if (!instance || !platformHeader || startCalled.current) return; + if (!instance || startCalled.current) return; startCalled.current = true; setIsStarting(true); (async () => { - let headers: EdgeRequestHeaders; - try { - headers = await api.getEdgeRequestHeaders(); - setRequestHeaders(headers); - } catch { - setStartError('Failed to load request headers'); - setIsStarting(false); - return; - } - try { - const res = await fetch(`${instance.proxy_url}${MFA_ENDPOINT}/start`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - ...headers, - }, - body: JSON.stringify({ - method, - pubkey: instance.pubkey, - location_id: location.network_id, - }), + const { response, headers } = await startClientMfaSession({ + instance, + location, + method, }); - - if (res.ok) { - const data = (await res.json()) as MfaStartResponse; - setToken(data.token); - } else { - const data = (await res.json()) as MfaErrorResponse; - setStartError(data.error ?? 'Failed to start MFA'); + setRequestHeaders(headers); + setToken(response.token); + } catch (err) { + if (handleMfaStartError({ err, location, setPostureError, setView })) { + return; } - } catch { - setStartError('Failed to reach server'); + setStartError(err instanceof Error ? err.message : 'Failed to start MFA'); } finally { setIsStarting(false); } })(); - }, [instance, platformHeader]); + }, [instance]); const verifyCode = useCallback( async (code: string) => { - if (!token || !instance || !platformHeader || !requestHeaders) return; + if (!token || !instance || !requestHeaders) return; setIsVerifying(true); setVerifyError(null); @@ -112,7 +89,7 @@ export const useMfaConnect = (method: 0 | 1) => { const body = JSON.stringify({ token, code }); try { - const res = await fetch(`${instance.proxy_url}${MFA_ENDPOINT}/finish`, { + const res = await fetch(`${instance.proxy_url}${CLIENT_MFA_ENDPOINT}/finish`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -148,7 +125,7 @@ export const useMfaConnect = (method: 0 | 1) => { setIsVerifying(false); } }, - [token, instance, platformHeader, requestHeaders, location, connectMutate, setView], + [token, instance, requestHeaders, location, connectMutate, setView], ); return { token, isStarting, startError, verifyCode, isVerifying, verifyError }; diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts index 5923f6311..3d4c1c4cd 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts @@ -1,22 +1,16 @@ import { encode } from '@stablelib/base64'; import { useMutation } from '@tanstack/react-query'; -import { fetch } from '@tauri-apps/plugin-http'; import { error } from '@tauri-apps/plugin-log'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { api } from '../../../rust-api/api'; +import { + CLIENT_MFA_ENDPOINT, + MfaStartMethod, + startClientMfaSession, +} from '../api/startClientMfaSession'; import { useLocationCardContext } from '../context/context'; import { LocationCardViews } from '../context/types'; - -const MFA_ENDPOINT = 'api/v1/client-mfa'; - -type MfaStartResponse = { - token: string; - challenge: string; -}; - -type MfaErrorResponse = { - error: string; -}; +import { handleMfaStartError } from './handleMfaStartError'; type TokenData = { token: string; @@ -24,7 +18,7 @@ type TokenData = { }; export const useMfaMobileConnect = () => { - const { location, instance, setView } = useLocationCardContext(); + const { location, instance, setPostureError, setView } = useLocationCardContext(); const [isStarting, setIsStarting] = useState(false); const [startError, setStartError] = useState(null); @@ -55,7 +49,7 @@ export const useMfaMobileConnect = () => { .replace( /^https:/, 'wss:', - )}${MFA_ENDPOINT}/remote?token=${encodeURIComponent(tokenData.token)}`; + )}${CLIENT_MFA_ENDPOINT}/remote?token=${encodeURIComponent(tokenData.token)}`; expectedCloseRef.current = false; const ws = new WebSocket(wsUrl); @@ -144,41 +138,30 @@ export const useMfaMobileConnect = () => { // Clear previous token → triggers WS cleanup via effect setTokenData(null); - let headers: Record; try { - headers = await api.getEdgeRequestHeaders(); - } catch { - setStartError('Failed to load request headers'); - setIsStarting(false); - return; - } - - try { - const res = await fetch(`${instance.proxy_url}${MFA_ENDPOINT}/start`, { - method: 'POST', - headers: { 'Content-Type': 'application/json', ...headers }, - body: JSON.stringify({ - method: 4, - pubkey: instance.pubkey, - location_id: location.network_id, - }), + const { response } = await startClientMfaSession({ + instance, + location, + method: MfaStartMethod.MobileApprove, }); - - if (res.ok) { - const data = (await res.json()) as MfaStartResponse; - setTokenData({ token: data.token, challenge: data.challenge }); - } else { - const data = (await res.json()) as MfaErrorResponse; - setStartError(data.error ?? 'Failed to start mobile authentication'); - error(`Mobile MFA start failed for location ${location.id}: ${data.error}`); + if (!response.challenge) { + setStartError('Unsupported response from proxy'); + return; } + + setTokenData({ token: response.token, challenge: response.challenge }); } catch (e) { - setStartError('Failed to reach server'); + if (handleMfaStartError({ err: e, location, setPostureError, setView })) { + return; + } + setStartError( + e instanceof Error ? e.message : 'Failed to start mobile authentication', + ); error(`Mobile MFA start network error for location ${location.id}: ${e}`); } finally { setIsStarting(false); } - }, [instance, location]); + }, [instance, location, setPostureError, setView]); const reset = useCallback(() => { if (wsRef.current) { diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts index 8b6e8a355..938b6bb65 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts @@ -4,19 +4,23 @@ import { error } from '@tauri-apps/plugin-log'; import { useCallback, useEffect, useRef, useState } from 'react'; import { api } from '../../../rust-api/api'; import { getInstancesQueryOptions } from '../../../rust-api/query'; +import { + CLIENT_MFA_ENDPOINT, + MfaStartMethod, + startClientMfaSession, +} from '../api/startClientMfaSession'; import { useLocationCardContext } from '../context/context'; import { LocationCardViews } from '../context/types'; +import { handleMfaStartError } from './handleMfaStartError'; -const MFA_ENDPOINT = 'api/v1/client-mfa'; const POLL_INTERVAL_MS = 5_000; const POLL_TIMEOUT_MS = 5 * 60 * 1_000; // 5 minutes -type MfaStartResponse = { token: string }; type MfaFinishResponse = { preshared_key: string }; type MfaErrorResponse = { error: string }; export const useMfaOidcConnect = () => { - const { location, setView } = useLocationCardContext(); + const { location, setPostureError, setView } = useLocationCardContext(); const [isStarting, setIsStarting] = useState(false); const [startError, setStartError] = useState(null); @@ -65,7 +69,7 @@ export const useMfaOidcConnect = () => { const poll = async () => { try { - const res = await fetch(`${proxyUrl}${MFA_ENDPOINT}/finish`, { + const res = await fetch(`${proxyUrl}${CLIENT_MFA_ENDPOINT}/finish`, { method: 'POST', headers: { 'Content-Type': 'application/json', ...headers }, body: JSON.stringify({ token }), @@ -128,42 +132,26 @@ export const useMfaOidcConnect = () => { setPollError(null); stopPolling(); - let headers: Record; try { - headers = await api.getEdgeRequestHeaders(); - } catch { - setStartError('Failed to load request headers'); - setIsStarting(false); - return; - } - - try { - const res = await fetch(`${instance.proxy_url}${MFA_ENDPOINT}/start`, { - method: 'POST', - headers: { 'Content-Type': 'application/json', ...headers }, - body: JSON.stringify({ - method: 2, - pubkey: instance.pubkey, - location_id: location.network_id, - }), + const { response, headers } = await startClientMfaSession({ + instance, + location, + method: MfaStartMethod.Oidc, }); - - if (res.ok) { - const data = (await res.json()) as MfaStartResponse; - await api.openLink(`${instance.proxy_url}openid/mfa?token=${data.token}`); - startPolling(data.token, instance.proxy_url, headers); - } else { - const data = (await res.json()) as MfaErrorResponse; - setStartError(data.error ?? 'Failed to start OIDC authentication'); - error(`OIDC MFA start failed for location ${location.id}: ${data.error}`); - } + await api.openLink(`${instance.proxy_url}openid/mfa?token=${response.token}`); + startPolling(response.token, instance.proxy_url, headers); } catch (e) { - setStartError('Failed to reach server'); + if (handleMfaStartError({ err: e, location, setPostureError, setView })) { + return; + } + setStartError( + e instanceof Error ? e.message : 'Failed to start OIDC authentication', + ); error(`OIDC MFA start network error for location ${location.id}: ${e}`); } finally { setIsStarting(false); } - }, [instance, location, startPolling, stopPolling]); + }, [instance, location, setPostureError, setView, startPolling, stopPolling]); return { start, isStarting, startError, isPolling, pollError }; }; diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx index 9b908c776..633578d8c 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx @@ -10,6 +10,7 @@ import { IconKind } from '../../../Icon'; import { IconButton } from '../../../IconButton/IconButton'; import { IconButtonVariant } from '../../../IconButton/types'; import { SizedBox } from '../../../SizedBox/SizedBox'; +import { MfaStartMethod } from '../../api/startClientMfaSession'; import { LocationViewHeader } from '../../components/LocationViewHeader/LocationViewHeader'; import { useLocationCardContext } from '../../context/context'; import { LocationCardViews } from '../../context/types'; @@ -17,8 +18,9 @@ import { useMfaConnect } from '../../hooks/useMfaConnect'; export const LocationCardMfaEmailView = () => { const { setView } = useLocationCardContext(); - const { verifyCode, isVerifying, verifyError, isStarting, startError } = - useMfaConnect(1); + const { verifyCode, isVerifying, verifyError, isStarting, startError } = useMfaConnect( + MfaStartMethod.Email, + ); const [emailCode, setEmailCode] = useState(null); const [error, setError] = useState(null); diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx index b0e09244f..34900b047 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx @@ -17,8 +17,8 @@ import { useMfaMobileConnect } from '../../hooks/useMfaMobileConnect'; type Screen = 'loading' | 'qr' | 'error'; export const LocationCardMfaMobileView = () => { - const { setView } = useLocationCardContext(); - const { start, startError, qrValue, connectionError, reset } = useMfaMobileConnect(); + const { setView, setPostureError } = useLocationCardContext(); + const { start, startError, qrValue, connectionError } = useMfaMobileConnect(); const [screen, setScreen] = useState('loading'); const startedRef = useRef(false); @@ -37,10 +37,9 @@ export const LocationCardMfaMobileView = () => { } }, [startError, connectionError, qrValue]); - const retry = () => { - reset(); - setScreen('loading'); - void start(); + const backToLocation = () => { + setPostureError(null); + setView(LocationCardViews.Default); }; const errorMessage = startError ?? connectionError; @@ -69,7 +68,11 @@ export const LocationCardMfaMobileView = () => { />
{screen === 'error' && ( -
diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaOidcView/LocationCardMfaOidcView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaOidcView/LocationCardMfaOidcView.tsx index 6f7aed4a1..8e3fe4eb8 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaOidcView/LocationCardMfaOidcView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaOidcView/LocationCardMfaOidcView.tsx @@ -16,7 +16,7 @@ import { useMfaOidcConnect } from '../../hooks/useMfaOidcConnect'; type Screen = 'idle' | 'polling' | 'error'; export const LocationCardMfaOidcView = () => { - const { setView } = useLocationCardContext(); + const { setView, setPostureError } = useLocationCardContext(); const { start, isStarting, startError, isPolling, pollError } = useMfaOidcConnect(); const [screen, setScreen] = useState('idle'); @@ -35,8 +35,9 @@ export const LocationCardMfaOidcView = () => { const errorMessage = startError ?? pollError; - const resetToIdle = () => { - setScreen('idle'); + const backToLocation = () => { + setPostureError(null); + setView(LocationCardViews.Default); }; return ( @@ -76,7 +77,7 @@ export const LocationCardMfaOidcView = () => {
diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx index fc64eec15..4bb2ff29d 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx @@ -10,6 +10,7 @@ import { IconKind } from '../../../Icon'; import { IconButton } from '../../../IconButton/IconButton'; import { IconButtonVariant } from '../../../IconButton/types'; import { SizedBox } from '../../../SizedBox/SizedBox'; +import { MfaStartMethod } from '../../api/startClientMfaSession'; import { LocationViewHeader } from '../../components/LocationViewHeader/LocationViewHeader'; import { useLocationCardContext } from '../../context/context'; import { LocationCardViews } from '../../context/types'; @@ -17,8 +18,9 @@ import { useMfaConnect } from '../../hooks/useMfaConnect'; export const LocationCardMfaTotpView = () => { const { setView } = useLocationCardContext(); - const { verifyCode, isVerifying, verifyError, isStarting, startError } = - useMfaConnect(0); + const { verifyCode, isVerifying, verifyError, isStarting, startError } = useMfaConnect( + MfaStartMethod.Totp, + ); const [totpCode, setTotpCode] = useState(null); const [error, setError] = useState(null); diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/LocationCardPostureCheckFailView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/LocationCardPostureCheckFailView.tsx new file mode 100644 index 000000000..a2cf7c52e --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/LocationCardPostureCheckFailView.tsx @@ -0,0 +1,38 @@ +import './style.scss'; +import { ThemeSpacing } from '../../../../types'; +import { Button } from '../../../Button/Button'; +import { ButtonVariant } from '../../../Button/types'; +import { Divider } from '../../../Divider/Divider'; +import { Icon, IconKind } from '../../../Icon'; +import { SizedBox } from '../../../SizedBox/SizedBox'; +import { LocationViewHeader } from '../../components/LocationViewHeader/LocationViewHeader'; +import { useLocationCardContext } from '../../context/context'; +import { LocationCardViews } from '../../context/types'; + +export const LocationCardPostureCheckFailView = () => { + const { postureError, setPostureError, setView } = useLocationCardContext(); + + const backToLocation = () => { + setPostureError(null); + setView(LocationCardViews.Default); + }; + + return ( +
+ + + + +

+ {postureError ?? 'Your device did not pass posture check.'} +

+
+ +
+ ); +}; diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/style.scss b/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/style.scss new file mode 100644 index 000000000..c42ff8937 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/style.scss @@ -0,0 +1,31 @@ +.location-card-posture-check-fail-view { + display: flex; + flex-direction: column; + align-items: center; + + .posture-warning-icon { + display: block; + + svg path { + fill: var(--fg-white-70); + } + } + + .location-card-view-header { + align-items: center; + text-align: center; + + > .title { + color: var(--fg-white-70); + } + + p.error { + color: var(--fg-white-70); + } + } + + .btn-wrap, + .btn { + width: 100%; + } +} diff --git a/new-ui/src/shared/rust-api/api.ts b/new-ui/src/shared/rust-api/api.ts index 282afd73d..f470c497e 100644 --- a/new-ui/src/shared/rust-api/api.ts +++ b/new-ui/src/shared/rust-api/api.ts @@ -129,6 +129,8 @@ const getEdgeRequestHeaders = async (): Promise => { }; }; +const getPostureData = async (): Promise => invoke(TauriCommand.GetPostureData); + const swapToOldUi = async () => invoke(TauriCommand.SwapToOldUi); const closeTrayWindow = async () => invoke(TauriCommand.CloseTrayWindow); @@ -172,6 +174,7 @@ export const api = { stopGlobalLogWatcher, getAllActiveConnections, disconnectLocations, + getPostureData, // Window swapToOldUi, closeTrayWindow, diff --git a/new-ui/src/shared/rust-api/types.ts b/new-ui/src/shared/rust-api/types.ts index 4f1610382..8a343444b 100644 --- a/new-ui/src/shared/rust-api/types.ts +++ b/new-ui/src/shared/rust-api/types.ts @@ -103,6 +103,7 @@ export const TauriCommand = { StopGlobalLogWatcher: 'stop_global_logwatcher', AllActiveConnections: 'all_active_connections', DisconnectLocations: 'disconnect_locations', + GetPostureData: 'get_posture_data', //Window SwapToOldUi: 'swap_to_old_ui', CloseTrayWindow: 'close_tray_window', @@ -195,6 +196,7 @@ export type LocationInfo = { network_id: number; location_mfa_mode: LocationMfaMode; mfa_method?: MfaMethodValue; + posture_check_required: boolean; }; export type LocationStats = { diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 4b9893116..adabc56b5 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -61,6 +61,30 @@ use crate::{ utils::execute_command, }; +#[derive(Debug, Serialize, thiserror::Error)] +#[serde(tag = "kind", content = "message", rename_all = "camelCase")] +pub enum ConnectError { + #[error("Posture check failed: {0}")] + PostureCheckFailed(String), + #[error("{0}")] + Other(String), +} + +impl From for ConnectError { + fn from(error: Error) -> Self { + match error { + Error::PostureCheckFailed(message) => Self::PostureCheckFailed(message), + error => Self::Other(error.to_string()), + } + } +} + +impl From for ConnectError { + fn from(error: sqlx::Error) -> Self { + Error::from(error).into() + } +} + /// Open new WireGuard connection. #[tauri::command(async)] pub async fn connect( @@ -68,7 +92,7 @@ pub async fn connect( connection_type: ConnectionType, preshared_key: Option, handle: AppHandle, -) -> Result<(), Error> { +) -> Result<(), ConnectError> { debug!("Received a command to connect to a {connection_type} with ID {location_id}"); if connection_type == ConnectionType::Location { if let Some(location) = Location::find_by_id(&*DB_POOL, location_id).await? { @@ -89,7 +113,7 @@ pub async fn connect( "Location with ID {location_id} not found in the database, aborting connection \ attempt" ); - return Err(Error::NotFound); + return Err(Error::NotFound.into()); } } else if let Some(tunnel) = Tunnel::find_by_id(&*DB_POOL, location_id).await? { debug!( @@ -100,7 +124,7 @@ pub async fn connect( info!("Successfully connected to tunnel {tunnel}"); } else { error!("Tunnel {location_id} not found"); - return Err(Error::NotFound); + return Err(Error::NotFound.into()); } // Update tray icon to reflect connection state. diff --git a/src/pages/client/clientAPI/clientApi.ts b/src/pages/client/clientAPI/clientApi.ts index 8d0aec4a0..ac14da39a 100644 --- a/src/pages/client/clientAPI/clientApi.ts +++ b/src/pages/client/clientAPI/clientApi.ts @@ -27,6 +27,20 @@ import type { UpdateInstanceRequest, } from './types'; +/** Extracts a human-readable message from Tauri command rejections. */ +const getInvokeErrorMessage = (command: TauriCommandKey, e: unknown): string => { + if ( + typeof e === 'object' && + e !== null && + 'message' in e && + typeof e.message === 'string' + ) { + return e.message; + } + + return `Invoking "${command}" failed due to unknown error: ${JSON.stringify(e)}`; +}; + // Streamlines logging for invokes async function invokeWrapper( command: TauriCommandKey, @@ -43,9 +57,7 @@ async function invokeWrapper( return res; // TODO: handle more error types ? } catch (e) { - let message: string = `Invoking "${command}" failed due to unknown error: ${JSON.stringify( - e, - )}`; + let message = getInvokeErrorMessage(command, e); trace(message); if (e instanceof TimeoutError) { message = `Invoking "${command}" timed out after ${timeout / 1000} seconds`; diff --git a/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal.tsx b/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal.tsx index 9d7a9181b..c13d492ef 100644 --- a/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal.tsx +++ b/src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal.tsx @@ -100,7 +100,7 @@ export const MFAModal = () => { } }, [location, resetAuthState]); - // selectedMethod: 0 = authenticator app, 1 = email, 2 = OpenID, 3 = MobileApprove + // selectedMethod: 0 = authenticator app, 1 = email, 2 = OpenID, 4 = MobileApprove const startMFA = useCallback( async (method: number) => { if (!location) return toaster.error(localLL.errors.locationNotSpecified()); From f26e6e8c1ea90d869cf243c0ae9e7ec71afec2a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Fri, 22 May 2026 12:37:18 +0200 Subject: [PATCH 019/155] rounded corners for tray window on macos (#895) * rounded corners for tray window on macos * Update ConnectionsWatcher.tsx --- .../ConnectionWatcher/ConnectionsWatcher.tsx | 1 + src-tauri/Cargo.lock | 69 ++++++++++++++++++- src-tauri/Cargo.toml | 1 + src-tauri/src/tray.rs | 64 +++++++++-------- src-tauri/src/window_manager/macos.rs | 35 ++++++++++ src-tauri/src/window_manager/mod.rs | 11 ++- 6 files changed, 151 insertions(+), 30 deletions(-) diff --git a/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx b/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx index 6e2afcf2e..139ac5a84 100644 --- a/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx +++ b/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx @@ -60,6 +60,7 @@ export const ConnectionWatcher = () => { const hover = useHover(context, { handleClose: safePolygon(), + enabled: connected, }); const dismiss = useDismiss(context, { diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index dff0dfb0e..ac7ecedc5 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -642,6 +642,12 @@ dependencies = [ "digest", ] +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.10.4" @@ -1028,6 +1034,35 @@ dependencies = [ "cc", ] +[[package]] +name = "cocoa" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad36507aeb7e16159dfe68db81ccc27571c3ccd4b76fb2fb72fc59e7a4b1b64c" +dependencies = [ + "bitflags 2.11.1", + "block", + "cocoa-foundation", + "core-foundation 0.10.1", + "core-graphics 0.24.0", + "foreign-types 0.5.0", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d" +dependencies = [ + "bitflags 2.11.1", + "block", + "core-foundation 0.10.1", + "core-graphics-types", + "objc", +] + [[package]] name = "colorchoice" version = "1.0.5" @@ -1141,6 +1176,19 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core-graphics" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" +dependencies = [ + "bitflags 2.11.1", + "core-foundation 0.10.1", + "core-graphics-types", + "foreign-types 0.5.0", + "libc", +] + [[package]] name = "core-graphics" version = "0.25.0" @@ -1415,6 +1463,7 @@ dependencies = [ "block2 0.6.2", "chrono", "clap", + "cocoa", "common", "dark-light", "defguard_wireguard_rs", @@ -3481,6 +3530,15 @@ dependencies = [ "time", ] +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "markup5ever" version = "0.38.0" @@ -3866,6 +3924,15 @@ dependencies = [ "libc", ] +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + [[package]] name = "objc-sys" version = "0.3.5" @@ -6291,7 +6358,7 @@ dependencies = [ "bitflags 2.11.1", "block2 0.6.2", "core-foundation 0.10.1", - "core-graphics", + "core-graphics 0.25.0", "crossbeam-channel", "dbus", "dispatch2", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 4425dd8cb..d83d185cc 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -124,6 +124,7 @@ x25519-dalek = { version = "2", features = [ ] } [target.'cfg(target_os = "macos")'.dependencies] +cocoa = "0.26" block2 = "0.6" objc2 = "0.6" objc2-foundation = "0.3" diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index b4efd3534..d2279e532 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -144,38 +144,48 @@ pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { TrayIconBuilder::with_id(TRAY_ICON_ID) .menu(&tray_menu) - .show_menu_on_left_click(cfg!(target_os = "macos")) + .show_menu_on_left_click(false) .on_tray_icon_event(|icon, event| { store_tray_click_position(icon.app_handle(), &event); - if let TrayIconEvent::Click { - button: MouseButton::Left, - button_state: MouseButtonState::Up, - .. - } = event - { - let app = icon.app_handle(); - let any_visible = [NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID].iter().any(|id| { - app.get_webview_window(id) - .and_then(|w| w.is_visible().ok()) - .unwrap_or(false) - }); - if any_visible { - hide_visible_windows(app); - } else { - #[cfg(not(target_os = "linux"))] - { - let has_locations = tauri::async_runtime::block_on( - crate::window_manager::has_non_service_locations(), - ); - if has_locations { - show_new_ui_window_near_tray(app); - } else { - let _ = WindowManager::open_full_view(app); + match event { + #[cfg(target_os = "macos")] + TrayIconEvent::Click { + button: MouseButton::Right, + button_state: MouseButtonState::Up, + .. + } => { + let _ = icon.show_menu(); + } + TrayIconEvent::Click { + button: MouseButton::Left, + button_state: MouseButtonState::Up, + .. + } => { + let app = icon.app_handle(); + let any_visible = [NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID].iter().any(|id| { + app.get_webview_window(id) + .and_then(|w| w.is_visible().ok()) + .unwrap_or(false) + }); + if any_visible { + hide_visible_windows(app); + } else { + #[cfg(not(target_os = "linux"))] + { + let has_locations = tauri::async_runtime::block_on( + crate::window_manager::has_non_service_locations(), + ); + if has_locations { + show_new_ui_window_near_tray(app); + } else { + let _ = WindowManager::open_full_view(app); + } } + #[cfg(target_os = "linux")] + show_new_ui_window_near_tray(app); } - #[cfg(target_os = "linux")] - show_new_ui_window_near_tray(app); } + _ => {} } }) .on_menu_event(handle_tray_menu_event) diff --git a/src-tauri/src/window_manager/macos.rs b/src-tauri/src/window_manager/macos.rs index d93964dce..10359b9dc 100644 --- a/src-tauri/src/window_manager/macos.rs +++ b/src-tauri/src/window_manager/macos.rs @@ -1,8 +1,43 @@ use tauri::{AppHandle, LogicalPosition, Manager, Monitor, PhysicalSize, Position, WebviewWindow}; +#[cfg(target_os = "macos")] +use tauri::Runtime; + use crate::appstate::AppState; use crate::window_manager::{WindowManager, NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID}; +#[cfg(target_os = "macos")] +use cocoa::{ + appkit::{NSView, NSWindow, NSWindowStyleMask}, + base::id, +}; + +#[cfg(target_os = "macos")] +pub fn enable_rounded_corners(window: WebviewWindow) -> Result<(), String> { + window + .with_webview(move |webview| { + unsafe { + let ns_window = webview.ns_window() as id; + + let mut style_mask = ns_window.styleMask(); + + // Add necessary styles for rounded corners + style_mask |= NSWindowStyleMask::NSFullSizeContentViewWindowMask; + style_mask |= NSWindowStyleMask::NSTitledWindowMask; + style_mask |= NSWindowStyleMask::NSClosableWindowMask; + style_mask |= NSWindowStyleMask::NSMiniaturizableWindowMask; + style_mask |= NSWindowStyleMask::NSResizableWindowMask; + + ns_window.setStyleMask_(style_mask); + ns_window.setTitlebarAppearsTransparent_(cocoa::base::YES); + + let content_view = ns_window.contentView(); + content_view.setWantsLayer(cocoa::base::YES); + } + }) + .map_err(|e| e.to_string()) +} + /// Try to get monitor at the given position, with a fall back to primary monitor, and then to the /// first one on the list of available monitors. fn get_monitor_for_position(app: &AppHandle, x: f64, y: f64) -> Option { diff --git a/src-tauri/src/window_manager/mod.rs b/src-tauri/src/window_manager/mod.rs index d821fd48c..b08ba8f81 100644 --- a/src-tauri/src/window_manager/mod.rs +++ b/src-tauri/src/window_manager/mod.rs @@ -42,7 +42,7 @@ pub struct WindowManager; impl WindowManager { pub fn build_tray_window(app: &AppHandle) -> tauri::Result { - WebviewWindowBuilder::new(app, NEW_UI_WINDOW_ID, new_ui_url()) + let window = WebviewWindowBuilder::new(app, NEW_UI_WINDOW_ID, new_ui_url()) .title("Defguard") .inner_size(NEW_UI_WIDTH, NEW_UI_HEIGHT) .resizable(false) @@ -50,7 +50,14 @@ impl WindowManager { .visible(false) .always_on_top(true) .skip_taskbar(true) - .build() + .build()?; + + #[cfg(target_os = "macos")] + if let Err(err) = macos::enable_rounded_corners(window.clone()) { + tracing::warn!("Failed to enable rounded corners on tray window: {err}"); + } + + Ok(window) } pub fn build_full_window(app: &AppHandle) -> tauri::Result { From 98f48b01b6e0e26ceb05e819de51914a6bd8c21e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Fri, 22 May 2026 12:52:13 +0200 Subject: [PATCH 020/155] remove the manual menu invoke on macos tray click --- src-tauri/src/tray.rs | 62 +++++++++++---------------- src-tauri/src/window_manager/macos.rs | 2 + 2 files changed, 28 insertions(+), 36 deletions(-) diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index d2279e532..4f16ab20f 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -147,45 +147,35 @@ pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { .show_menu_on_left_click(false) .on_tray_icon_event(|icon, event| { store_tray_click_position(icon.app_handle(), &event); - match event { - #[cfg(target_os = "macos")] - TrayIconEvent::Click { - button: MouseButton::Right, - button_state: MouseButtonState::Up, - .. - } => { - let _ = icon.show_menu(); - } - TrayIconEvent::Click { - button: MouseButton::Left, - button_state: MouseButtonState::Up, - .. - } => { - let app = icon.app_handle(); - let any_visible = [NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID].iter().any(|id| { - app.get_webview_window(id) - .and_then(|w| w.is_visible().ok()) - .unwrap_or(false) - }); - if any_visible { - hide_visible_windows(app); - } else { - #[cfg(not(target_os = "linux"))] - { - let has_locations = tauri::async_runtime::block_on( - crate::window_manager::has_non_service_locations(), - ); - if has_locations { - show_new_ui_window_near_tray(app); - } else { - let _ = WindowManager::open_full_view(app); - } + if let TrayIconEvent::Click { + button: MouseButton::Left, + button_state: MouseButtonState::Up, + .. + } = event + { + let app = icon.app_handle(); + let any_visible = [NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID].iter().any(|id| { + app.get_webview_window(id) + .and_then(|w| w.is_visible().ok()) + .unwrap_or(false) + }); + if any_visible { + hide_visible_windows(app); + } else { + #[cfg(not(target_os = "linux"))] + { + let has_locations = tauri::async_runtime::block_on( + crate::window_manager::has_non_service_locations(), + ); + if has_locations { + show_new_ui_window_near_tray(app); + } else { + let _ = WindowManager::open_full_view(app); } - #[cfg(target_os = "linux")] - show_new_ui_window_near_tray(app); } + #[cfg(target_os = "linux")] + show_main_window(app); } - _ => {} } }) .on_menu_event(handle_tray_menu_event) diff --git a/src-tauri/src/window_manager/macos.rs b/src-tauri/src/window_manager/macos.rs index 10359b9dc..00cba231f 100644 --- a/src-tauri/src/window_manager/macos.rs +++ b/src-tauri/src/window_manager/macos.rs @@ -1,3 +1,5 @@ +#![allow(deprecated)] + use tauri::{AppHandle, LogicalPosition, Manager, Monitor, PhysicalSize, Position, WebviewWindow}; #[cfg(target_os = "macos")] From cd1d1a856bd19ca22d70e3c4bf80729e6b9f8691 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 22 May 2026 13:08:28 +0200 Subject: [PATCH 021/155] Sync code with mobile client (#896) --- src-tauri/Cargo.lock | 4 +- swift/extension/VPNExtension/FileLogger.swift | 14 +++++ .../VPNExtension/PacketTunnelProvider.swift | 20 ++++++- .../Defguard/TunnelConfiguration.swift | 55 +++++++++++++++++++ 4 files changed, 89 insertions(+), 4 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index ac7ecedc5..570f2ec03 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -5639,9 +5639,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", diff --git a/swift/extension/VPNExtension/FileLogger.swift b/swift/extension/VPNExtension/FileLogger.swift index 556fba700..71d029726 100644 --- a/swift/extension/VPNExtension/FileLogger.swift +++ b/swift/extension/VPNExtension/FileLogger.swift @@ -24,7 +24,9 @@ final class Log { /// The category for this logger instance (usually class name), e.g. "PacketTunnelProvider" let category: String private let systemLogger: Logger +#if os(macOS) private let fileLogger = FileLogger.shared +#endif init(category: String) { self.category = category @@ -36,29 +38,40 @@ final class Log { func debug(_ message: String) { systemLogger.debug("\(message, privacy: .public)") +#if os(macOS) fileLogger.log(level: .debug, message: message, category: category) +#endif } func info(_ message: String) { systemLogger.info("\(message, privacy: .public)") +#if os(macOS) fileLogger.log(level: .info, message: message, category: category) +#endif } func warning(_ message: String) { systemLogger.warning("\(message, privacy: .public)") +#if os(macOS) fileLogger.log(level: .warning, message: message, category: category) +#endif } func error(_ message: String) { systemLogger.error("\(message, privacy: .public)") +#if os(macOS) fileLogger.log(level: .error, message: message, category: category) +#endif } func flush() { +#if os(macOS) fileLogger.flush() +#endif } } +#if os(macOS) /// A file-based logger that writes to an App Group shared container. /// This allows the main rust app to read logs from the network extension. /// Use the `Log` class instead of this directly for unified logging. @@ -235,3 +248,4 @@ final class FileLogger { return logFileURL?.path } } +#endif diff --git a/swift/extension/VPNExtension/PacketTunnelProvider.swift b/swift/extension/VPNExtension/PacketTunnelProvider.swift index 233ec53b7..d6aa56aed 100644 --- a/swift/extension/VPNExtension/PacketTunnelProvider.swift +++ b/swift/extension/VPNExtension/PacketTunnelProvider.swift @@ -20,13 +20,29 @@ class PacketTunnelProvider: NEPacketTunnelProvider { } guard let protocolConfig = self.protocolConfiguration as? NETunnelProviderProtocol, - let providerConfig = protocolConfig.providerConfiguration, - let tunnelConfig = try? TunnelConfiguration.from(dictionary: providerConfig) + let providerConfig = protocolConfig.providerConfiguration + else { + log.error("Failed to parse provider configuration") + completionHandler(WireGuardTunnelError.invalidTunnelConfiguration) + return + } + +#if os(macOS) + guard let tunnelConfig = try? TunnelConfiguration.from(dictionary: providerConfig) + else { + log.error("Failed to parse tunnel configuration") + completionHandler(WireGuardTunnelError.invalidTunnelConfiguration) + return + } +#else + guard let startData = try? TunnelStartData.from(dictionary: providerConfig) else { log.error("Failed to parse tunnel configuration") completionHandler(WireGuardTunnelError.invalidTunnelConfiguration) return } + let tunnelConfig = TunnelConfiguration(fromStartData: startData) +#endif let networkSettings = tunnelConfig.asNetworkSettings() self.setTunnelNetworkSettings(networkSettings) { error in diff --git a/swift/plugin/Sources/Defguard/TunnelConfiguration.swift b/swift/plugin/Sources/Defguard/TunnelConfiguration.swift index 93b56b3ea..ca4f76e7c 100644 --- a/swift/plugin/Sources/Defguard/TunnelConfiguration.swift +++ b/swift/plugin/Sources/Defguard/TunnelConfiguration.swift @@ -124,6 +124,61 @@ final class TunnelConfiguration: Codable { return (ipv4IncludedRoutes, ipv6IncludedRoutes) } +#if os(iOS) + /// Helper function allowing to parse comma-separated string of addresses. + private func parseAddresses(fromString string: String) -> [IpAddrMask] { + var addresses: [IpAddrMask] = [] + + for addr in string.split(separator: ",").map({ + String($0.trimmingCharacters(in: .whitespaces)) + }) { + if let addr_mask = IpAddrMask(fromString: addr) { + addresses.append(addr_mask) + } + } + + return addresses + } + + init(fromStartData startData: TunnelStartData) { + name = startData.locationName + privateKey = startData.privateKey + let peer = Peer(publicKey: startData.publicKey) + peers = [peer] + + addresses = self.parseAddresses(fromString: startData.address) + + // DNS settings + let dnsRecords = startData.dns?.split(separator: ",").map { + $0.trimmingCharacters(in: .whitespaces) + } ?? [] + if !dnsRecords.isEmpty { + for record in dnsRecords { + if IPv4Address(record) != nil || IPv6Address(record) != nil { + dns.append(record) + } else { + dnsSearch.append(record) + } + } + } + + // Peer settings + peer.preSharedKey = startData.presharedKey + peer.endpoint = Endpoint(from: startData.endpoint) + peer.persistentKeepAlive = UInt16(startData.keepalive) + peer.allowedIPs = + switch startData.traffic { + case .All: + [ + IpAddrMask(address: IPv4Address.any, cidr: 0), + IpAddrMask(address: IPv6Address.any, cidr: 0), + ] + case .Predefined: + self.parseAddresses(fromString: startData.allowedIps) + } + } +#endif + /// Client connection expects one peer, so check for that. func isValidForClientConnection() -> Bool { return peers.count == 1 From b5fa454d50aaf3b123317c9eca5e3ac6f3ce6fbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Fri, 22 May 2026 14:15:13 +0200 Subject: [PATCH 022/155] remove extra window decorations from macos tray window (#897) --- src-tauri/Cargo.lock | 1 + src-tauri/Cargo.toml | 1 + src-tauri/src/window_manager/macos.rs | 25 ++++++++++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 570f2ec03..087a3b831 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1473,6 +1473,7 @@ dependencies = [ "known-folders", "log", "nix", + "objc", "objc2 0.6.4", "objc2-foundation 0.3.2", "objc2-network-extension", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index d83d185cc..3a347acf5 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -129,6 +129,7 @@ block2 = "0.6" objc2 = "0.6" objc2-foundation = "0.3" objc2-network-extension = "0.3" +objc = "0.2" [target.'cfg(unix)'.dependencies] nix = { version = "0.31", features = ["user", "fs"] } diff --git a/src-tauri/src/window_manager/macos.rs b/src-tauri/src/window_manager/macos.rs index 00cba231f..c1cdd371e 100644 --- a/src-tauri/src/window_manager/macos.rs +++ b/src-tauri/src/window_manager/macos.rs @@ -10,10 +10,13 @@ use crate::window_manager::{WindowManager, NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID}; #[cfg(target_os = "macos")] use cocoa::{ - appkit::{NSView, NSWindow, NSWindowStyleMask}, + appkit::{NSView, NSWindow, NSWindowButton, NSWindowStyleMask, NSWindowTitleVisibility}, base::id, }; +#[cfg(target_os = "macos")] +use objc::{msg_send, sel, sel_impl}; + #[cfg(target_os = "macos")] pub fn enable_rounded_corners(window: WebviewWindow) -> Result<(), String> { window @@ -33,6 +36,26 @@ pub fn enable_rounded_corners(window: WebviewWindow) -> Result<() ns_window.setStyleMask_(style_mask); ns_window.setTitlebarAppearsTransparent_(cocoa::base::YES); + // Hide the window title + ns_window.setTitleVisibility_(NSWindowTitleVisibility::NSWindowTitleHidden); + + // Hide the standard window buttons (close, minimize, zoom) + let close_button = + ns_window.standardWindowButton_(NSWindowButton::NSWindowCloseButton); + if !close_button.is_null() { + let _: () = msg_send![close_button, setHidden: cocoa::base::YES]; + } + let miniaturize_button = + ns_window.standardWindowButton_(NSWindowButton::NSWindowMiniaturizeButton); + if !miniaturize_button.is_null() { + let _: () = msg_send![miniaturize_button, setHidden: cocoa::base::YES]; + } + let zoom_button = + ns_window.standardWindowButton_(NSWindowButton::NSWindowZoomButton); + if !zoom_button.is_null() { + let _: () = msg_send![zoom_button, setHidden: cocoa::base::YES]; + } + let content_view = ns_window.contentView(); content_view.setWantsLayer(cocoa::base::YES); } From a3a83336b51cd8eded815e24764e216182a12dd9 Mon Sep 17 00:00:00 2001 From: Jacek Chmielewski Date: Fri, 22 May 2026 15:03:52 +0200 Subject: [PATCH 023/155] Fix posture checks on windows (#898) * make sure all posture checks on windows are prepared by the daemon * fix os_version reporting on windows * fix windows os_version - take 2 --- src-tauri/src/commands.rs | 20 ++------------------ src-tauri/src/enterprise/inspector/mod.rs | 13 ++++++++++++- src-tauri/src/enterprise/posture.rs | 23 ++++++++++++++++++++++- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index adabc56b5..bdf0df357 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -30,7 +30,7 @@ use crate::{ DB_POOL, }, enterprise::{ - periodic::config::poll_instance, posture::authorize_posture_session, + self, periodic::config::poll_instance, posture::authorize_posture_session, provisioning::ProvisioningConfig, }, error::Error, @@ -1577,25 +1577,9 @@ pub fn get_platform_header() -> String { } #[tauri::command(async)] -#[cfg(not(windows))] pub async fn get_posture_data() -> Result { debug!("Received a command to prepare posture report"); - Ok(DevicePostureData::new()) -} - -#[tauri::command(async)] -#[cfg(windows)] -pub async fn get_posture_data() -> Result { - debug!("Received a command to prepare posture report"); - DAEMON_CLIENT - .clone() - .get_posture_data(tonic::Request::new(())) - .await - .map(|response| response.into_inner()) - .map_err(|err| { - error!("Failed to get posture data from the daemon: {err}"); - Error::InternalError(format!("Failed to get posture data from the daemon: {err}")) - }) + enterprise::posture::get_posture_data().await } #[derive(Debug, Serialize)] diff --git a/src-tauri/src/enterprise/inspector/mod.rs b/src-tauri/src/enterprise/inspector/mod.rs index 143da5f32..2a7484cef 100644 --- a/src-tauri/src/enterprise/inspector/mod.rs +++ b/src-tauri/src/enterprise/inspector/mod.rs @@ -39,7 +39,18 @@ fn os_name() -> Result { /// Returns the operating system version. fn os_version() -> Result { - System::os_version().ok_or(UnavailableReason::DetectionFailed) + #[cfg(windows)] + { + // Windows can report versions like "11 (26200)"; core expects a parseable major. + System::os_version() + .and_then(|version| version.split_whitespace().next().map(ToString::to_string)) + .ok_or(UnavailableReason::DetectionFailed) + } + + #[cfg(not(windows))] + { + System::os_version().ok_or(UnavailableReason::DetectionFailed) + } } /// Returns the Linux kernel version. diff --git a/src-tauri/src/enterprise/posture.rs b/src-tauri/src/enterprise/posture.rs index aa6472a64..f2641a1ea 100644 --- a/src-tauri/src/enterprise/posture.rs +++ b/src-tauri/src/enterprise/posture.rs @@ -1,6 +1,8 @@ use reqwest::StatusCode; use serde::Deserialize; +#[cfg(windows)] +use crate::service::client::DAEMON_CLIENT; use crate::{ database::{ models::{instance::Instance, location::Location, wireguard_keys::WireguardKeys, Id}, @@ -30,7 +32,7 @@ pub async fn authorize_posture_session(location: &Location) -> Result) -> Result Result { + #[cfg(windows)] + { + DAEMON_CLIENT + .clone() + .get_posture_data(tonic::Request::new(())) + .await + .map(|response| response.into_inner()) + .map_err(|err| { + error!("Failed to get posture data from the daemon: {err}"); + Error::InternalError(format!("Failed to get posture data from the daemon: {err}")) + }) + } + #[cfg(not(windows))] + { + Ok(DevicePostureData::new()) + } +} From 174f4093cef9c35319a573ceb82115da44cafbdc Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 25 May 2026 11:08:23 +0200 Subject: [PATCH 024/155] Fix macos new UI window (#900) --- new-ui/package.json | 18 +- new-ui/pnpm-lock.yaml | 511 +++++++++----------- package.json | 39 +- pnpm-lock.yaml | 591 ++++++++++++------------ pnpm-workspace.yaml | 1 + src-tauri/Cargo.lock | 132 ++---- src-tauri/Cargo.toml | 3 +- src-tauri/src/bin/defguard-client.rs | 2 + src-tauri/src/window_manager/macos.rs | 149 ++---- src-tauri/src/window_manager/mod.rs | 123 +++-- src-tauri/src/window_manager/windows.rs | 10 +- 11 files changed, 730 insertions(+), 849 deletions(-) diff --git a/new-ui/package.json b/new-ui/package.json index 5e3c05162..db7cc879d 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -17,9 +17,9 @@ "@floating-ui/react": "^0.27.19", "@stablelib/base64": "^2.0.1", "@tanstack/react-form": "^1.32.0", - "@tanstack/react-query": "^5.100.10", - "@tanstack/react-router": "^1.170.4", - "@tanstack/router-plugin": "^1.168.6", + "@tanstack/react-query": "^5.100.14", + "@tanstack/react-router": "^1.170.8", + "@tanstack/router-plugin": "^1.168.11", "@tauri-apps/api": "^2.11.0", "@tauri-apps/plugin-http": "^2.5.9", "@tauri-apps/plugin-log": "^2.8.0", @@ -29,7 +29,7 @@ "chart.js": "^4.5.1", "clsx": "^2.1.1", "dayjs": "^1.11.20", - "motion": "^12.38.0", + "motion": "^12.40.0", "p-timeout": "^7.0.1", "prettier": "^3.8.3", "qrcode.react": "^4.2.0", @@ -37,23 +37,23 @@ "react": "^19.2.6", "react-chartjs-2": "^5.3.1", "react-dom": "^19.2.6", - "sass": "^1.99.0", + "sass": "^1.100.0", "zod": "^4.4.3", "zustand": "^5.0.13" }, "devDependencies": { "@tanstack/devtools-vite": "^0.7.0", "@types/byte-size": "^8.1.2", - "@types/node": "^25.8.0", - "@types/react": "^19.2.14", + "@types/node": "^25.9.1", + "@types/react": "^19.2.15", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.2", "autoprefixer": "^10.5.0", "globals": "^17.6.0", - "stylelint": "^17.11.1", + "stylelint": "^17.12.0", "stylelint-config-standard-scss": "^17.0.0", "stylelint-scss": "^7.1.1", "typescript": "~6.0.3", - "vite": "^8.0.13" + "vite": "^8.0.14" } } diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index 98c6a6b75..44192227d 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -21,14 +21,14 @@ importers: specifier: ^1.32.0 version: 1.32.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-query': - specifier: ^5.100.10 - version: 5.100.10(react@19.2.6) + specifier: ^5.100.14 + version: 5.100.14(react@19.2.6) '@tanstack/react-router': - specifier: ^1.170.4 - version: 1.170.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^1.170.8 + version: 1.170.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/router-plugin': - specifier: ^1.168.6 - version: 1.168.6(@tanstack/react-router@1.170.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)) + specifier: ^1.168.11 + version: 1.168.11(@tanstack/react-router@1.170.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)) '@tauri-apps/api': specifier: ^2.11.0 version: 2.11.0 @@ -57,8 +57,8 @@ importers: specifier: ^1.11.20 version: 1.11.20 motion: - specifier: ^12.38.0 - version: 12.38.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^12.40.0 + version: 12.40.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) p-timeout: specifier: ^7.0.1 version: 7.0.1 @@ -81,54 +81,54 @@ importers: specifier: ^19.2.6 version: 19.2.6(react@19.2.6) sass: - specifier: ^1.99.0 - version: 1.99.0 + specifier: ^1.100.0 + version: 1.100.0 zod: specifier: ^4.4.3 version: 4.4.3 zustand: specifier: ^5.0.13 - version: 5.0.13(@types/react@19.2.14)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)) + version: 5.0.13(@types/react@19.2.15)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)) devDependencies: '@tanstack/devtools-vite': specifier: ^0.7.0 - version: 0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)) + version: 0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)) '@types/byte-size': specifier: ^8.1.2 version: 8.1.2 '@types/node': - specifier: ^25.8.0 - version: 25.8.0 + specifier: ^25.9.1 + version: 25.9.1 '@types/react': - specifier: ^19.2.14 - version: 19.2.14 + specifier: ^19.2.15 + version: 19.2.15 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.14) + version: 19.2.3(@types/react@19.2.15) '@vitejs/plugin-react': specifier: ^6.0.2 - version: 6.0.2(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)) + version: 6.0.2(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)) autoprefixer: specifier: ^10.5.0 - version: 10.5.0(postcss@8.5.14) + version: 10.5.0(postcss@8.5.15) globals: specifier: ^17.6.0 version: 17.6.0 stylelint: - specifier: ^17.11.1 - version: 17.11.1(typescript@6.0.3) + specifier: ^17.12.0 + version: 17.12.0(typescript@6.0.3) stylelint-config-standard-scss: specifier: ^17.0.0 - version: 17.0.0(postcss@8.5.14)(stylelint@17.11.1(typescript@6.0.3)) + version: 17.0.0(postcss@8.5.15)(stylelint@17.12.0(typescript@6.0.3)) stylelint-scss: specifier: ^7.1.1 - version: 7.1.1(stylelint@17.11.1(typescript@6.0.3)) + version: 7.1.1(stylelint@17.12.0(typescript@6.0.3)) typescript: specifier: ~6.0.3 version: 6.0.3 vite: - specifier: ^8.0.13 - version: 8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0) + specifier: ^8.0.14 + version: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0) packages: @@ -528,8 +528,8 @@ packages: '@oxc-project/types@0.120.0': resolution: {integrity: sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==} - '@oxc-project/types@0.130.0': - resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==} + '@oxc-project/types@0.132.0': + resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} @@ -619,97 +619,97 @@ packages: resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} - '@rolldown/binding-android-arm64@1.0.1': - resolution: {integrity: sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==} + '@rolldown/binding-android-arm64@1.0.2': + resolution: {integrity: sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.1': - resolution: {integrity: sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==} + '@rolldown/binding-darwin-arm64@1.0.2': + resolution: {integrity: sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.1': - resolution: {integrity: sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==} + '@rolldown/binding-darwin-x64@1.0.2': + resolution: {integrity: sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.1': - resolution: {integrity: sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==} + '@rolldown/binding-freebsd-x64@1.0.2': + resolution: {integrity: sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.1': - resolution: {integrity: sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + resolution: {integrity: sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.1': - resolution: {integrity: sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==} + '@rolldown/binding-linux-arm64-gnu@1.0.2': + resolution: {integrity: sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.1': - resolution: {integrity: sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==} + '@rolldown/binding-linux-arm64-musl@1.0.2': + resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.1': - resolution: {integrity: sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==} + '@rolldown/binding-linux-ppc64-gnu@1.0.2': + resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.1': - resolution: {integrity: sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==} + '@rolldown/binding-linux-s390x-gnu@1.0.2': + resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.1': - resolution: {integrity: sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==} + '@rolldown/binding-linux-x64-gnu@1.0.2': + resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.1': - resolution: {integrity: sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==} + '@rolldown/binding-linux-x64-musl@1.0.2': + resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.1': - resolution: {integrity: sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==} + '@rolldown/binding-openharmony-arm64@1.0.2': + resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.1': - resolution: {integrity: sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==} + '@rolldown/binding-wasm32-wasi@1.0.2': + resolution: {integrity: sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.1': - resolution: {integrity: sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==} + '@rolldown/binding-win32-arm64-msvc@1.0.2': + resolution: {integrity: sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.1': - resolution: {integrity: sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==} + '@rolldown/binding-win32-x64-msvc@1.0.2': + resolution: {integrity: sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -755,8 +755,8 @@ packages: resolution: {integrity: sha512-y/xtNPNt/YeyoVxE/JCx+T7yjEzpezmbb+toK8DDD1P4m7Kzs5YR956+7OKexG3f8aXgC3rLZl7b1V+yNUSy5w==} engines: {node: '>=18'} - '@tanstack/query-core@5.100.10': - resolution: {integrity: sha512-8UR0yJR+GiQ40m3lPhUr0xbfAupe6GSQiksSBSa9SM2NjezFyxXCIA69/lz8cSoNKZLrw1/PktIyQBJcVeMi3w==} + '@tanstack/query-core@5.100.14': + resolution: {integrity: sha512-5X41dGpxgeaHISCRW2oYwcSycZeULZzAunaudXT9ov1KOTj9xwt0CH6hbwqP1/z74ZWF7rYFnDpyYH07XFcZew==} '@tanstack/react-form@1.32.0': resolution: {integrity: sha512-6WP5SQTA6/H9crCpvpq3ZppYWqtrdE5NjOy6ebABi6uAQPqhfTzrdjS9t40mCZCFtGI5585OhJV6zBP/KN2zcw==} @@ -767,13 +767,13 @@ packages: '@tanstack/react-start': optional: true - '@tanstack/react-query@5.100.10': - resolution: {integrity: sha512-FLaZf2RCrA/Zgp4aiu5tG3TyasTRO7aZ99skxQpr3Hg/zXOhu6yq5FZCYQ/tRaJtM9ylnoK8tFK7PolXQadv6Q==} + '@tanstack/react-query@5.100.14': + resolution: {integrity: sha512-oOr6aRdSFEwWhzxEkD/9ZcItM3+LjBSkeVmadWKwUssAHTsqd/7bOjWrX4AbvEkoEhgAxzN0Xk6H/aYzXiYBAw==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-router@1.170.4': - resolution: {integrity: sha512-cusL4YCTuGGJhjfsXEBm6/SmOAs/G8wRVNadeyN3ofu4OZwX69KAybBEf217buxYzI+FohdJVoigEpJV+tGzIw==} + '@tanstack/react-router@1.170.8': + resolution: {integrity: sha512-Qw2ju6jjnIsMpuW+VrnHZWHuugqs592PWsnI56sG28qNhg14CgRLahOcNajfuJR9P4MxKGP94WVzmFKSYUz/ig==} engines: {node: '>=20.19'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -785,20 +785,20 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.171.2': - resolution: {integrity: sha512-sUd+BhGYkBF64LVhmOHnYsc1AutPNch/huohEXiXL4IUgmk17Gy+RkUazvjQhptVdYW5QT+qtATrUr2cQZNHFA==} + '@tanstack/router-core@1.171.6': + resolution: {integrity: sha512-Ol6DQ+j6rf/rPVELIzo8LHwOQV2KL+zry3b+39kL/GKrt7YId52WJRAFMzuseY4XceSW+PU7sG/Cc1QkwJr0hg==} engines: {node: '>=20.19'} - '@tanstack/router-generator@1.167.5': - resolution: {integrity: sha512-S7h9qs7WjwF1IlMiOxSv+xB/bSOQ6QS84NlApM9iWLVdkbOVUn7RzTaCqw2qdDa5cPrfSiZJ2wK2a6RFDmFubA==} + '@tanstack/router-generator@1.167.10': + resolution: {integrity: sha512-CjbjWRSo6djLU/C7ncb9IbKUcf4IwpdqhLGngkwKkXaVFXGxEAafA/uhvOCv/UEUVR7NI3tJqqQmxYXGcJPbjw==} engines: {node: '>=20.19'} - '@tanstack/router-plugin@1.168.6': - resolution: {integrity: sha512-u5CNtTWGyFvV8gGWKBt9LdwVGg+ISSBXG/aeeU1/d1YpEKPqlJHS6oN3tvNKOScubeV64HjpeV0tD6fqRfCpvw==} + '@tanstack/router-plugin@1.168.11': + resolution: {integrity: sha512-b2eom/8xCWL/OiWxKub8kYsr8p+kvmB/eXwYGqCWG8vilcJo+eQCSyp54nKt0AZ5k/ET1+eINc+4mwL3bVeAgg==} engines: {node: '>=20.19'} peerDependencies: '@rsbuild/core': '>=1.0.2 || ^2.0.0' - '@tanstack/react-router': ^1.170.4 + '@tanstack/react-router': ^1.170.8 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0' vite-plugin-solid: ^2.11.10 || ^3.0.0-0 webpack: '>=5.92.0' @@ -814,8 +814,8 @@ packages: webpack: optional: true - '@tanstack/router-utils@1.162.0': - resolution: {integrity: sha512-c3GhqhBRCP636B41nf3TKvVz8EWzC5PTZ3I4J4LDH2tVjpxbyFNYsQKRtbNWiMFl+GTtgK4nCha346Wv7j4hcQ==} + '@tanstack/router-utils@1.162.1': + resolution: {integrity: sha512-62layyTGmclHDQS/eidwKRfN1hhCKwViG7iEBcVmL0MXgcAB3OOucWCEcDDGd9Cu11H6b4QQ5oOo47MWIqwz0A==} engines: {node: '>=20.19'} '@tanstack/store@0.9.3': @@ -843,16 +843,16 @@ packages: '@types/byte-size@8.1.2': resolution: {integrity: sha512-jGyVzYu6avI8yuqQCNTZd65tzI8HZrLjKX9sdMqZrGWVlNChu0rf6p368oVEDCYJe5BMx2Ov04tD1wqtgTwGSA==} - '@types/node@25.8.0': - resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==} + '@types/node@25.9.1': + resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.14': - resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + '@types/react@19.2.15': + resolution: {integrity: sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==} '@uidotdev/usehooks@2.4.1': resolution: {integrity: sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg==} @@ -893,10 +893,6 @@ packages: resolution: {integrity: sha512-44mvgtPvohuU/70DdY5Oz2AIrLJ9k6/5x4KmoSvPwO+5Moijo0+N9D0fKbbYZQWP1hNm5CpOf+E01jhxG/r8xg==} engines: {node: '>=14'} - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -914,15 +910,11 @@ packages: babel-dead-code-elimination@1.0.12: resolution: {integrity: sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==} - baseline-browser-mapping@2.10.30: - resolution: {integrity: sha512-xjOFN16Ha1+Rz4nFYKqHU/LSB+gx/Vi3yQLX7r7sAW+Wa+8hhF2h4pvqTrTMc8+WcDBEunnUurr46Jvv0jk3Vg==} + baseline-browser-mapping@2.10.32: + resolution: {integrity: sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==} engines: {node: '>=6.0.0'} hasBin: true - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -959,13 +951,9 @@ packages: resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} engines: {pnpm: '>=8'} - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} @@ -1032,8 +1020,8 @@ packages: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} - electron-to-chromium@1.5.357: - resolution: {integrity: sha512-NHlTIQDK8fmVwHwuIzmXYEJ1Ewq3D9wDNc0cWXxDGysP6Pb21giwGNkxiTifyKy/4SoPuN5l6GLP1W9Sv7zB2g==} + electron-to-chromium@1.5.361: + resolution: {integrity: sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1091,8 +1079,8 @@ packages: fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} - framer-motion@12.38.0: - resolution: {integrity: sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==} + framer-motion@12.40.0: + resolution: {integrity: sha512-uaBd3qC1v3KQqBEjwTUd183K6PbS+j0yR9w9VmEOLWA/tnUcSn8Xa3uck7t4dgpDoUss8xQTcj8W2L07lrnLFg==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -1179,10 +1167,6 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1358,14 +1342,14 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - motion-dom@12.38.0: - resolution: {integrity: sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==} + motion-dom@12.40.0: + resolution: {integrity: sha512-HxU3ZaBwNPVQUBQf1xxgq+7JrPNZvjLVxgbpEZL7RrWJnsxOf0/OM+yrHG9ogLQ31Do/r57Oz2gQWPK+6q62mg==} - motion-utils@12.36.0: - resolution: {integrity: sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==} + motion-utils@12.39.0: + resolution: {integrity: sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==} - motion@12.38.0: - resolution: {integrity: sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w==} + motion@12.40.0: + resolution: {integrity: sha512-yjrHUrBFW6kQvjJwRsoiPSAhC5tRwRqNGJWmiJ4CrGnbKp0V88AdzkhBmDoqIsIPfarOe0Uddd37Xq43/gIocA==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -1389,8 +1373,9 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-releases@2.0.44: - resolution: {integrity: sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==} + node-releases@2.0.46: + resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} + engines: {node: '>=18'} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -1451,8 +1436,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.14: - resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} prettier@3.8.3: @@ -1491,13 +1476,9 @@ packages: resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} engines: {node: '>=0.10.0'} - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} @@ -1511,17 +1492,17 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown@1.0.1: - resolution: {integrity: sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==} + rolldown@1.0.2: + resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - sass@1.99.0: - resolution: {integrity: sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==} - engines: {node: '>=14.0.0'} + sass@1.100.0: + resolution: {integrity: sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==} + engines: {node: '>=20.19.0'} hasBin: true scheduler@0.27.0: @@ -1541,8 +1522,8 @@ packages: resolution: {integrity: sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==} engines: {node: '>=10'} - shell-quote@1.8.3: - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + shell-quote@1.8.4: + resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==} engines: {node: '>= 0.4'} signal-exit@4.1.0: @@ -1615,8 +1596,8 @@ packages: peerDependencies: stylelint: ^16.8.2 || ^17.0.0 - stylelint@17.11.1: - resolution: {integrity: sha512-+smN/HqVTggUx3iuAzOi9fPh8SrH+cJWlZrYVldXoJ06orWBhZ4Ue/QEp64oei6pVrAh4w3tG+Y12Vw7MbCFRQ==} + stylelint@17.12.0: + resolution: {integrity: sha512-KIlzWXMHUvgfPUR0R7TK3H80yCIi0uoivUwf+6Az4yrHJD1Q3c1qIkh/H5Z0i/K3QXgtq/UMEkWyBUSUwnpnOg==} engines: {node: '>=20.19.0'} hasBin: true @@ -1679,8 +1660,8 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - vite@8.0.13: - resolution: {integrity: sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==} + vite@8.0.14: + resolution: {integrity: sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -1733,8 +1714,8 @@ packages: resolution: {integrity: sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==} engines: {node: ^20.17.0 || >=22.9.0} - ws@8.20.1: - resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -1748,9 +1729,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} @@ -2117,7 +2095,7 @@ snapshots: '@oxc-project/types@0.120.0': {} - '@oxc-project/types@0.130.0': {} + '@oxc-project/types@0.132.0': {} '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -2180,53 +2158,53 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.6 optional: true - '@rolldown/binding-android-arm64@1.0.1': + '@rolldown/binding-android-arm64@1.0.2': optional: true - '@rolldown/binding-darwin-arm64@1.0.1': + '@rolldown/binding-darwin-arm64@1.0.2': optional: true - '@rolldown/binding-darwin-x64@1.0.1': + '@rolldown/binding-darwin-x64@1.0.2': optional: true - '@rolldown/binding-freebsd-x64@1.0.1': + '@rolldown/binding-freebsd-x64@1.0.2': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.1': + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.1': + '@rolldown/binding-linux-arm64-gnu@1.0.2': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.1': + '@rolldown/binding-linux-arm64-musl@1.0.2': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.1': + '@rolldown/binding-linux-ppc64-gnu@1.0.2': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.1': + '@rolldown/binding-linux-s390x-gnu@1.0.2': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.1': + '@rolldown/binding-linux-x64-gnu@1.0.2': optional: true - '@rolldown/binding-linux-x64-musl@1.0.1': + '@rolldown/binding-linux-x64-musl@1.0.2': optional: true - '@rolldown/binding-openharmony-arm64@1.0.1': + '@rolldown/binding-openharmony-arm64@1.0.2': optional: true - '@rolldown/binding-wasm32-wasi@1.0.1': + '@rolldown/binding-wasm32-wasi@1.0.2': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.1': + '@rolldown/binding-win32-arm64-msvc@1.0.2': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.1': + '@rolldown/binding-win32-x64-msvc@1.0.2': optional: true '@rolldown/pluginutils@1.0.1': {} @@ -2241,14 +2219,14 @@ snapshots: '@tanstack/devtools-event-bus@0.4.1': dependencies: - ws: 8.20.1 + ws: 8.21.0 transitivePeerDependencies: - bufferutil - utf-8-validate '@tanstack/devtools-event-client@0.4.3': {} - '@tanstack/devtools-vite@0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0))': + '@tanstack/devtools-vite@0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0))': dependencies: '@tanstack/devtools-client': 0.0.6 '@tanstack/devtools-event-bus': 0.4.1 @@ -2257,7 +2235,7 @@ snapshots: magic-string: 0.30.21 oxc-parser: 0.120.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) picomatch: 4.0.4 - vite: 8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0) + vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -2274,7 +2252,7 @@ snapshots: '@tanstack/pacer-lite@0.1.1': {} - '@tanstack/query-core@5.100.10': {} + '@tanstack/query-core@5.100.14': {} '@tanstack/react-form@1.32.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: @@ -2284,16 +2262,16 @@ snapshots: transitivePeerDependencies: - react-dom - '@tanstack/react-query@5.100.10(react@19.2.6)': + '@tanstack/react-query@5.100.14(react@19.2.6)': dependencies: - '@tanstack/query-core': 5.100.10 + '@tanstack/query-core': 5.100.14 react: 19.2.6 - '@tanstack/react-router@1.170.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@tanstack/react-router@1.170.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@tanstack/history': 1.162.0 '@tanstack/react-store': 0.9.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@tanstack/router-core': 1.171.2 + '@tanstack/router-core': 1.171.6 isbot: 5.1.40 react: 19.2.6 react-dom: 19.2.6(react@19.2.6) @@ -2305,27 +2283,27 @@ snapshots: react-dom: 19.2.6(react@19.2.6) use-sync-external-store: 1.6.0(react@19.2.6) - '@tanstack/router-core@1.171.2': + '@tanstack/router-core@1.171.6': dependencies: '@tanstack/history': 1.162.0 cookie-es: 3.1.1 seroval: 1.5.4 seroval-plugins: 1.5.4(seroval@1.5.4) - '@tanstack/router-generator@1.167.5': + '@tanstack/router-generator@1.167.10': dependencies: '@babel/types': 7.29.0 - '@tanstack/router-core': 1.171.2 - '@tanstack/router-utils': 1.162.0 + '@tanstack/router-core': 1.171.6 + '@tanstack/router-utils': 1.162.1 '@tanstack/virtual-file-routes': 1.162.0 jiti: 2.7.0 magic-string: 0.30.21 prettier: 3.8.3 - zod: 3.25.76 + zod: 4.4.3 transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.168.6(@tanstack/react-router@1.170.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0))': + '@tanstack/router-plugin@1.168.11(@tanstack/react-router@1.170.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -2333,20 +2311,20 @@ snapshots: '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - '@tanstack/router-core': 1.171.2 - '@tanstack/router-generator': 1.167.5 - '@tanstack/router-utils': 1.162.0 + '@tanstack/router-core': 1.171.6 + '@tanstack/router-generator': 1.167.10 + '@tanstack/router-utils': 1.162.1 '@tanstack/virtual-file-routes': 1.162.0 - chokidar: 3.6.0 + chokidar: 5.0.0 unplugin: 3.0.0 - zod: 3.25.76 + zod: 4.4.3 optionalDependencies: - '@tanstack/react-router': 1.170.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - vite: 8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0) + '@tanstack/react-router': 1.170.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0) transitivePeerDependencies: - supports-color - '@tanstack/router-utils@1.162.0': + '@tanstack/router-utils@1.162.1': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -2385,15 +2363,15 @@ snapshots: '@types/byte-size@8.1.2': {} - '@types/node@25.8.0': + '@types/node@25.9.1': dependencies: undici-types: 7.24.6 - '@types/react-dom@19.2.3(@types/react@19.2.14)': + '@types/react-dom@19.2.3(@types/react@19.2.15)': dependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@types/react@19.2.14': + '@types/react@19.2.15': dependencies: csstype: 3.2.3 @@ -2402,10 +2380,10 @@ snapshots: react: 19.2.6 react-dom: 19.2.6(react@19.2.6) - '@vitejs/plugin-react@6.0.2(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0))': + '@vitejs/plugin-react@6.0.2(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0) + vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0) ajv@8.20.0: dependencies: @@ -2424,22 +2402,17 @@ snapshots: ansis@4.3.0: {} - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.2 - argparse@2.0.1: {} astral-regex@2.0.0: {} - autoprefixer@10.5.0(postcss@8.5.14): + autoprefixer@10.5.0(postcss@8.5.15): dependencies: browserslist: 4.28.2 caniuse-lite: 1.0.30001793 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.14 + postcss: 8.5.15 postcss-value-parser: 4.2.0 babel-dead-code-elimination@1.0.12: @@ -2451,9 +2424,7 @@ snapshots: transitivePeerDependencies: - supports-color - baseline-browser-mapping@2.10.30: {} - - binary-extensions@2.3.0: {} + baseline-browser-mapping@2.10.32: {} braces@3.0.3: dependencies: @@ -2461,10 +2432,10 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.30 + baseline-browser-mapping: 2.10.32 caniuse-lite: 1.0.30001793 - electron-to-chromium: 1.5.357 - node-releases: 2.0.44 + electron-to-chromium: 1.5.361 + node-releases: 2.0.46 update-browserslist-db: 1.2.3(browserslist@4.28.2) byte-size@9.0.1: {} @@ -2487,21 +2458,9 @@ snapshots: dependencies: '@kurkle/color': 0.3.4 - chokidar@3.6.0: + chokidar@5.0.0: dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 + readdirp: 5.0.0 clsx@2.1.1: {} @@ -2547,7 +2506,7 @@ snapshots: diff@8.0.4: {} - electron-to-chromium@1.5.357: {} + electron-to-chromium@1.5.361: {} emoji-regex@8.0.0: {} @@ -2599,10 +2558,10 @@ snapshots: fraction.js@5.3.4: {} - framer-motion@12.38.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + framer-motion@12.40.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - motion-dom: 12.38.0 - motion-utils: 12.36.0 + motion-dom: 12.40.0 + motion-utils: 12.39.0 tslib: 2.8.1 optionalDependencies: react: 19.2.6 @@ -2669,10 +2628,6 @@ snapshots: is-arrayish@0.2.1: {} - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -2718,7 +2673,7 @@ snapshots: launch-editor@2.13.2: dependencies: picocolors: 1.1.1 - shell-quote: 1.8.3 + shell-quote: 1.8.4 lightningcss-android-arm64@1.32.0: optional: true @@ -2794,15 +2749,15 @@ snapshots: braces: 3.0.3 picomatch: 2.3.2 - motion-dom@12.38.0: + motion-dom@12.40.0: dependencies: - motion-utils: 12.36.0 + motion-utils: 12.39.0 - motion-utils@12.36.0: {} + motion-utils@12.39.0: {} - motion@12.38.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + motion@12.40.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - framer-motion: 12.38.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + framer-motion: 12.40.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) tslib: 2.8.1 optionalDependencies: react: 19.2.6 @@ -2815,7 +2770,7 @@ snapshots: node-addon-api@7.1.1: optional: true - node-releases@2.0.44: {} + node-releases@2.0.46: {} normalize-path@3.0.0: {} @@ -2872,13 +2827,13 @@ snapshots: postcss-resolve-nested-selector@0.1.6: {} - postcss-safe-parser@7.0.1(postcss@8.5.14): + postcss-safe-parser@7.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.14 + postcss: 8.5.15 - postcss-scss@4.0.9(postcss@8.5.14): + postcss-scss@4.0.9(postcss@8.5.15): dependencies: - postcss: 8.5.14 + postcss: 8.5.15 postcss-selector-parser@7.1.1: dependencies: @@ -2887,7 +2842,7 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.14: + postcss@8.5.15: dependencies: nanoid: 3.3.12 picocolors: 1.1.1 @@ -2919,11 +2874,7 @@ snapshots: react@19.2.6: {} - readdirp@3.6.0: - dependencies: - picomatch: 2.3.2 - - readdirp@4.1.2: {} + readdirp@5.0.0: {} require-from-string@2.0.2: {} @@ -2931,34 +2882,34 @@ snapshots: reusify@1.1.0: {} - rolldown@1.0.1: + rolldown@1.0.2: dependencies: - '@oxc-project/types': 0.130.0 + '@oxc-project/types': 0.132.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.1 - '@rolldown/binding-darwin-arm64': 1.0.1 - '@rolldown/binding-darwin-x64': 1.0.1 - '@rolldown/binding-freebsd-x64': 1.0.1 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.1 - '@rolldown/binding-linux-arm64-gnu': 1.0.1 - '@rolldown/binding-linux-arm64-musl': 1.0.1 - '@rolldown/binding-linux-ppc64-gnu': 1.0.1 - '@rolldown/binding-linux-s390x-gnu': 1.0.1 - '@rolldown/binding-linux-x64-gnu': 1.0.1 - '@rolldown/binding-linux-x64-musl': 1.0.1 - '@rolldown/binding-openharmony-arm64': 1.0.1 - '@rolldown/binding-wasm32-wasi': 1.0.1 - '@rolldown/binding-win32-arm64-msvc': 1.0.1 - '@rolldown/binding-win32-x64-msvc': 1.0.1 + '@rolldown/binding-android-arm64': 1.0.2 + '@rolldown/binding-darwin-arm64': 1.0.2 + '@rolldown/binding-darwin-x64': 1.0.2 + '@rolldown/binding-freebsd-x64': 1.0.2 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.2 + '@rolldown/binding-linux-arm64-gnu': 1.0.2 + '@rolldown/binding-linux-arm64-musl': 1.0.2 + '@rolldown/binding-linux-ppc64-gnu': 1.0.2 + '@rolldown/binding-linux-s390x-gnu': 1.0.2 + '@rolldown/binding-linux-x64-gnu': 1.0.2 + '@rolldown/binding-linux-x64-musl': 1.0.2 + '@rolldown/binding-openharmony-arm64': 1.0.2 + '@rolldown/binding-wasm32-wasi': 1.0.2 + '@rolldown/binding-win32-arm64-msvc': 1.0.2 + '@rolldown/binding-win32-x64-msvc': 1.0.2 run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - sass@1.99.0: + sass@1.100.0: dependencies: - chokidar: 4.0.3 + chokidar: 5.0.0 immutable: 5.1.5 source-map-js: 1.2.1 optionalDependencies: @@ -2974,7 +2925,7 @@ snapshots: seroval@1.5.4: {} - shell-quote@1.8.3: {} + shell-quote@1.8.4: {} signal-exit@4.1.0: {} @@ -3007,33 +2958,33 @@ snapshots: dependencies: ansi-regex: 6.2.2 - stylelint-config-recommended-scss@17.0.1(postcss@8.5.14)(stylelint@17.11.1(typescript@6.0.3)): + stylelint-config-recommended-scss@17.0.1(postcss@8.5.15)(stylelint@17.12.0(typescript@6.0.3)): dependencies: - postcss-scss: 4.0.9(postcss@8.5.14) - stylelint: 17.11.1(typescript@6.0.3) - stylelint-config-recommended: 18.0.0(stylelint@17.11.1(typescript@6.0.3)) - stylelint-scss: 7.1.1(stylelint@17.11.1(typescript@6.0.3)) + postcss-scss: 4.0.9(postcss@8.5.15) + stylelint: 17.12.0(typescript@6.0.3) + stylelint-config-recommended: 18.0.0(stylelint@17.12.0(typescript@6.0.3)) + stylelint-scss: 7.1.1(stylelint@17.12.0(typescript@6.0.3)) optionalDependencies: - postcss: 8.5.14 + postcss: 8.5.15 - stylelint-config-recommended@18.0.0(stylelint@17.11.1(typescript@6.0.3)): + stylelint-config-recommended@18.0.0(stylelint@17.12.0(typescript@6.0.3)): dependencies: - stylelint: 17.11.1(typescript@6.0.3) + stylelint: 17.12.0(typescript@6.0.3) - stylelint-config-standard-scss@17.0.0(postcss@8.5.14)(stylelint@17.11.1(typescript@6.0.3)): + stylelint-config-standard-scss@17.0.0(postcss@8.5.15)(stylelint@17.12.0(typescript@6.0.3)): dependencies: - stylelint: 17.11.1(typescript@6.0.3) - stylelint-config-recommended-scss: 17.0.1(postcss@8.5.14)(stylelint@17.11.1(typescript@6.0.3)) - stylelint-config-standard: 40.0.0(stylelint@17.11.1(typescript@6.0.3)) + stylelint: 17.12.0(typescript@6.0.3) + stylelint-config-recommended-scss: 17.0.1(postcss@8.5.15)(stylelint@17.12.0(typescript@6.0.3)) + stylelint-config-standard: 40.0.0(stylelint@17.12.0(typescript@6.0.3)) optionalDependencies: - postcss: 8.5.14 + postcss: 8.5.15 - stylelint-config-standard@40.0.0(stylelint@17.11.1(typescript@6.0.3)): + stylelint-config-standard@40.0.0(stylelint@17.12.0(typescript@6.0.3)): dependencies: - stylelint: 17.11.1(typescript@6.0.3) - stylelint-config-recommended: 18.0.0(stylelint@17.11.1(typescript@6.0.3)) + stylelint: 17.12.0(typescript@6.0.3) + stylelint-config-recommended: 18.0.0(stylelint@17.12.0(typescript@6.0.3)) - stylelint-scss@7.1.1(stylelint@17.11.1(typescript@6.0.3)): + stylelint-scss@7.1.1(stylelint@17.12.0(typescript@6.0.3)): dependencies: '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) @@ -3046,9 +2997,9 @@ snapshots: postcss-resolve-nested-selector: 0.1.6 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - stylelint: 17.11.1(typescript@6.0.3) + stylelint: 17.12.0(typescript@6.0.3) - stylelint@17.11.1(typescript@6.0.3): + stylelint@17.12.0(typescript@6.0.3): dependencies: '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) @@ -3076,8 +3027,8 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.14 - postcss-safe-parser: 7.0.1(postcss@8.5.14) + postcss: 8.5.15 + postcss-safe-parser: 7.0.1(postcss@8.5.15) postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 string-width: 8.2.1 @@ -3143,18 +3094,18 @@ snapshots: util-deprecate@1.0.2: {} - vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0): + vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.14 - rolldown: 1.0.1 + postcss: 8.5.15 + rolldown: 1.0.2 tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 25.8.0 + '@types/node': 25.9.1 fsevents: 2.3.3 jiti: 2.7.0 - sass: 1.99.0 + sass: 1.100.0 webpack-virtual-modules@0.6.2: {} @@ -3166,16 +3117,14 @@ snapshots: dependencies: signal-exit: 4.1.0 - ws@8.20.1: {} + ws@8.21.0: {} yallist@3.1.1: {} - zod@3.25.76: {} - zod@4.4.3: {} - zustand@5.0.13(@types/react@19.2.14)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)): + zustand@5.0.13(@types/react@19.2.15)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)): optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 react: 19.2.6 use-sync-external-store: 1.6.0(react@19.2.6) diff --git a/package.json b/package.json index af898b441..a4af3395b 100644 --- a/package.json +++ b/package.json @@ -35,29 +35,14 @@ "last 1 safari version" ] }, - "pnpm": { - "peerDependencyRules": { - "ignoreMissing": [ - "react-native" - ] - }, - "onlyBuiltDependencies": [ - "@parcel/watcher", - "@swc/core", - "esbuild" - ], - "overrides": { - "mdast-util-to-hast": "13.2.1" - } - }, "dependencies": { "@floating-ui/react": "^0.27.19", "@hookform/resolvers": "^3.10.0", "@react-hook/resize-observer": "^2.0.2", "@stablelib/base64": "^2.0.1", "@stablelib/x25519": "^2.0.1", - "@tanstack/query-core": "^5.100.10", - "@tanstack/react-virtual": "^3.13.24", + "@tanstack/query-core": "^5.100.14", + "@tanstack/react-virtual": "^3.13.25", "@tauri-apps/api": "^2.11.0", "@tauri-apps/plugin-clipboard-manager": "^2.3.2", "@tauri-apps/plugin-deep-link": "^2.4.9", @@ -82,13 +67,13 @@ "fast-deep-equal": "^3.1.3", "file-saver": "^2.0.5", "get-text-width": "^1.0.3", - "html-react-parser": "^6.1.1", - "itertools": "^2.6.0", + "html-react-parser": "^6.1.2", + "itertools": "^2.7.1", "js-base64": "^3.7.8", "lodash-es": "^4.18.1", "merge-refs": "^2.0.0", "millify": "^6.1.0", - "motion": "^12.38.0", + "motion": "^12.40.0", "p-timeout": "^7.0.1", "prop-types": "^15.8.1", "radash": "^12.1.1", @@ -96,7 +81,7 @@ "react-auth-code-input": "^3.2.1", "react-click-away-listener": "^2.4.1", "react-dom": "^19.2.6", - "react-hook-form": "^7.76.0", + "react-hook-form": "^7.76.1", "react-hotkeys-hook": "^5.3.2", "react-loading-skeleton": "^3.5.0", "react-markdown": "^10.1.0", @@ -115,25 +100,25 @@ "@biomejs/biome": "^2.4.15", "@hookform/devtools": "^4.4.0", "@svgr/cli": "^8.1.0", - "@tanstack/react-query": "^5.100.10", - "@tanstack/react-query-devtools": "^5.100.10", + "@tanstack/react-query": "^5.100.14", + "@tanstack/react-query-devtools": "^5.100.14", "@tauri-apps/cli": "^2.11.2", "@types/file-saver": "^2.0.7", "@types/lodash-es": "^4.17.12", - "@types/node": "^25.8.0", - "@types/react": "^19.2.14", + "@types/node": "^25.9.1", + "@types/react": "^19.2.15", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.2", "@vitejs/plugin-react-swc": "^4.3.1", "autoprefixer": "^10.5.0", "npm-run-all": "^4.1.5", - "postcss": "^8.5.14", + "postcss": "^8.5.15", "prettier": "^3.8.3", "sass": "~1.99.0", "typedoc": "^0.28.19", "typesafe-i18n": "^5.27.1", "typescript": "^5.9.3", - "vite": "^8.0.13" + "vite": "^8.0.14" }, "volta": { "node": "20.5.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf1eda962..1791b2d85 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: version: 0.27.19(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@hookform/resolvers': specifier: ^3.10.0 - version: 3.10.0(react-hook-form@7.76.0(react@19.2.6)) + version: 3.10.0(react-hook-form@7.76.1(react@19.2.6)) '@react-hook/resize-observer': specifier: ^2.0.2 version: 2.0.2(react@19.2.6) @@ -24,11 +24,11 @@ importers: specifier: ^2.0.1 version: 2.0.1 '@tanstack/query-core': - specifier: ^5.100.10 - version: 5.100.10 + specifier: ^5.100.14 + version: 5.100.14 '@tanstack/react-virtual': - specifier: ^3.13.24 - version: 3.13.24(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^3.13.25 + version: 3.13.25(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tauri-apps/api': specifier: ^2.11.0 version: 2.11.0 @@ -102,11 +102,11 @@ importers: specifier: ^1.0.3 version: 1.0.3 html-react-parser: - specifier: ^6.1.1 - version: 6.1.1(@types/react@19.2.14)(react@19.2.6) + specifier: ^6.1.2 + version: 6.1.2(@types/react@19.2.15)(react@19.2.6) itertools: - specifier: ^2.6.0 - version: 2.6.0 + specifier: ^2.7.1 + version: 2.7.1 js-base64: specifier: ^3.7.8 version: 3.7.8 @@ -115,13 +115,13 @@ importers: version: 4.18.1 merge-refs: specifier: ^2.0.0 - version: 2.0.0(@types/react@19.2.14) + version: 2.0.0(@types/react@19.2.15) millify: specifier: ^6.1.0 version: 6.1.0 motion: - specifier: ^12.38.0 - version: 12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^12.40.0 + version: 12.40.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) p-timeout: specifier: ^7.0.1 version: 7.0.1 @@ -144,8 +144,8 @@ importers: specifier: ^19.2.6 version: 19.2.6(react@19.2.6) react-hook-form: - specifier: ^7.76.0 - version: 7.76.0(react@19.2.6) + specifier: ^7.76.1 + version: 7.76.1(react@19.2.6) react-hotkeys-hook: specifier: ^5.3.2 version: 5.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -154,7 +154,7 @@ importers: version: 3.5.0(react@19.2.6) react-markdown: specifier: ^10.1.0 - version: 10.1.0(@types/react@19.2.14)(react@19.2.6) + version: 10.1.0(@types/react@19.2.15)(react@19.2.6) react-qr-code: specifier: ^2.0.21 version: 2.0.21(react@19.2.6) @@ -169,7 +169,7 @@ importers: version: 1.0.26(react-dom@19.2.6(react@19.2.6))(react@19.2.6) recharts: specifier: ^3.8.1 - version: 3.8.1(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react-is@16.13.1)(react@19.2.6)(redux@5.0.1) + version: 3.8.1(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react-is@16.13.1)(react@19.2.6)(redux@5.0.1) rehype-sanitize: specifier: ^6.0.0 version: 6.0.0 @@ -184,23 +184,23 @@ importers: version: 3.25.76 zustand: specifier: ^5.0.13 - version: 5.0.13(@types/react@19.2.14)(immer@11.1.8)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)) + version: 5.0.13(@types/react@19.2.15)(immer@11.1.8)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)) devDependencies: '@biomejs/biome': specifier: ^2.4.15 version: 2.4.15 '@hookform/devtools': specifier: ^4.4.0 - version: 4.4.0(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + version: 4.4.0(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@svgr/cli': specifier: ^8.1.0 version: 8.1.0(typescript@5.9.3) '@tanstack/react-query': - specifier: ^5.100.10 - version: 5.100.10(react@19.2.6) + specifier: ^5.100.14 + version: 5.100.14(react@19.2.6) '@tanstack/react-query-devtools': - specifier: ^5.100.10 - version: 5.100.10(@tanstack/react-query@5.100.10(react@19.2.6))(react@19.2.6) + specifier: ^5.100.14 + version: 5.100.14(@tanstack/react-query@5.100.14(react@19.2.6))(react@19.2.6) '@tauri-apps/cli': specifier: ^2.11.2 version: 2.11.2 @@ -211,29 +211,29 @@ importers: specifier: ^4.17.12 version: 4.17.12 '@types/node': - specifier: ^25.8.0 - version: 25.8.0 + specifier: ^25.9.1 + version: 25.9.1 '@types/react': - specifier: ^19.2.14 - version: 19.2.14 + specifier: ^19.2.15 + version: 19.2.15 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.14) + version: 19.2.3(@types/react@19.2.15) '@vitejs/plugin-react': specifier: ^6.0.2 - version: 6.0.2(vite@8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0)) + version: 6.0.2(vite@8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0)) '@vitejs/plugin-react-swc': specifier: ^4.3.1 - version: 4.3.1(vite@8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0)) + version: 4.3.1(vite@8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0)) autoprefixer: specifier: ^10.5.0 - version: 10.5.0(postcss@8.5.14) + version: 10.5.0(postcss@8.5.15) npm-run-all: specifier: ^4.1.5 version: 4.1.5 postcss: - specifier: ^8.5.14 - version: 8.5.14 + specifier: ^8.5.15 + version: 8.5.15 prettier: specifier: ^3.8.3 version: 3.8.3 @@ -250,8 +250,8 @@ importers: specifier: ^5.9.3 version: 5.9.3 vite: - specifier: ^8.0.13 - version: 8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0) + specifier: ^8.0.14 + version: 8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0) packages: @@ -503,8 +503,8 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 - '@oxc-project/types@0.130.0': - resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==} + '@oxc-project/types@0.132.0': + resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} @@ -624,97 +624,97 @@ packages: resolution: {integrity: sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==} engines: {node: '>=14.0.0'} - '@rolldown/binding-android-arm64@1.0.1': - resolution: {integrity: sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==} + '@rolldown/binding-android-arm64@1.0.2': + resolution: {integrity: sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.1': - resolution: {integrity: sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==} + '@rolldown/binding-darwin-arm64@1.0.2': + resolution: {integrity: sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.1': - resolution: {integrity: sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==} + '@rolldown/binding-darwin-x64@1.0.2': + resolution: {integrity: sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.1': - resolution: {integrity: sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==} + '@rolldown/binding-freebsd-x64@1.0.2': + resolution: {integrity: sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.1': - resolution: {integrity: sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + resolution: {integrity: sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.1': - resolution: {integrity: sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==} + '@rolldown/binding-linux-arm64-gnu@1.0.2': + resolution: {integrity: sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.1': - resolution: {integrity: sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==} + '@rolldown/binding-linux-arm64-musl@1.0.2': + resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.1': - resolution: {integrity: sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==} + '@rolldown/binding-linux-ppc64-gnu@1.0.2': + resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.1': - resolution: {integrity: sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==} + '@rolldown/binding-linux-s390x-gnu@1.0.2': + resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.1': - resolution: {integrity: sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==} + '@rolldown/binding-linux-x64-gnu@1.0.2': + resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.1': - resolution: {integrity: sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==} + '@rolldown/binding-linux-x64-musl@1.0.2': + resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.1': - resolution: {integrity: sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==} + '@rolldown/binding-openharmony-arm64@1.0.2': + resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.1': - resolution: {integrity: sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==} + '@rolldown/binding-wasm32-wasi@1.0.2': + resolution: {integrity: sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.1': - resolution: {integrity: sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==} + '@rolldown/binding-win32-arm64-msvc@1.0.2': + resolution: {integrity: sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.1': - resolution: {integrity: sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==} + '@rolldown/binding-win32-x64-msvc@1.0.2': + resolution: {integrity: sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -852,86 +852,86 @@ packages: peerDependencies: '@svgr/core': '*' - '@swc/core-darwin-arm64@1.15.33': - resolution: {integrity: sha512-N+L0uXhuO7FIfzqwgxmzv0zIpV0qEp8wPX3QQs2p4atjMoywup2JTeDlXPw+z9pWJGCae3JjM+tZ6myclI+2gA==} + '@swc/core-darwin-arm64@1.15.40': + resolution: {integrity: sha512-PaYyclfmQ++77D8ityYvmmVzHv9aG8ROwt2GfG6/ccloy4Hgf80qtOnzb9VYvPsUT7Ty1uhuDRhv3XYpf62qhQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.15.33': - resolution: {integrity: sha512-/Il4QHSOhV4FekbsDtkrNmKbsX26oSysvgrRswa/RYOHXAkwXDbB4jaeKq6PsJLSPkzJ2KzQ061gtBnk0vNHfA==} + '@swc/core-darwin-x64@1.15.40': + resolution: {integrity: sha512-HbbPzvfLBUXjIB1Ezks+//lNUjmLjfyd63XSwprJgrZaXYdm70kohXPJUWdqKZozolFxbPaO+xtBaiUp6BoueA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.15.33': - resolution: {integrity: sha512-C64hBnBxq4viOPQ8hlx+2lJ23bzZBGnjw7ryALmS+0Q3zHmwO8lw1/DArLENw4Q18/0w5wdEO1k3m1wWNtKGqQ==} + '@swc/core-linux-arm-gnueabihf@1.15.40': + resolution: {integrity: sha512-SlRZsCjOCPR2LvFs0Ri/Xrx/5o5TCt8vl4gW6mX1hEZOG0a625RxzRHpHdAQNGykmAN/7IeaFAJG+QnNmxlHcA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.15.33': - resolution: {integrity: sha512-TRJfnJbX3jqpxRDRoieMzRiCBS5jOmXNb3iQXmcgjFEHKLnAgK1RZRU8Cq1MsPqO4jAJp/ld1G4O3fXuxv85uw==} + '@swc/core-linux-arm64-gnu@1.15.40': + resolution: {integrity: sha512-Q8byxJt2fh8CR3EUX6snBpy47AoBVm+In/+Z3rjDHMjC38ZvR9/gtUUNCT0tfrn4EdVsO8/QPi59nxrxvqxvBQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] libc: [glibc] - '@swc/core-linux-arm64-musl@1.15.33': - resolution: {integrity: sha512-il7tYM+CpUNzieQbwAjFT1P8zqAhmGWNAGhQZBnxurXZ0aNn+5nqYFTEUKNZl7QibtT0uQXzTZrNGHCIj6Y1Og==} + '@swc/core-linux-arm64-musl@1.15.40': + resolution: {integrity: sha512-4z0MgHU+7M0pZDqBN1El7mFXDI1SBwinfcUkAyA4v8QrhOIUOZltySt2aStQLZGrdXVXM4Y4ylfiTC04ED+MoQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] libc: [musl] - '@swc/core-linux-ppc64-gnu@1.15.33': - resolution: {integrity: sha512-ZtNBwN0Z7CFj9Il0FcPaKdjgP7URyKu/3RfH46vq+0paOBqLj4NYldD6Qo//Duif/7IOtAraUfDOmp0PLAufog==} + '@swc/core-linux-ppc64-gnu@1.15.40': + resolution: {integrity: sha512-fLI4iUgeSZu0eRWUXwe6YzPFx9gHbFiPkl8Rp3mJfP8OpNR3nTQCGPvHdDh9xniW7mVvgMY4ni7A4VzqI1KrpA==} engines: {node: '>=10'} cpu: [ppc64] os: [linux] libc: [glibc] - '@swc/core-linux-s390x-gnu@1.15.33': - resolution: {integrity: sha512-De1IyajoOmhOYYjw/lx66bKlyDpHZTueqwpDrWgf5O7T6d1ODeJJO9/OqMBmrBQc5C+dNnlmIufHsp4QVCWufA==} + '@swc/core-linux-s390x-gnu@1.15.40': + resolution: {integrity: sha512-YqeKMAb7d4nQSGMJQ454IlaCENpzcDqhvBE9+CPfdnYpnUXxd+BSrB6Xk0YjW8UyoEhUj4p6quATCxbsp6J3jg==} engines: {node: '>=10'} cpu: [s390x] os: [linux] libc: [glibc] - '@swc/core-linux-x64-gnu@1.15.33': - resolution: {integrity: sha512-mGTH0YxmUN+x6vRN/I6NOk5X0ogNktkwPnJ94IMvR7QjhRDwL0O8RXEDhyUM0YtwWrryBOqaJQBX4zruxEPRGw==} + '@swc/core-linux-x64-gnu@1.15.40': + resolution: {integrity: sha512-7HOuS1iGcme/j/TuL1TfmmLGiMQrjv/GmjyZeydl00FKPtpGXEldwqfI56xgd1YzrzoB2svWjxbGGyQ0TEASxg==} engines: {node: '>=10'} cpu: [x64] os: [linux] libc: [glibc] - '@swc/core-linux-x64-musl@1.15.33': - resolution: {integrity: sha512-hj628ZkSEJf6zMf5VMbYrG2O6QqyTIp2qwY6VlCjvIa9lAEZ5c2lfPblCLVGYubTeLJDxadLB/CxqQYOQABeEQ==} + '@swc/core-linux-x64-musl@1.15.40': + resolution: {integrity: sha512-h4kZYHc7dpc9P9u4brRJaS8Pl7tPVHAeiLSzw7T5RfIJgAoSdaCMKzI/2Uay9gFhaw8uyCDl0L5q37r0EpAfIA==} engines: {node: '>=10'} cpu: [x64] os: [linux] libc: [musl] - '@swc/core-win32-arm64-msvc@1.15.33': - resolution: {integrity: sha512-GV2oohtN2/5+KSccl86VULu3aT+LrISC8uzgSq0FRnikpD+Zwc+sBlXmoKQ+Db6jI57ITUOIB8jRkdGMABC29g==} + '@swc/core-win32-arm64-msvc@1.15.40': + resolution: {integrity: sha512-+mQgKZXSj6mV38Zh05QaxSjUDmGP/R2JWlXZTDLSPkDzHU6p3GxN9eeSf5dfyDVU86946fmCvSzyl/ucImx8+A==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.15.33': - resolution: {integrity: sha512-gtyvzSNR8DHKfFEA2uqb8Ld1myqi6uEg2jyeUq3ikn5ytYs7H8RpZYC8mdy4NXr8hfcdJfCLXPlYaqqfBXpoEQ==} + '@swc/core-win32-ia32-msvc@1.15.40': + resolution: {integrity: sha512-yvwdPLGd25mcj/mNatjNQ0lZujtQD6psH3v9PNmMb+fSzjbNG8KIDxjFWrcV+fsFVLOkyOmdJsFmX7NAFjVyPw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.15.33': - resolution: {integrity: sha512-d6fRqQSkJI+kmMEBWaDQ7TMl8+YjLYbwRUPZQ9DY0ORBJeTzOrG0twvfvlZ2xgw6jA0ScQKgfBm4vHLSLl5Hqg==} + '@swc/core-win32-x64-msvc@1.15.40': + resolution: {integrity: sha512-OXtKsLU1bVtInzzDEAY2sYiF/rl4tvAnLLLpuMp3HzAOQZ5A+i69AKDhA1YLQTaMAqO3vzyYNVAYVRMPtSYD4w==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.15.33': - resolution: {integrity: sha512-jOlwnFV2xhuuZeAUILGFULeR6vDPfijEJ57evfocwznQldLU3w2cZ9bSDryY9ip+AsM3r1NJKzf47V2NXebkeQ==} + '@swc/core@1.15.40': + resolution: {integrity: sha512-2kwzJikRvgtNAG7MwVZY2vEzZjTxKIq5jXOihuSV/8U+Hej8Va22t65aKnJZs3P+NwojZvR8Mf8kyM7O+V8sQg==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -945,31 +945,31 @@ packages: '@swc/types@0.1.26': resolution: {integrity: sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==} - '@tanstack/query-core@5.100.10': - resolution: {integrity: sha512-8UR0yJR+GiQ40m3lPhUr0xbfAupe6GSQiksSBSa9SM2NjezFyxXCIA69/lz8cSoNKZLrw1/PktIyQBJcVeMi3w==} + '@tanstack/query-core@5.100.14': + resolution: {integrity: sha512-5X41dGpxgeaHISCRW2oYwcSycZeULZzAunaudXT9ov1KOTj9xwt0CH6hbwqP1/z74ZWF7rYFnDpyYH07XFcZew==} - '@tanstack/query-devtools@5.100.10': - resolution: {integrity: sha512-3DmJf25hDPus5IpVvp6ujXv6bKV2zPzI9vpbAmpJigsL/H6DPvPjmf7/Q9yVKEke//8fgeQ45abjgnLuyYxAiw==} + '@tanstack/query-devtools@5.100.14': + resolution: {integrity: sha512-g96SmSSQecYTYcyuAMRXr895GplJv01UGt7qttQWPOUyZ5EGz5tbRc589bMc2m5BsPFD6O0PCEAHdbDYNP6UBw==} - '@tanstack/react-query-devtools@5.100.10': - resolution: {integrity: sha512-zes0+o9ef5rAZXJ9f/SeaLs2nufJaeVkZkl/Or9NGrWVF41kL9Od9ED9nCwtQlgiF2VGtrzhEw5AU/igAO+aAg==} + '@tanstack/react-query-devtools@5.100.14': + resolution: {integrity: sha512-JkP5VDgKOw3t/QSA1OABRHEqx8BuNs5MfvZRooNqdvN57SzTuGq3fKR1a2IH5rqa5HDLUm+FOXUEnB9ueHiLzg==} peerDependencies: - '@tanstack/react-query': ^5.100.10 + '@tanstack/react-query': ^5.100.14 react: ^18 || ^19 - '@tanstack/react-query@5.100.10': - resolution: {integrity: sha512-FLaZf2RCrA/Zgp4aiu5tG3TyasTRO7aZ99skxQpr3Hg/zXOhu6yq5FZCYQ/tRaJtM9ylnoK8tFK7PolXQadv6Q==} + '@tanstack/react-query@5.100.14': + resolution: {integrity: sha512-oOr6aRdSFEwWhzxEkD/9ZcItM3+LjBSkeVmadWKwUssAHTsqd/7bOjWrX4AbvEkoEhgAxzN0Xk6H/aYzXiYBAw==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-virtual@3.13.24': - resolution: {integrity: sha512-aIJvz5OSkhNIhZIpYivrxrPTKYsjW9Uzy+sP/mx0S3sev2HyvPb7xmjbYvokzEpfgYHy/HjzJ2zFAETuUfgCpg==} + '@tanstack/react-virtual@3.13.25': + resolution: {integrity: sha512-bmNoqMu6gcAW9JGrKVB0Q1tN1i5RONZF8r1fW0bbE4Oyf3DwEGnzzQJ2OW+Ozg1P4s8PyugkHg2ULZoFQN+cqw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/virtual-core@3.14.0': - resolution: {integrity: sha512-JLANqGy/D6k4Ujmh8Tr25lGimuOXNiaVyXaCAZS0W+1390sADdGnyUdSWNIfd49gebtIxGMij4IktRVzrdr12Q==} + '@tanstack/virtual-core@3.15.0': + resolution: {integrity: sha512-0AwPGx0I8QxPYjAxShT/+z+ZOe9u8mW5rsXvivCTjRfRmz9a43+3mRyi4wwlyoUqOC56q/jatKa0Bh9M99BEHQ==} '@tauri-apps/api@2.11.0': resolution: {integrity: sha512-7CinYODhky9lmO23xHnUFv0Xt43fbtWMyxZcLcRBlFkcgXKuEirBvHpmtJ89YMhyeGcq20Wuc47Fa4XjyniywA==} @@ -1143,8 +1143,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@25.8.0': - resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==} + '@types/node@25.9.1': + resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -1154,8 +1154,8 @@ packages: peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.14': - resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + '@types/react@19.2.15': + resolution: {integrity: sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==} '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -1248,8 +1248,8 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.30: - resolution: {integrity: sha512-xjOFN16Ha1+Rz4nFYKqHU/LSB+gx/Vi3yQLX7r7sAW+Wa+8hhF2h4pvqTrTMc8+WcDBEunnUurr46Jvv0jk3Vg==} + baseline-browser-mapping@2.10.32: + resolution: {integrity: sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==} engines: {node: '>=6.0.0'} hasBin: true @@ -1300,8 +1300,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001792: - resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} + caniuse-lite@1.0.30001793: + resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1560,8 +1560,8 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - electron-to-chromium@1.5.357: - resolution: {integrity: sha512-NHlTIQDK8fmVwHwuIzmXYEJ1Ewq3D9wDNc0cWXxDGysP6Pb21giwGNkxiTifyKy/4SoPuN5l6GLP1W9Sv7zB2g==} + electron-to-chromium@1.5.361: + resolution: {integrity: sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1589,8 +1589,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} es-set-tostringtag@2.1.0: @@ -1650,8 +1650,8 @@ packages: fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} - framer-motion@12.38.0: - resolution: {integrity: sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==} + framer-motion@12.40.0: + resolution: {integrity: sha512-uaBd3qC1v3KQqBEjwTUd183K6PbS+j0yR9w9VmEOLWA/tnUcSn8Xa3uck7t4dgpDoUss8xQTcj8W2L07lrnLFg==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -1774,8 +1774,8 @@ packages: html-dom-parser@7.1.0: resolution: {integrity: sha512-83BgaFSW/Sj6QTotGenvPvKfGxFzpFfrJNYes77mzqnq+YjVm12d4qeG0+108w4ejnam/+nCnnLuyyJlXkuPtA==} - html-react-parser@6.1.1: - resolution: {integrity: sha512-TitVBqKNyZYGVutHdALEtaNZV29QmuBgJcqeWnF4voLunG6YBlMpnm5XCVHQhxhUPW14nw1LW27NReGbCfPU0A==} + html-react-parser@6.1.2: + resolution: {integrity: sha512-mV2hG5kvuC7tqND9kWwzOqlnWue8KLf8/OtT46WFsH9qvk/4t3D3SQTBgGRykzmroRUA8md63965DFzljNjHQQ==} peerDependencies: '@types/react': 0.14 || 15 || 16 || 17 || 18 || 19 react: 0.14 || 15 || 16 || 17 || 18 || 19 @@ -1946,8 +1946,9 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - itertools@2.6.0: - resolution: {integrity: sha512-nCqtnZTEGq8Bcs+W3kqdYL77tV6sGuQCA1WvKeA8L5Bx+BUMWcyHfJTCY38yNf51EE0/uB9UQHB84AM1j+djIw==} + itertools@2.7.1: + resolution: {integrity: sha512-xrbTDDdUfkJhM4EzYOwwzEf2ksPT5WLgQ5i2X9X5yUpcmXJPEjeAnpMl1tIrYDzuCD19/AEH+cbLunQHGn8v7w==} + engines: {node: '>=22'} js-base64@3.7.8: resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} @@ -2052,8 +2053,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + linkify-it@5.0.1: + resolution: {integrity: sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==} little-state-machine@4.8.1: resolution: {integrity: sha512-liPHqaWMQ7rzZryQUDnbZ1Gclnnai3dIyaJ0nAgwZRXMzqbYrydrlCI0NDojRUbE5VYh5vu6hygEUZiH77nQkQ==} @@ -2086,8 +2087,8 @@ packages: lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - markdown-it@14.1.1: - resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} + markdown-it@14.2.0: + resolution: {integrity: sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==} hasBin: true math-intrinsics@1.1.0: @@ -2217,14 +2218,14 @@ packages: resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} engines: {node: '>=10'} - motion-dom@12.38.0: - resolution: {integrity: sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==} + motion-dom@12.40.0: + resolution: {integrity: sha512-HxU3ZaBwNPVQUBQf1xxgq+7JrPNZvjLVxgbpEZL7RrWJnsxOf0/OM+yrHG9ogLQ31Do/r57Oz2gQWPK+6q62mg==} - motion-utils@12.36.0: - resolution: {integrity: sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==} + motion-utils@12.39.0: + resolution: {integrity: sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==} - motion@12.38.0: - resolution: {integrity: sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w==} + motion@12.40.0: + resolution: {integrity: sha512-yjrHUrBFW6kQvjJwRsoiPSAhC5tRwRqNGJWmiJ4CrGnbKp0V88AdzkhBmDoqIsIPfarOe0Uddd37Xq43/gIocA==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -2254,8 +2255,9 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-releases@2.0.44: - resolution: {integrity: sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==} + node-releases@2.0.46: + resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} + engines: {node: '>=18'} normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -2348,8 +2350,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.14: - resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} prettier@2.8.8: @@ -2397,8 +2399,8 @@ packages: peerDependencies: react: ^19.2.6 - react-hook-form@7.76.0: - resolution: {integrity: sha512-eKtLGgFeSgkHqQD8J59AMZ9a4uD1D83iSIzt4YlTGD7liDen5rrjcUO1rVIGd9yC1gofryjtHbv+4ny4hkLWlw==} + react-hook-form@7.76.1: + resolution: {integrity: sha512-rYM7tPiWlu3nZchkR/ex7piyzui2vFPyaLnXnI/RnblB/L4qfMmyses8llJVtF1NpE9WBBsJlGtcSZzPCXW1qQ==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 @@ -2531,8 +2533,8 @@ packages: engines: {node: '>= 0.4'} hasBin: true - rolldown@1.0.1: - resolution: {integrity: sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==} + rolldown@1.0.2: + resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -2591,8 +2593,8 @@ packages: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} - shell-quote@1.8.3: - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + shell-quote@1.8.4: + resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==} engines: {node: '>= 0.4'} side-channel-list@1.0.1: @@ -2675,6 +2677,9 @@ packages: style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + style-to-js@2.0.0: + resolution: {integrity: sha512-amkl/SwHF/Gb430+eOiN+XToZ6VsD2nota1kCXps4k1xagZOniEVNm8zKYm7RrGm2Q6d6hjnZdqebFIunoSJng==} + style-to-object@1.0.14: resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} @@ -2823,8 +2828,8 @@ packages: victory-vendor@37.3.6: resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} - vite@8.0.13: - resolution: {integrity: sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==} + vite@8.0.14: + resolution: {integrity: sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3128,7 +3133,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6)': + '@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6)': dependencies: '@babel/runtime': 7.29.2 '@emotion/babel-plugin': 11.13.5 @@ -3140,7 +3145,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 transitivePeerDependencies: - supports-color @@ -3154,18 +3159,18 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)': + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6)': dependencies: '@babel/runtime': 7.29.2 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.4.0 - '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6) + '@emotion/react': 11.14.0(@types/react@19.2.15)(react@19.2.6) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.6) '@emotion/utils': 1.4.2 react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 transitivePeerDependencies: - supports-color @@ -3212,10 +3217,10 @@ snapshots: '@shikijs/types': 3.23.0 '@shikijs/vscode-textmate': 10.0.2 - '@hookform/devtools@4.4.0(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@hookform/devtools@4.4.0(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6) + '@emotion/react': 11.14.0(@types/react@19.2.15)(react@19.2.6) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6) '@types/lodash': 4.17.24 little-state-machine: 4.8.1(react@19.2.6) lodash: 4.18.1 @@ -3228,9 +3233,9 @@ snapshots: - '@types/react' - supports-color - '@hookform/resolvers@3.10.0(react-hook-form@7.76.0(react@19.2.6))': + '@hookform/resolvers@3.10.0(react-hook-form@7.76.1(react@19.2.6))': dependencies: - react-hook-form: 7.76.0(react@19.2.6) + react-hook-form: 7.76.1(react@19.2.6) '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -3258,7 +3263,7 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true - '@oxc-project/types@0.130.0': {} + '@oxc-project/types@0.132.0': {} '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -3335,7 +3340,7 @@ snapshots: '@react-hook/passive-layout-effect': 1.2.1(react@19.2.6) react: 19.2.6 - '@reduxjs/toolkit@2.12.0(react-redux@9.3.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1))(react@19.2.6)': + '@reduxjs/toolkit@2.12.0(react-redux@9.3.0(@types/react@19.2.15)(react@19.2.6)(redux@5.0.1))(react@19.2.6)': dependencies: '@standard-schema/spec': 1.1.0 '@standard-schema/utils': 0.3.0 @@ -3345,57 +3350,57 @@ snapshots: reselect: 5.1.1 optionalDependencies: react: 19.2.6 - react-redux: 9.3.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1) + react-redux: 9.3.0(@types/react@19.2.15)(react@19.2.6)(redux@5.0.1) '@remix-run/router@1.23.2': {} - '@rolldown/binding-android-arm64@1.0.1': + '@rolldown/binding-android-arm64@1.0.2': optional: true - '@rolldown/binding-darwin-arm64@1.0.1': + '@rolldown/binding-darwin-arm64@1.0.2': optional: true - '@rolldown/binding-darwin-x64@1.0.1': + '@rolldown/binding-darwin-x64@1.0.2': optional: true - '@rolldown/binding-freebsd-x64@1.0.1': + '@rolldown/binding-freebsd-x64@1.0.2': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.1': + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.1': + '@rolldown/binding-linux-arm64-gnu@1.0.2': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.1': + '@rolldown/binding-linux-arm64-musl@1.0.2': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.1': + '@rolldown/binding-linux-ppc64-gnu@1.0.2': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.1': + '@rolldown/binding-linux-s390x-gnu@1.0.2': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.1': + '@rolldown/binding-linux-x64-gnu@1.0.2': optional: true - '@rolldown/binding-linux-x64-musl@1.0.1': + '@rolldown/binding-linux-x64-musl@1.0.2': optional: true - '@rolldown/binding-openharmony-arm64@1.0.1': + '@rolldown/binding-openharmony-arm64@1.0.2': optional: true - '@rolldown/binding-wasm32-wasi@1.0.1': + '@rolldown/binding-wasm32-wasi@1.0.2': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.1': + '@rolldown/binding-win32-arm64-msvc@1.0.2': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.1': + '@rolldown/binding-win32-x64-msvc@1.0.2': optional: true '@rolldown/pluginutils@1.0.1': {} @@ -3552,59 +3557,59 @@ snapshots: transitivePeerDependencies: - typescript - '@swc/core-darwin-arm64@1.15.33': + '@swc/core-darwin-arm64@1.15.40': optional: true - '@swc/core-darwin-x64@1.15.33': + '@swc/core-darwin-x64@1.15.40': optional: true - '@swc/core-linux-arm-gnueabihf@1.15.33': + '@swc/core-linux-arm-gnueabihf@1.15.40': optional: true - '@swc/core-linux-arm64-gnu@1.15.33': + '@swc/core-linux-arm64-gnu@1.15.40': optional: true - '@swc/core-linux-arm64-musl@1.15.33': + '@swc/core-linux-arm64-musl@1.15.40': optional: true - '@swc/core-linux-ppc64-gnu@1.15.33': + '@swc/core-linux-ppc64-gnu@1.15.40': optional: true - '@swc/core-linux-s390x-gnu@1.15.33': + '@swc/core-linux-s390x-gnu@1.15.40': optional: true - '@swc/core-linux-x64-gnu@1.15.33': + '@swc/core-linux-x64-gnu@1.15.40': optional: true - '@swc/core-linux-x64-musl@1.15.33': + '@swc/core-linux-x64-musl@1.15.40': optional: true - '@swc/core-win32-arm64-msvc@1.15.33': + '@swc/core-win32-arm64-msvc@1.15.40': optional: true - '@swc/core-win32-ia32-msvc@1.15.33': + '@swc/core-win32-ia32-msvc@1.15.40': optional: true - '@swc/core-win32-x64-msvc@1.15.33': + '@swc/core-win32-x64-msvc@1.15.40': optional: true - '@swc/core@1.15.33': + '@swc/core@1.15.40': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.26 optionalDependencies: - '@swc/core-darwin-arm64': 1.15.33 - '@swc/core-darwin-x64': 1.15.33 - '@swc/core-linux-arm-gnueabihf': 1.15.33 - '@swc/core-linux-arm64-gnu': 1.15.33 - '@swc/core-linux-arm64-musl': 1.15.33 - '@swc/core-linux-ppc64-gnu': 1.15.33 - '@swc/core-linux-s390x-gnu': 1.15.33 - '@swc/core-linux-x64-gnu': 1.15.33 - '@swc/core-linux-x64-musl': 1.15.33 - '@swc/core-win32-arm64-msvc': 1.15.33 - '@swc/core-win32-ia32-msvc': 1.15.33 - '@swc/core-win32-x64-msvc': 1.15.33 + '@swc/core-darwin-arm64': 1.15.40 + '@swc/core-darwin-x64': 1.15.40 + '@swc/core-linux-arm-gnueabihf': 1.15.40 + '@swc/core-linux-arm64-gnu': 1.15.40 + '@swc/core-linux-arm64-musl': 1.15.40 + '@swc/core-linux-ppc64-gnu': 1.15.40 + '@swc/core-linux-s390x-gnu': 1.15.40 + '@swc/core-linux-x64-gnu': 1.15.40 + '@swc/core-linux-x64-musl': 1.15.40 + '@swc/core-win32-arm64-msvc': 1.15.40 + '@swc/core-win32-ia32-msvc': 1.15.40 + '@swc/core-win32-x64-msvc': 1.15.40 '@swc/counter@0.1.3': {} @@ -3612,28 +3617,28 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@tanstack/query-core@5.100.10': {} + '@tanstack/query-core@5.100.14': {} - '@tanstack/query-devtools@5.100.10': {} + '@tanstack/query-devtools@5.100.14': {} - '@tanstack/react-query-devtools@5.100.10(@tanstack/react-query@5.100.10(react@19.2.6))(react@19.2.6)': + '@tanstack/react-query-devtools@5.100.14(@tanstack/react-query@5.100.14(react@19.2.6))(react@19.2.6)': dependencies: - '@tanstack/query-devtools': 5.100.10 - '@tanstack/react-query': 5.100.10(react@19.2.6) + '@tanstack/query-devtools': 5.100.14 + '@tanstack/react-query': 5.100.14(react@19.2.6) react: 19.2.6 - '@tanstack/react-query@5.100.10(react@19.2.6)': + '@tanstack/react-query@5.100.14(react@19.2.6)': dependencies: - '@tanstack/query-core': 5.100.10 + '@tanstack/query-core': 5.100.14 react: 19.2.6 - '@tanstack/react-virtual@3.13.24(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@tanstack/react-virtual@3.13.25(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@tanstack/virtual-core': 3.14.0 + '@tanstack/virtual-core': 3.15.0 react: 19.2.6 react-dom: 19.2.6(react@19.2.6) - '@tanstack/virtual-core@3.14.0': {} + '@tanstack/virtual-core@3.15.0': {} '@tauri-apps/api@2.11.0': {} @@ -3787,17 +3792,17 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@25.8.0': + '@types/node@25.9.1': dependencies: undici-types: 7.24.6 '@types/parse-json@4.0.2': {} - '@types/react-dom@19.2.3(@types/react@19.2.14)': + '@types/react-dom@19.2.3(@types/react@19.2.15)': dependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@types/react@19.2.14': + '@types/react@19.2.15': dependencies: csstype: 3.2.3 @@ -3816,18 +3821,18 @@ snapshots: '@use-gesture/core': 10.3.1 react: 19.2.6 - '@vitejs/plugin-react-swc@4.3.1(vite@8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0))': + '@vitejs/plugin-react-swc@4.3.1(vite@8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - '@swc/core': 1.15.33 - vite: 8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0) + '@swc/core': 1.15.40 + vite: 8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@6.0.2(vite@8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0))': + '@vitejs/plugin-react@6.0.2(vite@8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0) + vite: 8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0) ansi-regex@5.0.1: {} @@ -3858,13 +3863,13 @@ snapshots: async-function@1.0.0: {} - autoprefixer@10.5.0(postcss@8.5.14): + autoprefixer@10.5.0(postcss@8.5.15): dependencies: browserslist: 4.28.2 - caniuse-lite: 1.0.30001792 + caniuse-lite: 1.0.30001793 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.14 + postcss: 8.5.15 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -3883,7 +3888,7 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.10.30: {} + baseline-browser-mapping@2.10.32: {} boolbase@1.0.0: {} @@ -3902,10 +3907,10 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.30 - caniuse-lite: 1.0.30001792 - electron-to-chromium: 1.5.357 - node-releases: 2.0.44 + baseline-browser-mapping: 2.10.32 + caniuse-lite: 1.0.30001793 + electron-to-chromium: 1.5.361 + node-releases: 2.0.46 update-browserslist-db: 1.2.3(browserslist@4.28.2) byte-size@9.0.1: {} @@ -3931,7 +3936,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001792: {} + caniuse-lite@1.0.30001793: {} ccount@2.0.1: {} @@ -4188,7 +4193,7 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - electron-to-chromium@1.5.357: {} + electron-to-chromium@1.5.361: {} emoji-regex@8.0.0: {} @@ -4212,7 +4217,7 @@ snapshots: data-view-byte-offset: 1.0.1 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 es-set-tostringtag: 2.1.0 es-to-primitive: 1.3.0 function.prototype.name: 1.1.8 @@ -4261,7 +4266,7 @@ snapshots: es-errors@1.3.0: {} - es-object-atoms@1.1.1: + es-object-atoms@1.1.2: dependencies: es-errors: 1.3.0 @@ -4308,10 +4313,10 @@ snapshots: fraction.js@5.3.4: {} - framer-motion@12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + framer-motion@12.40.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - motion-dom: 12.38.0 - motion-utils: 12.36.0 + motion-dom: 12.40.0 + motion-utils: 12.39.0 tslib: 2.8.1 optionalDependencies: '@emotion/is-prop-valid': 1.4.0 @@ -4347,7 +4352,7 @@ snapshots: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 function-bind: 1.1.2 get-proto: 1.0.1 gopd: 1.2.0 @@ -4358,7 +4363,7 @@ snapshots: get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 get-symbol-description@1.1.0: dependencies: @@ -4450,15 +4455,15 @@ snapshots: domhandler: 6.0.1 htmlparser2: 12.0.0 - html-react-parser@6.1.1(@types/react@19.2.14)(react@19.2.6): + html-react-parser@6.1.2(@types/react@19.2.15)(react@19.2.6): dependencies: domhandler: 6.0.1 html-dom-parser: 7.1.0 react: 19.2.6 react-property: 2.0.2 - style-to-js: 1.1.21 + style-to-js: 2.0.0 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 html-url-attributes@3.0.1: {} @@ -4626,7 +4631,7 @@ snapshots: isexe@2.0.0: {} - itertools@2.6.0: {} + itertools@2.7.1: {} js-base64@3.7.8: {} @@ -4695,7 +4700,7 @@ snapshots: lines-and-columns@1.2.4: {} - linkify-it@5.0.0: + linkify-it@5.0.1: dependencies: uc.micro: 2.1.0 @@ -4730,11 +4735,11 @@ snapshots: lunr@2.3.9: {} - markdown-it@14.1.1: + markdown-it@14.2.0: dependencies: argparse: 2.0.1 entities: 4.5.0 - linkify-it: 5.0.0 + linkify-it: 5.0.1 mdurl: 2.0.0 punycode.js: 2.3.1 uc.micro: 2.1.0 @@ -4838,9 +4843,9 @@ snapshots: memorystream@0.3.1: {} - merge-refs@2.0.0(@types/react@19.2.14): + merge-refs@2.0.0(@types/react@19.2.15): optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 micromark-core-commonmark@2.0.3: dependencies: @@ -4991,15 +4996,15 @@ snapshots: dependencies: brace-expansion: 2.1.0 - motion-dom@12.38.0: + motion-dom@12.40.0: dependencies: - motion-utils: 12.36.0 + motion-utils: 12.39.0 - motion-utils@12.36.0: {} + motion-utils@12.39.0: {} - motion@12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + motion@12.40.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - framer-motion: 12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + framer-motion: 12.40.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) tslib: 2.8.1 optionalDependencies: '@emotion/is-prop-valid': 1.4.0 @@ -5020,7 +5025,7 @@ snapshots: node-addon-api@7.1.1: optional: true - node-releases@2.0.44: {} + node-releases@2.0.46: {} normalize-package-data@2.5.0: dependencies: @@ -5038,7 +5043,7 @@ snapshots: minimatch: 3.1.5 pidtree: 0.3.1 read-pkg: 3.0.0 - shell-quote: 1.8.3 + shell-quote: 1.8.4 string.prototype.padend: 3.1.6 nth-check@2.1.1: @@ -5056,7 +5061,7 @@ snapshots: call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 has-symbols: 1.1.0 object-keys: 1.1.1 @@ -5120,7 +5125,7 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.14: + postcss@8.5.15: dependencies: nanoid: 3.3.12 picocolors: 1.1.1 @@ -5158,7 +5163,7 @@ snapshots: react: 19.2.6 scheduler: 0.27.0 - react-hook-form@7.76.0(react@19.2.6): + react-hook-form@7.76.1(react@19.2.6): dependencies: react: 19.2.6 @@ -5173,11 +5178,11 @@ snapshots: dependencies: react: 19.2.6 - react-markdown@10.1.0(@types/react@19.2.14)(react@19.2.6): + react-markdown@10.1.0(@types/react@19.2.15)(react@19.2.6): dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@types/react': 19.2.14 + '@types/react': 19.2.15 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 @@ -5199,13 +5204,13 @@ snapshots: qr.js: 0.0.0 react: 19.2.6 - react-redux@9.3.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1): + react-redux@9.3.0(@types/react@19.2.15)(react@19.2.6)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 react: 19.2.6 use-sync-external-store: 1.6.0(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 redux: 5.0.1 react-router-dom@6.30.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6): @@ -5241,9 +5246,9 @@ snapshots: readdirp@4.1.2: {} - recharts@3.8.1(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react-is@16.13.1)(react@19.2.6)(redux@5.0.1): + recharts@3.8.1(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react-is@16.13.1)(react@19.2.6)(redux@5.0.1): dependencies: - '@reduxjs/toolkit': 2.12.0(react-redux@9.3.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1))(react@19.2.6) + '@reduxjs/toolkit': 2.12.0(react-redux@9.3.0(@types/react@19.2.15)(react@19.2.6)(redux@5.0.1))(react@19.2.6) clsx: 2.1.1 decimal.js-light: 2.5.1 es-toolkit: 1.46.1 @@ -5252,7 +5257,7 @@ snapshots: react: 19.2.6 react-dom: 19.2.6(react@19.2.6) react-is: 16.13.1 - react-redux: 9.3.0(@types/react@19.2.14)(react@19.2.6)(redux@5.0.1) + react-redux: 9.3.0(@types/react@19.2.15)(react@19.2.6)(redux@5.0.1) reselect: 5.1.1 tiny-invariant: 1.3.3 use-sync-external-store: 1.6.0(react@19.2.6) @@ -5273,7 +5278,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.24.2 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 get-intrinsic: 1.3.0 get-proto: 1.0.1 which-builtin-type: 1.2.1 @@ -5322,26 +5327,26 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - rolldown@1.0.1: + rolldown@1.0.2: dependencies: - '@oxc-project/types': 0.130.0 + '@oxc-project/types': 0.132.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.1 - '@rolldown/binding-darwin-arm64': 1.0.1 - '@rolldown/binding-darwin-x64': 1.0.1 - '@rolldown/binding-freebsd-x64': 1.0.1 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.1 - '@rolldown/binding-linux-arm64-gnu': 1.0.1 - '@rolldown/binding-linux-arm64-musl': 1.0.1 - '@rolldown/binding-linux-ppc64-gnu': 1.0.1 - '@rolldown/binding-linux-s390x-gnu': 1.0.1 - '@rolldown/binding-linux-x64-gnu': 1.0.1 - '@rolldown/binding-linux-x64-musl': 1.0.1 - '@rolldown/binding-openharmony-arm64': 1.0.1 - '@rolldown/binding-wasm32-wasi': 1.0.1 - '@rolldown/binding-win32-arm64-msvc': 1.0.1 - '@rolldown/binding-win32-x64-msvc': 1.0.1 + '@rolldown/binding-android-arm64': 1.0.2 + '@rolldown/binding-darwin-arm64': 1.0.2 + '@rolldown/binding-darwin-x64': 1.0.2 + '@rolldown/binding-freebsd-x64': 1.0.2 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.2 + '@rolldown/binding-linux-arm64-gnu': 1.0.2 + '@rolldown/binding-linux-arm64-musl': 1.0.2 + '@rolldown/binding-linux-ppc64-gnu': 1.0.2 + '@rolldown/binding-linux-s390x-gnu': 1.0.2 + '@rolldown/binding-linux-x64-gnu': 1.0.2 + '@rolldown/binding-linux-x64-musl': 1.0.2 + '@rolldown/binding-openharmony-arm64': 1.0.2 + '@rolldown/binding-wasm32-wasi': 1.0.2 + '@rolldown/binding-win32-arm64-msvc': 1.0.2 + '@rolldown/binding-win32-x64-msvc': 1.0.2 rxjs@7.8.2: dependencies: @@ -5402,7 +5407,7 @@ snapshots: dependencies: dunder-proto: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 shebang-command@1.2.0: dependencies: @@ -5410,7 +5415,7 @@ snapshots: shebang-regex@1.0.0: {} - shell-quote@1.8.3: {} + shell-quote@1.8.4: {} side-channel-list@1.0.1: dependencies: @@ -5481,7 +5486,7 @@ snapshots: call-bind: 1.0.9 define-properties: 1.2.1 es-abstract: 1.24.2 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 string.prototype.trim@1.2.10: dependencies: @@ -5490,7 +5495,7 @@ snapshots: define-data-property: 1.1.4 define-properties: 1.2.1 es-abstract: 1.24.2 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 has-property-descriptors: 1.0.2 string.prototype.trimend@1.0.9: @@ -5498,13 +5503,13 @@ snapshots: call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.9 define-properties: 1.2.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 stringify-entities@4.0.4: dependencies: @@ -5521,6 +5526,10 @@ snapshots: dependencies: style-to-object: 1.0.14 + style-to-js@2.0.0: + dependencies: + style-to-object: 1.0.14 + style-to-object@1.0.14: dependencies: inline-style-parser: 0.2.7 @@ -5601,7 +5610,7 @@ snapshots: dependencies: '@gerrit0/mini-shiki': 3.23.0 lunr: 2.3.9 - markdown-it: 14.1.1 + markdown-it: 14.2.0 minimatch: 10.2.5 typescript: 5.9.3 yaml: 2.9.0 @@ -5711,15 +5720,15 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite@8.0.13(@types/node@25.8.0)(sass@1.99.0)(yaml@2.9.0): + vite@8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.14 - rolldown: 1.0.1 + postcss: 8.5.15 + rolldown: 1.0.2 tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 25.8.0 + '@types/node': 25.9.1 fsevents: 2.3.3 sass: 1.99.0 yaml: 2.9.0 @@ -5799,9 +5808,9 @@ snapshots: zod@3.25.76: {} - zustand@5.0.13(@types/react@19.2.14)(immer@11.1.8)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)): + zustand@5.0.13(@types/react@19.2.15)(immer@11.1.8)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)): optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 immer: 11.1.8 react: 19.2.6 use-sync-external-store: 1.6.0(react@19.2.6) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 65c830c84..8e865a77d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,3 +2,4 @@ allowBuilds: '@parcel/watcher': true '@swc/core': true esbuild: true + itertools: false diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 087a3b831..70af8679f 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -495,9 +495,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-rs" @@ -642,12 +642,6 @@ dependencies = [ "digest", ] -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - [[package]] name = "block-buffer" version = "0.10.4" @@ -744,9 +738,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "byte-unit" @@ -1034,35 +1028,6 @@ dependencies = [ "cc", ] -[[package]] -name = "cocoa" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad36507aeb7e16159dfe68db81ccc27571c3ccd4b76fb2fb72fc59e7a4b1b64c" -dependencies = [ - "bitflags 2.11.1", - "block", - "cocoa-foundation", - "core-foundation 0.10.1", - "core-graphics 0.24.0", - "foreign-types 0.5.0", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d" -dependencies = [ - "bitflags 2.11.1", - "block", - "core-foundation 0.10.1", - "core-graphics-types", - "objc", -] - [[package]] name = "colorchoice" version = "1.0.5" @@ -1176,19 +1141,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "core-graphics" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" -dependencies = [ - "bitflags 2.11.1", - "core-foundation 0.10.1", - "core-graphics-types", - "foreign-types 0.5.0", - "libc", -] - [[package]] name = "core-graphics" version = "0.25.0" @@ -1463,7 +1415,6 @@ dependencies = [ "block2 0.6.2", "chrono", "clap", - "cocoa", "common", "dark-light", "defguard_wireguard_rs", @@ -1473,8 +1424,8 @@ dependencies = [ "known-folders", "log", "nix", - "objc", "objc2 0.6.4", + "objc2-app-kit", "objc2-foundation 0.3.2", "objc2-network-extension", "os_info", @@ -3288,9 +3239,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" dependencies = [ "cfg-if", "futures-util", @@ -3531,15 +3482,6 @@ dependencies = [ "time", ] -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - [[package]] name = "markup5ever" version = "0.38.0" @@ -3925,15 +3867,6 @@ dependencies = [ "libc", ] -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", -] - [[package]] name = "objc-sys" version = "0.3.5" @@ -3968,10 +3901,17 @@ checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ "bitflags 2.11.1", "block2 0.6.2", + "libc", "objc2 0.6.4", + "objc2-cloud-kit", + "objc2-core-data", "objc2-core-foundation", "objc2-core-graphics", + "objc2-core-image", + "objc2-core-text", + "objc2-core-video", "objc2-foundation 0.3.2", + "objc2-quartz-core", ] [[package]] @@ -3991,6 +3931,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ + "bitflags 2.11.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -4051,6 +3992,19 @@ dependencies = [ "objc2-core-graphics", ] +[[package]] +name = "objc2-core-video" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" +dependencies = [ + "bitflags 2.11.1", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-io-surface", +] + [[package]] name = "objc2-encode" version = "4.1.0" @@ -6352,14 +6306,14 @@ dependencies = [ [[package]] name = "tao" -version = "0.35.2" +version = "0.35.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33f7f9e486ade65fcf1e45c440f9236c904f5c1002cdc7fc6ae582777345ce4" +checksum = "d1c93047acf68669466a34690ac58cca7010bd1b201e1ec86f1fd0a75d3dd4a9" dependencies = [ "bitflags 2.11.1", "block2 0.6.2", "core-foundation 0.10.1", - "core-graphics 0.25.0", + "core-graphics", "crossbeam-channel", "dbus", "dispatch2", @@ -7939,9 +7893,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" dependencies = [ "cfg-if", "once_cell", @@ -7952,9 +7906,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" dependencies = [ "js-sys", "wasm-bindgen", @@ -7962,9 +7916,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7972,9 +7926,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" dependencies = [ "bumpalo", "proc-macro2", @@ -7985,9 +7939,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" dependencies = [ "unicode-ident", ] @@ -8111,9 +8065,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 3a347acf5..4ab353d8c 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -124,12 +124,11 @@ x25519-dalek = { version = "2", features = [ ] } [target.'cfg(target_os = "macos")'.dependencies] -cocoa = "0.26" block2 = "0.6" objc2 = "0.6" +objc2-app-kit = "0.3" objc2-foundation = "0.3" objc2-network-extension = "0.3" -objc = "0.2" [target.'cfg(unix)'.dependencies] nix = { version = "0.31", features = ["user", "fs"] } diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 15c100293..75811dae7 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -261,6 +261,8 @@ fn main() { let _ = app.opener().open_url(REPORT_URL, None::<&str>); } }); + + app.set_dock_visibility(false); } // Register for Linux and debug Windows builds. diff --git a/src-tauri/src/window_manager/macos.rs b/src-tauri/src/window_manager/macos.rs index c1cdd371e..42da58de4 100644 --- a/src-tauri/src/window_manager/macos.rs +++ b/src-tauri/src/window_manager/macos.rs @@ -1,66 +1,46 @@ #![allow(deprecated)] -use tauri::{AppHandle, LogicalPosition, Manager, Monitor, PhysicalSize, Position, WebviewWindow}; - -#[cfg(target_os = "macos")] -use tauri::Runtime; - -use crate::appstate::AppState; -use crate::window_manager::{WindowManager, NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID}; - -#[cfg(target_os = "macos")] -use cocoa::{ - appkit::{NSView, NSWindow, NSWindowButton, NSWindowStyleMask, NSWindowTitleVisibility}, - base::id, +use objc2_app_kit::{ + NSClosableWindowMask, NSFullSizeContentViewWindowMask, NSMiniaturizableWindowMask, + NSResizableWindowMask, NSTitledWindowMask, NSWindow, NSWindowButton, +}; +use tauri::{ + AppHandle, LogicalPosition, LogicalSize, Manager, Monitor, Position, Runtime, WebviewWindow, }; -#[cfg(target_os = "macos")] -use objc::{msg_send, sel, sel_impl}; +use crate::{appstate::AppState, window_manager::WINDOW_GAP}; -#[cfg(target_os = "macos")] -pub fn enable_rounded_corners(window: WebviewWindow) -> Result<(), String> { +pub fn enable_rounded_corners(window: &WebviewWindow) -> Result<(), String> { window .with_webview(move |webview| { - unsafe { - let ns_window = webview.ns_window() as id; - - let mut style_mask = ns_window.styleMask(); - - // Add necessary styles for rounded corners - style_mask |= NSWindowStyleMask::NSFullSizeContentViewWindowMask; - style_mask |= NSWindowStyleMask::NSTitledWindowMask; - style_mask |= NSWindowStyleMask::NSClosableWindowMask; - style_mask |= NSWindowStyleMask::NSMiniaturizableWindowMask; - style_mask |= NSWindowStyleMask::NSResizableWindowMask; - - ns_window.setStyleMask_(style_mask); - ns_window.setTitlebarAppearsTransparent_(cocoa::base::YES); - - // Hide the window title - ns_window.setTitleVisibility_(NSWindowTitleVisibility::NSWindowTitleHidden); - - // Hide the standard window buttons (close, minimize, zoom) - let close_button = - ns_window.standardWindowButton_(NSWindowButton::NSWindowCloseButton); - if !close_button.is_null() { - let _: () = msg_send![close_button, setHidden: cocoa::base::YES]; - } - let miniaturize_button = - ns_window.standardWindowButton_(NSWindowButton::NSWindowMiniaturizeButton); - if !miniaturize_button.is_null() { - let _: () = msg_send![miniaturize_button, setHidden: cocoa::base::YES]; - } - let zoom_button = - ns_window.standardWindowButton_(NSWindowButton::NSWindowZoomButton); - if !zoom_button.is_null() { - let _: () = msg_send![zoom_button, setHidden: cocoa::base::YES]; - } - - let content_view = ns_window.contentView(); - content_view.setWantsLayer(cocoa::base::YES); + let ns_window = unsafe { &*webview.ns_window().cast::() }; + let mut style_mask = ns_window.styleMask(); + + // Add necessary styles for rounded corners. + style_mask |= NSFullSizeContentViewWindowMask; + style_mask |= NSTitledWindowMask; + style_mask |= NSClosableWindowMask; + style_mask |= NSMiniaturizableWindowMask; + style_mask |= NSResizableWindowMask; + + ns_window.setStyleMask(style_mask); + ns_window.setTitlebarAppearsTransparent(true); + + // Hide the standard window buttons (close, minimize, zoom) + if let Some(close_button) = ns_window.standardWindowButton(NSWindowButton::CloseButton) + { + close_button.setHidden(true); + } + if let Some(miniaturize_button) = + ns_window.standardWindowButton(NSWindowButton::MiniaturizeButton) + { + miniaturize_button.setHidden(true); + } + if let Some(zoom_button) = ns_window.standardWindowButton(NSWindowButton::ZoomButton) { + zoom_button.setHidden(true); } }) - .map_err(|e| e.to_string()) + .map_err(|err| err.to_string()) } /// Try to get monitor at the given position, with a fall back to primary monitor, and then to the @@ -85,22 +65,22 @@ fn get_monitor_for_position(app: &AppHandle, x: f64, y: f64) -> Option fn get_tray_window_position( app: &AppHandle, - size: PhysicalSize, + window_size: LogicalSize, ) -> Option> { let app_state = app.state::(); - let tray_click_position = app_state.tray_click_position.lock().unwrap().to_owned(); + let mut x; + let mut y; - if let Some(tray_position) = tray_click_position { + if let Some(tray_position) = *app_state.tray_click_position.lock().unwrap() { let monitor = get_monitor_for_position(app, tray_position.x, tray_position.y)?; let scale_factor = monitor.scale_factor(); let monitor_position = monitor.position().to_logical::(scale_factor); let monitor_size = monitor.size().to_logical::(scale_factor); let tray_position = tray_position.to_logical::(scale_factor); - let window_size = size.to_logical::(scale_factor); - let mut x = tray_position.x; - let mut y = tray_position.y; + x = tray_position.x; + y = tray_position.y; x = x.clamp( monitor_position.x, @@ -110,60 +90,25 @@ fn get_tray_window_position( monitor_position.y, monitor_position.y + monitor_size.height - window_size.height, ); - - Some(LogicalPosition::new(x, y)) } else { let monitor = app.primary_monitor().ok().flatten()?; let scale_factor = monitor.scale_factor(); let monitor_position = monitor.position().to_logical::(scale_factor); let monitor_size = monitor.size().to_logical::(scale_factor); - let window_size = size.to_logical::(scale_factor); - - let gap = crate::window_manager::WINDOW_GAP; - let x = monitor_position.x + monitor_size.width - window_size.width - gap; - let y = monitor_position.y + gap; - - Some(LogicalPosition::new(x, y)) + x = monitor_position.x + monitor_size.width - window_size.width - WINDOW_GAP; + y = monitor_position.y + WINDOW_GAP; } + + Some(LogicalPosition::new(x, y)) } -fn position_window_near_tray(app: &AppHandle, window: &WebviewWindow) { +pub(super) fn position_window_near_tray(app: &AppHandle, window: &WebviewWindow) { let size = window.outer_size().unwrap_or_default(); - if let Some(position) = get_tray_window_position(app, size) { + let scale_factor = window.scale_factor().unwrap_or(1.0); + if let Some(position) = get_tray_window_position(app, size.to_logical::(scale_factor)) { if let Err(err) = window.set_position(Position::Logical(position)) { warn!("Failed to position window near tray icon: {err}"); } } } - -impl WindowManager { - pub fn open_tray(app: &AppHandle) -> tauri::Result { - let window = if let Some(window) = app.get_webview_window(NEW_UI_WINDOW_ID) { - let _ = window.unminimize(); - window - } else { - Self::build_tray_window(app)? - }; - position_window_near_tray(app, &window); - #[cfg(target_os = "macos")] - let _ = app.show(); - let _ = window.show(); - let _ = window.set_focus(); - Ok(window) - } - - pub fn open_full_view(app: &AppHandle) -> tauri::Result { - let window = if let Some(window) = app.get_webview_window(OLD_UI_WINDOW_ID) { - let _ = window.unminimize(); - window - } else { - Self::build_full_window(app)? - }; - #[cfg(target_os = "macos")] - let _ = app.show(); - let _ = window.show(); - let _ = window.set_focus(); - Ok(window) - } -} diff --git a/src-tauri/src/window_manager/mod.rs b/src-tauri/src/window_manager/mod.rs index b08ba8f81..8ab01c079 100644 --- a/src-tauri/src/window_manager/mod.rs +++ b/src-tauri/src/window_manager/mod.rs @@ -1,3 +1,5 @@ +#[cfg(not(target_os = "windows"))] +use tauri::Manager; use tauri::{AppHandle, WebviewUrl, WebviewWindow, WebviewWindowBuilder}; #[cfg(not(target_os = "linux"))] @@ -18,11 +20,13 @@ pub const NEW_UI_WIDTH: f64 = 380.0; pub const NEW_UI_HEIGHT: f64 = 640.0; pub const OLD_UI_WIDTH: f64 = 1280.0; pub const OLD_UI_HEIGHT: f64 = 920.0; -pub const WINDOW_GAP: f64 = 20.0; +#[cfg(not(target_os = "linux"))] +const WINDOW_GAP: f64 = 20.0; +const WINDOW_TITLE: &str = "Defguard"; #[must_use] pub fn new_ui_url() -> WebviewUrl { - if cfg!(any(defguard_client_dev, debug_assertions)) { + if cfg!(any(defguard_client_dev)) { WebviewUrl::External("http://localhost:5072".parse().unwrap()) } else { WebviewUrl::App("new-ui/".into()) @@ -31,7 +35,7 @@ pub fn new_ui_url() -> WebviewUrl { #[must_use] pub fn old_ui_url() -> WebviewUrl { - if cfg!(any(defguard_client_dev, debug_assertions)) { + if cfg!(any(defguard_client_dev)) { WebviewUrl::External("http://localhost:5071".parse().unwrap()) } else { WebviewUrl::App("old-ui/index.html".into()) @@ -43,17 +47,20 @@ pub struct WindowManager; impl WindowManager { pub fn build_tray_window(app: &AppHandle) -> tauri::Result { let window = WebviewWindowBuilder::new(app, NEW_UI_WINDOW_ID, new_ui_url()) - .title("Defguard") + .title(WINDOW_TITLE) .inner_size(NEW_UI_WIDTH, NEW_UI_HEIGHT) .resizable(false) .decorations(false) .visible(false) .always_on_top(true) - .skip_taskbar(true) - .build()?; + .skip_taskbar(true); + #[cfg(target_os = "macos")] + let window = window.hidden_title(true); + + let window = window.build()?; #[cfg(target_os = "macos")] - if let Err(err) = macos::enable_rounded_corners(window.clone()) { + if let Err(err) = macos::enable_rounded_corners(&window) { tracing::warn!("Failed to enable rounded corners on tray window: {err}"); } @@ -62,7 +69,7 @@ impl WindowManager { pub fn build_full_window(app: &AppHandle) -> tauri::Result { WebviewWindowBuilder::new(app, OLD_UI_WINDOW_ID, old_ui_url()) - .title("Defguard") + .title(WINDOW_TITLE) .inner_size(OLD_UI_WIDTH, OLD_UI_HEIGHT) .decorations(true) .visible(false) @@ -70,14 +77,49 @@ impl WindowManager { } } -#[cfg(target_os = "windows")] +#[cfg(not(windows))] +impl WindowManager { + pub fn open_tray(app: &AppHandle) -> tauri::Result { + let window = if let Some(window) = app.get_webview_window(NEW_UI_WINDOW_ID) { + let _ = window.unminimize(); + window + } else { + Self::build_tray_window(app)? + }; + #[cfg(target_os = "macos")] + macos::position_window_near_tray(app, &window); + #[cfg(target_os = "macos")] + let _ = app.show(); + let _ = window.show(); + let _ = window.set_focus(); + Ok(window) + } + + pub fn open_full_view(app: &AppHandle) -> tauri::Result { + let window = if let Some(window) = app.get_webview_window(OLD_UI_WINDOW_ID) { + let _ = window.unminimize(); + window + } else { + Self::build_full_window(app)? + }; + #[cfg(target_os = "macos")] + let _ = app.show(); + let _ = window.show(); + let _ = window.set_focus(); + Ok(window) + } +} + +#[cfg(windows)] pub mod windows; -#[cfg(not(target_os = "windows"))] +#[cfg(target_os = "macos")] pub mod macos; // Export tauri commands so they can be registered in main.rs +#[cfg_attr(target_os = "linux", allow(unused_variables))] pub(crate) fn show_new_ui_window(app: &AppHandle) { + #[cfg(not(target_os = "linux"))] let _ = WindowManager::open_tray(app); } @@ -90,57 +132,56 @@ pub fn open_new_ui_window(app: AppHandle) { show_new_ui_window(&app); } +#[cfg_attr(target_os = "linux", allow(unused_variables))] #[tauri::command] pub fn open_old_ui_window(app: AppHandle) { + #[cfg(not(target_os = "linux"))] let _ = WindowManager::open_full_view(&app); } #[tauri::command] pub fn swap_to_old_ui(app: AppHandle) { tracing::info!("swap_to_old_ui called"); - tauri::async_runtime::spawn(async move { - // Sleep briefly to let the IPC handler return - tokio::time::sleep(std::time::Duration::from_millis(50)).await; - if let Some(w) = tauri::Manager::get_webview_window(&app, NEW_UI_WINDOW_ID) { - if let Err(e) = w.hide() { - tracing::error!("swap_to_old_ui task: Failed to hide new-ui window: {:?}", e); - } + #[cfg(target_os = "macos")] + let _ = app.set_dock_visibility(true); + + if let Some(window) = tauri::Manager::get_webview_window(&app, NEW_UI_WINDOW_ID) { + if let Err(err) = window.hide() { + tracing::error!("swap_to_old_ui task: Failed to hide new-ui window: {err:?}"); } - if let Err(e) = WindowManager::open_full_view(&app) { - tracing::error!("swap_to_old_ui task: Failed to open full view: {:?}", e); + } + #[cfg(not(target_os = "linux"))] + { + if let Err(err) = WindowManager::open_full_view(&app) { + tracing::error!("swap_to_old_ui task: Failed to open full view: {err:?}"); } - }); + } } #[tauri::command] pub fn close_tray_window(app: AppHandle) { tracing::info!("close_tray_window called"); - tauri::async_runtime::spawn(async move { - tokio::time::sleep(std::time::Duration::from_millis(50)).await; - if let Some(w) = tauri::Manager::get_webview_window(&app, NEW_UI_WINDOW_ID) { - tracing::info!("close_tray_window task: Hiding new-ui window"); - if let Err(e) = w.hide() { - tracing::error!( - "close_tray_window task: Failed to hide new-ui window: {:?}", - e - ); - } - } else { - tracing::warn!("close_tray_window task: new-ui window not found"); + + if let Some(window) = tauri::Manager::get_webview_window(&app, NEW_UI_WINDOW_ID) { + tracing::info!("close_tray_window task: Hiding new-ui window"); + if let Err(err) = window.hide() { + tracing::error!("close_tray_window task: Failed to hide new-ui window: {err:?}"); } - }); + } else { + tracing::warn!("close_tray_window task: new-ui window not found"); + } } #[tauri::command] pub fn swap_to_new_ui(app: AppHandle) { tracing::info!("swap_to_new_ui called"); - tauri::async_runtime::spawn(async move { - tokio::time::sleep(std::time::Duration::from_millis(50)).await; - show_new_ui_window(&app); - if let Some(w) = tauri::Manager::get_webview_window(&app, OLD_UI_WINDOW_ID) { - if let Err(e) = w.hide() { - tracing::error!("swap_to_new_ui task: Failed to hide old-ui window: {:?}", e); - } + #[cfg(target_os = "macos")] + let _ = app.set_dock_visibility(false); + + show_new_ui_window(&app); + if let Some(window) = tauri::Manager::get_webview_window(&app, OLD_UI_WINDOW_ID) { + if let Err(err) = window.hide() { + tracing::error!("swap_to_new_ui task: Failed to hide old-ui window: {err:?}"); } - }); + } } diff --git a/src-tauri/src/window_manager/windows.rs b/src-tauri/src/window_manager/windows.rs index 56c5dc469..1d0955eb0 100644 --- a/src-tauri/src/window_manager/windows.rs +++ b/src-tauri/src/window_manager/windows.rs @@ -266,14 +266,14 @@ impl WindowManager { width: (OLD_UI_WIDTH * primary.scale_factor) as u32, height: (OLD_UI_HEIGHT * primary.scale_factor) as u32, }); - log::info!("open_full_view: outer_size = {:?}", outer_size); + log::info!("open_full_view: outer_size = {outer_size:?}"); log::info!("open_full_view: Querying inner_size"); let inner_size = window.inner_size().unwrap_or(tauri::PhysicalSize { width: (OLD_UI_WIDTH * primary.scale_factor) as u32, height: (OLD_UI_HEIGHT * primary.scale_factor) as u32, }); - log::info!("open_full_view: inner_size = {:?}", inner_size); + log::info!("open_full_view: inner_size = {inner_size:?}"); let physical_width = outer_size.width as i32; let physical_height = outer_size.height as i32; @@ -324,11 +324,7 @@ impl WindowManager { _ => {} } - log::info!( - "open_full_view: Setting position to ({}, {})", - window_x, - window_y - ); + log::info!("open_full_view: Setting position to ({window_x}, {window_y})"); window.set_position(tauri::PhysicalPosition::new(window_x, window_y))?; log::info!("open_full_view: Position set, showing window"); window.show()?; From 0a0cbfbc4cd0cebb77809a4f8ac1bed063358776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Mon, 25 May 2026 12:13:19 +0200 Subject: [PATCH 025/155] Fix deep link handling (#903) * rust side * update ui deep link handler * Update defguard-client.rs --- src-tauri/src/bin/defguard-client.rs | 41 +++++- src-tauri/src/events.rs | 18 ++- src/pages/client/types.ts | 1 + .../components/providers/DeepLinkProvider.tsx | 121 ++---------------- 4 files changed, 63 insertions(+), 118 deletions(-) diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 75811dae7..e3cd5c699 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -25,6 +25,7 @@ use defguard_client::{ DB_POOL, }, enterprise::provisioning::handle_client_initialization, + events::handle_deep_link, periodic::run_periodic_tasks, service, tray::{configure_tray_icon, setup_tray, show_main_window}, @@ -34,6 +35,7 @@ use defguard_client::{ }; use log::{Level, LevelFilter}; use tauri::{AppHandle, Builder, Manager, RunEvent, WindowEvent}; +use tauri_plugin_deep_link::DeepLinkExt; use tauri_plugin_log::{Target, TargetKind}; #[macro_use] @@ -274,6 +276,14 @@ fn main() { let app_handle = app.app_handle(); + // Single Rust-side entry point for all deep link events (runtime). + { + let handle = app_handle.clone(); + app.deep_link().on_open_url(move |event| { + handle_deep_link(&handle, &event.urls()); + }); + } + // Prepare `AppConfig`. let config = AppConfig::new(app_handle); @@ -369,14 +379,26 @@ fn main() { } #[cfg(not(target_os = "linux"))] { - let has_locations = tauri::async_runtime::block_on( - defguard_client::window_manager::has_non_service_locations() - ); - if has_locations { - WindowManager::open_tray(app_handle)?; - } else { - info!("No locations found, showing full view on startup."); + // If the app was cold-launched by a deep link the full view must open, not the tray. + let launched_by_deep_link = app_handle + .deep_link() + .get_current() + .ok() + .flatten() + .is_some(); + if launched_by_deep_link { + info!("App launched via deep link, opening full view directly."); let _ = WindowManager::open_full_view(app_handle); + } else { + let has_locations = tauri::async_runtime::block_on( + defguard_client::window_manager::has_non_service_locations() + ); + if has_locations { + WindowManager::open_tray(app_handle)?; + } else { + info!("No locations found, showing full view on startup."); + let _ = WindowManager::open_full_view(app_handle); + } } } @@ -419,6 +441,11 @@ fn main() { ); tauri::async_runtime::block_on(startup(app_handle)); + // Handle a deep link that launched the app (startup case). + if let Ok(Some(urls)) = app_handle.deep_link().get_current() { + handle_deep_link(app_handle, &urls); + } + // Handle Ctrl-C. debug!("Setting up Ctrl-C handler."); let app_handle_clone = app_handle.clone(); diff --git a/src-tauri/src/events.rs b/src-tauri/src/events.rs index e7267d084..b14389743 100644 --- a/src-tauri/src/events.rs +++ b/src-tauri/src/events.rs @@ -1,8 +1,11 @@ use serde::Serialize; -use tauri::{AppHandle, Emitter, Url}; +use tauri::{AppHandle, Emitter, Manager, Url}; use tauri_plugin_notification::NotificationExt; -use crate::{tray::show_main_window, ConnectionType}; +use crate::{ + window_manager::{WindowManager, NEW_UI_WINDOW_ID}, + ConnectionType, +}; // Match src/pages/client/types.ts. #[non_exhaustive] @@ -115,7 +118,16 @@ pub fn handle_deep_link(app_handle: &AppHandle, urls: &[Url]) { } } if let (Some(token), Some(url)) = (token, url) { - show_main_window(app_handle); + info!("Deep link received: token={token}, url={url}"); + // If the compact tray window is visible, hide it before opening main view. + if let Some(tray_win) = app_handle.get_webview_window(NEW_UI_WINDOW_ID) { + if tray_win.is_visible().unwrap_or(false) { + let _ = tray_win.hide(); + } + } + if let Err(e) = WindowManager::open_full_view(app_handle) { + warn!("Deep link: failed to open main window: {e}"); + } let _ = app_handle.emit( EventKey::AddInstance.into(), AddInstancePayload { diff --git a/src/pages/client/types.ts b/src/pages/client/types.ts index 9954bb262..7f25184da 100644 --- a/src/pages/client/types.ts +++ b/src/pages/client/types.ts @@ -113,6 +113,7 @@ export enum TauriEventKey { DEAD_CONNECTION_DROPPED = 'dead-connection-dropped', DEAD_CONNECTION_RECONNECTED = 'dead-connection-reconnected', APPLICATION_CONFIG_CHANGED = 'application-config-changed', + ADD_INSTANCE = 'add-instance', MFA_TRIGGER = 'mfa-trigger', VERSION_MISMATCH = 'version-mismatch', UUID_MISMATCH = 'uuid-mismatch', diff --git a/src/shared/components/providers/DeepLinkProvider.tsx b/src/shared/components/providers/DeepLinkProvider.tsx index 2f0e90241..306ab38cc 100644 --- a/src/shared/components/providers/DeepLinkProvider.tsx +++ b/src/shared/components/providers/DeepLinkProvider.tsx @@ -1,125 +1,30 @@ -import { getCurrent, onOpenUrl } from '@tauri-apps/plugin-deep-link'; +import { listen } from '@tauri-apps/api/event'; import { error } from '@tauri-apps/plugin-log'; -import { type PropsWithChildren, useCallback, useEffect, useRef } from 'react'; -import z, { string } from 'zod'; +import { type PropsWithChildren, useEffect } from 'react'; +import { type AddInstancePayload, TauriEventKey } from '../../../pages/client/types'; import useAddInstance from '../../hooks/useAddInstance'; import { errorDetail } from '../../utils/errorDetail'; -enum DeepLink { - AddInstance = 'addinstance', -} - export const linkStorageKey = 'lastSuccessfullyHandledDeepLink'; export const storeLink = (value: string) => { sessionStorage.setItem(linkStorageKey, value); }; -const readStoreLink = (): string | null => { - return sessionStorage.getItem(linkStorageKey); -}; - -const addInstanceLinkSchema = z.object({ - token: string().trim().min(1), - url: string().trim().min(1).url(), -}); - -const AddInstanceLink = z.object({ - link: z.literal(DeepLink.AddInstance), - data: addInstanceLinkSchema, -}); - -const validLinkPayload = z.discriminatedUnion('link', [AddInstanceLink]); - -type LinkPayload = z.infer; - -const linkIntoPayload = (link: URL | null): LinkPayload | null => { - if (link == null) return null; - - const searchData = Object.fromEntries(new URLSearchParams(link.search)); - const linkKey = [link.hostname, link.pathname] - .map((l) => l.trim().replaceAll('/', '')) - .filter((l) => l !== '')[0] as string; - const payload = { - link: linkKey, - data: searchData, - }; - const result = validLinkPayload.safeParse(payload); - if (result.success) { - return result.data; - } else { - error(`Link ${link} was rejected due to schema validation.`); - } - return null; -}; - export const DeepLinkProvider = ({ children }: PropsWithChildren) => { - const mounted = useRef(false); - const { handleAddInstance } = useAddInstance(); - const handleValidLink = useCallback( - async (payload: LinkPayload, rawLink?: string) => { - const { data, link } = payload; - switch (link) { - case DeepLink.AddInstance: - await handleAddInstance(data, rawLink); - break; - } - if (rawLink) { - storeLink(rawLink); - } - }, - [handleAddInstance], - ); - - // biome-ignore lint/correctness/useExhaustiveDependencies: only on mount useEffect(() => { - if (!mounted.current) { - mounted.current = true; - - let unlisten: (() => void) | undefined; - (async () => { - const start = await getCurrent(); - if (start != null) { - const lastLink = readStoreLink(); - // if the link is exact as last successfully executed link - // this is only necessary bcs in dev mode window is hot reloaded causing the startup link to be handled multiple times over. - if (lastLink != null && lastLink === start[0]) { - return; - } - const payload = linkIntoPayload(new URL(start[0])); - if (payload != null) { - try { - handleValidLink(payload, start[0]); - } catch (e) { - const detail = errorDetail(e); - error(`Failed to handle startup deep link "${payload.link}": ${detail}`); - } - } - } - unlisten = await onOpenUrl((urls) => { - if (urls?.length) { - const link = urls[0]; - const payload = linkIntoPayload(new URL(link)); - if (payload != null) { - try { - handleValidLink(payload); - } catch (e) { - const detail = errorDetail(e); - error( - `Failed to handle valid deep link "${payload?.link}" action: ${detail}`, - ); - } - } - } - }); - })(); - return () => { - unlisten?.(); - }; - } - }, []); + const unlisten = listen(TauriEventKey.ADD_INSTANCE, (event) => { + handleAddInstance(event.payload).catch((e) => { + error(`Failed to handle add-instance event: ${errorDetail(e)}`); + }); + }); + + return () => { + unlisten.then((fn) => fn()); + }; + }, [handleAddInstance]); return <>{children}; }; From fea1f8671bdb6598ec2860af46d8dfc3911c4edf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Mon, 25 May 2026 14:04:57 +0200 Subject: [PATCH 026/155] rollback packages for old-ui --- package.json | 8 +- pnpm-lock.yaml | 903 ++++++++++++++++++++++++++--------------- src/shared/defguard-ui | 2 +- 3 files changed, 581 insertions(+), 332 deletions(-) diff --git a/package.json b/package.json index a4af3395b..fc5ab6899 100644 --- a/package.json +++ b/package.json @@ -108,17 +108,17 @@ "@types/node": "^25.9.1", "@types/react": "^19.2.15", "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^6.0.2", + "@vitejs/plugin-react": "^5.2.0", "@vitejs/plugin-react-swc": "^4.3.1", "autoprefixer": "^10.5.0", "npm-run-all": "^4.1.5", "postcss": "^8.5.15", "prettier": "^3.8.3", - "sass": "~1.99.0", + "sass": "~1.92.1", "typedoc": "^0.28.19", "typesafe-i18n": "^5.27.1", - "typescript": "^5.9.3", - "vite": "^8.0.14" + "typescript": "^6.0.3", + "vite": "^7.3.3" }, "volta": { "node": "20.5.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1791b2d85..6ea7039e1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -194,7 +194,7 @@ importers: version: 4.4.0(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@svgr/cli': specifier: ^8.1.0 - version: 8.1.0(typescript@5.9.3) + version: 8.1.0(typescript@6.0.3) '@tanstack/react-query': specifier: ^5.100.14 version: 5.100.14(react@19.2.6) @@ -220,11 +220,11 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.15) '@vitejs/plugin-react': - specifier: ^6.0.2 - version: 6.0.2(vite@8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0)) + specifier: ^5.2.0 + version: 5.2.0(vite@7.3.3(@types/node@25.9.1)(sass@1.92.1)(yaml@2.9.0)) '@vitejs/plugin-react-swc': specifier: ^4.3.1 - version: 4.3.1(vite@8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0)) + version: 4.3.1(vite@7.3.3(@types/node@25.9.1)(sass@1.92.1)(yaml@2.9.0)) autoprefixer: specifier: ^10.5.0 version: 10.5.0(postcss@8.5.15) @@ -238,20 +238,20 @@ importers: specifier: ^3.8.3 version: 3.8.3 sass: - specifier: ~1.99.0 - version: 1.99.0 + specifier: ~1.92.1 + version: 1.92.1 typedoc: specifier: ^0.28.19 - version: 0.28.19(typescript@5.9.3) + version: 0.28.19(typescript@6.0.3) typesafe-i18n: specifier: ^5.27.1 - version: 5.27.1(typescript@5.9.3) + version: 5.27.1(typescript@6.0.3) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 vite: - specifier: ^8.0.14 - version: 8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0) + specifier: ^7.3.3 + version: 7.3.3(@types/node@25.9.1)(sass@1.92.1)(yaml@2.9.0) packages: @@ -289,6 +289,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -310,6 +314,18 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.29.2': resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} @@ -383,15 +399,6 @@ packages: cpu: [x64] os: [win32] - '@emnapi/core@1.10.0': - resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} - - '@emnapi/runtime@1.10.0': - resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} - - '@emnapi/wasi-threads@1.2.1': - resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} - '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -446,6 +453,162 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@floating-ui/core@1.7.5': resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} @@ -497,15 +660,6 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@napi-rs/wasm-runtime@1.1.4': - resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} - peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 - - '@oxc-project/types@0.132.0': - resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} - '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} engines: {node: '>= 10.0.0'} @@ -624,103 +778,149 @@ packages: resolution: {integrity: sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==} engines: {node: '>=14.0.0'} - '@rolldown/binding-android-arm64@1.0.2': - resolution: {integrity: sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/pluginutils@1.0.0-rc.3': + resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@rollup/rollup-android-arm-eabi@4.60.4': + resolution: {integrity: sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.60.4': + resolution: {integrity: sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.2': - resolution: {integrity: sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-darwin-arm64@4.60.4': + resolution: {integrity: sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.2': - resolution: {integrity: sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-darwin-x64@4.60.4': + resolution: {integrity: sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.2': - resolution: {integrity: sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-freebsd-arm64@4.60.4': + resolution: {integrity: sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.60.4': + resolution: {integrity: sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.2': - resolution: {integrity: sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-arm-gnueabihf@4.60.4': + resolution: {integrity: sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==} cpu: [arm] os: [linux] + libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.0.2': - resolution: {integrity: sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-arm-musleabihf@4.60.4': + resolution: {integrity: sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.60.4': + resolution: {integrity: sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.2': - resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-arm64-musl@4.60.4': + resolution: {integrity: sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.2': - resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-loong64-gnu@4.60.4': + resolution: {integrity: sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.60.4': + resolution: {integrity: sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.60.4': + resolution: {integrity: sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.2': - resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-ppc64-musl@4.60.4': + resolution: {integrity: sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.60.4': + resolution: {integrity: sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.60.4': + resolution: {integrity: sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.60.4': + resolution: {integrity: sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.2': - resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-x64-gnu@4.60.4': + resolution: {integrity: sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.2': - resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-linux-x64-musl@4.60.4': + resolution: {integrity: sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.2': - resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-openbsd-x64@4.60.4': + resolution: {integrity: sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.60.4': + resolution: {integrity: sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.2': - resolution: {integrity: sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.0.2': - resolution: {integrity: sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-win32-arm64-msvc@4.60.4': + resolution: {integrity: sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.2': - resolution: {integrity: sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rollup/rollup-win32-ia32-msvc@4.60.4': + resolution: {integrity: sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.60.4': + resolution: {integrity: sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.1': - resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@rollup/rollup-win32-x64-msvc@4.60.4': + resolution: {integrity: sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==} + cpu: [x64] + os: [win32] '@shikijs/engine-oniguruma@3.23.0': resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} @@ -1083,8 +1283,17 @@ packages: '@tauri-apps/plugin-window-state@2.4.1': resolution: {integrity: sha512-OuvdrzyY8Q5Dbzpj+GcrnV1iCeoZbcFdzMjanZMMcAEUNy/6PH5pxZPXpaZLOR7whlzXiuzx0L9EKZbH7zpdRw==} - '@tybys/wasm-util@0.10.2': - resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} '@types/byte-size@8.1.2': resolution: {integrity: sha512-jGyVzYu6avI8yuqQCNTZd65tzI8HZrLjKX9sdMqZrGWVlNChu0rf6p368oVEDCYJe5BMx2Ov04tD1wqtgTwGSA==} @@ -1122,6 +1331,9 @@ packages: '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} @@ -1183,18 +1395,11 @@ packages: peerDependencies: vite: ^4 || ^5 || ^6 || ^7 || ^8 - '@vitejs/plugin-react@6.0.2': - resolution: {integrity: sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==} + '@vitejs/plugin-react@5.2.0': + resolution: {integrity: sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 - babel-plugin-react-compiler: ^1.0.0 - vite: ^8.0.0 - peerDependenciesMeta: - '@rolldown/plugin-babel': - optional: true - babel-plugin-react-compiler: - optional: true + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -1604,6 +1809,11 @@ packages: es-toolkit@1.46.1: resolution: {integrity: sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==} + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -1976,80 +2186,6 @@ packages: engines: {node: '>=6'} hasBin: true - lightningcss-android-arm64@1.32.0: - resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [android] - - lightningcss-darwin-arm64@1.32.0: - resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.32.0: - resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.32.0: - resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.32.0: - resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.32.0: - resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - lightningcss-linux-arm64-musl@1.32.0: - resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [musl] - - lightningcss-linux-x64-gnu@1.32.0: - resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [glibc] - - lightningcss-linux-x64-musl@1.32.0: - resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [musl] - - lightningcss-win32-arm64-msvc@1.32.0: - resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-x64-msvc@1.32.0: - resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.32.0: - resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} - engines: {node: '>= 12.0.0'} - lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -2445,6 +2581,10 @@ packages: redux: optional: true + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} + engines: {node: '>=0.10.0'} + react-router-dom@6.30.3: resolution: {integrity: sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==} engines: {node: '>=14.0.0'} @@ -2533,9 +2673,9 @@ packages: engines: {node: '>= 0.4'} hasBin: true - rolldown@1.0.2: - resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==} - engines: {node: ^20.19.0 || >=22.12.0} + rollup@4.60.4: + resolution: {integrity: sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true rxjs@7.8.2: @@ -2553,8 +2693,8 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} - sass@1.99.0: - resolution: {integrity: sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==} + sass@1.92.1: + resolution: {integrity: sha512-ffmsdbwqb3XeyR8jJR6KelIXARM9bFQe8A6Q3W4Klmwy5Ckd5gz7jgUNHo4UOqutU5Sk1DtKLbpDP0nLCg1xqQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -2754,8 +2894,8 @@ packages: peerDependencies: typescript: '>=3.5.1' - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true @@ -2828,16 +2968,15 @@ packages: victory-vendor@37.3.6: resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} - vite@8.0.14: - resolution: {integrity: sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==} + vite@7.3.3: + resolution: {integrity: sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.18 - esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 + lightningcss: ^1.21.0 sass: ^1.70.0 sass-embedded: ^1.70.0 stylus: '>=0.54.8' @@ -2848,14 +2987,12 @@ packages: peerDependenciesMeta: '@types/node': optional: true - '@vitejs/devtools': - optional: true - esbuild: - optional: true jiti: optional: true less: optional: true + lightningcss: + optional: true sass: optional: true sass-embedded: @@ -3010,6 +3147,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.28.5': {} @@ -3025,6 +3164,16 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/runtime@7.29.2': {} '@babel/template@7.28.6': @@ -3085,22 +3234,6 @@ snapshots: '@biomejs/cli-win32-x64@2.4.15': optional: true - '@emnapi/core@1.10.0': - dependencies: - '@emnapi/wasi-threads': 1.2.1 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.10.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.2.1': - dependencies: - tslib: 2.8.1 - optional: true - '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.28.6 @@ -3184,6 +3317,84 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} + '@esbuild/aix-ppc64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-x64@0.27.7': + optional: true + + '@esbuild/darwin-arm64@0.27.7': + optional: true + + '@esbuild/darwin-x64@0.27.7': + optional: true + + '@esbuild/freebsd-arm64@0.27.7': + optional: true + + '@esbuild/freebsd-x64@0.27.7': + optional: true + + '@esbuild/linux-arm64@0.27.7': + optional: true + + '@esbuild/linux-arm@0.27.7': + optional: true + + '@esbuild/linux-ia32@0.27.7': + optional: true + + '@esbuild/linux-loong64@0.27.7': + optional: true + + '@esbuild/linux-mips64el@0.27.7': + optional: true + + '@esbuild/linux-ppc64@0.27.7': + optional: true + + '@esbuild/linux-riscv64@0.27.7': + optional: true + + '@esbuild/linux-s390x@0.27.7': + optional: true + + '@esbuild/linux-x64@0.27.7': + optional: true + + '@esbuild/netbsd-arm64@0.27.7': + optional: true + + '@esbuild/netbsd-x64@0.27.7': + optional: true + + '@esbuild/openbsd-arm64@0.27.7': + optional: true + + '@esbuild/openbsd-x64@0.27.7': + optional: true + + '@esbuild/openharmony-arm64@0.27.7': + optional: true + + '@esbuild/sunos-x64@0.27.7': + optional: true + + '@esbuild/win32-arm64@0.27.7': + optional: true + + '@esbuild/win32-ia32@0.27.7': + optional: true + + '@esbuild/win32-x64@0.27.7': + optional: true + '@floating-ui/core@1.7.5': dependencies: '@floating-ui/utils': 0.2.11 @@ -3256,15 +3467,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.2 - optional: true - - '@oxc-project/types@0.132.0': {} - '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -3354,56 +3556,84 @@ snapshots: '@remix-run/router@1.23.2': {} - '@rolldown/binding-android-arm64@1.0.2': + '@rolldown/pluginutils@1.0.0-rc.3': {} + + '@rolldown/pluginutils@1.0.1': {} + + '@rollup/rollup-android-arm-eabi@4.60.4': optional: true - '@rolldown/binding-darwin-arm64@1.0.2': + '@rollup/rollup-android-arm64@4.60.4': optional: true - '@rolldown/binding-darwin-x64@1.0.2': + '@rollup/rollup-darwin-arm64@4.60.4': optional: true - '@rolldown/binding-freebsd-x64@1.0.2': + '@rollup/rollup-darwin-x64@4.60.4': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + '@rollup/rollup-freebsd-arm64@4.60.4': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.2': + '@rollup/rollup-freebsd-x64@4.60.4': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.2': + '@rollup/rollup-linux-arm-gnueabihf@4.60.4': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.2': + '@rollup/rollup-linux-arm-musleabihf@4.60.4': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.2': + '@rollup/rollup-linux-arm64-gnu@4.60.4': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.2': + '@rollup/rollup-linux-arm64-musl@4.60.4': optional: true - '@rolldown/binding-linux-x64-musl@1.0.2': + '@rollup/rollup-linux-loong64-gnu@4.60.4': optional: true - '@rolldown/binding-openharmony-arm64@1.0.2': + '@rollup/rollup-linux-loong64-musl@4.60.4': optional: true - '@rolldown/binding-wasm32-wasi@1.0.2': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@rollup/rollup-linux-ppc64-gnu@4.60.4': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.2': + '@rollup/rollup-linux-ppc64-musl@4.60.4': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.2': + '@rollup/rollup-linux-riscv64-gnu@4.60.4': optional: true - '@rolldown/pluginutils@1.0.1': {} + '@rollup/rollup-linux-riscv64-musl@4.60.4': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.60.4': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.60.4': + optional: true + + '@rollup/rollup-linux-x64-musl@4.60.4': + optional: true + + '@rollup/rollup-openbsd-x64@4.60.4': + optional: true + + '@rollup/rollup-openharmony-arm64@4.60.4': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.60.4': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.60.4': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.60.4': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.60.4': + optional: true '@shikijs/engine-oniguruma@3.23.0': dependencies: @@ -3500,12 +3730,12 @@ snapshots: '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.0) '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.0) - '@svgr/cli@8.1.0(typescript@5.9.3)': + '@svgr/cli@8.1.0(typescript@6.0.3)': dependencies: - '@svgr/core': 8.1.0(typescript@5.9.3) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - '@svgr/plugin-prettier': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3) + '@svgr/core': 8.1.0(typescript@6.0.3) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3)) + '@svgr/plugin-prettier': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3))(typescript@6.0.3) camelcase: 6.3.0 chalk: 4.1.2 commander: 9.5.0 @@ -3516,12 +3746,12 @@ snapshots: - supports-color - typescript - '@svgr/core@8.1.0(typescript@5.9.3)': + '@svgr/core@8.1.0(typescript@6.0.3)': dependencies: '@babel/core': 7.29.0 '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.9.3) + cosmiconfig: 8.3.6(typescript@6.0.3) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -3532,26 +3762,26 @@ snapshots: '@babel/types': 7.29.0 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))': dependencies: '@babel/core': 7.29.0 '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) - '@svgr/core': 8.1.0(typescript@5.9.3) + '@svgr/core': 8.1.0(typescript@6.0.3) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@svgr/plugin-prettier@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))': + '@svgr/plugin-prettier@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))': dependencies: - '@svgr/core': 8.1.0(typescript@5.9.3) + '@svgr/core': 8.1.0(typescript@6.0.3) deepmerge: 4.3.1 prettier: 2.8.8 - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))(typescript@6.0.3)': dependencies: - '@svgr/core': 8.1.0(typescript@5.9.3) - cosmiconfig: 8.3.6(typescript@5.9.3) + '@svgr/core': 8.1.0(typescript@6.0.3) + cosmiconfig: 8.3.6(typescript@6.0.3) deepmerge: 4.3.1 svgo: 3.3.3 transitivePeerDependencies: @@ -3733,10 +3963,26 @@ snapshots: dependencies: '@tauri-apps/api': 2.11.0 - '@tybys/wasm-util@0.10.2': + '@types/babel__core@7.20.5': dependencies: - tslib: 2.8.1 - optional: true + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.29.0 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.29.0 '@types/byte-size@8.1.2': {} @@ -3772,6 +4018,8 @@ snapshots: dependencies: '@types/estree': 1.0.9 + '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} '@types/file-saver@2.0.7': {} @@ -3821,18 +4069,25 @@ snapshots: '@use-gesture/core': 10.3.1 react: 19.2.6 - '@vitejs/plugin-react-swc@4.3.1(vite@8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0))': + '@vitejs/plugin-react-swc@4.3.1(vite@7.3.3(@types/node@25.9.1)(sass@1.92.1)(yaml@2.9.0))': dependencies: '@rolldown/pluginutils': 1.0.1 '@swc/core': 1.15.40 - vite: 8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0) + vite: 7.3.3(@types/node@25.9.1)(sass@1.92.1)(yaml@2.9.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@6.0.2(vite@8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0))': + '@vitejs/plugin-react@5.2.0(vite@7.3.3(@types/node@25.9.1)(sass@1.92.1)(yaml@2.9.0))': dependencies: - '@rolldown/pluginutils': 1.0.1 - vite: 8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0) + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-rc.3 + '@types/babel__core': 7.20.5 + react-refresh: 0.18.0 + vite: 7.3.3(@types/node@25.9.1)(sass@1.92.1)(yaml@2.9.0) + transitivePeerDependencies: + - supports-color ansi-regex@5.0.1: {} @@ -4007,14 +4262,14 @@ snapshots: path-type: 4.0.0 yaml: 1.10.3 - cosmiconfig@8.3.6(typescript@5.9.3): + cosmiconfig@8.3.6(typescript@6.0.3): dependencies: import-fresh: 3.3.1 js-yaml: 4.1.1 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 cross-spawn@6.0.6: dependencies: @@ -4140,7 +4395,8 @@ snapshots: detect-browser@5.3.0: {} - detect-libc@2.1.2: {} + detect-libc@2.1.2: + optional: true devlop@1.1.0: dependencies: @@ -4285,6 +4541,35 @@ snapshots: es-toolkit@1.46.1: {} + esbuild@0.27.7: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 + escalade@3.2.0: {} escape-string-regexp@1.0.5: {} @@ -4649,55 +4934,6 @@ snapshots: json5@2.2.3: {} - lightningcss-android-arm64@1.32.0: - optional: true - - lightningcss-darwin-arm64@1.32.0: - optional: true - - lightningcss-darwin-x64@1.32.0: - optional: true - - lightningcss-freebsd-x64@1.32.0: - optional: true - - lightningcss-linux-arm-gnueabihf@1.32.0: - optional: true - - lightningcss-linux-arm64-gnu@1.32.0: - optional: true - - lightningcss-linux-arm64-musl@1.32.0: - optional: true - - lightningcss-linux-x64-gnu@1.32.0: - optional: true - - lightningcss-linux-x64-musl@1.32.0: - optional: true - - lightningcss-win32-arm64-msvc@1.32.0: - optional: true - - lightningcss-win32-x64-msvc@1.32.0: - optional: true - - lightningcss@1.32.0: - dependencies: - detect-libc: 2.1.2 - optionalDependencies: - lightningcss-android-arm64: 1.32.0 - lightningcss-darwin-arm64: 1.32.0 - lightningcss-darwin-x64: 1.32.0 - lightningcss-freebsd-x64: 1.32.0 - lightningcss-linux-arm-gnueabihf: 1.32.0 - lightningcss-linux-arm64-gnu: 1.32.0 - lightningcss-linux-arm64-musl: 1.32.0 - lightningcss-linux-x64-gnu: 1.32.0 - lightningcss-linux-x64-musl: 1.32.0 - lightningcss-win32-arm64-msvc: 1.32.0 - lightningcss-win32-x64-msvc: 1.32.0 - lines-and-columns@1.2.4: {} linkify-it@5.0.1: @@ -5213,6 +5449,8 @@ snapshots: '@types/react': 19.2.15 redux: 5.0.1 + react-refresh@0.18.0: {} + react-router-dom@6.30.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: '@remix-run/router': 1.23.2 @@ -5327,26 +5565,36 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - rolldown@1.0.2: + rollup@4.60.4: dependencies: - '@oxc-project/types': 0.132.0 - '@rolldown/pluginutils': 1.0.1 + '@types/estree': 1.0.8 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.2 - '@rolldown/binding-darwin-arm64': 1.0.2 - '@rolldown/binding-darwin-x64': 1.0.2 - '@rolldown/binding-freebsd-x64': 1.0.2 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.2 - '@rolldown/binding-linux-arm64-gnu': 1.0.2 - '@rolldown/binding-linux-arm64-musl': 1.0.2 - '@rolldown/binding-linux-ppc64-gnu': 1.0.2 - '@rolldown/binding-linux-s390x-gnu': 1.0.2 - '@rolldown/binding-linux-x64-gnu': 1.0.2 - '@rolldown/binding-linux-x64-musl': 1.0.2 - '@rolldown/binding-openharmony-arm64': 1.0.2 - '@rolldown/binding-wasm32-wasi': 1.0.2 - '@rolldown/binding-win32-arm64-msvc': 1.0.2 - '@rolldown/binding-win32-x64-msvc': 1.0.2 + '@rollup/rollup-android-arm-eabi': 4.60.4 + '@rollup/rollup-android-arm64': 4.60.4 + '@rollup/rollup-darwin-arm64': 4.60.4 + '@rollup/rollup-darwin-x64': 4.60.4 + '@rollup/rollup-freebsd-arm64': 4.60.4 + '@rollup/rollup-freebsd-x64': 4.60.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.4 + '@rollup/rollup-linux-arm-musleabihf': 4.60.4 + '@rollup/rollup-linux-arm64-gnu': 4.60.4 + '@rollup/rollup-linux-arm64-musl': 4.60.4 + '@rollup/rollup-linux-loong64-gnu': 4.60.4 + '@rollup/rollup-linux-loong64-musl': 4.60.4 + '@rollup/rollup-linux-ppc64-gnu': 4.60.4 + '@rollup/rollup-linux-ppc64-musl': 4.60.4 + '@rollup/rollup-linux-riscv64-gnu': 4.60.4 + '@rollup/rollup-linux-riscv64-musl': 4.60.4 + '@rollup/rollup-linux-s390x-gnu': 4.60.4 + '@rollup/rollup-linux-x64-gnu': 4.60.4 + '@rollup/rollup-linux-x64-musl': 4.60.4 + '@rollup/rollup-openbsd-x64': 4.60.4 + '@rollup/rollup-openharmony-arm64': 4.60.4 + '@rollup/rollup-win32-arm64-msvc': 4.60.4 + '@rollup/rollup-win32-ia32-msvc': 4.60.4 + '@rollup/rollup-win32-x64-gnu': 4.60.4 + '@rollup/rollup-win32-x64-msvc': 4.60.4 + fsevents: 2.3.3 rxjs@7.8.2: dependencies: @@ -5371,7 +5619,7 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 - sass@1.99.0: + sass@1.92.1: dependencies: chokidar: 4.0.3 immutable: 5.1.5 @@ -5606,20 +5854,20 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typedoc@0.28.19(typescript@5.9.3): + typedoc@0.28.19(typescript@6.0.3): dependencies: '@gerrit0/mini-shiki': 3.23.0 lunr: 2.3.9 markdown-it: 14.2.0 minimatch: 10.2.5 - typescript: 5.9.3 + typescript: 6.0.3 yaml: 2.9.0 - typesafe-i18n@5.27.1(typescript@5.9.3): + typesafe-i18n@5.27.1(typescript@6.0.3): dependencies: - typescript: 5.9.3 + typescript: 6.0.3 - typescript@5.9.3: {} + typescript@6.0.3: {} uc.micro@2.1.0: {} @@ -5720,17 +5968,18 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite@8.0.14(@types/node@25.9.1)(sass@1.99.0)(yaml@2.9.0): + vite@7.3.3(@types/node@25.9.1)(sass@1.92.1)(yaml@2.9.0): dependencies: - lightningcss: 1.32.0 + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.15 - rolldown: 1.0.2 + rollup: 4.60.4 tinyglobby: 0.2.16 optionalDependencies: '@types/node': 25.9.1 fsevents: 2.3.3 - sass: 1.99.0 + sass: 1.92.1 yaml: 2.9.0 which-boxed-primitive@1.1.1: diff --git a/src/shared/defguard-ui b/src/shared/defguard-ui index 4afa896cd..32bc534a1 160000 --- a/src/shared/defguard-ui +++ b/src/shared/defguard-ui @@ -1 +1 @@ -Subproject commit 4afa896cdc09c711ce867442818fe0e7b7b9839f +Subproject commit 32bc534a1781febab6a0013b9fd4b599daeedad0 From fc4ea04f522cd2faa87f1753f88fa2fd41d5f304 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Mon, 25 May 2026 16:40:42 +0200 Subject: [PATCH 027/155] fix deep link handling rust side (#904) --- .../compact/CompactLocationsPage/style.scss | 6 +-- src-tauri/src/bin/defguard-client.rs | 24 +++++++++-- src-tauri/src/events.rs | 10 ++--- src-tauri/src/tray.rs | 40 ++++++++++++++----- 4 files changed, 54 insertions(+), 26 deletions(-) diff --git a/new-ui/src/pages/compact/CompactLocationsPage/style.scss b/new-ui/src/pages/compact/CompactLocationsPage/style.scss index e5107c8fa..67989c0aa 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/style.scss +++ b/new-ui/src/pages/compact/CompactLocationsPage/style.scss @@ -24,10 +24,7 @@ &.windows { scrollbar-gutter: stable; overflow-y: scroll; - - > .locations { - padding-right: 6px; - } + padding-right: 6px; } > .locations { @@ -36,7 +33,6 @@ row-gap: var(--spacing-sm); width: 100%; box-sizing: border-box; - padding-right: 6px; } } } diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index e3cd5c699..782549bc8 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -28,7 +28,7 @@ use defguard_client::{ events::handle_deep_link, periodic::run_periodic_tasks, service, - tray::{configure_tray_icon, setup_tray, show_main_window}, + tray::{configure_tray_icon, setup_tray}, utils::load_log_targets, window_manager::*, LOG_FILENAME, VERSION, @@ -211,9 +211,25 @@ fn main() { }) // Initialize plugins here, except for `tauri_plugin_log` which is handled in `setup()`. // Single instance plugin should always be the first to register. - .plugin(tauri_plugin_single_instance::init(|app, _argv, _cwd| { - // Running instance might be hidden, so show it. - show_main_window(app); + .plugin(tauri_plugin_single_instance::init(|app, argv, _cwd| { + let is_deep_link = argv.iter().any(|a| a.starts_with("defguard://")); + // User tried to spawn second instance, mirror tray left click path. + if !is_deep_link { + #[cfg(target_os = "linux")] + let _ = WindowManager::open_full_view(app); + + #[cfg(not(target_os = "linux"))] + { + let has_locations = tauri::async_runtime::block_on( + defguard_client::window_manager::has_non_service_locations(), + ); + if has_locations { + let _ = WindowManager::open_tray(app); + } else { + let _ = WindowManager::open_full_view(app); + } + } + } })) .plugin(tauri_plugin_deep_link::init()) .plugin(tauri_plugin_dialog::init()) diff --git a/src-tauri/src/events.rs b/src-tauri/src/events.rs index b14389743..eb5591e2f 100644 --- a/src-tauri/src/events.rs +++ b/src-tauri/src/events.rs @@ -105,8 +105,9 @@ pub struct AddInstancePayload<'a> { /// Handle deep-link URLs. pub fn handle_deep_link(app_handle: &AppHandle, urls: &[Url]) { + debug!("Deep link received."); for link in urls { - if link.path() == "/addinstance" { + if link.host_str() == Some("addinstance") { let mut token = None; let mut url = None; for (key, value) in link.query_pairs() { @@ -118,12 +119,9 @@ pub fn handle_deep_link(app_handle: &AppHandle, urls: &[Url]) { } } if let (Some(token), Some(url)) = (token, url) { - info!("Deep link received: token={token}, url={url}"); - // If the compact tray window is visible, hide it before opening main view. + info!("Valid Deep link received."); if let Some(tray_win) = app_handle.get_webview_window(NEW_UI_WINDOW_ID) { - if tray_win.is_visible().unwrap_or(false) { - let _ = tray_win.hide(); - } + let _ = tray_win.hide(); } if let Err(e) = WindowManager::open_full_view(app_handle) { warn!("Deep link: failed to open main window: {e}"); diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index 4f16ab20f..abedaeb94 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -154,27 +154,45 @@ pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { } = event { let app = icon.app_handle(); - let any_visible = [NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID].iter().any(|id| { - app.get_webview_window(id) + + #[cfg(target_os = "linux")] + show_main_window(app); + + #[cfg(not(target_os = "linux"))] + { + let main_visible = app + .get_webview_window(OLD_UI_WINDOW_ID) + .and_then(|w| w.is_visible().ok()) + .unwrap_or(false); + + if main_visible { + if let Some(w) = app.get_webview_window(OLD_UI_WINDOW_ID) { + let _ = w.hide(); + } + } + + let tray_visible = app + .get_webview_window(NEW_UI_WINDOW_ID) .and_then(|w| w.is_visible().ok()) - .unwrap_or(false) - }); - if any_visible { - hide_visible_windows(app); - } else { - #[cfg(not(target_os = "linux"))] - { + .unwrap_or(false); + + if tray_visible { + if let Some(w) = app.get_webview_window(NEW_UI_WINDOW_ID) { + let _ = w.hide(); + } + } else { let has_locations = tauri::async_runtime::block_on( crate::window_manager::has_non_service_locations(), ); if has_locations { + if let Some(old_ui) = app.get_webview_window(OLD_UI_WINDOW_ID) { + let _ = old_ui.hide(); + } show_new_ui_window_near_tray(app); } else { let _ = WindowManager::open_full_view(app); } } - #[cfg(target_os = "linux")] - show_main_window(app); } } }) From 809d0f1acb0c3d3a6dce6003b7df86b6761e3a06 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 27 May 2026 06:20:56 +0200 Subject: [PATCH 028/155] macOS: handle app re-open (#905) --- package.json | 2 +- pnpm-lock.yaml | 324 +++++++++--------- ...a0705b638769ce6631c1b455cbf45e82bb14.json} | 4 +- ...82cf1590e6d15ba30360c41b0a5a3482df3df.json | 20 ++ ...66abfdc6b571d1631a4f77fbf4fa5cfbe7e7.json} | 4 +- ...a11ab0d2e123989e97dfceb57e472523398c.json} | 4 +- ...73e0c79c6a8d671c300ec2ea3eb0d58342b5.json} | 4 +- src-tauri/Cargo.lock | 30 +- src-tauri/src/bin/defguard-client.rs | 64 ++-- src-tauri/src/database/models/location.rs | 47 ++- src-tauri/src/tray.rs | 6 +- src-tauri/src/window_manager/mod.rs | 19 +- src/shared/images/png/logo_256-256.png | Bin 34482 -> 27413 bytes 13 files changed, 281 insertions(+), 247 deletions(-) rename src-tauri/.sqlx/{query-1c996712f62a1005990733cd9eee7a94bdcf2ef01b559304aea1d642fab7ae22.json => query-31e1b340bfbdf29dde642b657124a0705b638769ce6631c1b455cbf45e82bb14.json} (50%) create mode 100644 src-tauri/.sqlx/query-3bedd8a0e3a8d4b76330ba0f81d82cf1590e6d15ba30360c41b0a5a3482df3df.json rename src-tauri/.sqlx/{query-f88f92313f52f0b2c584f48b40e6edb4bc14d96f3000bd58a3ca68eecb8e4a88.json => query-97a52a8bbf020b77afe5dc427efb66abfdc6b571d1631a4f77fbf4fa5cfbe7e7.json} (94%) rename src-tauri/.sqlx/{query-ba54bef9b71c2add858203b7be2c0e87d3a54d536ef96a923a6b949e16b9746e.json => query-af70b9b18d8452a03d4d5624c2f3a11ab0d2e123989e97dfceb57e472523398c.json} (67%) rename src-tauri/.sqlx/{query-49039d91cfdefbb32284d15af739a2090ba7baf9dee8cf00e8800b9a5f891fab.json => query-c6a5e793cccc520039e28da8b4fb73e0c79c6a8d671c300ec2ea3eb0d58342b5.json} (96%) diff --git a/package.json b/package.json index fc5ab6899..ab4d56fe4 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "@stablelib/base64": "^2.0.1", "@stablelib/x25519": "^2.0.1", "@tanstack/query-core": "^5.100.14", - "@tanstack/react-virtual": "^3.13.25", + "@tanstack/react-virtual": "^3.13.26", "@tauri-apps/api": "^2.11.0", "@tauri-apps/plugin-clipboard-manager": "^2.3.2", "@tauri-apps/plugin-deep-link": "^2.4.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6ea7039e1..b09b936b5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,8 +27,8 @@ importers: specifier: ^5.100.14 version: 5.100.14 '@tanstack/react-virtual': - specifier: ^3.13.25 - version: 3.13.25(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^3.13.26 + version: 3.13.26(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tauri-apps/api': specifier: ^2.11.0 version: 2.11.0 @@ -255,91 +255,91 @@ importers: packages: - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.29.3': - resolution: {integrity: sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==} + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} engines: {node: '>=6.9.0'} - '@babel/core@7.29.0': - resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.29.1': - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} engines: {node: '>=6.9.0'} - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.29.2': - resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.3': - resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-transform-react-jsx-self@7.27.1': - resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + '@babel/plugin-transform-react-jsx-self@7.29.7': + resolution: {integrity: sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.27.1': - resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + '@babel/plugin-transform-react-jsx-source@7.29.7': + resolution: {integrity: sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.29.2': - resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} '@biomejs/biome@2.4.15': @@ -1162,14 +1162,14 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-virtual@3.13.25': - resolution: {integrity: sha512-bmNoqMu6gcAW9JGrKVB0Q1tN1i5RONZF8r1fW0bbE4Oyf3DwEGnzzQJ2OW+Ozg1P4s8PyugkHg2ULZoFQN+cqw==} + '@tanstack/react-virtual@3.13.26': + resolution: {integrity: sha512-DosdgjOxCLahkn0o+ilmZYwEjo1glfMGuRT/j3PQ18yr5XqA8N/BCaL9IJ3B5TRl+nnzyK2IOFgAILwzN3a9xQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/virtual-core@3.15.0': - resolution: {integrity: sha512-0AwPGx0I8QxPYjAxShT/+z+ZOe9u8mW5rsXvivCTjRfRmz9a43+3mRyi4wwlyoUqOC56q/jatKa0Bh9M99BEHQ==} + '@tanstack/virtual-core@3.16.0': + resolution: {integrity: sha512-Er2N7q3WOiH6y2JLxsxNX+u2/sLqSsL0bxFgDjuiPiA7vKhZRm+IzcS17vRee3GNXr64UsesA5CAp9yTiIYw9A==} '@tauri-apps/api@2.11.0': resolution: {integrity: sha512-7CinYODhky9lmO23xHnUFv0Xt43fbtWMyxZcLcRBlFkcgXKuEirBvHpmtJ89YMhyeGcq20Wuc47Fa4XjyniywA==} @@ -1464,8 +1464,8 @@ packages: brace-expansion@1.1.14: resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} - brace-expansion@2.1.0: - resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} brace-expansion@5.0.6: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} @@ -1806,8 +1806,8 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - es-toolkit@1.46.1: - resolution: {integrity: sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==} + es-toolkit@1.47.0: + resolution: {integrity: sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==} esbuild@0.27.7: resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} @@ -3085,25 +3085,25 @@ packages: snapshots: - '@babel/code-frame@7.29.0': + '@babel/code-frame@7.29.7': dependencies: - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.29.3': {} + '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.0': + '@babel/core@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.29.2 - '@babel/parser': 7.29.3 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -3113,91 +3113,91 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.29.1': + '@babel/generator@7.29.7': dependencies: - '@babel/parser': 7.29.3 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/helper-compilation-targets@7.28.6': + '@babel/helper-compilation-targets@7.29.7': dependencies: - '@babel/compat-data': 7.29.3 - '@babel/helper-validator-option': 7.27.1 + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-globals@7.28.0': {} + '@babel/helper-globals@7.29.7': {} - '@babel/helper-module-imports@7.28.6': + '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-plugin-utils@7.29.7': {} - '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-validator-option@7.29.7': {} - '@babel/helpers@7.29.2': + '@babel/helpers@7.29.7': dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 - '@babel/parser@7.29.3': + '@babel/parser@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-react-jsx-self@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-react-jsx-source@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/runtime@7.29.2': {} + '@babel/runtime@7.29.7': {} - '@babel/template@7.28.6': + '@babel/template@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.3 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 - '@babel/traverse@7.29.0': + '@babel/traverse@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.3 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.29.0': + '@babel/types@7.29.7': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 '@biomejs/biome@2.4.15': optionalDependencies: @@ -3236,8 +3236,8 @@ snapshots: '@emotion/babel-plugin@11.13.5': dependencies: - '@babel/helper-module-imports': 7.28.6 - '@babel/runtime': 7.29.2 + '@babel/helper-module-imports': 7.29.7 + '@babel/runtime': 7.29.7 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -3268,7 +3268,7 @@ snapshots: '@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 @@ -3294,7 +3294,7 @@ snapshots: '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.15)(react@19.2.6))(@types/react@19.2.15)(react@19.2.6)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.4.0 '@emotion/react': 11.14.0(@types/react@19.2.15)(react@19.2.6) @@ -3686,49 +3686,49 @@ snapshots: '@standard-schema/utils@0.3.0': {} - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-preset@8.1.0(@babel/core@7.29.0)': + '@svgr/babel-preset@8.1.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.0) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.7) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.7) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.7) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.7) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.7) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.7) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.7) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.7) '@svgr/cli@8.1.0(typescript@6.0.3)': dependencies: @@ -3748,8 +3748,8 @@ snapshots: '@svgr/core@8.1.0(typescript@6.0.3)': dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7) camelcase: 6.3.0 cosmiconfig: 8.3.6(typescript@6.0.3) snake-case: 3.0.4 @@ -3759,13 +3759,13 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 entities: 4.5.0 '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))': dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7) '@svgr/core': 8.1.0(typescript@6.0.3) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 @@ -3862,13 +3862,13 @@ snapshots: '@tanstack/query-core': 5.100.14 react: 19.2.6 - '@tanstack/react-virtual@3.13.25(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@tanstack/react-virtual@3.13.26(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@tanstack/virtual-core': 3.15.0 + '@tanstack/virtual-core': 3.16.0 react: 19.2.6 react-dom: 19.2.6(react@19.2.6) - '@tanstack/virtual-core@3.15.0': {} + '@tanstack/virtual-core@3.16.0': {} '@tauri-apps/api@2.11.0': {} @@ -3965,24 +3965,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.29.3 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.29.3 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 '@types/byte-size@8.1.2': {} @@ -4079,9 +4079,9 @@ snapshots: '@vitejs/plugin-react@5.2.0(vite@7.3.3(@types/node@25.9.1)(sass@1.92.1)(yaml@2.9.0))': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7) '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 @@ -4133,7 +4133,7 @@ snapshots: babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 cosmiconfig: 7.1.0 resolve: 1.22.12 @@ -4152,7 +4152,7 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.1.0: + brace-expansion@2.1.1: dependencies: balanced-match: 1.0.2 @@ -4539,7 +4539,7 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es-toolkit@1.46.1: {} + es-toolkit@1.47.0: {} esbuild@0.27.7: optionalDependencies: @@ -5230,7 +5230,7 @@ snapshots: minimatch@5.1.9: dependencies: - brace-expansion: 2.1.0 + brace-expansion: 2.1.1 motion-dom@12.40.0: dependencies: @@ -5334,7 +5334,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -5489,7 +5489,7 @@ snapshots: '@reduxjs/toolkit': 2.12.0(react-redux@9.3.0(@types/react@19.2.15)(react@19.2.6)(redux@5.0.1))(react@19.2.6) clsx: 2.1.1 decimal.js-light: 2.5.1 - es-toolkit: 1.46.1 + es-toolkit: 1.47.0 eventemitter3: 5.0.4 immer: 10.2.0 react: 19.2.6 @@ -5926,7 +5926,7 @@ snapshots: use-deep-compare-effect@1.8.1(react@19.2.6): dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 dequal: 2.0.3 react: 19.2.6 diff --git a/src-tauri/.sqlx/query-1c996712f62a1005990733cd9eee7a94bdcf2ef01b559304aea1d642fab7ae22.json b/src-tauri/.sqlx/query-31e1b340bfbdf29dde642b657124a0705b638769ce6631c1b455cbf45e82bb14.json similarity index 50% rename from src-tauri/.sqlx/query-1c996712f62a1005990733cd9eee7a94bdcf2ef01b559304aea1d642fab7ae22.json rename to src-tauri/.sqlx/query-31e1b340bfbdf29dde642b657124a0705b638769ce6631c1b455cbf45e82bb14.json index 0da21a4fc..004d36d09 100644 --- a/src-tauri/.sqlx/query-1c996712f62a1005990733cd9eee7a94bdcf2ef01b559304aea1d642fab7ae22.json +++ b/src-tauri/.sqlx/query-31e1b340bfbdf29dde642b657124a0705b638769ce6631c1b455cbf45e82bb14.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "DELETE FROM location WHERE id = $1;", + "query": "DELETE FROM location WHERE id = $1", "describe": { "columns": [], "parameters": { @@ -8,5 +8,5 @@ }, "nullable": [] }, - "hash": "1c996712f62a1005990733cd9eee7a94bdcf2ef01b559304aea1d642fab7ae22" + "hash": "31e1b340bfbdf29dde642b657124a0705b638769ce6631c1b455cbf45e82bb14" } diff --git a/src-tauri/.sqlx/query-3bedd8a0e3a8d4b76330ba0f81d82cf1590e6d15ba30360c41b0a5a3482df3df.json b/src-tauri/.sqlx/query-3bedd8a0e3a8d4b76330ba0f81d82cf1590e6d15ba30360c41b0a5a3482df3df.json new file mode 100644 index 000000000..9f7beee72 --- /dev/null +++ b/src-tauri/.sqlx/query-3bedd8a0e3a8d4b76330ba0f81d82cf1590e6d15ba30360c41b0a5a3482df3df.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT EXISTS (SELECT 1 FROM location WHERE service_location_mode <= $1)", + "describe": { + "columns": [ + { + "name": "EXISTS (SELECT 1 FROM location WHERE service_location_mode <= $1)", + "ordinal": 0, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false + ] + }, + "hash": "3bedd8a0e3a8d4b76330ba0f81d82cf1590e6d15ba30360c41b0a5a3482df3df" +} diff --git a/src-tauri/.sqlx/query-f88f92313f52f0b2c584f48b40e6edb4bc14d96f3000bd58a3ca68eecb8e4a88.json b/src-tauri/.sqlx/query-97a52a8bbf020b77afe5dc427efb66abfdc6b571d1631a4f77fbf4fa5cfbe7e7.json similarity index 94% rename from src-tauri/.sqlx/query-f88f92313f52f0b2c584f48b40e6edb4bc14d96f3000bd58a3ca68eecb8e4a88.json rename to src-tauri/.sqlx/query-97a52a8bbf020b77afe5dc427efb66abfdc6b571d1631a4f77fbf4fa5cfbe7e7.json index ee360eaf0..e0c2aeee7 100644 --- a/src-tauri/.sqlx/query-f88f92313f52f0b2c584f48b40e6edb4bc14d96f3000bd58a3ca68eecb8e4a88.json +++ b/src-tauri/.sqlx/query-97a52a8bbf020b77afe5dc427efb66abfdc6b571d1631a4f77fbf4fa5cfbe7e7.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\",\n mfa_method \"mfa_method: _\", posture_check_required FROM location WHERE pubkey = $1;", + "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\",\n mfa_method \"mfa_method: _\", posture_check_required FROM location WHERE pubkey = $1", "describe": { "columns": [ { @@ -100,5 +100,5 @@ false ] }, - "hash": "f88f92313f52f0b2c584f48b40e6edb4bc14d96f3000bd58a3ca68eecb8e4a88" + "hash": "97a52a8bbf020b77afe5dc427efb66abfdc6b571d1631a4f77fbf4fa5cfbe7e7" } diff --git a/src-tauri/.sqlx/query-ba54bef9b71c2add858203b7be2c0e87d3a54d536ef96a923a6b949e16b9746e.json b/src-tauri/.sqlx/query-af70b9b18d8452a03d4d5624c2f3a11ab0d2e123989e97dfceb57e472523398c.json similarity index 67% rename from src-tauri/.sqlx/query-ba54bef9b71c2add858203b7be2c0e87d3a54d536ef96a923a6b949e16b9746e.json rename to src-tauri/.sqlx/query-af70b9b18d8452a03d4d5624c2f3a11ab0d2e123989e97dfceb57e472523398c.json index a8ba1030a..a0a75036b 100644 --- a/src-tauri/.sqlx/query-ba54bef9b71c2add858203b7be2c0e87d3a54d536ef96a923a6b949e16b9746e.json +++ b/src-tauri/.sqlx/query-af70b9b18d8452a03d4d5624c2f3a11ab0d2e123989e97dfceb57e472523398c.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "UPDATE location SET route_all_traffic = 0 WHERE instance_id = $1;", + "query": "UPDATE location SET route_all_traffic = 0 WHERE instance_id = $1", "describe": { "columns": [], "parameters": { @@ -8,5 +8,5 @@ }, "nullable": [] }, - "hash": "ba54bef9b71c2add858203b7be2c0e87d3a54d536ef96a923a6b949e16b9746e" + "hash": "af70b9b18d8452a03d4d5624c2f3a11ab0d2e123989e97dfceb57e472523398c" } diff --git a/src-tauri/.sqlx/query-49039d91cfdefbb32284d15af739a2090ba7baf9dee8cf00e8800b9a5f891fab.json b/src-tauri/.sqlx/query-c6a5e793cccc520039e28da8b4fb73e0c79c6a8d671c300ec2ea3eb0d58342b5.json similarity index 96% rename from src-tauri/.sqlx/query-49039d91cfdefbb32284d15af739a2090ba7baf9dee8cf00e8800b9a5f891fab.json rename to src-tauri/.sqlx/query-c6a5e793cccc520039e28da8b4fb73e0c79c6a8d671c300ec2ea3eb0d58342b5.json index c6b90053b..2436bff93 100644 --- a/src-tauri/.sqlx/query-49039d91cfdefbb32284d15af739a2090ba7baf9dee8cf00e8800b9a5f891fab.json +++ b/src-tauri/.sqlx/query-c6a5e793cccc520039e28da8b4fb73e0c79c6a8d671c300ec2ea3eb0d58342b5.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id, instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\", mfa_method \"mfa_method: _\", posture_check_required FROM location WHERE service_location_mode <= $1 ORDER BY name ASC;", + "query": "SELECT id, instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\", mfa_method \"mfa_method: _\", posture_check_required FROM location WHERE service_location_mode <= $1 ORDER BY name ASC", "describe": { "columns": [ { @@ -100,5 +100,5 @@ false ] }, - "hash": "49039d91cfdefbb32284d15af739a2090ba7baf9dee8cf00e8800b9a5f891fab" + "hash": "c6a5e793cccc520039e28da8b4fb73e0c79c6a8d671c300ec2ea3eb0d58342b5" } diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 70af8679f..1015b0d5b 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1431,7 +1431,7 @@ dependencies = [ "os_info", "prost", "regex", - "reqwest 0.13.3", + "reqwest 0.13.4", "rust-ini", "semver", "serde", @@ -1486,7 +1486,7 @@ dependencies = [ "defguard_wireguard_rs", "dirs-next", "prost", - "reqwest 0.13.3", + "reqwest 0.13.4", "serde", "serde_json", "thiserror 2.0.18", @@ -2723,9 +2723,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" dependencies = [ "bytes", "itoa", @@ -3456,9 +3456,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" dependencies = [ "serde_core", "value-bag", @@ -3520,9 +3520,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "memoffset" @@ -5109,9 +5109,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e0021ea2c22aed41653bc7e1419abb2c97e038ff2c33d0e1309e49a97deec0" +checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" dependencies = [ "base64 0.22.1", "bytes", @@ -6143,18 +6143,18 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "struct-patch" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f19113e4a69e522707bfc091d0bf34def27cb734506a58e086288bec295093ac" +checksum = "be0dd3602dc475cc00732da8b54a79d1aec0843b3ecfa3a1efcbf8ff00e181a5" dependencies = [ "struct-patch-derive", ] [[package]] name = "struct-patch-derive" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65b68ee01d5cbcd4f403fd8a9cb4ad1af95debf22d66de15603afe3f74598e45" +checksum = "97409f38bb9816c7606c9ba860b2bb26f0bd1d5b4254b7fc26aa827af6af760c" dependencies = [ "proc-macro2", "quote", @@ -6398,7 +6398,7 @@ dependencies = [ "percent-encoding", "plist", "raw-window-handle", - "reqwest 0.13.3", + "reqwest 0.13.4", "serde", "serde_json", "serde_repr", diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 782549bc8..8925cd6f4 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -34,7 +34,7 @@ use defguard_client::{ LOG_FILENAME, VERSION, }; use log::{Level, LevelFilter}; -use tauri::{AppHandle, Builder, Manager, RunEvent, WindowEvent}; +use tauri::{async_runtime, AppHandle, Builder, Manager, RunEvent, WindowEvent}; use tauri_plugin_deep_link::DeepLinkExt; use tauri_plugin_log::{Target, TargetKind}; @@ -100,7 +100,7 @@ async fn startup(app_handle: &AppHandle) { .lock() .expect("failed to lock app state") .mtu(); - let handle = tauri::async_runtime::spawn(async move { + let handle = async_runtime::spawn(async move { if let Err(err) = defguard_client::apple::sync_locations_and_tunnels(mtu).await { error!("Failed to sync locations and tunnels: {err}"); } @@ -122,7 +122,7 @@ async fn startup(app_handle: &AppHandle) { }); let handle = app_handle.clone(); - tauri::async_runtime::spawn(async move { + async_runtime::spawn(async move { defguard_client::apple::connection_state_update_thread(&handle).await; error!("Connection state update thread has exited unexpectedly, quitting the app."); handle.exit(0); @@ -131,7 +131,7 @@ async fn startup(app_handle: &AppHandle) { // Run periodic tasks. let periodic_tasks_handle = app_handle.clone(); - tauri::async_runtime::spawn(async move { + async_runtime::spawn(async move { run_periodic_tasks(&periodic_tasks_handle).await; // One of the tasks exited, so something went wrong, quit the app error!("One of the periodic tasks has stopped unexpectedly. Exiting the application."); @@ -154,6 +154,17 @@ async fn startup(app_handle: &AppHandle) { debug!("Tray menu has been re-generated successfully."); } +/// Open the appropriate window, either the old or the new UI, depending if there are locations. +#[cfg(not(target_os = "linux"))] +fn open_appropriate_window(app_handle: &AppHandle) { + let has_locations = async_runtime::block_on(has_non_service_locations()); + if has_locations { + let _ = WindowManager::open_tray(app_handle); + } else { + let _ = WindowManager::open_full_view(app_handle); + } +} + fn main() { let app = Builder::default() .invoke_handler(tauri::generate_handler![ @@ -220,14 +231,7 @@ fn main() { #[cfg(not(target_os = "linux"))] { - let has_locations = tauri::async_runtime::block_on( - defguard_client::window_manager::has_non_service_locations(), - ); - if has_locations { - let _ = WindowManager::open_tray(app); - } else { - let _ = WindowManager::open_full_view(app); - } + open_appropriate_window(app); } } })) @@ -370,12 +374,12 @@ fn main() { )?; // run DB migrations - tauri::async_runtime::block_on(handle_db_migrations()); + async_runtime::block_on(handle_db_migrations()); // Check if client needs to be initialized // and try to load provisioning config if necessary let provisioning_config = - tauri::async_runtime::block_on(handle_client_initialization(app_handle)); + async_runtime::block_on(handle_client_initialization(app_handle)); let state = AppState::new(config, provisioning_config); app.manage(state); @@ -395,7 +399,8 @@ fn main() { } #[cfg(not(target_os = "linux"))] { - // If the app was cold-launched by a deep link the full view must open, not the tray. + // If the app was cold-launched by a deep-link, the full view must open, not the + // tray. let launched_by_deep_link = app_handle .deep_link() .get_current() @@ -406,15 +411,7 @@ fn main() { info!("App launched via deep link, opening full view directly."); let _ = WindowManager::open_full_view(app_handle); } else { - let has_locations = tauri::async_runtime::block_on( - defguard_client::window_manager::has_non_service_locations() - ); - if has_locations { - WindowManager::open_tray(app_handle)?; - } else { - info!("No locations found, showing full view on startup."); - let _ = WindowManager::open_full_view(app_handle); - } + open_appropriate_window(app_handle); } } @@ -455,7 +452,7 @@ fn main() { log_dir.display(), service::config::DEFAULT_LOG_DIR ); - tauri::async_runtime::block_on(startup(app_handle)); + async_runtime::block_on(startup(app_handle)); // Handle a deep link that launched the app (startup case). if let Ok(Some(urls)) = app_handle.deep_link().get_current() { @@ -465,7 +462,7 @@ fn main() { // Handle Ctrl-C. debug!("Setting up Ctrl-C handler."); let app_handle_clone = app_handle.clone(); - tauri::async_runtime::spawn(async move { + async_runtime::spawn(async move { tokio::signal::ctrl_c() .await .expect("Signal handler failure"); @@ -490,7 +487,7 @@ fn main() { let semaphore = Arc::new(AtomicBool::new(false)); let semaphore_clone = Arc::clone(&semaphore); - let handle = tauri::async_runtime::spawn(async move { + let handle = async_runtime::spawn(async move { let _ = close_all_connections().await; // This will clean the database file, pruning write-ahead log. DB_POOL.close().await; @@ -499,19 +496,28 @@ fn main() { // Obj-C API needs a runtime, but at this point Tauri has closed its runtime, so // create a temporary one. defguard_client::apple::spawn_runloop_and_wait_for(&semaphore); - tauri::async_runtime::block_on(async move { + async_runtime::block_on(async move { let _ = handle.await; }); } #[cfg(not(target_os = "macos"))] { - tauri::async_runtime::block_on(async move { + async_runtime::block_on(async move { let _ = close_all_connections().await; // This will clean the database file, pruning write-ahead log. DB_POOL.close().await; }); } } + #[cfg(target_os = "macos")] + RunEvent::Reopen { + has_visible_windows, + .. + } => { + if !has_visible_windows { + open_appropriate_window(app_handle); + } + } _ => { trace!("Received event: {event:?}"); } diff --git a/src-tauri/src/database/models/location.rs b/src-tauri/src/database/models/location.rs index 85c470c35..543d480b9 100644 --- a/src-tauri/src/database/models/location.rs +++ b/src-tauri/src/database/models/location.rs @@ -5,7 +5,7 @@ use std::str::FromStr; #[cfg(not(target_os = "macos"))] use defguard_wireguard_rs::{key::Key, net::IpAddrMask, peer::Peer, InterfaceConfiguration}; use serde::{Deserialize, Serialize}; -use sqlx::{prelude::Type, query, query_as, query_scalar, Error as SqlxError, SqliteExecutor}; +use sqlx::{prelude::Type, query, query_as, query_scalar, SqliteExecutor}; #[cfg(not(target_os = "macos"))] use super::wireguard_keys::WireguardKeys; @@ -129,7 +129,7 @@ impl Location { pub(crate) async fn all<'e, E>( executor: E, include_service_locations: bool, - ) -> Result, SqlxError> + ) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -143,14 +143,34 @@ impl Location { service_location_mode \"service_location_mode: ServiceLocationMode\", \ mfa_method \"mfa_method: _\", posture_check_required \ FROM location WHERE service_location_mode <= $1 \ - ORDER BY name ASC;", + ORDER BY name ASC", max_service_location_mode ) .fetch_all(executor) .await } - pub(crate) async fn save<'e, E>(&mut self, executor: E) -> Result<(), SqlxError> + #[cfg(any(windows, target_os = "macos"))] + pub(crate) async fn exist<'e, E>( + executor: E, + include_service_locations: bool, + ) -> sqlx::Result + where + E: SqliteExecutor<'e>, + { + let max_service_location_mode = + Self::get_service_location_mode_filter(include_service_locations); + let result = query_scalar!( + "SELECT EXISTS (SELECT 1 FROM location WHERE service_location_mode <= $1)", + max_service_location_mode + ) + .fetch_one(executor) + .await?; + + Ok(result != 0) + } + + pub(crate) async fn save<'e, E>(&mut self, executor: E) -> sqlx::Result<()> where E: SqliteExecutor<'e>, { @@ -186,7 +206,7 @@ impl Location { pub(crate) async fn find_by_id<'e, E>( executor: E, location_id: Id, - ) -> Result, SqlxError> + ) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -208,7 +228,7 @@ impl Location { executor: E, instance_id: Id, include_service_locations: bool, - ) -> Result, SqlxError> + ) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -230,10 +250,7 @@ impl Location { .await } - pub(crate) async fn find_by_public_key<'e, E>( - executor: E, - pubkey: &str, - ) -> Result + pub(crate) async fn find_by_public_key<'e, E>(executor: E, pubkey: &str) -> sqlx::Result where E: SqliteExecutor<'e>, { @@ -244,18 +261,18 @@ impl Location { location_mfa_mode \"location_mfa_mode: LocationMfaMode\", \ service_location_mode \"service_location_mode: ServiceLocationMode\", mfa_method \"mfa_method: _\", posture_check_required \ - FROM location WHERE pubkey = $1;", + FROM location WHERE pubkey = $1", pubkey ) .fetch_one(executor) .await } - pub(crate) async fn delete<'e, E>(&self, executor: E) -> Result<(), SqlxError> + pub(crate) async fn delete<'e, E>(&self, executor: E) -> sqlx::Result<()> where E: SqliteExecutor<'e>, { - query!("DELETE FROM location WHERE id = $1;", self.id) + query!("DELETE FROM location WHERE id = $1", self.id) .execute(executor) .await?; Ok(()) @@ -270,7 +287,7 @@ impl Location { E: SqliteExecutor<'e>, { query!( - "UPDATE location SET route_all_traffic = 0 WHERE instance_id = $1;", + "UPDATE location SET route_all_traffic = 0 WHERE instance_id = $1", instance_id ) .execute(executor) @@ -401,7 +418,7 @@ impl Location { } impl Location { - pub(crate) async fn save<'e, E>(self, executor: E) -> Result, SqlxError> + pub(crate) async fn save<'e, E>(self, executor: E) -> sqlx::Result> where E: SqliteExecutor<'e>, { diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index abedaeb94..5f9417391 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -17,7 +17,7 @@ use crate::{ database::{models::location::Location, DB_POOL}, error::Error, events::EventKey, - window_manager::{show_new_ui_window_near_tray, NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID}, + window_manager::{show_new_ui_window, NEW_UI_WINDOW_ID, OLD_UI_WINDOW_ID}, ConnectionType, }; @@ -188,7 +188,7 @@ pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { if let Some(old_ui) = app.get_webview_window(OLD_UI_WINDOW_ID) { let _ = old_ui.hide(); } - show_new_ui_window_near_tray(app); + show_new_ui_window(app); } else { let _ = WindowManager::open_full_view(app); } @@ -258,7 +258,7 @@ pub fn handle_tray_menu_event(app: &AppHandle, event: MenuEvent) { info!("Received QUIT request. Initiating shutdown..."); handle.exit(0); } - TRAY_EVENT_SHOW => show_new_ui_window_near_tray(app), + TRAY_EVENT_SHOW => show_new_ui_window(app), TRAY_EVENT_HIDE => hide_visible_windows(app), TRAY_EVENT_UPDATES => { let _ = webbrowser::open(SUBSCRIBE_UPDATES_LINK); diff --git a/src-tauri/src/window_manager/mod.rs b/src-tauri/src/window_manager/mod.rs index 8ab01c079..be3d38c02 100644 --- a/src-tauri/src/window_manager/mod.rs +++ b/src-tauri/src/window_manager/mod.rs @@ -8,10 +8,7 @@ use crate::database::{models::location::Location, DB_POOL}; /// Returns `true` if there are any non-service locations in the database. #[cfg(not(target_os = "linux"))] pub async fn has_non_service_locations() -> bool { - match Location::all(&*DB_POOL, false).await { - Ok(locations) => !locations.is_empty(), - Err(_) => false, - } + Location::exist(&*DB_POOL, false).await.unwrap_or_default() } pub const NEW_UI_WINDOW_ID: &str = "new-ui"; @@ -89,6 +86,8 @@ impl WindowManager { #[cfg(target_os = "macos")] macos::position_window_near_tray(app, &window); #[cfg(target_os = "macos")] + let _ = app.set_dock_visibility(false); + #[cfg(target_os = "macos")] let _ = app.show(); let _ = window.show(); let _ = window.set_focus(); @@ -103,6 +102,8 @@ impl WindowManager { Self::build_full_window(app)? }; #[cfg(target_os = "macos")] + let _ = app.set_dock_visibility(true); + #[cfg(target_os = "macos")] let _ = app.show(); let _ = window.show(); let _ = window.set_focus(); @@ -123,10 +124,6 @@ pub(crate) fn show_new_ui_window(app: &AppHandle) { let _ = WindowManager::open_tray(app); } -pub(crate) fn show_new_ui_window_near_tray(app: &AppHandle) { - show_new_ui_window(app); -} - #[tauri::command] pub fn open_new_ui_window(app: AppHandle) { show_new_ui_window(&app); @@ -142,9 +139,6 @@ pub fn open_old_ui_window(app: AppHandle) { #[tauri::command] pub fn swap_to_old_ui(app: AppHandle) { tracing::info!("swap_to_old_ui called"); - #[cfg(target_os = "macos")] - let _ = app.set_dock_visibility(true); - if let Some(window) = tauri::Manager::get_webview_window(&app, NEW_UI_WINDOW_ID) { if let Err(err) = window.hide() { tracing::error!("swap_to_old_ui task: Failed to hide new-ui window: {err:?}"); @@ -175,9 +169,6 @@ pub fn close_tray_window(app: AppHandle) { #[tauri::command] pub fn swap_to_new_ui(app: AppHandle) { tracing::info!("swap_to_new_ui called"); - #[cfg(target_os = "macos")] - let _ = app.set_dock_visibility(false); - show_new_ui_window(&app); if let Some(window) = tauri::Manager::get_webview_window(&app, OLD_UI_WINDOW_ID) { if let Err(err) = window.hide() { diff --git a/src/shared/images/png/logo_256-256.png b/src/shared/images/png/logo_256-256.png index a18d538b07780e5598bf969ff389e7d9fe6d0734..12f44fdee1e9fe0bac7cd5f2734c02f1bf2f9afd 100644 GIT binary patch literal 27413 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
VQ7B}>Q-=ZRYi&fOU#BG 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 Date: Wed, 27 May 2026 12:38:04 +0200 Subject: [PATCH 029/155] fix anti-virus posture report (#907) --- src-tauri/src/enterprise/inspector/windows.rs | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src-tauri/src/enterprise/inspector/windows.rs b/src-tauri/src/enterprise/inspector/windows.rs index d5c56a043..30539e322 100644 --- a/src-tauri/src/enterprise/inspector/windows.rs +++ b/src-tauri/src/enterprise/inspector/windows.rs @@ -109,16 +109,9 @@ pub(super) fn disk_encryption_status() -> Result { pub(super) fn anti_virus_status() -> Result { let conn = WMIConnection::with_namespace_path("root\\SecurityCenter2")?; let products: Vec = conn.query()?; - for product in products { - let enabled = (product.product_state & 0x0001_0000) != 0; - let realtime = (product.product_state & 0x0002_0000) != 0; - // let up_to_date = (product.product_state & 0x0004_0000) != 0; - if enabled || realtime { - return Ok(true); - } - } - - Ok(false) + Ok(products + .iter() + .any(|product| (product.product_state & 0x0000_F000) == 0x0000_1000)) } /// Check if this machine is part of an Active Directory domain. From 06f45b1beb65d8ff1f17eef6bc75bfd86b8145cf Mon Sep 17 00:00:00 2001 From: Jacek Chmielewski Date: Wed, 27 May 2026 15:15:49 +0200 Subject: [PATCH 030/155] Posture errors layout (#909) --- new-ui/src/shared/components/Icon/Icon.tsx | 3 ++ .../src/shared/components/Icon/icon-types.ts | 1 + .../Icon/icons/IconGlobeBlocked.tsx | 54 +++++++++++++++++++ new-ui/src/shared/components/Icon/style.scss | 6 +++ .../LocationCardPostureCheckFailView.tsx | 32 +++++++---- .../style.scss | 21 +++++--- 6 files changed, 101 insertions(+), 16 deletions(-) create mode 100644 new-ui/src/shared/components/Icon/icons/IconGlobeBlocked.tsx diff --git a/new-ui/src/shared/components/Icon/Icon.tsx b/new-ui/src/shared/components/Icon/Icon.tsx index 73337ee7c..a43cd6401 100644 --- a/new-ui/src/shared/components/Icon/Icon.tsx +++ b/new-ui/src/shared/components/Icon/Icon.tsx @@ -61,6 +61,7 @@ import { IconFiltration } from './icons/IconFiltration'; import { IconGateway } from './icons/IconGateway'; import { IconGithub } from './icons/IconGithub'; import { IconGlobe } from './icons/IconGlobe'; +import { IconGlobeBlocked } from './icons/IconGlobeBlocked'; import { IconGroups } from './icons/IconGroups'; import { IconHamburger } from './icons/IconHamburger'; import { IconHelp } from './icons/IconHelp'; @@ -291,6 +292,8 @@ export const Icon = ({ return IconFileAdd; case 'globe': return IconGlobe; + case 'globe-blocked': + return IconGlobeBlocked; case 'help': return IconHelp; case 'access-settings': diff --git a/new-ui/src/shared/components/Icon/icon-types.ts b/new-ui/src/shared/components/Icon/icon-types.ts index e3cff9a34..0bb5f2ac6 100644 --- a/new-ui/src/shared/components/Icon/icon-types.ts +++ b/new-ui/src/shared/components/Icon/icon-types.ts @@ -38,6 +38,7 @@ export const IconKind = { PieChart: 'pie-chart', Notification: 'notification', Globe: 'globe', + GlobeBlocked: 'globe-blocked', Groups: 'groups', OpenInNewWindow: 'open-in-new-window', Users: 'users', diff --git a/new-ui/src/shared/components/Icon/icons/IconGlobeBlocked.tsx b/new-ui/src/shared/components/Icon/icons/IconGlobeBlocked.tsx new file mode 100644 index 000000000..c99baf29c --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconGlobeBlocked.tsx @@ -0,0 +1,54 @@ +import type { SVGProps } from 'react'; + +export const IconGlobeBlocked = (props: SVGProps) => { + return ( + + + + + + + + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/style.scss b/new-ui/src/shared/components/Icon/style.scss index 6a81db60d..bb973dd5d 100644 --- a/new-ui/src/shared/components/Icon/style.scss +++ b/new-ui/src/shared/components/Icon/style.scss @@ -39,3 +39,9 @@ .icon[style*='--icon-color'] svg circle { stroke: var(--icon-color); } + +.icon svg.stroke-icon path, +.icon[style*='--icon-color'] svg.stroke-icon path { + fill: none; + stroke: var(--icon-color, var(--c-white-100)); +} diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/LocationCardPostureCheckFailView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/LocationCardPostureCheckFailView.tsx index a2cf7c52e..bdc59c1f3 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/LocationCardPostureCheckFailView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/LocationCardPostureCheckFailView.tsx @@ -1,5 +1,5 @@ import './style.scss'; -import { ThemeSpacing } from '../../../../types'; +import { ThemeSpacing, ThemeVariable } from '../../../../types'; import { Button } from '../../../Button/Button'; import { ButtonVariant } from '../../../Button/types'; import { Divider } from '../../../Divider/Divider'; @@ -17,22 +17,34 @@ export const LocationCardPostureCheckFailView = () => { setView(LocationCardViews.Default); }; + const postureErrors = postureError + ? postureError + .split(',') + .map((error) => error.trim()) + .filter(Boolean) + : ['Your device did not pass posture check.']; + return (
- + -

- {postureError ?? 'Your device did not pass posture check.'} -

+
+ {postureErrors.map((error) => ( +

+ {error} +

+ ))} +
-
); }; diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/style.scss b/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/style.scss index c42ff8937..72b5f0ec0 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/style.scss +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/style.scss @@ -3,23 +3,32 @@ flex-direction: column; align-items: center; - .posture-warning-icon { + .posture-error-icon { display: block; - - svg path { - fill: var(--fg-white-70); - } + width: 48px; + height: 48px; } .location-card-view-header { align-items: center; + row-gap: var(--spacing-sm); text-align: center; > .title { - color: var(--fg-white-70); + font: var(--t-body-sm-600); + color: var(--fg-white-100); + } + + .posture-errors { + display: flex; + flex-direction: column; + align-items: center; + gap: var(--spacing-xs); } p.error { + margin: 0; + font: var(--t-body-xs-400); color: var(--fg-white-70); } } From 5fcc1acbe0382a3015e5500738e8b8c909d620b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Fri, 29 May 2026 11:42:33 +0200 Subject: [PATCH 031/155] update app icon and tray icon (#908) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update app icon and tray icon * Update defguard-client.spec * Delete 20260527114745_remove_tray_theme.sql * remove mobile targets after icon gen * Shrink icons --------- Co-authored-by: Adam Ciarciński --- resources-linux/defguard-client.spec | 20 ++---- src-tauri/icons/128x128.png | Bin 4739 -> 16016 bytes src-tauri/icons/128x128@2x.png | Bin 9918 -> 52424 bytes src-tauri/icons/32x32.png | Bin 1272 -> 2080 bytes src-tauri/icons/64x64.png | Bin 0 -> 5600 bytes src-tauri/icons/Square107x107Logo.png | Bin 4448 -> 12143 bytes src-tauri/icons/Square142x142Logo.png | Bin 6091 -> 18909 bytes src-tauri/icons/Square150x150Logo.png | Bin 6468 -> 20609 bytes src-tauri/icons/Square284x284Logo.png | Bin 14760 -> 63733 bytes src-tauri/icons/Square30x30Logo.png | Bin 1185 -> 1912 bytes src-tauri/icons/Square310x310Logo.png | Bin 16409 -> 75652 bytes src-tauri/icons/Square44x44Logo.png | Bin 1746 -> 3253 bytes src-tauri/icons/Square71x71Logo.png | Bin 2973 -> 6650 bytes src-tauri/icons/Square89x89Logo.png | Bin 3684 -> 9258 bytes src-tauri/icons/StoreLogo.png | Bin 2002 -> 3861 bytes src-tauri/icons/icon.icns | Bin 205807 -> 1117556 bytes src-tauri/icons/icon.ico | Bin 29154 -> 72560 bytes src-tauri/icons/icon.png | Bin 6611 -> 182335 bytes .../resources/icons/tray-32x32-active.png | Bin 0 -> 646 bytes .../icons/tray-32x32-black-active.png | Bin 521 -> 0 bytes .../resources/icons/tray-32x32-black.png | Bin 945 -> 0 bytes .../icons/tray-32x32-color-active.png | Bin 636 -> 0 bytes .../resources/icons/tray-32x32-color.png | Bin 992 -> 0 bytes .../icons/tray-32x32-gray-active.png | Bin 587 -> 0 bytes src-tauri/resources/icons/tray-32x32-gray.png | Bin 1001 -> 0 bytes .../icons/tray-32x32-white-active.png | Bin 537 -> 0 bytes .../resources/icons/tray-32x32-white.png | Bin 980 -> 0 bytes src-tauri/resources/icons/tray-32x32.png | Bin 0 -> 471 bytes src-tauri/src/app_config.rs | 13 ---- src-tauri/src/commands.rs | 8 --- src-tauri/src/tray.rs | 6 +- src/pages/client/clientAPI/types.ts | 5 -- src/pages/client/hooks/useClientStore.tsx | 1 - .../GlobalSettingsTab/GlobalSettingsTab.tsx | 68 ------------------ 34 files changed, 5 insertions(+), 116 deletions(-) create mode 100644 src-tauri/icons/64x64.png create mode 100644 src-tauri/resources/icons/tray-32x32-active.png delete mode 100644 src-tauri/resources/icons/tray-32x32-black-active.png delete mode 100644 src-tauri/resources/icons/tray-32x32-black.png delete mode 100644 src-tauri/resources/icons/tray-32x32-color-active.png delete mode 100644 src-tauri/resources/icons/tray-32x32-color.png delete mode 100644 src-tauri/resources/icons/tray-32x32-gray-active.png delete mode 100644 src-tauri/resources/icons/tray-32x32-gray.png delete mode 100644 src-tauri/resources/icons/tray-32x32-white-active.png delete mode 100644 src-tauri/resources/icons/tray-32x32-white.png create mode 100644 src-tauri/resources/icons/tray-32x32.png diff --git a/resources-linux/defguard-client.spec b/resources-linux/defguard-client.spec index 55391de0d..002ad0100 100644 --- a/resources-linux/defguard-client.spec +++ b/resources-linux/defguard-client.spec @@ -21,14 +21,8 @@ Desktop client for managing WireGuard VPN connections %{__mkdir} -p %{buildroot}/%{_datadir}/icons/hicolor/32x32/apps %{__install} -m 755 src-tauri/target/release/defguard-client %{buildroot}/%{_bindir}/ %{__install} -m 755 src-tauri/target/release/defguard-service %{buildroot}/%{_sbindir}/ -%{__install} -m 644 src-tauri/target/release/resources/icons/tray-32x32-black.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-black.png -%{__install} -m 644 src-tauri/target/release/resources/icons/tray-32x32-black-active.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-black-active.png -%{__install} -m 644 src-tauri/target/release/resources/icons/tray-32x32-color.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-color.png -%{__install} -m 644 src-tauri/target/release/resources/icons/tray-32x32-color-active.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-color-active.png -%{__install} -m 644 src-tauri/target/release/resources/icons/tray-32x32-gray.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-gray.png -%{__install} -m 644 src-tauri/target/release/resources/icons/tray-32x32-gray-active.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-gray-active.png -%{__install} -m 644 src-tauri/target/release/resources/icons/tray-32x32-white.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-white.png -%{__install} -m 644 src-tauri/target/release/resources/icons/tray-32x32-white-active.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-white-active.png +%{__install} -m 644 src-tauri/target/release/resources/icons/tray-32x32.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray-32x32.png +%{__install} -m 644 src-tauri/target/release/resources/icons/tray-32x32-active.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-active.png %{__install} -m 644 resources-linux/defguard-service.service %{buildroot}/%{_prefix}/lib/systemd/system/ %{__install} -m 644 resources-linux/defguard-client.desktop %{buildroot}/%{_datadir}/applications/defguard-client.desktop %{__install} -m 644 src-tauri/icons/128x128.png %{buildroot}/%{_datadir}/icons/hicolor/128x128/apps/defguard-client.png @@ -57,14 +51,8 @@ systemctl daemon-reload %files %{_bindir}/defguard-client %{_sbindir}/defguard-service -%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-black.png -%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-black-active.png -%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-color.png -%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-color-active.png -%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-gray.png -%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-gray-active.png -%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-white.png -%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-white-active.png +%{_prefix}/lib/defguard-client/resources/icons/tray-32x32.png +%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-active.png %{_prefix}/lib/systemd/system/defguard-service.service %{_datadir}/applications/defguard-client.desktop %{_datadir}/icons/hicolor/128x128/apps/defguard-client.png diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png index aadd4c3ae4c52a86a9ab9a0a37ecf5b80bc151f6..a5fbf1b5676950434725bd2f70a3ba4d45712c38 100644 GIT binary patch literal 16016 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 z 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 KMNUMnLSTZ~M1*hv literal 4739 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
!8GpNm3yf_cRS6 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 z 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 literal 9918 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 P00000NkvXXu0mjfpcq?| diff --git a/src-tauri/icons/64x64.png b/src-tauri/icons/64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..83e4294ced7f8dad0a7c674c5fd23a8c9f0e89af GIT binary patch literal 5600 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 &GQ!ad0&5)WVvT(BHP3H)|xOZJO+Xr-zLVzHk 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 literal 4448 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 literal 6091 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

d+Zdkbm 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 literal 6468 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

`mIUNQHj0zkuJx<=QBF@{Y6HD&i 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

(nMPnen)&B^-G*!~A zL6cc}&K0HKt{uUfn@(w{)1N(}qot;W0@$4>s?@WtVUnJ@AtZ0sC{YzV3@OlscRu zNo+R2iJ(D5bP>y&L;_u?4M!@nJ7Q%+nv)Zl+6x&q%{k%%V#!a(KzQ$Urf7P5F{ijJ zpUHSGwXJbXDnkPY0CwSJcYf!>>6ZT#aj6e78C0oP3GRZ@AtKP^i>sA;oTVa?1|YdK zxJX}}V*pFA8S(s1U{iRG3tj^0PnxPH6IG~+5??;1ChJs|a$zf|7k2_?H4+WPiPZt~ zQ{c5XF5nF>S;T>Tfqj~xbdWOD@$%>I!Hce4!p9ywhWkHv9LG)$*t<08f?p!aG1!y* zbt6FumxD^ZnLz+en1r7}TSE=DVA_6Z>og!%H`4VKlR0DPaEwJfPFrQ+NgQU@%-40HKkMA z^wjlo%txqBZl4`9bxwAQ9E}o~gKJZD3WppTkR6Zf9LSL)v1|IZ$bguyb=SlV(fHZ7 zDe7ioz}mV$@fmR4<=gDjm6wTqnzUKLre?GDEjPUVb^CE!XS0rcb!DrarFnysLBI_} zFllCR6QzSr*|6_ZKy^auW-YWsw~C&*(85HcX-!Vl4lQaaL1Zl~^EzSLFd`Vy1*(^n zfo7}$u6iO%)vO!VivJT#XYRv;CQQ_1--?29QmL7ev7pIqmxH&-!ouLImrXaxOQ+5D z`mjq2VkXUbVsBUgjc4j-JaAVYKLK13L#F~vwK=YhqW&ey#*iI02@2`!=b>|~$h;{* zaRD|G2%9uqG4z9DdmD}hfCF*tl;f!v7+!zNGG2E50)ScAr`g!7%P*b7@4oXO{^lQ6 z@Zl$b=i&cY$I_BvIx)}*K+i;SFR9E4+Xf&QNE2Jt|1?)5&oKfGvlk+}R?w2lIB4CX zIdPsBkt&L8I=fGmOKub8y;<`W9Ulc1Q8|$oJ!TV;PBFzZO}tX!`EHfNpG;tU+7_E_ ztUk3hw~OZ%0T4s!=O&7we^hNw9iwk}C0EG-*ONvtmr}FCz~2^u(6uk7{ul?FJg`;- zgQtwwm|wD}>QtX|SP1DLO5k@A?gU*~3Y;#gW+2=hfWw?PwlaWl9KLBD?|=I~2yB$% z_S}{_clWK=FXIn?^CG2Np-hQk zR&Odo020`S(kWBdTFn=T4N3B%xIaZpFrdu+8H+TcGBJ!gGO=skZ>j-N1mNgxwwyOj zpSUQ(b)IzhMmk{jw5c^drI|^nUHG(A)I!3|aB;~r*1K{eSpZ!fW48A(&%xH~_Hx@f zE^Tz6%MP22wg@!19*EdDvXDEeolLPw0Hq8Ka=e813ASUr2b??eY@g!it(v~*MK^g{&{`(^GThR6yZO3(j=AHWN zzkN2Lu|a_%yl*uLM(ZHvY2xUtLTsZw9?0D)9*s0yr9g(FVyt+NgJ*qqRj`PDaTHX0 z0x_cX=KEe63~uBm2wpNZ;-I?(#;i5M8KnzAF-AaUk-31gf=v<(7ojfHk4g<*|Bh@_ zvb|uDb47hLWWZ3rU`4XP!cN~wJwO4B>})#7I0+*$Y@TMH20Y`*4R3hKGG6lI^E0wf zKU_BJnHSIDciwRjU--(leCHeAS;L+M!~CQN{Wj|>u_PO$!)RbLz50|LkK*e#Q984g zDmh&pekA)xl@&8CL|xe2fwCL&m}fSqp_YBps<MqX-c{I#XlgwK)K_~|a3*rp!@Opr0*X~EUsQiH zlD;9sqJTK{N2_UI1GUcp?PCo0Np>RE9miH3`xXsvyk!x0-MoN3i`M&n_7sg1Q9EO2 zqs>x%H($4m8?Ii$$N%aW{^+5jc&7 z6F~xzrHlIc15+c;hwlJvS>n9YjhF0A!BKI{a;S=F%xI*V2QbQJJdsdkUsXyfM^sV< zCsv6i6mnAzh;_8YKIi~bJY0jM+fIio@_GQ9l~WFP;>N3{c+;&*c*ccI?9Bk=Tr(>aa^!PeY_RkOMzFBNS{V!tpuOgz#NcR>K^&OEuuP&XUJ)RL&rmdisx?+MMU(e?QiX*!LJlif9JJb9 zVbs!CLsC*gSw$T+10xpGNd+#7C3ugMvPO2Pz3C1!U~_P+t`1KC%w)?Q;l``wWZBM| zeG*_z4EXQ=8}Ometia50&mGHK27@~1+^|_sd&(5Q{fh_j$`|g%2R`)!{L{myu)NSP zHwSDoM;|9Be=C!ps<9~e&AA9g9{^zlcEu%p*!aZtKWMa^Q83P?4eb@2=BVueO z>A^cVFvRbH74pf%6%dSIp?9P(ezVG1m6UgSj&mbmOq_vOPl-NEJ!3y^08>D)c%$aw zW|A`}f=!$)Yz1xWY8{GRKJe$K@cFNA;;k=R!1J%1o^v*9Zfbb*E6>MmKeY!R z{Ieh6vtK-c!MUa7ax!OOHSY}@2BM!ccE7b+897d|xH$Gt6YC61a=qx^7F-89XmK0^ zGsy)3R1RyAK#!5S(Yq}$(XoOsND+*KLvBuy%O+7Vz<{HkY1QU)vHfaTe(!Pz%UL&P{~NHB!@RL&;!zO8Su zPmaqkY519!F5!mf{P5VP|NP#7k36`7&wYIjK*Roh6Oab)RK#QgoVVBT@FR|2`+wT5 zHdfNIJYV-a@64P%bM`CF9%*>g2pW9{T$y~W}<;mpi z&Q3BpXWp;pdEfVWuIK)|?wbcV{|z;+yQF&z{A|H$mSfw`)cEKPuc%p@ant8s#G~Kt zquVib+ZCF|gE!K0czw%^r0*L58>q`$LLJJH@Z25kB?d6Cj}#G3s!$W@T_>T#^Zat@ zE#VQemx-F}V6p@w**)P#G7e(Yv6FBFnyDYLz|Cj#3I?lF1yrG0g4ifjG=mmi#~ed) zQKBh;nh6LAbH8R+&sUks$AmXMZ=rGNFAc(Kuv2PNdX~buq>TXgXE(PyUS3N$wFkWa zk|q51_AWX#PKx?8SaNaQ_B=Z4&%rR6c@PC%1HJYR#h zf%M8j4diGs)JOnY*=1^UYgg)NCp||AFv7OEK%*~2RW6ObWc!-4wLyE0db*T+Jc4h* zZbS1j`x{BKBG{x9BpL_xn3Sa+O9@#;m{ELQ@TNAdxnL<9Y8fTGNcCy&fgx_bw~y~W z)nIw4!se9h9)EhQT`UiO&!5;QleLySRhjIJ>n#HH%Wy`!8C>h3EG0 z@qa&vdmcKB{xD%>Q-zeAW7v@+l3jpigXQpMQb6U7$nGU|#Ix`sQRpDW%;Hs?9W{=7nI~EbkUp&%(m8@nDanu_0FryP0iaQ^ zNrC%yPO|5W;7GwnKk7P9M)8znV7U(k*Ec)@4euwbSR4qFiB4Nh%0HaMV<~$J@)y}C zJZuvBgM?pwbqm+*>}HBjPTp#P>eCa?G`Qv7H9UA=9ab4mS!p4;O}+*I6~Tt9ea!cA zpGq2AdWIi7n{eYT1ME1v#)mF$;}^G93sTtioX{*4sJC|_9d0n(xyzU~^r?r9O zvk&xf_uc^x^&P$C7P6`|lWNR3(TuSbQS7B15smv~(gVN)`^OV+*6+N%jjPYEC&pfP z1|goXn&rSbzp{i+ePkOxcmH90^6rE9|7X`H-mF&3qonFykg#;W0njk;oO#_Mk4rQn zo2XI*t4tAMG8beq&6kOp+HOKMQ?3d@6reU>Fw@DAd6jj363*DBl=%($fO=it#Y`xy z^90ufNHL5@RO2RXQ2H%)m^|r&?`%HMSV+S!s7G`AK!+ivu97E8IgvH0lVv+ZTqoGf zRzIXb9YN+jILxQPd$l<(Ij4=Q-`T|(Lh*UrADQU)e{G0Q@9yLK&rH>)m0l~Cipj&g zLLMkp4E8h&rhOAkna43&W&GL@56QC1bO8{HR(?m62 z!L3xd4OQ+#C4N_t))W8(ARFx=s7;JaMad-+j4Lpd%XFwwSAUdkJ1S-A#meBL$H+<} z-6()fK1u00@->q*&Pi?}*$`}Cj?sF;`Y_@3ztF-5cXsiH*9yhw@qQ%Q_$`6Nx@$)6;AtnAI&_2nZNj$$3>`Su*mgtm!y1zfP`PA0RUiPuslqyUVu zG4mKs;RLW!swgbDq19ccCF=+mO@Tn%$si3f+(TROa;gJsoO7%=fZAOmh1sw?uoAGS z!OE=!G|>h_pi!z&Ej`17<^zihZMDgRE%Movg8F6@jYitV*e$uH1BiJ~DT7S~N0Snc z^c!qFrNZxCw1msv(t%k}dye}<$!L0=BWsS^zu3n;4-av4=vZEE(cWNe$jt~E#z7hk z#UYcLpc>Mg++d*Vzgq)V1ONTa29G}8pQu?MxUh}YWn*7Y2zaQjz44d2_~eaSaoc|_ zoytR$r+p&aKt=dUbpLXvX;@126 zc=FkV-lhthdll_8m4QOA@tvB*Ok=Y+!92c~MvRp%KI^Di-WeC3b5Gk+Ju5k+*<*m z6*NTh5s=XiN3ijj>{+fiHOIBBSt`7sCSaDB`U(-m4Cc$5T*iazjOV}EPSY~SU_$Yk z@TS*RxaRz2ob{U4NmHM`_2hWs=KjjJN9fcO^(jZ-W&^N+)i8r)MwnqF=177=bzG}- z=|E~6X49a-r(bmZ^{oT!+SlNQceioY&$muM%_5LgRn}UQqg|Uyo#k^?IWU7+NDttY zl0`TGGq(ff+&(U7VIFC5GYgAi5>bmsapFshEYc^o$l$t{Qi8l%1RLc>WSd4X17}CypZQ`R|M|#p5*xF!Tmh)io}?NXN^4$5QQh@7wBQU{j0TVv*|8=N}nPz~+a~Cv4tS9s3%RlX$$E zfqVWvd*>FxrdzHT95gDCa#0aJ-K=V&x5>~nj?dgb#NPemiJEoAc2%In0pkX=jz^2%l`1;hCu=7C~j!?meg<7Q;wn@i#NIHA;D z!`}|L<(DqR=fdJfFAf~T(bO&cYiCxtdPfVd+ZH@C3ss*Udty8Z-h1@%F*=>8`jkBL znwY^U*>HeIp*f5JEh(&&Ph1$(Ym#)b=_gOHCRYvFvTS(nP{K!V8({ao5pKA=i#MJb zRZcs}V8ew@>qD{A6;MTwoL2#;!b~M#AUZQ#v#nJ}cO-GgC!|@*g~vJOocsnlwKYhW z0BXr3&)f?FgtLDE)Z7KJ$PJYD)JT#KwV@ zhenOVe0ag|=3e0Sk?Ufb`!sO8`ZVCG?KO6sT?xhKqSUA74=3DqUmv@^GQ?;Mtn?~4 zs%&#G7EXf&9+zO4;G_tK%_#Y~h~g=4pRH?AWY@p$MfN+-pi;Mhm1SVxcg8sIg9ews zt&I;|+QsQxqEzVa3j`YWiIL*Uj9?*1HA)|FaLSWAB0S z#J2Ok9i7R&H^~|Nw*at_NMu9gppJ%M)r5%Knbh8N90%fZb!J4_kzisT?-e$QBF4ZY*c78x#VRIqYr<}5&E3FO~_1L+) zhJs3!OX|b!xwsndw*)pCGm*jO)D_^vSF~{ERy!#ap9bI?-y7lPd)Ki4i7~pJ3a9j1 zXpqCTDq~KM8O3J9WIyc!6fGTID6|(`;M_)l5^!?JHPn{C^|a^!7-wnllx4#UhZFwh z_C9v)8{v;H@8XO4fbUK7dNP|y#A*D1DQxy^% zEZVE{h!^90VMM)xbaan*$?9peXs}I3ODp@-1Gonu$t?+S7NI75aq}vp5&RDex*i4UEp!#IMvj-Dy{lXgV z`|3Kz4y^R*sR{>!V`^70(C&m#t_FbR{Slgl#mxg8@Fr5czi)8aTidw)vJSSM-U5Ng7p7iW{t6*J;Tslem~)0F2@fz`2$O}t zH}2QxNMm)V0W9W^Fb_0NCVSR6Nn!}6mV}BxLroxAwDs^Rk5h!(E1z_CxLcCAOSl>&%_|R4SP>>fxyojaZo~5L$1WrL;j?bUF zN;D@lNHz}ix;FWH*WPt}>9G+$cu^Nuy|aUMJ$Xh{vyMlqp;R1nozPd~qU2`51s|$! zn1yK^;!@1GC>GtX%Ag0YGSnAY0`V%t(V&D3TcBauY~7K8HK_&ZWy)O^SV!D2pZ zo{HN>SEzuIMZ;tnXvz;Yj9*jfhz$^jQ)Fw?stW87SJ!euI+-LAnWM%lzzvo&7^`R;R!@s%FygaS(UaNqq}hPnBiZ~RL`$kZxB*emFR5vK?y@lO zC5$u0>goz`XwC6=cl0OTtUtQEi|uDm)vVE&-mHy)jk{K|qqJpGI*1r9)`!gX8$C#t zl=`vc)z&z$IrSwSJdKIObe}uG*`Of|L1T*S@#?MgQZGvOUsn382@3pM<}@ygaE5|s zBUZiChpT$r`~W{u&$us)5@NZ$#6-Ib_k}?(?Fq6<;XOkRXSaoL)I9zCD;zaPasStc za5rq}RY)*2o&hF*4J_<$l0j^w{}9`ksElIIW8^8%m#e5vt5g`SSkXcR%ED?_kx$7t-L&MMfHx3Sk!5Kii9CpWaXh~*s)#;JgT zl?gI7y*R9HFc2O`sH82=9SuZ13eBscWV8D=wl9)PnLb03!s*RSP&>yw!uw=A zMu@z)k%N+8LkXl@BbobLV|%n*jL!lGQ?RLruX+XqEaQEvWWeVY-R(v-Zo?`RJuMGE zHo%{J?0MXD_aUqe9jmQ##{i< z`8xv~XPs{dZn$zj_1qYLdCNik#V20Ccb{6vYOggV25&r6(Z~j2K7-lB;3O$A`KxhO z0Eko?!h0llrjZvM>JoEPl2|>AJ+9>8;KES1Abt8&9c>x5ECb*9VS_*a$38y%@jm|V z=>~Nrv>~w_jxkDIW-+-~qUSx7WF{j--e+RdiXYO=2pEAE(qKIG%tTKhL0pxjLXYfAoT<5js^A4zqZ?tcj=3%oY0H2miHdqk012oQRBpQL3Fmf;4EPjlgE%jCBZ+5O!quW+Wt5+>euR8P@FButwYnR!lh%JxPT^Up^I8ol;BFSv78_(+)qs zpNOb=PP;ybkk#wyQO4yd$VnSN|Mutl^^d>S58uD7+d6k`of-5JK;$TCH6;YzbG21G z&BzjP0h~oA1?q5=V&0BtAB>q`yWD-ToL_{Uy=hd$34bcFWYLxdK2mvz6y^a`=SBTbYZ5WXCwNR#n(Es~-bh&qPZ}8&aKhQDE z>|$R0EcGFA@G{>+F!8|JcIEhIABpoVMtimx9w$Ti_#MgW2?tv zsf6HQB0Hc2(mF~W@lx7_1+T1P)Gwxh)B(Rdb6QV^G@`nRs0sW#2owbiVR^Ocu3+(g zC~wLH5Dk1bv;GuW>ihe=1oCoDC`*Ns$!AC(2ntQ7Z{&>3A#Va>^8mF69LWFL)ukB7 z-Sq0ZolK4nTN}?#znDydC(^AN5W=^nkg&n3cJ%m1+P8LFs*tSm zWm>`m*ubi;F;$8&m*7^2NM6=zT5teaEZ%Hs==#Fy#{)! zt?;PA%M|ssM1{{~V93#nHkT3UnjBk>GQsw8sYkNUVfQCXpWNWLPe9sADT22Cy(`GU^f|;r{IXDd6 z3cC*@S5!3B+6C^KVSzhJB0BD)f(9~7bQ=!iXGG1&`z?#6rD{NO3>`9yWrcUA221h8 zKwz%v5cZn=Gggl`E1OZgdkJpsQ&a!@GG$%ZPu@Q=TKyl+9!nm{4(IC8?W!c0a|CFf zYY6dGG5xO2gY$+?zQum0??5|q&BXk72&H32r9BN%jwdgw9^~&Q+8MAZrZvd$46Drr zrXfJuCh%{AIRF@~0c@y_l<)6Ml&<2TR5Htvf~rMW?y%(Xd6^~t1SgKt-ViX6PAldh zZ?SMx$PH+D%Pcbyo})HCIfoXxOAp$zS6gY`v~J-CL7rbMPt+%-9hfD~&_sEYzKBLi zjl1?-NuJ-i7yxCa`d@{=g*qK}(*UDv0=0PP*LfgKbAUedTAujOt6;<9P@+y|d5l#V z_y%%z|JCD^&(U^I`q}zvIg^bn4wkL-F5Jf-Ms3^yfE=SJwARP5)KQ=BLrKXf`iX}= z99>OvB*fAGpb&KRtmaWF$$X5)TA^d*>j?hZD!&PcF>=4qJ3m1dyf86zo}|LugW?3; zLm}X5Kq!{UAe#v!Tr8crO-IwH8kk0*0tg@&3JV7?y5t=W*vz|NUYqQyQ}M`$<2r`D zbfwW)5IR5!a2HEE7PN~hblf{lrU~gb=*z+9@nI>mzD$1Dzr#2UW<57B=Noq$+=|ee zO-msYDbE58B!CTm7Z696zismQfV8b4-5G8fzQ8c}F{cVPQX*IZ8>^kV%G_w*Ru}=@ z?+){*6(N#I?d3!drMLt*4+A)d_qRCyrfjE0uR4p}iraO}SMhb?L8uetdRewgA4=d1 z9>x0@hTR+pq9$stt}EwFaALS#pD}TYMgo|7{Y_Wl+2H}jK!0+RH*`z+N%=T+S0T@qMXP1C=@tb zj*mv6WZ2x@yQ(WgoVL{yLF5(fDB_S)2-ixB;oNmOEyr;_s)=Tnz3;5CY7+_vY$ys0 zxjmCE4LgCMZ(L_}o(hMfn%#1$az{iAP@0c_s>HKvfZDkU#h*_`s{+Id$m}B_a;w7r z5uc9=1|w=xYX&**=!n!aqkLI@wZqsO$Ju3fK39O{9L{z$)B4Ox*i6C?2u<_KsbNxZ z@HHQfLOQ?hvta0x%oO0E0uXHDV7PdhGW?|9f7-9K^nC`jO)F1 zJsJ6PDTr63aX|?yGBF4nqi#mb6s01kk!a*hfZ1mf*$Euqw%mvevaeVKOxqVNkl7+C z`iAD)0Y^>0tlrRHzIOI5PF%YrQwUHrvRBt+-Ks9js14fo z(n{+#sY#TPhR-LJ?miEYDSS+x$l%jhgRJlW^x-&G)QL5!4E*%0X~=0+_Ir(0(78)m zZnuOy$i!qfIDD1QozVB$56=CDJ|^WRn#m4qOE}N@)Wa3`&L5msD;A7JCs=NFl+`P3gL(8ubG$7-ybGT|8QK z68jSGAp562kcRPZ1M#pxGd#)*(}>t!q$1VG-?}sCP;{(GHLE}5(QTF-xEr0-JMme| z+Y-Rw%GW2(Q>w_Ct{swgD6sya?Mt9#E6Q{Kzq-$S&KD4tXpADlz4y%L^sajQ z)UNJted}BGj;Al#aBg?+y?b}<+Esu3uatSZumYH9sZr-=#= z;esD!+f%JQ2Um^^8hI$3xU~&@r`qgTr6X)wDdfeFjZWNb@LA;p5*tR;Q&9dOY|0V%wNi$d;K;O=Xuu5i@~JG6 z{RG$r<4$ve+{Bc^&#{x0IghIDpOpB#M1w zCXgt)`51(S*58%44vn?3Xr>xQ(R^q><k4n9~TyQz>z&3U?=MuzZFf3EPHR74ROBFKo!qQruuEO6t~5A+ z&WNTy048Qn+vDqqsV2fn@pseq744SF1A@XmZoZ#6kdxTi7vMmSRCvcVWC~iw_hgkU zZKI?}29}D3LbR<!f53Y8n(m z=AXav`o^yN?y5cW@e_8=$vr!2U$E8HL@b^X77u|~O5$j80DmYL?$MJWNa7kSQT0_w zJ*$SQ2=kuLZ>0Pu2n3J$bmlwlzEf|C6N z;JQvuNbN!fYD|4a!tqB5I6 z;4y&6h#W{E5uz-oDvfX)4WeupH6dACF$Xy`EqoDX6wPU7=4eI>XcFJ2IzqU}Oz#kQ zIG8I=z7Sx|q-vglY7&(4O_3rx(QASRpQ#!e$n}yp!glq6<%d6316YbPTPUmBnU%is^ zMrJ0>npEnSBJ~t}8Of1*6C9?v2h!7VA7PkzJ4y@%Y=+aKL`erf#5Q5Enw}Up!wi5u!nux|A#FKqt`rI*wFgR|hjgKt$5w(=WYQ@+}|*lSI(< z74uJ476y;r9*C<>Ujf!Yc5Ku2txz?KrBeeJ854RUq&{WikV%Q$90)NAjA-4K>MzMj zs7jK6Od9bBLlBA803TZ@&S{>j_z+zy3OF4GCNPAdF5dleoWgB&2OS!VmWi4rEQ?f- znD=SMuu=mj)|Nynt0Pxa<|`poSAU19!0P9bkVItLJ{+DorD1zCnjOfnFh!aQ_C5ra z`ADF^DH(yxU&6n|XHzgL4lYI8w_x_dr_bASpE8??_?n`{Jn6U@d(;Ca?e8vMwD(+g z$bNBfVDq!ZREnuMF`>>Esfl&mi{Bs=KVg&4DD7>aQDj*Jx?)M6uRtf)cEnED=C(G2 z)N+4q+UKty*tw_o?P(|WY-$3FZgjU8p!q6ji&^LfHbTHO>8NyrO{*fBStH_cA3VX# zk`RjsV)Y5SS|Lygu&^~+rbNJXu9iHmOCW1n7~uwgYrnBHJbeGWXN@XYa9-A2Dke ze)xc0@s-6qmgd|2gP0>(;*3Npe&|euqVW*@O>#qZd|*NDc%H#ZS%*uo4`A(>pmb8x zbbYsH&g?&LP4;K++O#XKZL*ow3z+1rfoO_>>J4IQQ|+5cTZcl2y;#AZv0gfKjay%vc$XHO{fVMM~zwpx>tG(#0{W*}QdXV5l`wpgo0EQ=t^} zJFpP0iFAFG5p~NKB-VHVUgc^J#rE z+RAFQ2i{}C&U@;to%rBsv%;4i+^mO)PNA_eiz(VY?mS_C_4`NJ>5twLJh$1`zqgjP zp^3hi-@+t~h&>|bWt1=CU=;0&6#Sd(p9MVvuN8KRAFI=DJ7pp zlg39GtOWU@7|1S1`sjbYArXq((*5c|S70e_ZxUDpy`*dCNj53mR8%{6SK6AIa8hBF z|FGI12~UK@c&rT^@|9W~LYTukHyW&PY|_0G1L-g;7`~d}``{fs?7`(|`*yiqaK^kn z`=lA0nt=J#3l$g#?_eMXgD&3mgyZH~Gi%!3d&NO}_a_e7&u$yo!fePgB}NQwm=SK) zXX8;3*PzY;54rfQdVkn!<&6vf3WfDRQ1hj>z2?xHUdsxzO>s;Lp zQB#g#FKM+3bONm;w<#Lk94rFo>~n_+g)H!Z$eJkPyscJ0jcyU2Zpw9x?f~3I|1xHsRQd);`MVEbBDhvf2|(iAPY@dUSwlXLt^em~Z(AFm^ouQ-o0IQ>$et z^B_kpnpQ>QHz>G{qud4cdch#Y$xIQ1*3^SLec09&`>m$wAZd^Jj3q)}sp{UI$Q@Ck zS}t?MF1=2wz-oP$F|<#|nex7@JVyLbMPU6+-063DXyRQ3#znN1sXpAGDhF zjby9qjXmUE6Rn?S&W=B3O3bIau#sahv!YouXzXrxny}aW?ooEeW9IDjA3V?|-ffv# zo=un7BnuJ5Y0O69i}sFB9JHVOe2Wb;SU>ovHY<(F9FVgUioj{y z4M=-szcpa4f+>SB>8U#-Ij_FaSa9%QsE&709VER1kvM4F4vH2Ag0E;57{#0^OpXqP zYK1Qm8Ne71)WEvX!96r|OdQPuO;MqQVH_;*Qeo27v5QpmK~;0P@t8P_i!KsjAXTME zLka&z<=Rwh|=@m@>*jb1iEBOno_yfTp@Xp)~ZULsBn@)RnKMjU*krjv?J=oc1k zc@S-Gy1-yWr1GJZpgadaLm*GbxBeoQJ!pQ0`cRzXNhiAo3^Yg2q32f;RLOCVY-r(g zlj%?Uz-Qi>F04(MR%6j3$ySJJXV9LMe~Zx`VKl%W77L^++NcZ~=D3y`3wX!X;%+Kr zT=Qg#ibtrEI9aBwN<@;(MI9CiuVFSESNvh9bTGhWfXD_%tI_}~s-Rbp5Tlt4fH5`( z2Y1J3k~{f>+;b{tqrejUFTta&ZKQVMM|;?PC+vc!&b6R$PQ1A{PDliori-Zg&YxQ9ulHdkrO%XQQ@;aTbyJ;cjHYE=c zRktKG;W&m{ef5MFd5H3i~LEPR3a7+#-I@o<Mm*o5%fjJJW)*@GrtdQTu)bRMe}g5gERuI z+LknP(D>>)Q|Cj1vWagP3q7IfB@GaOzJMYn*1LobWYbB7GFC-SFdW}$4E0vjRSY7^ zI(29Q$O7yB4lOq}Ghz0e)<<*h{#iS6ch4-PENntW(2OB$c69DA(6qYNnQ*^#`hq?2 zxEXtEYi3=1<&v#zB%7bX@gS!+WohqseCyC!!)mkx0}MMFYeqf~u^HaU734LNFkc6k#@! zKvahzb&}+_3ndi~N=#O8t%sy4Q9|PF0(#PRo^vh&ZJwFmv$WIi@DpTc2kH8H|e z8dm`ILKlKwSxt7wBYXB27wogs9zAClw$ZFFe`7V*I!#TMqRVKQ9MJa4P6yq8**z+N zNRG7{f{M!&iZYY@!>%w!y5h*KErY+2PKBqxSf`Q(qlt!Q=0M61~5F-Tagb6S_cK9Ni(hs0nHUtcnVgdA`zKktEV%OFeDd6KdHY% zKERc21YiYrl;MWfAXB2bK0!!nGYSjL_BOkQ!LG#`k%K;zOb5K&w5-IXjz-; z+A^-W)oDvBtKI8wp1NRX1 zoR2F45mP?nJ-bdSN(IB>SIz;|ubx2hbX~Yp9YUxc;}>C4Wl>Nn-%4~qZR@J!Bckyr z2!RSz1#^%2pH-uxYmM*2DTANdQ9!&c6fMWFg^+A*z0+(?c)*lhaMqmt`rRfd%pDF> z*fen{Xxwi6{)WBj;${2%*Vl7fKK-@L_BUtj0r%`%j45Nv^v2M3a6jEWFD*BA)Sh5} z_L3uVZPx2PaL~SV{i^l)W>Zt0FBwkcG*Z1_3s+ZSll;?G1W-tIzUS9gUCs2c5!^DLcYf{9LNUB ztx9+}$_I>k5&qJSgbW0YV&+J_kYbwD%&~+I66_e;zxEZAwsSInm|g-tP)GIq?Z2OE3WrOWoA zE7xpk&1_+|pWF1suW#DdZW`D#A2)3;ICaYQ?FqKA5zBYS)^>8+HwTsrNgsBOsQJ`oDqr%&6?^-~R_y!#*|ZZq*si%? zvGjAslZj^UxMJNtcf-J5bo!K?aY8@m)vT?d7HAyDvKK(|<<*YbZFObrGYckmr`Of6_ii;J;s zL$E(Ncdwngl{EOlL-x6^t!A@wcFHZqPUu2CWm6$}Qz(%gyy0<}y&Nogg6T!{w+=MS zky(PlRbuYy^MZd3CK+n6At>BO+N**~CU^lyU$%G?fkRa@_>hD^GTBT#t=4QKHYL#(*lhz z+ecc*@al%y!dxcr&Cr|%P;sipZlZViF&R&0&zV_4N*DJ@|NG z^wjyQikX${!S|W8xBT(GwhDd4-t^%^_T7Km%&-#up69+|O(y?~yqes)T^+*2o7;nTC( z>8&V~nQuozw|%y926J~ad-@Y*?Zh@?`Q0C1vcJD#(QZ2wJM+?tmYDwmt3el;Z1U$2 zoy#J;(~`^~h}^S#0ryvOv;s3uVzLr$xkJDpuubD6a()fXAIt|Tc|fu(W9;w*r*sh! zzJN3l9(b;;O0_@_rKFHrF959WoB-S(4e$uO73Hx});)zAN<2vc|2_QqBqb|{FYZ49_kMvCb#i6NbV5aR@P$v&6AIxvkRWK*Y0`eZ0n3P zg>V>J4a}#mtzY}jR`hAfuKD(+O-^>^Q_QAanUqdI83eE&hSVsfTDd9ruxr-s=7Y)p z;yoL7`L&@1_3GOrkLhKtY;`@s%-XT31x@MTa>@ecfBg2Ywx6c$!VfLlr>@CN5*_wV z#DW381qpZLGdV)(o;a5$5_(N1&;lYtJW-S*oTEN!k}D)9_CX^Ny(@{p^EyYIVmz>6 zra5f&G99=xh`w2Fhe-FjS2&F!@k9aCIZ@3TA`OXlt0P#si>SPo{kpJar4yp*rgV1r zKH7la(d=Ob5lh>YUf`l*1F83VW=-tE!pGcWvK2H(wD~BrqwusFCfm5eCdTe}`V($H zy`?puT8-voUs|*Ef!VJ4Ua?j~>3WB=a!A5Qxhddb>QP^0!INP-rzTQnMtIrlqMdm{ z&(1leZ+E$)+1i>}(}09-3{$H_vpN>d``>fI-uOpH*yUHvw1VeQ8^Yhrc*|3zPopPj z$&N5N@;*?B9y`0JXcI13$~>p?^G5xaIWNtHi<>lZ&ZZUKH)h!^ZH7-=%^cE9Y9LQe zeJFZ6Tp22gG}XTJjWAGvWfMXj*Fqi+TQ2p2N0l-V3J!>X$i*|M+>#k*E2|F8ah^=EkJ}$yuu@X9pVS%qP|qPVbnK{ln)5 z_W5r#_JWi9Ej&gq`(2h+3QdWRUz^n{wOQt7XP!7?Cp@TSlDKraWs+F3UmS=zj2_Hv z&^=XzL?KYfdIt%AfKSH*QQd+%#Ya$@4NNAcs78P266^;4t>hz9sSzNnO6VO&m46>X z1u&-+RU?%}Bfr|=l?a(5Db=YR5*Y5M1n?efUulBAAow~kM50%qJcD6b4UiP1`V1M+yeRk(x=@+dA#QWoFH8CZM zK7Hj|>uvOD+5YLKO`Dzyt$(PWkH_TDWB?8>bwuXQ_nm5{GEe|w@yYI*H~Yn*WPkY& zn|8%l2W>Q~Zzn!5WOj$Ojc&2>v1+rRDIHwym?Zw-xx4I?<7cv&b;VUH)}*{2yjdu) zq>=|W2grMh$locUc0luhf+tuoE(aiN1mX~vJp8&_fpr~E;;2SWSf%(2W zvX5WAZcWpfPszM9)f^LU7(R7iR%6v9G;z!?7B)P&pdDoss<0y@yWwAx{q7q!?DR+W z+Weiq-SbXceydE!JASq@m?Scv*00^QXMgjGJ@)CxOxqhsjbb_C5DaGZY*{ zm=YujGR96RpKzv_CX8U169JGB04%3c10KX~s!g!4N4dM!MKP+L26=Mfr8_hx`5lh- z2K@!;WA!a<>-T|JdgiM)t`EJ5hYSWA$=$tvy7I=W{v~%V6}nR5fNLnD0%srV4b*C} z;4Bt(6GD*Npr&uaL`!@>iEVk9Zr-ib$K0)F7yiyv{=CyIreQu>8egj^Y@ic;&$z`O z`0R@P?d2;igF>|Vxt;}gB(0ev=}k({VCKrkeZuRVP%x|CtYivjlj`WbZol=EzCG*l zz1F$s*hWkC_ zz6!>Isq`NrUKRyHKrs6faFru7O$e(5EobVUsCY)%mB2a2wQ?eDsVClp_q;G`d(>j; z9rL7Do^PRdhYYvomE2Ip4L0W$4xddo7eaR9)xv+-NKoQJQmwESe4T3Lc~bMvboEhR zmSiN8%*=I7zp}^e^hfk}Byduakny-$P4?6Dg4>tcnx|L3Y^>OXAb?E^d8a2mQ?h*i>(Q?LPP8Ky-0t(Mo*mm8gW+|?1O9Ty zBCw@dJ?0@(_PArGbN2GLe=x{Z>QfUAO&HT!j0hmj@V^NTWsDw~dF&)ECt)wYW1uy( zh<}9k3b7uql#IutKrvpwj$5kY4ZEvM^-B1h0Jxk}kX3LFz%VV(=1ciUFvKt2*r#+$O)TX$25m6n4`^jF5NRt97%R?Ai{*k za7QpmL;2;HC?s+Y71ehDT&CV-)dcI#Qtagy-K9{5+E8mOp^{b1G_S*rYBNPBAXy6- zDh9MPHVovV!rCBJ?S44Sn<Bp%pd`Ob|A&c#1d}O0`%vru>`JxkSP2qgOX})s2lk@1&mn#uIzCcfo9F zwX|t`Z6|9@Ya4|Z{o&L0i2G04`>t5FcYbWq{^OP=Cp(%uu7yn9l8syhO@ap_`N&&B z8jdGLsAPi%?^M@@u)(#6Bp;gqo+p@K>|ACHa&~cWsY4RbJTe27KU~I(&U=8UM?+ni z0Zv4*M5%bqE4ZkFsHcn#2yj)r^s#PN;sKUBgI>o)lnTqt^}SlsfhV9st7e??z>K9` zx2v$hajn|h8Q2bg_jMXprv3zoAS zmv_!QlO(8OnaI0mI?d*_7d7^&>!O`^M$ew~u#nGPSx4k<=Nb?ELWh=PcBr5Kj0Jnr zBd6`H7cJUHKEGn?gJ^RzJ&Orrn{lOqpWH>e3TKoVlHxDw~&coGO( z*_X6)p1hxTCmH z1v&t#c*Al^84oJ77a%u7QeVW1BE10gF&qMha4LUl9^*dwlHSb@Odfz*?o`l>C2X3K zyf@JgEnLHBUjJXo0CF`Oq6`Uj9!Bn*n@-7;1 zG$gI*AXgtyh~@rLE=J7`<=y+*dMlkH~lEt?l~k#*7{HP>+xRb#>|1Gj!EJ* zzqi-k@ux@H!+(9s7MB}~P3{R~r$_5vfmKX{*2{UQ9fTxSFban`mAo_2AXvnABYq{p zk%Fe~^lb3F>DlOWl`#=j8Z&7Y%ut=JR6kVl|gvwM4HWk-5j$TvuS{eau z3bYeK9;Xb5TmU+J=y6DF=2FL|61V&|1}fBT9g!#j5MvqkDCDyI@a=9w0ZX`xJ}s@p zws7%Q`|ZE@saqZD&(_fq*0<7S(cKg{2$G!JqPAq-jofNDB%`B=$uY^R4kFp5g=oBK z*KnpMYd&ZS*Ns5H;QqwP3A>%reYoAXvk8TX)tOJpK6&+GOD1=~zWu`uo1N*|LMgIz zCv1{Yx_vZ?S|FRdVCxbkO^vC7Yl_Od3M2t=RHXl~VzJ;cSKOjlN+djWHB+k_$=>jh zP5aDsjlHBbvrc|Q=%7j0hNjYZZ7bX15IwG!klB`N&CuH9|^B-b+T=(dwQMjYt2@U?h7J@+Kkh&ce`^wtP)j86QS$?cBJgN} zz_}){j<>5;lS&k)XKvs9;cA<}cAI_nYbzFl=j6SZESD-2cuv+aM$r185}{}y0WV>g zKmZ$r6P_+Al~ctxLpfN~*BXzZ#;8Bg3uVKgoAf!F^{+o^><{1E*kxCTmeg;eWu%O?&Y(#Zoa+=JVxTEW!EU`Lu`nSb?X20jG5hZiDv9t@HcsVcrRHLgni?m?1@3vCJx>PGxW6o ze~!CZ(`*GLmzOdn%k1 z3l+wN{sg9{LNvG*>tY;0TUDF~)<{y~r~!!QVi7i$+Y$=1XmGRNK6%PsaQc+(T>#?W zVF(+YSip6W8g0j3$@#Mpmljeun$by^q@*!dFl{iM2!WV#hqtXX!epVw=G}_cR~I!2 z35J++(5jJbt%Q4h9whWC!U7$k$5CM`=<)biX}n(0W%9b}P;P)HL}Qb4?_n^Ea~7;y@qU=*UvhZ69f3(Dc!uBsgKw zh@}znQ8uSEaY0kyU(<>Mh*(e1svYm0{jEh4<_q;>wySEa;%c^NxA1gM;GnNfblsHvSS^yIbYOF?#RM_BsNLHJ#RD6jx;j9WqF{tdh)qLF9Lg+Jz{_y71 z`Rkg+E4(^2%yMltpYQeIi}o;Fg+?N)Y9nb=3Ynun2~CaC1Yo+jXgJi}vW+inIO@@w zQyCWY+^6oblO8dfL*t+L(sC{sog122NVWt1twl2@HcFtfc`RKON?1LO7!90+XbIP^@Uu7d1xhOLF2cV z2_<7v3T&(5!xZtURDxRtlH&hANdTsg=oo&31x=K=7v3|{VS?R3uo@Hv<1?_>;0=R( zfx&bL_rXX*45E&-a%7t_UwBQ^z(>U%=FRmQXo!LX<3_pSl?!eKgH;$P)Gl?{ogtbK zjODx)_*yA6ic3+wnV3M94nOxs_XE;lFlg+qckJ7%Uv{MJfApNa;X?=Py6>#p^rU5! zz@{lalQNJzzYS(a&SUcFc!==xBrr4LD{S5dVC0BwN9HT~i6S7W_`rtg6)9ohL#rvg z<1w2`54}&%Ui!4Q+WVmsIU(=hQnKJ~87s6S(6c8Wr<_|%4b>7@V+lNU6sHD` zc5@b5>RRAhL87(haszDOKXb!3lX3ZpEU*x$@IZIt0uh!n?u6=>=+G+;-nwr`88bzg z5JM&-jxn>Li55i~jf4!Lwo6#Nws0svIza$sK$^c(V<1(FLv=7K-ifDiw3;39aIcpl z#7945#*S;#@!$XH*3A0&p%yZ9Gs94L7EVa~@)4(XsoTi|%~4ksy|7RMj4OFr6^C3| zs9`F3DTaI<8y=vAg&9}#x%dugK*bi%gEpj$>2qi)+MV{fz5LnJ_N*sPX5zi2)qL&_ zz{$qnxW+JnUn;;?iEYRVVW`AbBb*93L&C8nc}k2Ktozwf?}@(;9i(bK(454^#+)%< z9X)Gk7@)fm7!tm8A;Jr!?bbI;LR>rvv>?4RusG#DnD#*sabT%n#PTV6>v(Tn!% zCr#Rm&z!P*-8tlByv6n}gfT+iV{PSL5wRoq5zRwW9Hm6ASZFLkt7VX4H^c?6Fg-D# z9e*EZVIgM`hqE!^6Gb~^ygU3@I-eA$CJBx?n_~r@LT8pcw+$b0p47nL>!N1I;vdrC z!Z{i)C!lkqOmfAiah6UHf-X$UR6u9Q_YlmUC@Y!tJ=j4hIq>!tHo7l_EZ{RV#hs7p z+pEq$!cKcsi}mv1gZ7mh*D{>v%!FH$?Zjb@5v=Q?`II`hI7;|xhH5{N->EjA9GS|@ zyb-znr#xG4%o3YUBdu+1BihD#Y6~bsYd+1{qaWDM{;2~?36QJlzgDZ!wLZ`ysGF7> zq(Fm%^S3m*!OI`8!mF6a#^nl%i9;+BFt2E%x;1!eF~)&<2`CrV*dm{=ZSmoGa9a0` zQSopxu8l@R8v(wp;09N=ROKs&lZvmSj$*pLzH>kV$Z$}B$YDyyd0Mo|^*L!GxLInUWfO~K*af33h{q(1Q7_E z#e8Hs~`La$o}jgDUW2m*cV}R92$h2xq<$$K0=e?Q5L`>3?i>It0Hl5<5DJ}byN&?1`J_zsABU#XeAaPDj-nv#dRl4 z@yiZtl^t~TSgwhPz>c+=TqL+T09e!*+Rn(wvbx%749`7v-kxymw7u<;MZ5UQC0ktS zC{to87%nMdAt@}AHWE69YEbYv<^N-VE$q?DTj88XpsENN_-bGbEG@_E?0();ChSFL zOxazJ4q4DF<$E|>hkJ2U_Oqbf;l@n`updnlQWv7R!88a(*woP=A*LOsR0Uj1=K)?- z`^J10(IV~+4%>nPhg~NM^QR`0C(cE}yu#yW zXb>{UBF?7K+Iq~G!jF1D8+|%^%8oy#Z|j>K%}Xy3LEd}4D8Jp8UzHk;iu6X8k6ILKi zyDRjQBh;l-Fe0(UL=pNF?B#ni>QVjY_m9994soJJRwr#m~R9_D^`OP5OIDQQZVp4eNV8n z-3^U&aD3|{&_2@Ke>kVeG?G|U$P~{q)wx{`cE|VV7UMVlR8fE_=i=QCusE;>lLmJJy89KB#Z! zx5<0Q-M7c)(|E!LKDTT>bpT~oePdv6ylAbB&@~y9efL7<;Ti+j9$HF8`IUMnz&c<& z=rxgAtK@6SVu~VaoQtnQ-|~DivEpjDRp%UhrS4=(MN3kuBf=+jxD?2UkP31+OCT5x`ec0;-rs;e0<#?grS zM5#--L1P^=WY6rH8&}&R%?&&IadT}h%7Web=$>tCL}I2K$JEMZ*1&R}&awBIu($s4 zKKs}gSL`jVnf1MY-^?09#zc;s$XJ9(9@z-phWyf<<9LqQtZ^GO+4_`a70-6KP~iiX7#g ziJO%#20KZ7(P?2O`LET`MPW-Bsw`F z0kEe1Y-d_Aw@*qPWlBuhzY>$#-+y}9zVP)8d*S{Cd&c9Zax&lQ8m#yo2pa~O%JoUz z`)59R&Q5&jbepNXXz%;fQigq)pDkrBjjGQn4OQg`zm++tfio*YvR$*m&VTBZJ^!>R zyTcKl1v!2bdcYJ)^-r4^B=$7s`=O^5n0-+E}PmQ&CNrt3V9Ip|J z5MkxGIfZA+RVad53q>%d4PQT&#oEE=uMt>Wm-G909w1cib%q8fqy{NQB@GMsH@FYS zzoUlqV>vG}HV`#oA|(#}hWdc82-%h3f|`T*q2lN7iJ2*AWZ7+;0*5;MV=`W62t140EwB7zua_TF@)B z)b6I3I%MKtpTbQb3RR#)Bo$xlyg0>$@Z6aaTdUmB%sO_mJ1GkQc66heUwlk`{vCz+ zbRy*v$)Icp68BD0$x7ynSNt%Bvk_TUNvm+5E~! z*vidX-_eXc=D{s(%B9OKp7K(wWi{D^@gX?7p$2aYXL;|g(3*X-_WaZ5?8rTyBT^|r z(2Q3(5AAi=tY_i%mP^*`U6*dy&u&fG?3fVXf>c!ad6j<;l3eLH@F-XycuHs za$5E|W<-k})kk?98G$KxRS+si9KMIlV5t4&eBl4SOi@BADC| z9_nx8XHJ#ql0(nNM9o1QExPmA<%&a$Vn>9MvyEZGQQ|8aD9TAlE=h_$;ua?$atDki zNmzBT>a7ibM5VBHC`GQyai-A-R`vrQ0qrLpXbvyOpeS6{QeY^Kv%+}V-HXF0x<2jWP%}P0ZeZRX; z*y~@hw-q=uc46z^`PRQ~S*M&ci{*tuyaXHOfn#YOQgC zeJ8|TL9`=GF0`!X|ENP9g3Gx^9ADu{!ZkVX0uqwVEKH6X8=xlsZJ&n&+c={556($M zhRjQU7lzH5DbMGB?CQp@`sZlRc~Z}w^Ms!5nKxTnElFm+17U;xBQtAtt$Tmk3Db7` z119a=A79GnoO8x}Yf2UK$slOPGNG_|WDV}Xp&Wf`sd3ir=7XL26iS&z8ubgbn^fqE zo$!zX?8O~#PEkoG$WcsoMV*18T5)-mP1DT?ONIp;%6Az4VyM|Am^#~PYYdyk0a$)j z)-0Ty=Rip235+2?5kOCn)@-+|g2w zCP9_rbLkCA@`;_35nuUS6?lq*LX4%Du+@o&oeGNNIvUDT1Kgy$`7o8=JX7B;t|oik z#f6!2f6tzDY&YRn*301a@oTeE%8{mQ;=KGh3wi&>W(LX1$9-%rE^x!oPIXtg{Ho2Y z)qLaojm=EE?VjsdldGRmQ0gPi8-fRlPLK(-^9^vj5qn7ZSkh{7CkhzVJ9u5DS}bPU zluUWSl&%11G3%@&Sc10V65K}=BA3ZS34+*_=oE;w{3?n?zfwM=_Mz!ytK*7^nn}V( zk?6T5%cJDWh#=GoF{~;?mC9_6dPV57!gnRLULs_;R>X%7V+WbQRHdG%Wpd+W`XXd+ zO-Tyr^|ta*%)a{{(O&VEXeS-pvzMISv-{t@6FQp%sa4vE`8SGYZ8ixJsxh=0go=y# z)X&kU)>LckEf=rZC$Ak?3L$fF#pGGo_^^}$VQ#>ql4k6q$rV{^7{8_g{Z78l;EqY} zh0TGIBRKOH!a`vjqBC7?+%8(i(J0*<{o<@4RXH`1jz2iG;m{$!tMJx&GUtVyuGb%O zM#nlQP6Z=_CpR|Egw&!n0Ja0Dn+1<1&eexZ!G=Yb(ofPukwE|tekDS!Kdu57om-j2 z^sRaxPNKX8VU7rS(iwiworF*RoG0fN;8ypGSA4axYroytvs)AEH&5!>k-IuAD5ddh zv)s|D!{JUZEH>GEy5&I1g68i(wPC+lw9J)m=9Eu^dNL>4!9c}?fyQc(RbeL^go!dL zI2JPIEEwVm$v2D&!ZqN-^?_bACG3L+B0&Xgq6R>7A{r%7#9;hr8VO2-QYsE)ls_Qx zgN!aR7lS2E#Dz&kC#r@+V94N`@wx`0v^j!W&ll%GtSdX4R*6DzgapX%Edgs5S3##y zEsQ21!o1QAAyab{gGO%WSQFCu-qC(+^c?V>Qvnuc%vLtcF8tWQK68Dv7oXa*lOOKp zo;98_fyV~^8tZs0Yz?#1IqKGyRcz)^_jmp++RRMIWeRcRM}uQHfaMVpBshsXFmPn5 z(4-q9@vq7`=0o$=X*vUeK!MpfBOhzNDpT+h5zRFc{RC#0+eZ)<`Wr>-6NJxb=+lT~ zz9M)~z>Bq!%m$*<35M|(h0(Uq#3;wJbTqyNXPSob)YjadSq~Ci&S6GRbavH-RVW|u zU?&|tk@JBh+(;240XYIzuO~@a&&PZxp>cTnfs_}9WZ|wWPf90pE2i=2Ob#eKS*ANsLV!=3cYUe{Epi>xwJ~ zsnFLV(gZAEe_Pw%FGC1jRjJx!1MerzY(0St8+OYmmp1G1PQn!Qz60&l^DJgTqZe&Fo~;x z=am>Dg&b>T4tO8wM0s1^0Bb2<U)VIU>#5yyZa@7+ zwAX)d-QNG1jf{aaH`}QTg9LOzWD6VNDm#QSJ6^TE4&pi4*e+vUKoep90H-^Eq>eNz z8E0re3O*?dHn5Cg?k|G9P`n=gUB)qvEClkVnaEVQoZrJbNaFE^JXKQ>0Tfj}`lE(8 zeG{JZ+*9D07S+yZBTy@GS20qcs+$spq9$qPWyR4am?Bya!-_3;43X!D5g<`gqWDT7 zsHgFKIF`67H&UDd0*Pob2_k_8IIV;Yokf_)=L}v>4Yk3Vx zgX5b}s@2R*ch2SyUAfU>EU&kv3DIV^iY(`XHObKl?l7McXljBPguMq@;w#yc6@IxL zcyKs%zr5iHq(k#(UNu*t!N!bRgXb$~lyt=^WIMw#z}3LCGr@2%2M`|lQ@Kdm7{@v} zJBEh~qbW3TteB?6OXbW@%TpbRbwY1TXnTT8M%^d0v4SI0ak)zrO{6MrULs5^euSEp zQkO)xM0rD!u&6k=7zKX^risMdUCR0dX9b}@@=;a8`M9AjD%305#=qa3>`&h{Xr0TU z4WkD;_TFY|n}&++!_jIQ%Zw3o({5k;Zj-Zwzj(u@P4wJ$E#xqF5jIASVepy{1x@ON z4E#3mMI;q5&gB~8N2w}QN8o5GLLMmr?LVgxu_PC)ifE} zB{wQ+cffHT2#Lb!^gz%Pf`5!ud>_)L*e~hB!S$n;_e12p;LyatWLTV*9Hxj+Uj>qb zMg`avvY|gUVP+H7!e2!D>P^v}abmC+oD%GgTV~d30>tSKgiRNHN;&%UlUq_-_q5(> zHk+AOYGJmQpTlP1W^#8(hJ-M8AoDg5B@Ji6GHHoyiB#ut0o0jRxxKX_ODY85 z)bC72j7y?g(XtApO9UBrC_Sjgs%kjmxCY_*B+#WY^Fld>=oO<}HfD8Um{{xuAa#%{ zmUI(YIm#bSshL=Wv!O6Usw3*gG$X`Dm>66O`*=c^4$@GkC;TO*(Ni9{O7-qFKzrr~xt4AfbLvu)i5=B~!oyIdi)4hN9713Vs>VbXW%C1CVuIxu2 zbFG@1Pg~KaY?ie?noWD&t5)rumzI)*En!o%n&56o;BzE0LfD}Al1R(F&H}E%1AJ|4 zcnW!x;uexjG#6hX#%qBJjjE3;2b;rrtCJa~k5f8G60$}@Rlp(E3d;{C5;9m`Va1?L z1k+n1oJ^SSj<7hKSQIL*qbOjjra|jb?c%y|>SC6tDW*55zsuoBzJRNb2ZIwKXGm!X zTJl3jr5@f%ehcR>M%+IzL>Nsmu_ytPBZpii!qPb7N2kOL2cB!Q%zkofvOoLVrcJ&J zZ8R&iq;#E$wYHIvQLGT3TiQ~NKwb0Ct@(7xX3GxIWaPrV*-vBbAA|~`h{zrWL0mo$ zrZNiuXi>nj6=i%-`85uX!%L;PWqbtMLE)qCRoU0dJd>y>UP+J;ez#a2z}1nAUX&bY z`m9b=p!8vcsdmQb4JJ8A*zl3Ai&`r3!cdt4;_E8vAwi8CO4Pk18MJOn!p(%Iikqs) zrfMFt3qFP89$3J*I*Scv4kk1PtmGJQRKQF4efwG}1?f`tEdOpm?updjBr1-U)<6?< zQjtOI$H9U@+7cSx{#mZey8e5~&U%d7Ij6YY<>*|SMP^ocpR=3){byU|)4(qN$H5jm zLWZ)iE)fwz#7Q41|CJrkXdo`dSBO3U*?+1oS_s>Yv++U{obYby0ODM_#r-dcm70rI z3HCxGm$0z-DshZA1qXBW^f=EJVr(JKwrC9KZEmI$JZ{kaFqQF<8Lm(6mcwq;SxV2 zHH8uRbENkJp@6ZZ)NJDfRV}zoRfq~r`GA>Pv`d7};mave!bA+aJ;zrmXsYeiCpOB% zArnSwLGY^HcamY$ScxRb${|gRv@+ATb#kkZ5KI9@SW=!0b0$Ii$%6oo6rGqf(&e1f zz^fJp9D6panvV1f@K?$p2xf3{I|frg{Z6SbLVv+rAyd#I!k7#hz!6FZM1)x`JutiZ zK(bf8r?D%p-NGn#JK>nFpT7L9Xm9ywv}?B@KKsRdipf$bD2-y_xWL#(cjdHBPEFIM zMt+uMKbH;0(l_I4I2h}05ki9b>$n0Ncf#5SqFS6FqGr9CJw>2lan_&*3ojKm)aO+& zylCvTcG!!`oKEC^_XmP2oWLa5V$dDJxG=#XiCva zrT6r0!l-qq73MTp#@R|irr_hbqTrQ#V!;HHw#MfcYIH|H*Hk|avw|W6FvBiM$$+W$!_*n6=EEW1%d5<8ga-)GHbSwP{t`;hS)6UbGzrN_Rrag|1(&sOk%PTUMm9$$6iv$0a?&8 zwogG=H2hadxlYkc+4%IseUSO9l5N6*d8Xc{>2?ong<0^i3z;(g^-bqrAI z@;2^c>D%xWw3<~pa94;LZQtx@-D6Ko{>+HkjqQr_c4x?O0Wmhe|Nl(WIfe6NY-y@! zTViaiTCEjdN_Y%er+>r3wS7og8=D;d*LSt4@-w*^1)H&F45XY<`;jP_2I+fx1+2`N zU~hAr{aRqsrsuQzhx=TeVqsJ+=G)M&jNBKrES<4{fqtBpHA7G_33f+m{jzIVX;T6W zb^N2hCjWUMd zsWb#5Rh2Fy)O?@zOt5d$*X~$0wMPmes@s%48T^D-j4C%d3j&6uXAEx z>Ez_wf!}-{6|7?0tjtK`Ou&F$;2+lqRx#V~JqFGxL&l2~^>H%PJ)K~d?9pyt&p zKqTmaS2*o!MeBCyPIo=l*|LpMW?0J?mO&rAu_dx!5M8PG*vmfE4zCyI+un06F4@~e z#m*gbq?n@lWQWgS>T#US%4QBKRZ74-8~IJj(B5a9xaY@B1>%N{YYM9le^Tp*%{SU^ zW2IJ$HJo5DM{Efqx^7|HY2oiFa{Ez!m0jnD1E`93OyFef5X^8_zCIVe%WSfyn%b?L zBSqlf5-#El&y2ac$sowMv??o%^ns+Bk?Gs!jm2Uj5vA==&0BZ1DuFr|s=a8F1sq2} zqADCdgaG8=eZYmh0v13g_V^K79W zE0o2=Y6_tDoAen^*^Z<9h9WG1Y`L>s1Zq{q#x=ox==0=I72pQx=~e!QJd_=$@+4iO z9=Q%BGzNfgS}$x6{W_3-1Z-*CHlZf9*lR`;`}tN~*!BDH6fK#hIIA8AjXt@}C?rw( z?6@K|Za$md!7r&zBaU}p$Y;I`35!g^Q{V-%A}t3`o%8M+gvhS@rZe}<{&vzAFc-Dy|z&I*4N`!Q&3V=$LRo8Z)N zaxSbb@-6j!W~0myHYN+&=taYZzTyJB-<+8~*f5zK$#)3%* zds;DR<3UTWTi#pGVUEpFM;t2OyKeC$`ne{|V&fVZPf4O?zdRV03d4sz0jnx=vx_@j zHr^yTo~ejZzZ9`^L#%iL(XwK>Fru4>m3(U?9OiKoW#icNhA2g4zL*NZNgcG~OSxS? zt~$d}!AxbdOVqXR@6oF|ZINJv9dAQLh+Y9XJa3kXF$MLQ&EesL_`QSpnytHn7Wqsg z07{H|DW)BVkj*NEt-;X`)KF?kWR!hoB@uT4LOlz|NDuChPB0l8HibFYF1$e4xZc?A zMoE}n2~w2Y?KYI&FFUFfmdtz{zzCdOiB)H9DvbjSjUlBAZ*lSw3p2^85y?o z|8!CtekD(8w{MGj?SAX?T`TIG0&V_3jV|BUEE3zI!@9C;c0Z0U-C?Wu9Wx1~#XJB)Ym3 zz%U29=VHfHMV{V!cASj8s?6tCR7=%aqzHH`K{A=?VWh^!SWu#0q$*=@LmfLOs2wGk zGeGR%3|qzKWWg{U3??3q>)Q)5SIlHCXTt61;5M>QeXs^NC$mDwO@g+$zB+C2z3Tj} zp^?OXfUCjFw1_+Qk=SUvjP<@Xt>X}}`epzRRSyh*DK|T>wEg`OEbD@{KTgKtbKm8q zG2VhPzbO&dS42daP2+%BVmx0(Z^qpQ~>6kC!hxk0qzh`~k!C^m$FVJXG0-81x7bbV(#-zT~ak$yv z91)&PB#&76_ZiPtgm@F5ldto$UD45O*`_u+gMQKd`LVHdrtYjSkghT!Iq`EuNm{xj z8O5}u$sGb@LSaBIRnJv&6;4~2t&Pu=0*%;{*IeIe z1-N(E#R|&mwzX}qQf+dEa{QN*s1w~XPo$Q`+@MU1YXM_A5IO8nF;Q_WyoqTzW+RFi zNwTFY@IdLptV7k3VB9F|9L(I zSH*ST!e4gmzAV0Sujojd^I?y8D-I_M`x(y-`=2Lfi3^rJr#@DA7tdrI8i`noy~L?n zy%xYU z%H9{;SH|RYJf1WI625YCe`Z7~%SxP4+ndTRA#h+W&ts0~vy>`=UCElP1SJ}!B=+N? za@_~%-I%2NS8;#K{V5r ze7q&lg=1EQNL~pMD*WCj&c}hl?PXI^`YrG+3lE=Ao78WXm`-L|N#viUdNpT!x$lks zQ0>*WIF3dTF*#dt4Rm@SPpMsHqU1x*aK_)nTjS*|Z?RjU|9I`Swp^GQn7$Ha46zwE zsg?ToYhCbEaln*Co_ft$w)So>GH1|XZ$XP4l0Kqi5{R33ZI+d&A_M?4FR;x zE6p4GW&jR@wF4{-H5JAZ4u*P@qK{-mVcYqHr!a&f9w4R&^@7Xw8`-*5##HWDo~?AZ zDONXg|JVS?YRL90Fjx__os%||Qw1dH6|peRDA+kn?fW(y>^)vvqMZ@Z0HY>EKmb`k zo}@X(ZlOn;DAcYM7CBh-Kgt1;)>rVd5FR}UHg!e^hc^&P+RMc2fTZ_$p=ifo3-qIU z{zcrEKxk*7b*s8w)v`~mS9kdD zaPArQ+2gmz_q+4hXv^B`5+HCnL1E+l#NQMSHbt%k!5BjVQ)`Y;LNY4>&Zk}^1KCKd zlZ1S*2)ZDLFU3Eu1_X5@$>mmXb>gD#m54Q+I;0%e(1r{^Eke<`Nw^YeiD1^0SSwdN z9n;CA&lNRdnA<_tcQT7Ht|wZ|qAyJZGl~k-=-;F7)Rxfpz~1ERHmt2XR(3h&XT}Yd zGck_co%NTJnF_ZM6stt5?8{fy_%dW&w~-M;5zK{{a7P33Wa|h;WPZ|R>Cp17YycC? zWf8_4(X%<_Dheoa88Stwj?gTxWUQ`bm|?Gqiu=a3j{EADQrp~&R-qV2WqhLKNYC)T zg;wUGYd&@Dg#b?xBnf~{x-nl{fRR+cHxa#fIpRF`XeL6gA2A??al}-$zy(OUPz8n7 zKc z;pW?0eDzyvXa>OaB+zDXMHQ|yR*Qo!(J9QR&&h0O$wzM4tInkXl=SxaaYV#`iTt*4sf5lPT=g<9Eg*T--<&I9^m#R9}ltw(P_YQ`SbB#wOVB$ zw>8UJhUYvMEwZC^N3NDEcdq=^3fRFVnCGhZNs(eIT}A6m;wSN(@Zjudt}>T;7Yq64 z@9u)&=v>99m+_1YrzNh6r8#HZw%FpZgA9NFygB^yNeejQu7lFXdqZ$EZabFbT%^pM zN&93D>4Y$N;K)7T<|t>S?JBb}IJCJT@+usdM0SkyU+rh^JqRwmFA^lqSw&!VWC=lu z79dvKwL#!)gvjwIg@ZW7#fZ;bqk8Kq89jGvQ9?+T89Iigc(i0i2n}UCwYU&GnRDuc zBW$3|tKExG(E_o&nvt{P*vHJ`{ihs=XFqNp$*iQvO$kUw4#PW2oXcM!D7j9)HUrM{ zBsSx1&eiOWj8xh)mtzL)X2cj(=3t~#wh|>Hv5;BAi%q#0UJ^jd(M5dc@<)(3hvo5s zJKMo5BOzmHxh>!Dm;Y@V7rtQ&o_W+XvZLh5+Js2etD7PtYXNQ1WrFi5%K3+&TU|Uk z#>7%Y@vhcE+EL!Y^CnSu<&OcJO44*k=|bw|to3XH7q#paC=ZMWOq%*uGCYI|*B^To1R%DxSb}AMXa^;jQjo01kQT(0rS>&l}scUEm`h>rOJ(Zca6aW8$~%2I`9X7T35UjwQtai7TmD^7`H|< zd+jKmBNx?}qa8XHcV!&@>j^J>@+_WkVy>H<0Lee9hOj@ySS7~ zhR+u~aT_Pub1bK+86A~8{BCRx#(&7&l_-{Q?ybaIJq3UVJ~ znB*MmX`ni!I|g7f7x;B9Vw-~NnV8U3T2|aEc%>x@8EeQ!N5jO5$0?p;GV@wNg^{q# zu+yjjB+Noc5YKHSHUWT&9TAFX|5fgV(>H@w)bMU`LlfeJ3H$;GH>3KQHl?1mT+VljaUdfl$LeZ}rIn0FK41bL zIAsARK6@71witF$eA?#{;jkh=74em67SA3BOsYHN_M^_nJ5OWAj!`pf3Tu)1j9w=} zM8cE|Fmj1fM8?H*zl?3vK&d`J|gwixDv$%(!xg5l>ruTUm|`gk6EbZ zQoWM*D0dy;ew|nr1J|N(suqNv*axue^JxiuhX; zvxY-p`%=ce?=rxde{%p%d+}D>`LMz0oEO5@G|b)uucRSUfs8ypb|3HO`dcMZYTa@N z^;=Xb!xgHHqIQqTLqsJ&r*fvFoSM2pVpGlBX)He7zO%)he$8;kOXu+JS1;f`hYt!d z9u6r!?eF3+J(ig)0lb>p2I{%5N&1|T=85hDSwPZ+45;H|AM7dkLs$Zz)RI0{- z9zSyTK=FIb4%p2<>HJ*N;@)tptCrg{!_9 zAf``e-2lz^Wxqj2^0D|dJ#f6_m}#6pvOXRCu;N!!+M+1Z4g0rHgpxTxqCt^IWo?%r z;(lmb)A+TllhW%^^k7wKpg*>ae^D7t-!(+ZhFoTJZ;5!#tSLRJMWl{tbp{cK#$l0) z#uAg0slSd^QjVQOTRkaz+^{t)VfW5x6dz-No%R;30Pb>8AI=Yp?uU?uL1Vaid&V2i z%edrg3CBM!;lcL+Hd{|6AKJ9-(6BVMFdI-kYRbxnk6CKY?IB+v&q(BHdrW0odQ342Z z76%$EVtwiyVB}-wEqsrf^#h)hmRF4BNu-$g}pA^GQWi8xyc!JEXy5A3Tl2?=Zl%H?+9!rXiYv zp=pf17MkRaoTw7<(DqSgS9N?jwx|U(X&X(RSoUe=C8kj&G{d1|$8yHqf2+aC&zZwZ z|N9IMIdH5Lb|=x@|AoWvg3qns##>rUCXR=?tpp{(>b}8(RUx7|u}xArU#p9uw1Jq~r^wlqBGlP%UuKRtfC8}X3MoCAmNE3r{atH8g0-Er0T zd^C|T;z+CuZLn^2^-ZnHW@Bz=Y7%(J?@kpn`p#v?cdi|lSgpwkQ&T5vFEY7&U%=zl zmCJf^zLP)!#2j{FC1n>>f|ML9s~LHianv77;LR_ZFFrK@u(AfEAU^#PIGoQcj}-qc zCMFV1-yJtY4yPQJedc@TAdeg{+oxZbXrx6t%JqP`!pT?a>ts9&&X5)ruYwGdSVz`O0y^rqgEF{CMqqTq2%pys>tTj(#ehRJcnA?`_gVNUbD(Q%EP zqsa5FQNnaHH&K?02X&i)K?1hS0^j`4j1%5&c=Q7kjyuXmga=q&MIj9Pu!@&^+ZIK~ zarhl4aK_8GjVACa-hROnzW##^%uZWTYPYQuinW7V;DqsRg-jhtlewk?a#LhojzdMp zOAc|R$WCitGRN9R#_BFF7N--AnZ_d?GzoVU>szvY=V~(1Sof}UR%x~mCmX+-SsJPX zWrV_|n?|+$6V<3b&clMq_sJp`kDX&s91D%eDazR}l~1pA*cFk1^%3dBVZkEC+NszD z%}dpfdD3gi;e?YMHXbRY>wff8W`k=bVuW}k%T#ExLD*bT@hc4)(+e9|Gmfdi8A%S| z(6E$q<=(o}x?yJ8&^qwZFK2w^+rXbcBH<|y1-8rqOS`C}*+ik3weIEkQ4gNR@7-$( z=Y47!@4aXlH~k`GVa{Nd(dN!AU)Xqldltnqv33NZPn^fiNoo^HVUTF9B2{vD_G0Eg z^niqyjtI@u|703l7slcfu#bd>6R(Jr>l?n;!JEXJPFzIHIJrzkYXxHCH4-WACdL`K zNE3o1oMpr-XR4eH+nIgm@T~aJ-s5Ns>royHDiNZOn`)*c){9T@5d1#S59+tRSf7SRDdk zg}^K>JKl0Zi_iR9!gC*Ic<2%1=kHnrl5J9yAi*lnpO^q%^ptr#Vr0!a^FvFx=u5jW z%o(%OX&g~rKeFji6FHMyqNmC+?W&#bfNQ7@ZThGr_gXK<@~&LA$NcdWUhw2;{LXJS zSlZ>KuKP%6y3DS#Q-(nUeB_I3`1x%a&w0X3!5rGF_7q~Q%b9hYgiM@ZJqq}lI$y{k znSsQ?BS#}(cuYpf@m9|}7eF=6@ZRuHnI=(hlc9vl;)hbq=E-Qr-`zqQWlL5?VIcyY zP@fqR6#X25L=+S;>5xQ|srqu%IuR~{6gbo=MA6ndQ4H%B9ko-aEDN!tlB7y8U0pF& z>OrwqO*B@_+t*y@IN==`uXvZ^M>hal=c%yah(%jU- z>wJ1S4)51-)YkphDcfg3N|cJw>J-GZ7^K>wKaF#ORci66CqM zAFk7nb7HrW?a2r}lS+1YhFBVkVdGJothuff`c$uRV{EcP?`2gL$Jt0IO~W8WHs)cE z_Z29H0(4lMnX+DLcVIPTb4{MjR?uw}N2 zPy0zv0|U0s8E#v2ocZAuyyv1-+`5=CIo)7py4f_bVbLVEuCY#0g-|)g%E9+=(iZY| z2lazdtVxB?(61($qpkaJUI*%9m1FVfH3Gg}!QllYPqYXz(`Fa}=*?C;pdmt_0#$ii zPVy-RF|q3P4k;Q+9_2zpSg?5HJXIbQ@knnJU`>U@1oP?yLZrLSTGHg#=Ut87%$BUA zx*8;jE2^E`j`z0AI+j-*XMEW4*{f{iG-!DE1IBl+><=-^P$v4I0iO4y`H_-#2JigP zPJHx>D_CF4n4PhzYhq9$b3_rkv_+QG$f78$Stc3)%gY&)6Ts6RIf>^#X$E(>LlvJ^ z_M`YTZGZ!xxNHq)oWBcK|8R)enS^Z%18m>v$i7c+Vfq#5>TWqWCW-iDrhL8eSK)eD zG(Z#p-%COu-%n9KfZa!{mx9+vaZEpjR#P`}QO>J4vnVrps6>da^I>gJrvX9J%9^|2 zei95Th$}JBQHTmZHZwRh5SxC;N>_Js*T#>)P@K|E@UO@Q(%qY!O*Se~JKPz4feYuQ zgweQV{V7U@#!7YDW-AkM%RKP?>w%ZOGvj6N$oSq*s+iU6Co!v9g6{Au4c_$PZFtY$ z9)$bfW2)#;)`wo+L$I%LPqm&q;4iPZI|TQl_|zoFaJ|KjokKj}ZVlf1KNfJ>i{?k~ zs^XLHAMt5W#i#H5c!=XqT^#-G9Eqkawk|YinuOe9Qzj}(C0X*4Gfy{<+2;yImneJ4 zRz{!f_2@fILG)pQJEgHx=HUTp55bqwPnb2ybSUIEMK=@@F7E-vBNnm`+-)tvG@p(N zH^N3Sms3>sX1zv=kc5tcp*L-}u!A$N%Xpp7Mxk%ubKRC);mk z?m}paGWZ`x9L;+_xvPj$3v&r(sa#X)Xtbs5Wuf%1kPLj9*p&(CktuR9C3DE08RD1J za%&mLNvuA}>Ti@P6r)B%7-Akdeh2y!9Z@_^Vv!1PB2h9hIhHG_FU@NSj$I5#P$H%H z_ez;n{LmM>BI=3!=#nxvBv_Ys1Xpo4NC{W+nS8#3em-m!F5C*IsrGSFeC|2VMc=JR zJO%hSfkY)C;<7r(vO97f%k1+rWBtq9KbrB3H)ee7GB0Av>{LY*^?h@6O9`Dh`ZKv zyrw1$7k*(4Pk!|dy!itw*tKEUvM>OUkloOx1T%&q0U|iv$G|t=I0mCfb#L}rhUOT( zS_KG;I-lN91^(|TIM`-7TFPQ5CVHtME3Hi+Vw8ffJ8`DTG4t7&D9>{2C-G@8=4!tA!y%sYcZ(wn)K2{1hKy}n8Z^m}GpYz+XaL3$S=tPP11E-d zv>XYiU-NmZJAcT@)vGh)(}Hfw#PDhT7~USDvUSb{2pktdCZn3ziR}|yIk-mzPZOdm zb2zkFMMT`5TIB7uQ`}tFb9kQ`Dx`+djuC-N^CVfH5E&s3cqYIh)F8eLp34!e#Esw5 znu*o650c*1BGyNS_$uS~OX^z!lgo#)q8fjq?M4e$hRX^+H37^`IX?IGjAxxX#2eqA zv118^@VFCuXVYR<1FUZpu4LpeIEiylItXui(E+%_A%hVC$!N!82dNozINNu$xWmB- zr@m+_&OPyfa?j}A@{FbdY#+rZcVO$hVaHC#$!9O)nAhyU#b4dP+-!sCsix?>V5$72 z>KSdufW;;!DmwSFEix>MQLcz@E`kQ{p#v7>lOCiLO{Xjpfe;C%fHT);2@G&Q$DN~C z6hL%DX9)}W;)pIO(^hn=Ei{k4c^9F2Yck-LWDVe8K)FW^eJv{fScugSQHDydfDTWt zM0DL;J>h(T05|9I$9z~B@GMZ@jlH?AWCY|OWsF?qP9q` z_4e_WL45{&cQuR7&jRa1;N2IsIQ9)gT=>OY!WL$y_mh}aAx?9~D2Q?%ANu=4@cchr zzyOY=&wdl1=4PyX(+4kE#S>q-1OIU0E^M@hE%Rg1 z$-NRAaZXGfn5EI4ySGI&F=C@IHDW{E#TmukDLym@Z%a7kxm$76 zAI{({=Pkkky!_ZLc+fqku)3DZHBH)A=m>Ig)02j;etQF_pT7%V__uXT4pI@HS~uie zd$og%VDBb3B&Y9`Z<6xG(XU|f^(0N@iVGbK2$uEPiuDu&9rK=`S=_;A5q~IRA?q_Z z?$kk1WeD;%(Pu|vIj{>in}=9X|S56F#(bW$dN3u0@~ShdZgJRB>gfuQJK$}LdSCbjs%Y} z+YIK5sYZw7()P&>GtMe!ly~WXg)Zkf1H6us6vD0AAnarLmso`k!aK^P?;Hz-LymxC$)HH!!ycX=HJ!;0)-_pLt^McRQ)heI&kd4K`&Utm_j;%#D>NDV;*Sj3QBP2 zJH!)`C@5vIxGuTd4e)jamV}ao86_$RmwZvy;hYd<%<6GO2o#lX2!&|P%6$ z08hwBK+Qe@iO{#o)fhZgJQ$dya@luG9E(4g2K5HHOXeJ}QK?LX7KsaV>p<0MAvEXx z9(-%Xa^!ThLk z04$U0N|QKO*my!z)M<`X+$DQp)EV_b4I9(4loN7aWNW3`DrON3TwRKdmMW+|hB=3F zr=%un%*gCi;#R~6-k{eKO^^a+DOV`)9&L717ykm{{+hFgIPT3uTzQRSVYc8c*9h@_ z7qhs(`MKP-DCYewbA~IvwShlBWf6bJ{6~dxO_>;N~

JoThSTz2&a7UmjEO(bk&gCo_IUL(~}k4@T(#)W7x-Aqx-jH+lEPp8QhLy6e^ zu0xFJTewPRH}x{?2S<-{hKD2?vK19Wuft;k>q}j0U)v}P=cVVEr4=@S0o&KyzE_`% zYuuVjn@LoJaEN#y$AT=Mg8(d(KEi%lc#g`uyhyzqB5&8f%9Y!B57TZ0!CQ7%_t?Ai zD`n?pNnQ)SBZPdo#*698gaD=BMHMsPpDt7A~v1joMRX@K0B#`&;5jRVD?Iv}LEBUO&iGhsh1nhQyL5@%;f zQx@@y*-65tsc>61oylDXWlSzlW|OT!0Hti1#D-UBx}0b)B%9pTBN9H>1c2H~J$29E zbsKri-fo=-Zr%?3?fY8%#orI{AjUr}e22o6Ekwfn!fx#4FEQ#!a_- zu|B1W#p_5Fva_1F&B~v7A`Gic7y6C#@E4n|a}H^5SaPs=$i0%9g>ywLCy@xan7Kt2 zQSS)QDdB}6nxkuohRR&9m|KeP2@C>vV>`e&Rz->2(XIw?`!>3~RBihWZ#U}H<{d^W zj<8K6KN8s4+jCLSG?;{TtAmyG__?@pGEDWN3RT%R85z=o1i~~(QOSxOn33Vk;z?7y z%Z+h$3|p7j7IXe$FxH<$DJa;p8?q(gvDhyt=gDCi+SV{R0Jh9HuKaGsac|nd-<&nX z4Y#0(S;^?FyuZb#WYzj~bH>ZxwuEQAZV{JXGsM>UgvrT-)>EBKsSqCZX-!C;kRVFg z*sf+U;T&D?l{Qz{wn|(2P28F|PDNoa$6UOUIV=zmp-J*StKxq)eTON5)hP3rMu|s} zxgh|Up|_aSiTbBh=TbI@6K>Zn4bZw@*%2I@NZ)OTOSf5?NW`27Vf6|@WY#CMlF9xFB#j#p*f}aV`WQ$0W zpi``HvLOC8$4By*nwMiM!kVfPhvSQ4cDG0Ume;ykY`cK4sh;#%uUEN;2dYXStVYW1 zD&Y7=B{GentFTDC4>T;Xjxd}MnVD!Z-&8oxZgxYEJzIKvyDu%@?I2OF5*x8RbW~)yn)sl zM@7mI*p!wyRD6K(_g(~rpw@GWH}pk9B4^)SpF(z8^+D}9?t zXjgB^Xunh5fArCo0Ki(m+|Y#3Z*yAcUE@n)(TN}Fs2gH#W>XEcvWg@fdHiLGZ&6a> zAc^3=K29e1!>F$emE~fZM2yO%2pj1b5dwL$O3w7=RONUyI%eab;UEcQPizok86gIA z=K-CwW01U<(ZBvf$MJ6&;;-H@#I-k#bv|h?Ax>L5@8Q~?Wt?#OGM@FuC0zCW7F*^U z3w@K4DiMz#>h4u3Yc4ZWckt>H$ zs^nD6CaASG^Icku&*PY+@rH^HnHda$AYl&P_Q{=bf3h;lu0rNHmCG=hw0x2hj$i{q0gy!TqHLE!}T;3d8xE>0mgE_2HX+;;L z+-bYbE&=6ITtN}N%49J|CxNXs>eu7*O+Tf+BckaO3R^`$gA@s|Fb;h2V3z(N?{2C! z=l2@90vAHzn47Bkm@du5WBFN+X+|i0P0{b{44EXN_*6Nj5@h+di`MXu7p;~I5%Y6a z^fWowrZQ6tk1-^H(aMMs$U?)VA2kf2irm>8Cd zQ{qO7$p{KR60_DpbGyeZ5-w1jT0c5ti6t!a8%19u!d-{m?Bar7bBRm5n6l=sF6p`Y z#>|yS@lh1|5TE*L#tWY~z#|@Da94;^&5$rAB%i)~h__w1hOd8rh{-8n+d_k3F4t6x zMIaw~^9uq{&^tYMzALR&e<;tyv)PPwTq~h@wxl(s?gH}w zlaK@Ugs2WgVu*@CeOJsTVFnXPfv_kZQqu)vF~!sH<0fw9< zNU;3NrYvbPS~MsYhW-g{<{hsrAL&}QQy)e`b-g$>oc>I0^{k;OsE=S6_YPz;&_tF8M@bWjZu^6G?WZZ?2t`#e5- z#4?Wj;sBSX;h+$nyPs699VGwM#>UDbtl5&$x*3eCrUr?541MRz+pDVl`LTmoj5n2Wd;IloG9x6XROxp~vS3~})lEnarap#1*U^EdFVA7{)=B`nN4 zat6f&5cAlOi0>4d z%MNy}WB}s?txCB3E;UB*vKaXtm9dIl66b_E2*^8nIU0@3qkbqktz!IYd0vkg<_UQX z27II({?U;cm!f9gJo)5|6LY%q?tc}jDPY#goQZ>QkwIhY1~olFbz4652kX9$7I4|Op1DW zTQ-h-Q*OX|G6<=-ZLFL8if)o*$uS)}-DFVew`TX?;n|~23=B2JG?{qZ*Ys|YL9Ujl zjqD|p#9-i~KVWWZj8W4TBFf1pD`5h%c^6q96Osg?r{j#etj>6mk)fXM%xc=0!?WYI z#TJJi0KENWTkyiC%oGs%y@+mS+ej>zK_{4zfM-JW)b^@G&^2QvOU%0_`!dc%TuT** zEd_6i9*0jjG9Rk*P&6;hI*|i(aNU|kSTY^EHGXOm?*1Ws`mSq5oI+B9bK!+v-f{cJ zwoBTL)gRhm+T1;B>-0@G13iQzG9W^BLS}G;QTFscaYc)6>u`9uD$JS?iBnCOAWcORQ5e5m?!W`brM6LA0|a%a*LJNFt>Mx*L1@T91SvdEVn?;IQ|JU z_}H5dD48P$gT3c)pdl7WoL1dGPD8aT8_!YFcjaJ|AVfG9PJRynU9G8et-^>}kC@g6 zzRqt*5e^Jg9FwC`Z!)7Yy_2My#y57X+c13)0C4G%SrqSe*N;Bho9oU=tMGiTHPdid zj`$axMEu{y0V^tcqveWO3aIGv%!#HLsj?q&7%dPx*)#F*2d1l05@Kx~K?{*h(Y>EYcO9X3ftv4nIyq3qr#l{! zaQaIYaNg^-jxt9~V8=2uM{JVV5DKI2Co{MZA0UBTk2;U2cEBLO@P`+zGrUGlt!7VW#s$r8!HA_rri9B;1q=U@K`fb*Nd zJRE2_^Ql`Ps!wpEmv}0xEtj$hiXKx5J5L8Lrq`mWX<(vmfOVAvrPR)s&>|5aGI*Ya zx~D3ui&~j>6GqOKe@-!wF9=J#;;wKG%a?J2M-eT0*G7jw3vB?v=M&xbIBaB@6e}4WI?x7 ztv1Buai%{aing(ZBPwP1CHlH3uvN`J0gf-%mW!ef`-J=4A_~#0uUu;Z);EJ!JI5z- z9XFNuw${uV^7@r4mmdDUGby`30Pb6 zf~WlO`%U8f5l8d-=gr}uZ8jF4_7(cnfy{U>II0=E#(vQ>Ui+B|X&7qZ0i2)HLi(9) zt5}jC5tIDhJjb5kHX-`{1oU$I+9m&ow3+E`{TA^ix~hJ`=Ktlq=Ic&`;l6WqZ?^AYt70h5^uU2;_p z{oTX+c>%3Vc>7D|an6Ygqbw2w>{xPa4EHhd9)nK{q(<36 z1#M4tYl%7(H_6Y`xg9#W6@#mJeYeCWX6$G?WCrUvZFoPFsA~YUj;Xk;_YeZcE(IMt~ECR9RM1dBL`A#51$ z(f??JMd(9a^_37t(M+i@iKLq}IYol5j)rVxB{_JA=&TZdy`ReP=p8AL9$X=LvY%)h zOhlO!zf%vjoml4pQWmmX$7*xiJ%^JZ5`Pb3E&Dyn%VKy8XgjQJU)|y$0!QEg{zFS#CNiY`+70i@bRXIyg9|@L^o|IZt zOj5xs-a|=|21c^Sv}?)@W*%p0B$mRdgkpL&x_;?}7N4WA4Pc=q%Ea3*BNh!Zk5)3a zOKd@I^&X4El@rToYSpm6nzwu{V{P5=s0U8qtuLOzQy)25IGN>D2_)S-jA%Q??wOsk z5%lRgUiQ{Syyp`u$S^cbqM&2OG{Py7(`VnZ_ToaMePafV3Kv%q#Ia!7rdkx_oNy5= z!a;@lQ2{O;hB(I);+&zN<85l@8gG}svV7TZzib>Ceq!~62P zI@{VaElte359{=bJ!gUFc=R69=s;(p+XeV{xHr zJ@t{Kgt`d$*sFP?1$Hb0zw?_7PI>ku{^r<89Cnal=L+Dye=>YF25enOxbDUluRD7Q zC;j72{OHDvEpr2yF_kdPBqogE4T+r^e8NR+3L!UH`E?1dp)3{8Ni-5Z!_ci@wXqxx2}*)Ww=Q zR~ZK(WsPBo!PX`ZS3a=v<=;LHC+37RQ^w{pgyr!XG$K6r`K^0hX@lAO`f#}gtdR*X ztQRdfMtuqQWm5Ht0Hh>ZB1&=+QLMffdb^YN)0rrF@EAlV5*6PYA-kdo z=dFszO5-UZ)+wv0iK{QM}Uu@1Xa=o;mCkCOqB@bfL z0e<(tG$kHty%HK=->py6Qw2ac3lbb(M^zgG1Gsb^atE`*W%T?~^j0q`7C6FX;W)tRl zWBbP1+I`o)dbewVoPd6U(_pvdWE8)gi|^DPa__(TF5u5Jc&bRQRz4!d38Jac`*q{- zz_{f-y)3_bREQ~8B+m=|WL_Q8IvIeXQtIzaZY@l8MK&@{Ν7rsker-!OPID%d5( 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 diff --git a/src-tauri/icons/Square310x310Logo.png b/src-tauri/icons/Square310x310Logo.png index 08e2174c100b34080428d47569949cad029af34d..acaed3a8f9874b1d935cbaf22eedf4967c756a85 100644 GIT binary patch literal 75652 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 literal 16409 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 delta 1731 zcmV;!20Zz-8PW}qBYy^&NklZL`D@6=R8&(MZ&>q}axcv7w2D zsF;ajAvktp6oQI^6iYzF0!TDsuq28#6OBRyN2AfPSBNDV)QDh#1jJSdCmJjg^4>S=vwz*BZ)$ZJX!Zcz9l?J7-sg4DRN0bvb1b=MCn@PIiBJOPX!DWPIl zty6=LYgWY}fZ8eq9ym9`t-!#8fb^R&T>=8ch_iRZuoE|!P9F?24TwgcMLpaPjN_D~ z8T^*^?$J$MNPh|U730iTcmSiCbnc+{qiELcz~(O}Yd2}gkNF}^T6RZ~R}`qAe9)%d z{G@FMe2(Y_w-NUdmJ#JeR4_}0)Gy-2N>c{2kAUwxH#{pt2#(b z&SSP;@Mi=o(5`Tyu-+0vH4&sMT3URqRQ>$QLPeOBaYCGXG*?b60^oTIG4KnAr5d*N z5vJ|Q)&aS;>sv}0WeT0T-p%;&8@9>uch$ZyfWHtt_g+}k3kSw3;2fQt zE+?13&3~@`Da`opFx9;4TP8RLEyQOo&eret5@u(fl9pTta1}Vx4q!?J9v-`1PApb< z*rhDw>OaUINoj*)9Kx*3lXB7@c+uH3!z1ES(Lw>^@{Q}pY(;Pt4Fb&h{f$LFv{Zb(`Gny&D#9zJyIoAL0faUy??+d2skwz16yjdSF0A}%S{_uwc!Df zbz3$SW`2K^8xpzLt-xBFNt=B`!=xqGN~Gw^57}N*XEt9`?L0vo&`++Hj z)3x~x{}E!?@oTX1jjb8}7ecbn(`^U%mJ1V-!oEU>wJ(MPzuKXzS+h4gs=i=(zNW9s z?td!I4_Bn{0V!$n@_Xtv^vX}zyoY?HO)GPln0>Qdz@QRO6=y)oCPJzqI6qpoR*K8h zpup$|Gxi>#TlVOpYi^r9eT3NuPs40$gIW5^Q*LN2A%Q7>2kNLyzPjd#S~6A)2jx_MM4SzyRS{ zHGDHGFkJtTP$?$&u@=LRkZ-;O{jbZbi@^LC_R?OJV0Z^NG$s~iyA0b+Avo&{?bEL> z?glxXANbxJ+>XpXY%KF(5Xivq2Y+8;;U#R=VbZI$H~;a*opStdy5>5^uG<1>(k=`N z=@S}c8f@1MO)1hLoFchzYo=LF*Ib|eeZ}CcvpBEACrV6d@1ET(l2ARTbGw%?G?#Xu zSeBwLKR~HI({;=kvo_=H*rULficqtW7br(x__z7FSl@nav7qk~?GH7v2b1edQ zLXTg+{A$N`P!rw{z8T4#jem6s1Dez|_jTX?Vo3HmIibMib8kH11}`+bHd60a9bB4! z{AwxomV!4D2&sc&=;13+GO(fYQ*JRCwFSu8rbE4~0E39(r}LPuW5>AwTH84%yb){J62X!B08{%hVwj593O;mT2g@8IW$QYeVgi{RYMDnhFZk|1f94rhQ4 zd-^vHTw<**fz~<=o&IO(3I@^}^1wWKX~hK>LL002ovPDHLkV1h}sQm+62 diff --git a/src-tauri/icons/Square71x71Logo.png b/src-tauri/icons/Square71x71Logo.png index 2920aaa64acf7475a3be1569b19c5329954a282c..5bf859a41523acdc98fc0ad85d71795179c8a857 100644 GIT binary patch literal 6650 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 Ef_qu9n*aa+ delta 2968 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 O0000JpCQv4$X`BI^Mw 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

uEseGc-#LvR3iQIK_Kh_Q!~ z~aue(` zc@Ji*b=Jl&E9~!CffyP&&fqwE(Vd+umG_+2;5mPbfL$JRPi=hZ2M{Jc zm!f4Xe1@m}TKQPB5s9$6^E&#R4_5gcrxNjZnE4oHe4fC)Opd_u0Jp8#h*%*C2(rg@ z-&pI|_S0*>kJ^5A^VmkH{!yiU0rr M07*qoM6N<$fx92bZ%BZkPZh{(Q&5DZHI56qyB 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 diff --git a/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns index d963baeb0b0404d93a153c7557d261825c397d2c..49cb0086a1d63eac71365b7d9a776a8b689e6db5 100644 GIT binary patch literal 1117556 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

Gvu&B` zQ6uP(zwL#e@_*j7C7?J~CQU^9) zM6r|rH9s3Gu|nU(n1ubwo2dyY-vw=Ac8cS`3D>O>v0^7m=d}2-LAhX(NaTiRBNreU zg=Rv!W9Wn;gtF1QY7ptI-(0Djnhd3>+SX<_l{b9^fn~>qmtCAzLz$&A)r^34Lcs_{ z_BFeX1~4ksu`^@sC`HAGHuD|7=ww)@U=8|4&bvEbPk;ZM9(>xt*_k7x3pE;KK>y^C z%>v)iq0UF?0%S@PUEFc9>M*0SW&kM>ZiA5p#QPTlTXJw_oCO`jQnYfGY;{LC!BxUW zoDlik?ZQ?eRmx@68#$CV`)og~pL-gcE#gyk834pF_1$onYf$rOrkkuVgnKW^Q%Z`e+h%0R1RMvukf-82EFXj5r zWPa;Oz^V7OHn-SdUY)VH8d7KGBk2ro0at69>lwbkisf(n`<2h|`)43Eaqe(lE;Nz` zo>?SIln4a^I$F{NU(s#iC=xmximRU0iREzhzreR-V__nb{8lH!0{6RF(cX}YgMZ># zzU-^()wzGB1<=fA>T{HBMbs73x)POg$V#k-s%xBF(n^(Y<-HiH58B1bylI6D0sQw!^f)@SK*L}#t|L=!9ZW4gk{jj`h zJ>Qq>MCpwUe`f9eXk@_deVAB^&Wvp!fnoX`F!%9>8qqODv^EJG2WzX9Ez~8@FMz}z z>bDGB3|jqF!(US}v(*eM$(#e_t$fbf*$FbKI0rJ!UnjxFI|9?LFy4SP?ruh}Fj-+S znbs=?UZp1H$lJC)gVl5*KT!iz^oaH}Iy0hc3*g=lHQmV6w3bf;M=^#3? ztA+VyF?)j+$52&X<)Yv8Ve_S3et|nzy#bfO@!_ zU$gF(Iu=f7cRnyJ#G&PT_iABf$q;r2BM-fZy|pqlRPClKkoNhgmej&ktq|sCtl)V6 zgn6m2P@sC4-laO$h`{Z!rO?SdD=(ZDpulxah#yY?HW}l^JH%G*U=zpaL*ks`{ zIzB}K1fC9f1y{d|g?=#6I%h5W)Gfj_FzcyR{u0>aDkTt$dl2-3>iDXnKMa5qSIsgg zvp%=#E`3NngB^LW3~q$Uz+RO*p!p@?Ok0N^)@@B>XSWQq@iV(&ct9kPbDJ}na@`!E z37^LWD7^23G*vf2w6MLddTi?)nIPFsT4;1s&Y{jn`JRT)fP{Q}gX9*g)@K?3AXL56 zMiBC$Z*s}4{$%4KxS!8u!CWK9SbdL6>~a%$%@Xi@-n4-%KYo)C%F8>eYF))8E`FwA`F zVwUfMKk=eh{OT*;;|aih*H4tcXJ!Xb+Y3%QYxN6N*W#EI2=waR-UM7|CUA>Yzbl3Y zsvn}cw__IxLhqMA*oC?uY0MVSX%ftG!yHNR(i{&mmlp;`U=&mSM2Baij}z$q1s0(_ z)oh<^xH+m-kitrGDe7OF`&tEpIws>*;~lG-opJ{HVUbc4kfX$u<}Nu*_7j>z?#b`51mJZ)pf6l6|6jT)s6GcXfAu5oAcOF#cwr=#tD*caa`kgQ+tEjbV=Rds z@Pw*-*1`{~9K=;v!qt+^>z*=!UZpWmPW@7^V^leC|=b0)pxtL!v9r8>2ddNkE{FSnG4DT~C(9 zfE*1XJ5z4}d%)1X;o8~meqzi&fHOD(%_;zkq*aHbuv!DjB@J=jCZr~qgQ~51+Z(`Z z9l3Zwn7AArBNZ;)Rg)I9&I#W_L$@nnw2a8tJPo=S9gbFng3jbLb?q-@w6jQ;5SAL~ z>A}~c&YDevQZI2Ir|Bfg;eGW`fPdAou_|RoN8E`$(mJ%qYm&9Q0QRPZ!#0%9sfGC| zfM+xoKm&^gxSA6vvdkIubbPs_S9utDtBV1dK$J}}k!Jr&rUXiU0n5=4>Xfm_bDws2 z=4;<$34mOeZ(48mjayBMhk2elffL7*hd7#;HLapD;m%h6l16?yf{i`RRI9{+l_*@*L$ zdB2vEP#ObBL+M+wnXLqG*0K`-dy-H zbHa(vltHQT6I^Lap&Miv2+CY#-^? zI*quXm3P)Uc@j_t9&7+4^w^EMX=RMv9lbD_@kn}1jD*x|lpu94dYsAaug%?59O%?K zq*qx~CEfCzU>zCHs1>R>><0<1G$b(sy6Od;4^#OJ4|Kn&Sy^|T;dydlBdONg1ls|A(`V36-JcB`@hZ5Hi&jMmR-5VpanayUtL z9uqbIMj9^4Mv|RUpve@?T%D!4i{ve2=xV_M1bGb}6NY2(Ilzv0dv)U4gCb=gk-ia3 zfr_y{MyiHTtPJXAAYIUkWW=?cpOJ73a#b1^Ad^5)F4Vw;rodXOq#E>30KekGSf!-3 zu~sq_raIkgL00auv6a6zYFGf(@Tnw553HELzxLR70CM^-a2t9$>e_aIMapYBIB;{@ww&^?5CM*P>);9($x>{GsY{M@chU4s17aNvLjipEU1eWKBi(5#K$$ysJpwTzQTEv$El``_kqC)z zRg2*fSjd7 zGFVZcOo_5fCMt8FP+F?(GVk5F83Do2Q?y3&`UDyIZbA^krRFqlwUWy%3b+$oj^LMb)%}^uA5mZiJKyaKG(~?mZAo^2qbwJ)BRn(>>Imn}vSTij z3gS5PCMnuPWccKC@VtlhBCj+lXJ9o385qG9b*+D9c7V0y!AN-_HI>UXD>PtGG|6TM zqTDt%G4uR}h?WRtFILkaoPEjgPSX8w% zDq2OcL&)wmf?5vfKNuId6pcgfBI@6CW#E$O1dGs5gk=CbHX;x_a&+nB*%RBfJ2Y*D z2=(bZ0o}|fm;0RqH9#IxHOq5KM(Q|?>CprcY+^hN_A@M_sM?TD{i|za6Z+YF0Zwj! zPR=-08lm)kq6rY8o?Gso%>%2AjD5<3S%dvn{j-B6oOeOx{O5xH-x8ft(l|W~IS3A4 z_n0LBt4`Hl(R0B*O)B(gHtg1t$XNXjmG3M8z#PfCH#T6PpJGpSJuoc7m}R#1H-kKq z6->#_=J@Ok{}wEMXYDo=g*U?y7CTGLQ)yYt0cYKD@nf3g#XBY!lw?k4q98!5#n5Jt z#W;PtH`;W~ZP1YrKft{AoY3WR5nvXG#ut_1qLu;Ii=-~n0*@wxr%#+oXnFQd9h=i; z)})gQ1A=Kz1aQn6%XMEypy^e-iW{3WT#hu$RsZaFscbP7ykC!ot#YpY4>*b_h`QI? z%EobS?-@csU2P!VyNd$gjuHqsr^zazWv`cCD&qPq*O8U(fk@qW#Oz73wf}9AAjU*X z1HfWM0&ln*33~|Qk{MQpWTBmE-z)?XgjBlf{Qw~x3A_je8LnE9Lb0%v(wztTMQXwk$3GG#$rFCP7t&$LadkL|v)kaonm`I0-9$!IWwXi?^QI1%6Eb75 zDt^}L(f+-2)yv;Wde$>ek{9F=tKTj`veYVjhij1nNNd{pB{|u1od&hF!Jy-G_vin) z%-xL-$HWTTb=&)#ddC+e#yIpOb}8KwTWPbey`4{~NSkB}`4MP^!5Gw0p=_Oo;~3#|T%uj&57L|!O{@RtuTbrN zY2QaFM5^`yCIIK-bF>9~r7C|5_j}WxZg?Y0!RlV% zpHTK&P;@k#g}CC7bOptm+n4h-di4_u7U0;YT4v-RfBrIoiZ^MztPFG;B zeLsNsBoUa!s`~AYZs^=InGyK}E+KB)V=4r7`3+NQF?Zf9y2S>P)z>e(qz3vE;xq<0 z>D=?K02z@i4!z5YZI-4Lv>D9?bSCLRyj(K3+v`2c1>mRKd{i9rKSx*%(mFsyw}nhi zulafiM&ORok584ZMe?a<5_Io&=^L+TymNoAHp<%~+_A%me0Mx|VT_LiInCX~|A|-s z!(c?C`krY@&J6SXy;_z95qHl^N!Zr9OCyJGMhrvXa+tGy$ZY4~Rh@xCZAqUtp1>xM>QeidA;aa}-wRbH6 zSTFcjT{0h(8LiH3^lG%I)5sH(%V*)227g52IEc0o+Ztz)oCx5|mA}VB%rxzn5zlj5 zynfRj4O(xt>TgCmG72X~bANSy1bm*0yB5*=ChVV6L&D;U<$rA>YA)xSPs)GQWK*Kl z`;7TiWQW@-Dj-x&)5<;edjDdrZjs#lzisffg4#2?ASqV&&z;jOuEkqGOu4(R*}1qC zNy*gBIK|ImX?*gcM*&nGQR$~Y7sa>wJ19SAXRhjXKsX2)WK*5QwZy>Q9BLdU1Ly=T zJ~oT$Dwc3y(wJsi6BI^gOL{C|f1?J!HI||_H{7~tn)r6Kp_%?dZF?sLQ#Q#h&N#6iX@@YH27N!O62L`gU~;~_YbCFE-e>;e2i)-l;PsE_hppfK z^jITQgKV3f)XJb%An0kAT%aO^66o^a z(mfGK8RUp-RZVz+nfpxB6svZ47JnR-5LOI3HB$I zIP-9z)AdYH0udXD8g<;Lm68ICS_rkS({u)bm#j!ucn!o_{K7p4*_&9wYr7YEV(Jwz zBw$)pg*m<3eE@HrET#nTsBj^Z z)<2=3m99tLp%$KPTF6ZFCr!|^<3*8*Zay7&-XucB8f-u?DykuNpHylC0(+)J;*3GM zp^mZ_Lg^}TTQOc`2mvAp13u#RHynGW+?ZqV2O*z;$|j}ru6%YxRKxkcXqSQsFf`=Lm!lgG0re=)v?dx5QetD1D$Zi-Y8<^ zE1-Tf;1vIo12|?Uw`%6USCJ}?Kx~r}))<6dvUIc-+3CL%?N6JgK6d~x^>UYCe-zo5 z_^ot4Eyt~J?Q4nJOcJyM(W~H~K=5N6@2pujRGw|Z&964_U!S#lKW+{w6!j9 zxu-N*+gABoa2iYSWkT|g#$JVfcU)K5-k{7JYDnm5V!o$HT0M7>qR2|JYJ{A+17f+g=E3{r#uwbN1mN%_`I7bX z?;mFQXXI;7S(rKrM(^NvRo**p4OAn}$~R5KN_j(CW-WsHN4*>bnFBe>X`UoIpue=Q z_E-7R#@?5b0C56d%jDW>U>>A|aOeA$FO_4)j<@n9_gS~vp{2u8v^>*g`sx*= z#}=re5zS;F<^pz7;=t#~D26!xGU^uD`7UN-DGb)OLhJ=~ZaAlJ3)A${P&F>-Eq-wq z{Z#1}frV270ZYd^jV;!bUP^_!pa*7SfR85vE zl+PyywHV40C8Mx2|3b%Qh1cwWdfPLcoU30sg2l>0F4^l1Ox!>T-LFo6W25mGRnH3f zugr;}CjgZu%YOXtK-}y-T^JQB_pJf5h&3E?O-6}En5CMsZJ*xQDoG8lqMpye0J7^& zX!}9y-u4xDC;>P%yuK_U4shbdaO&bxE1!wL;3us1Cju3>(&qQCJ2!b4eiwnlW(pjh ze13pYT36jQ*sbuRPQwLW=xi_~U7FhjdA;DK8!-)Z;AR%*az|oE=SCNCmjEG}*6SC5 z0|ldKkER%s3xau^{V!=8cl7s!NpK{I0r;vPOfO$ghFthI{{ejAYXmaVwDm2miAQq_INe7`E&smw6|+J ztNr(vNG;2^3&qNsn?DC=f9#ZaI70(GtMlJkEe(g@m(Jo_Qy9kpgDD8QA|O)l=45Y< zauu~gTy~G)m={8=wk9$nw4G4vzjEz8l~Jjy0n$hxu9GljbDW1(x?XFelT+In?Y?oe z6B$X!nEnZA_Ged;9*;q@=g`8~mY!z(umHlUa#qEY0M?4H6~2~#tDCqG%R<{m(+q2L zJIf`(AiKAYf%eUv72Mg@TRp1+guf84In?&?#W6iqnC>`fxxrd(SHmbKoJk6ti-DFj z+)Xi{tZ`dZilUr^qqi|hIWqRLzqfMO;Ws5v0yK$zu)d{JM(gAf()KP|izg zj+J$sqfOvz^e9L)eyv>oQ{c`;>tCf)J_Ac`HW-3*ldL0Mb{lobS!{ZS-2-6~8woSc zO-+!XgwhfJI&(}Ytbod@$m9c{JBX>xASr+DLl6JjlW#cz`0}^l{nvN;>{*33d#;of z@Gw_|o3bKqqty>Y8fC$8W0YSX5)_F&-CIx*TSahdaM>|%yVY^|@H;vR_=s2uV!jx< zM;GK{4-A4TCIWIrZGtO!8#Bv*$0fb1q)p;(o0sVb#7H|j6=cD=hg$%(LKmYCfL+;Z zOxjQ4{=~vKCfUR|DiDmuEg2r!4U?29wbyeRrDRWTfZDGytCE4FR&xabo^S!3&d1-u z36 zcEie#Zk0?{uNeWS9gfYumw5cO{hylTuB1_VNH%$25mWI<$#O(t0mg2Z@CILr3NP7n zrz>6s#|}X4P-W>pmJn}c#fehsxCxH})B(SB;DwylhU6zdHR+ zl&?@g$h2~}O+Nz9Z1*A>l{BS5b!-U488I%fG`>XgmlgL!T${smE!4?(O4yOm0B`7L z{~F*hI+&+d6AFvUhRn3qC&C}-AT$Z7lL);A5GYHEj>$)71E8tHnKpVON)+o;+VmHI z)Y`NK_N8&PQyVWxt?bLgyLm`#fqSFOYGX;HTG3UCpmy(oo~-LwjH-s4L8djL)z(+M zDA34VSD6@42)Avq3-JBu>0fkh7?c7~oOQ9?$hxy-ZXnVOAA(066D^-{F#B{K${i&$BBeF59@Q7$`UpVM z7e+vMaha+FbD#_tOt@;*Nx;XgKV3M3DFjj8_&&)_rD|t0y-i$E%7RhJ4C(S#_pMAn zP%fy@G4SRjX-+*9r%*ST`b1#Mh}t#-E+SoEWP=z0=UijEX;Np!H=v_z0*q{4y}K~)DB`Y+UyC6Hg| z8*kvFBcZTBc1^|r3*=MLMDilOO(%fYnfQIzU zEl?U2J8$SD-TWwfw^GQ^Vg}Rl2xOZbHB*9CS0?%BOyWP<1eh>wh4MI}uG?I=|47zJ z@B{>ORJiSDD9-~*g4*SLxy`#d2a2%-J~0E7F$!Yc79}1V)wP)m24yI;;APMIoL_mtl@oxkc?8c}&-34&jqBk8 zesX{?$hZ+=La9r*GXOuClL!V>`QE%*NX)@hnMAR}MDq7s1wR{cTr@6Fy4EsQ%WSfg zgIV}8snC^L|Hk35EYxKJroe=*i79qLcF#||q8@btazXv)MwijV!@%q`xDiPF&UEIR zc0Kc6nzETVl|ZrYH`(800wgun5YPhW-dfE;lC0FmI<;vRnE5KV*O$71Yi~KBB^aOp zP(_1Kl7Q0QR~DKAVO`MKK3d)nC{BuK1~Ch{!_|&LD#59-00F7g9v z)S{WSjN>ji;~X>@qjTxErdT`*kD)MdhDVyuM|o_L#S*q=Bt@Iw$vIETtY6SH5UNNJ z8-DrcLxb_6fGMg>^FvRaDB&^`Mwp z$)9uO1YkYS&lRzqao=`dcBp!)LF@ATjqMAmfJ zH4tXG5ZNnN1UiyNg=zmWO)taJ<=F5?qc%4zP9O(SI7e0gY+P}PxKThKO~fvcfKjrv zeJh)!U^Z-7(w>9fd~+vtRcroJ>pX?c0G;IX$o!LCo7qugKxn!Nqa-#xTOr9<0VRBe z%e`>rS7!O;#-jx0HEU=S?`~18ZT_mH@vqB<14vEYchd`Ke?BD|wF2qM1*-#U1A3K? zMC#pv?6epvm`bTqgn~36lJRW!l&YMfxnpgG%Us2T_HQBZU#l7)qxOGx_>J14gcFL$ z?)h$V_k^K1C0pbh0P(;&mai=mwk4TMfk;yZLLjgv@1G$&RA^X+ZR8@OBs;8)b2a;^ z-2NK458B)Q^#!K{VX1uj-ty@5ySzF3rOo1(Ju>_*)jQhT5vZL)mSTi)4Ro%^whvqF z2+am({S33SeddwovARD%E`a^%K#h>J`3I~({)exg0HpNUL(tV7&3ug=wZaH+!JJ=k zYZO4QF;D~Lg8eGnsHue+e+p$<^BErhRYVT4r}PJ#nA8Bzu4@&1nIp|_@48o$198l( zn(+AQ7CR#jTtfS^7ncipmvJviFV3O56rcCWN9Y~TGU|C`k3Wif+Bw1!D#Cmlfwy5hU z5WsKAEZCEpyWdca*I|To5uW4v7RAoFiRrEw_fPQ}3SGwl-gm)lDx4bSlDKCBF3s@% zCD|!uYD4_7Pz_s)lStiL=pmvwB(~IAk^>dZ4-Iv6) z123ugk*u>>xIyLKdkS%=QDNLU9R9?HDl4 zE#q>OGXhP6-EIvq=7-wb{1sT)sxK)kLh3wEy_JTk{&^h^oMT`RZ^>@FB$#BWEs)DR z(Q_2C&?=e=Hx&8Yq}*_nM$cD1Xl7 z!9xL;XsP5Yo$sWJPYPf8INfj5ztresErDn?4jRZWrwR(J$0IG+gJ_jftb}Xw&}v!X z*)j$txNZa#ncfd=oKmZaOEYXAhu5NK)8MYx{-c7Z2HA6GLTr5h`d==%6)}~#-HfHR zn5CygGCu}!6#xs2De2tTXYFQkmcngZRV8piAkWlfd3_gd7%OQ14@$+GfJP2tiL|H0 zREi952Q2C^2dq4KU!d*f6|Ji#JaNDw~Jamk?&po%RDyV{@iXKE!X+@+5 z3y{83c@{nhPf<}ZYBZYo^d;|$pZW5V5KUr(fL&As1yn$KL=*)KAgE{*jV5SB@c~6s zRkxaZ));T?wdR=fA7jq7_r6ti%X@g7?}K~mo^Cg5%`wJ5{w6TBE7B&Ncb2JLGh2>{ zptGg2YaqNya4Oy;(yflR4$#YYUjZ;Zp*P*YYQ;&AWr=;u?TW3p(~jMi(3$ZAl6n)0 zA^4^@)~gF?b`qMnq%avTgxzcmzM&h|9iZJLviTLJ^k_uU`ymo6QyC62j?ulkY2w(y zP^m|_Dm!iMZ-O`&*+n_%!X+IGe?x=Vi<-*@5uDnK=?E^w!nf5)(a)vmNn*}xm4$jdb)?F}&$!byVZ zUt2x~tJleP_K2$6&uYs`n63%alxyGFM>jP>ykK+P!2b|&llN)j?j?4en?{B}s>Ofp zcBTW@#sT1c)d=^`x_SkMuHuToz9%;t>pj0pRRqj@fT55Ar{gFm1!-OhR8pXpHNjN; zbHuLM2hZFE;}Q^r59QCT-vd$i1{$F-5wf?nv6E)0c?8(@acI)I@1$yV%H()&X}#}m z4gvtRNpgtb<;_J#?9}-m;O@N!$as!K0wkag80-RPdP5q9*CdxeO-)$Vtd-}S9pG0k zrO{Ylqbuzba}&Y)9n6=wLLh8SGuzrMIYQ_f5m|913TkS@o+`mx1EQ^gRjy58Z7vAb zMKc0jQY7JEmJt9|d>;vz{xy!6x$dx2CsG<4;qf(C9pxjB+1db{ypSI{zQN~31B}K& zZz)kxYJdaA&=S*)cF>CZeVkkuSL`rhY4EqVsbUD+EwtJcT6Pj7-4gT5y9ML)I1n5r zcT_S&nOoXoe&e7`uH--WgTns5NBr9)o!rI9At@5pTGJtapomM1^XLe>YTe{DNfRQF7YN11D_r`${iv*FpM;)N}Ro6!;u=$X0HnGAAe1Pf);CKFm z)+TE`rLV^CIl8B{@aLb;g@if7@?8AObNq2WkPn=V@Y*1&HUq_7FE<-XRem?9>CY<~ zF#nxO!>52oSYev&m&L6|gth#x0~WB)Pu!6Zix)sdQE+Ir!Fa7sD%&*S&?1U3;nxOTQ=QOnCxO_w_vt zB*AWf*7&dAB(v#`_Lr<4Y0SU$aq;2qHUFUcc+M3Pp>N!?N-$1|@;Qv9y{WooRWIAq zg)M{j3a|Krs=;0yWpyiQ<9mlQvGm=5l`j=gocu{@hnPZopTw@UlMhV`CO-*wcJ{t1 zICiBCGP+G;uyz&!7>0qVgaU|(a!kxsa-M_CS+XU~l1MsDPmCAkOzz^PL`ALyFL92D zTI5!oVRPNYh3VNIFNOnEhkvE&AXeWvnBbv7ns)youKoMGyT--Ptk9@@0vo+vrv@-u6lhc^f4+>J)=Lo!O8HI^ZU;wvs^)_ zC^Yxi2p!xAC`FP(x6TKsM{s%z*9r@Y_ zv+fFSA$WH7-m{w=b9Hu%S@jfThZ=^UHX4^<_pS~_kjzs_A>pAL&ya!=E3d#(P9Ia^ zF8q&;i}7ZRZxHWW7V3tuNXSYcMIlZgi8=cxEv8j29#HF9)x36at~bPEW)}gB%S;JT zZvu}*GyK0Oz0(=7$!F%{wjux{Z1Xswj$eU-HXGtdCAiDETy;JZm$+ry+t_Sq$5tTT z9B%65cK1T?eyt=D!8&{5U3wW^-v8>Blf(4zD2o$B&4Tv4`{rqtt}xgvn}kNylPsMH zQ2*NTKn8CZ`a92>Lq37!%cFGBBWTsrT7^R%wv=uu;rpZLfzJSiYAer-^q4&1B(F=T z17bL+kTtDAbE>pp4Agm%v>ea~b60kMxo*Xr^+3itNIB5iNPL{x_NqXvom2V--~+6G z#zp5decvLWGoku_TEw`k*j{j{F()#;W+3&)j`#~!Tq2Lj) z_7gB!pP2xOzyzO>0|g%eBmh^}Kyi}90UY9N-GH({1^s*TG4iWiTtj_JtNv` z*i=Gpl${rW>@W#()7&$x5Bgcq0uxlq&1!7~=gGg9lvq6t`j*|SJ$ak@{hsanZFq6J z$mG_O2;|qbm<=ll6flryIZgOlnt+O8%gq02(+b+iWQKed<~!c$^1r>uA_DMFUoIDo z5Bh${SRS@afKL0*H{Rhd7GW&-LRWgEvVU-=Sw>KFh=(frK1|}SeR(QVZPCaa` zL89m;f9Vi}xV^Xy#uW9Fzbrgg-e&Hjo3{Z43BuGw^-;oBVEi?Z;Qda{ADgKIl^5DXL#HJea7QYhU);>i6MfjO>+*a^uDX%MdQyA5?B_~jRKoun@Qw%YAhdtHZS zSTgSavxYAWcdElWb-52Dvv34O6La$gxAEy&GUx4^~y zO|!DZ&<7j@xC`lM@em=pd3XN`&YoDX@O%(RjKoROt(KTW!^EvqAkCI~lK1=OS5f`z ziiv$on;lo=vY zCBZx+X30Ap@UF1GZdr}fW~)!`K;y`L7<$%|P&|f?kx}DU5YPpoWh-0VDbY{cFq@Fd zh*P=?XPF3xO099R0BkHx*iQ-!=+xPPE-4}icn}C`;~P+b^C0Krcx{8pPUDE#xizeK znj4*>L4_U6rc;L1ND0Q_`Cv2hiij2__W*l-(dzBLelYj{yghpHcV0kW|HOXrFW2Gt zLO%Vn6ZCWc@;3B@2c0NEG=oV5okeer<`dZO8*`r>YM^tPpj0%+$b@PVMVcS?{M4kb zL(GW}M26GvgfOGIxvi^@$=_Y7#7*+f)KyqPiH^A$kdzo8+5ayhPK)8aM>ziV(2&v|{v{c+7cl_b04=Nowaym1A~ znU#sffBnZQn0Sb@6o$W#Z`=yPfAIWZn2b|NtnE*)3=UHYoRc;dx@8Y=Z-7;#qA0-p zsd!t=n*NlDsfl{pV$F|-V&rl;1Aw%dvk1m3;vtI&!1#L}tUcLW&o*~kVcPw5vD-2O-u-^Y2NHI|v?6Kw$hJ%z@{{;%KcBiu(OR}!o z*y{7Ubjd9fee+XJ&_nKd2Sec}Y}L9ts+Laf?e1J)GkLSmR$1jFjC0Qz7#W8KPo0WN>FNVlQtC zeB-&1N)KM-0E`*M4?nZ4*E3m=`{}&r{6{+&2dYwMKjYcuF?0y+iWv=czyXgJrgqs> z{CRiNpCwyf7xAiI7P4e))1V#fJsPk|MifVu$V^KPfK7TTFJuC+Z(e{XI=RMjNM9^F zfx7dm3J+;6bit5}js{P_s+VEio5Zhvl`5%@BD-7qi~L}}-p@4xVyOn=li8?hvBmYw z&uKcwoCg6t{CavGX80Nz{U-afh5+~S`(q{eM~^;6Kk;1`oN@8Tk9*#ApI-dWFQ)JM z>I>=o6A5_rt#egE|7ci62qFdI38GY*2+1-*DRRZea418o$;lV1&w)aCk>s>OFS3xD z(h3qQlMVJDctZ!&nTF}j5(LCZ!d8Udqt28ep^n|It;ATP$t7v|iprW8$Wgmw$fL3>&bYYEi_ z-F+NLgHaHg>@;GbO(}lZ2y>rU#k@XjBIW+xpfzrv}JIsBI_TaQr==^)S3F&YdIw} zN`Ct1YM^Cyyv&|>mKprh1TB!#2b#sHn9kUKh5N-wa*|1U^Zy?51>-LNyKX_xe(W*Y zKf*UjA$r;)PSQ*N)ur_14?9_nNq9ywghO^bSo>lqjEX51plKl~9jT&;QEm$6v_S<) z==>Z{7fWO*k;P@LAow_>wqW2Bt>nEWk}kV=VWCKR^CST%r0NOWP-zSEP+7z7j=THs z-U=~slo4ql{BcNB?4$&echS+#q*T@mX`c24&JTgGBPoqN*TEq3LnKG}uF)V%Y~|SA zXsaOeL}AYb)lN-e2xYR@UR@XxHwXa3x$RV5;GsjzFw{w77d%*)Pp(@lllxI8r$Mw`{fT;pW=XJ@nRMTI>K8Kk9_5Viq1x!0%is8MyIV2+z;n){|NCoB(xn&O z^abjIlZn3jnHSPeea|Iyk2@coQ4~dEDFxj(`{$=-9F(Ve)*5DHlYgTwsK|k4MS-aT zQdS8FAsRv@#&*DI3epBSAEHut3lRDu>bgDF$`?Vo@Xa9vG}KDNYE(C*T$m(%V(gD+o?Km-lqnFvq_h7=Szh@woIFXbxS7ucyA`gj0E%yf(+l~aA?$-v zCXtqvDd@_L(2C98Jb=xtd*m-+G6_Re@4)TaQad>z2W$vQT^lG|tD0Av$`Sb?A5U%# zxz_crC^Q$GfKxF4Z8QaXXu|;*2|!0uk9}2b zv$By~C*1e%*Bwxatt7x@LU>c8WA*@t)G6&K-(%xHbRr}Z?7Sr;VQthf>kdXg-AKbZ zMNG2qI5uk>B$p`=05vnT5!@GWyD~Mug05Q|ndQ8*Gl+5MSZ(%-vZC*JFqhCy%9VDS zOLUYoLSYK)tTmK9aM;&^#$U7Eeq9`gymw8uqRK@r4cR!ywEpuLU8HsEPo5Z!eE#=G zouH?G=|1hP&OS~3?swX!AOGjKp*Q{R)%2oQe}b;KQp%7ZhOHQ{LBSH%oYqX&4^0AB zbK~OE&H~e!vG%h}MifbCb90rl+8~)vfaJ`9l+*6Aq>PoE9dlV<71n(wFy`xeaC&>X z*>V89{Wt@|U)_J(wU?N4QRAAL$o-ob35Kcc?$I`#8?pcwhJA}DD0$x!2lWS!7*l9S z@*PU?9LQhDLWRSymh#QPZ9Gl>v$$pcdm36pd0AM!rjmH5#f!tC6S2Y3Sw1Qg*cW?71cuw^D7rgQlc|$FM@tdP^KUp{p3=3DNo|j5&{nqC_7YO+W6g2M zMGkgZ1rgxXG@DlZT?0f_H4(l3nGuw`z9S=k@ zlw68az9|nF_%(KQa@B1|ACa3U4Y113=Axh6jykR3;iQF{W}E;~AL1iOs$>Sxd3`-1 zkA}O?&35qBSd3x6Zt`O7%k?`(O!M9!nwi9iR#yohR~u%fsvk_Gg;-o@5BU|_qf8Lx z4J2KvGJXnyTnyX>zv4@?l&_;3XOUYv;e4gp)m2 z0@jS z9d^Ckz!bk-o@;4pwDr|D#KW3`p{Kq81Vg~v0CmiY`)A(q`RqsnUNtV=EtDDkNy<~yU(y2FYf#o;|zj_vjpUavqi2LByE$_ zwC9#G;R=}33|yN5)3>ju{-QeT?D`585hz| z|6iBVeLwFQc=Lk|DS6)l7wQx8s+BCdc;4@>90@QJ{46s71BZ%F0$2{KI6g)B8Q>CG z$iVq)QhtvH21Q90#ZMUp+1a2v;GJa@VDawte3ulo$Qs@2)Q1MS_rh(@p}00u<+<=E zhoCWt_e~onZwiih69)hbuYzSQn*7*nk^Bx0A3LhbCV0J&ZoR>f&qLHXh)6vfo83Y} zvYii=cye(SN}S|;a?ixoB6+0B4k&RyIduc+q=frqnWH3%R7bJ80KN*b4X~ z-2nIZV1GeV9`5rAhK~HS!euRChhr0fl1BBi#!aw4FA*qltFEzFvP*wV=x{XaENX(s%cH#iS7*>3&&jvtee-G7pv_Ryn~vCp~kaktwap&$FM+t6Fzdkwwd zm#?6YefpqI|5?^(hrA|x54fruxI+Gt!RN!m(# zF7|bTkOkS7xC2Z9;nO}E%z;m4=hu)Y{(vqx261+1of<(gvUFZ2<-;@$?W)09{BlL; z&~`coElHWKVF%BKQMOdaxT0R!^bf-)v#lr@B#rD|JAuc!%0^i28bwR`VhWZ)O&uythC166L{%0hBzf#~hY=`hWE`L4f zU;A>8MCz=36A)um`UIpIkrNje(ym*$8h;>g*@@Vb;{Wa;&ViS%Q4Kd17q5El>_S4S zxD)mzMX6yf^3n+fV+%H!V^giDr;JDpdB2Y>J!czT!#C{!d({2*=^LJKoGv_{>0JGI z%ma?o!|r`M`q?*pieB-yE8SYa_O2q8L~4Z$lkBDmd@9&^*2)L*3KTE1qgpCW{Tf{q9*A|AP#{40e#UzREjdPTM&O z6Pp|hBzsrP9{gP$UCwC{y; zV^6C?q%(1f8Ncd_?L0iC61B?8^&zne+onj z);=^IHTf7fE9{|mq1|@jTiN}*InW0ScYHZH*m?HS{2Z%11S&Cw+zD_1Bt3I9V^eJJ zricSe=`y6jV8Nk7O3?r>m>p)yM4Ea*bLj5sg-hOkqasOQHJo%gkD-NYd26zfM+CHa z+Xups8atSzOaNliH)}Gc03R-)4+pFz_$eu{(zUYb*T3Sfw_DM-KJ_?#;hp#BFnk<8 z#`G;uzvajgIFEkx<)5T?|H(D29=(`U0V$8GY%FDSCUwR$wE-9mVd1JeIIU*-8$9u* z>3#4oI>-CRg@b>}W-_=B;&S{Hrx-%LRMBMm$Ix$qN^2a_RZ zpyp_s`B0Q~wnCoChFae7+P}7Vaq7J8Gyeo6oRz7Oo8EbqpfIgZNQhcPlkyQL8LbK) zsiEjs1VKUsu>eCVV-Oj=nrq_(soblq0LFvq^BFQB44$kcnKm3qC>*>y5&@;N&(}_9 zOA3*e&BYZ?WC2z^fnkhvbnwF&6h`gI6=?TnMA^sqrmdu(&c8!WfcC<4IxCJ%#ebJI z27#=qq_R!BDD}!Y^%Mb#uTjC{v)dofO@K*g2Hf|<8=WY@`vgalWLA727#TN$8}ESy z_oW_rllxv0o}FFO^2+bG*JN_1%RfiFu3a-pNrq}hVk8xV_%%oJuK)4mxL<$HV@}W$ zAGE&|yM9i8+~v|e`l0W*HT~B6ucaS(<;UqGR}3yq)ER>nd1Na8UDhgEJ^#(xmI}n0 z3e-w$s0wGx)47PRW^q$LvjD3@4MfXolY=SD z-7^J|$GrkkYjvpC-ZkGr5`e*%RKuRSZK^R7hC5KT)e>8y6p3$cET-3ZYSgp_6*b{> zT2}*kS~jxaKxp+H&jD_TjdSxUWvJp@#8q2&lJ$wTQt>O!aDLb8mf_^mGQx0KA*7t} zY21?p-We?~!=0^hde%g3C^HoQf})oZd3}xFt#Sa8ehy)m7D;;>_U5vyu|;PZX6lgT zXnQ25a2p3}{?JHWKT9D=;)MsS$~6|jc8dJ z)r~zOy$VQx#uPq?!}4-dBg)pDKLZ~HqsXbZEaht5EY9K5Whl-qMnS?;i5}NHY>Z|@ zcc~44^5mm(|^-r z#J8XvAlx~Fv`2DuV#A%+L(}z8 z0(9o0`1yBS(ep;{{=45{MW0C@$3{oOZ+zMX^rVNJq#u6874(h|T+`?0-EwV!S zg~y@j%|5SIx+}MAjw8@04~2Wc;7Op_gI!B=VeI+pbeOWo0hdYfY!`kH)7K`zP>+ZV z30Y2pzZYgj1*UK=Te=zvPPlShN_t)AM$>r4V-|_a+3?{@Da&Fl*^jet!x|Ew1Dobc zLDOs@jfH=DA5p@mo&-(QuBC-=0i-Z*hgD+gBMeTYv)#6^o;ApFoKY zQ}`N|5F7DwmgdmBaoJ2^^5=4JDlprVdQ+mZPYMzo>QH6k>>xp2BpbXH81|OJTy*;i zuWygW(MFjnk=q4&DTIa#MNNhm)=Mmv@qb{1vAm<1iiL2N7fD$Ktna<42^h5at8@s9!#mxR22df$uS(7hDxr)TfR!z z-^BqeRpIgU=SqyMC&5Cb0I>NmtGe1BsbW(?gbgx z!vgyLRh9#&aVE^IELWZbYcBHSzZ%D~CwR_qZ*+^vze& zOWyEFI(6Ew0@%eY!#>SIoLGa3!@keB)anB2lMB+SWG7>e>)4pB&0`L@7F7j(xY_JV zZUhd%g7xP6FxNlMC)CF_p>xt%PbJpN)#-92KkQJr#tUm{;zbM5Pq9o z4Sbf0{!;2+YD^gFq22H^v`^HQ2t9Y8|8DW$q3~}d!!5W1DtldiQ~@|HrgnDy5lJ9N zfTt8*E9Y9Mo3-+1BIf8J;;RiNyTv=jl=k$qzjU*4M|q?y^VEd+M=~EVrWn zKYkq98%d5&zJQ)Mt_6PN6`!EDz5nX&)mo;1fLjY&JVydE#LNykRni#iaeXsPl0tAF z%l`0O#HI2PUm3Sg1IbBxDdC-Hz^cAS%8B#B5b@HA0Vz7 zSp5n>LaeZCcpbTyQWdO$6TC)4cpYU2ul|PYw=v|X-eg?%*$fV8eqffR)Ww!#>tuQ@ zCj_;`ruR=_XJ&cV+A2mCnjH_~wbQ@$%#Nr=&m!Tl=GkLoWK8H>)FB&S$kDPBe5`e+ zXJIz$pMTN$H0t?J&?E1Agg*O0bjd|4`Zv$JHNE#w&ZqzMiyx;CedKh1t*9RM5`e@E z>SwN;56&)rL*l~vw}P)(<6nZp*6$Te(be2$JW$sQ=<#O^d0%WzW;%-v01J1?E%6+( zK~h4n7()on^!gL=fZ3D!YI>JYC||sBapy_NgG7cV}bJ;v|88}A|`281z0nq zjoK{Uv9|Y5&WA7c&s!y@FtER~vxvp)fa>;#ZvUvLNapehjTm|z6w@V(I=59|%1a2T zAwxKkf)^${_Y!@{~fJA%GNkI zy18Voz;Iv19lx|eLP9$P+ic@BP^-JgG{P{XR$uziK`J!U$Vf-IAVaq#J9rf6mQi0f z(EgR$QCQgD&GFl00i`L$S38ISTvI0b^T%4f;qbvqIc$ACIwovM+>6F$4TzbHa2#Bn z*2O2+$YeWNg!{4Zi-q2l_M!fqtZklidxQ$ze7uvN{@`O{aL+M1arCo=KYl#m9!Kft zzyG%MieJBqe&+S#THqRSULNp{6*8#l;7Khw#a|z`!Wt}GC_{zTAgE2s%vp}*-5ry$ zzQu}v-UYjv?ksHoljj>$LNqtUP*))S%EZ7zO66W#&XqY&c>+h~KUc|^L@$lNO^UKv zLuH@VoWKpuuEi*n&-LHK_@6BtO0<_tJ0#BD+;n)Djc zyB1;(`};)1*{P%w{_3J(C3U4?guk9&pF~r+o;{>SmIV$cSruaqtZVEzBF`7^jlRjZ z-lIOWwM4L!O^|vp;o)Gxm=<=x4n|l1{RbQhL1t9PFdx~LKB!wl1)`Lu7n!O3uW@oe z_6^Raop+R6YDBHMjr!fz%t+B@WHZAgw^lqQfC?CA zjM!zrcVP89{Y+BoaXb?BcTtRdWhF?c)3R5^Zec1K7Q7_jIiMO60p}NMFniOYo2re$ z`s?m@w>|o%k==jCi_>Q-{f3Wqn&Gpaa6Ucm!6)d)Uik@n(|fNDVJtXERNc5WYh{;g zyHU^Y|b2oz?zBxu+}BD6?O*u zQ9NH(1yO1B{t4DAy^Ig;#OpHqNZmLJPWMnL@C=HAe7C2zCSVaRW@iZtsXE!4YgLQ^ zuW0zExiHT>fFVg8wmQURRc~Q3p9c&EKYnmp@ARjiOWBAhAiA0hc4;Jv&YvAuqP56h zI|DAD8*tkBm*12s9Mm4#G=byey=ZUjfNv#1?@u=(=?^WPWx?M)#`iiFeI$0_CB@Lm zcfx#9&*FE9|FS{PpO$p;07oX2WWZh=n;`0R@x<+VA)3-iw0zXv9sagM{yoS4xrpKK zOkwJeQq2A;LR>T`Z7u%oUl_V;?P&NL$zjoEFB7Rb@(@(L_)~@Wd1J(0hIs?mv@{TikgPJ}pUq~NF%FljB$cz~KNm>W>h&NQ1!4##p8h>I1Z83?SrTWj0Z@tFAij#n zaI+Kw##(}6h!D;fzU{OLB7u{W{Q0vt5@4;7rUhByks79B@Hll>6} z(;f-I|f@t*uW$ zPxjX>{JI;#PpQouaH@vRdIH~2&o+kCLGJSklv@3&lMKr4_P*Opep(pBFJ_Fyrorf@ zYpA4c0q%WHwiynEkRQ{>3c~dvmbxF?%W)0}tR!^jtIcJ~<~^%mbY(FA0IdJ%0FkQM zFHOK8`8JgK>&H*-kJ_52KXjiizw9XOAK}kd^c(nb-_P5ppZ{04rC<5YE9u3r`UG8d zjS;1ctY&i6yt2t=Cl)oUjs%uw?K#hC0cA_DtH>86yAE^Z(&|1qxYYvPyevS~euV_` zpAG!}?6boQQ}=v2Udn`3-)w6W=u-+mSFaGiGN2}F!w$8wy2B=lHSG2KJ}5CnPJ2G| zq+PigBEyOMWbepnQ`o@^$PQcERfF&u5Q*6eJSo9i6DfsS>K+z;^t>rZcWzQ@?}t{t zsTeb9Rwm5*l~61plR&v$Nss@#)!z6Y7u*=e|E7?g)XBBb&dMhEE>y@jTwFb~AX$R= z=?oJK7f=ojj7Hq!qs1>l2fai(Lk|S>vq6)eq|0PK-4xujEupaYVpD)Wqf}A154-n~OMnoWdmyX@O0S8sLX~_jNP%jVn%Z_2YQ1(5)tGHDAs*|eG0Z#w zJJeTB+RARyx9He2KgL#Zf%vz|$W1Xl zWBXZ|+A5ts#rk(h7sun&yVf3V?G#14-W|M>_4LWpX9?VI*TQ-hiSn9cEYEJs;TH zC&#hKDut}?UbDTGsm2RK7iMX3oXvrT+(aDY3w!H5r>`Z53~otL)I#o+KF^ zRVA*Qfd?SkT8<|0OBK%7hPesab5Secnq#Q*`^MEkjq`I+*!8m}>Y4AW{SE@fN?wPQ zObpkIarwQrwz8U)htQMj6~GPVBx`SC4!Zv?gB;nJ*c@m`+v@C}2k-^il!CR(j$d~8 zI(s5UIy9L^ictR+js!#Z>Q)S91O(EzZsFIq_;)3`y0l~0hGB1ahDIV#V*=6x9za=~ zB^a#Y;KjaCkrZ21&BP_ndy=vzi+jC=;@{jN;Nqtaf`Jz{Tk%el$t3-&_Pv&JSSHLW z0hkZlLCejpd7rs|MCloiI8I;r@cl{Kei%Lu#^>?M-@1-o`s=5rp6yv*c9JfCfPcRoX-#IT2tg9J8`u!DQ& z^jb{}edDClB)_Dr%t#QBgXblp$|*=2HG$=O4*e1K@w~-;Cm0(RWe$@Ib#f^6CRup{ z#e2s7N~?a!XpK2o+B+_4vP{!rD{bf1%50i>F8HkW{rR0@`?mxRg>wfuPx#fWY+h5P z&M6yGI6+=GKYHc8@hmvD$7dj)>lB0(nB(|Hqz>WFc{gLmdYJO7f43*2=o#+!IXKtJ z4mQR(;bVd4h-&Qc8nLwdEr|ph4AWV9T00W{bRp45oewqF411@4&KIyQNIbzaH+9Yr z38cTq2LiPITtZ$zmeuJtWP?GH+xK$5!PgFCswLC@ zq4(IQZ+Ox%y7(4{hu#0)51ytMy!vYT@JELXuQL7gn@-VNe(yT^$6tPe9`FU{K7z5n zR@X?tqrcLRDXTTOnEmj)qM_t=c_yk-dcGsU=!9KmD%W2I5 zP?fV<{LO_pnMH;v5;AGdW8K^*{LQIv#k1ZV0-ZJd!fAs}q!TZPdBF-uOTo9|KT{~Q zNdBr_jRq+(yL-^QTofiDL;q54+NqEd0UUkkSeC3GdMiGr28 zWDU%8ZCtQ7KEQn}X3A|bM8Y4bcd4_97Wd(@;GT!R(aL=u0f+Z&2w$^npifNc+v)42 zpR8q%D@VD53shgR&_wg{a?p^{4s87${r*u#hrdWs(#Kj0Ap3wlT7dm~KnsVJ1=04s zziLg#;e>C#8PGb$p%5N@Xb%^+zG~`IcK(J`Y26jy;nrhl z&y$bQeeQO6;QqfK<9J{2np5} znhQ=Q`al1Vi|EV0^gQ~Zmt8@B@ZYcXSF6+=@Z=Ping5mP?f26b)U=+yG^;&q9gxsG zjBj`_+AhU^dW=I>v?W_tb8-3GP})9X=c;& z1o5+`AVm}>t!C{@$!Fz2CJL5G9|xP{JYkA1Dx(TD@IpJLX9_)GE&dz`mFu&1eS#fl z?eF;;iQYmX(1qzt)n_v=vElI|(GX-&{GM+BaaPYz(SVuu7+KuBd1%qQY3c_(Xabu| z?P%#2Ly2?)%YP#YfXj`=d8c<^YYYXFUDT{nf7Q@rA8>2Dql*^5K4Q0a{xvx;bvPqE zxnca;a*zhzLQ*Z+?NVYl#aS!Q`(Kmr7|BTUzB5ls6ZAXZHAjz)aQS7&=xGl=I{Nq@ zj>3O>3?TTW-?)}u_M4~Z`U7(a<2q4tHN;)NM(_G>2lU=QznY%;$fNYtk2-QF)*4@M z=Y9Ig@4J*<|BkEaM}PU_^zly*&4E#J-ih{PXlo7Cg+L=M=KwyuI>d0;g)^|qYZk_|-_Lft zE8@jNI1YV7mT`IxfEKf$CfAQQh?}Uj=(Sj{w16NkDFhNME$tdwWuFkvW&40zKLN?e zKw_^nsK!Ex1d>vvVbRqGHQN`b93oU#S`v(iQrY>}S~W08Aq#F%nu?QqEPX7MwX+ZJ z$QR<;K*F8{p`>ynk+;oN*uNoyu+r_WguRJ>H@i*0Mv!1th(6lLLXQ)Fls6_Yv{Ntz z(g54{X&%ePeY>YW1mG$_T^8&UkPFo|j(N~!cgKOWX_RP(;$IZ0xf@2a6?R_U;pefx zsjFlu$W29?=QHmdwYUx@(_?B?E@+1QHBbIprvDrfE1IA4{Q1l7eT1I#gkz(X@8N;_ z*VF!sUVAnD{m17+Dp`QZH1%^{2UTKLk~zZk`mt&Fxwl?NZ~6VxBhqnn^f5RbNXL^O zev%$_{}ZER@RRiN-}v;**$85&ZH?qKL z?VNDeuF{+jjieYOi1T}&7UX||reVrWgJAT}RU~GwgMy3_;>?5nzTNpqI9^*#_Ur2C za-!UfoX&qv;Zz#-VZ{eUi-N&^ms@|UWhR(pG41W`9!Amj2|cI40U7P#K9OL}s1ST3 z9ZhCGqM=17c&qHJgK%)GJyqu(1#6AYN+P}n+==$JVmDw?p|-@vZID0jwEEy?rC>LS zr4Jy^8D?%KO^}is|98}vEM^Qn*uXkN?743>bo@CdNv05AjvUyNWlG7XD1b8OjV?~nlL8MZJ+|n^x*F5oS)_seu3z$0x z2zMw1ejOr^zo6PA{kT7?ysXONq$@|t5PI@)-Oe#Iwdjg9^egdUVB1ho;|?V4NEDmN z8S_c1%+J{MOg2rUSsCUBv_i--eGB`7T)rzchUkPmfGjVrZi3x?Xhnsf9wJ)23S>k4 z*jpd`d!hIaVd`9k;wLSk-v`%Np_d)3=-BUZcP;jq>~Vz3WjTAKPBKL&7}B4oQRPX2X9Ur7pqLKOxW zVyL(-qd1it(C+yac8N6`Lh}ArO9I#23`y~aFU)W=2r^Ik@d2DXq4exW9;YWhaKE^j zo$DXhjO+bhdh02A<=d~Frr&AG%9H+-vIdBhd55fkEN6wE$(!)M`_Bh@|9`rgzG^f! zde*oWIJ$rCzZQ49{SkW6_g+G8dG{&$;a~a~{rxAUTql0u&;qNPTb)=S57#ucRYuVU zvv3tXD}}#*JMo4?E0uLlA=OT+0M4p3xZ#&pwHU!0n}woOs_BC&TrGUX>cfmy!~ww# zb*x|n1dXR+@$VxGmUquu19s+tCOJZ;mW_OFXu>KHee?|0m$LflTN$%i6KgH%nhUCQ z@#&mnka+}>S32w8u_6p0N(*EwaS}@|*1;9oY<(eG(24P8A{2$;{Z)ifdH_sVA`GaR~(|FNw>E3uZ^QT6$q z=FAb8r~IMFo+P&(QgX+Ms;i&*#!U`#<3Bw1i}&ek9(#;#aq{q(`TX`DUPmu{-6{I$ zC$n))DgHB=jI&Jx=g%=ZwdLLMUMYe(D8^pj@sp>=@BhV7I{4Q2pQdjb36PiF=WujI zk9*JwdiWRJk$&bipQM+*+?XB;#apFd5`P^6m~SIY?;*yq;-7W-b$dDMGk=7IJQj3=OEV z@pZT)<;5hg#9Z|8!VTz28=dl*7GvuS*2kno%@D*&Yp9ZTNa*8je@3M8!_AyBGuKm)aFv_lOG;dr>IEH8txfR`gthe{vgrX9-VIBpuqZeNPJX=p15U z;c7)T*kRi%b9wCzxi?P*oB9#{?~K*7ry;Vnw}&TfcPHCybK_80!hzVkERpuz`OYMO zXw$?`I}!&I`Gz9}f?ShY$gOw3lS@j=VsB)rJ8SrRGC!2~X_2i|;tjX{AfU6?4ROwx z?58old1Jy~%C@+;qT>+1tNwN9g$+^I&38JY0j|qcX5y$;e0~p-ST?J}@>M-}0Xi=qnz!PtShrkwX!2e5XtI=tut9CG=bGyM}(~r5~lg z{rCZO5Y>_bxxS81rwSz-qNTdIxa*Bh3S?(>Q|=()z65d2nORxcHh)R zbSv4t!swEj4JP+n*`QDml1%_P-MnHpqG-XZbjVbs`6aP+bfR;Mw zQ)2t8J@xjGn`(q;otPz~0)uu{H=FhUyoulvP?h3*#U%yJZpH+%M%lqY$i@10Ue}>` zsc?fFNY>|S;7M2gsdit7rQ%PZ_gClg=OuxvQlvf#PGIZFUNVF@FgPvcFIpd3PkO-q z=!AES&O3g1;QqJ1?|S;F*Ih*)yJ~)J6S*kEz$s^v^F*4OcmI|aCwT>+5DPjH0@v(e zP`yZYV~p#TRQ`QFjMlLDE8cOM-uC+kqYd&tJ?8$0137u*{g2Z_?tLfv+1GuNe*X2J zplc7*%YlK2%GM;=U0@d03sdfmDgKqqqO+B5;sPaOxSYL@naMdzJJ+$)D{hyYhD`R( zSOq^%?z;(=W+d~8IOp0=)4E#IQ8PT;@RZSp$=`o9pMxv$cEBucoEf^sTQVAO_r!k2!YirZQLfSTkt>wtALe{~4yv8s*Y}Z_O?k9|WyL)POig0P2PlWP9YR`p z1bi@)mF{`R5$=D=F}mxehX?Ne%fB7yM_+XneegpE7U!9#{cN+!T)gZhL;XhE)GSAu zq<@L4a~|O;r9$21zE0J5T(Wn<`b!SrUHjP8O8@>9*V60XJ+1}5;t1XCcIQ4nU`=HF z=BMA1p7MzEM>ODL^xN;h+L4!sOun+i7Y%h1oxS4UPIejUx6A^xD`u_v?(B_#dbPYv z@0p;K7E(M*1FtoHePZrsNwJqxXNz7|Hz?Y=peUqg;;Pj7Ngi4vCA&dviF~1cs9;~At=h7oqs9~L1Hb_zh=VUOu)8*4b}vOm@$jB znSK64ae64>RF&mV*jqYv>1m{$uplA3a?VE^&Hzh**t@nl}>i*KXD| z)!5>^uwVb)J<81q)#sK@bBfoiP?PBz{#Y}5+{BR4s(uJu4Pi63O0P-bcF*PA0vL(r`}4voiTcz zu(FHxwO2$k{9ktdnKWG;Dq2dnf>W=P{JA=96MtkQWD}w3PgsX=mH{F}#6eyi3-Zt* z_PN5$t>v#QG!jecfj!yZHpRduOJ7~G^$i--6#V`jyPrezk-w3-b@QVIgNj&qx1Ae) z$IijpcP1nyHdTzecn|GJHX|7@vgjF`8}-3XcE{k?G9*;3T-swb9AMRMU{vZ9{{sEN z8|GintRzr{6^`b|V4bpLcE9leBzMh1Pkrz)`szm>I~4nByFT9Zp6lqpy!mSS^p*39 zC*{fhbl%^onfc^3KnYheXE@5Kc!n5*A(MvV9(Ohp?YE1wr8Wf+@0fMa%&UL*G`;-; zr|IjTuuo5T;NGF&RXprI$LWFp?hf?QH-4Ia>NTIB>#iH9V~p!pSvTp_zrdPX)g3CQ zR7H1y8nBmca9pIB3C6e+BD>RZa)gWLX;=T>3I1 zkrf!JfC?HOpL7Q(VF@dM=yTq;M`x`ifBw6z%p?q+Sp3D=m}C5KLJj}q1yHB|^^;Hd zI9W=F4;LjzkU85`2s0H2YwEi8Oh8veOJT`~gilbN8cNoV9B#v&Ju)1nBcD|D8PdGP z)Mtq}dL}SG2ZJh!Hov?OtIOnEz@qnj^Vq;>L4xBUBOJ2;xATU0-(CFvf!|v-?5I)z z>7i09>#4PreNNN@s-m6AAHA;?_FAg`rfaU`hfs1bw>hTPwE~wQBC0NktUf6Z_OU|>qe|j391W?4Y@tJ6f;ex<>#W)F)1rQX z{J_gA%>Iz+cm5@G4DOngr+iVg-@%eEO>Tf+gJ+|l{Mv{z#0Z<~UIJc2%F;%G^AZ5w zVo9C+dkx`10}`jTZ{?f9e+}8f*!&TUSlD#}OdA;f8Z0v%i&i0PIH(7DL_*!5)2EJn zZ`Tj$3bzV!vC=t*C4WF!h6ITYRsm)>fR{_VHjhQ9Jq z7tr&^wZLEg?e%5Nk#UZChyIuQwk7MWZPZe2HTZ+Q1<`t3hDps#!U5qjD~jvNYi#RuN=7`^=exjp^jo39-6 z1+Jj0uNeRwrn71VY%KZ-yAhZI^Rzi@zJkOy`N3x923RIZMiF=uxw@{{Cc_`;6f>~< z?W41{E@+RrqBzI}DLM5)oz~}J3wGH|PV;YP5JMx7!2jMRF^dl#oc6_D3oF{W=_r2v zQksG|lDbuO4qO`8JopPm^S2Ry* zr#MwEDTn6l=lA{${gHHeZj>d`2Jv%q_T$%9&3SUBMYRT@zMq1{a9M4X*C1t|9nS^W zv+u_VT|tYG^*iHN|eNu3q+~PRMh(_&{CQossK7YdECXfE{_Z}o#a+4b#_$nci?WW!;;qD z3O`fJ7Z9qGfB9VT?#~-UXa+96km+!h| z_Ux>*Ngw0RnX44k$XAJK(wgFh2?Rd|7OE5(VZBcknr56vw4}II9*L=IQf`Q~C=9q7 z(u7R-zxeP#|Kx?I=<)YEGD7onx94BMyxK2v+1JAoPJ^fMV)AL{Q@v}Plmjah3 zZSUI<&x`p+PUICE6ATa2TU7-q+|h8q8nUGGVYiw>d$j2G8%I&A8&VnnXc=siK)X&3 zyb%Z8Yxhi!(MPy;FfN2BYSAli!^*layPUw98_|yr2@`WGiCsa%+Z1PkfeHr8%Q3vgK zS1VQM-zi3b@F(gge^RN}-rCS2cfTjb|Nn~1j?q^>>~Lh)Pw&V0L|*-lYv~u>dJSEB zt(Ky!S=YZRuw+(V%v{?B8h4Kc~WDmC%;D(p2vzXA!z)k*g)m zd@delXet{tuMGFko8Nbue&>%5=sAzur>B4E5n82lv-so37k&Ow`h_339lh^QuRTjS z0P4CW)aXpP9*O&$r{LDf5D{GNLy-8`Ik`u5GPZYI7+!Dd$Kv1Ulj9u7#*WTrnubEDu=xrSAPPez-IS zkRdRo0m@9udGOtjj63C{bnz_@54-;l{`&#F;McCEzy5!Rnc1Jro1dow&14?^xzOgR zZ?-qC!9G({kl1<0M`Wh1khq`*bx-O^I}&(0$SV=}Im(`}saic!2iX5u5+j9(Y|Cag zB;%UvlwSDS>&CUfY5FH$ag^?N_tiOD{L39NzAz6M`2lCA_}jXhb2G)+yi8qWZ9E@2 zga%5Gj@f?S$O4m>gBi4~w7j>Z<|^q4RVi?JB=8L?)1Skc?t^wF5*q0S9(3w^{8MnF z%*~9bbcBK03}H|zYa_u?@Sg3@!&-Ueif~p>vH4$k;omBo{4f~Cm_i^9SkXb&nKq$9 zjc1M!5;c4Febbb$@${ZETBL~sp3m(j4j8QD1M#bMyTfK75{NKfHy*BqeEq3WAAfxbPFW$Op7-i2E3dheH=~}S^`9VDhHIg+``H;#nIeE4 zk0&`8SG%Yh1H>=vH_CORz`;koGEx(~hlZpnoNOqS3gmtXOxElm zEeaIrtz@+pVe{t8A|znUX36jEay z*u2TqeDm$C7P6={gyAR$Vj0#c@XAk}ipL$7J-HzyKxiuB)Gv@ctDVA_sNLba7m-^D zU&9&LB-`T~7VhKwRVrjQ4DE@IgoAGO5-9L_*{`P}MbU+Qe@*lQH}2_qr>rbew@64p zhK&7p&)%06;o;@?zS{X_&3aB5T>t)~V|3LszVs+P?ZNx!BwXD4I6Ybq|LX5tM=$%0 zYv{VuTBdxn@#PHL@#M$PH9j=J{dP!~Ko$m5CQ0t#hCo24fbpCbbxQ(&kAj~7u*0cL zJ@sqK!L8)rRSv2d*HD|aaDxCc{pKH>rg#3yxE6TK5xV@5H~(7arg!x_^RL%jAX#yX z4T!Q?Hj76*QzqpJ8!rP`_mtdvl(W}^B+&O4)P|>jPueQPn)^0YvZ&p!2||Jj!o=h> z{|3yb@?6Cs43(5v>7~fjmu_xKonB{^l!9b?9$3hE`FVJrotqyO*1YCM`v5o%L*{3g zJ&;9buaqH(Ei`tDeW#kyF74Kf%Z<=17; zOd_I#Uu0fzt5(QzwEiT|bi=}ZShs{^L2S2b@V-ZcU`ZCYAu&+dBLY~+xX*1{EdFux zwX~sEB<}z#wGwkG9MmQHMRKOr%`9F5i8i#tXO(HpKGvjs-7;M4c%L0`D~jGOv5eGkui+R1`9x~)nkdT}O*5={1zp~7iR zG!;O98b=k8y(jhO)SEbk1Xu;=-^qIO*G`eXTJsB#c|A|hb8*rpgFu_KK0I&@@+SzW zS{KEGtXG*4MK7x}^rU>RaT{RgA6aAU_zhWb4G;4G9wWYX1c?Ca*U{vF<+Ww*stPcu zsf5T;>!~1xj5zo}p^|@6*A(*#Ah|Fl>7)i4>QiKZ5?_36p>l5$4ch5GDN z_z~hqRR9)z_H~Sx3UDAYVzy57&+ksC-E^EY+4Zxh`2o8ht%?b)AM@EbY(N^s?fSFd zlS*T=tQ)hNQ@P8_)QK&SnO?NkW7Uv`7F-xJLB~z0+3*KRJ?L(@{^Xr59@+hmJ3;rj z^WoX^f8>gRUOX25cYg46p60nARZLu1$%!f>KZTGILjcfPwQ8`Fhr`qY>b#e@x=m6o zvIsAuuRGfOT9`?l_KTP(G|bvZ@t{#J{_pJbL5eidF|@0H`iIBH>3e?S6g}*oN9fzX z@+jT*R{R-X{1?xS{PvkPe|mlMIhXQ5oyLMcq&oa$>};9{*A-^E-d1SiI~q%g`m+%B ztSOQVAu?Ty@`OujVo!=?5VVC`fGwRGat&}=3&wXWqdHOS;gPK$RaOy8SiBK?B zN^YI97Yo0j1*k4O44Al+_Wk|0P4`QQe#^SpW$RzX^x96?O;>`3ghr{!g($nA5N@=q z2^hln8{rJqc0xl@rAXd`4|I*?OKpkyvr&(e& z>}e$u`1v9w&0YYP2q%Br}UG3i$uU&SG@YE?Z$n+oByS^o@2l~qTv-}3i z!uplL)Q%N*%mk#uh_MAX!tpQf`fsP{{eN~q&v^7cJ$qaY+?3`{=K|#4J3o>_Mm%)y zYh#~k(L0;nXlCLULUXE)b4DJto5(!&*S-PMw3-+^BHAo>&KFCGvDXUo7bO&HAF6fM z>hnRJ93ws~gG+I$5O*Zd)$=Af<$GOQacyP;dNOcK^&?06TY;a&9Gi<$+T>XN_84c0 zUCPnBcC@CVK67@zQG%Tfj0zHXafTTb~2@LpQp()Wo0z}^eiZUrW`6niCdIqc+M zF!aGl3uZ~uc^@=f%r0g(^eo(&{7vAMEPB&ATMbGJHF>ZuzPGZ7?&#tg2MMF1T3E%G z-FrpPe)JyQ;>6*B```7)r|BnNe>HvN6Ovy@c%og~z5e<06eO8}wQ-55Wln$BWKx2g?6~uF$2DnDl*4NI8!bCS#wzQtq zlRy8AH!u}a{8=khk=sPIV9%sKOC3n90XyVu z#C1nmM{7%wM{D1jekjHCNGWo7P>}n~*x zC~q&ibq|H|vdvA2YTr({?5O>4wR`d3mHn^nWr5d$z_qT@qAX~V!Io!wPAzw zgbLJ^yH;)UvKfs)I?q!VkPh7tcNjls&+TrPB>INOuITe_e|X^jzxkNZi$+=B`~LiN zDezkS^=o7=Lva%bB}r(YRE%^mbSJM0f|WKggOIZA_zkItD!PXI}9~ z0$uX8Z*H(ESyZzu(c*oRV+|+28#ix&L_q?_pypVPYmX$+)M(4O9$Xv|%1TW3rt=k% zQna6TL@22Z1rQ0{a0N0)RnW3(yR)}lI_F(+ZLYcIB$Ve_Wr>)uXC&xV$5qi=4skPe zcf<7D6q(ta>YW;AO}`ejNAkrnqlw1BVCMwM+9I;{vvfiLhMEX~uNlVx9oPfWh5|-g zxB;?ZqFsviwWiV(2@E^?fqXbo>g*!>;8e9KF6Kp%EV;!Xa68NoQ%)oGX$62Ho#sdT z7P{OtR&;f9%vvVjsJbYF{NjYMlg@Q zZ#opwvFnd(uBVaNe~Ml+GW-Y80zDSe9Q${HqSRBRyfk9^O_ zuXxVCKTXfL>?l3w@%wb_=;4L@yI%`8vjPGzr0Pgl$b0MkeyTRQD`l|N)!EKDd1)Ra zQG}~B&}wa)tOxO7>K*>(0Y6WugY74z$XUxAs>_*uoF`B7=(qhfqoTlt@|cf)ZG_5o z&+0>exED+(1@Q1Cg*p7O6E%TGy6hIn9Q+Hy zT438PyAASJ+T0zK=Zq+d?)Hn~zP}gbL<`A=9*jzk$*bz^F3m$gI%G%HWlLsKU0ekz z!2I^(9(P}+XFTF4oqzn$4E>{2?fNOP@8h46%Is%@EbBf#B3}`vp5p& zsxwquik@=6ff)b$V0TcfJK`!ia}L)4VNZD zcgeg^-(W(Bh}7j$kP|WZOi)Q9#3q{6UlZ}NA=UI$=>)JCLOjU;hnf~w%)AuLq!%pPOMxwuJ3}OIwbo6Xo$Poh&8X(}7GpKc z&YJNMLJnFgf9EC;i5yBWpR4Aluh|61m2ZxQFC6y%?DGqHaqUVFd5pJb3MjB-(qXHr z>J5bqL-NYyd(5xpo~E``skX&k7k2l&WWq#!uYcYEBgCKIdt4k}Fzy$m#zl`x&P5lJ z?gd^fn)&FmyB}}V_twWWkoPR;HWkV>>po@%YE26l*cdw|aj#HQHQW$0|HwCu#dr=; z;lch8(D2^s0+++4&jApF3rF+*XFXy?m)+~|6#i4AUF}QWat;037}vXgYgb{^H0-Pjfm3MKlvz~ zJa&j6|DaGxREvCZTIBW`Y2;;KC$0H)UUA=g+|UGT1X7x_2G|O}=E&YueJ3n^&j_X| zUuce_XU0P6&m70#H$6UAqbV&bAqjK;%#0s$ld14RDJ(6kF`afVxg~=iZT!|Hv;g(Y zOGR==m7LcI&NXQLgX5-#QeE~rzBMv1N5QL}mHj%VGkR)na8P=ioOHMTp1sDxmp$Rn z4j177C+tA>+f?wEh=9GoAjtiff` z_py@vQn@KohJ?KI(og+HfT?@`>=Rww5RmppR_eM0kxk)qNYTUtnFZh994J zpG22GJkjy}!vpvK`tMy&|K-hB(I>7VFxr`me#(cDnCvE*qgc&QoPvEgRft|8W}B(s zJzEAqxDPe%4L$E^N9l*bj8)|M!F)Y(=En?@_Zv#&@Qv%0LElqEt(`HG`t))D}HBXJv4m;iqu7Z;z z0@mkO$r-7j9RhK-X(IVaX{aTPpHh}ATr7SW(s;8Fq`t4PTG?ZOh!}7l4Q^c=h{oHB zye#cHHZk&qLtAuveE(1ST2T zCp(f^hMwV3F8+l$WX(hARk`j3wHA9P^MeDP7MvBa;}+VCj(p+mnZD-Hhlkz&7au;D z;Ql}RtAkRgZ7$Hu7TfAg|& zE%2^A`p&O9N_W3wIyA-K89JheLy*?m?%Z1Ul_rNMmh)5^PID{^WS&8h-3 z`oZZqnGJkyz%Vfo@_=V^oU*1=H-Dv2TMBA`Cru8n(Lio3T$?V+$-!7X-yb5*F?Qur zNjW6yRh!&|D*D_=4A}@s@*t+rI5-DB^{I=cu~#W5h_n%O^GL^LY7d4g=CQ{ATwso8^MPi3I2z21Aia9XSzcKggyBZ=!#{Q-gq#fS?Eu zXOQCOq%gan*r5|cwzj}@Gj*DRp3BuxleKMlP`|1Rnn|N^rI4g0nPqP9pDwT;(UU+L z=T0yW>2y!J#WUhu{rL2$HQaxSUi+SF#{)9u{d`U8E9rd9Fh}u}sAj4O^YphvW@QsL z>>SnQpmT*O8$%y&Orc?2mZWO()$KDYkyD$UyX{_ES)a2W(Peb6@L04bds=|;;h>L! zU>smKl}4rJ&j79Ho^}YgoL|g8`kx2%^*?wp#zpVbbDz9Vw>ZiFV37YAeSPXQUdRS? zk+-Q>hNtZCHz_`{_CE!!vcS5zG?Ox;bX?R(+#l?+qn}vNltUTj!mZ)NFDV3o;t+>3 z+K)T=YorwG0{>4dI4b&nl&VKYlZF~2q)i;TGC9(pfSQVPk+;43nmD&o?~^bQ^_0rl zU~P{vHym$8vvf~o!SRoZ*^i-QGna?wKsNC4K%M_8_^u4xljKVc6oThFhXI9rX6_W$ zB^10D6p^;X0Y~YQ4@3xd#DVxHy&#(y>&un&hm2(HkkW=7Ivnkortl6$P1JXy+LM3S zp)3d&RZA4s_BF*Fdz9pOnP1eBLYHilg@%hNuz@3=0~HntnFrjyUg-v8LC`-~`Ww-k z-g6!O>eRYur`#;9i+?I4KD8;|CeZwvu8Tjj9U>^EG-fdYWC^O1RAJ0&$;v)l zp;P20_b;&&zE*gYR2zdPOb{$^Vu!q$I==C7{lij~)3FhD#6N@kq3PBDr!p80Ek|3{ zp+J;^cXy!QYTbw1J@>2cxQ^bI*8)#@=#fTldM-@;&ZA!z)v zm3}%I%%DBZ`tVy{M*~-6N)p)ShR0;811{68rR=4m{nxIctu!RgvT_FK$9~p&N1Zqo zJ6(Tmub=zi8sR26H8%w-MZ&5fmWF(#oMjQ8=X~xOOs~cMH{1QH!1xsab+h$#Hpl{A z0{w}<4y`rQqpE?V;l)Tq={m0Nh}hQ#$lDjMfBu93th8N4_fT*SOm2n@@q{Ej_Hn=) z8F4si26rS0$$`4$6Tnn7(@6tIfvNF5KLBKac8ee=2~J9zT@RxTu$y$aB^nmr`v7Qh zzHqejUJPc_$=W0NM~2bPhk9P}R3PD4EGD!;FO8mw|l z?IuR5W8SM$vj&eRGVn{dY`5oS&kAJyt|*iVRUsz; zJ||hnpXv@-LQvSW%9=a{>hw7cA*-zYUziZn25GZ4axGB7Osj*czQ@#%vhG>nCfVR* z+V}aq%KQByNz_cl4&iJ(pOAyr6~GFbRdKueYG74dF|i4-qRXMV)?PR}C^L+&z^Dq) z4!K_4J;Ff#YcpB=2&vN=V?_UVozjp9$l6itbvOaNiN71i+kyC$c5~!IlMKA@Q-_{! zMW1!I2~{x-Z`;>`K@m}lKE(7uMc-k^K`=;3oKa=MeZTGam0M#UwfG6{TkvY%8HuHX ztaR;37xw+yv5YPqt)7z`fKOf}^fPa~hTi=CYs(~R>|5LS7nVP|{DJ2<18bhRN`!39 z60aFf+!R>GECh_j!9lPD1%Tcgrr>JH%e|mAcO7ZG{#6(51#YZ9-L=JT3)vKZEc&TP z9~F2-yb*p&Zg-mDXCno#iBVDJrG8JYTy1O-nEv434D^lv@hW=CgZAm0pSn*Mo|7G9a1$I6ZZuU~nx~JDZuK>eN6k-*Pxfvyhw9O{C$7tUo0ZJQK*hs7bRaulp@mjUIQ z|6_f4z4l$#(9gZ)>QUmy;9i$zH?T7KbCLBi`$L(5zdjR_I5Ykk*c)0=6|R{8ZtVpI zJK770Qfdx=^FLQ8{)IfJ>PdQTH|&4b0jzPPyQb5C;#D-MM*3<;E8xtei$X?lH@fg$ zO2M@auFI-y=_P-7a+zdiriHo;`Ozn>2+3>z>uLI}KRiv}@Wi9^zl~0mDgDDh{@U2o zMj2LWC;)bit!90Ylk-uq&QC5Lx9d_pz0&AS3(WW#z9Mca~}m$p0XP^ z2wx)H(iXfSO#8;dMyVCUd&N7#(Dp*gj?_ohj>!(2OvJN4o8n&#|L2)1sq~?Kl=pQ) zBGo+>trIC#A9sxMBruZ`T6XrsCI%JWkpN^so4?hn+9UfZ6#qPxo+EpJKmH%5>BnCE zY5LIL4TZsbiwLZODdU$)uCoRHFdlNeBqaJAH~HaH;#4) zR7kEk^)RfCNZxHw>B?(}{_`(iORsy^0e$x~j?#TTH{I-z|6-J4=kxZyT0`&xmO6Eqqev)nz} zrJWSmns|~zz|IW$murtxRtZS1Q>p9C!cFjvdV-^!0nWJ7pRi>OmU$H=SP7$28`yld zd9GOnboHp@iFYBPA|P=>AS0zzY8a#)i8SZYkxMBEroi(XkxQ^ z#G<9tu%9>S8gxsR0c}}%EQJ@%3{{XJa5neRRHils=4t9UE9%1Qt>F5G8GluOKX;Tv zUS+sVP>}icC7If+1*8M}N66oHlx9n+=fLp)@zE{rCtrIN{l@QKI~${Lh4Cdr)ayb$ zfL*juMFI$mzq#LlpG1KZAx*EO^#L!%uF0etjD6a5P>)<`9{mb_;MLDTYpk_Ch2O?6&p&YQp(rC2GA&I4hfsilG(0}B~y;02QlOB~0@|18*%1|a?!2=S? zwkMKeUo@=2;BG0v#uDLJkG*-Vh{;h)Kk<+L#eMswzvaID)F1a^`@FZm*uLKf%X5VM zpK!n!64T5l-LdJFJRE%xim(pk!>%J0Rv-M~S66{Z>z%GxgJTb{+wCZ+e z#kl+X8S4NU_Jw94tQ=3;vLuz|j~8&^m!d|qFrUZ-Y;yej;_|#sO~~>6Ok=L0ptKALL4m!NU-oZu$A#4Q#^hKEfL1uc?0GZbG<%yX7j7# z-)D6)5%emd;lz++Mc8W#xZe)khNrONr2~W2Yn_Q|1wO@sL;##i3ZGW)j|JBNpmy|n zk+qX_N9p~Ia=ubGtOI<4nQBNvPp>7QD4Wwv6I$I4IYRmD@YWkr2rL`J>^m2%UwpT% z0Jeuo<&XTO?`U83=ibxa^C}MKIGfbRb7xTKzCP*)0&p1m2!)GuGGmc)P!a=M5I`TI z=Tjzx0t>|rvba9+MUd7GJ^{-*WT%%&F?ReoRd-DO4n(AtaafqgdVMbeOoM_qP}UH+ zF%f2YQ6W7B0WCKVt3frzg-h^bE)db* z!jMTlUs9l!=LwVn0FAZO(MXM{RVY%I<(|s1(HWT)mAT;K;BxGfW{+!lCTLa9++IPN$<_~mWw zHe+9L;#ZF++W>2U?JMjIJSj%^JlKa36O|KlfRi6epYXv?MiE$MkrkKH3gnN`$ztZm zBANck4o0-206m%fpb;A9$$f#~gwiDlj!wq1eS9I{*>kNWgsM%J z_f;n-zIQjP-|*lk_5jYB060Hkx$q)m9w+xw_PE2I?ieW9bAyWil=0yOKqd}JZ62-Z z(8*CXlZbfwKZk!=rGir_GLv(!-~WF6{dYbzivQD}c(wiMzkdHnlLRjy)8A{k~k)(shtu|hP>@%f*QO3v3$7t{wp~Y>dAx1 zE^&=kVrK`HBVZEKsd!X!9t!@+H{G`{`0e-Y6MyuJ?U(=T7u$z_h&+1nKf;(gi;vyZ zi2p3hORJPEheP>}*tGtYqzViD8HMRONId+0BX;cNl4eD1{>VV9NBn*z|Il8;;c=P`E29qB+vHF#G z93C#SAk7J_9g;9+{23OoywV@26SQjKKNtVAE|0)<3|TuH3Q^}81QOE@OptvKy==5;GB`NHl=e~JQUXM6R@LfTL> z%&al6Ja8EQfEJ=rste8Y=4_&hHW7o@+7hk69wbwR3fCqVKxz~~OV@Gs=s zny%T}3=8SwDA)rn)&O}fTtw~WN!bn$@g4XRTxS=FaYsU=%_`B^ESpS;eXroQwPtrB zo^YQQ*IjB8j>?$G$)V&5mow$EP|=#e1Cf9aAhV}^ellNuXfD6(PrcUu%wK!G{ff_c zWBd3Y*&mG%Xyjm((0YfOecXd+#py35c_u@r_h(oG^JKLXLxq=+w)=pYlZ7EEZU*2~MBA@fR_v!oDvn@-?dDI8HV;`rRZn|KV$+$>?Y0Y+F-kk2QeK z@VgrT=@=-+EIuTEGCU3};h-heeAQTR@HwD1CQPV2F zT`JTF3bsk)xAiY`>Z>vZmGw^09?I38WA}4L{Mtshxs5JhYwaXFfi<=WgC0B?{ah!?x8b&$W`H(e?G*du}S{gRH0xhN{2= z{l>l5XXB@(4G)oBcf%)0QNH&vz4j4YWV`o1noCPo*N>Q_)5y1R)+SJM?-@ z`@CU(lv%P^%R7Y&P?_40r^_~=)Xq*~!i8hDDt?TA{^hrBAOg2(q!%2h7xfSsqFPuJ0JnH5jPtmAMNFHBH z7rY>Cq2%ZzXI^L$yT13|{0{vtL;g2?0Lq#sb&RsGYZeL{)9e_xp-#uK_Gr6XB3u!$ zhXS!(c*j5hWQizhIeMcwOB&jAvM4vceRJ#IO{V1HIeC_vGCM~xS<^;AHYp)SgJC4Y zFv#iCV9H7o)84D8gfuR&p0KIlKXEZdxAm|f6QhUpP)c!UIcFu+XATUA2hf9$ft+kO z8`~k0c2Sexh*iI6IFoZ&b&d3tC)+I&16tE=63e|j5HCWNzn3Jq(vqoe<@N&kpm}{FMnOR0VCe{ zewJQX?*-J?D*hf~bc@2C^1y6A`AG84n{q7I|&Z zfrU^;if!rQhG)rWi>6m7wX!B0DzE7l(7Ez8tDgAdXy)r5>x#U;Q6@qTS#5v95puhz zKYfE>4Zb9g519su)>dIp@cTNQdp=1c&=U#HLr-BdAQwwXp6kp&XGM#o92iXT!1i^* zX|I#Vewgt9>c=QxMN_uRZf?2*NZ}PW6?z265AOmYhe(WYWvYX{FDl@IhgkNiD zqYmV@M;9%leT3xP1Bv(BRx!%Rjk*4{{O4^kRJPIFTzO#EUuJN0ar6LwR;PI9r%UKA?1q<#Nr?avI$mNkI54_08bMRgyQVSWS*VuHwwB#*P4s$93X^Y z9SYk2#evkTS&FpDLs{RC^f@_sE!nCvUemF!AC{34Q4lI?4+Z#6Do?^?Rhp(yer+9a z$X^?2N9Xg=2gH@J7tDDMSVyfQzb;N+V_h4@dms{FH<{swBn^7PdiAxTR?^`adPQQUKfB@&U}}h#%=4B9O6tMSt;|8P)n?uRC@Z44mYsz5Na!G( z?285DZ|_+ju7HQf{sEa^rbNA5h73R#GHK}iT(Rq8LZ1mH-dH(U6LHx4#`$+a^Z!1Z z==&LDz6`wKf@vN%_TL88>oJ)yqghX;aDOQ2CW3Ipsd)BuCJMsS^lWmre?RqaEWA2E!@#_0CAEPZUzgVa99^tgfO*`@f?|qT@6Sp z=qk>YT0#tLxtY68XL1h?fV$J)!r_fA+$Ek9rABFfe+GMfu-uQBVRZsvZ%V~qC%h45 zb*1$Dndw$18KD*Myzd3eUV+-3jB@rHA(N+I4HNWmlY<5F&(ua2u<_tjy2ovnKl3*!kAJ5VL+pp zS0!{G9?v+)B}*1o(wL_IK3zXdvA8v-9+lNEXz>y;8vu>My%pWH!qzc)imR8pBb(p? zYo$Uiz~N4|0h0|WvM6@hWJ-dgF>?eU$(c;k8V^aOz+sHKm}XGoXA^T?GMP?E(GaUQ zapF`TXO7VO{(&M`A9#ZxbOuN6gcCi55BxRsZ-iz3xf#W==-J+ocn`)LUkyt0dQp~1 zGDiYslrJ{;(I+lHWEcd^YL!-oN)Gekh9W!$!t%GJSl{Lozn$BMYu-e78Zy5%U@kyf zkA%~o1ms`3IIaIY8#Z->=q}!@_Z&w#L-EwZ7b~ zn*aFxRxNb@O9v@&;|fh2QY2|lNp)1 zCj>w^e5M6&L>C9QmZGH`*i#O&O~MvAh559StIn==_2(wDJ(FmqB+GV4CvkS&h}g)1 zBQ<8^f*FNK1(*n2v#bsaGzv@Zj-2pHe8R7dk%XFJYb%2-lhg)Dt#GFkmt<8kl=l8d zUy+*)<054CGw8aG9C;$cVKq55oaTZ&GXtO^U+f8;nuLu}fF<)ou!v%1JwGPC4^ozi zIpi&M2}$v>MrYbEp~1r-b-llj)VtXE&t!6;XA`IDka@H?csrX!=~pL=YRj=Wy138n zHt|zeZiulK=Ve=0HO01VeNbq3MeQkil4UG0aT9E_fozO(e#7t1qo8>5o zKZhNpI-_RasSFdI{T7lV=_({RLfV^<@oDj|Lh((|q}^RZgP=XSEO-ritGeO|`3A+M zZuVVAa#eFgMp+6O1!X1Xkg2h1&m;C{9o$smcCvdluY4vhHSovDM8Gmnb)|%}zA%u& zNxX6^R-)N%c##Qkva@67Fv0p6jV?cbo}8?#{C#(sET;$FHVfG#%d{G6ms?9|g%x#V zwS$(QS#P9~q6CB4a~x7;%!P8G8cCrdYq{i^sz}?jhy0&}aRD>aKUNqSR@%>F>cCL! zz(qzpiGA&!IXv}TNmA7U`Rbw>=}z76PE@-n9G1@oEv9dw^P`g$d`dPHNs?&0Pm{7r z%!a+Mvu1`=&i3k{qR)iw=@#&!YSKbUJ{Ntm^Npqfr7=IyhD`p`le(*k^rv2bbQJp8 z-n-R=gz;R5yQckYckd6`?@YENQg;4>lvPK=jSd3veOv4Vdn=(JC(Q`hPPFXE`b;jkIrukzmCR$?imVfaV%VsV^SoI9i~!O4-wnEKbrnw*sY z8l)r@cRmP@hFw^mYkvO7X`s?Ffs%bhLgt5vR~~0Xo3{4(3FlP2%Ygl}XU6dnT_{SJ zq{`sXEQE(VM~+{h&XJLEUNhX!Nvl~RqNEYf9ItKDx!;dDmd(h7rczUhrJS-9+Pg7x z{zLKw=|qY(^vdjsk89H_Mp1Y=LfnsA&@QRv*zs{(->wbh+=O(4f~HA#-?J`Jo5S^O z>=D?ZubpWY7f}7Oz++AetNZXyhi}I$vukAyAPd=-j%2FMbl~Jy4aB5hi+@U%s$@x- zVf9=vuv|mPVq)I-hF-kaj3Oxe!?T1N>+9?M3<1s1AUW7jKib;2S zOd4Q!oi{ZgC#SR)gvzd8$GPk(4O&=pTGr|cDMOP4U;+-3VkfS6Sf#iy_C@ipapOlc8RS^vAi&@H2_XH@)+e`C&~{)(iUA-D8j&dn&_!*~RJ71`Lb6KHCFT2`za z&Cd+2)$>}3agVO)EKXM%mdT(g-nN}Nw8B{a@Z1w&P8QhWw^1SOCqtx8K)cf4wW1tg zsiCiocFjNLUGD-typW6)qy)GWS3zBc7mXO7i#xZ5v~ZKNr&P$)iqt!_s_%J6A+Co_ z1QHE-P2o)_E3r22u9fDxw^G``!>L+Ayd*)n1tB24 zl@)?crcc>OOXkMY_n$fa3ngYW7|>*DWvdTJdY+?EpR0IsCv$azObU{`ZWwKljI4Wi z)oj@`LKbq}`fL|;(lp|bR-6lCignaRn6w*%P$I@6{4&JNogNSJhik^!J_@P0K+YW( zSMQHC`H=%4OTwlud_{mW!e5PJmBISw!K^RIvb2n%xZeI0n&E?+ut^(6J>7l%JB8xx zd3e$n<6sMJ0+F_bOmSrJA0mTA2?-ym2E)0pN$?$_1IJ|Vro|M?-1`J;j$OV=x)b_3 zg+5;h#l(1?AS=l%B9HK7U3}*nSk`+B7BZrM%`Ea31(s%*QlAhHoB})+d?b_vHGRUG zqTMvskT#o17Ta7Y0R<9{WM?~FcGttws3A;7DpW3QO_a1-XTwS262f4n-(d8e@s^!~ zk-Ywq#tVNPl+}zA%zBl~I3?4`BO?Hm7Pm@*RX0kB?DS5FSdH#A9nrv345zG2j=%wS zc@NtH0e~>N5U{(y&q^`ivBh!ZGjnk-FAqrfYr0FTKSOvu%*oIu@(Wzd9RV|nvqj({8JAm{iUP`uLl zT|%8XIn@~dxScU8`-C4%eNzf}K~8qVI;9iZ=ePr=BPUW2g&yk`bWiHsIRIkt`Ed7> z9xIB{WSdpEttBoc8r++L<*G|PhFAvvuo=OsPS3hP5|;3rtc`eb@z>PRb!K0W-&?^q$R9(Jr6+0w zwryks9b1>whaaVf27L|o))rQxf!WMB%}=<=P$tM<$QUOMk;C(Qdd)!Y9#0w>fSv9! zvEbXI%K(u06>V}%40&C5X=Cpjxz1NfMPKwO8K-IjRl6g;6pBG^-i^NBu zwT&109AU=$@na1_X@yczsR~aYFc#Ey08p38+2Ejkng^8)eTXk`dZX=S;tQG0AW6)bw7TBDut~p=4^K4P^o-f7NjA-p~Olm6tvTz z1CXb@lwI_hQ(`MghghUw^fSBhl1{l9N!5u>ndL9E0_vWnjwzg`w&azYW0RXWLL_C4 z_UvVVBGJu(om&N`s3%Cm=Lwc#&vXt6N~a#!F}n7?aPXS!ZiAh^Rwn|eI^%yYrV`DB$@tn(10*$*9FuoPhNUrJ5g|P5wqmS8vjTuz3A_?`i}Yc9H^6;UT7X;!px$_PmAhQ)@FgH`zVeRLIqa~WHP zW-*cb`bzPf8W6fhGW#*uR4&M&Dq8KrZo+46j?-+hb2T<_Fht?cwaR+xPpc2iR=2q+ z!SitgSp57O0zL}A)zP+G|b(7U*DG7%Ro3Z zrSZZ4jAc{YidjR9mC=ro4FxG%V4rla(+PB{6!y$sKVe6WuC}9kFfq(>TE{afm5Tvn z`ZGcED`Kg=2VF}Dj4(@GlAiqHuQT493o|F7t1)@? z3`-CSjl2rrC0@5hCaStWBMqIy~gz_4iVo&}xh=7n?J< zy|v&Uv@+p$%73oEdY#7DvCoKog2@$67R(7PoQHt=*Qh{JJRmnnf;HNe+`J?o7CN~b zVqO2nL$qbkcw{mlNQ8n(cMaT_;0n?pZNU^@97e$Nums}QkCNU7pK`T@_r2}DYhoc} z4M}!jiLe-f%phsByz}oUtm!62WdI5TN`a=dl2}cELGXd+M_?f*WCAZaI70k+Hzm+T zvk$$k!8ojIL+)zt?aXk*O35rte9hD=p=HI;r-4EQX~JbUyZNj@@}<9?Pxpgyz!tuZ z_NIbLkSuaTAtYvs4}Od&;PdD1mafVg0+D%7-xm}%a1v zuz$-)tW(hmExj-A!8UR#!WmYmxQDIqibkgn{UhJYe*SABAs)zHPY!?9?DX`;+>UYf zhMT0Zo4JjW5fa-L+v~og`}E*E49TZpa2qg7Kc%d$FsXGjVr#n?;Uu;*2R5vK+) zC2ev*7QIWwm8Rq_`5oV`Mjx zM9@T0P*fwS+PHMD`*0+23TUGSzk7(yk$_@*a9fdG!1BImU&EsxzFw`i10A!kfVe%g z5qBjS{d5QQ`;`B8{49Mm!$NM6C<=<6Ch4moQl}8QI4ddFq6J4RAC%%;6Onx1Xvi*?6Bd)BkOFGy~3ne}gwJVeqo%lBTupCI=} ztb?&!9*gubePj=SVskUv#*?iMehWstYAaB#r1z&`9HWLZvv9_1Ozbf>CI-$+_d>FY;!Z^Vv zf#LWhH(2vJ%r6*vSxsY7LX))EKc<^ihCM4mq`~f#k-C?6qrQJF!28NtJx~)#iB~Xb z3TA$Ul(b;(Z#5xHNblz)-E49iHuSjVUnZ79FWhOB<_vHv=oeD(VDZrOGd0C{^RLar zPU1`?NKAYakiK7?XMsts$OlPZH371iB$lay+|&~M4e>Prih(j}q7=eC(F&!RgWW$| zfcwPsXG1Y7+Um`0qqTuxZgo^A~U}$TMNfRSR~etaBfJa1VJK+a*}`7I!#V7-GAor z7pW?mej@SXw2RA#F*bR<#TsXn0L5nub)?qTYg47^o2^rHAtg_+I+6XfcyG7G z-oKOqvg^&-KM92+bM@1ICtyhOWW5UD@du{rk7@U#Pw)`Xag?jcE|4WbtK!cSnU+IM zC2O}2nO1dRgUA0)8rx~xexmU&{sDbVuC92F#eI@*t)!ann1I_(Y}S-a;vzgh5CDn& zzbX);fg97Pl4P#tinmn;`$?RH8};Cvl-QZmggJ4SQx~hXD#ng(*=R~WXy89Ryz#Kc z62cNVbYqIQyH~f<9Wb?U_0QpB!0!Ryj+&&O=aR}U?<=#Ri zVDIta>E9^{uMq(|94M`+auRYevhuZ_SlVPHEon0DjdR(Z4Yu z|NC{}1ix78OtSB?l4XP{c^;xSNuk5WOc;&ESX10Jl3s|e^UtvehG2O!=^5Nm`U^FBC< zG|N516w7iNww^=Q1jOi1{_--W#~~B5=^hp8E-rZ$&5+Und($S-C@efp`1)Rm`?ZmJ zY&G?Fg7s}@uA*a-mXlM+@(9LN5OxwJQw_|-RSemkXAj7ze+BtHnoylAej&|;iU)5% zcckNm(Xgph#7c5Ok+n&jdgHb*rSpajN4o99pWJO6{E$L5$lb0M&ZKOnLMTyC!|!X5 z9H7+wsTb3L)%(PsxB7UHPG%m07KZ6kqDL{Up=7{`6=q1WI2x4w5juyD;53^jO?@)D z=&an3IRb8+ysP(jm8r7&NcG}?DCU&%rC5AT%#EKc+7A#(s?IDJP-Om+&!7B<7J(t| z_ug}(V2UMShdFvXE;!Ty9r@Ys)buK~ikOfONli$n_f&3J3U@LPVc0gA)Ob({dl3j( z<_(#Z5$?vWccb^Rj|>mAaxWDViLGSI>r}A#?jO2kHEhpb3%AVhrUXTgE<#bjWE2Jp zr&>Sbm{w2oiVkTFuuo>mB@(WHN_EMvWoDv3!D;&$Ap_mf2@$q(mEwz%c|z9-^3Lyh zN$z}Xw=P1mOJR+>QrOWrrx)gbY+NQ4=BCUPA-|PdKR-s}VQG{{8f&Py^c1Z%SH4*9 zhDxD_*NeS|bWrQz^ye8t*R{hz9$Z>Af_Xp0 zWntDat)Zl_6GxLFU?5TaVB5+rf9dQ8=4}+7KjQ0PA(;|c+&u43c>1$(1g5mG(Doxd zl&AMx$)lTB8m-Ow6je2eih@8WfsR?~(xjX{+jLow;(fJcQd|&*;6%ffJ?t``6wIWphOo>I-TNv<@fjC?33Mu?W8||b7J3w_5|Nqr zz){Ca`}~?;Gs_0WyJWTIZtSDOOt3G{=$<$WC}cNlo;Af#+XQ^L-3h_@A@s|HznqMnIcJ^wp(5g>CmAP27fjKp@c?V9bfNVJtQ`mLJ5!vsyetRAghH*IUOA%El!IZ8}nQ{rwpCw=s3ysi`E$6Wf(BVOV8fXO;6 zgz3(fH4@0JIs-r>KO>RhqS3e{kNqR{FRRx~=4#KY`u%Fwx6m9+?vXe_esIE{_>?aM z(IYtq`l}uB!5)n)If6J_Du;96CRtvqZ4n)v))MA2*kkyW19{lS^|Xc^BEGuXS9B8V ztIjgSRX`bhp)qlVA|ko_*SD{A=Q60Wn>;VR<6uo#*uyuL9!_#)(iEg0qikTf*kkSK zzkrb1g0#DN(dj`vG{5v#0#YCx{+kF`TPwD^HKni=UGrY|YbZvtl9NnxIn~Uaq?fkJ z2lXFv$cTjRk;ueUZ2%OVooEFE){qZ~kRr zJ-vT?Kcq#%&GX5wUuDs)Pu3-Q)wD?t!UE@KRNjNcI?ju~+xrG$(7Et)cn>`M`QQkQ z=V9Xk$oK-)L9Mv0X;(`2gGaB!5Ta3ex7IueMhq!Lg!*jW;0jriXQs7|``sFs8vC0R zN<1Btq;UUSA_dpylRYlnR<|KJnYKqH1FB>O&g?>P@B-|$TV*UlUO- z0+>FRQ$IC1B#felyx)g_$~5+2@M49ZWOF_3`WYP^pDBltRB%o-HD~<{5cNE*V-OW8 zi2gg+cz0k6E}O0Dg-XmsOMyZ8lo@LiY6;ku_<}y6X6lH?vHOP;PsCM1H*+}35aD4( zgHv}+O1xP9!XN=haw>dax?2VHv?ZNMa^i?_Eyr}P+o>~)Gq!xH{HbNn@NcuCu zd9Hg)@uAf}YeW zWM0#$;btAWO($dsqSQF{fqwMChv>9Y(1qIMNhVstF}U>|@gK&Q2YVCTP1igM!oHRR zA^?d9U7*+C(m(-`LlMn&y4T2?{Ca)+F-Wuo^NTAE_MbtIMxc*}@=8p*99-z5n5U+K zU|tvzO!k6uF+X%fyIXb9e4QBb4?Yw8`{GstU1Pon#T~m1@3Sxd`w7~+yR})<63T;~ z-0eCCE17RVc^;5Ft$QleFsYgO><@(Wu=v%Y?eEFoAE#(YPoH%^3b3I9m%2j4z+Oeq z$$GT^He#O$@(Mth^ivBmr%vl$AK-tWCvqho6k{FCQuA$khI?w}FOFX6RNG?sRVS@O z=K5nO)`W0NH1ZfE`|H0i1G(!0LJ=g)$HsZk8zMj_AT^X=o$kqcHt7bWpnfrI_Sx)~ zDZ0&?W6gfYsP24_b0@#ieM;HCWK$m@Da9(wIy(78Q^F0?&1CR1Gr!>mGQ)(znA1Q> z&%!!F;znjmqd*E3GyB1q{gHOdt(Y_ACS<%*@a;7{ zk2pXfSd;@ZGQR~CVpq@v+9sud9i%3iLfL_<|MbMnm&~JRMXFPMBiJiolT!Sr4T`vH zTQj@<(U1jU4g)b5Nr%^GbnN48J$Fo4>axCj|2!S*0^NTd&scn%xHVpWwynX~Ffs+q zYrs+_Rb2|ajTe8>@DA`Ih}<pcp_vh}0x0OsE@Ns}cc2QnmbRqo>OY@=CF;PNRcR`j8MbnBf)dKMu1YXEN(azi$dsCi_pAJ%= z!M8540-XG3-_I2Z2(9wb6xhenuQm$24i*S zttZBAOG-?6&YCEV-}rfYB0G!QoF^g-P~P)dZF)UtUVRnqOaJ7n?Q{P7_qD(Nf8rUK z|KyT(r(*>&6aW$SGGv^4;qMONvggAp7MpiUO5P*3Lex<#G|irx_*q9otjja~G72iB zDnoJ$!0vm!E)YeF6qe<4N(8^K7B=D^S}w#r85C)_or)y~GI`xS4gGn%pkAx|=&w}? z8g&J+HrNK-uM`P<8P}T0g*qh)iZ=qCkXPR!rKf6qJFb zTajl7D^lDq3`QAvsuy<5O#L&){+xQ2JF9R+3OLXl-7MUs6$wv}o!GcXD5xY2)J0*C zjgEktpJWCVwoi#&tJ}yWS8xRp^j9ywv};HTl4W$XHG%#^_O+?p_B8k zF^+{e0Mf!u6ZtjvC&lSKJNaKiXxPkX>0pV>vX_iXVWA3eaSoVi0lE(?r7k{aLzWSC zz6WKs8sLdY$QUS^jU7sF;sGNa>QY(p_l1dnL-wagmc5oXsn!?_zh`~;w@vB$eLIYN zjtPIGCg3RgqUz7$hCmp0G!PNIbp7*t38ud{AwWtsjMqjJtD|h}{%=WLra_wZLd~81>5%EF>QWtPSU|&>QUR}Y9 zc|#;%hR2Lfve#btP<;=Ci#3M*Z1z6g4fn&fnjqnjp^LR0MyD9vPK2;qJNwGCo$O5Kjy4xi1H~2<*MzPJg616K&F= zS!?7kB>w339RC=+!kDX%I4vf-7)dMmLNHAQQ8Bj&k3h#lr2 z6R8O5sdBsvx!##qMTGicv+KVs92fP-LQJCzELt^dch;>(32p{f43dzJs8=9o0X1$N8x+fEvelnIB`IF9~ zQ421M2CUOm+y#>@aOdzQ5weKxbZ+US;PEDK;)x0I4Qv_K_X5`kPo@upqxtzNwL)e- zPAFZ}ISy=GXITx}jNsSCt}G-Myt6l>1wFIxtVvHOxdT(2z03zUV%qK~Io-s96_uC*wb9=4JROje{<7~w z&Qk{y#Kz9EgVqm#6a5v`D$p%UgK(<;sq{ZgicG~d(p0 zt;?!MC*)eksU9*SrOEo3ez*O8J;IL$Ixz6}&DUH3-&gr62I}Y5zu*XCM8<$cEo;~> zWB3mo&x`uaxq&$}>V{$NNkK3)ui>;J=*X3n%CQB|97vozx;PTu(f~}p+0^=Tn&+#HwT0JB9c4-yjXE8u+VE(@^b0p zoVT-0hUw43pjX-=TAc`Nx-@T(d;qot-iSM3yZ#HXnEHE)YR4kheeJH#z6AsB-+$j7 zt=4ufr0;F!muU-o=vw^e5Uaj72^T}YreL>5Yj>3A857^Ex4H0d-o*6eUxD$gUtlIh zyasPm?Dpww))#*I-hEjUu-M_(Xj=EdCpIgyo7W6zqzl!AOoyg!1|D!DvWmc*NmvOI z79&r@YXx{UAQbNkw+n59S1#6TGgGq@1m9hV&oOBJH@qSQu+keZW%K%wyqmptn++?OVIUua4KpGqF0vE1u?2*DC1$w}NI3-#|9bfKjo-Gl zU;R7Y*M8L(zux}YH{tyb4cZI3-%#SHfUN>Bq!eKgl%ehJ1RzOdRGSE|_qj>p0txF& z;t!l*-kj`L6bwF1p0N7vG-q`|h|G z?pB68n@#;K0uCTKvs2p>!d_$!m=QefI#@`iBuRE>@Xt|eWIy0=VmMcey%s%iZ#fF} z%owP~5M~$|Qxu~-L30nRzkIa@#=@?61$(#BWEmMPsAvJn*In3h?SR&BHoaHhd-qy? zcsDi+B_SD^F63*EwFfAC0IW=YiY1?aOh4d$e<%QdK!Crh8-`6N!(P%o&097Q*-BS^ zA^orsA~#ui7)Y4304@tsKA^@5uG3y$NJV1}nUZa(m?@V8AHbqf-}2@Ixcyh}QrgoG zgl)X8ds>|Bs)1&EXImd&5Xj&~ckbUymV2LQSjEqzK4555 zd>H%L%3ahH1(${O=ayoZgNL@b zLJ8?O)D3;e95Jpv8_W^mbD~f>*kzf&9dT{ z@*A0|_|&QM9g2mLYr2ai2LPqV3PJoyBoHaZ+jmzo%bDn)=4~t!5NoiFP@Y4h!xDzC z+Co)lU-ue(@#xV14LH?{RPiwo+BILb&lg{3&BZ?781bgTlX1neYyR|Kl7FSPk+Z(zo-47KmXo` z#6P6G5i}0HQJO4-blYXRn;)53?eQ}Z=E0gN5JA6`1hWMfyY7~hM`8_<{& za2#}-@L_v={R`iWXp~Em!^_;5rOgc5UNRJ>1Pp3kd?=FKnO|jszvpXTYhUyA(mwxZ zztBGMWBOBY0i4S{H2Yi5Nx~YDIBH{B|cy_2L4D^N+&1 zc_>o%DSmI^#y#c@1J0OT{QX9j1RL@Yx6B+Eja-Q2GSd&lO1kgs#Mf}ajo$xju zo^7#v*TTN`^#_M0w1BklZF<4%2o=+AN$RWUCFA*|IjbMjkqIDXWFzcIsAbm=g8z)5 z1%enEU!Vh8$k!e__3Z z?}OwKpbq;7sxXL$W6glEW;nJJwq`gQ8H4d%h0xh6V5pVAiXOOZ(KOY)1y4vcqM&s` z|AvF+Fs@>RzramSfLr{6 z&ORSv4#J(u8t+z50mTIy>)#t+DcTsUBf+!NT_C}gNghsnos4qCrGZljkYMSVuT1t6 zq=kYMQ6b3Cs9|L4Nl#jLYbfk1nRGm>%*0oRLOXnp+OByr5l#em`-`Bs!=TAldRkCK zLk&B<&$g$B%y#4}4A!lJTMxtmLThm>*Y@@Pvgi43MIfsQX%k#2=M#ND%Xy|fDer)S z{dtNxXXqPe5YRl`x7BMRxDNDC7`l*IlF>`v%RtoF@yt}0?Ddsd zO2XdzOadH=jayw(NfxZ}y*s4eOF1%rjjog9oFHn~S#P~t&wc}t8#-}QFi4JQKF%8) zF~KrrXJtGH9MBXAadycW_IHm2$$?Z%EY9K@IFd$Qj=s}3yIeQrF?T_PbZIa8jZIC4 z=6?L$^{x7_5AN+(eEOT)Px*0gSYE#$^pSV%xBsfQv_JPZzO((-KlqOJFTZWeDQL7Z zTak*?rE|lnkIccW*lx4}a2@h6Zri8-emH}QgwMuh9NhQp;3r1pIyCZqpeGkZ5f1&f zC7#7FfntXYM2e!_APQd3AlUO|eV5M`nGZ3^2*Nk~qpkhC-*Df4&Rbt-pZn7;4-MEE zS{l>nCX$pR9(Ci%kgbfXeTs&?uz8YL!PbDxDboQ`Jt;7h0)5I+?TI*dM9khxp7+=L ze_j~mA0Ff|2(sJ)+H^)AKfks+=_wXidBs4{zB(p$;{;q(rWLaNdlQz_S=?|ZY4})k zjPD9_^P}}t47ej|HCY*&fO| z|3Ewe&QE^XgT&H_t=s9LyG8iZBG2=fP+9N6Q$ry0j;4xP5-~+6M$&I|$x|CcQ{<%|`3qMaKt4%qx%9S6^R+8wL2!KXKtDU+IW}kYQcnEuOOr?)x6JzHr#lE>7 z9{L>i|CnT^prEP@rOODPG3GQZV8tvmQ8*(ed!^7TIrHaUG_XCZRpZ(~ok&}K>|H6+ zhFt20{s6KK@62MEl); z^4;w#zxLhjwbx@Eu$_lg5SdIz<7s5!>eY_KHQ9C>adA?j5HKd?S#2%z4V*uKgLksS zwkpXGB}h_aD=e+7Z$QM6mbJ84_@hhM8#h;O$V94PDe84CV!iP8uon2LuY0}y*}t*1 z&wKk_d)vR)PrGxwr|-vuYWCf@G)Ig$oX96}Ix}CuF(n==n@cjS37u142ena{n?e3E zS?vz1UeTD;$+B1de9#hQO!m5TK%3$W)5f~FiBzXZ-+i4invo3w{kJIh-Y~`VE)(Ie z7pZzCGIpBWbto755nC*QVh7=}XES}t&GKcOJ9;uSvl$q#S39j44DMG*QOT@_;C;m5}f!s9}N6z%M6;%C8q}3 zn~Z?r*v!Wr@}N%C3)7rqO|Tz~W0i1){C~m^eM9^5U;82LmweirZWjLvMPEPm^FHH) z+gJU!-@pBYAMwT_i_>uQGnilCvO^<(ijX95!2Z5YQ2N;Y#c!?}hz4k^F^Y=7RskDJ zXylMKrnP|Y#WWq{8+j!l-N#wF5Pz_SPOv6r5uSuOl1G+J!t>U z|N2_{Wnc7q`^W#B)&k^*aQ%Mw{yjqiDB9^%quUE@V+g^)b zOxM{$L?2%R;O}7$uTrrhYH3_^P{pUz0VO2$i^x`mneSDS|l5cQzBiQy2IZ%&#?~SEI11r_Hqrk(ta0t5Twf93x6gUoOYO6N>dWnoFUWV%jyC>z z>&LvYecX@u0qytvsdu(7|C)EVS6|nq@sxADCDbLdP$C$K@7lO@$p%8$fvHQc8SzT(lha2s0XA}}QcpC5cHlB|=CM(Lk+~M;;Yy~s1{aNCe?>BCUjS#rB zE`E4Hf9NmXw?Fqc@7v`fk>DtdXmT)c@OJ#19x^a%F1L{v5Z$ltD;LIOomaBRwO7eI zcX3z09^;`++r|?Z4VQwa&bnSuXQHoG&4SgEttV6>OAilK!`?Vn);>ZPAZ1<5TpUGT z#ER3qD;6Kz-P<385LU2u&N(=W?)AI8E~VxyzNaWB0A6`Dn~$l^^dI~=lrBQZ7MfR4 zJt0uXgL}7kG`@;L-A{5X}yv3lZsdyD2pGy>N~;jKUV#rDe|NPZvr{rWR2{QS?0FQEM=Z~x%- zsh{ws_M5-rTiaj!+uuRNz);I*aZj|LO{6C%v%7QRxbsGh>KZ9+9wR)ivqchLJk)AP z!(7VQ$DVswIUC1kNDKp(hu<6blr>;d*-q15mtun}?TLm&=5sJ&_X7Rt`GBwI==Csv z*Lx!Ivx|_STJ9?Cy18YtWso>J(mi;ogI1j!qBJ!A$-f|HF}cMqT!N>?(|_EPM%tq( zK8%7i`P6qS{3^*!HeZd^c-ND9p}FlY1>QnS3~=^QxX{$kd<6dbCTBD+j%^hG!{ING z=!;2j6I~HxAcfpiJpA$NmAi(@ld>=$xT~xd3uZ~k)Ev#e5x3%Es}9Tv#bqY}_C8JV z=5>!nkq?*)^8_zhtIkF#azlI1MR*1AcVzRMRYW3g5FnNY4k$!JB;&2H7hVD%x14+y z1^_aJ)uo3l@~mfA-X$V7Ne-gZx~;)X`a_lU@s7Do{_WxIf9x$8I@&w>KHTLzLVL~w zpWg51%mv_^Wq-X0NS<4rPWtbZ5iuG9NakobVUQ+yB(4DO7_nFv@bmxZ4}DR6S`JN07>Z#qGB>_FGWspgSss<#DC_#&K(mc zNv#NfT7rFaVFBwfcAMSVdO7F?b8=WNn!%Kk8)kx2{49T%CsV;6Mkl1GBvTq$e2ewU zp#}hDNkfwU5y^pBtKcvsmDKF9YonHcCw}kyqZ0s&P5%PoOgRrGp&C2}G3!in*77NE zRS>1D77)-rt1KqFY^>z0@Zg%T{*MS{Lct~|h}&UFd-$~PEp9gn-qX*+%$our`- zXJKHI)LJBDTe7lB$0Ski$t_ZRmC;Y$zvK0ewxsZaP*~?YwI5)Hh2VtZN7Al;o$Bfn zG}*3)S<#tbsyk_>v(d_!&F^VlrqdCtli$asq;JOODi#0SY*{GK?yXN`x|WtGNOE<9 zAuTa+K58#6J`&h+W5sp$@^T$jnuz| zf+~!D!tDoCRHA!9ap;RLUf&0-j1_lI{DO8-DH4z9m;7k_e?Jh7it_^!;_gVdKbThw~)@$!w}|QtioD zEJ^AtW8z14A(eRuZe|6HG&ONCo1y0K%0UiTxQ`TDc{u68Iw(ypmJz7XSDb^QTh$W$ zQzLZyswt5iSaeZLD}&Z%!<@8hUp(trC;@WHfw&iRz>14FJBBp5+Z*g?y+uBhl?QRe z%(@YZsX-)LAY)v7G)eA^RXve+YFRNMkEsJdoEMPnZ!i%~DLDQ>q@Amf&)}++0PJuaM{e^|wFh!!PX%9^n2T_d{NIriJ{w@;TR!{qVQk zwO{|s-qJqpt#4}o!^2wO|N6$)lPbv4>GmdoXB|Zbo~V-*TB+NS*&*#A3 zanaNace5uZgBBsjOQFhi9K6T%K1_)Q>D(H-o{6)U9p*po7j8Vo-7x2{?{se#*Fo+T zIDUHy;c8*ETR8_AG0?QJ-(_+#PtIW`#BBNFs|Up2)9cwJOtRMbfx||)y3fhrdDwRm zmTWe%^6AMRrH@s{QOM@e!_r4Nk-)MvBpE2hE+5d+B#oxUNp@!XCEjjsZfMjK!A{Bg zTN1f1wD-K$5v(kx;YLDAYf7_3)&*{CM8QC5@_{9mX|XsDh-7_?-R!}gyJlaSUV$X;03 zRxTPQmlnzMq5)E~2#0C0xT3-lsx4Lm0z#44l60Rm;&YTj2r^Tgt)el7y6D)yc9*fk zn`89|(1^-?(;IsG1wZZO_E|sWrFQA<(Te|f_2WPGhrOYF<*)z#?e~A}d)n{#ALzf{_+KHn52tAU7+zrF1cI^K}i#NY{nUra`m5{RS7SVcG7Ke;9 z^Qg|ANui`kt>$L3j>U~&qV8L2^|tx&2f#EDuUD=1p6!Fx(hXKpjFFCv2oG5zBp@t@ zi)?(6F=G&TgeM(Qy#U(~cV7{Rsd2{D?IOgSmyB#ua8Dl>)Fy9hI{H8jqt-BTu&$S_ zph3>71KN6doSTp^8zSWmtr?VLiFeKtJt5Z_#GJ@|V1i!`kD0eILU4Ofw54c?&6N+b z7S4Ap!gC0MrI)(218$As*yhF1c7n)=WFxjfu#pYthiZg2YuFSpf?p^6KBk?WH()!0zGoD$b;a%$I2C;Llr&4lySMw_nb+6*{vh@#6)58p^gad= zHv$>=QwLeZf}np{!}o|_u^O(Kp<+qHSnP(8(?UJ$Mw9NmKATqLurw9ny=)X<$!#zp zEFjlBYNjP1f6y6!aigF{X@K2RA+7K`2j6yOgY`d|t)Z0-egq0xgJ4hOWtas?QKzlo ze;LhH8QbLtj9*Sz;npI zFPNp_F)%}peL^FI7}j`16Ch4zo7E)@&9^CcQWATa8_7<}fmW=0-oDASEMOn$+!wJb3ee;eYt%_9OqzyGNbkpJnmqf8O$tJ@D&(@xxl+C%(D; zrmy(6_7DEqYf~$zjH|h)%fo$k89W_en7eQ~+$j8ekv_C_TUVD%x!&2)hLUqae*b%Z zfFHI8yZh?8cezf8I#LUIL@OU=KH^rlR}U4vplJTFR0Q$r&Q}=7TLPVihU`bKoRTWD z0Tp}R-Am39=~bSZeD1kH?R2&uD+4pXIXJ9J)B5ad?~>oboe|`OzpRODQ<}Z{#kcp- zOue+RwxSJW=Rnlrd6p84YIg$ADqTF~BiI|HV|8_L=_l8+S##gZ&o4Km@Qn!H-cXtJ z(-bT8v#dgX3^DI1M<8OdnF!w}5_~j%cQ*}cIQn>NffVO*0ZFDd ziw<}q_Z9DG#~en4ukZAkUJy7Fd$7x7Y_STmS-%FQw#N-p@R$}rS%Sn_5*%nKv}X)d zK=MA6cFam0_C6I1Ho7LUW{~=v&tc{~GX74iX?Tc-J;FiMoFSg(N>pr6W;fJ{4Fa4wMZ14Pz`^gXfu*wxDe|L8;J6sX> zK%h&kuP(b&pm-Fr6m-&_kvrlS*m=7X{H_R&9!_?9IT?mTR}}1GZh{@bfWLn1B@QN) zkRJ9e#%evW=WYuXQz9%cHe^x6Bn6FVN(yYt^tWIyW+St7rqEz;@UQv^oz-0>VAJqn zLL>Vm+(si{_rJy8)^lHAcDzv>IqRNz1HAwdCcz7tVr=#MKnytUw~x(!A8X6Y;@rYi z?&C!3OvaPZXpjNkMuvDwx_%o{dFRio!cF?LE;zg<`tWlJ{uUS|m)paVeQzb2C&0Xd znVhe)-po;hJ3OUL@41KF89Ol-q|HfHk~%?#I~!UmyepMGYWPr#10yTiGtku<8;8h{ zuaM1W4PQW8U;*OmlG+UD@*+w4xorKQYz`pI93$iavm6np-ZxUrfDE%AB&;6DN=VJ} zf_wM)Cpb@AhF>dpLXdePjC4pM6SZa5`m^5sU&{2)!9cO=kCls*dqqm{Q?j@t)t~vn zSKH)W(xZ90wH4FhYNv@1v>~FCw{eYs<^!Al7yqo6+xK}>f7B`dv8MjBkG(cBpY=(v zv`_x=FSXzPhu+n``Y(O^2rXiykAlNoM;|C?Za6)kTvYO@Cj(-5MTpigt6KC!l6L3E0Rhl^@h6Uzn$v*hu!h; zcG!l|5AWdPkyOeqY!qVD$(5<+V5h{?C$l`s=NnpXa<0Yyf*KbMZ?XSlYPR}bq41jSKA_W9&eQnZ2isY{5?=Pmj#kQe*kUJ@%39euYw|6i z1g^9i$lGc4o96<|C37272PMCrvWXZcGjb-(WnvHNb&9$NR!Zf7blN z_d5+GaShFx{Z6)W>$>^_u!~i`*&E6iFD!q%;z~DMy@BO9gaIf||;e+ zA{$%b>1A+|1ieaxEHQV)&LnmX7b4Js&&x4^Cx|(eP?0WdN`vkN#Dm{X2!C2OnKdLV ze~yynPHgd20=ojdyVU{RiDNAikarf0?iR}6-3IQ0D0Ny z3gsbpKqWJ)y@_lY(P>z(Oapb6BsIJsBlc-c-{xf2PS*Yh36ONIiJ&4y2!J!9SwRUH z-jN{iX^QJT^Y@jhuLbX7(IyfHmhpRBkn{A8q4O22I~o*X{Pay_K^}pWJ%og77-?l4 zdPl%|k$e?Rh|t;t3zR*Y)OccH^l>RmxONmX&`Gf$h}&|BQkt5ULTHv8h@!^mq^*B! z;@{aqKvu@o{f#BJKav#h*X!hyS1#+VB3aKdk-nzxdwvC4cx`?H%9#dI~t{WEA7igpQ_c zu!l_2sUFRH1lH_D@9HS{P}OxDI=zQ&weQ)@wQoDjPqu9oh>k%-3$q58RF<0Q{Z(8n zEwd%(&Z~(~9|t@`v}#!+X-SZccY+xoK`!ByAHE%{=h35sX(Fs@?(o@{Avsf@`fYOE z8S@RpA3s~^28%s=**9|1RPxG*prr^CiUCe{qGlWL{xL)-Ndb!%%g~CkCsu-PJ4uLd=&eDq3?9t?%ZNwFX{NeZ^*`a6VqvoAH+_KSjS+|pu z%+^&V^Pon4$}&1_or*v0u2&wwaz4o_{LwUnQuA*MUjvd4+7DK<08UdEmfWHea3s+s zKo-t77X+ys|4-YEW6?tXC|NZ{jE_8*)8j}BQR zYwIT|S7Lojn$^wat7p0``EHkXb=sk3f4Y=Vg>$VrYD9!HWeNJ0g&9vW&OyuZN0>c{ zPb#xw?agfx4`a-0CF%($ysdi*;fa4D1%nI^khDO1v(ZVy!A9n+iymXe{cwN0-UF)9 ztn|{WRBPcNa~5CqGir!Dz5zgL=p?)VFyu9Nl;qc2W(o5_w@cJ)BKundfAPObv;+-bdTvOt@1&`|%pHOX+;ix>^c!wqO+`WQI2y z*4#-783;q(2M3?s3gnS7Z^d7o$fuA*8sh>CVcr4TKj*x9U$xra!;5^UX`k}48UCk} zx`X%ii)k0)4bhgIK|2}ckV{_+w^>R8Np;R(_D!;@pUba>Bf7K6nn*@!Vt^G2K*EGV zq!p~Mzt59*^~6u$c)hZ;lePx#uD6_dpYBWgq8+(hGrg|!w2ZI}c738m*u~N$Mly_y z^46a#YK>uzRDgq(89^L91vDg#zoFd-I$X&Ok(U+$(`03TBdTfh4118AeWCBNXt=>GTc&9v9g^08Ll2bfKYH3B*y|B+4pmIt{1mwx)2+E4x17eDYH?RzQY|1=-- zgFpI(_B(&=hqgcSSH83T*5Ch*_O0*Isd+S`B=-#AV5*dv0r#$8^x#^!w*iIr`(fx~ zWmHE|?BVCI@4+3)KGtTwhSzjr9?BJW?n2t@RZHJx zkln;90GoGD^aH65BeCnQjNpD0{H_t<*#t>}vf^dRAdc`f(J=u8Q5WU5M6*3(5@5Vg zA^!q4)@W@8+TcysuQ{RqkVUWNE8(B0aNro={K{s~)n7$q|d)jCG5cN-ivRaC$p2|S=BNMrFSWOR%p2R6{jqnqull<8G~Da3Lk<#=j_KbKfT>w)?r&j@ z^q%3c1?scWUVSHo;uu%d;QCR7j=Tce!|K@UTah4#j zSd)0{u2^=14XsH9C&i7?z84_?lw*)n1lw{<7Lqq#JRFNtPmjj)E+559K4Y;wpO<|IDheZu#7UH`iLd3QDMgVLS z?Ry3_UkakfyXG_bnkfmw^oUjfG6;Z}P22b6LO}$+37e)#;uvIhKub2mO8y0DXoD#l zdir^FAlSAUxQuC?e?CSU7;fh&zDrhWX&L^s44~o!%)DZ_)B$<1n`LLyO#%T5uY!f~ zU6lbQ?e~eta!*kA$<&A3CDsDJEj|^+17ThBWB~@SxBGGY-w$WDjpd1$nygbwqazim z)8f?!G51@RNZ8l0q%ZzCCN%}K=&9&$1A5fHq;)PK5pQmW1T#TUv|4kLQ`vK^b}dLv z0DRJrayW5xZY!yL)orXjG82$vfhod(h>J(G=T4g1D@KIEsF8Lky)U}JAo4X!s~bi? zyT$A->pL#QhkvlN&;RrfYCrj7-tYkx@c%zR{!jC9|Hen%wJ-iJ-qODA>)+SD=&Rn@ zzWE*ZVbRs?ekYH7&8Zzm=DQa0-YAK2VAbH2+Bl(MT!MiTq~T?68hYaI_cG92o5wpH z!1vaDlJqt>0upzm$@b4enGs@fyVX*?Ssb+O+~aHCw^b&%BvUY7+!`!Coc6-ZMm^-F zwUxJgKmD8Mf^q0)@$d%YP{`2`0Z#bi?!%tNPEAJL;WOLb z2A_?7&J4jLo5zVvYtf_}T5#lS!bi$li2a1g!=0~2e`igG#|ZP_I=T5}QMeHI!tRYp z777d$A&9nj{8Mnj(#0NLrtpYtwJPnTF+j0rB?BLcRb5*JBqefI?R#9N17c?*0ya=y z7uI|NVYfY*S^0U}k7CR)SefJz&yzD3Qz_qHc+$6rSr>jw>C(Ek<^9( zuU^K$aT$%p6-C(TZCj3OjeH6gJlpE9PmXRW3t>FVTXBTzL~dRCh{~{|?mkT)por3I z>-&_eay(jIk6P%>U&AF70`^xq`g*EbIU zg4-GkcvX_qD;WtuO>-?1`8_$_8q;6KiYIKCd8(pS0IA~gj~E1c4;Ndi4f3%;M}W5wm|<|pjWDe?r*K(;({{Gc z$u0%GST61zbk9E9_4_Ayzen-M(3)$tr(VQcr4^XQWG%>{OrY%K&Yl2@%x`2uk7ZV; zJo1bPof`0P#I3X`j`Gn-0EI8XQYbmk46GCj*Y9ucu7wnQ;%fs{=VO>5%g6ulH?%K& zfcrn{LoeTJrv88SO-H->uYLICyA|?(sQ=HK_O_E-MycTPC< zQRD^`>+h$f`;A<82)jYJN!jsSh5?Oib}uW9ed5o{wm3UvJfLbpV{~5$vA_9YW|Fe$ z;<1R-=EvtkCO#O1NIhwS?fHnKy&&06e&qc4r#63 z&Zx~FWA=ty2E$HY2qza-t^m%>{HE{8cEYz_Ve(i`Db#twKQl@)4uQ0q`h~21A(%f) zg^?aq*(#wjPKkRj`T?sTWfRC0=wpfmkoLIl_g2Ic?n*&Xt-ga5ihFL4%>1W^DfHNk zfsJ_CLG~ln(4i|g1wiLWWF%^g{Uqj;cD)WC^&!3eicf!Y`-C6$;s;#7pLg;9jt2w2 zFaI;|ZC~+q-?1NHKlc+~X+Qs`zw}UKzk4D7r}>zV{)oHwKmMw>w7>8TueLAx%5Q7m z_$`~?<%rSvdy5{y}=PpDhh| zu00o8iIp`kx=-@qR1iN)3|iT&$5$mJ^>b@nBh5|IQ7^;T@!gIyyL$lCVMwH>4u-vP zP+jv?qAr!5{Ce47N{FXm@>EG-J}NR5s>%z~md|!+(zer>Wws{{o`z5q@C7Tfpcw%z z%~WoX@3TdE>q$>}mdJ-y>T#C6`E7Vk(wltfOCeun&!Vgy8nVCsX@dexo$zY2(I+FG z90&aWlJ_RymZnvC=vv>uyQ-^tZe&!5fTA?EMx2c@i9|tc85Gf&INT^P&coGvqlwo% z>XS!|F`^KaI3OwtD2R%nQEs`o4X-kglrJ zrnDbw*yo%*{QtMsde=KxP!JaUbp3a5f2APX6M%!vT3I{V0%JJ&#J@_PFi_YnKHXB3 z%u-UaC9+zJj`NUWGhWHo2i&>wod*d(T1VyUKuCm`&D9HfpK5K`nyt& zS&oQffUJu)>9svqPVhHo$m2fRoBK(T16a%IN})DC1*O`p7T7_bxo1nao@#5xN}}>< z@i#(ljNbOpA+?6)WzwJ57(;LvU~dS9`fi3qMPT>uB{=FzgJE)a)fETZU^j8fduS0~ zA33*TU)Xclt*_MvEp3_IG6T#H>X_vSY|gJ6QmLPK)#H{0t0!H;Fk|Eoay z6C^?DNYJ$XMJSM!@;Ar576)g*l+u-${bQ`eVLPFmg*jNFor~fx)WK;M+$8BUt_7Jly^M zZ*QFGTmI|K^zh$0Mql?iC+LCqEk~9UpucvF*Oxx&GJ3*RI{3XmeG~o0AKmKQ7`rXd zP=j5niwIv;qaZhpnp(k{fn*iejmB^^OBD8bVT0@|mczi$(6BA?uOyS=20;Ndk z>U+@ky1b$f3T92gy;I;$WSHZ{yzW<2t8~#}sznbIyvCxd)o;jODFFkmgbsD9;Sotr zB`iSID@%f7Ufp;Ut~cw>L*Vc|SqLWZVrIWJrPkKP*hq%cuQvq_^<#hz%XqyFEep7d zHuEM_W@s@NNp|(18N-1|VghZslhr&+Bpybxb)?o~q9Jk(cK>ary*7ffAP;Y!Jw?6hV1M|20B-1Sxeg@yNbLJfNEReVBhl`6w6+irHV30D zHWMqRKB!E27CI9Zemf;Jm|p9}x_g8YBw_wJw{eDNvzyPFP-CbgKr7@4hv>rR=9*Tz%qaoaJ|QuJp5}fCxIvZ{ z&SGjMSvcW_w*SCPX;64;#|`7Q-gX(DfYdI?^lDRJB$6Lh zzo{|fUfSViPL05A7~N--h<+s#QbYq*1lBQP&V@KppumvM69Q1v5ArMkc3zdr_(<)3 zn;Z;Sz-S)v*pI%L{`HeDqkCRC-EF4+H^2RWp83Q zIjOY5bJf2q4MAu?dn?+NHR`sH@YVaH3|6C+V#IKv*z98w)V(*WOOpj~t#E%0Eax0T z%B3qW_#z$oO=z5&>b zXplgVRKyTufCLc{2|JCthtMZzVK2TTsT^Of3=;81xPjd;9QE-chr`H{I0^ckXOW12 zgd4&wkX0rqtq1HS%J`_a9Ok)yNxxICik^uG+|$rJn+67`ufkkfnVJj9D#u~LaRw9$aaaEgT_6hOze_82^zWY{s(my#y z|MCgPwh4wuv-smQ`^lFJ(N{# zg(gL#a35?~1iTGqh?>rvhP*l!?%DY|6mJls$TB|>2(=XsBmz%)64adpOTUU1wM;QE z2hAlo?(D_a+lggK_$eI{5hOu&SLtvmdLHBpcED!Fz`YHlHB$7!I;m1Sfh99RxW}{pYRtCkIxO19~Qa zz7OaaDUDIBy4<;SK$l%S(U&~&vaNsrCARZD>X85Lp)dKZTj{^N^j5n5mfD=iIAniQ zBS}qqeYVkVLWGII+9h~9tZ(j%fBQ83#vdQh|M3~e=rccIb5E-$LOcN z&FCZ&eLde`IBZ*>_xDro(Y`As;iGq zgg)B!q}#e@y_@7t!m;41r+;PB^Dkygjor_n-cd-uim$CXanjrou$eXixe>Dr7*-xx zVu<#@luVb(FclS?CxwlZFk#`Bebz4=t)7JfnXhPLXhC=5wRcb`a9ll@46qWr=|O{> ziuo3EVyeb{zdi8~03)HegaLU^#BISHmU2}?iWNi3m0vX0or~}I_$+)4a!MQ)Lbcn} zoiLkK>|pvfcCajIVH}`BNI=I}x3jVdgC6d;d0?_K3@sbc6ACDM5)VED*9 zvU^64Yj9f3gd@7sJSE?~oJ%60?1@P*DA!oF?EAWQ=+Erj>BoQkCG@YJd<9*7dAZw6 z{cm{70e$ZaZlX8-T`7?LW z%YNs8zV@?^(L?_cANjSww0%E5|I<#=KmGXQ^!?lS>X%=0D=_FeG|$c%P}shmjUwRM z>GuX#-OD!uAN!g>l&LOi4=c?a$D`9%xuM1lulMn?`!8&Fd{ z@G|n%2+Pss zHoEiafhA5lBzN?xxQ~XEI!V#L`y>;YLx5AWb9nd2ve^+jZbINjMPY zkRg$kyM3Bqha>=SK##xuHLW}Sn6u?j*FGC1bp0cM`|-k?>Utmr$?E8-h>Yl!{p1hk z6z4n=SoVVrv-$tKu6Sy@yxsqQ=>3mv!)LCdYae{gBvOksjI{_HVG3oW0=M3UV67g-BBV!_-AjM=^5X98$IFUE}}1e;ze}j zrAL1)aE~hrecP8_Nl#kV0yohAdfUN5#KQxvK%%GKD66Sd+pEhup|5g0AUG>8rn*@V zE7ZTBFW@q_`}f6=ip{X420(NBiOt@;sx2;qUxmWnQ**hSn|}ec@QtKa4i8iZrg?Z| zCMp5@J=pNH$!1OKqm=qLX8Uv4g|Dx7H;En~^q*YN=LYFJXJ?(#auF?o3*=-!4aJ!N zWzK;+m0ZD4%)W>de}Dto*bri9CQ2y0F)bE_Np-KePkh}AVj*aZ)EbFo#heL)N;)*M zB7?1S`wTX2i5WHa-4vY+@-bYZ8o@5@h9t80P2wRKq=RITm}kr(Y0001b-*G+Qex&9 zU^lx;^jrsC67^5_O1aqya9|xs1i`~tFIIa$Wc<2xm!;hdqmU=dD_h50fU1d*B1Ez{C$Q z#MGwDd!6oH_In5P8-H>@U%KT6T=z*6a0iaAV&EelauNOb|8q}z(SN&ji5+UoO`6M1nJASSunO&6-uG;hY75h*k6y^&Ltz{2#P zF<^;A^o}RMo*YPE?>?(X0=WW2i1vQInJ*w3os5H9yWcm;+-8bImWl;kB9TN*Rw2OtG~?^o(uszv9wzx0(9?bgR+--WS|V zZ+hE-F=W?iV7=Sz^Jg|R4Mh!hmvh95DxpzG+EW{sz@0BE+%>y<{pM|2@AtguH2vah zCi?29Z0N%ueDv1>JATJ!KlbDjH1zDBy_tUg)u)!GaH9D7FcnU<{YxRJVpDyEH3_#b zuB=74xDr53cen&svDpx~##k?~7S$YsW$#^}DG^KMlZAM=ouW(QGl(|9^FnCDHRR06 z4^JW-jvMKUK}1%3G|xaRuRd-nOE33Rb03!e{MNG`rZs&Y+yau+-d7-Ux5_B=g*%e9 zx;W}EQ^4EAIb9{LF2e6!<)972M)J;GA~!=Mp%-AMuJ@4OyTwD-KOJ<{J7VA1<$-w& zN|YFgWSl(ke<{>RfF^$mQa-j9ADPyXZJ4u-Yo~J@GyY=-=+YVO4vV!AY&!cfy9}O_ z?vvs_^}Yqs3#%(=%MCHdH+nVkX_?&=yUH1-rwR~R&E5lz&D(Uj1=0j7rCLNCNo5HOWmt-YMW4-0=c&>Q3a(b3p>YOGKN+(uF87 zeb|GJ)7O38)%4I0Ja(5A@N-@K-+g1HXT9hadc_~!z8-?bY_-jHZX3m>#0dYRW4zzbG2`J)e>KyWKWnB>fA~btxNbxDxSWslT449<%1fF4uP?rw zu6xwhMCd1Oq&K|vbU5E8=^vJD-!L9IG4&27IA-XY5IH4hxNpJmEl zZ9+>engqzACD}bWIU4`^MpJUNVx0*g(mZ@7zhNqKGUMNCY6Eg@7N0j;I z+uD;&x>%a8|8ny2Dkq#;sT1KtXxtFt+sKy~GM87g<7-D%7sZNqg`AWMMnK&VDkIdy z&*FWkYc{5v*-_mY2G>G;f?-X=FB3($Ulks$@xUydjbdK4BM``52#C@ISveM$igG(h zB8r_g8&kV9cBJRG2&CM~*rkRf7+_XPkp1vw2sAm|1!k%tj5OH>x2r~7{;0Z7Heo@o zy&Z8K*!r?KfvCVm6h2TzIxO)kAq-j0VA8cD3zA;TA7mp6ZK+Q__8$Z8ft-a?lL$EQ zNnG%hbL<2p9Hlt1(IL9}vO-_}l&k3ppVY(sM-}p)w;$XKe*HH3ufKGPZoOSh+NbfN zrJ-b1&1;HsNLG%66)09GP7Y>HGxtt#xGI?H9{=%9BIVca?wQOmk1* zkg5~!sJ9_$KDu$omyzmpRPysvu)9Z2!ob8nYDEK0aN;D5LO zH#-KSgr2J8zeM`063uncc2i$(*=L^9WnPix%4c3-MI5Hx+!ihZ9U-N8Jckb<)E_=K zkUL>GQf0rOSfamyB#Y4)pX;lh0v<)m3}#?@R6555K)CkI*>`s{ZeRRU9(4u%%Pri0 z*~xOZnfhP*KhMyA+`|2D`I`e{|E>tsda`)NIGcHq{EyMS!t75fyqS* z2aT{0?4t#XO=dm&B&?*WQ>QEaz%QJpU;e#`zUs*nJ^Vw;k(CM}ulKq~ouEg5%*FJa z7v4-S{LNETXX&q9Kzf-a63d#@%n8ow)4pZ)+y0-|pe~NQB@$QN%qrWe>q=*LzHVB^ zKy5>l0G27HNMJ(ueTQOUuic6+l5=a={m;#5Pbcu&xJ$(l&>E^lt{P%!QGs}21`moF zk^Vvkx-*MI)i^g$nR>@F?f=d$>}^F8wd_rG!*cUzVN ziQBZ-mU6n2FTlrWJ6Yy1$6N6?l9e%nBiz6Iu1Fxk$(}V55h4fuYbn9ogXu5+rqWmc zV5P@={-CAJBy$HSm@XBXN;VrHCMay$hF26O* zQ9@>Jf=%AFN}%hSx6;naU2!}xBO38oSwj&3M&EwzLCbotNzb>cwaT6$r5a>EtKDo% zOZttrq<9g9>|>R8BWJ^p494G1a^HberNMl|gHeeQGo` zDzPBXp{{Spoa3ODg1@=^Q>u74a3&~@8lp(ru*0R1`U-nzC1L819hvL} zw7~jNBzZeBm^8^)LnjU$>olJcU)%-HDXhub2BD<%ICsB_k|ei3^d6UQ=&L^GYI@vO z*MBYw|G9wt&m0K-^sn7UKlaO~==ResLX=gir=JJv^j&uAg`Y#9ithbY(py^-SP&QE zC|}icmO;Xc92PajLc{v$?7;YC)by|6dtJ!0J=YZ>661-@07l3@50(b)ZAeDi&;4YE z92ty>Q9<(v-_)}OBpJ12xf};e*~(}kEZyX-sFkMdF{%=@*sG2oFPkhDu#F0i)K zsB>Ed)aWZvfrL@uI;cc<>U&=)PFXB9Emu7ru`*f;GiZv(YJZeDYR8RH%yZ~Csk08I z&Py@o3*<$b*`boh?y_~tev_P^`G38ZF4|rLPyf^_=nJ2C1BaYyQXSh28)5 zznfQh*!CE!R@_tTIILlq*$k(og~uSDLxX2l2f$WPbaj=85G4_oA|F)(*(j@L77h-2 zbb||{z%_sSX`$!5>Y$=meaSO53LI;fF7SEWD&12PJp4wmN93hzOaE9(Aw zwI^nnN~_!GvKAF?1iW=HnxuwC0m*|Q1WeBX^(`QfMFb_7d&Ov^ufS}++I52gQc`13 za_~cVTgdqh`-F_`9kpw8qLtXlP-mR^FN5qG2|frlp5ZYI-+#)_f^Fb8Xy@?8hTxsH6&5q@|8E_j)iF_@>JYQb6yzdy|Xw z4M=J@hJMM#4=44HDB`V8F-3qA|49A0t4lH@SteFOM!&?gD6l2A;G7`=K?a*AU%Z!E z!TbZCgmh9yJ75RhnOZ0_fyaB8#@jxz5~u}|(F+(1IpizB=qX$Npw4t%-Hczi^AFB# z1Mtz;oS<)b`qlK0?z_3m3;4Mz{(t?hO5eAYp#9eC?r4R-0BZ^4xUS=~G`C_afYPQk zHWMeLRLxBfu6KZd(G!ND*fA|=z}4%W0~r|d+XtyQK_ZOT>)W=k`|Ez_G(F;BTcl>& z2;BD`7q$-N`dV!&R%Id zU}|AMjtnR)e9(p>5ntn2N~qutSe9mC-VHhumx68(dVL}BTR0Z~3bkt{wspt!VUPXR zr)>Y_S{@(-H8U3}!U_e}G$wW7xZxK_23!w0Ckn9^PrfO&mnrXdt<`XE%|Y~1g<<$QvPoMp^=7Q5|2 zqRurlkT$y&K)@p$Zz#C;Zx`%+t}gVc51-CS@&DitI8IN0++}p-W#w)G`QLs<=*NHM zR{FN*-n8A3&kdgSxaU>w&C9(}lwIG(yCsaqVxd>GfX(=a!m4dN|M>QIR(k1cW}3IQ1`qqd?V&XBk>mv6W3SrUL_gt^ zPS6AIchNR&@id*ft%jsEg7qRNhd+g|C-X{)@06XL;BacIIEpE7MHg+R2BF|dpl4gr zlML31+!P0^fAH{hZX*#Hub;yPfpYS`2#o8tN--&)%vt)`K1;4(oW+^Cx6!T!eXD> za!|7uQVib;tP9wYX3i4ccZS?C7JCjwI~Q@i?=7Vc8c^BOtm1dp?|!iT!ax4=O0Rsa zY_Acf2i%*FT=5@0?m-{0p{G3hlI4VW{ael~AwFH~s_4NSomL}h9Hf~P-%o~SLQ-x6 zrlnd+ogVI@O(Pi}V2!t}@dj>f1lx4)*#nhf1Y$h!qVpaj3ZN(gtbTQ(mTrdj$oZui z&<0n6Z(pk|5{6ORuQRac)0xzV;MOKnC0keOH!7gmFcYoz-1UO4>@;c|SSh*u^{zRw z0oLzB4A~pz@xSJENcid)YtM|sIef2yJI?rGZYWPvmP`+O%)i+p0OeXNV)!wa^kQnd z6lyo=!+$c?j0@D1QH5LJYJHPyn1rT~n_REeNQh{cB`8C)?1Fcn& zeW`*BD}1qC5~1x%vQecZ=ktl5M?BMTaO8iSL*wPs!zAfI=030@HYc(8Xa6PdW;IKm zZ1*g860vyiZ3FPQbJPIb9g6?k-Z|5^{piix$^X>WIZqng&+UEmJ#A@!o=frTr#ZkW zT2;~qC$`$buoMWj7+kI>UybWK4%rxzQ!Y^+%IvIvZ3^zB_#={tzi!@6(!c)4mHy{n zZnGJ-0Yg_@!WR_sKbyyHw%ewUdDt;}+{c}uzuKxD{=dIH@Y^bdm$LW-OyInzs{*|S zIK(zb;r>axth@mRgdlz@a%U7YHJj4-=5}385BrpV`;_gUuZ?PX4j*^f(^c>x z)(ni@s$P$?7j-JJ*kiH5I8yvCa!Q;P%7V>_5W4DDaOlD{0|W7WO~3TeeNWflc~~zAO;F!iP$|ZwtL$;otQEwT1bVbd9Jc zT>ox@u3DJ82DQS4G(m$`x_&SpL=0vyY$zaRgwfu~L&oR>A$;rpqi=hc&`W=JraSIn zy5EwGcS%41d~k&73;=aVPDG( zU^`zKIU=p;H&UntoT)iaaeG@`DsZ*6ZfxW`%~SAB?RUeRcHW$(;A*lqMX{XW&)s!b z8OtGu>qsbu@{A{c4<%B9xhLL=sbOaJduoQ_o??}px?vEyH{Zq3aI#{K-WYmj79a(# z2#wf1?ZuoEX6_3m^?~W?1m8(eO1l=9P&DYk7n$+HK4pslaJjZZ5n?2OrD=}SB=0a+ z`meen3$f>CtA-iFV)7JPp-}5oZ%skbrh#qEfa?a@=K|b5O?Aq|Y=j~aY`N2pO47|x z)cI}@otzle$dZppKKIrtvL7+fHA8@&K+Eq&F_?KA%_>Ai_lE-a+5|gE!Leyz$K9>c^_-m({h8^88s7lX<1xa{@z$!KB+K z^t!js^sB!wbk8e@9(Z3q5^8`ud+a~D-$YM-^hvsC%Vl`upKm|&Ij+L;!CfJFbs`39 zZNJ-G`iTt!83Ly};U((1t&Vowk=;Rm06RuKN@j~|_dp#nGoxa5vm#?nxJU_c?YQUT z0d3BLz|1|B;f!6UK}*@|#NrOs+c{_XF#4WWXVZ6Q5u2nEC9MU}6@o@XM%*`8e+u%o z0o}<6hd*yJV(tWM1uXhCwN{}86SNU#`}}Y)<4*VAPh)D*XQX0Sscaj7Z+Xi0J6?;$ zx)CB{CXK{{BTwF(H!d1{z`nodGzG9w#}uv!;@7YzDRFYe=fi`ZHE{FTq0Z&YDee^nso0dOGcJw`8o&Wm}t>_dyp)J=hVm5V*$HNgKd z5QYwO=(Yd7&(+g8;{Y7B;{TU_J=3@T@J;lSzqYmTy~B&9>h~x8{7akKo5SDo9+ws% z!>;MaDQs2;#s>Y8g`1R^r;#o07(PdVdm)w^n1}?(Ms74?iEOYU7;|@=>{|epM!t_= z>RrB2w|_jfMNfYHPbGa*Q= z?~lX?eagcTI6DPaGbKRAP8}}{f2Syb207uzy^-6Bp!#5H3Iz%VMtJ%Kb0~}pPlUfL zb&Ft!7!jOw=WiK&W&bGK8fJlWr~ntsR=SD*#7W-G)+mduOZ22HU4J zG|C=+1EB>suRnLvv{J?Rq$3gR%IRCf8#P z^kLZZx0^uO;QiFEMn0={+0O+&ocLqY1n>vY&2d1q!Yq2j)-;(e^^g*#5wU}UCGuAa zjUg`S2ttnX?Fd?bbpz2$f2Yzdr?zT=2NgQDxv-G`**x~LEr;Q8+oZv3AAF4d=U<#z zBZqOP+YGuiQdk;aL(xG7(w8#qi{8u71Q`4;hEF$y)v;V=A8FRcqJVOTLm@=@4i<0; zAU&sv#+m+g4-wB;3<6c6aSbZhVIf3fI;Pu+9Aa>TnHLVH*=ktreo+!zv0Y$y!Zkiz z;sAsh3Egwk{e|_QfKig(!v)N|Fm*8ABaI&>7zIDJ>K~=LY83he^}O2qxkY|Ho_o85rDiZsL(|85(k7A(`Ui)IhO#z zfXy#>Dbpapp-(o1w5P#RiYb|@W5be0Z6^cv(yOeri2Jb=@@>T%+7uoS`7*d@{545H zPvlU=qa>Pw!(8`WH~^b}u>1aBe$DOlOLzf$eTa*$Bu#96%#BCOLxYWT$}K?V3dDG$53rF?Ygt{LDkWVhiI{cb3aV~rb-7oC{q-ivB2n* z>Ea9$;o81a4XDU+%@$66`D{m~t;VSLP3!qa)zB-Ir|RT~@#PelVq$T>Sic!~7hyfX zG}zKNVrL8M@^viQWaK*%|82?lYerx>W&e zFT`u>AnXTq|H5%s5jQqXkJ?;mOopd=$Fh$e4nZ~*qA&$K#c}6?Ow#lpRW#fHkg2~JvI#FX1d_U~dS_%2U2oLL zjmT(8_X;HC3p5CFGDwr@zE_=_2H-+N{%?BQ0sWh2Ur#@`4UW0(4&9A{w2M(1#YW6R zdtW9_{uvPP0+5jBuXCH?FkzEJTrV1e6v@r5U!D~*ItchQ3w&v0A#XqkH2;CLWnLc; zhQj;cQi+8>t;m+*zZ`5J+ig?uZCjh<-+FzeKl)!n54k^gk;6x+_**vn_E7rAA98H* z5BS?{*27=?)d8$oaLLG^(~fsqfhGX?1lS0AJT!;(3N!2!O-_hGQsleV))46ZYZ~`< zz7^Z56Z~)T7%;R!jIGarV-^}shW@G@x}=VcxCyy1)_9qJ!ZOnzXE4G z;~2eU65`DX;ZDRU)_cR`nPR>G6^OYdNvMNE1}iZ=t$Y9hs0k#foQXZ_lbhKMq_i2F zVD-EV6c2sOb_Kxe3P6&3+dh^*SMCW2LiR&e7^+3!d{-32fq~IM(h#@ig~A$OhmR@Uybj#fmMr=}cPsWQ{`Bz-zAw$r@0SsCQiODZc`a zCBU`9>_jWbux6-Wrd7p#6%Y;1YqkP`sbj^r~NE7YEve`|dMcQ^9VAr^)2+szGu zNyrT4WI3D-74{kRPK>{UQ;DBZ^?T;p-2Wdk{1A>co6m1lek0;WwRW2|E>s$ZK$Q<>h)b#9uhVw!8HuI zKiePpzuqqNvaM|J(rt15;1B4Hwa!P7(|h~)``v3*3tV<$qW|&c({%a_+9;PEIA`|> zC=#2*f{PpmyJ&6!Kjh7)IZkRZ!uLJE{#xXlDqzV9i1xnupb#jWhDflQMR_MG;Mm$J z_QA;&$=tG!<(^z%l^d}>)oR0<-7D>VoClpUdhhX`03nvJ+V4IGbmw!Wi{o<@h=;b` zBY}H%z4vj=XHr9`>^mc&Nmcrc>YmNQUDW_w z$f^GgTgSI=diJ~N#jid^cO1A|SAV6nf~C7L=S%dLifD#!b1LM^J}*j`0x+Dh@SY!lXU%!mHzzgXY%O; z4smR5fWG@@TgTXSgtAhG0CtuJPqT&ZPYV95wVQ)El&Q);Qv57D_5TKO-8k^~Ws_HBeQ3RiLjgG(e;xy9(YOfZovtzhhPa zV!`C9jfMc={WJ~jeHp@#qBk?l^cIRW%Ncu%R+s{^$gx<1rcS=ZghcX^S>h@QeB(`eYofjGG z@_|M#5dXOb_`!Y-6R-x5gE4jkqJ#bd9J+7;;y~TACJFuqGBo-(nIWZ(g-{>=OYFoI zBdMUqIbFQkecu%gz=bOQH{4w5KmN=O^dEleJ@l^YYxqnUT*V9lUze&4!=&#MKZ@TO zButU~7gtNJ1c+;gnYr^C&&nFcbg=|6)vV!$U=u<2bu{mR-Dzb>psoM8fUkf6^e@9* zWm>JFzbLx1vTr|I?sWQ+r8&vrc^$y6QyOil%s#x6XI!;5k7+mt5apSYt1 zy~AIo1W%$^4^1kI`)%0zEDVJld=1o8hhh67 z>^V2QhXZG%b9^7$x$1WF1pFLI!9Km@sxo&!llPP;Nqc^2h~XOHte?F=WIY>J5o(|s z^lA4{ITn!GX+75$xjP7IBlgWUJ+|UrT_RXjPhSZV#X#Z##Zt*;l{{w~R{}G8F1e_y zVAbr$RdoQ19V@jJT(E*-VX#IBSDtmmY!{Z|s?s2dAZ(5&`N)@+C&IpaRj7xChqPw|sum7k>h7g8pnt9Yg2J^xe;Y58ZfMwao4;mZFrvw!ZGj?luBf+I?C}2pwM4`)qgJgW(d( zKAWZZTrh>q31JN`l-})ch2K|rm?^>Ib4Lz6lT?Z`pV_hvK*R?=< zbLZx!G>h#mw1^AX{*Lzdp&1aA^-1CjNZ3yraYA&^_o}6dg-QtIFtzT7w1eZ3IP>0< z{5TvcA}E`Yy$hp@$)61M;tjZRwlW2}o6RPIZQ8cnB#!Akvk~|RYA;4y;>-!WM1vJ<2WFnIU7Vrj{wOLl8@hsW8#=hs9-Zs-${HK{7_puv##&w0> z?+QNe`~JVr*H+kPS2P+ylbhh<;RVnmnx%RC^CC&B-JM&_iO@>Bcr>vk{8>|0(pRtX z)Ca&WDP}3`kC{|nDrk4C#ofcFj3_5GAP3gACacz1C}(66Hj}W)X^$y{ABxb}|;GZgQl7mQtlpWw2+WX4Ftx zm8+61aDir)@!p=37XtD>*cOqWedW#c z!!Nm>Zn+&gDUMzdMa`Ae0Zkgigey!?P2#iNAsp%zfpZW$0pGx;1H9?mb)d#Vnm(r_PviEWycecT(a3Em%Bo$K-0&qGulUc` zLNM(Ldg)EJ@VYG!Q9e<-W*Zw&6)c{S;S-g5k?b0&9XH@re@gTvkKfQ!A2rctx-gLc z*?c_)H0ft=NUgcefsqenf^dU?XK3VVXvC!XNK{+T>3T=Wb0Qp3yGCkaDHh-(QiJi@ zGLf^!2d_zj)u!5FQz`;Hvo*eoGOokuJaqXhcD_vF>mbM{Yz={=bW6YP3z$^x&dUR^ zHOB$24qyQ`RSH-KXX!Vrjam8t*SE*GbFTRE6hLh|@L^4kF8@LOV z&Kj1NJ$Hfk+NV4Y2f2_Z5Eg(XwQ<24k<4xE?lJZM;TvzKXFl)U^wxKrvFov9$X^6F zzZI^lYPxERZZ*qIHgrYW$gmJ=TVoKw`Ha%fwr<`1-4u|-n(}DZ z_iqXfO?6v#Ks(v)Gmohr8li~~MRmAh1B+e(7ezaR#iF;_()JqSm(~vzg0&pUgYU(Z z&e1(9KXH_&rss((qg+ENhkdnguu)hI4}yZb0`^0UIr}h6n%r{};FG-|q;K7mG@s;N zrc}B$K(f7Ucelx446Fq$t9ZJS$RXA^ohTqLg$BjnWG7Q%Hh53 zh$k|3e;6gN3mwK13&<)+{vu*?fO>IjthC7z*lR_YsYa$@a;G{w8rJzP{(tkXGxU8w z^B#KTYi|W!gg_p+13c~}*_vIH2#Ly$nk>&GN+?}xsDZNPwQ!4@-`BcM2y+8bSxR^P z*`9Rv$XSsd6~L(K(n(q+=DE`$>5iD{$G#7(oYG!KXc~-hGP5-fb6M8_Bhsp(9Gd@u zo$CT)!ro9Q+iN$YvG(WL!oRA=4sU<^mUkS`SN^91dd$N&^c7DzM)$t@=ryMWR)LiT zWR(8CA2jnBYLhg(JZpuymx;PIJ-@GB*M_Ss|26}!Rrmgt!vU3^(~1OCZWvPg{yRiq zJ;N$IQUa_#>#)?W*$KE_x{BVXI*xPws+N5pefbOj{O9L|C` zG-)ztL`tTNL)&&Yxd);cXzwPgLyKi=#ajC8<(fe#Uw6vjYNP`EwNF+MZ`aR5%QhFCi zZ^}7jP2j;%8)dgL+7E#`vcB!ruj`7J7{~o zhA4&g51CJe-M0<7S_+d?FJ#IS5Ka;eoW%>&(`D{oKCBfHEGa3bcQ~v$NKoRek5wRW zKN{P(>cH5b{mMCw5LRnSF3;-lFjS7|{>oz$boyh8?0Q9^^qN+091=qy#PU>D9!3Gr z4n9<%(!Lv`pAC5)1cB&HIPe(k@y&>DE^GIo4R9eh>Dw4o$kGm^wP+RCT~|Sxw|I`V zj8MZ^^znMCsI!L)d~p`6Y?F%G3R@~4?${;9)G_5$v3NMi;9bUP8?790GD6~?U%%pM zT!Jj_7@(ve{!9|Q1*%Pc2~4=N2^olBf#-l&=N`U;UYO|NE^RMr4s*b?9T#kG21?Re zR6}iIByo@kitKeEJl|9Qdu}|SFZ<4S&|BVl#y|B0C(Cg60;ykGY@qOZ3@5MCP$`Wx zDs6?vu)>P_NHG#?^{8M`Q>PZxA`BCV7{Ya6`rm5zWtfT+YQ*q*NhC3ZC7~L9(2t=< zt&tUq#X@Mn1K3?(r8P{4T<_tai8&A?zDRTIHU!VJw9!}JbAId^zYh08teZV231=C}xHB@Rv z008C!T6=NIn`j||;>?a4IvgGK0>#u+k@#2e&f-*z7k0l+v~_?6hz*zmCRa7=+JPql zwTytU8V1j_5_Xa;@S}8<-B4@eO%wqRl?0SU7y^KrI*2K*g=I*S2TEb%T@)@M-A|uO z6&|iFf}c+XQ&OdAv=?1w=y+-fRp?22rJ~+;tdC@1GRD7aZ-98WWS7vKIu~-wQ?W5p z0z_GvhZ^HxniC{`k^IMUjublwURbtHjVJ z9svUyPGrZF*c1-}N%5f+31#@wMVynN5+P;0*LIOtl&1_1b^FW{@$f?L`>(ouqVM|3 zd(+2!=*cx_e8>l33qkWQF!?o3fg;OpDmkEbO3HS&asEs6Zu`pUtA< zZ?)`<3W}B;tXG6Oq)t%;X@vQKV5I|J-q}JUMA-g4uI&mbMIoUM81S9LK~DHVgG|X(Ix-TJLave!2N+KV!Mc)yZhTq39Ks^t z>CDZ7Razj5H#PQirT=*4kY#w_k=EWiQ96>N^lE{ye;UhL>KG+T=H!jZWG%r)EMdK6UhYsIADE^a{vOYDZlu6oQBx_19ksQ(TJm z73w5u_F1#T_v$$7svw7OGa+fhwNm>UZFmpZhlYKG5|hfQj|Ta@s8j#CMW}(Cde1AF zzUrwb>9HTXx!{n0KlgLkBUeg;Ss?b|F^BThNa)6Ocwq{b;W_QAg0b6*7?jq0XtPmZ ze_pLv`SxI)Tsau5ijnU#f>Cn0;{&3Ig#V1-*{OnB7yW`XJ1)ofGy zd8<0X<#RLlgPSAW5-s)E2Y`AfWXnEzm4nQ>5c(Sc3BQWnKZIsK4PDBT_!kEhi#rX;Dlu4N3VP(j zFI)!jLE%6a3VX<-65orz9`|u4>61U={`B0J+(6HN#f>!2y4DzLFKgme2pBJ@Tbud; zsFRvaYHioLA~0KdptAmzsjML$?7kO^m1nI%?z^BCr8eX#8=WxlG}_PP()RZftb~J? z1@(RnBE7f2HvxlPe+ro>q^~E1`gB02tdM_ovZAy`p_7Ux^_g(k3L6 zg+ar!`}fWE)cd?oIZj{r8OQ15aXLa%fBq;WOq-I_83j|IGFc9fuXgjQp9eC|h5J!K zNrGP9i_c@}-*CK9UV!fFHm%hb7V>}YCLzib;3vv@1VMs1OY;9uUusewXuxVtCzNPdfxD5~>?9TX zGJ`1i!h;+}Bso#A1x|>>@F=j5J}Sjuf1TKRv46$WuA(PC;?l+S@AuwtD~TX-`l2+< zRql~kJk={QeHMm4i~?FoQsELt7ff$1vV;}A1gn&;_&ejiSqqCNQ}O0u^Lgru!lrVZax}o;g?JH9xFf#7)Ra8ZGf@#Ie#yXv#J96ZG_SIrzef`D>0L3xbfF;svw8dj?z5rq|N48;Z~oD3^nE}5 z9(wz`4~COjzFJJr-+3Q6YOow!dUfp%)GCRxqzG2?t$>DlVH?+KO$Ht$vqmy64s6AY zpGrG8#iC>#9;bnENj{J;k36Ie1!v6ITvmxl(Nud!LX(i&6&n)Q4i{nW)Qso?5| zYfM~hg`l)TP}8b5zAs`5p}9CTKeum-C-KH6+e*RKG&pqD$iu9(|ILkW5*?D@9PuuO zUAD;h@iRpYJC7hrN=*Z&q?DAiCi%GnqgWHJgpj?Q?1g3Qc88NbCrJtx#`~ zh^~~Bk$|g~%D#d@-LT*AoFIFImy!*1*!Kd{onxbzEtO@km9Qv+^JKO9z9zms>Z4B3 zCtUmf^kZ9z;PYO7Bb`2-ogBrDI2eqWs#vUNf$MtrIUbnL1Fy}bdSi$tReD>iw!^zA zeu2krce*YGsu}n?=|@^ZP7#k-Eoz@CCAj1XtSd&y-oU_YZ?l~Je?=6&One3Ixz1c6 z|Dd${WM}(3gAc&$KYMN~FhL|ve41M|>D0mf$F_-p|Ljvw&=)-ZBD(k@KGIWvh*{Qw zp@sewiW+n=hgG-cnFPHlR;y`hZl9C_a43cQxXYi9dezLLQV5om^flTO%;3owueMiUeunW1Mv|gaLuzKyhhiI$X8vrfEz3up^g(yk$=;nI(wYHH&_;Bc20&8+q z>@)kj5D(s*2=wQ0M2mW?G`5eGA;2}_^z|qNdg@DW4J<>`A0Fy7qe&0@o-rG!geg92 z^a=d+#WKxe;6tw$cl>0I5ZHW7q^RShuo_ z)2`mzG`0&>{PoxIZPEC$CtpEN{NzjNd!Bziz4}jYT?$s!ykr5-a?r{xQ%`jU@vit5 z<%ZM-X~NaNYU9glR8u&l@RemM@btH8zV2eiLc7zfAx`v_k1^ zrQ&Ljvp?lfdbF-Z1O|uoIZX*Q)-_r!P8ignDs#A;VPy#G0JRqvkXDTf|H1Z|JmSNT z(bsO_{`E5T8^fM4JZ;d($wR=J+o%P$>1yXO3q-U{?Z^Z1N)#!h*EeYvW>Ty=IY3X-&!! z4bRLP7~qRm^=nM+fc6$nus3xd;0Y{LZB}LY3Spw~``&W&bW8(E#b)m*x<1 z;`?_$pBZNUW)o{pTMEDjBZPr z$Q|tPI>^dM@kCOy#B_DS2ns)XkpJ2Iy6^iHdgfQ(gI@ExOX$0Q>U#RCcOHOmc!E8c z0Vb`DiCx#vqe)2w5>l1y$_?JH)eoWF17?L1L6onFgd9RF*J-CH+g*?ztL7!r@oiY2 zr<%k_Bt}(=gTRp43L5Om8YCwl^`@HukfCP(Qk6@{L*J(vLIBLf)-k>x0gtrJ^*A`$^vYOvN z9Esrdk`coNcHl5Q?^TOcUllYyOli|Ex&aml5bD_Ekf~l-A~}_*GsVdvK*&#++jCZL zjHz+HYHMgGuubMh+%?aP(1@{}#S+MV9E^=(gf~N;hn~~L90k`E^x6*0h~~B%Rfp_+{&^#)VJ^3;!4lC=m_dE<^%T0b!qCx)#JVyGIn?pl1YrG zFWs>RcfufEPxq!Ujj_abW*$-Rd4I?e!&0Gg4C7(*Jm9^yR6K}SwZm1J(y4JOou9bG zWIy(RB_*vCFg&dLB47oipxkF4?mZmkXixozJ@ykm{9<~+HTR*PdigE%BQLvwZoh-a z{?35)6mt9AaILWpRPN}Y0D#N?Ajql4KoXPvEiP`(^e>H_sH+CgG;s15&S-Nh`ewAF z-EwC63nkW#CW5wRq

5syfX7f*vHm;EXfdu$ZZI#pb9xgO90UhoiE-M+7`HjW=> z`l835pr@ZBSHJU7_%ULe8gUa1rJ|^~bjg4V^sNv(?@we6Qz+L&gsT)aWpz0Gq2u7p z?j3?_h8{Uar2#rO#z4CLs-t*a*_t#3{nX^EUm*c6hhs6UPAW_|ESz#{qHE{O?z=yU z^iH&TB6mg5YU`~pSuHFfq6=keYinnBU*vSVL2gWi+MfFk;-7OYGL7)lJh)sb{Q3eiq zku1gDM6-ugn09*Lt11J1X>2rL7agpe5h~(=;g5I-h0g2Y2FP0e2sz@^uMUHJ*p7dY zVSSW~|GvlV3d+CujLYcLKJg@d-wSS_SN_4N@OcOKN#cMs37Cl#Brt=?!)&bnwIQ4t znsAnO5VTogdC%8%LTzR&`ZG(*6kU;~^*=FvJlmmdEr{+7;pf+6i=C&h<$5cA>z8H< z6xTp;*Iyg6Yh^7tBvc*2LfY zXR&(SquiJi@vK;qW8s`=2NA!mAkO=e<=TWgwdww#!OwoZQD_F7bI_WG%33lm6k}g6 zhjw&F1@b?e$KCttiN50*SJRUoaS1*1`8RBXWzG=CKHta^1+TwEkW@8?zDFx--r;-F zBG093#!)@P#tIkX3Fs*%0((zobHg6lO{+K_IyPyhMtXL*QW_gq+5WlmE1a)|ANBlZ zS_fnwq24vHHhbe0YL*7;R$Dpk)&UQ???hj}-SdCcL#HE?HSxawa?=>hcZf5*8goq+ zue=hvtoRiOi0O9D+yZ^{dQp{A8CdgnnSiDaP`-(hly!&i#8X%%ThS%U4=n9kow*Ot zVUa!5ai4ArT5FRAnXLgxa~7JX)rS@PCOK8_33V?Ok%7!l*9OjW(DRQI!Ln7sH=$RH^7c)r1O0)fG)QKU&HV^TY8Q%OZ@Y~0bnqpaVbfR*xjpPl>KHm8Mdwr z4E~y&kvMvK*8r1vy{zMHX2(d!zffOwUo*s|1iopmTbCr&>*C?Yn^l!VH4cD?YvV;? z0Dwr`MxaJOc%0^k9f4nPF}ji4EaS6+vl8QO1o@xM zV?O$tDlRqG9x_aXq*p1B>>*j^D@70JUtA-T!T}-C$-KqO)5F^+_f)0}q@iZ|hV+ z_GyJ+n?hrMq&jkTd8*3aHZzx?~BRyO+}{Y-a_%fwvB$V7{3pdhKp8-dykP=pB* z8+Vg6yRuRmO(LOpiMk=4KXR2B~U_o);dYG>3-)r$dwz>Xq6kO>Z4Tl zsRqWz-S<;{>QLiUtg_dw=XF^7Ujh#@C` zf`MNuBuDzhuQI==t=DzvL8p3RyC)}6vM2}6Nf|_)yE%_5EOdyPIg;fm@da}8fi~k} zZmZlZg#{#+gB%)iqaQ_p=i-yOw4f~+LI2*xmuzzI? zU?3jE97IikrYSK<)hfi7=0r1NO9qmm3=94+rIfg1LonyMK8VUH8cCTHq(Ir#HR*Oz$(Uq`;yix@Lnrfpx7N56#I< zJZoaokQ6v*~p3*Xd|HTzQFd2XW#W}L#}=Y-egy^FMaU+SGfNpK6pA(@zQh-WPm|YB~JK7 z>6@!WKsV35g|j|DA?sOx-*(26;JhElEgc+IOWa-ISGngPUN@!rO=kSakS)QsVyeJ- zaLv6y)G=uM1?-PC<&SAFxc08EypTuPo`+8BDtTs*&qb597>CSC+72rVB|u7uxUcCP z7goo_#(n5~{&~Mq9k1xlg1WV7ieb_>B5d&$aUG!b`aRGhc$1muxnsedhH$TeWMou| z6H*HGGBN@ExjOb0+gHX9z%s*=?p%aA=PUFW%tFN8{yvp0VY3dUE>pT^^;c6FL{W}3 z7}uH>&Q1doLwzXjK@0Ur%ZRXk{e+MGIjg z3ATn{W}hTcs!H98ERwWqLl4M!9}$)HL3j{mWUh!F9W0Dq1#JKfmc@hMuR$u~MA@Wm zOg{9QSGseVwOeoNlse!%%+ORz@$^haa(7v+u&M6hthM)3$$^L*Z|F`^-7wW`1mjl> z|6mSz;R-$bzS|Ee%w(?cy#zj#Ec+CY)G-0GIYkAHeM+EF5C#c}jBSmPN{C(vz)~$i zB9)xcfb|u*_$u#kbwV(ANP$d6z)deDV^@W1lczLVS0bFxgQ?xDD=8{J1SUE3s2`>0 z<|d^`^qXf9l5>0@pYN%E-{W=#>a#y(moRrRJ^O_>(Mx~p79;1`C81q>^ToH%yrrKN zE&jDx`j&=_E$(6(l+q@--8C{pJ~_E2+H8uUG1N#?u6_e92ji|u*p3pDI0r^p_2J-} zR?$x)1#-9b##G_G;Z^#lalCjvXtcCJz)jAi!6&#`=V!5b{lLK4gh8`vRf?p{m!|xSZPEcG}oX|FEC7@ zR_xv)H4~M96kcV-M#r^i3~npcJLDQdePl@ZLu0Ecox{xj+-j;9I7GWsU@=$63JvfG zIoHl^0)Lg|{wVADVcr?-_p)D7LKuoGDT`-AVBDfsrZgaSd6JXw6m)O5?(`hi*6FwM zzTh34CItkD_#t!0Fk?_UW`Da#k!cV;FyD)K=OrQ?Ig2yW0Q)W;#0^G|dyrBNf;QBe zSE|eBBoQU*2r=na6S}98AWcE(A2*B8(N2C}lrO^mrH;&%`tUexa0+orm(5#Zz> z4&;9}kGblyLjU&{T}hw$h!gZZKY1g);Vq}#BnK{ZyhoJqwM=RUo&vbI{O!yFrj?05 z15`g3cbS~EnGmrZaxmT6H4=3h7aGdI22JW^8(7Gq zHYK^5u@aHr}_ z^}{=`uG@3b`-$8=3UDgVl9Zv5tHcWrVgCI_OfkK%hAE#1TnRaAchb8Pfz3`!_Kd4sm1}Y_g z{4hM59k;IBn)SD|nm_3Zpai%;?j$vjMzpWhwW@Qhi_T(GlaJ|>Cy_2D(F_$VL5(}d zRR*`Z5+-4WWIiOqNyq~dO-72b&mgC-xr~Mb ztCazXphT#vhXf@sN{S>KfzUu}8(jxW7qS)29yDH7pPPWZurw#hgpvG%g#6FuF}u&; zx<{R)M}N!-`Y$iKiGKD~w+zP_RCr7^5_d`?^U17DDI3JTq~WOr>-OKLEmBZhv#^;d zkbbDax9i@w?TpKsRj^|O%eu5TuLvIIIyiH-z%^XkbD0I!4F~8fDR$2;u71jLZ`aC` zA9b9*?7HK0*~xQXz>jY6_bDI!{%gx9VS#nt09eD_H^cuT(pz^0M2Tn|>0$*eYG<$! zRyKJ}8_pVB?s7noEQ67sf81qBRw1~K@O+7v9a^5(CJ&ue;?3xk8C6aN{1h~CQ-nKb zSPU?lge=3u?TN+KXULVX;fG5&;}NkfRFaB|hEdKc5iSg=mhCkt%b$T~qud^r!H8we z0KOjzu&lM%t$-otn7e_T;R!~x28*x2MB$o4Pb(9Sv7b4YKFbUvp$$WL98n;SI~xBU zZlJ-5$=};MaPMFw8M@A1_h9Umi=)l=08Nu#8NNKV}2KDurMF2>~EIpzl zF&M$~5)gb0wZ3|O)KnbNxxc-bVtWUok91w@G@l6tkE%}ac-G$%u$k9g2T-|+O4 z^uhNp=cRbx6~+JdGcrsUylb2QDXe8Nnw^2fCY{SBCrv&(O4yk9QPI=y`&Uz*>Rcsu zkAF#sqLY@_qOayY7B$@DcM~X|Mlx{stdO{p6jT7TlTdKw3|{_#nxgz~ZkhKr42sg7 zOp0(|PJkq5%Sq7P&>0g>me!xYnju-9pJc8C582nHLvs)*k&whJHS!h0^?kH zjdS-lOBTsAKBmJCgEDC^gBjpc#vI@kmJD~ukZ~VAo7SnxA$FM#Z~4zv$XN@q>~|aP z_AVkR<`)XR%1@k1*x&q>qtbwx(k^_zs~}F^&cKf`n-#hZi@wwgSI|ujI%~-gJw>=b zk@%#GDDDXX=v1ZqW^2#}cCfU6ZG4wZ{onax@1c8NHPM$`cZD?q7Ygz}o5wul0T&b+ zCtP%1iuYYn_)l$nwjX`z9ZS>sP5=DjbH)Kc`csLN8z)&0I0G8TY|+%V0`*nR%oI5L zTI}ZLJAt02v+C}JI(NTVdjp!Clj@A?F|A_a=Cgx4z^W6Sk56_%hD zt4SIdr0tx^%;G*UgQQ!ArbO+Lci~^G`I~KB!Kl;RQ}{y)uNHoGN7_jc#gjvfe#nzY zjYJ+L`MQR8q@sY~hIWpDtmK^$LQD))b(Omp-FI77x7zl4_y`gT1qyA=>O6Q8D)$$S zwBo0bc?H(FE$(?w?z!|yMG+7Zi%jJ%f0qFfh|JX@9L!(Dyaf8`zXIv5)SR2`mXl@F zEJ-Z>`Lsc4$3sL;>*Ju2b6ZFFGx;K69<1SrHg_JB*!ak~+l`aP(W@(5v;$RTc7{_`37>vX@$}5qlYIR-mNl^O3#1vy zG%4@$d$Hfsvfr%q^v4{dpZ@ks?^ebC<*zxQr+v%K^y9C%gAVGs=YO5})s&60BW&|@5OqYs1MgX12X&82|(gd-swwA+0+kqm+`D3B-hJ$IA^ z40J}$P!j$5@ihr$p9JpH+hypHVb`R9D_56GVCI^Vq=U+F*eCOoVG7w@&hl^n{LUK> z=->YEyXfbC^J4mje|F^-QoiVdLjGs-n3G#e+pqn+%a^sl_x!|-^oM_ThuI118z{!nU|g(JYGU6mt=bf-1HDt<4dyE?=jfA|)$+_9V({&6o)E^=WTW2FP#tZs4|B z3kx3*m)v`-g1$jKrX6`dJuYV@J zcYGD6&#?-{G&~X~`(fY@%K$l+;irJ)KT~QnlAx|v79*sF9@M0i*x(L0+xHR>Nz{7R ziY`Z~98%7u|7Kl~$zXtPBnVDF-REw!Hm!_qk!&ntH)dcU+ex%9X4(_Ci=-zGiDP!4 zhB#muHx)eEy~m$9S!WBr`mL#{bV!FnPU;Iyn~dE0cyGKSviq4aYe30DJV*|6r3FSM zzx|!`Igh%GzU)btZ%Ji*K_UOMdCY_Ex1k^S=6leu z{lOjEw80zco$ubhYqjnr4b6vfcMO*nYu%t}67EPraBv<)b&}t$4q$h5zPTg?{K4PSXos zb^G$#m-DZa>CriK13WyL&JGPbgVlSX*!kBP%n^qZYn5IW;}lE--}?9*YGD3PzLaPv z0`9`S2xjgQhWKEZL>*+lxVDRJy?{j<;rf|8u!?{X>GuQ>95FVRC77&Dpg`+Z)fR(X z0&lG}Q>6)_hI@0TM5b;=PcEI7WR2Wk6OpLSkOk2)I&^Jc*Ux7z7zz=c4wo>XQc`e1 zxV+m1$0`?uG`s9=Fa0c@a{2Z%!XzZf1Q1$6u#YS(R-Y=w>~0A7ng<+iXXSFL><5^aYPUMkkNc-J|(h8E=(D6lPve<3%#Y3Wpb4d1`~OK;RtxKXuP6j5+t3P#MqvN%9$5 zKrmRmIJV-?&FZ#qT%s#lP(k7S+a9`UXRvO)tE}B<8JM*Bj$f}?C+1ZMRa!%k)~S2K zM0j{U=y@DR-k11ax@3ZXexG!mhLqd+i4*6t6D_oOg4*Qwl()r)S~VlBnlj@H4U z(E^2zG-evGM#$C>{1Q!iVZmjC$to9K7{$89Zq2bx4{$QYnNS%ZSOY4DYI z(C&WFb`7_NB4l(3ed0A2(bqivV)}r4 z@p+xx-eBHvQYY>3lDS z9ea`J%vxF?o9I2GC~x5=ua#zag%Ew;@Wi!lluxT+*6tmhIR>)D;xADT3;|E-DKLS7 zTLombCL{=Be0>UJ^G{G>{3H^rkxOtI6uVvst$qRPZ%MN5h)tU)f`cAZY$4vB9Z_?84DU8tZLM z>jE~kEVZf>BU)WqE8XTExdQ$B?+sR79aN4)67*ZZ#~WXvQfE1eE?iakoE!UKxDg|k z*rar?f9q-b;_v)BdeS2P22Ho4gtqWZj>x-JTdPq%_1OM{zf&wRSPz?;eG|`e~QY zBmVJp&V!%ss;|9aJLx~?7w({6c=c)1lvhAMxruS-mZT?q?!5qVgRQuY0HLj5vM5LE zV3cn&LtYB&{Zf`#;I%2_J&=D{ruvLU)Zo1;F<>pDh@j~%sE6l0PV?7exguWMEow$}Rg?WVCA1aV4f zsY#3)+j5F&Qj{W~pb!Wmfe=j$0_w2((a;oki&-|&6!TI*TQU?|<_ z9UosOZoou+g8>)KB#2wF=77m6g>tsnsM9}BuYJ1E3F`JCBqC4)=uFXtu;4olzQP7Y zU!W7vi(L;mvXSZtXaM2&*M7}g>8rl!nLBR4JKTlKyy68}6#Y~;2*2gmznotEtA8GS z)|dVyeb$$}nVx>m+Is$>2bs8bS)U zKq+||;3;3~h7$&T&Qn@9MhXwkAT$ZRR}}npI#)uw`|HIAfEPVZFILJl9ro6&V`q+N z`?_{qi1D2NY`qC_r9oyhSDiT|2GVITf{Zj<1?pgY{4}T@S>fhd8vc=zjz5HcF zf8c{&Nx$>mUvY;9`~-dVw>%9_i^ITWWB?ycfS!}949j2(oixXap!%VmD*_!&ff%n9 zC|BYm-}BeJj6U|mUqQd{=kOCP{4eI~zwMtYeZuFwmA>a+=-BIXtU}9t%M2a}GKk9j zz|((1x+Tnok-NhuIx$FmGOTtdn4W79)FJyj_TXFcI;yX~hQ1vGekh`J^LpYI_1>dw zQ`$yTT5L}JXE@P?O~3Pcy{L^drH%Ka3(7h2z5G7OK%>lnxo-||vY&?=$>2V0C3>A( z96Q7mm-oORLYU%r3|q>*f3+8m2F;tjkt(_=7JX~v$9%2?D|3HM4yVu?@bBiv$3vDm zaSw#4ma!c^v1?TAviq4yXDPEl_)Ci*t!U!g-k%1%W6!gE=E|*#nBLX?ejhR!9v4B8 zy?{ouyAqn!%lH;vGj~Hgn62Kh=9a_+Nv;HAYHOo+vfy#fO$b2}$s z2_8b7ez|cDtc2w#%_uOgT{oyU5^Mph*qoe6&1niRC;=GCr`}>5WT*|ciQE_H zfEF=VAnzWMl*0VNK;zz#! z+tYvc+h2Ca^yjy!7(eOafAK#08-Mo^{lzbOn%?qOXU`+SjU%*-44LvAMPwTp3J<*k z2tbEw+UMN7b6Hbpmk~C1!B}0AMmP*DS^kK?rk(9J5+t?whAbHFKD@#7tDTqBqOfoP zOk%GMSHJUN@663--wUayq2kWm%4F@xrE(4VnO*g?pgubE`W(SXc7`)AuR)umGh!02 z56-Un=n%_#5*1-m`#dfV!I-$OA@=%yw} z`RDHKg4-Fm5uC-JsZIS}d^_QhQ+9|T+f3w`8x8LtBCsbi-l@QKPM~4xJ31Tjm(>YT zV4qj4gsl?))aEW2DW;D-pr`pq&=f9}mCyIzJ_p^5b-`PoQTn9Uyp_K2>mSj_ec0R4 zul;xBCBGK96yD$W{y&S}@6|7-Klgb*Nnh~~-=M=(~6N)1UJU{nH;jLGlYDT!@Q=mVLi$e&}*B z;MvC1V{!dF@an%>l$Eqlm&9qe=w>XXc?U{(LilSa!J5aG!Hem!Yv&AWDq^q!`|mB! zB_`sAsjJ)a+WoFam%?-lPdOjQu&O2`KUWt*gM}8J3LnCI>Zf06S+!!KY(9>1h$=Jd}h=g+^SGlCRX+7zoX?4f$g+N$OJx7+df zZ^R8`oL#6CKGKEAsSYW6WaxshVC(C6og?#+U~l zT`mOrAb`)n2uF!zWsdh7z1jJ%mSsK-F}hu4w~4ls50>^fn8h}yIXV3~{mGd#unE}n z4v&A|zq+N5`g3og-}dWYMj!RTFQa#RXZ|UL{9nlD{JeMB=zsdd?{uedc*UJ#-H+4v z{mXq=23yFdfTvv8)Q8-U5fR{!5c)>txZm$yw~JZP$9=>r={Nq$n}>6Ce9T|}!#}F@ z=l=S0^p)TA+*sW?JU%8^PLne?vc=V(cUWu6N*&W-)yce= zFChy*eJ^@!b#0uM_7#f9nk7&p{5fo7&FPU#g5ara>T$+ZC+}Puva0Eq5qqrGBH_#9 zk_>4i5BNG8piQ}~M<(RJU3LrUd$<8Y19elZfC0nLo1Vi+!nfl;BIewp{@s7{h`#>YZ|V2F-^=O4-s|ShtN*3R3BX^! z@mIZ!KKp~AY1 zw$ZS)Gp3$PQhht%tmv?}0M>IUI@>@#9L?MZ(y_Ibnl!RotliiL00VbdL=b0(zwXD6 zje4Ht7(_LPjj2>~w?dExBy*o)j4kAhX`^h#1=dlGL^>40fhsia5<_AJDdVYBn8T2+ zsKazTdU55M0Lj_o!B=0Ojgz%VSC0B^!!evklS5}3;E^8=@JP7oK_E}niq~me8uOol ziOx|oc!FK1bx+JzOb@s-4yh)N`MvD1qJ;wmrbM?zT5=byI{6$@F-P!=;CL}%`gTbL z_xM1RdtONuyszEg!^Eh{I50_3K+Zo)m=Af1 ze$%gb>8}MYp+X<=zHd*z{nc+rpZeE-g1+<{o<7OFhOyV)+{!Rf8KFP!8Q`nFyEpfD zy!sXN(f{esqIZ2Kc~OP@Nf!UteaB9p__VpC_uy{aGl<_8-ow10RrK5{J9%H0GU zYLAPEp!6^_L=K?2*oysnh1b{ zqK)bQTzmLnv@=ZsdkP!5$o-I}qq6gRIC|~He`>(o%qa%NtY^2J*)aaNXviRM1Q?rs zG`ck;y5!lSKCCjc#0`A0lW#&Ne+^&oWiS$L})IKPP3(B_jS(h z-+;Z(u~Q|&yaFm&1UZGHhyImPZIG7`Z%V%*xdiOk!h8wc{n%*fWw6@Gm|@J?}`r_Lo2Put83b@$3K9o9s>^`3(KNJ3^<>N!ate_{(2xV?}kDqJ3h;_Efm; zQw5MEglEMbJ_RU{7*1qXZ9$lBByJtBt|8p6XJmA-$fUHfm6pDX90CW{rZ{p;B{cN& zuWMRrQ?D-WIad|9GQqQD*jA=$T&8@UBzBo;P@!>OBhZ3MEkU5%&}+ulXM|3%fc141 z{4-??v##bAfuYmV)l-J`u{s*CPf<+CeH+8-rOCLNW8lsv*hBq-e{il8ZWO$&-Qyi6 zZ_JSwm^6>>hG)kmG|e!>f|gB#fXfz6r>T3jV7~K0U)}?D6n0@AJG`S!FT7BmyKb$6 z_n*zfSV7$Z%({U>gZ~PW&(Q?fDrDFgEbFcEBs^Bxu1w91Bq)_1xnx&RizN;c3|DV| z^hB5-Hf!b`Eg{gxZg5%`&{g%{gA~5Pb{)@=owEV2-5%wiuOcZDnF+Z=z5L;8zV((~ z|D8&|=e=*}Bi={osT+F9aRU11T?+VL{`hyHzxDT?roZsoH`7nNMF-ioi#g8!zth`q zcP2@%qz`$oS42k0OMU8p?vdS@Bt1ue<;$L>M~|p5;%_LH=O?@WAoFp^Bz-fyF$5(s z?pWo}sNdL`p>Q?>Xsz?GHh|8BVw(wHQ?ugJF6X%!${wY*JJz9xKfwPWRi`e*f>g$_ z`(L=&ITs7ep_bV*TxD=EYz$&r6ktnKPMhpZ0OF28jj1^KVbR6MY)hv!ndFf>`-H!b zwGhWdujtAO_V7D7L39uni!mK0`*B-eLp#L7^7xJnx2eQh)!);dxxho?rZ4LZ&t%TDDtO`_=TQ%T%Vs!52%vv zoV>JyqM*tUQ~Qr(UCik&c>;qtx)-kTI`;UwyV&C{d{!V_GuKaB_}tq)MmE0QQO0}R z02Mhu=h;U}fBDOvqc8u)jsD1gazpR&Dt^gw0^(r1d*gohd%xlc8v3-?{3LzBog1Pd zQD|I?AN-r&p8o6K{Yv`T?;tO_kUy#7|25yT(_Zme`=+(b!yHg8n^o!o@rCI#(*CqepPyD`jpbxxL3;dbC z`V;i+|NPN$54`G^yo~<%?|n!5_kY>Vi!S6(3i5x$8;w5sZqNU9-*G#dJ_#O*47lF| zV8n9x@X1*~10V6>oDx7mtdX@4?DUCb0a)YZ)E{`$JWzxe2q~^5*`_#PJ<KLEAsiHqCt zL)ZW%^|et#?OKM|`LL*tsCzTUlZEnNW%Daz^1n#pPO|F7=;uV+Z<%BNpFRTE@)_2UP2$nVSTj!sOUEs;9(q%glG39c(1NZp=yAMl z-*2sdvU2@#(Q|tfg7CdTgeIyqy0StRq-14^7~1Ocw6Hv8SS>6%x5r)hs(Hp4Y+{Uw zTacf=(r-Iai9uEwrc>BuqXp|(V7~4Jal$Ldsr4=KaZj*o#zcGh`psv}vv7hl-OO@d zkhcxUaD2tr->AgVcqvyCkmlCLL>hM|nJVq$uqp?C1WV&@eV*(Z-}2N* zroLT_VuIGPC0i3R`bW7xpFRI`NHd~VjPf$!t1*mnB{Da6`Zhrnz6Zng1dl4ZwZI`I ze*-JrhUAh!xr_^o)r#1TAuS!rJf{nlFtuD}E_v!kHl_IyXRdY0yaj6^YYhBT3qJmx z!S7)@Y^{bj!S3HiYMfDZl*5~$+b5^@MgF@HKUhHvK8RSFHHG!3RF^k)Sxz%F0{1d? z;}hnowH0U{y{EX_3eac$ok#R#-^ldQA9O?S`Rn*4MF?Dd?&bCQp!a;mV=LrOqWFK+ zH{Q}G-@*Mq^rNt^b-CDxx>d=GkPG5<#kyyFuJ9;Mtj#5ZBNbKAu zu#zRNVQu0%d@!@YEc;L~1j}5DFUdX_@jLT0T}os7qY+pk#8XcFDD_K3#ff?rwZg31 z$*&r%JWI9suT)Qey@w+d~vR|$^?%^o4xL4b)H_aG||Y%823FkJs(CR39HRYq&aez_*v82Lm|ffB7|oI5wSS) zwYL>-Ui5FLO7)MezTx8iT*>$nU zkc1w8;nN_E4hWEGp{_8nIHeM+DmHsrSH!e2udTmV=ezL3Kd$sAKkGUA4d1ZQ$NsL3 ze#y`0mlPrJrSSQ0%h&(kKdAI)?p*x7@w@kC`QW75k)J-`{v*m4?mc0i>~!57k&Cij zDr1OK-;IOHd2K%|2Vm{Lo(Sd+=0(1OcKCTk8tm8ndEK9D037z}{vV}PJp`@Ums{2M zdnM5lah?*z?XJhZdq!@8(w(AQ%HwE&>rjq4s3Gd4_6u@##kxj+P ziAsd!N^hsA@u#p_K0OqG!^Rdohic&D>ktki-xh1F!RKo(j1&auM942S@RlZWcij_P zE0oKqM8lwlEEK+@VdmIZ6s zQ1;lZofSGiZjuXYy3qI}W_16jYqxiQ-s$^%J~jhL9YcAn$Atke!y|+ZRt~80IJ#cV zy(UxVKV(Cw3s%2BzD_ckrN1~e;)-=}%Nf4ebCSd{Xx-HSqhwTJ7g2&97 ze%`95hs0T2iDAl+PjVcbG9{^89aNjS8}S@MHoLn^6iyu~3$whp9<{{0(_g=>i!IUE zy)o+<*zdEa%qmEThl8Pou}@~URPwk#MkP)!2F1Rre@fv+V$G_WY56!ciUsxWG=c2uEFBk_4&WC}$E)`9=P5XNcSx7xV z(FGKR#VVNzp}xwF?Zn4K9o*lcr5hx~W$V|}kpyY*qtLABT{=FxW0}>d>0t{RcJu%{&U-LBm$d6m>sr^(sB2eATXOLdy?$0}nw;OZWe@A|Zhut`8aG+J_ z=w5fMnT*+u`kn+2z=~%cy5sGV{DoLknIvfy%-00gAr?hXhwZTj!dIJqj<|I})<0EK zAHuX)I8$m6P3J&yn_zS%%j6ZT(A%`G!pz}{CE zk;ALCwNLxHXstF(`5V_GvHSdUsNv4kKN{wB+~oFF&Sfn08>K9MzY-XCGypqg*1Im+ zzLE$>x!>ouv%xn>srd*nMA&jh;c82|!%Stj!(|B9vEqSmpck#)0E#+V?I69A3&Br& z0m0KEQ^1KM*KdAq6hDfaD5uj7DP18s8rZQ$ ztIZ^o8Ada>DXzN#KAys7!8MUKE%X;dB6Nz&-*wMKG&y3p@$dkgM4l}j^YWg(=_if; z)Mr1U&;NR%KlY&;{X72_|NoHxJ-@#94R>(=XFpB<_@B8BTZ+8X4@-YPE-1h*xt5U$ zlFn%<_3{SyrH5uoKk1YLT~AOdEK zz}p%I3@m>neiN*036e#1W%297$|yeS?sMK;yXtEA)30-1v)K{wM?sk#A=jwkshG~n zplq;_8*s`WIqQ?zgv%+Q-{sA~%z5;gAH$i`k<*wtLuhC$&CIT1DA{YIHbLm(~T8%d@y;6HSeA+|0n#E-iJ z5Erh)LUcGy{e`!ItBq7=29&OLjiWT&9TomOc9VXg-QGjoe7t11^Cs~oWVLcQOksvT z$9?a^xr}{bfv;!&n*?}-*b678qG&1d^;dWkzU}*!{@^Dn{m1XV(eMAA8@rKiq&{?UE0MQDvU?N~0mO@;DK#(rBS}tA((gHSrHs{y zwQhXVZLGZrA~9FMJojOMe`^S!P4Y3<(leNKI2(RvE)(*pipa*7!Qxngu$MXN0u6_B zUbRt}x+$&&7H_Xl>Q5O;{*qwmB)pZRcV{cvC+Irc&Ck+6j+e3M4*eTD+HmgOPqsgo zP@||TQ19GVg2U>VgLfoXiR#j9P|s99hyPjK@sX>_!rlKE!{lnc-JCbUw%GAoaUOJ1 z_YSXRY!xn&z`u{wcR!}Z@_(Vy=HnSLVX;V!k6rQ%(;uK0R|t; z6=BYbLjE34d4^`3i7^?`0P(VZ?00Eh?I_*Ns<=nCM86^>%}e=V22qx*Mvrcuu*cnBuE6dv@C->| znLD&Z#~vRGzZA=E856sL8s^f_m3BYAhX9nTkki3Y_)+qeDRQR=zBJVYD%$ly!TP{vp-y;S80!qR%m7wqEDmVDBH4o$|yXka63g&0&p zNP+z(UWfj^{@9z1KH>9j>2H4n)5m`3&7JT5&rHbwJO8=TCw|V;^zGk&GH(xLhEmgy zIU=4y>X{-sf{zr}f}r{LSXzo{Sb`~YzU4Bez-~KhNj@7x&iOO z#xcTva-DE1HKLs+p4rSdsBC`@gs^7A@U(f@M}psG_3!u|IXX)HcochFL;D5giW2F= zuTS$(oiCmy-Ynb>-oy?lz&>7|8%VOn>E8hQpOt%-2tbm|Y>|`%knh;vNYiVEi&nAx zwMpaNzh4H} zeEctvnN-+R{Q3D?3RcPv7nfasBc;X;)z+({Sno9Z)2^1mEA2bpVDyLn>~r+~|KUb| z@B=n_=U4vBfc!5F(5JulS^9#nf9@nbvHNd~gWC^v=2*?Ri=PZf$IXzUg2P6hF9_Qm zsM_V&JmB!5;xR6s`d1n4(BSDD%kd!OfB!j1cnj#(67I)n@dyL5w8z!1f+*;LOr9yY zIwh2z6*swlWNF+-JNpPQ2)0olY8}+2mXC8m0+j1{js|i9jaQ(&%)sS1_xk?WZ>;Y2 z{o@jd$G8@;k$1qwQ4)w}wdk|&JD~HH0u_1jx6&DN7#Iv+ZnlJp8~kw%zG15*KV+zu zM#Uf=kyA=2MfPF~zILtQyeO^vSda9enf;3Tg%vNZkDIe1 zP$VY&LqXc-(>!a!|GpX!fVTybYz3x&OFiIFdz_AdJYFLnB)<*LqHRIIM9b>3`!BA5 ztpTt}=buHKn*LM~47F-2o1_W?y&~i#!ycuZ`}p*2VAxQhX`WACZxqJ&L}s@8;8!1C zD$afp6*)*X$BU>2$yj{v-WQ7}Ln@VBW23jVSL}-=10@)=z0{C{0$cz)HJzudT(G$N zK@G38o01ny*#4mR68{NV5Z2WJK;Yr~2c{Q0@rKjn=!P!)vTcm)p z?!NeVdlolWViQlCi1{8`yFGxj+DH$({Qjd)8-3E>-06#7f43I+kd0pT%l^%R{J-^k zcltAT-u>V6290aoC!dR)uMkUzhlPQp^|BtoGk~MvVwhmLIF}w&LBF91WK?D|+6m`^ zBAUZm({7&x2VksEcQhcwT>BokZuPZtvR@5-gb(-}D|k%Bk#S(@VyC!9e7|DQH>2L} z>dJKm5R7o{Q(qbB!H@_1m$_cF2;W@ZP%QeD^j9757zlQ1saYkf%xr1yY}$f-4F3#@ z76U(?E)zGn$g7OsN*rvzW)b4&c8=JJjo$bO1)7H40`erx<|s`mehaX>1Bi_E9=(3y z2pD*P^A#0`6^^`deWG$DFi9~~$R08Z_?-L$eHj;p$53BxBx_#d4(I!Y5(f=fSX-Hd zxR7LdtPQO3E*4>wi-yHA3iXh&WfT3~KWOyPpQ7}>zu|`d&<8TT>pTARp8DT(r{n+B zzxgbE#p@o80^>wW33-<9fyJ-j(G=+*_>mDz-sk(EyfUsC&@ZQa&>MIeBwz`LI*52( za8`Uc@$=?|qF9fm0azs2)sUYWl(P>)?~Nyr4zd|vO&H7J3=K;KJpTP$5wx=%$U&qD za*dt69VRsA*YXssvuKlJ`gf;O?FgcEM^`HHK%%NJ&?DtwyZd+_oB^J`x08VU87{ELG#5J_<>Q z?n5~s0BlXp2M;tQWLzeA^jJsRMwiXZj9Ji(vy}67#+Gswko?=udz zS9EI}f%$#U>v%>~j43Rs>T3csq{ZP{tNCBV zZJ_H=nTL)7T&_ZEdLAv3@N5))8<4yih2?RQRyjr%#e^)U!?7Jh*>rgP(Nyv(|wiGt-(ZkkL%Yw0as4+Bh1u1Yj`XX=s7Xk-W4jyjSipfAcGg zxPDK&CpAv2S`?$JAx&Rv$df6svG4Y9@-M3q?@0KH42BaiQLxZ7w&|=o^wSEARhuET z9vEX~{WHu{j3>dNyQ&d*2r%wT?STVve09Pe)-PI z5my3?lcKFN5~vUp(PJEvFfUDudQm(z2XDO#>-&^1yi*IjUg%?fm(Z{K8hE!w1H2Ta%?nDTdZaYA^+LvNJd+D zGW{jYg!KK{vVK9&FJ*fm0z}v0z+T>f){rgG{uMI;1TltBt2STUlA-Y{mf*71<0n zLyHh+&^+c2&{sp&90VZG3E0N3=Zt#*&er*fq0xSj-33LQxjZ@*{QGOUH|WXXyX{o2mE z7hl6wZ3$#M3CRM1HP(!3dbk@}Ejt3X7c1Lq$$m+6lyEgnl~c8*w;A0dPX+D69T$Gc z>NS{5ehO5>;oz!$0nacf13YV*sDv@N1`f&N&3M1O@b8N=Z3^Y%n#yaIJ~$ZFba{+7 zJhGX0t7Nho4m5%hj?Smr-I$%T(mrHVWT=<47fhC6aGAn_p{r)kk{E)`r4s-%C+fPb zuPirzASEhOc>Q-lLY-0Mk8^{GR;XdyT(m5N+0qj2Aq9{Nu~kH~m7l|->kOB`h{(-g zp?;&_bKo}RUW?l7H)n>IIH3-l$R1DzcohHeH!xuR!$B@1B*~}#F#h4p?B+REn!pCT z=Tnq51E(s*?L5!vzg~<-zPAiS1}V@z$x^c@{GD&v=^uOt(SP~dHu|vly1RL|mqziw zy*2vWzjI4}`ENfr;4mur2Cpe!EKJMQa! z>amt@FN8mPq+u~lq~y-Zw=mDqMa0VEo&NoKEk^`nD8hs6Hs<}EX`zj;#oE2_Z7Kim zg9+%aOe(3+R}uhcDsW_c71O6v!M3JJ8`)k6$&$+|f`(6o+S-nOwXby)XhY(&S)26N zX@19=#W+_}aw=Rxk>acK%XKdrwMu~*eR=GUI2rlJc`#aC8Ef9-a|ZE`7bEIc-2Zsq z|1b4N=&3{L1Hf$#77TwNNGO{2IpAmo515%$ zCT@Mrb5qA*kiz*|P9{y`^&W;>r!B1wJJ2KmcG3nG{~*ZTef;!YLf)tU?Yp(W>*P)? zAoQDlCH<5_{;&V`o&NOaJx6c&;oE$D9dZQeS@?f&^^x0{r-NN3iN;cLL$I0Nq7mDS z!qS$(e2W2b)GJPr%9Tupq+WydjTV;qLy7=9?gT_hI^F!z+dg?w$~8j0IwD$J+dGiC zJ+fQ7>t8ebi4o-P0^HqHi0W=T8WZA4(zi;Hbt0}b`)<3+7odq8XoLhqDi+@N5WUhr zf1I&>8a`We-m#DlS6kD{9*sAHE;g(7|@X{3XRY0AkNEHb^W;OXKRWi zO4>4a`P*)z5Ni?@p+q1S8zXYj-+q+5vBk3&l|nR ztAzgO2Q&SGcYU%`{}28@MxXq7kLYW@^@RIR!k*+|Gkj~qT6q*Nn$kwwYHD16H$|e! zZH0Ee+b3s3#_KpF$-aXnTb%?Ab=a2!$;uf(pw(oPhvonlZxBW{_^|Xnim03g@RmU$ z7_@$Lb*+tni5EZ)8L?jD0TC8`3)z{muNDmyM0Fimi+@YkbY$7)bL_s=DK_Gpac#1P zN}*!Nb2!xbn6rMZ6;Rd8=h!Z}zXI5T^H5yu=#q=(KK}ZG55B|vneYm0FeFb?BA7c! z1vhdce1-gLP7bPExG2ONIXUh#YkM^e*XhKv{=y36B2$ypbR8+e_iorQjlm86uEif- zTGdhTxdIpg*oc@pUBx5zfIa%U~=f!{bsbD<*!#Wgv zD)1Wkx^GkZrtc#9i1%jti1*p(Wl!0I7XRlS8U3{{SNdyT@hm;_Xvlf>CS!|WVIZlo1UtcZOGRT*R1bHi3J-0~ub$E@>o{!IX)c@uH0Hvt6PUWI8<-WZc3U|;>d@D^K}LH@&KAy_D_yRR4i9|p zwc!pc3=iQnZrKWKeLDjdj0@fWhAwnm-KZiB4?GF91S1WGHNx9ukf253-e1=~1}0Dz zuer7?28GyB8eQeyEr)Gw1n~Gc0bF->fG0AD^qHY4i@hmlb^}*b%Q;mJHy(teai`ft zyUjx=cY5wYkj%kq%4Fr|+9?G%C5)D-VN#l?gn#|MyAWK)9^vP#WN)^Yyq3px6XrIlf#vpsMFz(KUuVc~l;kX9w84Bq>YMghNP zz5#*n!hVI!$mUkDc~uKYnA~=GYhgaRj!_MEyx(&>IEzk1*}}m9GB4Nj&)MvZ=5Tl) zGS|NcC{{7j*9e-Jwen%r5QuU`9miucm`;!P#Q8siYw6}p5{5n?-L`Xp40k_FBOJy2 zme=c$L?tq5ks-0y8@-+9^W&z&VghfdMmgp}9;s=^HW#uh0T=T|#-?aqqlMKPG#2iE z9Ujja12S8B_`yA13^vXkKh@{}XcwEW`@ z+|ZKrN&tmWbz!7t(pP;I3^qb*Qx2J$vg(c`7;MA!W-)x7OYv`g;RBHY$>uF8kCQXZ zK!#Mon*nv^Ff&P8gZbfl?EJQb|IGLbas`K;Brip)jZ)TqJ)3JM)}BPGTKrulkduG& z4fiJe?yvvln~46zXWY`O|Gm4lz=sO`qIY{dQ~w*@Nc2f}aR2MS^S0>4jXCawfG_U~ z_72bUydLE$r)OsfU9mjC&cd(Y_I9T9MM)liMn%RM?o$hr(!!?P=e?`49}qu>wq44t zs`T*lKZ7DjL4hPx9q+Usx(8}`wzj_eciF!|6R_NpGZz()j^HF_NF6mUhQQjA{Hz%S z1+luZ(~+33R?n5V*EokD8&S+Q(54yz+y>ZA>S|855bQU39cWV>LB!(lYGq zGQ7oi6bx^?gmvT`9x-wD*dY$L4(1Y{Ym-$kFQgj)7dC>OpS>-KHWO&`XjAI$ zeI%{v*w0nKn@2Op)0#541#y{b@o%t|Bx#UIET;Y>K?~6na0Bc)@CGh(_*@t3)4?UW z6w2J0qyNDaf;((|i@zJB^HIdhZr~7`D4|U}4c~_|Pp!0Q$wsIrKm?+<_n&xFDH*A0yPe4!TZgG4|4yEA2UI3J#1U#w47 z+$9_5`{nmrETjYmPwn}r%`s)#?vap@9x}kokMH)iOeJM1U5u!`@mK8i7SKP047XYj zcC+IyHMO=tUy=P5W-)!_Luf3%={+K~ul#XQD zOItW+YS-A$=aQ679tT{HY<+E6AjucOwIpX!t5v?i^PxCC@$-0+;&22>BZg+c zPavbN@waM{w~cf2;LQL!b@}rR457DhVQxSw#0EOo!&Z1VvN)f#s6+BKy0N>{kY!;O z5vQQt*zP}Yl&XRm;BC%z)&)Z#5>#p7OA zDT#}uDQpCi&%jrnC%+)L^u;y@nnB9L)aQI%d^$m>PKqCRA}j3aYcg|F>WYicLN5k| zV@&C8>~lqS=67ij(RS!(T`k~ye>tT>`!$%e5l#D#y*$Mq{xPMG|0_yg@DGIk*zXql zrN7|**Y=*_>wE@Z17wL)I9W6@>!jT8 zViInTe1@$r5A~B&rNItonuG{-f(pNagsb-fJMV7y8py!*;7b6bRPH!}YSd7eUO+9B zXQepz;Q&`iv65OO{rMSs!^jV+1sA1#o3B8f*TRmdF(8rN@VShSC-f8*XJ#JkVkW}x(axb)s!Hl$lJ4_X$8}nFqYs(yf}+AgMF`| z+-!W0+Y+s7VEEA-o~Wh=63-1;-S2a;RYobAG#Lr*&-yVZv!>6u(LefLrH}kyj6UQy3;kE`&-An2uD-T!x$_tJOJ8F2 zny@7p7;Avrd5 z<+sc5Bp(j4=$ANjzV?D~u^INqTL{X4oJpbO8=wm5rso#+JLlRiq;%t&-WJ17`iJDM z-$FTrssRqUF^AJ3WwuT1VxfMy_kyO{CAkos+zRA@L&_gTGYa_&*5#>PzFg0Ylnh!S zE#G9{HXvj(fb(p*)~{K4HWmI3kuyXv&Z0eJ@47LECE0G0%R%8?C<(BbSz9?&ws6LV z@*>~^7Y^0}WlHp7$y%l>T78B>?VkBg;D9&HDpvth6PefX!}#)9CqYDb3S0=_3RvZP z2p6T<((1s@MyKE<8SDfhH^eD*c{mxMRKxBu(I>;)4icYtSylp^EOgZd1T5c>~nX2|G9sE zr?2=HrjPmnq4$0DIo*8e>y1AB3zgpV6CewwW)A9Qt zoKd$CO)kJm$m}Gx+}l@~<7{!gGY1;^Xb>}oVg7ZfuMj&DroNWhZulX`6NkUI&vg~501NX9 zH!xl+1;*(oO=d>z$*uTT-Xs_t9O(0%SK z{-FxuIhaEM8o!t;N8lIdx@ZeHQ%a~xnzsy={{`N)Su)I_)>x-9b`{RKzpupA$zjg- z{mdgqR^sqHI6182d!0ytnmiE&fS~%vIZ9S1-}v= z#&x*-nMz^*`%KmUsd#mIqSbmCf=wOVs6_V32hB%PD^L1n588itf}nv5+0GIcc`d3OoL7 z7+(y1_0Ys{w;_Hw86d7Qj%H902^fkD#Yj$QZpMo$QH<$?^q~{gLH!bs zv!&tW2k#%7vzx0d@SGZTvczD>48Q~0v%yR2?E3nN17dJ!ES&Zh_p1zF{crs~i!L?` z_-NtA^9cBVsDRFWIFD(+3aFH-e2akta4Y%s6hW;S*qZzPI<=@{U<0>5R|Iz@nEW+}DE@Z0nA0SoB3QXw-C4MzUT$c*NhC<73)Ys1BIXVg&-w~iJ|SZe1w z^>0gq9d5<5A|DJtlNRn*+q7Gv;;TMu@ALiR#uv!9+uAzi@fQE%wbBX;9n-zyj@-a< z8WvG5tuq@Woe>3GNT`*^pt0-ZBo$o_gvcD|Fsqhby)jN590!o249ElU_fs12^wvpM zu&$$J3~FbQ+w||zF5H>h#62*kI8R&SVFr~@zeap6l8u}&Cqv_Zn#xG=hR{Yub9>za z2b-knvU3`SrL%z~Q^4R#0aYk;9i}VBzG)weEsUZalyyrWdLkZx_13m4l2b00yPH)C zj85l?P1nVSIUOdGNxK$rjB1jmQ!|@()f>E*b|txvh{2o&R|VFLuWU~BJ4}VnLvvYQ!d2zElR}z3zcLUZi$Tl+)~5xKDKo%;}Y5jVx2f#whw= zjT@*j@<^@_kEMrfX_9}>dor&d)a7e;7A?}~`ZM+zCak($HaqIAaT4|xh_r*G+<6#6 zR1sEq&p2d=u-4`zd?)eIMh?KVYClN@>>UR&6omm(B76XebYi(S@EA}T)kb{!v(pFy z;Rha!^wTyJ3K;lHS2)Nj0go4uk3rsbpI*tQr}HuHl>aGAseN0Z{rC1?Z5gt#pF0{J z_Q4~_!OlXn8K!3OM9|UFwZR%7-f${~zf13s_+nt*gavbXIAXD9D_I3%RwGHRA|>v7 za7$Lugcm}aelf@ZGlkE7vwHSdmJz21mA&htZIOqfq42}lF zJ8f)2Hl4dm!A3C7c|#lc^KdD78S{aUJxH!&!1vwe-MJsao1s~5N@>~Z6u~B==x@cy zDy4mPW#-00Fs{lYOF*IMa_sa@$rlyd@eV*;8W&`r3lh>g<;YHcg;*XS%qMPeq8l2M zR$tqkD8<7E0c4}iu=~cHRVEWMC=(P`qI7RucP*mxpkYJ$hRtExU%SbZt2}y`&t_R8 zaFW&b{GuU;wS)AaD6WkUL#MO5(h7)M(hx5JM6kDS?zWl#Cc|LIQz!@eH(-Bhu==_0 z&y|@Y376MrYw36W+C@VowZ)kNkiRZW`J@E=SSVY(o}vY`H-2vZ!@%(nEU;%7$@yd? zwCS{j&$&VHJ!{)LO9O_8fg_R^MfO#JUH9&;@Vw;{HJc{Def*pqRz=3iLx}p9%9IFFLs={im)~zdPFKIHHLqk^6}3b?ucQXavK32$Z@bja*16pG*rk!?S;Q5 zHD)n~i@h=V-5OaaB`Tf)kdK|N^B48cRXG@vtW;_+jva26(|2~L%zAg5mV`I%`R@2Pt#Bv^3%vvR?J%Gz*kN+L) zWl_nK*NK)z1rMU>IhpYy2jcPmS`}m|F!;K$d_DvLhbA2|%Tz?sWbmVtA3z3>*)WsQ z<_|*M-=9-=E{h=v8%1tVc(-dmiZQ3RMCuiD3@-xiXkbz0DrQUzMpcn$Bk%{BN zlR+?Mn-Ew$hZP38q9htfMXYZY#6NApVnMOC{N6r18lWn8Js9{BC=3~bYAM(1uQz2J zH&z(pI4gc66UFY^PI(Tp2DI+V|m@Rwt8Mr@s(3EQlH6Ugbam417Uor~uARsctln z%!&!-@8^gvcta=jZ&2_FSl?^y2(4a-Q#nwSFdZT=2>2NhPzQpc5ICgaM7Wy9G`I>> zd^DaE{IAXMMgFzE+)CrA0o&W)OxQ74?A#S6T=>}x_jUODlT8gCt<2#Hp^d|1fN`IW z#y++p{J~YknMpy-;&{Fmbvh%0B;2HaTE=sp1IDOv1vJlRX*Nn2kKA(+7&riDeKRo9 zI_ujuWZ@Xjq{AqVrkYU?aUZ@>ZYc$&OHZ0&(4p{x?gmVChZMadiY}}s`5`)B-5ek| z0KBZa26}lL2N`zoe(dgxC>sN(0b*`J$u&@;6gxar7WQxDK%J~Bx$WyARl&~gRv`~t ziuZpb?|6vB_|M7|-ANwVytv1L^Dh(weKfz1-FHBMorAVag!_h_8v2n|n3ua(lqTQ% zhmrxZ*}ZBEYh*dU=#LJ3j8fK^W7?{TOPic9c)z>_GdP$y5%-Bq75Y^pZ-WHmaqY#y~?^oo3{IE?cfO`DO(qh#t zxdhJhvC+uxtmW?3VsupUN=dsMdul&~6zANK38vu?%GT;@?6B}?SXiGB6M*Bs>WU73 zf1kJTGnKHQ6Q1YcGMdlz(PVC91?A!96na4RIwKKlB3sw~r*A|z0YY~|8a$HIRjU<( z_B=5xC^#KjuK|bXJ%Gwlo$B?Gap4Lag-NFepKDTy!3x)R2})yw$v=H3a1DH3_t~rO zoCxqt*0!?FNs}jz&^}+Op(CzPm5PCZUh?g1L73@P-}=l}M@F4uUST>b|Ba4S=bHw1TnX9F3~U7xA%k^9=67H7 z=FOicfG}`#2V}cPUdRY-gCkhkIU#foh)!Qm*m-61l?e)&vX5H{V7#6dab1#V24WjBKcgaJVylK90v|gct{f^UOWm3*F4iP7CJV7)s-bNONCB zx7La}&jTfLkxOGGwD(=vKmn zY(M3FGOa>5CQ<>}Caw#1SzO#Ut1yf}_8H++HeIjOja3+%Mkkp>I7q)T_Vv2XXt4I40ndOSTANoXYE%_K=hy0_Z4bW-yS@+30@Wpq0&Ip# zBlE)={p;^Hwx)*(2PzySD#0@g!^lX`+s0(6CBP}s44ODeRYJ{0vtR9l5hc_sJYSS6 zZ($z9&6SU9v@u@1cZcsT7~gwNEql*#xQ7RDVfX9!-S_`R*lDN1l|_8i8q*y%RpZ1khDz~yW8lp8_$42O_6^MM!$x)fUPJoGxLp8>Y-H0 ze%e^M(Y~<7G)%=b!w#6O!}!$*qfT|nKJ5$5ny;P#6>FWdQ6)D~Q!uhwadJl)=MKa@ zR5@sLo^=ZC9ufELf?r5cf15Y~Cd;!&?QPm;D{g97tAw)CU%4iF@i#cT4mpr; zv%s~IjERj3dsE%qO;-tozJ8--Oyyqa*c5b`(&mjEJDe^h_BBZnbw-$tjCk=L%hWi? zn9?0eSKqsvDw?qKWF%97%I5rgG_TrV1puQUEV<&WCkr{M!Ykk_Gw zscug|39wo{m#7O{uY(HW3MgLYh*+EfW&%h@7UON~pcz=>y)jFJFNSl;%IC!1nX{;^ z5lMxnLud41~Xk?bbmAtlL^y__zD@ zf1rI&sQ4G_?#2DA(`zuJt1`|o<}B1wJ|Fhr;2UqSO4%%^s)l)v z(v~h?rYhf3OUFE%gk?g+)|d&a6m5T)`&fm=d+X{*z!}9&kw#evw7TN+w1SWRBV5gW zoD;xSO?xf{|Hh5g3^N$G_$A
EHGCG4)&Aa@;%uh9nX>6Kv0xi2ufX4g;P2T&q? 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

3FAAhIkpswuZ*FZ+v)STBK@qp&nBiDez(;cz$ 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

hHA_T=Uqf$2yY|5#r>(zsZ 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 %N8rb%F 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%0A2DtWgvigL_IyDh_bmJtg1K+O~SEOdjP|Ap`e(= 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 @0ew_iwa;NY=3I@-@fNvC?9w)%J+YO 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%0DXz0?5C4Fj5_szo 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ÝxatGZ0&ue~jsG8B-*olE%yQpiE(~iBE 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 #+<#+~8f7oYOIxP_hDO!u_YB*n-r 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 literal 29154 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ΜS?**dD&dcWoMMwuFc`7xNX4hgjx78^ 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 diff --git a/src-tauri/icons/icon.png b/src-tauri/icons/icon.png index 8ee5d77e2bc266c1a06ab29bd5e06266583cbd7e..c17f374eaa3ddae0c558d6f7249258cbd1354eb1 100644 GIT binary patch literal 182335 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

M0-ea8gw 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 z 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π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 VrRYir6X*Z{002ovPDHLkV1j{e6uSTb literal 6611 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 L!}5Y+oFrZl9How4iu1DqAgj5${LxVdtl1fymM` z0rE3YWn`@w2N}D7{0p=NQ@2H*o4CM;03X=!f~CRlBuhXrw@R6gRD1$JPG@e7TM{E6 znp7Kb3QHwR;NR5&98e@E9(58+LzM+ME?nWJG|wqqk$4Qy!4*v!R^%8-nt+@QWrn<7 zOpAaoHNX*+IK1XbZgJ8eP}9Uy&9n~mk_9W+Nc}!9mFN~dOS>D^c_j0@d}FeR%WL90 ziKSr%7z3vH{Z&QD{S|ykSHeG?5%U3HFDU&?2-vy`J6Ex1Fw6sVcoR6k-m;#>g2W%L zw{j`w>1>!wlmwu75W@+uEIoP$HbCMitQSNj5EO)`3gsjj;IOc7Ed?m`F1wt^J%0xwvV#5Mkd0i27BI>H*b&qH!k-ATS(p?+}j#4pNe1VAO;_zhbQ! zVc#ck&+`$0vY>=)s7Lu73$wr(@DZ}_0-5l}^BX9hB<0+E+*mHSDtV6>wl#ZRfOY@J z6{zy9%Nz@Sk9c61_X3bOz_2DA@C94~Q@H(8K%ejn(hfjY2_+C#2`S~qImqsy_%%Xr gaYV&o@$fCc0HKMNv+_ob#3*kO#nl2Gkc;EWqrNZyp7x#~Kj-aTgKZ5u^tInNwi}#9+8N?W{I{ z!M0d}WPPGrnf`h985QA|K16o(hpbvyc zwl?eo`YI&I(2;EnKz&=}2{|1A6a)vYIiu> zEo`i{wXhWg!2`tF!b;Ib!a76H1R;Vm&BHhI4>SLOx0upRr+x%XD{BY+J|!GkQJS7< zq(jVZrc~X@%me}p)EpnTcmQsO8!H2af_w>lr&MyberkWHZvcK$o6S4dGK@ z$QBnAzL&XH_KS2}8ZXjzC^#$J1t{?6$dM#PmSK`uC^!W1wcjLnB2J9fdj4n5f8lzE?fLHC7oA*k zxSxXgfB*mh32;bRa{vGf6951U69E94oEQKA00(qQO+^Rj1`!c4D8DL@8UO$Q8FWQh zbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b00v@9M??Vs0RI60puMM)0004; zNklpH4KyZdZpGMc`5Ir-43sVKga09_TCSajB7AEzK zC?f>~In1IKO_GI7V!zeK019GUGG8gfdw>}D*$zg2udY_D+r!3WwJmPT_~3jvZe=79-`uCMsZpY zhp4>i$FLj65ack2demWF_XJ1iadHri;u?ZSJV11B#H~qKg($KriYhNgaij9~UEoH6 z3@lU{3mH=d-XKULjB*)3+TT;}x`F T)eO;000000NkvXXu0mjf*)n}E diff --git a/src-tauri/resources/icons/tray-32x32-color-active.png b/src-tauri/resources/icons/tray-32x32-color-active.png deleted file mode 100644 index 5602c620166e0a199605baa0e52504c928a6b1e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 636 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{>A{G5LY10)ANA4=K+ueB7ye%ygd(iyC3lM zJ?80s2twWWd3zu5bOY5q1S;U|xi7LOPjqjd@SZ%8J-Gt=3qvLp7v!YAhd?%W*L@Bk339-FfqIZjL_F^60Ud2!666=m@PGdM{R;E%+t>Fy z+&`axKH&fT`}+mz&nGAVLH>UrD?Ywqf4+i2!uii7S> z)+`$eUSHRBC}zlfdcaqjU1<3T}1$@L|4rSj-~oy8E78Elg&d-TEsyCFC#l zu;~=ZF0nRRbAkKh^tEgrvz=c>iY;YZw*P%Cp9ibNETN#87cvwoPBGdStW;=y?aSEqvW{~<9<^wtsg=f}v9t4IjgQu&X%Q~loCII}D355Uv diff --git a/src-tauri/resources/icons/tray-32x32-color.png b/src-tauri/resources/icons/tray-32x32-color.png deleted file mode 100644 index 7a809fb820b00bc0f3ba2676e64d77d69ce4ca5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 992 zcmV<610Vc}P)u> zEo`i{wXhWg!2`tF!b;Ib!a76H1R;Vm&BHhI4>SLOx0upRr+x%XD{BY+J|!GkQJS7< zq(jVZrc~X@%me}p)EpnTcmQsO8!H2af_w>lr&MyberkWHZvcK$o6S4dGK@ z$QBnAzL&XH_KS2}8ZXjzC^#$J1t{?6$dM#PmSK`uC^!W1wcjLnB2J9fdj4n5f8lzE?fLHC7oA*k zxSxXgfB*mh32;bRa{vGf6951U69E94oEQKA00(qQO+^Rj1`!b~3Y8|k;s5{u8FWQh zbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b00v@9M??Vs0RI60puMM)0005Y zNkluD>t+7dH*v#kqIN)Tiz}=YP)qEzUi2ZiZXGz({-=jSfm(3$P38e+S?J z)u{12027yB0iqUB;(7ok%)>a|AXrs`cT6DPcmO8KLJ#gC*hhn{zX1mjt?9)fEE5lJ zLmYxDbYu;k`F_>~X``=GYeX3dAV{JQeh2jdtxcK?uxsEo^gO_h>j7wQ{_;y-2vJu8 za38@2L~SCHYP_)kdR>fph?>DHM9rbdjQ~d&!wUrKD7V#=V-135j3U=q0Gnep{ZZS5 z6A13mWimhl6%OhnNSNM;ULk541u5zZwNKQm(bo`_*oGj9e&is40c{g(p~|(5i0f9I zLU4m?h_``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{^S6k5LX~wUtize-rn5Y+zJB_c1ueOL_lOu zp75SL(Y<*hdvXQ#7l?ouc@p~zB=%PWF%!rDiUAD=a)Gu384xbSx~ezF41vxvC<*clW)M)A-(avlKB0d9 zg#Y*N?-!^)ub_~ipinOmzrW#p{Qvy^f`WkldeGiXX*-KL!5?5cJu5!~RdChFs zqKrarTl4ovxDKEBW^B3r*n-@{{QT2?gqtkC@x=c{>N?MC1FmIZ8ZiH6BDq#5Eb&X$ znmA0mdvQUEY}Nvcx!h7gj7~4lwK`oqkaBB>_M6-3d7%tvJjw-|4I2(@TGLR-;Bp|f zp-|wkxVD4D{O<t<8 diff --git a/src-tauri/resources/icons/tray-32x32-gray.png b/src-tauri/resources/icons/tray-32x32-gray.png deleted file mode 100644 index 3352072feb94f8465f5317c3ba79444b45f326f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1001 zcmVu> zEo`i{wXhWg!2`tF!b;Ib!a76H1R;Vm&BHhI4>SLOx0upRr+x%XD{BY+J|!GkQJS7< zq(jVZrc~X@%me}p)EpnTcmQsO8!H2af_w>lr&MyberkWHZvcK$o6S4dGK@ z$QBnAzL&XH_KS2}8ZXjzC^#$J1t{?6$dM#PmSK`uC^!W1wcjLnB2J9fdj4n5f8lzE?fLHC7oA*k zxSxXgfB*mh32;bRa{vGf6951U69E94oEQKA00(qQO+^Rj1`!c67dv|2r2qf`8FWQh zbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b00v@9M??Vs0RI60puMM)0005h zNkl|(Xs>^9=CrR<=Eh>G?WqL!kim5AjqGiN%j6x2>o z&{jmnR`G?6&q6`0d?JjfqvGTEFHR9eCB;n!yzql0_gwf$ZfN_nsA(&@BEU#HcmaS}k0M;gTe>PxIP?=rx;gV!+f0BfNK;Ci#* zoxV~Gg%W`C1eTy?8Ht$d<_}=Ue=!L)V;F~;3H%8oz%Kf62gM>Pd^HtVfZ`T?`0gx# z&mNjSsBOYN6c^}n86b!M0qPUTxn79wp=K1n-l+R+eQNHVzJ{p8DinDL?HfvvMIMS3 zRE4$>aomanD9&&SwQDVrtc08wp&L2VjiQK`V%r~};NOBM0_24jcuNt19m__`Jx;W;bc*c!CfQumIn1NcD5tN!?Jo^Hchqf&j9)s@| zUm3*)Y9skCU{mUeNIQ;kg!W`I=@sJ7=qrlfnTY2>1Gt_iv%YyU6m@`qn70t|AY)zt X(+NqGuBlO_00000NkvXXu0mjfMZ~S6 diff --git a/src-tauri/resources/icons/tray-32x32-white-active.png b/src-tauri/resources/icons/tray-32x32-white-active.png deleted file mode 100644 index f674c43be1ef44a7bd27097ab9160a2beaacb0a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)-&!B?WB_6EID}m# zwxq@wLE66EK1(EeqE6Oa$+x6|WQyAt5T0CA~uK*W=a z%OU3jfH6zb-;0+&$Gt7T{;|utk6JV+K+^!wR(Zx8NU7>Q0NnR?QtuhFCJi3QCKW(K zQU-A*3D=*yXTL_|yZ{Itoh3lDw;CsIfd0YE0D&zroB(%x#%E^R{oio|DAL}|4$g-$ z{q};S*a5uf+PDZ#1dPcK5ZP-5W5OFV03d=BF*g7rJwWr~n1&AkN2?iG2Q+6LfZ-6Q zi0OoDH;i>4G+a;z!Yf-Js{`C1l@AiTvLyuww*@!knE((-j6i9g0KoL$;XE$@wndYQ bvEzOLPLA|Wsvzu> zEo`i{wXhWg!2`tF!b;Ib!a76H1R;Vm&BHhI4>SLOx0upRr+x%XD{BY+J|!GkQJS7< zq(jVZrc~X@%me}p)EpnTcmQsO8!H2af_w>lr&MyberkWHZvcK$o6S4dGK@ z$QBnAzL&XH_KS2}8ZXjzC^#$J1t{?6$dM#PmSK`uC^!W1wcjLnB2J9fdj4n5f8lzE?fLHC7oA*k zxSxXgfB*mh32;bRa{vGf6951U69E94oEQKA00(qQO+^Rj1`!c473V_S3jhEB8FWQh zbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b00v@9M??Vs0RI60puMM)0005M zNkl_LLkkfju}>jt8ML$tVlUchrEuCEC}=BU zB(35XY5clEL9F~lI8jf7CXWxyz;1B~Tg>i3UidY)|Am)hW_GtxRe+9;Hii{oS*x47 z0B}%;YA*mx=ni@AYNGN2z__mHFCj}2=AW)=NAd!|7M<01LSAaNaD7&}sr+p>nTk54gh*rqc(ar&LyVN1iO44np{d!7BUl+7ZW4fq5Ay0ImvV#aXp?8FQ z(Pt5VJ6_942#jb!y=XxrwI9X6I2!u1ppF7vW##W7Q#VzCpM<>7Oo{m;ah6mCnrds6 zkVQ=mn48jlLe}&v=}Rdvse2-pxvpk(O>2dMla;-e12cuc_(z0!uETYG7i5~(M}5$| zvSEA~ZPn;H3-N2&0;$)@Vqu-M>n^ZYOT?X0=AQqQalL{SGT?du0000Wpw5tb}Unm8Aq?YJSvSZNYMsB#5tu3_Dc zp4GWum5&Ut@!?gps+LInm+dqAULJT^iUAg&T}Zp0zd}) zI4?cTu?4`~o!U$TwHyHGMsv49ix~j!QZ?Wbp0Wk-adiL;>`@c1Zf0qi@&Ls}$4-jR zn*KM`L`BPa0D0kBPXr2cLT-Or+yO`sDyvl~h1#IKRQb5Bdui)~9b*9XpwyY+-~Cw=gY8vvy_?L}qu z1t4fSh)bz^8vp^O5p)bDw_yeVPD?Xo$us-G`tux54QsAE%{BQIU;qR(ide-`vB&@b N002ovPDHLkV1np9#ijrN literal 0 HcmV?d00001 diff --git a/src-tauri/src/app_config.rs b/src-tauri/src/app_config.rs index 731b54e53..8c0675732 100644 --- a/src-tauri/src/app_config.rs +++ b/src-tauri/src/app_config.rs @@ -6,7 +6,6 @@ use std::{ use log::LevelFilter; use serde::{Deserialize, Serialize}; use struct_patch::Patch; -use strum::{AsRefStr, EnumString}; use tauri::{AppHandle, Manager}; #[cfg(unix)] @@ -48,16 +47,6 @@ pub enum AppTheme { Dark, } -#[derive(AsRefStr, Clone, Copy, Debug, Deserialize, EnumString, PartialEq, Serialize)] -#[strum(serialize_all = "lowercase")] -#[serde(rename_all = "lowercase")] -pub enum AppTrayTheme { - Color, - White, - Black, - Gray, -} - // config stored in config.json in app data // config is loaded once at startup and saved when modified to the app data file // information's needed at startup of the application. @@ -65,7 +54,6 @@ pub enum AppTrayTheme { #[patch(attribute(derive(Debug, Deserialize, Serialize)))] pub struct AppConfig { pub theme: AppTheme, - pub tray_theme: AppTrayTheme, pub check_for_updates: bool, pub log_level: LevelFilter, /// In seconds. How much time after last network activity the connection is automatically dropped. @@ -80,7 +68,6 @@ impl Default for AppConfig { Self { theme: AppTheme::Light, check_for_updates: true, - tray_theme: AppTrayTheme::Color, log_level: LevelFilter::Info, peer_alive_period: 300, mtu: 0, diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index bdf0df357..9f5d24b85 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -1527,7 +1527,6 @@ pub async fn command_set_app_config( let app_state = app_handle.state::(); debug!("Command set app config received."); trace!("Command payload: {config_patch:?}"); - let tray_changed = config_patch.tray_theme.is_some(); let res = { let mut app_config = app_state.app_config.lock().unwrap(); app_config.apply(config_patch); @@ -1535,13 +1534,6 @@ pub async fn command_set_app_config( app_config.clone() }; info!("Config changed successfully"); - if tray_changed { - debug!("Tray theme included in config change, tray will be updated."); - match configure_tray_icon(&app_handle).await { - Ok(()) => debug!("Tray updated upon config change"), - Err(err) => error!("Tray change failed. Reason: {err}"), - } - } if emit_event { match app_handle.emit(EventKey::ApplicationConfigChanged.into(), ()) { Ok(()) => debug!("Config changed event emitted successfully"), diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index 5f9417391..daa0bf0f1 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -280,16 +280,12 @@ pub fn handle_tray_menu_event(app: &AppHandle, event: MenuEvent) { /// Show correct system tray icon, depending on the theme and connection status. pub async fn configure_tray_icon(app_handle: &AppHandle) -> Result<(), Error> { - let state = app_handle.state::(); - let theme = state.app_config.lock().unwrap().tray_theme; - let Some(tray_icon) = app_handle.tray_by_id(TRAY_ICON_ID) else { error!("System tray menu not initialized."); return Ok(()); }; - let mut resource_str = String::from("resources/icons/tray-32x32-"); - resource_str.push_str(theme.as_ref()); + let mut resource_str = String::from("resources/icons/tray-32x32"); let active_connections = ACTIVE_CONNECTIONS.lock().await; if !active_connections.is_empty() { resource_str.push_str("-active"); diff --git a/src/pages/client/clientAPI/types.ts b/src/pages/client/clientAPI/types.ts index b6439509a..9b8f26709 100644 --- a/src/pages/client/clientAPI/types.ts +++ b/src/pages/client/clientAPI/types.ts @@ -43,10 +43,6 @@ export type SaveTunnelRequest = { response: CreateDeviceResponse; }; -export type TrayIconTheme = 'color' | 'white' | 'black' | 'gray'; - -export const availableTrayThemes: TrayIconTheme[] = ['color', 'white', 'gray', 'black']; - export type LogLevel = 'ERROR' | 'INFO' | 'DEBUG' | 'TRACE' | 'WARN'; export const availableLogLevels: LogLevel[] = ['ERROR', 'WARN', 'INFO', 'DEBUG', 'TRACE']; @@ -77,7 +73,6 @@ export type InterfaceLogsRequest = { export type AppConfig = { theme: ThemeKey; log_level: LogLevel; - tray_theme: TrayIconTheme; check_for_updates: boolean; peer_alive_period: number; mtu: number; diff --git a/src/pages/client/hooks/useClientStore.tsx b/src/pages/client/hooks/useClientStore.tsx index a722d8c5c..fca2b30f7 100644 --- a/src/pages/client/hooks/useClientStore.tsx +++ b/src/pages/client/hooks/useClientStore.tsx @@ -32,7 +32,6 @@ const defaultValues: StoreValues = { appConfig: { log_level: 'INFO', theme: 'light', - tray_theme: 'color', check_for_updates: true, peer_alive_period: 300, mtu: 0, diff --git a/src/pages/client/pages/ClientSettingsPage/components/GlobalSettingsTab/GlobalSettingsTab.tsx b/src/pages/client/pages/ClientSettingsPage/components/GlobalSettingsTab/GlobalSettingsTab.tsx index 8f2ff8a5f..824976065 100644 --- a/src/pages/client/pages/ClientSettingsPage/components/GlobalSettingsTab/GlobalSettingsTab.tsx +++ b/src/pages/client/pages/ClientSettingsPage/components/GlobalSettingsTab/GlobalSettingsTab.tsx @@ -34,9 +34,7 @@ import { import { type AppConfig, availableLogLevels, - availableTrayThemes, type LogLevel, - type TrayIconTheme, } from '../../../../clientAPI/types'; import { useClientStore } from '../../../../hooks/useClientStore'; @@ -70,10 +68,6 @@ export const GlobalSettingsTab = () => { .string() .min(1, LL.form.errors.required()) .refine((v) => availableLogLevels.includes(v as LogLevel)), - tray_theme: z - .string() - .min(1, LL.form.errors.required()) - .refine((v) => availableTrayThemes.includes(v as TrayIconTheme)), check_for_updates: z.boolean(), peer_alive_period: z .number({ @@ -122,10 +116,6 @@ export const GlobalSettingsTab = () => {

{localLL.versionUpdate.title()}

-
-

{localLL.tray.title()}

- -

{localLL.logging.title()}

@@ -275,64 +265,6 @@ const LoggingLevelSelect = ({ controller }: FormMemberProps) => { ); }; -const TrayIconThemeSelect = ({ controller }: FormMemberProps) => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.settingsPage.tabs.global; - - const trayThemeSelectOptions = useMemo((): SelectOption[] => { - const res: SelectOption[] = [ - { - label: localLL.tray.options.color(), - value: 'color', - key: 0, - }, - { - value: 'gray', - key: 1, - label: localLL.tray.options.gray(), - }, - { - value: 'white', - key: 2, - label: localLL.tray.options.white(), - }, - { - value: 'black', - key: 3, - label: localLL.tray.options.black(), - }, - ]; - return res; - }, [localLL.tray.options]); - - const renderSelectedTrayTheme = useCallback( - (theme: TrayIconTheme): SelectSelectedValue => { - const option = trayThemeSelectOptions.find((t) => t.value === theme); - if (option) { - return { - key: option.key, - displayValue: option.label, - }; - } - return { - key: 'color', - displayValue: 'color', - }; - }, - [trayThemeSelectOptions], - ); - - return ( - - ); -}; - const CheckForUpdatesOption = ({ controller }: FormMemberProps) => { const { LL } = useI18nContext(); const localLL = LL.pages.client.pages.settingsPage.tabs.global; From 8a3d399dcb322fdb669d870238018dc665038c59 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 29 May 2026 13:44:22 +0200 Subject: [PATCH 032/155] macOS: new UI window should not be resizeable (#929) --- package.json | 6 +- pnpm-lock.yaml | 124 +++++++++--------- src-tauri/Cargo.lock | 68 +++++----- src-tauri/src/window_manager/macos.rs | 23 ++-- .../VPNExtension.xcodeproj/project.pbxproj | 2 + 5 files changed, 109 insertions(+), 114 deletions(-) diff --git a/package.json b/package.json index ab4d56fe4..e227879df 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "classnames": "^2.5.1", "clsx": "^2.1.1", "compare-versions": "^6.1.1", - "dayjs": "^1.11.20", + "dayjs": "^1.11.21", "deepmerge-ts": "^7.1.5", "detect-browser": "^5.3.0", "fast-deep-equal": "^3.1.3", @@ -94,10 +94,10 @@ "rxjs": "^7.8.2", "use-breakpoint": "^4.0.10", "zod": "^3.25.76", - "zustand": "^5.0.13" + "zustand": "^5.0.14" }, "devDependencies": { - "@biomejs/biome": "^2.4.15", + "@biomejs/biome": "^2.4.16", "@hookform/devtools": "^4.4.0", "@svgr/cli": "^8.1.0", "@tanstack/react-query": "^5.100.14", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b09b936b5..ef2303d41 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,8 +84,8 @@ importers: specifier: ^6.1.1 version: 6.1.1 dayjs: - specifier: ^1.11.20 - version: 1.11.20 + specifier: ^1.11.21 + version: 1.11.21 deepmerge-ts: specifier: ^7.1.5 version: 7.1.5 @@ -183,12 +183,12 @@ importers: specifier: ^3.25.76 version: 3.25.76 zustand: - specifier: ^5.0.13 - version: 5.0.13(@types/react@19.2.15)(immer@11.1.8)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)) + specifier: ^5.0.14 + version: 5.0.14(@types/react@19.2.15)(immer@11.1.8)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)) devDependencies: '@biomejs/biome': - specifier: ^2.4.15 - version: 2.4.15 + specifier: ^2.4.16 + version: 2.4.16 '@hookform/devtools': specifier: ^4.4.0 version: 4.4.0(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -342,59 +342,59 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@biomejs/biome@2.4.15': - resolution: {integrity: sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw==} + '@biomejs/biome@2.4.16': + resolution: {integrity: sha512-x9ajFh1zChVybCiM3TN6OD4phAqLgtPZjFrZF+aTMYCPjwBO+k529TX7PPsAqtGNLeV4UgzwQnowEgS7bGmzcA==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.4.15': - resolution: {integrity: sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg==} + '@biomejs/cli-darwin-arm64@2.4.16': + resolution: {integrity: sha512-wxPvu4XOA85YJk9ixSWUmq/QBHbid85BISbOAqqBM/5xQpPk9ayjk5375tOlSC0BeCwNSbPFafQBm+vBumXq0A==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.4.15': - resolution: {integrity: sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ==} + '@biomejs/cli-darwin-x64@2.4.16': + resolution: {integrity: sha512-xFCqGPwYusQJp4N4NJLi1XJiZqjwFdjhT+KqtNy+Ug3qgfczqnTa6MSDvxJF6TkuDLoYJItMapz6tAf7kCekFw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.4.15': - resolution: {integrity: sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ==} + '@biomejs/cli-linux-arm64-musl@2.4.16': + resolution: {integrity: sha512-oYxnW0ARfJkr72ezzF2OR8N/rtkgLUQeYtF8cFhVswbknHxtTcmzSsanVJP8yQKnGpGpc2ck6c5zLvHahL6Cbg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.4.15': - resolution: {integrity: sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug==} + '@biomejs/cli-linux-arm64@2.4.16': + resolution: {integrity: sha512-2kFb4//jxfZaP6D+Rj5VkHkxgyD9EoRAVBEQb8PKRv+s4NO2zYNJKXFaJmK1CmhufJOWEfpHKaRbOja7qjmdhQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.4.15': - resolution: {integrity: sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w==} + '@biomejs/cli-linux-x64-musl@2.4.16': + resolution: {integrity: sha512-iHDS+MCM65DPqWGu+ECC3uoALyj2H7F4nVUPxIPjz/PIl94EUu+EDfGZDzFP+NY1EOPVt9NQvwFqq7HdMmowdg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.4.15': - resolution: {integrity: sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g==} + '@biomejs/cli-linux-x64@2.4.16': + resolution: {integrity: sha512-NbcBbi/nJqn5baae6wqRXdS7Gadf2uRpehSh6vMSYpG8OhkXl/Xg8aorWrJ+9VWqAT5ml90alLvorkpMW0nBwQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.4.15': - resolution: {integrity: sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w==} + '@biomejs/cli-win32-arm64@2.4.16': + resolution: {integrity: sha512-0rgImMsNb5v/chhkIFe3wu7PEFClS6RBAYUijGL9UsYN3PanSaoK24HSSuSJb1pYbYYVjzAyZTl3gtjJ84BM8A==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.4.15': - resolution: {integrity: sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ==} + '@biomejs/cli-win32-x64@2.4.16': + resolution: {integrity: sha512-Kp85jgoBHa05gix6UIRjfCDiUV3w/8VIdZ247VyyO2gEjaw12WEVhdIjlxp/AMzXxqxQwbxNTDVZ3Mwd2RG5rw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -1461,8 +1461,8 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.14: - resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} + brace-expansion@1.1.15: + resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} brace-expansion@2.1.1: resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} @@ -1681,8 +1681,8 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - dayjs@1.11.20: - resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} + dayjs@1.11.21: + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} @@ -1765,8 +1765,8 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - electron-to-chromium@1.5.361: - resolution: {integrity: sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==} + electron-to-chromium@1.5.363: + resolution: {integrity: sha512-VjUKPyWzGnT1fujlkEGC/BvN70Hh70KXtAqcmniXviYlJC/ivcT+BWGPyxWVbJZLfvtKR6dqg1L7T7pgAMBtWA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3020,8 +3020,8 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-typed-array@1.1.20: - resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} + which-typed-array@1.1.21: + resolution: {integrity: sha512-zbRA8cVm6io/d5W8uIe2hblzN76/Wm3v/yiythQvr+dpBWeqhPSWIDNj4zOyHi4zKbMK6DN34Xsr9jPHJERAEw==} engines: {node: '>= 0.4'} which@1.3.1: @@ -3062,8 +3062,8 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zustand@5.0.13: - resolution: {integrity: sha512-efI2tVaVQPqtOh114loML/Z80Y4NP3yc+Ff0fYiZJPauNeWZeIp/bRFD7I9bfmCOYBh/PHxlglQ9+wvlwnPikQ==} + zustand@5.0.14: + resolution: {integrity: sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -3199,39 +3199,39 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@biomejs/biome@2.4.15': + '@biomejs/biome@2.4.16': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.4.15 - '@biomejs/cli-darwin-x64': 2.4.15 - '@biomejs/cli-linux-arm64': 2.4.15 - '@biomejs/cli-linux-arm64-musl': 2.4.15 - '@biomejs/cli-linux-x64': 2.4.15 - '@biomejs/cli-linux-x64-musl': 2.4.15 - '@biomejs/cli-win32-arm64': 2.4.15 - '@biomejs/cli-win32-x64': 2.4.15 - - '@biomejs/cli-darwin-arm64@2.4.15': + '@biomejs/cli-darwin-arm64': 2.4.16 + '@biomejs/cli-darwin-x64': 2.4.16 + '@biomejs/cli-linux-arm64': 2.4.16 + '@biomejs/cli-linux-arm64-musl': 2.4.16 + '@biomejs/cli-linux-x64': 2.4.16 + '@biomejs/cli-linux-x64-musl': 2.4.16 + '@biomejs/cli-win32-arm64': 2.4.16 + '@biomejs/cli-win32-x64': 2.4.16 + + '@biomejs/cli-darwin-arm64@2.4.16': optional: true - '@biomejs/cli-darwin-x64@2.4.15': + '@biomejs/cli-darwin-x64@2.4.16': optional: true - '@biomejs/cli-linux-arm64-musl@2.4.15': + '@biomejs/cli-linux-arm64-musl@2.4.16': optional: true - '@biomejs/cli-linux-arm64@2.4.15': + '@biomejs/cli-linux-arm64@2.4.16': optional: true - '@biomejs/cli-linux-x64-musl@2.4.15': + '@biomejs/cli-linux-x64-musl@2.4.16': optional: true - '@biomejs/cli-linux-x64@2.4.15': + '@biomejs/cli-linux-x64@2.4.16': optional: true - '@biomejs/cli-win32-arm64@2.4.15': + '@biomejs/cli-win32-arm64@2.4.16': optional: true - '@biomejs/cli-win32-x64@2.4.15': + '@biomejs/cli-win32-x64@2.4.16': optional: true '@emotion/babel-plugin@11.13.5': @@ -4147,7 +4147,7 @@ snapshots: boolbase@1.0.0: {} - brace-expansion@1.1.14: + brace-expansion@1.1.15: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 @@ -4164,7 +4164,7 @@ snapshots: dependencies: baseline-browser-mapping: 2.10.32 caniuse-lite: 1.0.30001793 - electron-to-chromium: 1.5.361 + electron-to-chromium: 1.5.363 node-releases: 2.0.46 update-browserslist-db: 1.2.3(browserslist@4.28.2) @@ -4363,7 +4363,7 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - dayjs@1.11.20: {} + dayjs@1.11.21: {} debug@4.4.3: dependencies: @@ -4449,7 +4449,7 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - electron-to-chromium@1.5.361: {} + electron-to-chromium@1.5.363: {} emoji-regex@8.0.0: {} @@ -4516,7 +4516,7 @@ snapshots: typed-array-byte-offset: 1.0.4 typed-array-length: 1.0.7 unbox-primitive: 1.1.0 - which-typed-array: 1.1.20 + which-typed-array: 1.1.21 es-define-property@1.0.1: {} @@ -4899,7 +4899,7 @@ snapshots: is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.20 + which-typed-array: 1.1.21 is-weakmap@2.0.2: {} @@ -5226,7 +5226,7 @@ snapshots: minimatch@3.1.5: dependencies: - brace-expansion: 1.1.14 + brace-expansion: 1.1.15 minimatch@5.1.9: dependencies: @@ -6004,7 +6004,7 @@ snapshots: isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.20 + which-typed-array: 1.1.21 which-collection@1.0.2: dependencies: @@ -6013,7 +6013,7 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 - which-typed-array@1.1.20: + which-typed-array@1.1.21: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.9 @@ -6057,7 +6057,7 @@ snapshots: zod@3.25.76: {} - zustand@5.0.13(@types/react@19.2.15)(immer@11.1.8)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)): + zustand@5.0.14(@types/react@19.2.15)(immer@11.1.8)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)): optionalDependencies: '@types/react': 19.2.15 immer: 11.1.8 diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 1015b0d5b..ad6706a26 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -708,9 +708,9 @@ dependencies = [ [[package]] name = "brotli" -version = "8.0.2" +version = "8.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +checksum = "8119e4516436f5708bbc474a9d395bf12f1b5395e93a92a56e647ac3388c8610" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -719,9 +719,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "5.0.0" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +checksum = "5962523e1b92ce1b5e793d9169b9943eece10d39f62550bc04bb605d75b94924" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -872,9 +872,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "jobserver", @@ -1691,9 +1691,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -2768,9 +2768,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "eb92f162bf56536459fc83c79b974bb12837acfed43d6bc370a7916d0ae15ecc" dependencies = [ "atomic-waker", "bytes", @@ -3394,14 +3394,14 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" +checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ "bitflags 2.11.1", "libc", "plain", - "redox_syscall 0.7.5", + "redox_syscall 0.8.0", ] [[package]] @@ -3557,9 +3557,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -4640,7 +4640,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.11+spec-1.1.0", + "toml_edit 0.25.12+spec-1.1.0", ] [[package]] @@ -4974,9 +4974,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4666a1a60d8412eab19d94f6d13dcc9cea0a5ef4fdf6a5db306537413c661b1b" +checksum = "7c7591fa2c6b601dfcfe5f043f65a1c39fcdf50efefcd7f1572e538c1f4b398d" dependencies = [ "bitflags 2.11.1", ] @@ -5742,9 +5742,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" @@ -5817,9 +5817,9 @@ checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -6143,18 +6143,18 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "struct-patch" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0dd3602dc475cc00732da8b54a79d1aec0843b3ecfa3a1efcbf8ff00e181a5" +checksum = "7d0dafd40527e4b2dd640c4272d51d0e2e838e9345db4fab06c86c501fe8bc5e" dependencies = [ "struct-patch-derive", ] [[package]] name = "struct-patch-derive" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97409f38bb9816c7606c9ba860b2bb26f0bd1d5b4254b7fc26aa827af6af760c" +checksum = "970378c47245454d5899f4aae1ed2ad9698f756ebbfc8589bd63b54f56af86ff" dependencies = [ "proc-macro2", "quote", @@ -6258,9 +6258,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.39.2" +version = "0.39.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14311e7e9a03114cd4b65eedd54e8fed2945e17f08586ae97ef53bc0669f9581" +checksum = "21d0d938c10fcda3e897e28aaddf4ab462375d411f4378cd63b1c945f69aba96" dependencies = [ "libc", "memchr", @@ -7162,9 +7162,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.11+spec-1.1.0" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap 2.14.0", "toml_datetime 1.1.1+spec-1.1.0", @@ -9226,18 +9226,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "bce33a6288fa3f072a8c2c7d0f2fdbb90e28298f0135c1f99b96c3db2efcc60b" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "8fd425244944f4ab65ccff928e7323354c5a018c75838362fdce749dfad2ee1e" dependencies = [ "proc-macro2", "quote", diff --git a/src-tauri/src/window_manager/macos.rs b/src-tauri/src/window_manager/macos.rs index 42da58de4..aebb24a3a 100644 --- a/src-tauri/src/window_manager/macos.rs +++ b/src-tauri/src/window_manager/macos.rs @@ -1,28 +1,21 @@ -#![allow(deprecated)] - -use objc2_app_kit::{ - NSClosableWindowMask, NSFullSizeContentViewWindowMask, NSMiniaturizableWindowMask, - NSResizableWindowMask, NSTitledWindowMask, NSWindow, NSWindowButton, -}; +use objc2_app_kit::{NSWindow, NSWindowButton, NSWindowStyleMask}; use tauri::{ AppHandle, LogicalPosition, LogicalSize, Manager, Monitor, Position, Runtime, WebviewWindow, }; use crate::{appstate::AppState, window_manager::WINDOW_GAP}; -pub fn enable_rounded_corners(window: &WebviewWindow) -> Result<(), String> { +/// Enforce rounded window corners. Not yet available in Tauri. +pub(crate) fn enable_rounded_corners(window: &WebviewWindow) -> Result<(), String> { window .with_webview(move |webview| { let ns_window = unsafe { &*webview.ns_window().cast::() }; - let mut style_mask = ns_window.styleMask(); - // Add necessary styles for rounded corners. - style_mask |= NSFullSizeContentViewWindowMask; - style_mask |= NSTitledWindowMask; - style_mask |= NSClosableWindowMask; - style_mask |= NSMiniaturizableWindowMask; - style_mask |= NSResizableWindowMask; - + let style_mask = ns_window.styleMask() + | NSWindowStyleMask::Borderless + | NSWindowStyleMask::Titled + | NSWindowStyleMask::Closable + | NSWindowStyleMask::Miniaturizable; ns_window.setStyleMask(style_mask); ns_window.setTitlebarAppearsTransparent(true); diff --git a/swift/extension/VPNExtension.xcodeproj/project.pbxproj b/swift/extension/VPNExtension.xcodeproj/project.pbxproj index 8ad5e3e37..04aa0ecb5 100644 --- a/swift/extension/VPNExtension.xcodeproj/project.pbxproj +++ b/swift/extension/VPNExtension.xcodeproj/project.pbxproj @@ -227,6 +227,7 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 82GZ7KN29J; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -237,6 +238,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CODE_SIGN_FLAGS = "--timestamp"; STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_OBJC_BRIDGING_HEADER = "$(PROJECT_DIR)/BoringTun/defguard_boringtunFFI.h"; }; From f1dcb8ad94b1af9ea9f6e178255b5cceff04f666 Mon Sep 17 00:00:00 2001 From: Jacek Chmielewski Date: Fri, 29 May 2026 14:10:04 +0200 Subject: [PATCH 033/155] Mfa loader (#928) Display a loader when posture checks are being evaluated to avoid blinking MFA screen. --- .../LocationCard/hooks/useMfaConnect.ts | 22 +++++++++++++++++-- .../LocationCardMfaEmailView.tsx | 13 ++++++++++- .../LocationCardMfaStartLoader.tsx | 14 ++++++++++++ .../LocationCardMfaStartLoader/style.scss | 15 +++++++++++++ .../LocationCardMfaTotpView.tsx | 14 +++++++++++- 5 files changed, 74 insertions(+), 4 deletions(-) create mode 100644 new-ui/src/shared/components/LocationCard/views/LocationCardMfaStartLoader/LocationCardMfaStartLoader.tsx create mode 100644 new-ui/src/shared/components/LocationCard/views/LocationCardMfaStartLoader/style.scss diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts index 67c52e72d..fabfb5af4 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts @@ -24,11 +24,25 @@ type MfaErrorResponse = { type CodeMfaStartMethod = Extract; -export const useMfaConnect = (method: CodeMfaStartMethod) => { +type UseMfaConnectOptions = { + debounceMs?: number; +}; + +const waitForMinimumDuration = async (startedAt: number, minimumMs: number) => { + const remainingMs = Math.max(minimumMs - (performance.now() - startedAt), 0); + if (remainingMs === 0) return; + + await new Promise((resolve) => window.setTimeout(resolve, remainingMs)); +}; + +export const useMfaConnect = ( + method: CodeMfaStartMethod, + { debounceMs = 0 }: UseMfaConnectOptions = {}, +) => { const { location, setPostureError, setView } = useLocationCardContext(); const [token, setToken] = useState(null); - const [isStarting, setIsStarting] = useState(false); + const [isStarting, setIsStarting] = useState(debounceMs > 0); const [startError, setStartError] = useState(null); const [isVerifying, setIsVerifying] = useState(false); const [verifyError, setVerifyError] = useState(null); @@ -55,7 +69,9 @@ export const useMfaConnect = (method: CodeMfaStartMethod) => { // biome-ignore lint/correctness/useExhaustiveDependencies: intentional one-shot trigger via startCalled ref useEffect(() => { if (!instance || startCalled.current) return; + startCalled.current = true; + const startedAt = performance.now(); setIsStarting(true); @@ -66,9 +82,11 @@ export const useMfaConnect = (method: CodeMfaStartMethod) => { location, method, }); + await waitForMinimumDuration(startedAt, debounceMs); setRequestHeaders(headers); setToken(response.token); } catch (err) { + await waitForMinimumDuration(startedAt, debounceMs); if (handleMfaStartError({ err, location, setPostureError, setView })) { return; } diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx index 633578d8c..bc9f938de 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx @@ -15,11 +15,17 @@ import { LocationViewHeader } from '../../components/LocationViewHeader/Location import { useLocationCardContext } from '../../context/context'; import { LocationCardViews } from '../../context/types'; import { useMfaConnect } from '../../hooks/useMfaConnect'; +import { LocationCardMfaStartLoader } from '../LocationCardMfaStartLoader/LocationCardMfaStartLoader'; + +const MIN_POSTURE_LOADER_MS = 500; export const LocationCardMfaEmailView = () => { - const { setView } = useLocationCardContext(); + const { setView, location } = useLocationCardContext(); const { verifyCode, isVerifying, verifyError, isStarting, startError } = useMfaConnect( MfaStartMethod.Email, + { + debounceMs: location.posture_check_required ? MIN_POSTURE_LOADER_MS : 0, + }, ); const [emailCode, setEmailCode] = useState(null); @@ -47,6 +53,11 @@ export const LocationCardMfaEmailView = () => { if (verifyError) setError(verifyError); }, [verifyError]); + // Show loader when posture is being evaluated + const showLoader = location.posture_check_required && isStarting && !startError; + if (showLoader) { + return ; + } return (
( +
+ +
+ +

Checking device requirements...

+
+
+); diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaStartLoader/style.scss b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaStartLoader/style.scss new file mode 100644 index 000000000..6dd24ee28 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaStartLoader/style.scss @@ -0,0 +1,15 @@ +.mfa-start-loader { + > .loader-content { + display: flex; + min-height: 140px; + flex-direction: column; + align-items: center; + justify-content: center; + gap: var(--spacing-md); + + p { + font: var(--t-body-xs-500); + color: var(--fg-white-70); + } + } +} diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx index 4bb2ff29d..d0eebdca7 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx @@ -15,11 +15,17 @@ import { LocationViewHeader } from '../../components/LocationViewHeader/Location import { useLocationCardContext } from '../../context/context'; import { LocationCardViews } from '../../context/types'; import { useMfaConnect } from '../../hooks/useMfaConnect'; +import { LocationCardMfaStartLoader } from '../LocationCardMfaStartLoader/LocationCardMfaStartLoader'; + +const MIN_POSTURE_LOADER_MS = 500; export const LocationCardMfaTotpView = () => { - const { setView } = useLocationCardContext(); + const { setView, location } = useLocationCardContext(); const { verifyCode, isVerifying, verifyError, isStarting, startError } = useMfaConnect( MfaStartMethod.Totp, + { + debounceMs: location.posture_check_required ? MIN_POSTURE_LOADER_MS : 0, + }, ); const [totpCode, setTotpCode] = useState(null); @@ -47,6 +53,12 @@ export const LocationCardMfaTotpView = () => { if (verifyError) setError(verifyError); }, [verifyError]); + // Show loader when posture is being evaluated + const showLoader = location.posture_check_required && isStarting && !startError; + if (showLoader) { + return ; + } + return (
Date: Tue, 2 Jun 2026 13:19:15 +0200 Subject: [PATCH 034/155] Fix posture errors icon and spacing (#931) --- .../LocationCard/images/NoConnectionIcon.tsx | 27 +++++++++++++++++++ .../LocationCardPostureCheckFailView.tsx | 14 ++++------ 2 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 new-ui/src/shared/components/LocationCard/images/NoConnectionIcon.tsx diff --git a/new-ui/src/shared/components/LocationCard/images/NoConnectionIcon.tsx b/new-ui/src/shared/components/LocationCard/images/NoConnectionIcon.tsx new file mode 100644 index 000000000..042cc62c0 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/images/NoConnectionIcon.tsx @@ -0,0 +1,27 @@ +import type { SVGProps } from 'react'; + +export const NoConnectionIcon = (props: SVGProps) => ( + + + + +); diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/LocationCardPostureCheckFailView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/LocationCardPostureCheckFailView.tsx index bdc59c1f3..988d807b8 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/LocationCardPostureCheckFailView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardPostureCheckFailView/LocationCardPostureCheckFailView.tsx @@ -1,13 +1,13 @@ import './style.scss'; -import { ThemeSpacing, ThemeVariable } from '../../../../types'; +import { ThemeSpacing } from '../../../../types'; import { Button } from '../../../Button/Button'; import { ButtonVariant } from '../../../Button/types'; import { Divider } from '../../../Divider/Divider'; -import { Icon, IconKind } from '../../../Icon'; import { SizedBox } from '../../../SizedBox/SizedBox'; import { LocationViewHeader } from '../../components/LocationViewHeader/LocationViewHeader'; import { useLocationCardContext } from '../../context/context'; import { LocationCardViews } from '../../context/types'; +import { NoConnectionIcon } from '../../images/NoConnectionIcon'; export const LocationCardPostureCheckFailView = () => { const { postureError, setPostureError, setView } = useLocationCardContext(); @@ -27,13 +27,9 @@ export const LocationCardPostureCheckFailView = () => { return (
- - + + +
{postureErrors.map((error) => ( From bd56518fadc87cec1e6f17af3d7e477fad5c0cfd Mon Sep 17 00:00:00 2001 From: Maciek <19913370+wojcik91@users.noreply.github.com> Date: Wed, 10 Jun 2026 12:05:02 +0200 Subject: [PATCH 035/155] split the Rust code into smaller, Tauri-independent crates in preparation for adding CLI (#933) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * setup proto crate * migrate proto conversion module * use new proto crate * scaffold core crate * migrate shared code to core crate * extract version constants and into_location into core crate * move app_config and wg_config into core, decouple AppHandle from config I/O * extract proxy HTTP client * extract daemon gRPC client * extract non-macOS connection setup into core * split macOS-only extension management into a dedicated module in core * setup unified connection interface * setup entirprise crates directory and migrate posture checks * migrate provisioning module * migrate config sync module to a crate * migrate service locations * scaffold service daemon crate * migrate service binary * cleanup * fix tauri build * cleanup * merge nix package update from main * cleanup * expose other binaries as nix packages * make config polling independent from tauri * consolidate crate names and workspace dependencies * clean up windows dependencies * windows, oh windows * for the love of Bill Gates * fix import * update Windows query cache * macos fixes * Build on macOS * bump react-router to resolve CVE * remove stale advisories * update crate names * fix license name for enterprise crates * remove redundant fields * shorten imports * pre-review cleanup * add common helpers tests * update flaky Linux text * add more conversions tests * add more core logic tests * add basic round-trip tests for core models * add unit tests for provisioning config loading and config-sync version checks * move select_reported_app_version into core crate with its tests * reuse workspace license file * update query cache * update hash * update windows query cache * Fix build on macOS * reuse workspace license file * Fix build on macOS * cleanup * cleanup2 * fix macos disconnect * fix message formatting * more cleanup * one step closer... * Fix build on macOS * test a cross-platform check * temporarily disable sccache * restore sccache * bump sccache action version * try skipping failing install * another workaround * Revert "another workaround" This reverts commit 4c6f43b472be1fe5d8e9312e3c04e2ab00a99e19. * setup cargo * remove duplicate helper * fix formatting --------- Co-authored-by: Maciej Wójcik Co-authored-by: Adam Ciarciński --- .github/workflows/cross-platform-check.yml | 63 ++ .github/workflows/test.yml | 2 +- LICENSE.md | 4 +- flake.lock | 28 +- flake.nix | 42 +- nix/nixos-module.nix | 46 +- nix/package.nix | 181 ++-- nix/shell.nix | 14 +- package.json | 2 +- pnpm-lock.yaml | 28 +- ...b3667b753fb0b4b4c10d9d497b8f403ccb89d.json | 74 ++ src-tauri/Cargo.lock | 412 +++++--- src-tauri/Cargo.toml | 41 +- src-tauri/build.rs | 23 - src-tauri/cli/Cargo.toml | 2 +- src-tauri/cli/src/bin/dg.rs | 1 + src-tauri/client-proto/Cargo.toml | 27 + src-tauri/client-proto/build.rs | 26 + src-tauri/client-proto/src/conversions.rs | 187 ++++ .../proto.rs => client-proto/src/lib.rs} | 26 +- src-tauri/client-proto/src/posture_ext.rs | 143 +++ src-tauri/common/Cargo.toml | 2 +- src-tauri/common/src/lib.rs | 79 ++ src-tauri/core/Cargo.toml | 53 + src-tauri/{ => core}/src/app_config.rs | 119 ++- .../src/connection}/active_connections.rs | 23 +- .../core/src/connection/daemon_client.rs | 67 ++ src-tauri/core/src/connection/mod.rs | 7 + src-tauri/core/src/connection/setup.rs | 411 ++++++++ src-tauri/{ => core}/src/database/mod.rs | 4 +- .../src/database/models/connection.rs | 120 ++- .../src/database/models/instance.rs | 179 +++- .../src/database/models/location.rs | 171 +++- .../src/database/models/location_stats.rs | 93 +- .../{ => core}/src/database/models/mod.rs | 2 + .../src/database/models/settings.rs | 0 .../{ => core}/src/database/models/tunnel.rs | 103 +- .../database/models/tunnel_configuration.rs | 617 +++++++++++ .../src/database/models/wireguard_keys.rs | 0 src-tauri/{ => core}/src/error.rs | 2 +- src-tauri/core/src/events.rs | 36 + src-tauri/core/src/lib.rs | 278 +++++ src-tauri/core/src/proxy.rs | 46 + src-tauri/core/src/version.rs | 43 + src-tauri/{ => core}/src/wg_config.rs | 0 src-tauri/daemon/Cargo.toml | 42 + .../{ => daemon}/src/bin/defguard-service.rs | 4 +- src-tauri/daemon/src/config.rs | 23 + .../{src/service => daemon/src}/daemon.rs | 82 +- src-tauri/daemon/src/error.rs | 13 + src-tauri/daemon/src/lib.rs | 12 + .../{src/service => daemon/src}/named_pipe.rs | 1 + src-tauri/daemon/src/utils.rs | 39 + .../{src/service => daemon/src}/windows.rs | 18 +- src-tauri/deny.toml | 28 +- src-tauri/{src => }/enterprise/LICENSE.md | 0 src-tauri/enterprise/config-sync/Cargo.toml | 27 + .../enterprise/config-sync/src/commands.rs | 256 +++++ src-tauri/enterprise/config-sync/src/lib.rs | 386 +++++++ src-tauri/enterprise/posture/Cargo.toml | 29 + .../posture/src}/inspector/linux.rs | 0 .../posture/src}/inspector/macos.rs | 0 .../enterprise/posture/src/inspector/mod.rs | 135 +++ .../posture/src}/inspector/tests/linux.rs | 2 +- .../posture/src}/inspector/tests/macos.rs | 0 .../posture/src}/inspector/tests/mod.rs | 0 .../posture/src}/inspector/tests/windows.rs | 0 .../posture/src}/inspector/windows.rs | 13 +- src-tauri/enterprise/posture/src/lib.rs | 7 + .../posture/src}/posture.rs | 21 +- src-tauri/enterprise/provisioning/Cargo.toml | 18 + src-tauri/enterprise/provisioning/src/lib.rs | 131 +++ .../enterprise/service-locations/Cargo.toml | 28 + .../enterprise/service-locations/src/lib.rs | 124 +++ .../service-locations/src/windows.rs | 969 ++++++++++++++++++ src-tauri/src/apple.rs | 616 +---------- src-tauri/src/appstate.rs | 2 +- src-tauri/src/bin/defguard-client.rs | 8 +- src-tauri/src/commands.rs | 404 ++------ src-tauri/src/enterprise/inspector/mod.rs | 191 ---- src-tauri/src/enterprise/mod.rs | 6 +- src-tauri/src/enterprise/models/instance.rs | 28 - src-tauri/src/enterprise/models/mod.rs | 1 - src-tauri/src/enterprise/periodic/config.rs | 320 +----- src-tauri/src/enterprise/provisioning/mod.rs | 73 +- .../src/enterprise/service_locations/mod.rs | 124 +-- .../enterprise/service_locations/windows.rs | 2 +- src-tauri/src/events.rs | 36 +- src-tauri/src/lib.rs | 143 +-- src-tauri/src/periodic/connection.rs | 2 +- src-tauri/src/proto.rs | 59 -- src-tauri/src/service/client.rs | 70 -- src-tauri/src/service/mod.rs | 153 --- src-tauri/src/tray.rs | 46 +- src-tauri/src/utils.rs | 318 +----- src-tauri/tauri.linux.conf.json | 5 - src-tauri/tauri.windows.conf.json | 5 - 97 files changed, 5949 insertions(+), 2898 deletions(-) create mode 100644 .github/workflows/cross-platform-check.yml create mode 100644 src-tauri/.sqlx/query-157a0344c45c1b0567e8815c3f7b3667b753fb0b4b4c10d9d497b8f403ccb89d.json create mode 100644 src-tauri/client-proto/Cargo.toml create mode 100644 src-tauri/client-proto/build.rs create mode 100644 src-tauri/client-proto/src/conversions.rs rename src-tauri/{src/service/proto.rs => client-proto/src/lib.rs} (71%) create mode 100644 src-tauri/client-proto/src/posture_ext.rs create mode 100644 src-tauri/core/Cargo.toml rename src-tauri/{ => core}/src/app_config.rs (51%) rename src-tauri/{src => core/src/connection}/active_connections.rs (79%) create mode 100644 src-tauri/core/src/connection/daemon_client.rs create mode 100644 src-tauri/core/src/connection/mod.rs create mode 100644 src-tauri/core/src/connection/setup.rs rename src-tauri/{ => core}/src/database/mod.rs (98%) rename src-tauri/{ => core}/src/database/models/connection.rs (55%) rename src-tauri/{ => core}/src/database/models/instance.rs (55%) rename src-tauri/{ => core}/src/database/models/location.rs (74%) rename src-tauri/{ => core}/src/database/models/location_stats.rs (72%) rename src-tauri/{ => core}/src/database/models/mod.rs (87%) rename src-tauri/{ => core}/src/database/models/settings.rs (100%) rename src-tauri/{ => core}/src/database/models/tunnel.rs (87%) create mode 100644 src-tauri/core/src/database/models/tunnel_configuration.rs rename src-tauri/{ => core}/src/database/models/wireguard_keys.rs (100%) rename src-tauri/{ => core}/src/error.rs (98%) create mode 100644 src-tauri/core/src/events.rs create mode 100644 src-tauri/core/src/lib.rs create mode 100644 src-tauri/core/src/proxy.rs create mode 100644 src-tauri/core/src/version.rs rename src-tauri/{ => core}/src/wg_config.rs (100%) create mode 100644 src-tauri/daemon/Cargo.toml rename src-tauri/{ => daemon}/src/bin/defguard-service.rs (79%) create mode 100644 src-tauri/daemon/src/config.rs rename src-tauri/{src/service => daemon/src}/daemon.rs (91%) create mode 100644 src-tauri/daemon/src/error.rs create mode 100644 src-tauri/daemon/src/lib.rs rename src-tauri/{src/service => daemon/src}/named_pipe.rs (99%) create mode 100644 src-tauri/daemon/src/utils.rs rename src-tauri/{src/service => daemon/src}/windows.rs (97%) rename src-tauri/{src => }/enterprise/LICENSE.md (100%) create mode 100644 src-tauri/enterprise/config-sync/Cargo.toml create mode 100644 src-tauri/enterprise/config-sync/src/commands.rs create mode 100644 src-tauri/enterprise/config-sync/src/lib.rs create mode 100644 src-tauri/enterprise/posture/Cargo.toml rename src-tauri/{src/enterprise => enterprise/posture/src}/inspector/linux.rs (100%) rename src-tauri/{src/enterprise => enterprise/posture/src}/inspector/macos.rs (100%) create mode 100644 src-tauri/enterprise/posture/src/inspector/mod.rs rename src-tauri/{src/enterprise => enterprise/posture/src}/inspector/tests/linux.rs (84%) rename src-tauri/{src/enterprise => enterprise/posture/src}/inspector/tests/macos.rs (100%) rename src-tauri/{src/enterprise => enterprise/posture/src}/inspector/tests/mod.rs (100%) rename src-tauri/{src/enterprise => enterprise/posture/src}/inspector/tests/windows.rs (100%) rename src-tauri/{src/enterprise => enterprise/posture/src}/inspector/windows.rs (92%) create mode 100644 src-tauri/enterprise/posture/src/lib.rs rename src-tauri/{src/enterprise => enterprise/posture/src}/posture.rs (86%) create mode 100644 src-tauri/enterprise/provisioning/Cargo.toml create mode 100644 src-tauri/enterprise/provisioning/src/lib.rs create mode 100644 src-tauri/enterprise/service-locations/Cargo.toml create mode 100644 src-tauri/enterprise/service-locations/src/lib.rs create mode 100644 src-tauri/enterprise/service-locations/src/windows.rs delete mode 100644 src-tauri/src/enterprise/inspector/mod.rs delete mode 100644 src-tauri/src/enterprise/models/instance.rs delete mode 100644 src-tauri/src/enterprise/models/mod.rs delete mode 100644 src-tauri/src/proto.rs delete mode 100644 src-tauri/src/service/client.rs diff --git a/.github/workflows/cross-platform-check.yml b/.github/workflows/cross-platform-check.yml new file mode 100644 index 000000000..f12293b56 --- /dev/null +++ b/.github/workflows/cross-platform-check.yml @@ -0,0 +1,63 @@ +name: Cross-platform check + +on: + push: + branches: + - main + - dev + - "release/**" + paths-ignore: + - "*.md" + - "LICENSE" + pull_request: + branches: + - main + - dev + - "release/**" + paths-ignore: + - "*.md" + - "LICENSE" + +env: + CARGO_TERM_COLOR: always + SQLX_OFFLINE: "1" + SCCACHE_GHA_ENABLED: "true" + RUSTC_WRAPPER: "sccache" + +jobs: + check: + strategy: + fail-fast: false + matrix: + os: + - macOS + - Windows + + runs-on: + - self-hosted + - ${{ matrix.os }} + + defaults: + run: + working-directory: ./src-tauri + + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + submodules: recursive + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@v0.0.10 + + - name: Install protoc + if: matrix.os != 'Windows' + uses: arduino/setup-protoc@v3 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Check compilation + run: cargo check --workspace diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ef8abe27d..76fe8b84e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -58,7 +58,7 @@ jobs: scanners: "vuln" - name: Run sccache-cache - uses: mozilla-actions/sccache-action@v0.0.9 + uses: mozilla-actions/sccache-action@v0.0.10 - name: Install required packages run: | diff --git a/LICENSE.md b/LICENSE.md index e071cb42e..caf5ae033 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,8 +1,8 @@ # Dual license info The code in this repository is available under a dual licensing model: -1. Open Source License: The code, except for the contents of the "src-tauri/src/enterprise/" directory, is licensed under the AGPL license (this license). This applies to the open core components of the software. -2. Enterprise License: All code in this repository (including within the "src-tauri/src/enterprise/" directory) is licensed under a separate Enterprise License (see file src/enterprise/LICENSE.md). +1. Open Source License: The code, except for the contents of the "src-tauri/enterprise/" directory, is licensed under the AGPL license (this license). This applies to the open core components of the software. +2. Enterprise License: All code in this repository (including within the "src-tauri/enterprise/" directory) is licensed under a separate Enterprise License (see file src-tauri/enterprise/LICENSE.md). # GNU AFFERO GENERAL PUBLIC LICENSE diff --git a/flake.lock b/flake.lock index 37bef6922..8992d0e17 100644 --- a/flake.lock +++ b/flake.lock @@ -12,6 +12,21 @@ }, "parent": [] }, + "crane": { + "locked": { + "lastModified": 1779130139, + "narHash": "sha256-BLrtr42azquO7MdGFU5a7KiMl3YpFlTeIXqy1fT5GlQ=", + "owner": "ipetkov", + "repo": "crane", + "rev": "edb38893982a3338972bb4a2ec7ce7c29ba10fd9", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, "defguard-ui": { "flake": false, "locked": { @@ -44,11 +59,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1778794387, - "narHash": "sha256-BL04pOS9453Awkeb9f90XBJXBSkWxN+vB7HIgnL0iMM=", + "lastModified": 1779351318, + "narHash": "sha256-f+JACbTqzZ+G92DSnXOUGRhGANb8Blh7CoeYOeBF8/U=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8a1b0127302ea51e05bf4ea5a291743fac442406", + "rev": "4a29d733e8a7d5b824c3d8c958a946a9867b3eb2", "type": "github" }, "original": { @@ -87,6 +102,7 @@ "root": { "inputs": { "boringtun": "boringtun", + "crane": "crane", "defguard-ui": "defguard-ui", "flake-utils": "flake-utils", "nixpkgs": "nixpkgs", @@ -99,11 +115,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1778815121, - "narHash": "sha256-xlhD+1NVJbhrUUM2usRHW6iKWTXP2uw2Fo6sWJmLg8g=", + "lastModified": 1779419951, + "narHash": "sha256-dMX0PUslUHPajP6o8FEoRdFv9afq/dec4POR0vVfjK4=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "017351829a9356423afd2cca0dde9b63346c8ab3", + "rev": "5b5c521d6cae9ef4aa32f888eb2c0ce595c9be52", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 2621b4c07..8da372235 100644 --- a/flake.nix +++ b/flake.nix @@ -3,6 +3,7 @@ nixpkgs.url = "nixpkgs"; flake-utils.url = "github:numtide/flake-utils"; rust-overlay.url = "github:oxalica/rust-overlay"; + crane.url = "github:ipetkov/crane"; # let git manage submodules self.submodules = true; @@ -25,26 +26,55 @@ nixpkgs, flake-utils, rust-overlay, + crane, ... }: flake-utils.lib.eachDefaultSystem (system: let - # add rust overlay - pkgs = import nixpkgs { + # Plain nixpkgs — used for packages and checks. + pkgs = import nixpkgs {inherit system;}; + + # nixpkgs with rust-overlay — only needed for the dev shell, which uses + # pkgs.rust-bin to get a customised Rust toolchain. + devPkgs = import nixpkgs { inherit system; overlays = [rust-overlay.overlays.default]; }; + + craneLib = crane.mkLib pkgs; + + defguard-client = pkgs.callPackage ./nix/package.nix { + inherit pkgs craneLib; + }; in { devShells.default = import ./nix/shell.nix { - inherit pkgs; + pkgs = devPkgs; + inherit crane; }; - packages.default = pkgs.callPackage ./nix/package.nix { - inherit pkgs; + packages = { + default = defguard-client; + inherit defguard-client; + defguard-service = + pkgs.runCommand "defguard-service" { + nativeBuildInputs = [pkgs.makeWrapper]; + } '' + mkdir -p $out/bin + cp ${defguard-client}/bin/defguard-service $out/bin/ + ''; + dg = + pkgs.runCommand "dg" { + nativeBuildInputs = [pkgs.makeWrapper]; + } '' + mkdir -p $out/bin + cp ${defguard-client}/bin/dg $out/bin/ + ''; }; + checks.default = defguard-client; + formatter = pkgs.alejandra; }) // { - nixosModules.default = import ./nix/nixos-module.nix; + nixosModules.default = import ./nix/nixos-module.nix {mkCraneLib = crane.mkLib;}; }; } diff --git a/nix/nixos-module.nix b/nix/nixos-module.nix index f3833d09f..d66563c04 100644 --- a/nix/nixos-module.nix +++ b/nix/nixos-module.nix @@ -1,61 +1,69 @@ -{ +{mkCraneLib}: { config, lib, pkgs, ... -}: -with lib; let - defguard-client = pkgs.callPackage ./package.nix {}; +}: let + craneLib = mkCraneLib pkgs; + defguard-client = pkgs.callPackage ./package.nix {inherit pkgs craneLib;}; cfg = config.programs.defguard-client; in { options.programs.defguard-client = { - enable = mkEnableOption "Defguard VPN client and service"; + enable = lib.mkEnableOption "Defguard VPN client and service"; - package = mkOption { - type = types.package; + package = lib.mkOption { + type = lib.types.package; default = defguard-client; description = "defguard-client package to use"; }; - logLevel = mkOption { - type = types.str; + logLevel = lib.mkOption { + type = lib.types.str; default = "info"; description = "Log level for defguard-service"; }; - statsPeriod = mkOption { - type = types.int; + statsPeriod = lib.mkOption { + type = lib.types.int; default = 30; description = "Interval in seconds for interface statistics updates"; }; }; - config = mkIf cfg.enable { - # Add client package + config = lib.mkIf cfg.enable { environment.systemPackages = [cfg.package]; - # Setup systemd service for the intrerface management daemon systemd.services.defguard-service = { description = "Defguard VPN Service"; + documentation = ["https://docs.defguard.net"]; wantedBy = ["multi-user.target"]; wants = ["network-online.target"]; after = ["network-online.target"]; serviceConfig = { - ExecStart = "${cfg.package}/bin/defguard-service --log-level ${cfg.logLevel} --stats-period ${toString cfg.statsPeriod}"; - ExecReload = "/bin/kill -HUP $MAINPID"; Group = "defguard"; - Restart = "on-failure"; - RestartSec = 2; + ExecStart = "${cfg.package}/bin/defguard-service --log-level ${cfg.logLevel} --stats-period ${toString cfg.statsPeriod}"; + ExecReload = "kill -HUP $MAINPID"; KillMode = "process"; KillSignal = "SIGINT"; LimitNOFILE = 65536; LimitNPROC = "infinity"; + Restart = "on-failure"; + RestartSec = 2; TasksMax = "infinity"; OOMScoreAdjust = -1000; + # Security hardening + NoNewPrivileges = true; + PrivateTmp = true; + ProtectControlGroups = true; + # Requires WireGuard to be built into the kernel or pre-loaded via + # boot.kernelModules. If WireGuard is a loadable module, auto-loading + # will be blocked by ProtectKernelModules. + ProtectKernelModules = true; + RestrictRealtime = true; + LockPersonality = true; }; }; - # Make sure the defguard group exists users.groups.defguard = {}; }; } diff --git a/nix/package.nix b/nix/package.nix index d6dd9a691..b2d52a157 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -1,8 +1,7 @@ { pkgs, lib, - stdenv, - rustPlatform, + craneLib, rustc, cargo, makeDesktopItem, @@ -10,7 +9,6 @@ fetchPnpmDeps, }: let pname = "defguard-client"; - # Automatically read version from Cargo.toml version = (fromTOML (builtins.readFile ../src-tauri/Cargo.toml)).workspace.package.version; desktopItem = makeDesktopItem { @@ -43,60 +41,113 @@ libayatana-indicator ayatana-ido libdbusmenu-gtk3 - desktop-file-utils - iproute2 - lsb-release - openresolv ]; - nativeBuildInputs = [ + # Rust/cargo inputs shared by buildDepsOnly and the main build. + cargoNativeBuildInputs = [ rustc cargo pkgs.pkg-config pkgs.gobject-introspection pkgs.cargo-tauri - pkgs.nodejs_24 pkgs.protobuf - pnpm - # configures pnpm to use pre-fetched dependencies - pnpmConfigHook - # configures cargo to use pre-fetched dependencies - rustPlatform.cargoSetupHook - # helper to add runtime binary & library deps paths - pkgs.makeWrapper - pkgs.wrapGAppsHook3 ]; -in - stdenv.mkDerivation (finalAttrs: rec { - inherit pname version buildInputs nativeBuildInputs; + # Source filter for buildDepsOnly: Cargo files plus extras needed by build.rs + # (proto files, tauri configs, capabilities, sqlx offline cache). + depsSourceFilter = path: type: + (craneLib.filterCargoSources path type) + || (lib.hasSuffix ".proto" path) + || (lib.hasSuffix "tauri.conf.json" path) + || (lib.hasInfix "/capabilities/" path) + || (lib.hasInfix "/.sqlx/" path) + || (lib.hasSuffix ".sql" path); + + depsSrc = lib.cleanSourceWith { + src = craneLib.path ../src-tauri; + filter = depsSourceFilter; + }; + + cargoVendorDir = craneLib.vendorCargoDeps { + src = craneLib.path ../src-tauri; + }; + + # Pre-compile cargo dependencies; cached as long as Cargo.lock is unchanged. + # Features must match the main build. + cargoArtifacts = craneLib.buildDepsOnly { + inherit pname; + inherit version buildInputs cargoVendorDir; + src = depsSrc; + nativeBuildInputs = cargoNativeBuildInputs; + cargoExtraArgs = "--features custom-protocol"; + VERGEN_IDEMPOTENT = "true"; + SQLX_OFFLINE = "true"; + }; + + # Prefetch pnpm dependencies. + # Explicit pnpm_10 keeps fetchPnpmDeps and pnpmConfigHook on the same major version. + pnpmDeps = fetchPnpmDeps { + inherit pname version pnpm; src = ../.; + fetcherVersion = 3; + hash = "sha256-7B5+C3q+jVQ2taKcfZkfTvH37OBDIPDM/4LLRqWPE+I="; + }; +in + craneLib.mkCargoDerivation { + inherit pname version buildInputs cargoArtifacts cargoVendorDir pnpmDeps; - # prefetch cargo dependencies - cargoRoot = "src-tauri"; - buildAndTestSubdir = "src-tauri"; + src = ../.; - cargoDeps = rustPlatform.importCargoLock { - lockFile = ../src-tauri/Cargo.lock; - }; + nativeBuildInputs = + cargoNativeBuildInputs + ++ [ + pkgs.makeWrapper + pkgs.wrapGAppsHook3 + pkgs.nodejs_24 + pnpm + pnpmConfigHook + ]; + + # Pin CARGO_TARGET_DIR before crane's inheritCargoArtifacts hook runs so + # extraction and tauri's cargo invocation both land in src-tauri/target. + postUnpack = '' + export CARGO_TARGET_DIR="$NIX_BUILD_TOP/$sourceRoot/src-tauri/target" + ''; - # prefetch pnpm dependencies - pnpmDeps = fetchPnpmDeps { - inherit - (finalAttrs) - pname - version - src - ; - - fetcherVersion = 2; - hash = "sha256-vDLgpFaO+48s+tj1/2m2fgNJpCfnNkFJpQkC4Xah59E="; - }; + # Required by mkCargoDerivation even when buildPhase is fully overridden. + buildPhaseCargoCommand = ""; + + preBuild = '' + # Workspace-member build scripts were compiled in buildDepsOnly's source + # tree (/build/source/) with that path baked in; remove them so cargo + # recompiles them against the current tree. Dep .rlib/.rmeta are kept. + rm -rf src-tauri/target/release/build/defguard* + rm -rf src-tauri/target/release/build/common* + rm -rf src-tauri/target/release/.fingerprint/defguard* + rm -rf src-tauri/target/release/.fingerprint/common* + + # tauri_build::build() reads OUT_DIR metadata written by tauri's own + # build script during buildDepsOnly (pointing to /build/source/). + # Remove tauri's build outputs and build-script-run fingerprints so + # cargo re-runs the build script and refreshes OUT_DIR to the current + # path. libtauri*.rlib in deps/ is untouched. + rm -rf src-tauri/target/release/build/tauri-* + find src-tauri/target/release/.fingerprint \ + -maxdepth 1 -type d \( -name 'tauri-*' -o -name 'tauri_*' \) \ + -exec rm -f '{}/build-script-run' \; + ''; buildPhase = '' runHook preBuild - pnpm tauri build --verbose + # Build the frontend first; tauri's beforeBuildCommand is suppressed + # below to avoid running pnpm build a second time. + pnpm build + + # --config replaces the build section from tauri.linux.conf.json. + pnpm tauri build \ + --config '{"build":{"beforeBuildCommand":""}}' \ + --bundles deb runHook postBuild ''; @@ -104,55 +155,45 @@ in installPhase = '' runHook preInstall - mkdir -p $out/bin - - # copy client binary - install -Dm755 src-tauri/target/release/${pname} $out/bin/${pname} + # tauri always writes to src-tauri/target regardless of $CARGO_TARGET_DIR. + local targetDir="src-tauri/target/release" - # copy background service binary - install -Dm755 src-tauri/target/release/defguard-service $out/bin/defguard-service - - # copy CLI binary - install -Dm755 src-tauri/target/release/dg $out/bin/dg + mkdir -p $out/bin + install -Dm755 "$targetDir/${pname}" $out/bin/${pname} + install -Dm755 "$targetDir/defguard-service" $out/bin/defguard-service + install -Dm755 "$targetDir/dg" $out/bin/dg - # Copy resources directory (for tray icons, etc.) mkdir -p $out/lib/${pname} cp -r src-tauri/resources $out/lib/${pname}/ - # install desktop entry mkdir -p $out/share/applications cp ${desktopItem}/share/applications/* $out/share/applications/ - # install icon files mkdir -p $out/share/icons/hicolor/{32x32,128x128}/apps - install -Dm644 src-tauri/icons/32x32.png $out/share/icons/hicolor/32x32/apps/${pname}.png + install -Dm644 src-tauri/icons/32x32.png $out/share/icons/hicolor/32x32/apps/${pname}.png install -Dm644 src-tauri/icons/128x128.png $out/share/icons/hicolor/128x128/apps/${pname}.png runHook postInstall ''; - # add extra args to wrapGAppsHook3 wrapper preFixup = '' gappsWrapperArgs+=( - --prefix PATH : ${ - lib.makeBinPath [ - # `defguard-service` needs `ip` to manage WireGuard - pkgs.iproute2 - # `defguard-service` needs `resolvconf` to manage DNS - pkgs.openresolv - # `defguard-client` needs `update-desktop-database` and `lsb_release` - pkgs.desktop-file-utils - pkgs.lsb-release - ] - } - --prefix LD_LIBRARY_PATH : ${ - lib.makeLibraryPath [ - pkgs.libayatana-appindicator - ] - } + --prefix PATH : ${lib.makeBinPath [pkgs.iproute2 pkgs.desktop-file-utils pkgs.lsb-release]} + --suffix PATH : ${lib.makeBinPath [pkgs.openresolv]} + --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [pkgs.libayatana-appindicator]} ) ''; + VERGEN_IDEMPOTENT = "true"; + SQLX_OFFLINE = "true"; + doInstallCargoArtifacts = false; + + # passthru attrs are ignored by the build but addressable by external tools: + # pnpmDeps — referenced by the update-pnpm-hash.yaml CI workflow + passthru = { + inherit pnpmDeps; + }; + meta = with lib; { description = "Defguard VPN Client"; homepage = "https://defguard.net"; @@ -160,4 +201,4 @@ in maintainers = with maintainers; [wojcik91]; platforms = platforms.linux; }; - }) + } diff --git a/nix/shell.nix b/nix/shell.nix index bd885377e..3ed2e761a 100644 --- a/nix/shell.nix +++ b/nix/shell.nix @@ -1,18 +1,17 @@ -{pkgs ? import {}}: let +{ + pkgs, + crane, +}: let # add development-related cargo tooling rustToolchain = pkgs.rust-bin.stable.latest.default.override { extensions = ["rust-analyzer" "rust-src" "rustfmt" "clippy"]; targets = ["x86_64-apple-darwin" "aarch64-apple-darwin" "x86_64-pc-windows-gnu"]; }; - # share custom toolchain with package - rustPlatform = pkgs.makeRustPlatform { - cargo = rustToolchain; - rustc = rustToolchain; - }; + craneLib = crane.mkLib pkgs; defguard-client = pkgs.callPackage ./package.nix { - inherit rustPlatform; + inherit craneLib; cargo = rustToolchain; rustc = rustToolchain; }; @@ -33,7 +32,6 @@ in sqlx-cli vtsls trivy - just ]; shellHook = with pkgs; '' diff --git a/package.json b/package.json index e227879df..8ba4cc6fc 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "react-loading-skeleton": "^3.5.0", "react-markdown": "^10.1.0", "react-qr-code": "^2.0.21", - "react-router-dom": "^6.30.3", + "react-router-dom": "^6.30.4", "react-use-websocket": "^4.13.0", "react-virtualized-auto-sizer": "^1.0.26", "recharts": "^3.8.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef2303d41..ac3d4b862 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -159,8 +159,8 @@ importers: specifier: ^2.0.21 version: 2.0.21(react@19.2.6) react-router-dom: - specifier: ^6.30.3 - version: 6.30.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^6.30.4 + version: 6.30.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6) react-use-websocket: specifier: ^4.13.0 version: 4.13.0 @@ -774,8 +774,8 @@ packages: react-redux: optional: true - '@remix-run/router@1.23.2': - resolution: {integrity: sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==} + '@remix-run/router@1.23.3': + resolution: {integrity: sha512-4An71tdz9X8+3sI4Qqqd2LWd9vS39J7sqd9EU4Scw7TJE/qB10Flv/UuqbPVgfQV9XoK8Np6jNquZitnZq5i+Q==} engines: {node: '>=14.0.0'} '@rolldown/pluginutils@1.0.0-rc.3': @@ -2585,15 +2585,15 @@ packages: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} - react-router-dom@6.30.3: - resolution: {integrity: sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==} + react-router-dom@6.30.4: + resolution: {integrity: sha512-q4HvNl+mmDdkS0g+MqiBZNteQJCuimWoOyHMy4T/RQLAn9Z29+E91QXRaxOujeMl2HTzRSS0KFPd7lxX3PjV0Q==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' - react-router@6.30.3: - resolution: {integrity: sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==} + react-router@6.30.4: + resolution: {integrity: sha512-SVUsDe+DybHM/WmYKIVYhZh1o5Dcuf16yM6WjG02Q9XVFMZIJyHYhwrr6bFBXZkVP6z69kNkMyBCujt8FaFLJA==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' @@ -3554,7 +3554,7 @@ snapshots: react: 19.2.6 react-redux: 9.3.0(@types/react@19.2.15)(react@19.2.6)(redux@5.0.1) - '@remix-run/router@1.23.2': {} + '@remix-run/router@1.23.3': {} '@rolldown/pluginutils@1.0.0-rc.3': {} @@ -5451,16 +5451,16 @@ snapshots: react-refresh@0.18.0: {} - react-router-dom@6.30.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + react-router-dom@6.30.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - '@remix-run/router': 1.23.2 + '@remix-run/router': 1.23.3 react: 19.2.6 react-dom: 19.2.6(react@19.2.6) - react-router: 6.30.3(react@19.2.6) + react-router: 6.30.4(react@19.2.6) - react-router@6.30.3(react@19.2.6): + react-router@6.30.4(react@19.2.6): dependencies: - '@remix-run/router': 1.23.2 + '@remix-run/router': 1.23.3 react: 19.2.6 react-simple-animate@3.5.3(react-dom@19.2.6(react@19.2.6)): diff --git a/src-tauri/.sqlx/query-157a0344c45c1b0567e8815c3f7b3667b753fb0b4b4c10d9d497b8f403ccb89d.json b/src-tauri/.sqlx/query-157a0344c45c1b0567e8815c3f7b3667b753fb0b4b4c10d9d497b8f403ccb89d.json new file mode 100644 index 000000000..67d032fff --- /dev/null +++ b/src-tauri/.sqlx/query-157a0344c45c1b0567e8815c3f7b3667b753fb0b4b4c10d9d497b8f403ccb89d.json @@ -0,0 +1,74 @@ +{ + "db_name": "SQLite", + "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", client_traffic_policy, enterprise_enabled, openid_display_name FROM instance WHERE name = $1;", + "describe": { + "columns": [ + { + "name": "id: _", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "name", + "ordinal": 1, + "type_info": "Text" + }, + { + "name": "uuid", + "ordinal": 2, + "type_info": "Text" + }, + { + "name": "url", + "ordinal": 3, + "type_info": "Text" + }, + { + "name": "proxy_url", + "ordinal": 4, + "type_info": "Text" + }, + { + "name": "username", + "ordinal": 5, + "type_info": "Text" + }, + { + "name": "token?", + "ordinal": 6, + "type_info": "Text" + }, + { + "name": "client_traffic_policy", + "ordinal": 7, + "type_info": "Integer" + }, + { + "name": "enterprise_enabled", + "ordinal": 8, + "type_info": "Bool" + }, + { + "name": "openid_display_name", + "ordinal": 9, + "type_info": "Text" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + true, + false, + false, + true + ] + }, + "hash": "157a0344c45c1b0567e8815c3f7b3667b753fb0b4b4c10d9d497b8f403ccb89d" +} diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index ad6706a26..6fcbfe505 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -614,9 +614,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" dependencies = [ "serde_core", ] @@ -809,7 +809,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "cairo-sys-rs", "glib", "libc", @@ -947,9 +947,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "js-sys", @@ -1044,13 +1044,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "common" -version = "2.1.0" -dependencies = [ - "nix", -] - [[package]] name = "concurrent-queue" version = "2.5.0" @@ -1147,7 +1140,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.10.1", "core-graphics-types", "foreign-types 0.5.0", @@ -1160,7 +1153,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.10.1", "libc", ] @@ -1415,8 +1408,14 @@ dependencies = [ "block2 0.6.2", "chrono", "clap", - "common", "dark-light", + "defguard-client-common", + "defguard-client-config-sync", + "defguard-client-core", + "defguard-client-posture", + "defguard-client-proto", + "defguard-client-provisioning", + "defguard-client-service-locations", "defguard_wireguard_rs", "dirs-next", "futures-core", @@ -1462,7 +1461,6 @@ dependencies = [ "tokio-util", "tonic", "tonic-prost", - "tonic-prost-build", "tower", "tracing", "tracing-appender", @@ -1477,12 +1475,167 @@ dependencies = [ "x25519-dalek", ] +[[package]] +name = "defguard-client-common" +version = "2.1.0" +dependencies = [ + "nix", +] + +[[package]] +name = "defguard-client-config-sync" +version = "2.1.0" +dependencies = [ + "defguard-client-core", + "defguard-client-proto", + "defguard-client-service-locations", + "http", + "log", + "reqwest 0.13.4", + "semver", + "serde", + "serde_json", + "sqlx", + "tokio", + "tonic", +] + +[[package]] +name = "defguard-client-core" +version = "2.1.0" +dependencies = [ + "base64 0.22.1", + "block2 0.6.2", + "chrono", + "defguard-client-common", + "defguard-client-proto", + "defguard_wireguard_rs", + "dirs-next", + "hyper-util", + "log", + "nix", + "objc2 0.6.4", + "objc2-app-kit", + "objc2-foundation 0.3.2", + "objc2-network-extension", + "os_info", + "prost", + "reqwest 0.13.4", + "rust-ini", + "semver", + "serde", + "serde_json", + "serde_with", + "sqlx", + "struct-patch", + "strum", + "tempfile", + "thiserror 2.0.18", + "tokio", + "tonic", + "tower", + "tracing", + "windows-sys 0.61.2", + "x25519-dalek", +] + +[[package]] +name = "defguard-client-posture" +version = "2.1.0" +dependencies = [ + "defguard-client-core", + "defguard-client-proto", + "log", + "reqwest 0.13.4", + "serde", + "serde_json", + "sysinfo", + "time", + "tonic", + "wmi", +] + +[[package]] +name = "defguard-client-proto" +version = "2.1.0" +dependencies = [ + "defguard_wireguard_rs", + "prost", + "serde", + "serde_with", + "tonic", + "tonic-prost", + "tonic-prost-build", + "wmi", + "x25519-dalek", +] + +[[package]] +name = "defguard-client-provisioning" +version = "2.1.0" +dependencies = [ + "defguard-client-core", + "log", + "serde", + "serde_json", + "tempfile", +] + +[[package]] +name = "defguard-client-service" +version = "2.1.0" +dependencies = [ + "anyhow", + "async-stream", + "clap", + "defguard-client-common", + "defguard-client-posture", + "defguard-client-proto", + "defguard-client-service-locations", + "defguard_wireguard_rs", + "futures-core", + "log", + "nix", + "serde", + "thiserror 2.0.18", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-appender", + "tracing-subscriber", + "windows-core 0.61.2", + "windows-service", + "windows-sys 0.61.2", +] + +[[package]] +name = "defguard-client-service-locations" +version = "2.1.0" +dependencies = [ + "base64 0.22.1", + "defguard-client-common", + "defguard-client-core", + "defguard-client-proto", + "defguard_wireguard_rs", + "known-folders", + "log", + "prost", + "serde", + "serde_json", + "thiserror 2.0.18", + "windows 0.62.2", + "windows-acl", + "windows-service", + "windows-sys 0.61.2", +] + [[package]] name = "defguard-dg" version = "2.1.0" dependencies = [ "clap", - "common", + "defguard-client-common", "defguard_wireguard_rs", "dirs-next", "prost", @@ -1526,9 +1679,9 @@ dependencies = [ [[package]] name = "defguard_wireguard_rs" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c25476f197cec498e72de55dcaa34f966720ae000eda3171f5144f0433256acc" +checksum = "5657c83576553019b0a473b5417fe9faeba6128819025ad8969cb846be96b50d" dependencies = [ "base64 0.22.1", "defguard_boringtun", @@ -1683,7 +1836,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -2443,7 +2596,7 @@ version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "libc", "libgit2-sys", "log", @@ -2456,7 +2609,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "futures-channel", "futures-core", "futures-executor", @@ -2723,9 +2876,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -2768,9 +2921,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb92f162bf56536459fc83c79b974bb12837acfed43d6bc370a7916d0ae15ecc" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", @@ -3239,13 +3392,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.99" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" +checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -3277,7 +3429,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "serde", "unicode-segmentation", ] @@ -3356,9 +3508,9 @@ dependencies = [ [[package]] name = "libgit2-sys" -version = "0.18.4+1.9.3" +version = "0.18.5+1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b26f66f35e1871b22efcf7191564123d2a446ca0538cde63c23adfefa9b15b7" +checksum = "005d6ae6eac1912906073e069f7db60b1fa98e052a68227824afe3e3a1c59ca2" dependencies = [ "cc", "libc", @@ -3398,10 +3550,10 @@ version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "libc", "plain", - "redox_syscall 0.8.0", + "redox_syscall 0.8.1", ] [[package]] @@ -3417,9 +3569,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.28" +version = "1.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc3a226e576f50782b3305c5ccf458698f92798987f551c6a02efe8276721e22" +checksum = "85bc9657773828b90eeb625adff10eeac83cc21bbfd8e23a03eaa8a33c9e28d9" dependencies = [ "cc", "libc", @@ -3456,9 +3608,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.30" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" dependencies = [ "serde_core", "value-bag", @@ -3472,9 +3624,9 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "mac-notification-sys" -version = "0.6.12" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29a16783dd1a47849b8c8133c9cd3eb2112cfbc6901670af3dba47c8bbfb07d3" +checksum = "50efa634682b3fc5a1ab6f3dd5b2bce7b848011fc485b53b063dc68f2f74feae" dependencies = [ "cc", "objc2 0.6.4", @@ -3626,7 +3778,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "jni-sys 0.3.1", "log", "ndk-sys", @@ -3674,7 +3826,7 @@ version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be8919612f6028ab4eacbbfe1234a9a43e3722c6e0915e7ff519066991905092" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "libc", "log", "netlink-packet-core", @@ -3726,7 +3878,7 @@ version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "cfg-if", "cfg_aliases", "libc", @@ -3899,7 +4051,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -3920,7 +4072,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -3931,7 +4083,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -3942,7 +4094,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "dispatch2", "objc2 0.6.4", ] @@ -3953,7 +4105,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "dispatch2", "objc2 0.6.4", "objc2-core-foundation", @@ -3986,7 +4138,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -3998,7 +4150,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -4026,7 +4178,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -4038,7 +4190,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -4061,7 +4213,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-core-foundation", ] @@ -4086,7 +4238,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -4098,7 +4250,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-core-foundation", ] @@ -4109,7 +4261,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "block2 0.6.2", "objc2 0.6.4", "objc2-cloud-kit", @@ -4140,7 +4292,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "block2 0.6.2", "objc2 0.6.4", "objc2-app-kit", @@ -4184,7 +4336,7 @@ version = "0.10.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "cfg-if", "foreign-types 0.3.2", "libc", @@ -4211,9 +4363,9 @@ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-src" -version = "300.6.0+3.6.2" +version = "300.6.1+3.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8e8cbfd3a4a8c8f089147fd7aaa33cf8c7450c4d09f8f80698a0cf093abeff4" +checksum = "46eb8fb9fb3b61ce1c0f8a026c4c1a0714d3a9e138e7fbde78753ce2babc3846" dependencies = [ "cc", ] @@ -4542,7 +4694,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "crc32fast", "fdeflate", "flate2", @@ -4678,9 +4830,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" +checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1" dependencies = [ "bytes", "prost-derive", @@ -4688,9 +4840,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7" +checksum = "03da047801ff44bb6a4d407d4860c05fd70bb81714e6b2f3812603d5b145b042" dependencies = [ "heck 0.5.0", "itertools", @@ -4709,9 +4861,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" +checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf" dependencies = [ "anyhow", "itertools", @@ -4722,9 +4874,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" +checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a" dependencies = [ "prost", ] @@ -4771,7 +4923,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "memchr", "unicase", ] @@ -4969,16 +5121,16 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] name = "redox_syscall" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c7591fa2c6b601dfcfe5f043f65a1c39fcdf50efefcd7f1572e538c1f4b398d" +checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] @@ -5290,7 +5442,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys", @@ -5315,9 +5467,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -5493,7 +5645,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -5516,7 +5668,7 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "cssparser", "derive_more", "log", @@ -5648,9 +5800,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2" +checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c" dependencies = [ "base64 0.22.1", "bs58", @@ -5668,9 +5820,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac" +checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" dependencies = [ "darling 0.23.0", "proc-macro2", @@ -5987,7 +6139,7 @@ checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.11.1", + "bitflags 2.13.0", "byteorder", "bytes", "chrono", @@ -6031,7 +6183,7 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.11.1", + "bitflags 2.13.0", "byteorder", "chrono", "crc", @@ -6276,7 +6428,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -6310,7 +6462,7 @@ version = "0.35.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1c93047acf68669466a34690ac58cca7010bd1b201e1ec86f1fd0a75d3dd4a9" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "block2 0.6.2", "core-foundation 0.10.1", "core-graphics", @@ -6712,7 +6864,7 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73736611e14142408d15353e21e3cca2f12a3cfb523ad0ce85999b6d2ef1a704" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "log", "serde", "serde_json", @@ -7283,7 +7435,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "bytes", "futures-util", "http", @@ -7442,9 +7594,9 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "uds_windows" @@ -7533,9 +7685,9 @@ checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-xid" @@ -7743,9 +7895,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -7893,9 +8045,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.122" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" +checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" dependencies = [ "cfg-if", "once_cell", @@ -7906,9 +8058,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.72" +version = "0.4.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" +checksum = "54568702fabf5d4849ce2b90fadfa64168a097eaf4b351ce9df8b687a0086aaf" dependencies = [ "js-sys", "wasm-bindgen", @@ -7916,9 +8068,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.122" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" +checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7926,9 +8078,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.122" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" +checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" dependencies = [ "bumpalo", "proc-macro2", @@ -7939,9 +8091,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.122" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" +checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" dependencies = [ "unicode-ident", ] @@ -7987,7 +8139,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "hashbrown 0.15.5", "indexmap 2.14.0", "semver", @@ -8012,7 +8164,7 @@ version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "rustix", "wayland-backend", "wayland-scanner", @@ -8024,7 +8176,7 @@ version = "0.32.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -8036,7 +8188,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8065,9 +8217,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.99" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" +checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" dependencies = [ "js-sys", "wasm-bindgen", @@ -8495,7 +8647,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "857224b3b211c6f3616921f081ee54721ee3ad2ace2fac6a6337e032f7b4dcf2" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "widestring 1.2.1", "windows-sys 0.61.2", ] @@ -8895,7 +9047,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22b4dbcc6c93786cf22e420ef96e8976bfb92a455070282302b74de5848191f4" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "getrandom 0.2.17", "ipnet", "libloading 0.8.9", @@ -8969,7 +9121,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.1", + "bitflags 2.13.0", "indexmap 2.14.0", "log", "serde", @@ -9142,9 +9294,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -9165,9 +9317,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.15.0" +version = "5.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3bcbf15c8708d7fc1be0c993622e0a5cbd5e8b52bfa40afa4c3e0cd8d724ac1" +checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" dependencies = [ "async-broadcast", "async-executor", @@ -9200,9 +9352,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.15.0" +version = "5.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51fa5406ad9175a8c825a931f8cf347116b531b3634fcb0b627c290f1f2516ff" +checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", @@ -9226,18 +9378,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.49" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bce33a6288fa3f072a8c2c7d0f2fdbb90e28298f0135c1f99b96c3db2efcc60b" +checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.49" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd425244944f4ab65ccff928e7323354c5a018c75838362fdce749dfad2ee1e" +checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" dependencies = [ "proc-macro2", "quote", @@ -9341,9 +9493,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.11.0" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c1567a6ec68df868cbbfde844cfc6d81649fe5109a62b116b19fabd53e618ee" +checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" dependencies = [ "endi", "enumflags2", @@ -9356,9 +9508,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.11.0" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d5b780599bbde114e39d9a0799577fad1ced5105d38515745f7b3099d8ceda" +checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", @@ -9369,9 +9521,9 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.3.1" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d464f5733ffa07a3164d656f18533caace9d0638596721355d73256a410d691" +checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" dependencies = [ "proc-macro2", "quote", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 4ab353d8c..0b4f4904e 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,15 +1,20 @@ [workspace] -members = ["cli", "common"] -default-members = [".", "cli"] +members = ["cli", "common", "client-proto", "core", "daemon", "enterprise/posture", "enterprise/provisioning", "enterprise/config-sync", "enterprise/service-locations"] +default-members = [".", "cli", "daemon"] [workspace.dependencies] +base64 = "0.22" clap = { version = "4.5", features = ["cargo", "derive", "env"] } defguard_wireguard_rs = "0.9" dirs-next = "2.0" +log = { version = "0.4", features = ["serde"] } prost = "0.14" reqwest = { version = "0.13", features = ["cookies", "json"] } +semver = { version = "1.0", features = ["serde"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +serde_with = "3.11" +sqlx = { version = "0.8", features = ["chrono", "runtime-tokio", "sqlite", "uuid", "macros"] } thiserror = "2.0" tokio = { version = "1", features = ["macros", "rt-multi-thread", "signal"] } tonic = { version = "0.14", default-features = false, features = [ @@ -24,6 +29,8 @@ tonic-prost = "0.14" tonic-prost-build = "0.14" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] } +tempfile = "3" +http = "1" [workspace.package] authors = ["Defguard"] @@ -49,42 +56,37 @@ version.workspace = true [[bin]] name = "defguard-client" -[[bin]] -name = "defguard-service" -required-features = ["service"] - [build-dependencies] tauri-build = { version = "2", features = [] } -tonic-prost-build.workspace = true vergen-git2 = { version = "9.1", features = ["build"] } [dependencies] anyhow = "1.0" -base64 = "0.22" +base64.workspace = true clap.workspace = true chrono = { version = "0.4", features = ["serde"] } -common = { path = "common" } +defguard-client-proto = { path = "client-proto" } +defguard-client-core = { path = "core" } +defguard-client-posture = { path = "enterprise/posture" } +defguard-client-config-sync = { path = "enterprise/config-sync" } +defguard-client-service-locations = { path = "enterprise/service-locations" } +defguard-client-provisioning = { path = "enterprise/provisioning" } +defguard-client-common = { path = "common" } dark-light = "2.0" defguard_wireguard_rs = { workspace = true, features = ["check_dependencies"] } dirs-next.workspace = true hyper-util = "0.1" -log = { version = "0.4", features = ["serde"] } +log.workspace = true os_info = { version = "3.14", default-features = false } prost.workspace = true regex = "1.12" reqwest.workspace = true rust-ini = "0.21" -semver = "1.0" +semver.workspace = true serde.workspace = true serde_json.workspace = true -serde_with = "3.11" -sqlx = { version = "0.8", features = [ - "chrono", - "sqlite", - "runtime-tokio", - "uuid", - "macros", -] } +serde_with.workspace = true +sqlx.workspace = true struct-patch = "0.12" strum = { version = "0.28", features = ["derive"] } sysinfo = { version = "0.39", default-features = false, features = ["apple-app-store", "system"] } @@ -173,7 +175,6 @@ wmi = {version = "0.18", default-features = false} # If you use cargo directly instead of tauri's cli you can use this feature flag to switch between tauri's `dev` and `build` modes. # DO NOT REMOVE!! custom-protocol = ["tauri/custom-protocol"] -service = [] [dev-dependencies] tokio = { version = "1", features = ["full"] } diff --git a/src-tauri/build.rs b/src-tauri/build.rs index 0bbd4977f..7ab8755b3 100644 --- a/src-tauri/build.rs +++ b/src-tauri/build.rs @@ -13,29 +13,6 @@ fn main() -> Result<(), Box> { let git2 = Git2Builder::default().branch(true).sha(true).build()?; Emitter::default().add_instructions(&git2)?.emit()?; - tonic_prost_build::configure() - // Enable optional fields. - .protoc_arg("--experimental_allow_proto3_optional") - // Make sure empty DNS is deserialized correctly as `None`. - .type_attribute(".DeviceConfig", "#[serde_as]") - .field_attribute( - ".DeviceConfig.dns", - "#[serde_as(deserialize_as = \"NoneAsEmptyString\")]", - ) - // Make all messages serde-serializable. - .type_attribute(".", "#[derive(serde::Serialize,serde::Deserialize)]") - .compile_protos( - &[ - "proto/v1/client/client.proto", - "proto/v1/core/proxy.proto", - "proto/enterprise/v2/posture/posture.proto", - "proto/common/client_types.proto", - ], - &["proto"], - )?; - tauri_build::build(); - - println!("cargo:rerun-if-changed=proto"); Ok(()) } diff --git a/src-tauri/cli/Cargo.toml b/src-tauri/cli/Cargo.toml index f38c6cf9c..c9b511d04 100644 --- a/src-tauri/cli/Cargo.toml +++ b/src-tauri/cli/Cargo.toml @@ -12,7 +12,7 @@ tonic-prost-build.workspace = true [dependencies] clap.workspace = true -common = { path = "../common" } +common = { package = "defguard-client-common", path = "../common" } defguard_wireguard_rs = { workspace = true, features = ["check_dependencies"] } dirs-next.workspace = true prost.workspace = true diff --git a/src-tauri/cli/src/bin/dg.rs b/src-tauri/cli/src/bin/dg.rs index f485b09dd..f49581f1f 100644 --- a/src-tauri/cli/src/bin/dg.rs +++ b/src-tauri/cli/src/bin/dg.rs @@ -511,6 +511,7 @@ async fn wait_for_hangup() { hangup.recv().await; } } + /// Dummy version of the above function for non-UNIX systems. #[cfg(not(unix))] async fn wait_for_hangup() { diff --git a/src-tauri/client-proto/Cargo.toml b/src-tauri/client-proto/Cargo.toml new file mode 100644 index 000000000..8e4ae4b21 --- /dev/null +++ b/src-tauri/client-proto/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "defguard-client-proto" +description = "Protobuf definitions for the Defguard desktop client" +authors.workspace = true +edition.workspace = true +homepage.workspace = true +license-file.workspace = true +rust-version.workspace = true +version.workspace = true + +[build-dependencies] +tonic-prost-build.workspace = true + +[dependencies] +prost.workspace = true +serde.workspace = true +serde_with = "3.11" +tonic.workspace = true +tonic-prost.workspace = true + +defguard_wireguard_rs.workspace = true + +[target.'cfg(windows)'.dependencies] +wmi = { version = "0.18", default-features = false } + +[dev-dependencies] +x25519-dalek = { version = "2", features = ["getrandom", "static_secrets"] } diff --git a/src-tauri/client-proto/build.rs b/src-tauri/client-proto/build.rs new file mode 100644 index 000000000..95f41e21f --- /dev/null +++ b/src-tauri/client-proto/build.rs @@ -0,0 +1,26 @@ +fn main() -> Result<(), Box> { + println!("cargo:rerun-if-changed=../proto"); + + tonic_prost_build::configure() + // Enable optional fields. + .protoc_arg("--experimental_allow_proto3_optional") + // Make sure empty DNS is deserialized correctly as `None`. + .type_attribute(".DeviceConfig", "#[serde_as]") + .field_attribute( + ".DeviceConfig.dns", + "#[serde_as(deserialize_as = \"NoneAsEmptyString\")]", + ) + // Make all messages serde-serializable. + .type_attribute(".", "#[derive(serde::Serialize,serde::Deserialize)]") + .compile_protos( + &[ + "../proto/v1/client/client.proto", + "../proto/v1/core/proxy.proto", + "../proto/enterprise/v2/posture/posture.proto", + "../proto/common/client_types.proto", + ], + &["../proto"], + )?; + + Ok(()) +} diff --git a/src-tauri/client-proto/src/conversions.rs b/src-tauri/client-proto/src/conversions.rs new file mode 100644 index 000000000..ddc242491 --- /dev/null +++ b/src-tauri/client-proto/src/conversions.rs @@ -0,0 +1,187 @@ +use std::{ + str::FromStr, + time::{Duration, UNIX_EPOCH}, +}; + +use defguard_wireguard_rs::{ + host::Host, key::Key, net::IpAddrMask, peer::Peer, InterfaceConfiguration, +}; + +use crate::defguard::client::v1::{InterfaceConfig, InterfaceData, Peer as ProtoPeer}; + +impl From for InterfaceConfig { + fn from(config: InterfaceConfiguration) -> Self { + Self { + name: config.name, + prvkey: config.prvkey, + address: config + .addresses + .iter() + .map(ToString::to_string) + .collect::>() + .join(","), + port: u32::from(config.port), + peers: config.peers.into_iter().map(Into::into).collect(), + mtu: config.mtu, + } + } +} + +impl From for InterfaceConfiguration { + fn from(config: InterfaceConfig) -> Self { + let addresses = config + .address + .split(',') + .filter_map(|ip| IpAddrMask::from_str(ip.trim()).ok()) + .collect(); + Self { + name: config.name, + prvkey: config.prvkey, + addresses, + port: config.port as u16, + peers: config.peers.into_iter().map(Into::into).collect(), + mtu: config.mtu, + fwmark: None, // TODO: add to config + } + } +} + +impl From for ProtoPeer { + fn from(peer: Peer) -> Self { + Self { + public_key: peer.public_key.to_lower_hex(), + preshared_key: peer.preshared_key.map(|key| key.to_lower_hex()), + protocol_version: peer.protocol_version, + endpoint: peer.endpoint.map(|addr| addr.to_string()), + last_handshake: peer.last_handshake.map(|time| { + time.duration_since(UNIX_EPOCH) + .expect("Time went backwards") + .as_secs() + }), + tx_bytes: peer.tx_bytes, + rx_bytes: peer.rx_bytes, + persistent_keepalive_interval: peer.persistent_keepalive_interval.map(u32::from), + allowed_ips: peer + .allowed_ips + .into_iter() + .map(|addr| addr.to_string()) + .collect(), + } + } +} + +impl From for Peer { + fn from(peer: ProtoPeer) -> Self { + Self { + public_key: Key::decode(peer.public_key).expect("Failed to parse public key"), + preshared_key: peer.preshared_key.map(|key| { + Key::decode(&key).unwrap_or_else(|_| panic!("Failed to parse preshared key: {key}")) + }), + protocol_version: peer.protocol_version, + endpoint: peer.endpoint.map(|addr| { + addr.parse() + .unwrap_or_else(|_| panic!("Failed to parse endpoint address: {addr}")) + }), + last_handshake: peer + .last_handshake + .map(|timestamp| UNIX_EPOCH + Duration::from_secs(timestamp)), + tx_bytes: peer.tx_bytes, + rx_bytes: peer.rx_bytes, + persistent_keepalive_interval: peer + .persistent_keepalive_interval + .and_then(|interval| u16::try_from(interval).ok()), + allowed_ips: peer + .allowed_ips + .into_iter() + .map(|addr| { + addr.parse() + .unwrap_or_else(|_| panic!("Failed to parse allowed IP: {addr}")) + }) + .collect(), + } + } +} + +impl From for InterfaceData { + fn from(host: Host) -> Self { + Self { + listen_port: u32::from(host.listen_port), + peers: host.peers.into_values().map(Into::into).collect(), + } + } +} + +#[cfg(test)] +mod tests { + use std::time::SystemTime; + + use defguard_wireguard_rs::{key::Key, net::IpAddrMask, peer::Peer}; + use x25519_dalek::{EphemeralSecret, PublicKey}; + + use super::*; + + #[test] + fn convert_peer() { + let secret = EphemeralSecret::random(); + let key = PublicKey::from(&secret); + let peer_key: Key = key.as_ref().try_into().unwrap(); + let mut base_peer = Peer::new(peer_key); + let addr = IpAddrMask::from_str("10.20.30.2/32").unwrap(); + base_peer.allowed_ips.push(addr); + // Workaround since nanoseconds are lost in conversion. + base_peer.last_handshake = Some(SystemTime::UNIX_EPOCH); + base_peer.protocol_version = Some(3); + base_peer.endpoint = Some("127.0.0.1:8080".parse().unwrap()); + base_peer.tx_bytes = 100; + base_peer.rx_bytes = 200; + + let proto_peer: ProtoPeer = base_peer.clone().into(); + + let converted_peer: Peer = proto_peer.into(); + + assert_eq!(base_peer, converted_peer); + } + + fn sample_peer() -> Peer { + let secret = EphemeralSecret::random(); + let peer_key: Key = PublicKey::from(&secret).as_ref().try_into().unwrap(); + let mut peer = Peer::new(peer_key); + peer.allowed_ips + .push(IpAddrMask::from_str("10.20.30.2/32").unwrap()); + peer.endpoint = Some("127.0.0.1:8080".parse().unwrap()); + peer.persistent_keepalive_interval = Some(25); + peer + } + + #[test] + fn test_host_to_interface_data() { + let secret = EphemeralSecret::random(); + let host_key: Key = PublicKey::from(&secret).as_ref().try_into().unwrap(); + let mut host = Host::new(51820, host_key); + let peer = sample_peer(); + host.peers.insert(peer.public_key.clone(), peer.clone()); + + let data: InterfaceData = host.into(); + + assert_eq!(data.listen_port, 51820); + assert_eq!(data.peers.len(), 1); + assert_eq!(data.peers[0].public_key, peer.public_key.to_lower_hex()); + } + + #[test] + fn test_proto_peer_to_peer_roundtrip() { + let peer = sample_peer(); + let proto: ProtoPeer = peer.clone().into(); + let converted: Peer = proto.into(); + assert_eq!(peer, converted); + } + + #[test] + fn test_keepalive_overflow_maps_to_none() { + let mut proto: ProtoPeer = sample_peer().into(); + // A value exceeding u16::MAX can't be represented as a keepalive interval. + proto.persistent_keepalive_interval = Some(u32::from(u16::MAX) + 1); + let converted: Peer = proto.into(); + assert_eq!(converted.persistent_keepalive_interval, None); + } +} diff --git a/src-tauri/src/service/proto.rs b/src-tauri/client-proto/src/lib.rs similarity index 71% rename from src-tauri/src/service/proto.rs rename to src-tauri/client-proto/src/lib.rs index ccc1b046c..36eb75471 100644 --- a/src-tauri/src/service/proto.rs +++ b/src-tauri/client-proto/src/lib.rs @@ -1,18 +1,28 @@ +pub mod conversions; +pub mod posture_ext; + pub mod defguard { - pub mod enterprise { - pub mod posture { - pub mod v2 { - tonic::include_proto!("defguard.enterprise.posture.v2"); - } - } + pub mod client_types { + tonic::include_proto!("defguard.client_types"); } + pub mod client { pub mod v1 { tonic::include_proto!("defguard.client.v1"); } } - pub mod client_types { - tonic::include_proto!("defguard.client_types"); + pub mod proxy { + pub mod v1 { + tonic::include_proto!("defguard.proxy.v1"); + } + } + + pub mod enterprise { + pub mod posture { + pub mod v2 { + tonic::include_proto!("defguard.enterprise.posture.v2"); + } + } } } diff --git a/src-tauri/client-proto/src/posture_ext.rs b/src-tauri/client-proto/src/posture_ext.rs new file mode 100644 index 000000000..ffbe4911b --- /dev/null +++ b/src-tauri/client-proto/src/posture_ext.rs @@ -0,0 +1,143 @@ +use std::fmt; + +use crate::defguard::enterprise::posture::v2::{ + bool_check, int32_check, string_check, BoolCheck, Int32Check, StringCheck, UnavailableReason, +}; + +impl fmt::Display for UnavailableReason { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Unspecified => f.write_str("unspecified"), + Self::DetectionFailed => f.write_str("detection failed"), + Self::NotApplicable => f.write_str("not applicable on this platform"), + Self::InsufficientPermissions => f.write_str("insufficient permissions"), + } + } +} + +/// Convert `Result` to `BoolCheck`. +impl From> for BoolCheck { + fn from(value: Result) -> Self { + Self { + result: Some(match value { + Ok(inner) => bool_check::Result::Value(inner), + Err(err) => bool_check::Result::Unavailable(err as i32), + }), + } + } +} + +/// Convert `Result` to `Int32Check`. +impl From> for Int32Check { + fn from(value: Result) -> Self { + Self { + result: Some(match value { + Ok(inner) => int32_check::Result::Value(inner), + Err(err) => int32_check::Result::Unavailable(err as i32), + }), + } + } +} + +/// Convert `Result` to `StringCheck`. +impl From> for StringCheck { + fn from(value: Result) -> Self { + Self { + result: Some(match value { + Ok(inner) => string_check::Result::Value(inner), + Err(err) => string_check::Result::Unavailable(err as i32), + }), + } + } +} + +/// Convert `WMIError` to `UnavailableReason`. +#[cfg(windows)] +impl From for UnavailableReason { + fn from(err: wmi::WMIError) -> Self { + if let wmi::WMIError::HResultError { .. } = err { + UnavailableReason::InsufficientPermissions + } else { + UnavailableReason::DetectionFailed + } + } +} + +#[cfg(test)] +mod tests { + use crate::defguard::enterprise::posture::v2::{ + bool_check, int32_check, string_check, BoolCheck, Int32Check, StringCheck, + UnavailableReason, + }; + + #[test] + fn test_bool_check_ok() { + let check = BoolCheck::from(Ok(true)); + assert_eq!(check.result, Some(bool_check::Result::Value(true))); + } + + #[test] + fn test_bool_check_unavailable() { + let check = BoolCheck::from(Err(UnavailableReason::DetectionFailed)); + assert_eq!( + check.result, + Some(bool_check::Result::Unavailable( + UnavailableReason::DetectionFailed as i32 + )) + ); + } + + #[test] + fn test_int32_check_ok() { + let check = Int32Check::from(Ok(42)); + assert_eq!(check.result, Some(int32_check::Result::Value(42))); + } + + #[test] + fn test_int32_check_unavailable() { + let check = Int32Check::from(Err(UnavailableReason::NotApplicable)); + assert_eq!( + check.result, + Some(int32_check::Result::Unavailable( + UnavailableReason::NotApplicable as i32 + )) + ); + } + + #[test] + fn test_string_check_ok() { + let check = StringCheck::from(Ok("1.2.3".to_string())); + assert_eq!( + check.result, + Some(string_check::Result::Value("1.2.3".to_string())) + ); + } + + #[test] + fn test_string_check_unavailable() { + let check = StringCheck::from(Err(UnavailableReason::InsufficientPermissions)); + assert_eq!( + check.result, + Some(string_check::Result::Unavailable( + UnavailableReason::InsufficientPermissions as i32 + )) + ); + } + + #[test] + fn test_unavailable_reason_display() { + assert_eq!(UnavailableReason::Unspecified.to_string(), "unspecified"); + assert_eq!( + UnavailableReason::DetectionFailed.to_string(), + "detection failed" + ); + assert_eq!( + UnavailableReason::NotApplicable.to_string(), + "not applicable on this platform" + ); + assert_eq!( + UnavailableReason::InsufficientPermissions.to_string(), + "insufficient permissions" + ); + } +} diff --git a/src-tauri/common/Cargo.toml b/src-tauri/common/Cargo.toml index 43c7fd19f..800990efd 100644 --- a/src-tauri/common/Cargo.toml +++ b/src-tauri/common/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "common" +name = "defguard-client-common" authors.workspace = true edition.workspace = true homepage.workspace = true diff --git a/src-tauri/common/src/lib.rs b/src-tauri/common/src/lib.rs index 190fcbd38..2bdc90b39 100644 --- a/src-tauri/common/src/lib.rs +++ b/src-tauri/common/src/lib.rs @@ -1,5 +1,8 @@ use std::net::{IpAddr, Ipv4Addr, SocketAddr, TcpListener}; +/// Package version from the workspace (shared across all binaries). +pub const VERSION: &str = env!("CARGO_PKG_VERSION"); + /// Obtain a free TCP port on localhost. #[must_use] pub fn find_free_tcp_port() -> Option { @@ -90,4 +93,80 @@ mod tests { let port = find_free_tcp_port().unwrap(); assert_ne!(port, 0); } + + fn ip(addr: &str) -> IpAddr { + addr.parse().unwrap() + } + + #[test] + fn test_dns_owned_none_and_empty() { + assert_eq!(dns_owned(&None), (vec![], vec![])); + assert_eq!(dns_owned(&Some(String::new())), (vec![], vec![])); + } + + #[test] + fn test_dns_owned_ipv4_only() { + let (ips, domains) = dns_owned(&Some("10.0.0.2".to_string())); + assert_eq!(ips, vec![ip("10.0.0.2")]); + assert!(domains.is_empty()); + } + + #[test] + fn test_dns_owned_ipv6_only() { + let (ips, domains) = dns_owned(&Some("fd00::1".to_string())); + assert_eq!(ips, vec![ip("fd00::1")]); + assert!(domains.is_empty()); + } + + #[test] + fn test_dns_owned_domains_only() { + let (ips, domains) = dns_owned(&Some("tnt,teonite.net".to_string())); + assert!(ips.is_empty()); + assert_eq!(domains, vec!["tnt".to_string(), "teonite.net".to_string()]); + } + + #[test] + fn test_dns_owned_mixed_with_whitespace() { + // Entries are trimmed; parseable ones become resolver IPs, the rest search domains. + let (ips, domains) = dns_owned(&Some("10.0.0.2, tnt , teonite.net".to_string())); + assert_eq!(ips, vec![ip("10.0.0.2")]); + assert_eq!(domains, vec!["tnt".to_string(), "teonite.net".to_string()]); + } + + #[test] + fn test_dns_owned_trailing_comma_yields_empty_domains() { + // Pins current behavior: empty entries between commas are treated as (empty) domains. + let (ips, domains) = dns_owned(&Some("10.0.0.2,,".to_string())); + assert_eq!(ips, vec![ip("10.0.0.2")]); + assert_eq!(domains, vec![String::new(), String::new()]); + } + + #[test] + fn test_dns_borrow_mixed_with_whitespace() { + let config = Some("10.0.0.2, tnt , teonite.net".to_string()); + let (ips, domains) = dns_borrow(&config); + assert_eq!(ips, vec![ip("10.0.0.2")]); + assert_eq!(domains, vec!["tnt", "teonite.net"]); + } + + #[test] + fn test_dns_borrow_none() { + let (ips, domains) = dns_borrow(&None); + assert!(ips.is_empty()); + assert!(domains.is_empty()); + } + + #[cfg(any(windows, target_os = "macos"))] + #[test] + fn test_interface_name_strips_non_alphanumeric() { + assert_eq!(get_interface_name("My Loc-ation!"), "MyLocation"); + assert_eq!(get_interface_name("wg0"), "wg0"); + } + + #[cfg(not(any(windows, target_os = "macos")))] + #[test] + fn test_interface_name_returns_wg_prefixed() { + // The Linux variant searches for the next free `wgN` interface, ignoring the input name. + assert!(get_interface_name("ignored").starts_with("wg")); + } } diff --git a/src-tauri/core/Cargo.toml b/src-tauri/core/Cargo.toml new file mode 100644 index 000000000..646321610 --- /dev/null +++ b/src-tauri/core/Cargo.toml @@ -0,0 +1,53 @@ +[package] +name = "defguard-client-core" +description = "Shared business logic for the Defguard desktop client (Tauri-free)" +authors.workspace = true +edition.workspace = true +homepage.workspace = true +license-file.workspace = true +rust-version.workspace = true +version.workspace = true + +[dependencies] +base64.workspace = true +chrono = { version = "0.4", features = ["serde"] } +defguard-client-common = { path = "../common" } +defguard-client-proto = { path = "../client-proto" } +defguard_wireguard_rs.workspace = true +dirs-next.workspace = true +log.workspace = true +os_info = { version = "3.14", default-features = false } +prost.workspace = true +reqwest.workspace = true +rust-ini = "0.21" +semver.workspace = true +serde.workspace = true +serde_json.workspace = true +serde_with.workspace = true +sqlx.workspace = true +strum = { version = "0.28", features = ["derive"] } +struct-patch = "0.12" +thiserror.workspace = true +tokio.workspace = true +tonic.workspace = true +tower = "0.5" +tracing = { workspace = true } +x25519-dalek = { version = "2", features = ["getrandom", "serde", "static_secrets"] } + +hyper-util = "0.1" + +[dev-dependencies] +tempfile.workspace = true + +[target.'cfg(unix)'.dependencies] +nix = { version = "0.31", features = ["user", "fs"] } + +[target.'cfg(windows)'.dependencies] +windows-sys = { version = "0.61", features = ["Win32_Foundation"] } + +[target.'cfg(target_os = "macos")'.dependencies] +block2 = "0.6" +objc2 = "0.6" +objc2-app-kit = "0.3" +objc2-foundation = "0.3" +objc2-network-extension = "0.3" diff --git a/src-tauri/src/app_config.rs b/src-tauri/core/src/app_config.rs similarity index 51% rename from src-tauri/src/app_config.rs rename to src-tauri/core/src/app_config.rs index 8c0675732..eb8355456 100644 --- a/src-tauri/src/app_config.rs +++ b/src-tauri/core/src/app_config.rs @@ -1,23 +1,19 @@ use std::{ fs::{create_dir_all, File, OpenOptions}, - path::PathBuf, + path::Path, }; use log::LevelFilter; use serde::{Deserialize, Serialize}; use struct_patch::Patch; -use tauri::{AppHandle, Manager}; #[cfg(unix)] use crate::set_perms; static APP_CONFIG_FILE_NAME: &str = "config.json"; -fn get_config_file_path(app: &AppHandle) -> PathBuf { - let mut config_file_path = app - .path() - .app_data_dir() - .expect("Failed to access app data"); +fn get_config_file_path(config_dir: &Path) -> std::path::PathBuf { + let mut config_file_path = config_dir.to_path_buf(); if !config_file_path.exists() { create_dir_all(&config_file_path).expect("Failed to create missing app data dir"); } @@ -29,8 +25,8 @@ fn get_config_file_path(app: &AppHandle) -> PathBuf { config_file_path } -fn get_config_file(app: &AppHandle, for_write: bool) -> File { - let config_file_path = get_config_file_path(app); +fn get_config_file(config_dir: &Path, for_write: bool) -> File { + let config_file_path = get_config_file_path(config_dir); OpenOptions::new() .create(true) .read(true) @@ -76,20 +72,20 @@ impl Default for AppConfig { } impl AppConfig { - /// Try to load application configuration from application data directory. + /// Try to load application configuration from the given config directory. /// If reading the configuration file fails, default settings will be returned. #[must_use] - pub fn new(app: &AppHandle) -> Self { - let config_path = get_config_file_path(app); + pub fn new(config_dir: &Path) -> Self { + let config_path = get_config_file_path(config_dir); if !config_path.exists() { eprintln!( "Application configuration file doesn't exist; initializing it with the defaults." ); let res = Self::default(); - res.save(app); + res.save(config_dir); return res; } - let config_file = get_config_file(app, false); + let config_file = get_config_file(config_dir, false); let mut app_config = Self::default(); match serde_json::from_reader::<_, AppConfigPatch>(config_file) { Ok(patch) => { @@ -100,16 +96,16 @@ impl AppConfig { eprintln!( "Failed to deserialize application configuration file: {err}. Using defaults." ); - app_config.save(app); + app_config.save(config_dir); } } app_config } - /// Saves currently loaded AppConfig into app data dir file. + /// Saves currently loaded AppConfig into the given config directory file. /// Warning: this will always overwrite file contents. - pub fn save(&self, app: &AppHandle) { - let file = get_config_file(app, true); + pub fn save(&self, config_dir: &Path) { + let file = get_config_file(config_dir, true); match serde_json::to_writer(file, &self) { Ok(()) => debug!("Application configuration file has been saved."), Err(err) => { @@ -131,3 +127,90 @@ impl AppConfig { } } } + +#[cfg(test)] +mod tests { + use std::fs; + + use tempfile::tempdir; + + use super::{AppConfig, AppTheme, APP_CONFIG_FILE_NAME}; + + #[test] + fn test_new_creates_defaults_when_missing() { + let dir = tempdir().unwrap(); + let config = AppConfig::new(dir.path()); + let default = AppConfig::default(); + + assert_eq!(config.theme, default.theme); + assert_eq!(config.check_for_updates, default.check_for_updates); + assert_eq!(config.log_level, default.log_level); + assert_eq!(config.peer_alive_period, default.peer_alive_period); + assert_eq!(config.mtu(), default.mtu()); + // The config file is written out on first load. + assert!(dir.path().join(APP_CONFIG_FILE_NAME).exists()); + } + + #[test] + fn test_new_falls_back_on_corrupt_json() { + let dir = tempdir().unwrap(); + fs::write(dir.path().join(APP_CONFIG_FILE_NAME), b"{ not valid json").unwrap(); + + let config = AppConfig::new(dir.path()); + + assert_eq!(config.theme, AppConfig::default().theme); + assert_eq!( + config.peer_alive_period, + AppConfig::default().peer_alive_period + ); + } + + #[test] + fn test_new_applies_partial_patch() { + let dir = tempdir().unwrap(); + // Only override peer_alive_period; everything else stays at the defaults. + fs::write( + dir.path().join(APP_CONFIG_FILE_NAME), + br#"{"peer_alive_period": 42}"#, + ) + .unwrap(); + + let config = AppConfig::new(dir.path()); + + assert_eq!(config.peer_alive_period, 42); + assert_eq!(config.theme, AppConfig::default().theme); + assert_eq!( + config.check_for_updates, + AppConfig::default().check_for_updates + ); + } + + #[test] + fn test_save_round_trip() { + let dir = tempdir().unwrap(); + let config = AppConfig { + theme: AppTheme::Dark, + ..AppConfig::default() + }; + config.save(dir.path()); + + let reloaded = AppConfig::new(dir.path()); + assert_eq!(reloaded.theme, AppTheme::Dark); + } + + #[test] + fn test_mtu_zero_is_none() { + let config = AppConfig::default(); + assert_eq!(config.mtu, 0); + assert_eq!(config.mtu(), None); + } + + #[test] + fn test_mtu_nonzero_is_some() { + let config = AppConfig { + mtu: 1400, + ..AppConfig::default() + }; + assert_eq!(config.mtu(), Some(1400)); + } +} diff --git a/src-tauri/src/active_connections.rs b/src-tauri/core/src/connection/active_connections.rs similarity index 79% rename from src-tauri/src/active_connections.rs rename to src-tauri/core/src/connection/active_connections.rs index 970a31bd4..5477b5d72 100644 --- a/src-tauri/src/active_connections.rs +++ b/src-tauri/core/src/connection/active_connections.rs @@ -8,17 +8,18 @@ use crate::{ DB_POOL, }, error::Error, - utils::disconnect_interface, ConnectionType, }; -pub(crate) static ACTIVE_CONNECTIONS: LazyLock>> = +use crate::connection::disconnect_interface; + +pub static ACTIVE_CONNECTIONS: LazyLock>> = LazyLock::new(|| Mutex::new(Vec::new())); -pub(crate) async fn get_connection_id_by_type(connection_type: ConnectionType) -> Vec { +pub async fn get_connection_id_by_type(connection_type: ConnectionType) -> Vec { let active_connections = ACTIVE_CONNECTIONS.lock().await; - let connection_ids = active_connections + active_connections .iter() .filter_map(|con| { if con.connection_type == connection_type { @@ -27,9 +28,7 @@ pub(crate) async fn get_connection_id_by_type(connection_type: ConnectionType) - None } }) - .collect(); - - connection_ids + .collect() } pub async fn close_all_connections() -> Result<(), Error> { @@ -54,10 +53,7 @@ pub async fn close_all_connections() -> Result<(), Error> { Ok(()) } -pub(crate) async fn find_connection( - id: Id, - connection_type: ConnectionType, -) -> Option { +pub async fn find_connection(id: Id, connection_type: ConnectionType) -> Option { let connections = ACTIVE_CONNECTIONS.lock().await; trace!( "Checking for active connection with ID {id}, type {connection_type} in active connections." @@ -67,7 +63,6 @@ pub(crate) async fn find_connection( .iter() .find(|conn| conn.location_id == id && conn.connection_type == connection_type) { - // 'connection' now contains the first element with the specified id and connection_type trace!("Found connection: {connection:?}"); Some(connection.to_owned()) } else { @@ -79,9 +74,7 @@ pub(crate) async fn find_connection( } /// Returns active connections for a given instance. -pub(crate) async fn active_connections( - instance: &Instance, -) -> Result, Error> { +pub async fn active_connections(instance: &Instance) -> Result, Error> { let locations: HashSet = Location::find_by_instance_id(&*DB_POOL, instance.id, false) .await? .iter() diff --git a/src-tauri/core/src/connection/daemon_client.rs b/src-tauri/core/src/connection/daemon_client.rs new file mode 100644 index 000000000..5bf2d563f --- /dev/null +++ b/src-tauri/core/src/connection/daemon_client.rs @@ -0,0 +1,67 @@ +use std::sync::LazyLock; + +use hyper_util::rt::TokioIo; +#[cfg(windows)] +use tokio::net::windows::named_pipe::ClientOptions; +#[cfg(unix)] +use tokio::net::UnixStream; +use tonic::transport::channel::{Channel, Endpoint}; +#[cfg(unix)] +use tonic::transport::Uri; +use tower::service_fn; +#[cfg(windows)] +use windows_sys::Win32::Foundation::ERROR_PIPE_BUSY; + +use defguard_client_proto::defguard::client::v1::desktop_daemon_service_client::DesktopDaemonServiceClient; + +#[cfg(unix)] +const DAEMON_SOCKET_PATH: &str = "/var/run/defguard.socket"; +#[cfg(windows)] +const PIPE_NAME: &str = r"\\.\pipe\defguard_daemon"; + +pub static DAEMON_CLIENT: LazyLock> = LazyLock::new(|| { + debug!("Setting up gRPC client"); + let endpoint = Endpoint::from_static("http://localhost"); + let channel; + #[cfg(unix)] + { + channel = endpoint.connect_with_connector_lazy(service_fn(|_: Uri| async { + let stream = match UnixStream::connect(DAEMON_SOCKET_PATH).await { + Ok(stream) => stream, + Err(err) if err.kind() == std::io::ErrorKind::PermissionDenied => { + error!( + "Permission denied for UNIX domain socket; please refer to \ + https://docs.defguard.net/support-1/troubleshooting#\ + unix-socket-permission-errors-when-desktop-client-attempts-to-connect-\ + to-vpn-on-linux-machines" + ); + return Err(err); + } + Err(err) => { + error!("Problem connecting to UNIX domain socket: {err}"); + return Err(err); + } + }; + info!("Created unix gRPC client"); + Ok::<_, std::io::Error>(TokioIo::new(stream)) + })); + }; + #[cfg(windows)] + { + channel = endpoint.connect_with_connector_lazy(service_fn(|_| async { + let client = loop { + match ClientOptions::new().open(PIPE_NAME) { + Ok(client) => break client, + Err(err) if err.raw_os_error() == Some(ERROR_PIPE_BUSY as i32) => (), + Err(err) => { + error!("Problem connecting to named pipe: {err}"); + return Err(err); + } + } + }; + info!("Created windows gRPC client"); + Ok::<_, std::io::Error>(TokioIo::new(client)) + })); + } + DesktopDaemonServiceClient::new(channel) +}); diff --git a/src-tauri/core/src/connection/mod.rs b/src-tauri/core/src/connection/mod.rs new file mode 100644 index 000000000..92a8761b8 --- /dev/null +++ b/src-tauri/core/src/connection/mod.rs @@ -0,0 +1,7 @@ +pub mod active_connections; +pub mod daemon_client; +pub mod setup; + +pub use setup::{disconnect_interface, execute_command}; +#[cfg(not(target_os = "macos"))] +pub use setup::{setup_interface, setup_interface_tunnel}; diff --git a/src-tauri/core/src/connection/setup.rs b/src-tauri/core/src/connection/setup.rs new file mode 100644 index 000000000..3e500117f --- /dev/null +++ b/src-tauri/core/src/connection/setup.rs @@ -0,0 +1,411 @@ +/// Connection setup helpers. +use std::str::FromStr; + +use std::process::Command; + +use defguard_client_common::{find_free_tcp_port, get_interface_name}; +use defguard_client_proto::defguard::client::v1::CreateInterfaceRequest; +#[cfg(not(target_os = "macos"))] +use defguard_client_proto::defguard::client::v1::RemoveInterfaceRequest; +use defguard_wireguard_rs::{key::Key, net::IpAddrMask, peer::Peer, InterfaceConfiguration}; +#[cfg(not(target_os = "macos"))] +use tonic::Code; + +#[cfg(not(target_os = "macos"))] +use crate::database::DbPool; +use crate::{ + connection::daemon_client::DAEMON_CLIENT, + database::{ + models::{ + connection::{ActiveConnection, Connection}, + location::Location, + tunnel::{Tunnel, TunnelConnection}, + Id, + }, + DB_POOL, + }, + error::Error, + ConnectionType, DEFAULT_ROUTE_IPV4, DEFAULT_ROUTE_IPV6, +}; + +#[cfg(not(target_os = "macos"))] +pub async fn setup_interface( + location: &Location, + name: &str, + preshared_key: Option, + mtu: Option, + pool: &DbPool, +) -> Result { + debug!("Setting up interface for location: {location}"); + let interface_name = get_interface_name(name); + + debug!("Looking for a free port for interface {interface_name}."); + let Some(port) = find_free_tcp_port() else { + let msg = format!( + "Couldn't find free port during interface {interface_name} setup for location {location}" + ); + error!("{msg}"); + return Err(Error::InternalError(msg)); + }; + debug!("Found free port: {port} for interface {interface_name}."); + + let interface_config = location + .interface_configuration(pool, interface_name.clone(), preshared_key, mtu) + .await?; + debug!("Creating interface for location {location} with configuration {interface_config:?}"); + let request = CreateInterfaceRequest { + config: Some(interface_config.clone().into()), + dns: location.dns.clone(), + }; + if let Err(error) = DAEMON_CLIENT.clone().create_interface(request).await { + if error.code() == Code::Unavailable { + error!( + "Failed to set up connection for location {location}; background service is \ + unavailable. Make sure the service is running. Error: {error}" + ); + Err(Error::InternalError( + "Background service is unavailable. Make sure the service is running.".into(), + )) + } else { + error!( + "Failed to send a request to the background service to create an interface for \ + location {location}. Error: {error}" + ); + Err(Error::InternalError(format!( + "Failed to send a request to the background service to create an interface for \ + location {location}. Error: {error}. Check logs for details." + ))) + } + } else { + info!( + "The interface for location {location} has been created successfully, interface \ + name: {}.", + interface_config.name + ); + Ok(interface_name) + } +} + +pub async fn setup_interface_tunnel( + tunnel: &Tunnel, + name: &str, + mtu: Option, +) -> Result { + debug!("Setting up interface for tunnel {tunnel}"); + let interface_name = get_interface_name(name); + + debug!( + "Decoding tunnel {tunnel} public key: {}.", + tunnel.server_pubkey + ); + let peer_key = Key::from_str(&tunnel.server_pubkey)?; + debug!("Tunnel {tunnel} public key decoded."); + let mut peer = Peer::new(peer_key); + + debug!("Parsing tunnel {tunnel} endpoint: {}", tunnel.endpoint); + peer.set_endpoint(&tunnel.endpoint)?; + peer.persistent_keepalive_interval = Some( + tunnel + .persistent_keep_alive + .try_into() + .expect("Failed to parse persistent keep alive"), + ); + debug!("Parsed tunnel {tunnel} endpoint: {}", tunnel.endpoint); + + if let Some(psk) = &tunnel.preshared_key { + debug!("Decoding tunnel {tunnel} preshared key."); + let peer_psk = Key::from_str(psk)?; + debug!("Preshared key for tunnel {tunnel} decoded."); + peer.preshared_key = Some(peer_psk); + } + + debug!( + "Parsing tunnel {tunnel} allowed ips: {:?}", + tunnel.allowed_ips + ); + let allowed_ips = if tunnel.route_all_traffic { + debug!("Using all traffic routing for tunnel {tunnel}"); + vec![DEFAULT_ROUTE_IPV4.into(), DEFAULT_ROUTE_IPV6.into()] + } else { + let msg = match &tunnel.allowed_ips { + Some(ips) => format!("Using predefined location traffic for tunnel {tunnel}: {ips}"), + None => format!("No allowed IP addresses found in tunnel {tunnel} configuration"), + }; + debug!("{msg}"); + tunnel + .allowed_ips + .as_ref() + .map(|ips| ips.split(',').map(str::to_string).collect()) + .unwrap_or_default() + }; + for allowed_ip in &allowed_ips { + match IpAddrMask::from_str(allowed_ip.trim()) { + Ok(addr) => { + peer.allowed_ips.push(addr); + } + Err(err) => { + error!("Error parsing IP address {allowed_ip}: {err}"); + } + } + } + debug!("Parsed tunnel {tunnel} allowed IPs: {:?}", peer.allowed_ips); + + debug!("Looking for a free port for interface {interface_name}."); + let Some(port) = find_free_tcp_port() else { + let msg = format!( + "Couldn't find free port for interface {interface_name} while setting up tunnel \ + {tunnel}" + ); + error!("{msg}"); + return Err(Error::InternalError(msg)); + }; + debug!("Found free port: {port} for interface {interface_name}."); + + let addresses = tunnel + .address + .split(',') + .map(str::trim) + .map(IpAddrMask::from_str) + .collect::>() + .map_err(|err| { + let msg = format!("Failed to parse IP addresses '{}': {err}", tunnel.address); + error!("{msg}"); + Error::InternalError(msg) + })?; + let interface_config = InterfaceConfiguration { + name: interface_name.clone(), + prvkey: tunnel.prvkey.clone(), + addresses, + port, + peers: vec![peer.clone()], + mtu, + fwmark: None, + }; + + debug!("Creating interface {interface_config:?}"); + let request = CreateInterfaceRequest { + config: Some(interface_config.clone().into()), + dns: tunnel.dns.clone(), + }; + if let Some(pre_up) = &tunnel.pre_up { + debug!( + "Executing defined PreUp command before setting up the interface {} for the tunnel \ + {tunnel}: {pre_up}", + interface_config.name + ); + let _ = execute_command(pre_up); + info!( + "Executed defined PreUp command before setting up the interface {} for the tunnel \ + {tunnel}: {pre_up}", + interface_config.name + ); + } + if let Err(error) = DAEMON_CLIENT.clone().create_interface(request).await { + error!( + "Failed to create a network interface ({}) for tunnel {tunnel}: {error}", + interface_config.name + ); + return Err(Error::InternalError(format!( + "Failed to create a network interface ({}) for tunnel {tunnel}, error message: {}. \ + Check logs for more details.", + interface_config.name, + error.message() + ))); + } + + info!( + "Network interface {} for tunnel {tunnel} created successfully.", + interface_config.name + ); + if let Some(post_up) = &tunnel.post_up { + debug!( + "Executing defined PostUp command after setting up the interface {} for the tunnel \ + {tunnel}: {post_up}", + interface_config.name + ); + let _ = execute_command(post_up); + info!( + "Executed defined PostUp command after setting up the interface {} for the tunnel \ + {tunnel}: {post_up}", + interface_config.name + ); + } + debug!( + "Created interface {} with config: {interface_config:?}", + interface_config.name + ); + + Ok(interface_name) +} + +pub async fn disconnect_interface(active_connection: &ActiveConnection) -> Result<(), Error> { + debug!( + "Disconnecting interface {}.", + active_connection.interface_name + ); + let location_id = active_connection.location_id; + let interface_name = active_connection.interface_name.clone(); + + match active_connection.connection_type { + ConnectionType::Location => { + let Some(location) = Location::find_by_id(&*DB_POOL, location_id).await? else { + error!( + "Error while disconnecting interface {interface_name}, location with ID \ + {location_id} not found" + ); + return Err(Error::NotFound); + }; + + #[cfg(target_os = "macos")] + { + let result = location.stop_vpn_tunnel(); + if !result { + error!("stop_tunnel() for location {} failed", location.name); + return Err(Error::InternalError("Error from tunnel".into())); + } + debug!("stop_tunnel() for location {} succeeded", location.name); + } + + #[cfg(not(target_os = "macos"))] + { + let request = RemoveInterfaceRequest { + interface_name, + endpoint: location.endpoint.clone(), + }; + debug!( + "Sending request to the background service to remove interface {} for \ + location {}...", + active_connection.interface_name, location.name + ); + if let Err(error) = DAEMON_CLIENT.clone().remove_interface(request).await { + let msg = if error.code() == Code::Unavailable { + format!( + "Couldn't remove interface {}. Background service is unavailable. \ + Please make sure the service is running. Error: {error}.", + active_connection.interface_name + ) + } else { + format!( + "Failed to send a request to the background service to remove \ + interface {}. Error: {error}.", + active_connection.interface_name + ) + }; + error!("{msg}"); + } + } + + let connection: Connection = active_connection.into(); + let connection = connection.save(&*DB_POOL).await?; + debug!( + "Saved location {} new connection status in the database", + location.name + ); + trace!("Saved connection: {connection:?}"); + info!( + "Network interface {} for location {location} has been removed", + active_connection.interface_name + ); + debug!("Finished disconnecting from location {}", location.name); + } + ConnectionType::Tunnel => { + let Some(tunnel) = Tunnel::find_by_id(&*DB_POOL, location_id).await? else { + error!( + "Error while disconnecting interface {interface_name}, tunnel with ID \ + {location_id} not found" + ); + return Err(Error::NotFound); + }; + if let Some(pre_down) = &tunnel.pre_down { + debug!( + "Executing defined PreDown command before setting up the interface {} for \ + the tunnel {tunnel}: {pre_down}", + active_connection.interface_name + ); + let _ = execute_command(pre_down); + info!( + "Executed defined PreDown command before setting up the interface {} for \ + the tunnel {tunnel}: {pre_down}", + active_connection.interface_name + ); + } + + #[cfg(target_os = "macos")] + { + let result = tunnel.stop_vpn_tunnel(); + if !result { + error!("stop_tunnel() for tunnel {} failed", tunnel.name); + return Err(Error::InternalError("Error from tunnel".into())); + } + debug!("stop_tunnel() for tunnel {} succeeded", tunnel.name); + } + + #[cfg(not(target_os = "macos"))] + { + let request = RemoveInterfaceRequest { + interface_name, + endpoint: tunnel.endpoint.clone(), + }; + if let Err(error) = DAEMON_CLIENT.clone().remove_interface(request).await { + error!( + "Error while removing interface {}, error details: {error:?}", + active_connection.interface_name + ); + return Err(Error::InternalError(format!( + "Failed to remove interface, error message: {}", + error.message() + ))); + } + } + if let Some(post_down) = &tunnel.post_down { + debug!( + "Executing defined PostDown command after removing the interface {} for \ + the tunnel {tunnel}: {post_down}", + active_connection.interface_name + ); + let _ = execute_command(post_down); + info!( + "Executed defined PostDown command after removing the interface {} for \ + the tunnel {tunnel}: {post_down}", + active_connection.interface_name + ); + } + let connection: TunnelConnection = active_connection.into(); + let connection = connection.save(&*DB_POOL).await?; + debug!( + "Saved new tunnel {} connection status in the database", + tunnel.name + ); + trace!("Saved connection: {connection:#?}"); + info!( + "Network interface {} for tunnel {tunnel} has been removed", + active_connection.interface_name + ); + debug!("Finished disconnecting from tunnel {}", tunnel.name); + } + } + + Ok(()) +} + +pub fn execute_command(command: &str) -> Result<(), Error> { + debug!("Executing command: {command}"); + let mut command_parts = command.split_whitespace(); + + if let Some(command) = command_parts.next() { + let output = Command::new(command).args(command_parts).output()?; + + if output.status.success() { + let stdout = String::from_utf8_lossy(&output.stdout); + let stderr = String::from_utf8_lossy(&output.stderr); + debug!("Command {command} executed successfully. Stdout: {stdout}"); + if !stderr.is_empty() { + error!("Command produced the following output on stderr: {stderr}"); + } + } else { + let stderr = String::from_utf8_lossy(&output.stderr); + error!("Error while executing command: {command}. Stderr: {stderr}"); + } + } + Ok(()) +} diff --git a/src-tauri/src/database/mod.rs b/src-tauri/core/src/database/mod.rs similarity index 98% rename from src-tauri/src/database/mod.rs rename to src-tauri/core/src/database/mod.rs index 99866016a..5cbdcaa2d 100644 --- a/src-tauri/src/database/mod.rs +++ b/src-tauri/core/src/database/mod.rs @@ -15,7 +15,7 @@ const DB_NAME: &str = "defguard.db"; pub mod models; -pub(crate) type DbPool = SqlitePool; +pub type DbPool = SqlitePool; pub static DB_POOL: LazyLock = LazyLock::new(|| { let db_url = prepare_db_url().expect("Wrong database URL."); @@ -96,7 +96,7 @@ fn prepare_db_url() -> Result { pub async fn handle_db_migrations() { debug!("Running database migrations, if there are any."); - sqlx::migrate!() + sqlx::migrate!("../migrations") .run(&*DB_POOL) .await .expect("Failed to apply database migrations."); diff --git a/src-tauri/src/database/models/connection.rs b/src-tauri/core/src/database/models/connection.rs similarity index 55% rename from src-tauri/src/database/models/connection.rs rename to src-tauri/core/src/database/models/connection.rs index f816c226b..56a5b9b15 100644 --- a/src-tauri/src/database/models/connection.rs +++ b/src-tauri/core/src/database/models/connection.rs @@ -14,7 +14,7 @@ pub struct Connection { } impl Connection { - pub(crate) async fn save<'e, E>(self, executor: E) -> Result, Error> + pub async fn save<'e, E>(self, executor: E) -> Result, Error> where E: SqliteExecutor<'e>, { @@ -36,7 +36,7 @@ impl Connection { }) } - pub(crate) async fn latest_by_location_id<'e, E>( + pub async fn latest_by_location_id<'e, E>( executor: E, location_id: Id, ) -> Result>, Error> @@ -81,10 +81,7 @@ impl From for CommonConnectionInfo { } impl ConnectionInfo { - pub(crate) async fn all_by_location_id<'e, E>( - executor: E, - location_id: Id, - ) -> Result, Error> + pub async fn all_by_location_id<'e, E>(executor: E, location_id: Id) -> Result, Error> where E: SqliteExecutor<'e>, { @@ -130,11 +127,7 @@ pub struct ActiveConnection { impl ActiveConnection { #[must_use] - pub(crate) fn new( - location_id: Id, - interface_name: String, - connection_type: ConnectionType, - ) -> Self { + pub fn new(location_id: Id, interface_name: String, connection_type: ConnectionType) -> Self { let start = Utc::now().naive_utc(); Self { location_id, @@ -167,3 +160,108 @@ impl From> for CommonConnection { } } } + +#[cfg(test)] +mod tests { + use sqlx::SqlitePool; + + use super::*; + use crate::database::models::{ + instance::{ClientTrafficPolicy, Instance}, + location::{Location, LocationMfaMode, ServiceLocationMode}, + }; + + async fn seed_location(pool: &SqlitePool) -> (Id, Id) { + let instance = Instance { + id: NoId, + name: "instance".into(), + uuid: "uuid-1".into(), + url: "https://core.example".into(), + proxy_url: "https://proxy.example".into(), + username: "alice".into(), + token: None, + client_traffic_policy: ClientTrafficPolicy::None, + enterprise_enabled: false, + openid_display_name: None, + } + .save(pool) + .await + .unwrap(); + + let location = Location { + id: NoId, + instance_id: instance.id, + network_id: 1, + name: "loc".into(), + address: "10.0.0.2/24".into(), + pubkey: "pk".into(), + endpoint: "1.2.3.4:51820".into(), + allowed_ips: "0.0.0.0/0".into(), + dns: None, + route_all_traffic: false, + keepalive_interval: 25, + location_mfa_mode: LocationMfaMode::Disabled, + service_location_mode: ServiceLocationMode::Disabled, + mfa_method: None, + posture_check_required: false, + } + .save(pool) + .await + .unwrap(); + + (instance.id, location.id) + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_connection_round_trip(pool: SqlitePool) { + let (_instance_id, location_id) = seed_location(&pool).await; + let now = Utc::now().naive_utc(); + + Connection { + id: NoId, + location_id, + start: now, + end: now, + } + .save(&pool) + .await + .unwrap(); + + let latest = Connection::latest_by_location_id(&pool, location_id) + .await + .unwrap() + .expect("connection should exist"); + assert_eq!(latest.location_id, location_id); + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_delete_instance_cascades_to_location_and_connection(pool: SqlitePool) { + let (instance_id, location_id) = seed_location(&pool).await; + let now = Utc::now().naive_utc(); + Connection { + id: NoId, + location_id, + start: now, + end: now, + } + .save(&pool) + .await + .unwrap(); + + // Deleting the parent instance must cascade through location to its connections. + let instance = Instance::find_by_id(&pool, instance_id) + .await + .unwrap() + .unwrap(); + instance.delete(&pool).await.unwrap(); + + assert!(Location::find_by_id(&pool, location_id) + .await + .unwrap() + .is_none()); + assert!(Connection::latest_by_location_id(&pool, location_id) + .await + .unwrap() + .is_none()); + } +} diff --git a/src-tauri/src/database/models/instance.rs b/src-tauri/core/src/database/models/instance.rs similarity index 55% rename from src-tauri/src/database/models/instance.rs rename to src-tauri/core/src/database/models/instance.rs index 9779e1497..fcfc7d78c 100644 --- a/src-tauri/src/database/models/instance.rs +++ b/src-tauri/core/src/database/models/instance.rs @@ -26,8 +26,8 @@ impl fmt::Display for Instance { } } -impl From for Instance { - fn from(instance_info: proto::defguard::client_types::InstanceInfo) -> Self { +impl From for Instance { + fn from(instance_info: proto::client_types::InstanceInfo) -> Self { let client_traffic_policy = ClientTrafficPolicy::from(&instance_info); Self { id: NoId, @@ -45,7 +45,7 @@ impl From for Instance { } impl Instance { - pub(crate) async fn save<'e, E>(&mut self, executor: E) -> Result<(), sqlx::Error> + pub async fn save<'e, E>(&mut self, executor: E) -> Result<(), sqlx::Error> where E: SqliteExecutor<'e>, { @@ -85,7 +85,7 @@ impl Instance { Ok(instances) } - pub(crate) async fn find_by_id<'e, E>(executor: E, id: Id) -> Result, sqlx::Error> + pub async fn find_by_id<'e, E>(executor: E, id: Id) -> Result, sqlx::Error> where E: SqliteExecutor<'e>, { @@ -101,7 +101,23 @@ impl Instance { Ok(instance) } - pub(crate) async fn delete_by_id<'e, E>(executor: E, id: Id) -> Result<(), sqlx::Error> + pub async fn find_by_name<'e, E>(executor: E, name: &str) -> Result, sqlx::Error> + where + E: SqliteExecutor<'e>, + { + let instance = query_as!( + Self, + "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", \ + client_traffic_policy, enterprise_enabled, openid_display_name \ + FROM instance WHERE name = $1;", + name + ) + .fetch_optional(executor) + .await?; + Ok(instance) + } + + pub async fn delete_by_id<'e, E>(executor: E, id: Id) -> Result<(), sqlx::Error> where E: SqliteExecutor<'e>, { @@ -112,7 +128,7 @@ impl Instance { Ok(()) } - pub(crate) async fn delete<'e, E>(&self, executor: E) -> Result<(), sqlx::Error> + pub async fn delete<'e, E>(&self, executor: E) -> Result<(), sqlx::Error> where E: SqliteExecutor<'e>, { @@ -120,7 +136,7 @@ impl Instance { Ok(()) } - pub(crate) async fn all_with_token<'e, E>(executor: E) -> Result, sqlx::Error> + pub async fn all_with_token<'e, E>(executor: E) -> Result, sqlx::Error> where E: SqliteExecutor<'e>, { @@ -138,8 +154,8 @@ impl Instance { } // This compares proto::InstanceInfo, not to be confused with regular InstanceInfo defined below -impl PartialEq for Instance { - fn eq(&self, other: &proto::defguard::client_types::InstanceInfo) -> bool { +impl PartialEq for Instance { + fn eq(&self, other: &proto::client_types::InstanceInfo) -> bool { let other_policy = ClientTrafficPolicy::from(other); self.name == other.name && self.uuid == other.id @@ -223,8 +239,8 @@ pub enum ClientTrafficPolicy { } /// Retrieves `ClientTrafficPolicy` from `proto::InstanceInfo` while ensuring backwards compatibility -impl From<&proto::defguard::client_types::InstanceInfo> for ClientTrafficPolicy { - fn from(instance: &proto::defguard::client_types::InstanceInfo) -> Self { +impl From<&proto::client_types::InstanceInfo> for ClientTrafficPolicy { + fn from(instance: &proto::client_types::InstanceInfo) -> Self { match ( instance.client_traffic_policy, #[allow(deprecated)] @@ -261,3 +277,144 @@ impl From for ClientTrafficPolicy { Self::from(value as i32) } } + +#[cfg(test)] +mod tests { + use sqlx::SqlitePool; + + use super::*; + + fn new_instance() -> Instance { + Instance { + id: NoId, + name: "instance".into(), + uuid: "uuid-1".into(), + url: "https://core.example".into(), + proxy_url: "https://proxy.example".into(), + username: "alice".into(), + token: Some("token".into()), + client_traffic_policy: ClientTrafficPolicy::None, + enterprise_enabled: false, + openid_display_name: None, + } + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_instance_crud_round_trip(pool: SqlitePool) { + let instance = new_instance().save(&pool).await.unwrap(); + + let found = Instance::find_by_id(&pool, instance.id) + .await + .unwrap() + .expect("instance should exist"); + assert_eq!(found.uuid, "uuid-1"); + assert_eq!(found.name, "instance"); + + let all = Instance::all(&pool).await.unwrap(); + assert_eq!(all.len(), 1); + + let by_name = Instance::find_by_name(&pool, "instance") + .await + .unwrap() + .expect("instance should be found by name"); + assert_eq!(by_name.id, instance.id); + + instance.delete(&pool).await.unwrap(); + assert!(Instance::find_by_id(&pool, instance.id) + .await + .unwrap() + .is_none()); + } + + #[test] + fn test_client_traffic_policy_from_i32() { + assert_eq!(ClientTrafficPolicy::from(0), ClientTrafficPolicy::None); + assert_eq!( + ClientTrafficPolicy::from(1), + ClientTrafficPolicy::DisableAllTraffic + ); + assert_eq!( + ClientTrafficPolicy::from(2), + ClientTrafficPolicy::ForceAllTraffic + ); + // Unknown discriminants fall back to None. + assert_eq!(ClientTrafficPolicy::from(99), ClientTrafficPolicy::None); + assert_eq!(ClientTrafficPolicy::from(-1), ClientTrafficPolicy::None); + } + + #[test] + fn test_client_traffic_policy_from_i64() { + assert_eq!( + ClientTrafficPolicy::from(2_i64), + ClientTrafficPolicy::ForceAllTraffic + ); + assert_eq!(ClientTrafficPolicy::from(99_i64), ClientTrafficPolicy::None); + } + + #[test] + fn test_client_traffic_policy_from_option() { + assert_eq!(ClientTrafficPolicy::from(None), ClientTrafficPolicy::None); + assert_eq!( + ClientTrafficPolicy::from(Some(2)), + ClientTrafficPolicy::ForceAllTraffic + ); + } + + fn base_info() -> proto::client_types::InstanceInfo { + proto::client_types::InstanceInfo { + id: "uuid-1".into(), + name: "instance".into(), + url: "https://core.example".into(), + proxy_url: "https://proxy.example".into(), + username: "alice".into(), + enterprise_enabled: true, + openid_display_name: Some("OIDC".into()), + ..Default::default() + } + } + + #[test] + fn test_client_traffic_policy_from_instance_info() { + // Explicit policy wins over the deprecated bool, even when the bool is set. + let mut info = base_info(); + info.client_traffic_policy = Some(2); + #[allow(deprecated)] + { + info.disable_all_traffic = true; + } + assert_eq!( + ClientTrafficPolicy::from(&info), + ClientTrafficPolicy::ForceAllTraffic + ); + + // No explicit policy: the deprecated bool decides. + let mut info = base_info(); + #[allow(deprecated)] + { + info.disable_all_traffic = true; + } + assert_eq!( + ClientTrafficPolicy::from(&info), + ClientTrafficPolicy::DisableAllTraffic + ); + + let info = base_info(); + assert_eq!(ClientTrafficPolicy::from(&info), ClientTrafficPolicy::None); + } + + #[test] + fn test_instance_from_instance_info() { + let info = base_info(); + let instance: Instance = info.into(); + + assert_eq!(instance.uuid, "uuid-1"); + assert_eq!(instance.name, "instance"); + assert_eq!(instance.url, "https://core.example"); + assert_eq!(instance.proxy_url, "https://proxy.example"); + assert_eq!(instance.username, "alice"); + assert!(instance.token.is_none()); + assert!(instance.enterprise_enabled); + assert_eq!(instance.openid_display_name, Some("OIDC".to_string())); + assert_eq!(instance.client_traffic_policy, ClientTrafficPolicy::None); + } +} diff --git a/src-tauri/src/database/models/location.rs b/src-tauri/core/src/database/models/location.rs similarity index 74% rename from src-tauri/src/database/models/location.rs rename to src-tauri/core/src/database/models/location.rs index 543d480b9..a8369923e 100644 --- a/src-tauri/src/database/models/location.rs +++ b/src-tauri/core/src/database/models/location.rs @@ -10,17 +10,12 @@ use sqlx::{prelude::Type, query, query_as, query_scalar, SqliteExecutor}; #[cfg(not(target_os = "macos"))] use super::wireguard_keys::WireguardKeys; use super::{Id, NoId}; -#[cfg(not(target_os = "macos"))] -use crate::{ - database::DbPool, - utils::{DEFAULT_ROUTE_IPV4, DEFAULT_ROUTE_IPV6}, -}; -use crate::{ - error::Error, - proto::defguard::client_types::{ - LocationMfaMode as ProtoLocationMfaMode, ServiceLocationMode as ProtoServiceLocationMode, - }, +use crate::error::Error; +use crate::proto::client_types::{ + LocationMfaMode as ProtoLocationMfaMode, ServiceLocationMode as ProtoServiceLocationMode, }; +#[cfg(not(target_os = "macos"))] +use crate::{database::DbPool, DEFAULT_ROUTE_IPV4, DEFAULT_ROUTE_IPV6}; #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash, Type)] #[repr(u32)] @@ -76,7 +71,7 @@ pub enum LocationMfaMethod { MobileApprove = 4, } -pub(crate) fn infer_mfa_method( +pub fn infer_mfa_method( mode: LocationMfaMode, method: Option, ) -> Option { @@ -126,10 +121,7 @@ impl fmt::Display for Location { impl Location { /// Ignores service locations #[cfg(any(windows, target_os = "macos"))] - pub(crate) async fn all<'e, E>( - executor: E, - include_service_locations: bool, - ) -> sqlx::Result> + pub async fn all<'e, E>(executor: E, include_service_locations: bool) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -151,10 +143,7 @@ impl Location { } #[cfg(any(windows, target_os = "macos"))] - pub(crate) async fn exist<'e, E>( - executor: E, - include_service_locations: bool, - ) -> sqlx::Result + pub async fn exist<'e, E>(executor: E, include_service_locations: bool) -> sqlx::Result where E: SqliteExecutor<'e>, { @@ -170,7 +159,7 @@ impl Location { Ok(result != 0) } - pub(crate) async fn save<'e, E>(&mut self, executor: E) -> sqlx::Result<()> + pub async fn save<'e, E>(&mut self, executor: E) -> sqlx::Result<()> where E: SqliteExecutor<'e>, { @@ -203,10 +192,7 @@ impl Location { Ok(()) } - pub(crate) async fn find_by_id<'e, E>( - executor: E, - location_id: Id, - ) -> sqlx::Result> + pub async fn find_by_id<'e, E>(executor: E, location_id: Id) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -224,7 +210,7 @@ impl Location { .await } - pub(crate) async fn find_by_instance_id<'e, E>( + pub async fn find_by_instance_id<'e, E>( executor: E, instance_id: Id, include_service_locations: bool, @@ -250,7 +236,7 @@ impl Location { .await } - pub(crate) async fn find_by_public_key<'e, E>(executor: E, pubkey: &str) -> sqlx::Result + pub async fn find_by_public_key<'e, E>(executor: E, pubkey: &str) -> sqlx::Result where E: SqliteExecutor<'e>, { @@ -268,7 +254,7 @@ impl Location { .await } - pub(crate) async fn delete<'e, E>(&self, executor: E) -> sqlx::Result<()> + pub async fn delete<'e, E>(&self, executor: E) -> sqlx::Result<()> where E: SqliteExecutor<'e>, { @@ -279,7 +265,7 @@ impl Location { } /// Disables all traffic for locations related to the given instance - pub(crate) async fn disable_all_traffic_for_all<'e, E>( + pub async fn disable_all_traffic_for_all<'e, E>( executor: E, instance_id: Id, ) -> Result<(), Error> @@ -295,7 +281,7 @@ impl Location { Ok(()) } - pub(crate) fn mfa_enabled(&self) -> bool { + pub fn mfa_enabled(&self) -> bool { match self.location_mfa_mode { LocationMfaMode::Disabled => false, LocationMfaMode::Internal | LocationMfaMode::External => true, @@ -303,7 +289,7 @@ impl Location { } #[cfg(not(target_os = "macos"))] - pub(crate) async fn interface_configuration( + pub async fn interface_configuration( &self, pool: &DbPool, interface_name: String, @@ -418,7 +404,7 @@ impl Location { } impl Location { - pub(crate) async fn save<'e, E>(self, executor: E) -> sqlx::Result> + pub async fn save<'e, E>(self, executor: E) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -495,3 +481,126 @@ impl From> for Location { } } } + +#[cfg(test)] +mod tests { + use sqlx::SqlitePool; + + use super::*; + use crate::database::models::instance::{ClientTrafficPolicy, Instance}; + + fn new_instance() -> Instance { + Instance { + id: NoId, + name: "instance".into(), + uuid: "uuid-1".into(), + url: "https://core.example".into(), + proxy_url: "https://proxy.example".into(), + username: "alice".into(), + token: None, + client_traffic_policy: ClientTrafficPolicy::None, + enterprise_enabled: false, + openid_display_name: None, + } + } + + fn new_location(instance_id: Id) -> Location { + Location { + id: NoId, + instance_id, + network_id: 1, + name: "loc".into(), + address: "10.0.0.2/24".into(), + pubkey: "pk".into(), + endpoint: "1.2.3.4:51820".into(), + allowed_ips: "0.0.0.0/0".into(), + dns: None, + route_all_traffic: false, + keepalive_interval: 25, + location_mfa_mode: LocationMfaMode::Disabled, + service_location_mode: ServiceLocationMode::Disabled, + mfa_method: None, + posture_check_required: false, + } + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_location_crud_round_trip(pool: SqlitePool) { + let instance = new_instance().save(&pool).await.unwrap(); + let location = new_location(instance.id).save(&pool).await.unwrap(); + + let found = Location::find_by_id(&pool, location.id) + .await + .unwrap() + .expect("location should exist"); + assert_eq!(found.name, "loc"); + assert_eq!(found.instance_id, instance.id); + + location.delete(&pool).await.unwrap(); + assert!(Location::find_by_id(&pool, location.id) + .await + .unwrap() + .is_none()); + } + + #[test] + fn test_infer_mfa_method() { + use LocationMfaMethod::{Biometric, Email, Oidc, Totp}; + use LocationMfaMode::{Disabled, External, Internal}; + + // Disabled mode passes the configured method through unchanged. + assert_eq!(infer_mfa_method(Disabled, None), None); + assert_eq!(infer_mfa_method(Disabled, Some(Totp)), Some(Totp)); + + // Internal mode forces Totp when no method or OIDC is configured. + assert_eq!(infer_mfa_method(Internal, None), Some(Totp)); + assert_eq!(infer_mfa_method(Internal, Some(Oidc)), Some(Totp)); + // Internal mode keeps any other explicit method. + assert_eq!(infer_mfa_method(Internal, Some(Email)), Some(Email)); + assert_eq!(infer_mfa_method(Internal, Some(Biometric)), Some(Biometric)); + + // External mode always resolves to OIDC, ignoring the configured method. + assert_eq!(infer_mfa_method(External, None), Some(Oidc)); + assert_eq!(infer_mfa_method(External, Some(Totp)), Some(Oidc)); + } + + #[test] + fn test_location_mfa_mode_from_proto() { + assert_eq!( + LocationMfaMode::from(ProtoLocationMfaMode::Unspecified), + LocationMfaMode::Disabled + ); + assert_eq!( + LocationMfaMode::from(ProtoLocationMfaMode::Disabled), + LocationMfaMode::Disabled + ); + assert_eq!( + LocationMfaMode::from(ProtoLocationMfaMode::Internal), + LocationMfaMode::Internal + ); + assert_eq!( + LocationMfaMode::from(ProtoLocationMfaMode::External), + LocationMfaMode::External + ); + } + + #[test] + fn test_service_location_mode_from_proto() { + assert_eq!( + ServiceLocationMode::from(ProtoServiceLocationMode::Unspecified), + ServiceLocationMode::Disabled + ); + assert_eq!( + ServiceLocationMode::from(ProtoServiceLocationMode::Disabled), + ServiceLocationMode::Disabled + ); + assert_eq!( + ServiceLocationMode::from(ProtoServiceLocationMode::Prelogon), + ServiceLocationMode::PreLogon + ); + assert_eq!( + ServiceLocationMode::from(ProtoServiceLocationMode::Alwayson), + ServiceLocationMode::AlwaysOn + ); + } +} diff --git a/src-tauri/src/database/models/location_stats.rs b/src-tauri/core/src/database/models/location_stats.rs similarity index 72% rename from src-tauri/src/database/models/location_stats.rs rename to src-tauri/core/src/database/models/location_stats.rs index c0740ceb9..aad5f3255 100644 --- a/src-tauri/src/database/models/location_stats.rs +++ b/src-tauri/core/src/database/models/location_stats.rs @@ -6,18 +6,18 @@ use serde::{Deserialize, Serialize}; use sqlx::{query, query_as, query_scalar, SqliteExecutor}; use super::{location::Location, Id, NoId, PURGE_DURATION}; -use crate::{commands::DateTimeAggregation, error::Error, CommonLocationStats, ConnectionType}; +use crate::{CommonLocationStats, ConnectionType, DateTimeAggregation}; #[derive(Debug, Serialize, Deserialize)] pub struct LocationStats { id: I, - pub(crate) location_id: Id, + pub location_id: Id, upload: i64, download: i64, - pub(crate) last_handshake: i64, - pub(crate) collected_at: NaiveDateTime, + pub last_handshake: i64, + pub collected_at: NaiveDateTime, listen_port: u32, - pub(crate) persistent_keepalive_interval: Option, + pub persistent_keepalive_interval: Option, } impl From> for CommonLocationStats { @@ -40,7 +40,7 @@ pub async fn peer_to_location_stats<'e, E>( peer: &Peer, listen_port: u32, executor: E, -) -> Result, Error> +) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -61,7 +61,7 @@ where impl LocationStats { // Although not used on macOS, allow dead code for `sqlx prepare`. #[cfg_attr(target_os = "macos", allow(dead_code))] - pub(crate) async fn get_name<'e, E>(&self, executor: E) -> Result + pub async fn get_name<'e, E>(&self, executor: E) -> sqlx::Result where E: SqliteExecutor<'e>, { @@ -73,7 +73,7 @@ impl LocationStats { impl LocationStats { #[must_use] - pub(crate) fn new( + pub fn new( location_id: Id, upload: i64, download: i64, @@ -93,7 +93,7 @@ impl LocationStats { } } - pub(crate) async fn save<'e, E>(self, executor: E) -> Result, Error> + pub async fn save<'e, E>(self, executor: E) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -127,13 +127,13 @@ impl LocationStats { } impl LocationStats { - pub(crate) async fn all_by_location_id<'e, E>( + pub async fn all_by_location_id<'e, E>( executor: E, location_id: Id, from: &NaiveDateTime, aggregation: &DateTimeAggregation, limit: Option, - ) -> Result, Error> + ) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -168,10 +168,10 @@ impl LocationStats { Ok(stats) } - pub(crate) async fn latest_by_download_change<'e, E>( + pub async fn latest_by_download_change<'e, E>( executor: E, location_id: Id, - ) -> Result, Error> + ) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -206,7 +206,7 @@ impl LocationStats { } /// Purge old statistics. - pub async fn purge<'e, E>(executor: E) -> Result<(), Error> + pub async fn purge<'e, E>(executor: E) -> sqlx::Result<()> where E: SqliteExecutor<'e>, { @@ -220,3 +220,68 @@ impl LocationStats { Ok(()) } } + +#[cfg(test)] +mod tests { + use sqlx::SqlitePool; + + use super::*; + use crate::database::models::{ + instance::{ClientTrafficPolicy, Instance}, + location::{LocationMfaMode, ServiceLocationMode}, + }; + + async fn seed_location(pool: &SqlitePool) -> Id { + let instance = Instance { + id: NoId, + name: "instance".into(), + uuid: "uuid-1".into(), + url: "https://core.example".into(), + proxy_url: "https://proxy.example".into(), + username: "alice".into(), + token: None, + client_traffic_policy: ClientTrafficPolicy::None, + enterprise_enabled: false, + openid_display_name: None, + } + .save(pool) + .await + .unwrap(); + + Location { + id: NoId, + instance_id: instance.id, + network_id: 1, + name: "loc".into(), + address: "10.0.0.2/24".into(), + pubkey: "pk".into(), + endpoint: "1.2.3.4:51820".into(), + allowed_ips: "0.0.0.0/0".into(), + dns: None, + route_all_traffic: false, + keepalive_interval: 25, + location_mfa_mode: LocationMfaMode::Disabled, + service_location_mode: ServiceLocationMode::Disabled, + mfa_method: None, + posture_check_required: false, + } + .save(pool) + .await + .unwrap() + .id + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_location_stats_save_round_trip(pool: SqlitePool) { + let location_id = seed_location(&pool).await; + + let stats = LocationStats::new(location_id, 100, 200, 1_700_000_000, 51820, Some(25)) + .save(&pool) + .await + .unwrap(); + + // A real row id is returned on insert. + assert!(stats.id > 0); + assert_eq!(stats.location_id, location_id); + } +} diff --git a/src-tauri/src/database/models/mod.rs b/src-tauri/core/src/database/models/mod.rs similarity index 87% rename from src-tauri/src/database/models/mod.rs rename to src-tauri/core/src/database/models/mod.rs index ca953e3e5..f8aec7327 100644 --- a/src-tauri/src/database/models/mod.rs +++ b/src-tauri/core/src/database/models/mod.rs @@ -5,6 +5,8 @@ pub mod instance; pub mod location; pub mod location_stats; pub mod tunnel; +#[cfg(target_os = "macos")] +pub mod tunnel_configuration; pub mod wireguard_keys; // Typestate structs to make working with optional IDs easier diff --git a/src-tauri/src/database/models/settings.rs b/src-tauri/core/src/database/models/settings.rs similarity index 100% rename from src-tauri/src/database/models/settings.rs rename to src-tauri/core/src/database/models/settings.rs diff --git a/src-tauri/src/database/models/tunnel.rs b/src-tauri/core/src/database/models/tunnel.rs similarity index 87% rename from src-tauri/src/database/models/tunnel.rs rename to src-tauri/core/src/database/models/tunnel.rs index 5e92c9b52..842967db6 100644 --- a/src-tauri/src/database/models/tunnel.rs +++ b/src-tauri/core/src/database/models/tunnel.rs @@ -4,12 +4,12 @@ use chrono::{NaiveDateTime, Utc}; use defguard_wireguard_rs::peer::Peer; use serde::{Deserialize, Serialize}; use serde_with::{serde_as, NoneAsEmptyString}; -use sqlx::{query, query_as, query_scalar, Error as SqlxError, SqliteExecutor}; +use sqlx::{query, query_as, query_scalar, SqliteExecutor}; use super::{connection::ActiveConnection, Id, NoId, PURGE_DURATION}; use crate::{ - commands::DateTimeAggregation, error::Error, CommonConnection, CommonConnectionInfo, - CommonLocationStats, ConnectionType, + CommonConnection, CommonConnectionInfo, CommonLocationStats, ConnectionType, + DateTimeAggregation, }; #[serde_as] @@ -57,7 +57,7 @@ impl fmt::Display for Tunnel { } impl Tunnel { - pub(crate) async fn save<'e, E>(&mut self, executor: E) -> Result<(), SqlxError> + pub async fn save<'e, E>(&mut self, executor: E) -> sqlx::Result<()> where E: SqliteExecutor<'e>, { @@ -90,7 +90,7 @@ impl Tunnel { Ok(()) } - pub(crate) async fn delete<'e, E>(&self, executor: E) -> Result<(), Error> + pub async fn delete<'e, E>(&self, executor: E) -> sqlx::Result<()> where E: SqliteExecutor<'e>, { @@ -98,10 +98,7 @@ impl Tunnel { Ok(()) } - pub(crate) async fn find_by_id<'e, E>( - executor: E, - tunnel_id: Id, - ) -> Result, SqlxError> + pub async fn find_by_id<'e, E>(executor: E, tunnel_id: Id) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -116,7 +113,7 @@ impl Tunnel { .await } - pub(crate) async fn all<'e, E>(executor: E) -> Result, SqlxError> + pub async fn all<'e, E>(executor: E) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -132,10 +129,7 @@ impl Tunnel { Ok(tunnels) } - pub(crate) async fn find_by_server_public_key<'e, E>( - executor: E, - pubkey: &str, - ) -> Result + pub async fn find_by_server_public_key<'e, E>(executor: E, pubkey: &str) -> sqlx::Result where E: SqliteExecutor<'e>, { @@ -151,7 +145,7 @@ impl Tunnel { .await } - pub(crate) async fn delete_by_id<'e, E>(executor: E, id: Id) -> Result<(), Error> + pub async fn delete_by_id<'e, E>(executor: E, id: Id) -> sqlx::Result<()> where E: SqliteExecutor<'e>, { @@ -166,7 +160,7 @@ impl Tunnel { impl Tunnel { #[allow(clippy::too_many_arguments)] #[must_use] - pub(crate) fn new( + pub fn new( name: String, pubkey: String, prvkey: String, @@ -203,7 +197,7 @@ impl Tunnel { } } - pub(crate) async fn save<'e, E>(self, executor: E) -> Result, SqlxError> + pub async fn save<'e, E>(self, executor: E) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -255,17 +249,17 @@ impl Tunnel { #[derive(Debug, Serialize, Deserialize)] pub struct TunnelStats { id: I, - pub(crate) tunnel_id: Id, + pub tunnel_id: Id, upload: i64, download: i64, - pub(crate) last_handshake: i64, - pub(crate) collected_at: NaiveDateTime, + pub last_handshake: i64, + pub collected_at: NaiveDateTime, listen_port: u32, - pub(crate) persistent_keepalive_interval: u16, + pub persistent_keepalive_interval: u16, } impl TunnelStats { - pub async fn get_name<'e, E>(&self, executor: E) -> Result + pub async fn get_name<'e, E>(&self, executor: E) -> sqlx::Result where E: SqliteExecutor<'e>, { @@ -298,7 +292,7 @@ impl TunnelStats { } } - pub async fn save<'e, E>(self, executor: E) -> Result, SqlxError> + pub async fn save<'e, E>(self, executor: E) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -331,12 +325,12 @@ impl TunnelStats { } impl TunnelStats { - pub(crate) async fn all_by_tunnel_id<'e, E>( + pub async fn all_by_tunnel_id<'e, E>( executor: E, tunnel_id: Id, from: &NaiveDateTime, aggregation: &DateTimeAggregation, - ) -> Result, SqlxError> + ) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -366,10 +360,10 @@ impl TunnelStats { Ok(stats) } - pub(crate) async fn latest_by_download_change<'e, E>( + pub async fn latest_by_download_change<'e, E>( executor: E, tunnel_id: Id, - ) -> Result, Error> + ) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -404,7 +398,7 @@ impl TunnelStats { } /// Purge old statistics. - pub async fn purge<'e, E>(executor: E) -> Result<(), Error> + pub async fn purge<'e, E>(executor: E) -> sqlx::Result<()> where E: SqliteExecutor<'e>, { @@ -423,7 +417,7 @@ pub async fn peer_to_tunnel_stats<'e, E>( peer: &Peer, listen_port: u32, executor: E, -) -> Result, Error> +) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -468,7 +462,7 @@ impl TunnelConnection { pub async fn all_by_tunnel_id<'e, E>( executor: E, tunnel_id: Id, - ) -> Result>, Error> + ) -> sqlx::Result>> where E: SqliteExecutor<'e>, { @@ -486,7 +480,7 @@ impl TunnelConnection { pub async fn latest_by_tunnel_id<'e, E>( executor: E, tunnel_id: Id, - ) -> Result>, Error> + ) -> sqlx::Result>> where E: SqliteExecutor<'e>, { @@ -504,7 +498,7 @@ impl TunnelConnection { } impl TunnelConnection { - pub async fn save<'e, E>(self, executor: E) -> Result, Error> + pub async fn save<'e, E>(self, executor: E) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -539,7 +533,7 @@ pub struct TunnelConnectionInfo { } impl TunnelConnectionInfo { - pub async fn all_by_tunnel_id<'e, E>(executor: E, tunnel_id: Id) -> Result, Error> + pub async fn all_by_tunnel_id<'e, E>(executor: E, tunnel_id: Id) -> sqlx::Result> where E: SqliteExecutor<'e>, { @@ -621,7 +615,7 @@ mod tests { use super::*; impl TunnelStats { - async fn count<'e, E>(executor: E) -> Result + async fn count<'e, E>(executor: E) -> sqlx::Result where E: SqliteExecutor<'e>, { @@ -632,7 +626,7 @@ mod tests { } } - #[sqlx::test] + #[sqlx::test(migrations = "../migrations")] async fn purge_stats(pool: SqlitePool) { let tunnel = Tunnel::new( "test".into(), @@ -680,4 +674,43 @@ mod tests { let count = TunnelStats::::count(&pool).await.unwrap(); assert_eq!(count, 2); } + + #[sqlx::test(migrations = "../migrations")] + async fn test_tunnel_crud_round_trip(pool: SqlitePool) { + let tunnel = Tunnel::new( + "test".into(), + String::new(), + String::new(), + String::new(), + String::new(), + None, + None, + String::new(), + None, + 0, + false, + None, + None, + None, + None, + ) + .save(&pool) + .await + .unwrap(); + + let found = Tunnel::find_by_id(&pool, tunnel.id) + .await + .unwrap() + .expect("tunnel should exist"); + assert_eq!(found.name, "test"); + + let all = Tunnel::all(&pool).await.unwrap(); + assert_eq!(all.len(), 1); + + tunnel.delete(&pool).await.unwrap(); + assert!(Tunnel::find_by_id(&pool, tunnel.id) + .await + .unwrap() + .is_none()); + } } diff --git a/src-tauri/core/src/database/models/tunnel_configuration.rs b/src-tauri/core/src/database/models/tunnel_configuration.rs new file mode 100644 index 000000000..806c21269 --- /dev/null +++ b/src-tauri/core/src/database/models/tunnel_configuration.rs @@ -0,0 +1,617 @@ +use std::{ + hint::spin_loop, + net::IpAddr, + str::FromStr, + sync::{ + atomic::{AtomicBool, Ordering}, + mpsc::{self, channel, Receiver, Sender}, + Arc, LazyLock, Mutex, + }, +}; + +use block2::RcBlock; +use defguard_client_common::dns_owned; +use defguard_wireguard_rs::{key::Key, net::IpAddrMask, peer::Peer}; +use objc2::{rc::Retained, runtime::AnyObject}; +use objc2_foundation::{ + ns_string, NSArray, NSDictionary, NSError, NSMutableArray, NSMutableDictionary, NSNumber, + NSString, +}; +use objc2_network_extension::{NETunnelProviderManager, NETunnelProviderProtocol, NEVPNStatus}; + +use crate::{ + database::{ + models::{ + instance::{ClientTrafficPolicy, Instance}, + location::Location, + tunnel::Tunnel, + wireguard_keys::WireguardKeys, + Id, + }, + DB_POOL, + }, + error::Error, + DEFAULT_ROUTE_IPV4, DEFAULT_ROUTE_IPV6, +}; + +pub const LOCATION_ID: &str = "locationId"; +pub const TUNNEL_ID: &str = "tunnelId"; + +type ObserverSender = Mutex>; +type ObserverReceiver = Mutex>>; + +pub static OBSERVER_COMMS: LazyLock<(ObserverSender, ObserverReceiver)> = LazyLock::new(|| { + let (tx, rx) = mpsc::channel(); + (Mutex::new(tx), Mutex::new(Some(rx))) +}); + +pub const PLUGIN_BUNDLE_ID: &str = "net.defguard.VPNExtension"; + +/// Try to get `Id` out of manager. ID is embedded in configuration dictionary under `key`. +pub fn id_from_manager(manager: &NETunnelProviderManager, key: &NSString) -> Option { + let plugin_bundle_id = ns_string!(PLUGIN_BUNDLE_ID); + + let vpn_protocol = (unsafe { manager.protocolConfiguration() })?; + let Ok(tunnel_protocol) = vpn_protocol.downcast::() else { + error!("Failed to downcast to NETunnelProviderProtocol"); + return None; + }; + // Sometimes all managers from all apps come through, so filter by bundle ID. + if let Some(bundle_id) = unsafe { tunnel_protocol.providerBundleIdentifier() } { + if &*bundle_id != plugin_bundle_id { + return None; + } + } + + if let Some(config_dict) = unsafe { tunnel_protocol.providerConfiguration() } { + if let Some(any_object) = config_dict.objectForKey(key) { + let Ok(id) = any_object.downcast::() else { + warn!("Failed to downcast ID to NSNumber"); + return None; + }; + return Some(id.as_i64()); + } + } + + None +} + +/// Try to find [`NETunnelProviderManager`] in system settings that matches key and value. +/// Key is usually `locationId` or `tunnelId`. +pub fn manager_for_key_and_value( + key: &str, + value: Id, +) -> Option> { + let key_string = NSString::from_str(key); + let (tx, rx) = channel(); + + let handler = RcBlock::new( + move |managers_ptr: *mut NSArray, error_ptr: *mut NSError| { + if !error_ptr.is_null() { + error!("Failed to load tunnel provider managers."); + return; + } + + let Some(managers) = (unsafe { managers_ptr.as_ref() }) else { + error!("No managers"); + return; + }; + + for manager in managers { + if let Some(id) = id_from_manager(&manager, &key_string) { + if id == value { + // This is the manager we were looking for. + tx.send(Some(manager)).expect("Sender is dead"); + return; + } + } + } + + tx.send(None).expect("Sender is dead"); + }, + ); + unsafe { + NETunnelProviderManager::loadAllFromPreferencesWithCompletionHandler(&handler); + } + + rx.recv().expect("Receiver is dead") +} + +/// Tunnel configuration shared with VPNExtension (written in Swift). +pub struct TunnelConfiguration { + location_id: Option, + tunnel_id: Option, + name: String, + private_key: String, + addresses: Vec, + listen_port: Option, + peers: Vec, + mtu: Option, + dns: Vec, + dns_search: Vec, +} + +impl TunnelConfiguration { + /// Convert to [`NSDictionary`]. + fn as_nsdict(&self) -> Retained> { + let dict = NSMutableDictionary::new(); + + if let Some(location_id) = self.location_id { + dict.insert( + ns_string!(LOCATION_ID), + NSNumber::new_i64(location_id).as_ref(), + ); + } + + if let Some(tunnel_id) = self.tunnel_id { + dict.insert(ns_string!(TUNNEL_ID), NSNumber::new_i64(tunnel_id).as_ref()); + } + + dict.insert(ns_string!("name"), NSString::from_str(&self.name).as_ref()); + + dict.insert( + ns_string!("privateKey"), + NSString::from_str(&self.private_key).as_ref(), + ); + + // IpAddrMask + let addresses = NSMutableArray::>::new(); + for addr in &self.addresses { + let addr_dict = NSMutableDictionary::::new(); + addr_dict.insert( + ns_string!("address"), + NSString::from_str(&addr.address.to_string()).as_ref(), + ); + addr_dict.insert(ns_string!("cidr"), NSNumber::new_u8(addr.cidr).as_ref()); + addresses.addObject(addr_dict.into_super().as_ref()); + } + dict.insert(ns_string!("addresses"), addresses.as_ref()); + + if let Some(listen_port) = self.listen_port { + dict.insert( + ns_string!("listenPort"), + NSNumber::new_u16(listen_port).as_ref(), + ); + } + + // Peer + let peers = NSMutableArray::>::new(); + for peer in &self.peers { + let peer_dict = NSMutableDictionary::::new(); + peer_dict.insert( + ns_string!("publicKey"), + NSString::from_str(&peer.public_key.to_string()).as_ref(), + ); + + if let Some(preshared_key) = &peer.preshared_key { + peer_dict.insert( + ns_string!("preSharedKey"), + NSString::from_str(&preshared_key.to_string()).as_ref(), + ); + } + + if let Some(endpoint) = &peer.endpoint { + peer_dict.insert( + ns_string!("endpoint"), + NSString::from_str(&endpoint.to_string()).as_ref(), + ); + } + + // Skipping: lastHandshake, txBytes, rxBytes. + + if let Some(persistent_keep_alive) = peer.persistent_keepalive_interval { + peer_dict.insert( + ns_string!("persistentKeepAlive"), + NSNumber::new_u16(persistent_keep_alive).as_ref(), + ); + } + + // IpAddrMask + let allowed_ips = NSMutableArray::>::new(); + for addr in &peer.allowed_ips { + let addr_dict = NSMutableDictionary::::new(); + addr_dict.insert( + ns_string!("address"), + NSString::from_str(&addr.address.to_string()).as_ref(), + ); + addr_dict.insert(ns_string!("cidr"), NSNumber::new_u8(addr.cidr).as_ref()); + allowed_ips.addObject(addr_dict.into_super().as_ref()); + } + peer_dict.insert(ns_string!("allowedIPs"), allowed_ips.as_ref()); + + peers.addObject(peer_dict.into_super().as_ref()); + } + dict.insert(ns_string!("peers"), peers.into_super().as_ref()); + + if let Some(mtu) = self.mtu { + dict.insert(ns_string!("mtu"), NSNumber::new_u32(mtu).as_ref()); + } + + let dns = NSMutableArray::::new(); + for entry in &self.dns { + dns.addObject(NSString::from_str(&entry.to_string()).as_ref()); + } + dict.insert(ns_string!("dns"), dns.as_ref()); + + let dns_search = NSMutableArray::::new(); + for entry in &self.dns_search { + dns_search.addObject(NSString::from_str(entry).as_ref()); + } + dict.insert(ns_string!("dnsSearch"), dns_search.as_ref()); + + dict.into_super() + } + + /// Try to find `NETunnelProviderManager` for this configuration, based on location ID or + /// tunnel ID. + pub fn tunnel_provider_manager(&self) -> Option> { + let (key, value) = match (self.location_id, self.tunnel_id) { + (Some(location_id), None) => (LOCATION_ID, location_id), + (None, Some(tunnel_id)) => (TUNNEL_ID, tunnel_id), + _ => return None, + }; + + manager_for_key_and_value(key, value) + } + + /// Create or update system VPN settings with this configuration. + pub fn save(&self) { + let spinlock = Arc::new(AtomicBool::new(false)); + let spinlock_clone = Arc::clone(&spinlock); + let plugin_bundle_id = ns_string!(PLUGIN_BUNDLE_ID); + + let provider_manager = self + .tunnel_provider_manager() + .unwrap_or_else(|| unsafe { NETunnelProviderManager::new() }); + + unsafe { + let tunnel_protocol = NETunnelProviderProtocol::new(); + tunnel_protocol.setProviderBundleIdentifier(Some(plugin_bundle_id)); + let server_address = self.peers.first().map_or(String::new(), |peer| { + peer.endpoint.map_or(String::new(), |sa| sa.to_string()) + }); + let server_address = NSString::from_str(&server_address); + // `serverAddress` must have a non-nil string value for the protocol configuration to be + // valid. + tunnel_protocol.setServerAddress(Some(&server_address)); + + let provider_config = self.as_nsdict(); + tunnel_protocol.setProviderConfiguration(Some(&*provider_config)); + + provider_manager.setProtocolConfiguration(Some(&tunnel_protocol)); + let name = NSString::from_str(&self.name); + provider_manager.setLocalizedDescription(Some(&name)); + provider_manager.setEnabled(true); + + // Save to system settings. + let handler = RcBlock::new(move |error_ptr: *mut NSError| { + if error_ptr.is_null() { + debug!("Saved tunnel configuration for {name} to system settings"); + } else { + error!("Failed to save tunnel configuration for: {name} to system settings"); + } + spinlock_clone.store(true, Ordering::Release); + }); + provider_manager.saveToPreferencesWithCompletionHandler(Some(&*handler)); + } + + while !spinlock.load(Ordering::Acquire) { + spin_loop(); + } + } + + /// Start tunnel for this configuration. + pub fn start_tunnel(&self) { + if let Some(provider_manager) = self.tunnel_provider_manager() { + if let Err(err) = + unsafe { provider_manager.connection().startVPNTunnelAndReturnError() } + { + error!("Failed to start VPN: {err}"); + } else { + OBSERVER_COMMS + .0 + .lock() + .expect("Failed to lock observer sender") + .send(( + self.location_id + .map_or_else(|| TUNNEL_ID, |_location_id| LOCATION_ID), + self.location_id.or(self.tunnel_id).unwrap(), + )) + .expect("Failed to send to observer channel"); + info!("VPN started"); + } + } else { + debug!( + "Couldn't find configuration from system settings for {}", + self.name + ); + } + } +} + +impl Location { + /// Build [`TunnelConfiguration`] from [`Location`]. + pub async fn tunnel_configuration( + &self, + preshared_key: Option, + mtu: Option, + ) -> Result { + debug!("Looking for WireGuard keys for location {self} instance"); + let Some(keys) = WireguardKeys::find_by_instance_id(&*DB_POOL, self.instance_id).await? + else { + error!("No keys found for instance: {}", self.instance_id); + return Err(Error::InternalError( + "No keys found for instance".to_string(), + )); + }; + debug!("WireGuard keys found for location {self} instance"); + + // prepare peer config + debug!("Decoding location {self} public key: {}.", self.pubkey); + let peer_key = Key::from_str(&self.pubkey)?; + debug!("Location {self} public key decoded: {peer_key}"); + let mut peer = Peer::new(peer_key); + + debug!("Parsing location {self} endpoint: {}", self.endpoint); + peer.set_endpoint(&self.endpoint)?; + peer.persistent_keepalive_interval = Some(25); + debug!("Parsed location {self} endpoint: {}", self.endpoint); + + if let Some(psk) = preshared_key { + debug!("Decoding location {self} preshared key."); + let peer_psk = Key::from_str(&psk)?; + info!("Location {self} preshared key decoded."); + peer.preshared_key = Some(peer_psk); + } + + debug!("Parsing location {self} allowed IPs: {}", self.allowed_ips); + let Some(instance) = Instance::find_by_id(&*DB_POOL, self.instance_id).await? else { + error!("Instance {} not found", self.instance_id); + return Err(Error::InternalError(format!( + "Instance {} not found", + self.instance_id + ))); + }; + let route_all_traffic = match instance.client_traffic_policy { + ClientTrafficPolicy::ForceAllTraffic => true, + ClientTrafficPolicy::DisableAllTraffic => false, + ClientTrafficPolicy::None => self.route_all_traffic, + }; + let allowed_ips = if route_all_traffic { + debug!("Using all traffic routing for location {self}"); + vec![DEFAULT_ROUTE_IPV4.into(), DEFAULT_ROUTE_IPV6.into()] + } else { + debug!( + "Using predefined location {self} traffic: {}", + self.allowed_ips + ); + self.allowed_ips.split(',').map(str::to_string).collect() + }; + for allowed_ip in &allowed_ips { + match IpAddrMask::from_str(allowed_ip) { + Ok(addr) => { + peer.allowed_ips.push(addr); + } + Err(err) => { + // Handle the error from IpAddrMask::from_str, if needed + error!( + "Error parsing IP address {allowed_ip} while setting up interface for \ + location {self}, error details: {err}" + ); + } + } + } + debug!( + "Parsed allowed IPs for location {self}: {:?}", + peer.allowed_ips + ); + + let addresses = self + .address + .split(',') + .map(str::trim) + .map(IpAddrMask::from_str) + .collect::>() + .map_err(|err| { + let msg = format!("Failed to parse IP addresses '{}': {err}", self.address); + error!("{msg}"); + Error::InternalError(msg) + })?; + let (dns, dns_search) = dns_owned(&self.dns); + Ok(TunnelConfiguration { + location_id: Some(self.id), + tunnel_id: None, + name: self.name.clone(), + private_key: keys.prvkey, + addresses, + listen_port: Some(0), + peers: vec![peer], + mtu, + dns, + dns_search, + }) + } + + /// Check whether VPN tunnel is running for [`Location`]. + pub fn status(&self) -> Option { + manager_for_key_and_value(LOCATION_ID, self.id).map_or_else( + || { + debug!( + "Couldn't find configuration in system settings for location {}", + self.name + ); + None + }, + |provider_manager| unsafe { + let connection = provider_manager.connection(); + Some(connection.status()) + }, + ) + } + + /// Remove configuration from system settings for [`Location`]. + pub fn remove_config(&self) { + if let Some(provider_manager) = manager_for_key_and_value(LOCATION_ID, self.id) { + unsafe { + provider_manager.removeFromPreferencesWithCompletionHandler(None); + } + } else { + debug!( + "Couldn't find configuration in system settings for location {}", + self.name + ); + } + } + + /// Stop VPN tunnel for [`Location`]. + pub fn stop_vpn_tunnel(&self) -> bool { + manager_for_key_and_value(LOCATION_ID, self.id).map_or_else( + || { + debug!( + "Couldn't find configuration in system settings for location {}", + self.name + ); + false + }, + |provider_manager| { + unsafe { + provider_manager.connection().stopVPNTunnel(); + } + info!("VPN stopped"); + true + }, + ) + } +} + +impl Tunnel { + /// Build [`TunnelConfiguration`] from [`Tunnel`]. + pub fn tunnel_configuration(&self, mtu: Option) -> Result { + // prepare peer config + debug!("Decoding tunnel {self} public key: {}.", self.server_pubkey); + let peer_key = Key::from_str(&self.server_pubkey)?; + debug!("Tunnel {self} public key decoded."); + let mut peer = Peer::new(peer_key); + + debug!("Parsing tunnel {self} endpoint: {}", self.endpoint); + peer.set_endpoint(&self.endpoint)?; + peer.persistent_keepalive_interval = Some( + self.persistent_keep_alive + .try_into() + .expect("Failed to parse persistent keep alive"), + ); + debug!("Parsed tunnel {self} endpoint: {}", self.endpoint); + + if let Some(psk) = &self.preshared_key { + debug!("Decoding tunnel {self} preshared key."); + let peer_psk = Key::from_str(psk)?; + debug!("Preshared key for tunnel {self} decoded."); + peer.preshared_key = Some(peer_psk); + } + + debug!("Parsing tunnel {self} allowed ips: {:?}", self.allowed_ips); + let allowed_ips = if self.route_all_traffic { + debug!("Using all traffic routing for tunnel {self}"); + vec![DEFAULT_ROUTE_IPV4.into(), DEFAULT_ROUTE_IPV6.into()] + } else { + let msg = self.allowed_ips.as_ref().map_or_else( + || "No allowed IP addresses found in tunnel {self} configuration".to_string(), + |ips| format!("Using predefined location traffic for tunnel {self}: {ips}"), + ); + debug!("{msg}"); + self.allowed_ips + .as_ref() + .map(|ips| ips.split(',').map(str::to_string).collect()) + .unwrap_or_default() + }; + for allowed_ip in &allowed_ips { + match IpAddrMask::from_str(allowed_ip.trim()) { + Ok(addr) => { + peer.allowed_ips.push(addr); + } + Err(err) => { + // Handle the error from IpAddrMask::from_str, if needed + error!("Error parsing IP address {allowed_ip}: {err}"); + // Continue to the next iteration of the loop + } + } + } + debug!("Parsed tunnel {self} allowed IPs: {:?}", peer.allowed_ips); + + let addresses = self + .address + .split(',') + .map(str::trim) + .map(IpAddrMask::from_str) + .collect::>() + .map_err(|err| { + let msg = format!("Failed to parse IP addresses '{}': {err}", self.address); + error!("{msg}"); + Error::InternalError(msg) + })?; + let (dns, dns_search) = dns_owned(&self.dns); + Ok(TunnelConfiguration { + location_id: None, + tunnel_id: Some(self.id), + name: self.name.clone(), + private_key: self.prvkey.clone(), + addresses, + listen_port: Some(0), + peers: vec![peer], + mtu, + dns, + dns_search, + }) + } + + /// Check whether VPN tunnel is running for [`Tunnel`]. + pub fn status(&self) -> Option { + manager_for_key_and_value(TUNNEL_ID, self.id).map_or_else( + || { + debug!( + "Couldn't find configuration in system settings for tunnel {}", + self.name + ); + None + }, + |provider_manager| unsafe { + let connection = provider_manager.connection(); + Some(connection.status()) + }, + ) + } + + /// Remove configuration from system settings for [`Tunnel`]. + pub fn remove_config(&self) { + if let Some(provider_manager) = manager_for_key_and_value(TUNNEL_ID, self.id) { + unsafe { + provider_manager.removeFromPreferencesWithCompletionHandler(None); + } + } else { + debug!( + "Couldn't find configuration in system settings for tunnel {}", + self.name + ); + } + } + + /// Stop tunnel for [`Tunnel`]. + pub fn stop_vpn_tunnel(&self) -> bool { + manager_for_key_and_value(TUNNEL_ID, self.id).map_or_else( + || { + debug!( + "Couldn't find configuration in system settings for location {}", + self.name + ); + false + }, + |provider_manager| { + unsafe { + provider_manager.connection().stopVPNTunnel(); + } + info!("VPN stopped"); + true + }, + ) + } +} diff --git a/src-tauri/src/database/models/wireguard_keys.rs b/src-tauri/core/src/database/models/wireguard_keys.rs similarity index 100% rename from src-tauri/src/database/models/wireguard_keys.rs rename to src-tauri/core/src/database/models/wireguard_keys.rs diff --git a/src-tauri/src/error.rs b/src-tauri/core/src/error.rs similarity index 98% rename from src-tauri/src/error.rs rename to src-tauri/core/src/error.rs index 28a6db94f..c9d815a60 100644 --- a/src-tauri/src/error.rs +++ b/src-tauri/core/src/error.rs @@ -27,7 +27,7 @@ pub enum Error { #[error("Object not found")] NotFound, #[error("Tauri error: {0}")] - Tauri(#[from] tauri::Error), + Tauri(String), #[error("Failed to parse str to enum")] StrumError(#[from] strum::ParseError), #[error("Required resource not found {0}")] diff --git a/src-tauri/core/src/events.rs b/src-tauri/core/src/events.rs new file mode 100644 index 000000000..1a3504e80 --- /dev/null +++ b/src-tauri/core/src/events.rs @@ -0,0 +1,36 @@ +// Match src/pages/client/types.ts. +#[non_exhaustive] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum EventKey { + ConnectionChanged, + InstanceUpdate, + LocationUpdate, + AppVersionFetch, + ConfigChanged, + DeadConnectionDropped, + DeadConnectionReconnected, + ApplicationConfigChanged, + AddInstance, + MfaTrigger, + VersionMismatch, + UuidMismatch, +} + +impl From for &'static str { + fn from(key: EventKey) -> &'static str { + match key { + EventKey::ConnectionChanged => "connection-changed", + EventKey::InstanceUpdate => "instance-update", + EventKey::LocationUpdate => "location-update", + EventKey::AppVersionFetch => "app-version-fetch", + EventKey::ConfigChanged => "config-changed", + EventKey::DeadConnectionDropped => "dead-connection-dropped", + EventKey::DeadConnectionReconnected => "dead-connection-reconnected", + EventKey::ApplicationConfigChanged => "application-config-changed", + EventKey::AddInstance => "add-instance", + EventKey::MfaTrigger => "mfa-trigger", + EventKey::VersionMismatch => "version-mismatch", + EventKey::UuidMismatch => "uuid-mismatch", + } + } +} diff --git a/src-tauri/core/src/lib.rs b/src-tauri/core/src/lib.rs new file mode 100644 index 000000000..3774e43de --- /dev/null +++ b/src-tauri/core/src/lib.rs @@ -0,0 +1,278 @@ +use std::{fmt, path::PathBuf}; + +use chrono::{Duration, NaiveDateTime, Utc}; +use database::models::Id; +use serde::{Deserialize, Serialize}; +#[cfg(unix)] +use std::{ + fs::{set_permissions, Permissions}, + os::unix::fs::PermissionsExt, +}; + +use database::models::location::{ + infer_mfa_method, Location, LocationMfaMode, ServiceLocationMode, +}; +use defguard_client_proto::defguard::client_types::DeviceConfig; + +pub mod app_config; +pub mod connection; +pub mod database; +pub mod error; +pub mod events; +pub mod proxy; +pub mod version; +pub mod wg_config; + +// Re-export proto module for backward compatibility within core. +pub use defguard_client_proto::defguard as proto; + +use crate::database::models::NoId; + +#[macro_use] +extern crate log; + +const BUNDLE_IDENTIFIER: &str = "net.defguard"; + +/// Returns the path to the user's data directory. +#[must_use] +pub fn app_data_dir() -> Option { + dirs_next::data_dir().map(|dir| dir.join(BUNDLE_IDENTIFIER)) +} + +/// Ensures path has appropriate permissions set (dg25-28): +/// - 700 for directories +/// - 600 for files +#[cfg(unix)] +pub fn set_perms(path: &std::path::Path) { + let perms = if path.is_dir() { 0o700 } else { 0o600 }; + if let Err(err) = set_permissions(path, Permissions::from_mode(perms)) { + log::warn!( + "Failed to set permissions on path {}: {err}", + path.display() + ); + } +} + +/// Location type used in commands to check if we use tunnel or location +#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] +pub enum ConnectionType { + Tunnel, + Location, +} + +impl fmt::Display for ConnectionType { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + ConnectionType::Tunnel => write!(f, "tunnel"), + ConnectionType::Location => write!(f, "location"), + } + } +} + +/// Common fields for Tunnel and Location +#[derive(Debug, Serialize, Deserialize)] +pub struct CommonWireguardFields { + pub instance_id: Id, + pub network_id: Id, + pub name: String, + pub address: String, + pub pubkey: String, + pub endpoint: String, + pub allowed_ips: String, + pub dns: Option, + pub route_all_traffic: bool, +} + +/// Common fields for Connection and TunnelConnection due to shared command +#[derive(Debug, Serialize, Deserialize)] +pub struct CommonConnection { + pub id: I, + pub location_id: Id, + pub start: NaiveDateTime, + pub end: NaiveDateTime, + pub connection_type: ConnectionType, +} + +/// Common fields for LocationStats and TunnelStats due to shared command +#[derive(Debug, Serialize, Deserialize)] +pub struct CommonLocationStats { + pub id: I, + pub location_id: Id, + pub upload: i64, + pub download: i64, + pub last_handshake: i64, + pub collected_at: NaiveDateTime, + pub listen_port: u32, + pub persistent_keepalive_interval: Option, + pub connection_type: ConnectionType, +} + +/// Common fields for ConnectionInfo and TunnelConnectionInfo due to shared command +#[derive(Debug, Serialize)] +pub struct CommonConnectionInfo { + pub id: Id, + pub location_id: Id, + pub start: NaiveDateTime, + pub end: NaiveDateTime, + pub upload: Option, + pub download: Option, +} + +pub const DEFAULT_ROUTE_IPV4: &str = "0.0.0.0/0"; +pub const DEFAULT_ROUTE_IPV6: &str = "::/0"; + +pub enum DateTimeAggregation { + Hour, + Second, +} + +impl DateTimeAggregation { + #[must_use] + pub fn fstring(&self) -> &'static str { + match self { + Self::Hour => "%Y-%m-%d %H:00:00", + Self::Second => "%Y-%m-%d %H:%M:%S", + } + } +} + +pub fn get_aggregation(from: NaiveDateTime) -> Result { + let aggregation = match Utc::now().naive_utc() - from { + duration if duration >= Duration::hours(8) => Ok(DateTimeAggregation::Hour), + duration if duration < Duration::zero() => Err(error::Error::InternalError(format!( + "Negative duration between dates: now ({}) and {from}", + Utc::now().naive_utc(), + ))), + _ => Ok(DateTimeAggregation::Second), + }?; + Ok(aggregation) +} + +#[must_use] +pub fn into_location(dev_config: DeviceConfig, instance_id: Id) -> Location { + use LocationMfaMode as MfaMode; + use ServiceLocationMode as SLocationMode; + + let location_mfa_mode = match dev_config.location_mfa_mode { + Some(_location_mfa_mode) => dev_config.location_mfa_mode().into(), + None => + { + #[allow(deprecated)] + if dev_config.mfa_enabled { + MfaMode::Internal + } else { + MfaMode::Disabled + } + } + }; + + let service_location_mode = match dev_config.service_location_mode { + Some(_service_location_mode) => dev_config.service_location_mode().into(), + None => SLocationMode::Disabled, + }; + + Location { + id: NoId, + instance_id, + network_id: dev_config.network_id, + name: dev_config.network_name, + address: dev_config.assigned_ip, + pubkey: dev_config.pubkey, + endpoint: dev_config.endpoint, + allowed_ips: dev_config.allowed_ips, + dns: dev_config.dns, + route_all_traffic: false, + keepalive_interval: dev_config.keepalive_interval.into(), + location_mfa_mode, + service_location_mode, + mfa_method: infer_mfa_method(location_mfa_mode, None), + posture_check_required: dev_config.posture_check_required.unwrap_or_default(), + } +} + +#[cfg(test)] +mod tests { + use chrono::{Duration, Utc}; + use defguard_client_proto::defguard::client_types::DeviceConfig; + + use super::{get_aggregation, into_location, DateTimeAggregation}; + use crate::database::models::location::{LocationMfaMethod, LocationMfaMode}; + + #[test] + fn test_get_aggregation_hour() { + // 8 hours or older aggregates per hour. + let from = Utc::now().naive_utc() - Duration::hours(9); + assert!(matches!( + get_aggregation(from).unwrap(), + DateTimeAggregation::Hour + )); + } + + #[test] + fn test_get_aggregation_second() { + // Recent ranges aggregate per second. + let from = Utc::now().naive_utc() - Duration::minutes(1); + assert!(matches!( + get_aggregation(from).unwrap(), + DateTimeAggregation::Second + )); + } + + #[test] + fn test_get_aggregation_future_errors() { + // A timestamp in the future yields a negative duration and is rejected. + let from = Utc::now().naive_utc() + Duration::hours(1); + assert!(get_aggregation(from).is_err()); + } + + fn base_dev_config() -> DeviceConfig { + DeviceConfig { + network_id: 7, + network_name: "net".into(), + endpoint: "1.2.3.4:51820".into(), + assigned_ip: "10.6.0.2".into(), + pubkey: "pk".into(), + allowed_ips: "0.0.0.0/0".into(), + keepalive_interval: 25, + ..Default::default() + } + } + + #[test] + fn test_into_location_maps_fields() { + let location = into_location(base_dev_config(), 3); + assert_eq!(location.instance_id, 3); + assert_eq!(location.network_id, 7); + assert_eq!(location.name, "net"); + assert_eq!(location.address, "10.6.0.2"); + assert_eq!(location.endpoint, "1.2.3.4:51820"); + assert_eq!(location.allowed_ips, "0.0.0.0/0"); + assert_eq!(location.keepalive_interval, 25); + assert!(!location.route_all_traffic); + assert!(!location.posture_check_required); + } + + #[test] + fn test_into_location_mfa_mode_from_deprecated_flag() { + // With no explicit mode, the deprecated mfa_enabled flag drives the mode. + let mut cfg = base_dev_config(); + #[allow(deprecated)] + { + cfg.mfa_enabled = true; + } + let location = into_location(cfg, 1); + assert_eq!(location.location_mfa_mode, LocationMfaMode::Internal); + // Internal mode with no configured method resolves to Totp. + assert_eq!(location.mfa_method, Some(LocationMfaMethod::Totp)); + } + + #[test] + fn test_into_location_explicit_mfa_mode() { + let mut cfg = base_dev_config(); + cfg.location_mfa_mode = Some(crate::proto::client_types::LocationMfaMode::External as i32); + let location = into_location(cfg, 1); + assert_eq!(location.location_mfa_mode, LocationMfaMode::External); + // External mode always resolves to OIDC. + assert_eq!(location.mfa_method, Some(LocationMfaMethod::Oidc)); + } +} diff --git a/src-tauri/core/src/proxy.rs b/src-tauri/core/src/proxy.rs new file mode 100644 index 000000000..70b3537e9 --- /dev/null +++ b/src-tauri/core/src/proxy.rs @@ -0,0 +1,46 @@ +use std::{env, time::Duration}; + +use base64::{prelude::BASE64_STANDARD, Engine}; +use prost::Message; +use reqwest::{Client, Response, Url}; +use serde::Serialize; + +use crate::version::{CLIENT_PLATFORM_HEADER, CLIENT_VERSION_HEADER, PKG_VERSION}; +use defguard_client_proto::defguard::client_types::ClientPlatformInfo; + +const HTTP_REQ_TIMEOUT: Duration = Duration::from_secs(5); + +/// Build a base64-encoded `ClientPlatformInfo` header value. +#[must_use] +pub fn construct_platform_header() -> String { + let os = os_info::get(); + + let platform_info = ClientPlatformInfo { + os_family: env::consts::FAMILY.to_string(), + os_type: env::consts::OS.to_string(), + version: os.version().to_string(), + edition: os.edition().map(str::to_string), + codename: os.codename().map(str::to_string), + bitness: Some(os.bitness().to_string()), + architecture: Some(env::consts::ARCH.to_string()), + }; + + log::debug!("Constructed platform info header: {platform_info:?}"); + + BASE64_STANDARD.encode(platform_info.encode_to_vec()) +} + +/// Send a JSON POST request with the standard client version/platform headers and a short timeout. +pub async fn post_with_headers( + url: Url, + data: &T, +) -> Result { + Client::new() + .post(url) + .json(data) + .header(CLIENT_VERSION_HEADER, PKG_VERSION) + .header(CLIENT_PLATFORM_HEADER, construct_platform_header()) + .timeout(HTTP_REQ_TIMEOUT) + .send() + .await +} diff --git a/src-tauri/core/src/version.rs b/src-tauri/core/src/version.rs new file mode 100644 index 000000000..4f2d60fb0 --- /dev/null +++ b/src-tauri/core/src/version.rs @@ -0,0 +1,43 @@ +pub use semver::Version; + +pub const MIN_CORE_VERSION: Version = Version::new(1, 6, 0); +pub const MIN_PROXY_VERSION: Version = Version::new(1, 6, 0); +pub const CLIENT_VERSION_HEADER: &str = "defguard-client-version"; +pub const CLIENT_PLATFORM_HEADER: &str = "defguard-client-platform"; +pub const LOG_FILENAME: &str = "defguard-client"; +pub use defguard_client_common::VERSION as PKG_VERSION; + +/// Selects the version string the client should report: the build-version override when present +/// and non-blank, otherwise the package version. +#[must_use] +pub fn select_reported_app_version( + package_version: &str, + build_version_override: Option<&str>, +) -> String { + build_version_override + .filter(|version| !version.trim().is_empty()) + .map_or_else(|| package_version.to_owned(), str::to_owned) +} + +#[cfg(test)] +mod tests { + use super::select_reported_app_version; + + #[test] + fn test_reported_app_version_uses_override_when_present() { + assert_eq!( + select_reported_app_version("1.6.8", Some("1.6.8-beta1")), + "1.6.8-beta1" + ); + } + + #[test] + fn test_reported_app_version_falls_back_to_package_version_without_override() { + assert_eq!(select_reported_app_version("1.6.8", None), "1.6.8"); + } + + #[test] + fn test_reported_app_version_ignores_empty_override() { + assert_eq!(select_reported_app_version("1.6.8", Some(" ")), "1.6.8"); + } +} diff --git a/src-tauri/src/wg_config.rs b/src-tauri/core/src/wg_config.rs similarity index 100% rename from src-tauri/src/wg_config.rs rename to src-tauri/core/src/wg_config.rs diff --git a/src-tauri/daemon/Cargo.toml b/src-tauri/daemon/Cargo.toml new file mode 100644 index 000000000..7a119f9a9 --- /dev/null +++ b/src-tauri/daemon/Cargo.toml @@ -0,0 +1,42 @@ +[package] +name = "defguard-client-service" +description = "Defguard client daemon service" +authors.workspace = true +edition.workspace = true +homepage.workspace = true +license-file.workspace = true +rust-version.workspace = true +version.workspace = true + +[dependencies] +anyhow = "1.0" +clap = { workspace = true } +defguard-client-common = { path = "../common" } +defguard-client-proto = { path = "../client-proto" } +defguard-client-posture = { path = "../enterprise/posture" } +defguard-client-service-locations = { path = "../enterprise/service-locations" } +defguard_wireguard_rs = { workspace = true } +log.workspace = true +serde.workspace = true +thiserror = { workspace = true } +tokio = { version = "1", features = ["net", "rt-multi-thread", "signal", "sync", "time"] } +tokio-stream = { version = "0.1", features = ["net"] } +tonic = { workspace = true } +tracing = { workspace = true } +tracing-appender = "0.2" +tracing-subscriber = { workspace = true } + +[target.'cfg(unix)'.dependencies] +nix = { version = "0.31", features = ["fs", "user"] } + +[target.'cfg(windows)'.dependencies] +async-stream = "0.3" +futures-core = "0.3" +tokio = { version = "1", features = ["net", "rt-multi-thread", "signal", "sync", "time"] } +windows-core = "0.61" +windows-service = "0.8" +windows-sys = "0.61" + +[[bin]] +name = "defguard-service" +path = "src/bin/defguard-service.rs" diff --git a/src-tauri/src/bin/defguard-service.rs b/src-tauri/daemon/src/bin/defguard-service.rs similarity index 79% rename from src-tauri/src/bin/defguard-service.rs rename to src-tauri/daemon/src/bin/defguard-service.rs index 7b4ec0cbb..9aab6c2e7 100644 --- a/src-tauri/src/bin/defguard-service.rs +++ b/src-tauri/daemon/src/bin/defguard-service.rs @@ -7,7 +7,7 @@ #[tokio::main] async fn main() -> anyhow::Result<()> { use clap::Parser; - use defguard_client::service::{config::Config, daemon::run_server, utils::logging_setup}; + use defguard_client_service::{config::Config, daemon::run_server, utils::logging_setup}; // parse config let config: Config = Config::parse(); @@ -21,5 +21,5 @@ async fn main() -> anyhow::Result<()> { #[cfg(windows)] fn main() -> windows_service::Result<()> { - defguard_client::service::windows::run() + defguard_client_service::windows::run() } diff --git a/src-tauri/daemon/src/config.rs b/src-tauri/daemon/src/config.rs new file mode 100644 index 000000000..e2f8528b1 --- /dev/null +++ b/src-tauri/daemon/src/config.rs @@ -0,0 +1,23 @@ +use clap::Parser; + +#[cfg(windows)] +pub const DEFAULT_LOG_DIR: &str = "/Logs/defguard-service"; +#[cfg(not(windows))] +pub const DEFAULT_LOG_DIR: &str = "/var/log/defguard-service"; + +#[derive(Debug, Parser, Clone)] +#[clap(about = "Defguard VPN client interface management service")] +#[command(version)] +pub struct Config { + /// Configures log level of defguard service logs + #[arg(long, env = "DEFGUARD_LOG_LEVEL", default_value = "info")] + pub log_level: String, + + /// Configures logging directory; it is meant for debugging only, so hide it. + #[arg(long, env = "DEFGUARD_LOG_DIR", default_value = DEFAULT_LOG_DIR, hide = true)] + pub log_dir: String, + + /// Defines how often (in seconds) interface statistics are sent to defguard client + #[arg(long, short = 'p', env = "DEFGUARD_STATS_PERIOD", default_value = "10")] + pub stats_period: u64, +} diff --git a/src-tauri/src/service/daemon.rs b/src-tauri/daemon/src/daemon.rs similarity index 91% rename from src-tauri/src/service/daemon.rs rename to src-tauri/daemon/src/daemon.rs index ac54904a4..d3849cf88 100644 --- a/src-tauri/src/service/daemon.rs +++ b/src-tauri/daemon/src/daemon.rs @@ -1,3 +1,5 @@ +#[cfg(all(unix, not(target_os = "macos")))] +use std::os::unix::fs::PermissionsExt; use std::{ collections::HashMap, pin::Pin, @@ -5,13 +7,30 @@ use std::{ time::{Duration, SystemTime}, }; #[cfg(unix)] -use std::{fs, os::unix::fs::PermissionsExt, path::Path}; +use std::{fs, path::Path}; -use common::dns_borrow; +use defguard_client_common::dns_borrow; +#[cfg(windows)] +use defguard_client_posture::inspector::device_posture_data; +use defguard_client_proto::defguard::{ + client::v1::{ + desktop_daemon_service_server::{DesktopDaemonService, DesktopDaemonServiceServer}, + CreateInterfaceRequest, DeleteServiceLocationsRequest, InterfaceData, + ReadInterfaceDataRequest, RemoveInterfaceRequest, SaveServiceLocationsRequest, + }, + enterprise::posture::v2::DevicePostureData, +}; +use defguard_client_service_locations::ServiceLocationError; +#[cfg(windows)] +use defguard_client_service_locations::ServiceLocationManager; +#[cfg(not(target_os = "macos"))] +use defguard_wireguard_rs::Kernel; +#[cfg(target_os = "macos")] +use defguard_wireguard_rs::Userspace; use defguard_wireguard_rs::{ - error::WireguardInterfaceError, InterfaceConfiguration, Kernel, WGApi, WireguardInterfaceApi, + error::WireguardInterfaceError, InterfaceConfiguration, WGApi, WireguardInterfaceApi, }; -#[cfg(unix)] +#[cfg(target_os = "linux")] use nix::unistd::{chown, Group}; #[cfg(unix)] use tokio::net::UnixListener; @@ -27,23 +46,9 @@ use tonic::{ use tracing::warn; use tracing::{debug, error, info, info_span, Instrument}; -use super::{ - config::Config, - proto::defguard::client::v1::{ - desktop_daemon_service_server::{DesktopDaemonService, DesktopDaemonServiceServer}, - CreateInterfaceRequest, DeleteServiceLocationsRequest, InterfaceData, - ReadInterfaceDataRequest, RemoveInterfaceRequest, SaveServiceLocationsRequest, - }, -}; -use crate::{ - enterprise::service_locations::ServiceLocationError, - service::proto::defguard::enterprise::posture::v2::DevicePostureData, VERSION, -}; #[cfg(windows)] -use crate::{ - enterprise::service_locations::ServiceLocationManager, - service::named_pipe::{get_named_pipe_server_stream, PIPE_NAME}, -}; +use crate::named_pipe::{get_named_pipe_server_stream, PIPE_NAME}; +use crate::{config::Config, VERSION}; #[cfg(unix)] pub(super) const DAEMON_SOCKET_PATH: &str = "/var/run/defguard.socket"; @@ -104,7 +109,7 @@ impl DaemonService { fn configure_new_interface( ifname: &str, request: &CreateInterfaceRequest, - wgapi: &mut WGApi, + wgapi: &mut WG, interface_config: &InterfaceConfiguration, ) -> Result<(), Status> { // The WireGuard DNS config value can be a list of IP addresses and domain names, which will @@ -520,7 +525,7 @@ impl DesktopDaemonService for DaemonService { _request: tonic::Request<()>, ) -> Result, Status> { debug!("Get posture data request received"); - Ok(Response::new(DevicePostureData::new())) + Ok(Response::new(device_posture_data())) } } @@ -539,21 +544,24 @@ pub async fn run_server(config: Config) -> anyhow::Result<()> { debug!("Binding socket file at {DAEMON_SOCKET_PATH}"); let uds = UnixListener::bind(DAEMON_SOCKET_PATH)?; - // change owner group for socket file - // get the group ID by name - let group = Group::from_name(DAEMON_SOCKET_GROUP)?.ok_or_else(|| { - error!("Group '{DAEMON_SOCKET_GROUP}' not found"); - crate::error::Error::InternalError(format!("Group '{DAEMON_SOCKET_GROUP}' not found")) - })?; + #[cfg(target_os = "linux")] + { + // change owner group for socket file + // get the group ID by name + let group = Group::from_name(DAEMON_SOCKET_GROUP)?.ok_or_else(|| { + error!("Group '{DAEMON_SOCKET_GROUP}' not found"); + crate::Error::Internal(format!("Group '{DAEMON_SOCKET_GROUP}' not found")) + })?; - // change ownership - keep current user, change group - debug!("Changing owner group of socket file at {DAEMON_SOCKET_PATH} to group {DAEMON_SOCKET_GROUP}"); - chown(DAEMON_SOCKET_PATH, None, Some(group.gid))?; + // change ownership - keep current user, change group + debug!("Changing owner group of socket file at {DAEMON_SOCKET_PATH} to group {DAEMON_SOCKET_GROUP}"); + chown(DAEMON_SOCKET_PATH, None, Some(group.gid))?; - // Set socket permissions to allow client access - // 0o660 allows read/write for owner and group only - debug!("Setting permissions for socket file at {DAEMON_SOCKET_PATH} to 0x660"); - fs::set_permissions(DAEMON_SOCKET_PATH, fs::Permissions::from_mode(0o660))?; + // Set socket permissions to allow client access + // 0o660 allows read/write for owner and group only + debug!("Setting permissions for socket file at {DAEMON_SOCKET_PATH} to 0x660"); + fs::set_permissions(DAEMON_SOCKET_PATH, fs::Permissions::from_mode(0o660))?; + } let uds_stream = UnixListenerStream::new(uds); @@ -561,7 +569,7 @@ pub async fn run_server(config: Config) -> anyhow::Result<()> { debug!("Defguard daemon configuration: {config:?}"); Server::builder() - .trace_fn(|_| tracing::info_span!("defguard_service")) + .trace_fn(|_| tracing::info_span!("defguard_client_service")) .add_service(DesktopDaemonServiceServer::new(daemon_service)) .serve_with_incoming(uds_stream) .await?; @@ -583,7 +591,7 @@ pub(crate) async fn run_server( debug!("Defguard daemon configuration: {config:?}"); Server::builder() - .trace_fn(|_| tracing::info_span!("defguard_service")) + .trace_fn(|_| tracing::info_span!("defguard_client_service")) .add_service(DesktopDaemonServiceServer::new(daemon_service)) .serve_with_incoming(stream) .await?; diff --git a/src-tauri/daemon/src/error.rs b/src-tauri/daemon/src/error.rs new file mode 100644 index 000000000..d1a1f11b6 --- /dev/null +++ b/src-tauri/daemon/src/error.rs @@ -0,0 +1,13 @@ +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error("internal daemon error: {0}")] + Internal(String), + #[error("wireguard interface error: {0}")] + WireGuard(#[from] defguard_wireguard_rs::error::WireguardInterfaceError), + #[error("service location error: {0}")] + ServiceLocation(#[from] defguard_client_service_locations::ServiceLocationError), + #[error("conversion error: {0}")] + Conversion(String), + #[error("not found: {0}")] + NotFound(String), +} diff --git a/src-tauri/daemon/src/lib.rs b/src-tauri/daemon/src/lib.rs new file mode 100644 index 000000000..345540ee6 --- /dev/null +++ b/src-tauri/daemon/src/lib.rs @@ -0,0 +1,12 @@ +pub mod config; +pub mod daemon; +pub mod error; +pub mod utils; + +#[cfg(windows)] +pub mod named_pipe; +#[cfg(windows)] +pub mod windows; + +pub use defguard_client_common::VERSION; +pub use error::Error; diff --git a/src-tauri/src/service/named_pipe.rs b/src-tauri/daemon/src/named_pipe.rs similarity index 99% rename from src-tauri/src/service/named_pipe.rs rename to src-tauri/daemon/src/named_pipe.rs index b3d9df738..b25d50b1e 100644 --- a/src-tauri/src/service/named_pipe.rs +++ b/src-tauri/daemon/src/named_pipe.rs @@ -11,6 +11,7 @@ use tokio::{ net::windows::named_pipe::NamedPipeServer, }; use tonic::transport::server::Connected; +use tracing::{debug, error, info}; use windows_sys::Win32::{ Foundation::{LocalFree, HANDLE, INVALID_HANDLE_VALUE}, Security::{ diff --git a/src-tauri/daemon/src/utils.rs b/src-tauri/daemon/src/utils.rs new file mode 100644 index 000000000..7796cf56d --- /dev/null +++ b/src-tauri/daemon/src/utils.rs @@ -0,0 +1,39 @@ +use std::io::stdout; + +use tracing::Level; +use tracing_appender::non_blocking::WorkerGuard; +use tracing_subscriber::{ + fmt, fmt::writer::MakeWriterExt, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, + Layer, +}; + +pub fn logging_setup(log_dir: &str, log_level: &str) -> WorkerGuard { + // prepare log file appender + let file_appender = tracing_appender::rolling::daily(log_dir, "defguard-service.log"); + let (non_blocking, guard) = tracing_appender::non_blocking(file_appender); + + // prepare log level filter for stdout + let stdout_filter = EnvFilter::try_from_default_env() + .unwrap_or_else(|_| format!("{log_level},hyper=info,h2=info").into()); + + // prepare log level filter for JSON file + let json_filter = EnvFilter::new("DEBUG,hyper=info,h2=info"); + + // prepare tracing layers + let stdout_layer = fmt::layer() + .pretty() + .with_writer(stdout.with_max_level(Level::DEBUG)) + .with_filter(stdout_filter); + let json_file_layer = fmt::layer() + .json() + .with_writer(non_blocking.with_max_level(Level::DEBUG)) + .with_filter(json_filter); + + // initialize tracing subscriber + tracing_subscriber::registry() + .with(stdout_layer) + .with(json_file_layer) + .init(); + + guard +} diff --git a/src-tauri/src/service/windows.rs b/src-tauri/daemon/src/windows.rs similarity index 97% rename from src-tauri/src/service/windows.rs rename to src-tauri/daemon/src/windows.rs index 00c5c0a0c..9b7279b85 100644 --- a/src-tauri/src/service/windows.rs +++ b/src-tauri/daemon/src/windows.rs @@ -6,8 +6,8 @@ use std::{ }; use clap::Parser; -use error; use tokio::{runtime::Runtime, time::sleep}; +use tracing::{error, info, warn}; use windows_service::{ define_windows_service, service::{ @@ -19,15 +19,13 @@ use windows_service::{ }; use crate::{ - enterprise::service_locations::{ - windows::{watch_for_login_logoff, watch_for_network_change}, - ServiceLocationError, ServiceLocationManager, - }, - service::{ - config::Config, - daemon::{run_server, DaemonError}, - utils::logging_setup, - }, + config::Config, + daemon::{run_server, DaemonError}, + utils::logging_setup, +}; +use defguard_client_service_locations::{ + windows::{watch_for_login_logoff, watch_for_network_change}, + ServiceLocationError, ServiceLocationManager, }; static SERVICE_NAME: &str = "DefguardService"; diff --git a/src-tauri/deny.toml b/src-tauri/deny.toml index fa04523fd..5a77da65d 100644 --- a/src-tauri/deny.toml +++ b/src-tauri/deny.toml @@ -70,7 +70,6 @@ feature-depth = 1 # A list of advisory IDs to ignore. Note that ignored advisories will still # output a note when they are encountered. ignore = [ - { id = "RUSTSEC-2024-0429", reason = "https://github.com/tauri-apps/tauri/issues/12048" }, { id = "RUSTSEC-2024-0436", reason = "Unmaintained netlink dependency" }, # The "unmaintained" advisories below stem from our use of Tauri v2, which # depends on GTK3 bindings that are no longer maintained. @@ -86,7 +85,6 @@ ignore = [ { id = "RUSTSEC-2024-0419", reason = "Tauri v2 GTK3 dependency (unmaintained)" }, { id = "RUSTSEC-2024-0420", reason = "Tauri v2 GTK3 dependency (unmaintained)" }, { id = "RUSTSEC-2025-0052", reason = "Discontinued, but dark-light v2.0.0 needs it" }, - { id = "RUSTSEC-2025-0057", reason = "Tauri needs it" }, { id = "RUSTSEC-2025-0075", reason = "Tauri v2 dependency (unmaintained)" }, { id = "RUSTSEC-2025-0080", reason = "Tauri v2 dependency (unmaintained)" }, { id = "RUSTSEC-2025-0081", reason = "Tauri v2 dependency (unmaintained)" }, @@ -133,10 +131,34 @@ confidence-threshold = 0.8 exceptions = [ { allow = [ "AGPL-3.0-or-later", - ], crate = "common" }, + ], crate = "defguard-client-common" }, { allow = [ "AGPL-3.0-or-later", ], crate = "defguard-client" }, + { allow = [ + "AGPL-3.0-or-later", + ], crate = "defguard-client-core" }, + { allow = [ + "AGPL-3.0-or-later", + ], crate = "defguard-client-service" }, + { allow = [ + "AGPL-3.0-or-later", + ], crate = "defguard-client-proto" }, + { allow = [ + "AGPL-3.0-or-later", + ], crate = "defguard-dg" }, + { allow = [ + "LicenseRef-Proprietary", + ], crate = "defguard-client-posture" }, + { allow = [ + "LicenseRef-Proprietary", + ], crate = "defguard-client-provisioning" }, + { allow = [ + "LicenseRef-Proprietary", + ], crate = "defguard-client-config-sync" }, + { allow = [ + "LicenseRef-Proprietary", + ], crate = "defguard-client-service-locations" }, ] # Some crates don't have (easily) machine readable licensing information, diff --git a/src-tauri/src/enterprise/LICENSE.md b/src-tauri/enterprise/LICENSE.md similarity index 100% rename from src-tauri/src/enterprise/LICENSE.md rename to src-tauri/enterprise/LICENSE.md diff --git a/src-tauri/enterprise/config-sync/Cargo.toml b/src-tauri/enterprise/config-sync/Cargo.toml new file mode 100644 index 000000000..e6f051b33 --- /dev/null +++ b/src-tauri/enterprise/config-sync/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "defguard-client-config-sync" +description = "Real-time configuration sync for the Defguard desktop client" +authors.workspace = true +edition.workspace = true +homepage.workspace = true +license = "LicenseRef-Proprietary" +rust-version.workspace = true +version.workspace = true + +[dependencies] +defguard-client-core = { path = "../../core" } +defguard-client-proto = { path = "../../client-proto" } +defguard-client-service-locations = { path = "../service-locations" } +log.workspace = true +reqwest.workspace = true +semver.workspace = true +serde.workspace = true +serde_json.workspace = true +sqlx.workspace = true +tokio = { version = "1", features = ["time"] } + +[dev-dependencies] +http.workspace = true + +[target.'cfg(not(target_os = "macos"))'.dependencies] +tonic = { workspace = true } diff --git a/src-tauri/enterprise/config-sync/src/commands.rs b/src-tauri/enterprise/config-sync/src/commands.rs new file mode 100644 index 000000000..7eb4a4726 --- /dev/null +++ b/src-tauri/enterprise/config-sync/src/commands.rs @@ -0,0 +1,256 @@ +use std::collections::HashSet; + +#[cfg(not(target_os = "macos"))] +use defguard_client_core::{ + connection::daemon_client::DAEMON_CLIENT, database::models::wireguard_keys::WireguardKeys, +}; +use defguard_client_core::{ + database::models::{ + instance::{ClientTrafficPolicy, Instance}, + location::{infer_mfa_method, Location}, + Id, NoId, + }, + error::Error, + into_location, +}; +#[cfg(not(target_os = "macos"))] +use defguard_client_proto::defguard::client::v1::{ + DeleteServiceLocationsRequest, SaveServiceLocationsRequest, +}; +use defguard_client_proto::defguard::client_types::DeviceConfigResponse; +use defguard_client_service_locations::to_service_location; +use sqlx::{Sqlite, SqliteExecutor, Transaction}; + +pub async fn locations_changed( + transaction: &mut Transaction<'_, Sqlite>, + instance: &Instance, + device_config: &DeviceConfigResponse, +) -> Result { + let db_locations = Location::find_by_instance_id(transaction.as_mut(), instance.id, true) + .await? + .into_iter() + .map(|location| { + let mut new_location = Location::::from(location); + new_location.route_all_traffic = false; + new_location.mfa_method = infer_mfa_method(new_location.location_mfa_mode, None); + new_location + }) + .collect::>(); + let core_locations: HashSet = device_config + .configs + .iter() + .map(|config| into_location(config.clone(), instance.id)) + .collect::>(); + + Ok(db_locations != core_locations) +} + +pub async fn do_update_instance( + transaction: &mut Transaction<'_, Sqlite>, + instance: &mut Instance, + response: DeviceConfigResponse, +) -> Result<(), Error> { + debug!("Updating instance {instance}"); + let locations_changed_val = locations_changed(transaction, instance, &response).await?; + let instance_info = response + .instance + .expect("Missing instance info in device config response"); + instance.name = instance_info.name; + instance.url = instance_info.url; + instance.proxy_url = instance_info.proxy_url; + instance.username = instance_info.username; + let policy = instance_info.client_traffic_policy.into(); + if instance.client_traffic_policy != policy && policy == ClientTrafficPolicy::DisableAllTraffic + { + debug!("Disabling all traffic for all locations of instance {instance}"); + Location::disable_all_traffic_for_all(transaction.as_mut(), instance.id).await?; + debug!("Disabled all traffic for all locations of instance {instance}"); + } + instance.client_traffic_policy = instance_info.client_traffic_policy.into(); + instance.openid_display_name = instance_info.openid_display_name; + instance.uuid = instance_info.id; + if response.token.is_some() { + instance.token = response.token; + debug!("Set polling token for instance {}", instance.name); + } else { + debug!( + "No polling token received for instance {}, not updating", + instance.name + ); + } + instance.save(transaction.as_mut()).await?; + debug!( + "A new base configuration has been applied to instance {instance}, even if nothing changed" + ); + + let mut service_locations = Vec::new(); + + if locations_changed_val { + debug!( + "Updating locations for instance {}({}).", + instance.name, instance.id + ); + let mut current_locations = + Location::find_by_instance_id(transaction.as_mut(), instance.id, true).await?; + for dev_config in response.configs { + let new_location = into_location(dev_config, instance.id); + + let saved_location = if let Some(position) = current_locations + .iter() + .position(|loc| loc.network_id == new_location.network_id) + { + let mut current_location = current_locations.remove(position); + debug!( + "Updating existing location {}({}) for instance {}({}).", + current_location.name, current_location.id, instance.name, instance.id, + ); + current_location.name = new_location.name; + current_location.address = new_location.address; + current_location.pubkey = new_location.pubkey; + current_location.endpoint = new_location.endpoint; + current_location.allowed_ips = new_location.allowed_ips; + current_location.keepalive_interval = new_location.keepalive_interval; + current_location.dns = new_location.dns; + current_location.location_mfa_mode = new_location.location_mfa_mode; + current_location.service_location_mode = new_location.service_location_mode; + current_location.mfa_method = infer_mfa_method( + current_location.location_mfa_mode, + current_location.mfa_method, + ); + current_location.posture_check_required = new_location.posture_check_required; + current_location.save(transaction.as_mut()).await?; + info!("Location {current_location} configuration updated for instance {instance}"); + current_location + } else { + debug!("Creating new location {new_location} for instance {instance}"); + let new_location = new_location.save(transaction.as_mut()).await?; + info!("New location {new_location} created for instance {instance}"); + new_location + }; + + if saved_location.is_service_location() { + debug!( + "Adding service location {}({}) for instance {}({}) to be saved to the daemon.", + saved_location.name, saved_location.id, instance.name, instance.id, + ); + service_locations.push(to_service_location(&saved_location)?); + } + } + + debug!("Removing locations for instance {instance}"); + for removed_location in current_locations { + removed_location.delete(transaction.as_mut()).await?; + info!( + "Removed location {removed_location} for instance {instance} during instance update" + ); + } + debug!("Finished updating locations for instance {instance}"); + } else { + info!("Locations for instance {instance} didn't change. Not updating them."); + } + + if service_locations.is_empty() { + debug!( + "No service locations for instance {}({}), removing all existing service locations.", + instance.name, instance.id + ); + + #[cfg(not(target_os = "macos"))] + { + let delete_request = DeleteServiceLocationsRequest { + instance_id: instance.uuid.clone(), + }; + DAEMON_CLIENT + .clone() + .delete_service_locations(delete_request) + .await + .map_err(|err| { + error!( + "Error while deleting service locations from the daemon for instance {}({ \ + }): {err}", + instance.name, instance.id, + ); + Error::InternalError(err.to_string()) + })?; + debug!( + "Successfully removed all service locations from daemon for instance {}({})", + instance.name, instance.id + ); + } + } else { + debug!( + "Processing {} service location(s) for instance {}({})", + service_locations.len(), + instance.name, + instance.id + ); + + #[cfg(not(target_os = "macos"))] + { + let private_key = WireguardKeys::find_by_instance_id(transaction.as_mut(), instance.id) + .await? + .ok_or(Error::NotFound)? + .prvkey; + + let save_request = SaveServiceLocationsRequest { + service_locations: service_locations.clone(), + instance_id: instance.uuid.clone(), + private_key, + }; + + debug!( + "Sending request to daemon to save {} service location(s) for instance {}({})", + save_request.service_locations.len(), + instance.name, + instance.id + ); + + DAEMON_CLIENT + .clone() + .save_service_locations(save_request) + .await + .map_err(|err| { + error!( + "Error while saving service locations to the daemon for instance {}({}): \ + {err}", + instance.name, instance.id, + ); + Error::InternalError(err.to_string()) + })?; + + info!( + "Successfully saved {} service location(s) to daemon for instance {}({})", + service_locations.len(), + instance.name, + instance.id + ); + + debug!( + "Completed processing all service locations for instance {}({})", + instance.name, instance.id + ); + } + } + + Ok(()) +} + +pub async fn disable_enterprise_features<'e, E>( + instance: &mut Instance, + executor: E, +) -> Result<(), Error> +where + E: SqliteExecutor<'e>, +{ + debug!( + "Disabling enterprise features for instance {}({})", + instance.name, instance.id + ); + instance.client_traffic_policy = ClientTrafficPolicy::None; + instance.save(executor).await?; + debug!( + "Disabled enterprise features for instance {}({})", + instance.name, instance.id + ); + Ok(()) +} diff --git a/src-tauri/enterprise/config-sync/src/lib.rs b/src-tauri/enterprise/config-sync/src/lib.rs new file mode 100644 index 000000000..82bd18580 --- /dev/null +++ b/src-tauri/enterprise/config-sync/src/lib.rs @@ -0,0 +1,386 @@ +#[macro_use] +extern crate log; + +use std::{cmp::Ordering, str::FromStr}; + +pub mod commands; + +use defguard_client_core::{ + database::models::{instance::Instance, Id}, + error::Error, + proxy::post_with_headers, + version::{MIN_CORE_VERSION, MIN_PROXY_VERSION}, +}; +use defguard_client_proto::defguard::client_types::{InstanceInfoRequest, InstanceInfoResponse}; +use reqwest::{StatusCode, Url}; +use semver::Version; +use serde::Serialize; +use sqlx::{Sqlite, Transaction}; + +use crate::commands::disable_enterprise_features; + +static POLLING_ENDPOINT: &str = "/api/v1/poll"; + +const CORE_VERSION_HEADER: &str = "defguard-core-version"; +const CORE_CONNECTED_HEADER: &str = "defguard-core-connected"; +const PROXY_VERSION_HEADER: &str = "defguard-component-version"; + +/// Result of a successful config fetch from the proxy. +#[derive(Debug)] +pub struct FetchedConfig { + pub response: InstanceInfoResponse, + pub version_mismatch: Option, +} + +/// Payload emitted when a version mismatch is detected. +#[derive(Clone, Debug, Serialize)] +pub struct VersionMismatchPayload { + pub instance_name: String, + pub instance_id: Id, + pub core_version: String, + pub proxy_version: String, + pub core_required_version: String, + pub proxy_required_version: String, + pub core_compatible: bool, + pub proxy_compatible: bool, +} + +/// Talks to the proxy for a single instance: builds the request, POSTs it, +/// handles 402 PAYMENT_REQUIRED by disabling enterprise features, parses the +/// response, and checks the version headers. +/// +/// Does **not** apply config changes or emit events - those are the caller's +/// responsibility. +pub async fn fetch_instance_config( + transaction: &mut Transaction<'_, Sqlite>, + instance: &mut Instance, +) -> Result { + debug!("Getting config from core for instance {}", instance.name); + + let request = build_request(instance)?; + let url = Url::from_str(&instance.proxy_url) + .and_then(|url| url.join(POLLING_ENDPOINT)) + .map_err(|_| { + Error::InternalError(format!( + "Can't build polling url: {}/{POLLING_ENDPOINT}", + instance.proxy_url + )) + })?; + let response = post_with_headers(url, &request).await.map_err(|err| { + Error::InternalError(format!( + "HTTP request failed for instance {}({}), url: {}, {err}", + instance.name, instance.id, instance.proxy_url + )) + })?; + debug!( + "Got the following config response for instance {} from core: {response:?}", + instance.name + ); + + let version_mismatch = check_min_version(&response, instance); + + // Return early if the enterprise features are disabled in the core + if response.status() == StatusCode::PAYMENT_REQUIRED { + debug!( + "Instance {}({}) has enterprise features disabled, checking if this state is reflected \ + on our end.", + instance.name, instance.id + ); + if instance.enterprise_enabled { + info!( + "Instance {}({}) has enterprise features disabled, but we have them enabled, \ + disabling.", + instance.name, instance.id + ); + disable_enterprise_features(instance, transaction.as_mut()).await?; + } else { + debug!( + "Instance {}({}) has enterprise features disabled, and we have them disabled as \ + well, no action needed", + instance.name, instance.id + ); + } + return Err(Error::CoreNotEnterprise); + } + + // Parse the response + debug!( + "Parsing the config response for instance {}.", + instance.name + ); + let response: InstanceInfoResponse = response.json().await.map_err(|err| { + Error::InternalError(format!( + "Failed to parse InstanceInfoResponse for instance {}({}): {err}", + instance.name, instance.id, + )) + })?; + + if response.device_config.is_none() { + return Err(Error::InternalError( + "Device config not present in response".to_string(), + )); + } + + debug!("Parsed the config for instance {}", instance.name); + trace!("Parsed config: {:?}", response.device_config); + + Ok(FetchedConfig { + response, + version_mismatch, + }) +} + +/// Checks if config has changed compared to what's in the database. +pub async fn config_changed( + transaction: &mut Transaction<'_, Sqlite>, + instance: &Instance, + device_config: &defguard_client_proto::defguard::client_types::DeviceConfigResponse, +) -> Result { + debug!( + "Checking if config and any of the locations changed for instance {}({})", + instance.name, instance.id + ); + let locations_changed = + commands::locations_changed(transaction, instance, device_config).await?; + let info_changed = match &device_config.instance { + Some(info) => instance != info, + None => false, + }; + debug!( + "Did the locations change?: {locations_changed}. Did the instance information change?: \ + {info_changed}" + ); + Ok(locations_changed || info_changed) +} + +/// Retrieves token to build InstanceInfoRequest +fn build_request(instance: &Instance) -> Result { + let token = instance.token.as_ref().ok_or_else(|| Error::NoToken)?; + + Ok(InstanceInfoRequest { + token: (*token).clone(), + }) +} + +/// Checks response headers for version compatibility. +/// Returns `Some(payload)` when versions are incompatible, `None` when +/// everything is compatible or headers are missing. +fn check_min_version( + response: &reqwest::Response, + instance: &Instance, +) -> Option { + let detected_core_version: String; + let detected_proxy_version: String; + + let defguard_core_connected: Option = response + .headers() + .get(CORE_CONNECTED_HEADER) + .and_then(|v| { + debug!( + "Defguard core connection status header for instance {}({}): {v:?}", + instance.name, instance.id + ); + v.to_str().ok() + }) + .and_then(|s| s.parse().ok()); + + let core_compatible = if let Some(core_version) = response.headers().get(CORE_VERSION_HEADER) { + if let Ok(core_version) = core_version.to_str() { + if let Ok(core_version) = Version::from_str(core_version) { + detected_core_version = core_version.to_string(); + core_version.cmp_precedence(&MIN_CORE_VERSION) != Ordering::Less + } else { + warn!( + "Core version header: invalid semver string in response for instance {}({}): \ + '{core_version}'", + instance.name, instance.id + ); + detected_core_version = core_version.to_string(); + false + } + } else { + warn!( + "Core version header: invalid string in response for instance {}({}): \ + '{core_version:?}'", + instance.name, instance.id + ); + detected_core_version = "unknown".to_string(); + false + } + } else { + warn!( + "Core version header not present in response for instance {}({})", + instance.name, instance.id + ); + detected_core_version = "unknown".to_string(); + false + }; + + let proxy_compatible = if let Some(proxy_version) = response.headers().get(PROXY_VERSION_HEADER) + { + if let Ok(proxy_version) = proxy_version.to_str() { + if let Ok(proxy_version) = Version::from_str(proxy_version) { + detected_proxy_version = proxy_version.to_string(); + proxy_version.cmp_precedence(&MIN_PROXY_VERSION) != Ordering::Less + } else { + warn!( + "Proxy version header not a valid semver string in response for instance \ + {}({}): '{proxy_version}'", + instance.name, instance.id + ); + detected_proxy_version = proxy_version.to_string(); + false + } + } else { + warn!( + "Proxy version header not a valid string in response for instance {}({}): \ + '{proxy_version:?}'", + instance.name, instance.id + ); + detected_proxy_version = "unknown".to_string(); + false + } + } else { + warn!( + "Proxy version header not present in response for instance {}({})", + instance.name, instance.id + ); + detected_proxy_version = "unknown".to_string(); + false + }; + + let should_inform = match defguard_core_connected { + Some(true) => { + debug!( + "Defguard core is connected for instance {}({})", + instance.name, instance.id + ); + true + } + Some(false) => { + info!( + "Defguard core is not connected for instance {}({})", + instance.name, instance.id + ); + false + } + None => { + debug!( + "Defguard core connection status unknown for instance {}({})", + instance.name, instance.id + ); + true + } + }; + + if should_inform && (!core_compatible || !proxy_compatible) { + warn!( + "Instance {} is running incompatible versions: core {detected_core_version}, proxy \ + {detected_proxy_version}. Required versions: core >= {MIN_CORE_VERSION}, proxy >= \ + {MIN_PROXY_VERSION}", + instance.name, + ); + + Some(VersionMismatchPayload { + instance_name: instance.name.clone(), + instance_id: instance.id, + core_version: detected_core_version, + proxy_version: detected_proxy_version, + core_required_version: MIN_CORE_VERSION.to_string(), + proxy_required_version: MIN_PROXY_VERSION.to_string(), + core_compatible, + proxy_compatible, + }) + } else { + None + } +} + +#[cfg(test)] +mod tests { + use defguard_client_core::database::models::instance::ClientTrafficPolicy; + + use super::*; + + fn instance_with_token(token: Option<&str>) -> Instance { + Instance { + id: 1, + name: "inst".into(), + uuid: "uuid".into(), + url: "https://core".into(), + proxy_url: "https://proxy".into(), + username: "alice".into(), + token: token.map(str::to_string), + client_traffic_policy: ClientTrafficPolicy::None, + enterprise_enabled: false, + openid_display_name: None, + } + } + + fn response_with_headers(headers: &[(&str, &str)]) -> reqwest::Response { + let mut builder = http::Response::builder(); + for (key, value) in headers { + builder = builder.header(*key, *value); + } + reqwest::Response::from(builder.body(String::new()).unwrap()) + } + + #[test] + fn test_build_request_no_token_errors() { + let instance = instance_with_token(None); + assert!(matches!(build_request(&instance), Err(Error::NoToken))); + } + + #[test] + fn test_build_request_includes_token() { + let instance = instance_with_token(Some("tok")); + let request = build_request(&instance).unwrap(); + assert_eq!(request.token, "tok"); + } + + #[test] + fn test_check_min_version_compatible_returns_none() { + let response = response_with_headers(&[ + (CORE_VERSION_HEADER, "1.6.0"), + (PROXY_VERSION_HEADER, "1.6.0"), + ]); + let instance = instance_with_token(Some("tok")); + assert!(check_min_version(&response, &instance).is_none()); + } + + #[test] + fn test_check_min_version_incompatible_core() { + let response = response_with_headers(&[ + (CORE_VERSION_HEADER, "1.0.0"), + (PROXY_VERSION_HEADER, "1.6.0"), + ]); + let instance = instance_with_token(Some("tok")); + let payload = check_min_version(&response, &instance).expect("mismatch expected"); + assert!(!payload.core_compatible); + assert!(payload.proxy_compatible); + assert_eq!(payload.core_version, "1.0.0"); + } + + #[test] + fn test_check_min_version_missing_headers_returns_mismatch() { + let response = response_with_headers(&[]); + let instance = instance_with_token(Some("tok")); + let payload = check_min_version(&response, &instance).expect("mismatch expected"); + assert!(!payload.core_compatible); + assert!(!payload.proxy_compatible); + assert_eq!(payload.core_version, "unknown"); + assert_eq!(payload.proxy_version, "unknown"); + } + + #[test] + fn test_check_min_version_core_not_connected_suppresses() { + // Core reports it is not connected, so an incompatible version is not flagged. + let response = response_with_headers(&[ + (CORE_CONNECTED_HEADER, "false"), + (CORE_VERSION_HEADER, "1.0.0"), + (PROXY_VERSION_HEADER, "1.6.0"), + ]); + let instance = instance_with_token(Some("tok")); + assert!(check_min_version(&response, &instance).is_none()); + } +} diff --git a/src-tauri/enterprise/posture/Cargo.toml b/src-tauri/enterprise/posture/Cargo.toml new file mode 100644 index 000000000..63d41ed94 --- /dev/null +++ b/src-tauri/enterprise/posture/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "defguard-client-posture" +description = "Device posture checks for the Defguard desktop client" +authors.workspace = true +edition.workspace = true +homepage.workspace = true +license = "LicenseRef-Proprietary" +rust-version.workspace = true +version.workspace = true + +[dependencies] +defguard-client-core = { path = "../../core" } +defguard-client-proto = { path = "../../client-proto" } +log.workspace = true +reqwest.workspace = true +serde.workspace = true +serde_json.workspace = true +tonic.workspace = true + +[target.'cfg(target_os = "linux")'.dependencies] +sysinfo = { version = "0.39", default-features = false, features = ["system"] } + +[target.'cfg(target_os = "macos")'.dependencies] +sysinfo = { version = "0.39", default-features = false, features = ["system"] } + +[target.'cfg(windows)'.dependencies] +sysinfo = { version = "0.39", default-features = false, features = ["system"] } +time = { version = "0.3", features = ["formatting", "macros"] } +wmi = { version = "0.18", default-features = false } diff --git a/src-tauri/src/enterprise/inspector/linux.rs b/src-tauri/enterprise/posture/src/inspector/linux.rs similarity index 100% rename from src-tauri/src/enterprise/inspector/linux.rs rename to src-tauri/enterprise/posture/src/inspector/linux.rs diff --git a/src-tauri/src/enterprise/inspector/macos.rs b/src-tauri/enterprise/posture/src/inspector/macos.rs similarity index 100% rename from src-tauri/src/enterprise/inspector/macos.rs rename to src-tauri/enterprise/posture/src/inspector/macos.rs diff --git a/src-tauri/enterprise/posture/src/inspector/mod.rs b/src-tauri/enterprise/posture/src/inspector/mod.rs new file mode 100644 index 000000000..2fb05f477 --- /dev/null +++ b/src-tauri/enterprise/posture/src/inspector/mod.rs @@ -0,0 +1,135 @@ +#[cfg(target_os = "linux")] +pub(crate) mod linux; +#[cfg(target_os = "macos")] +pub(crate) mod macos; +#[cfg(test)] +mod tests; +#[cfg(windows)] +pub(crate) mod windows; + +use std::env::consts::OS; + +use sysinfo::System; + +use defguard_client_core::version::PKG_VERSION; +use defguard_client_proto::defguard::enterprise::posture::v2::{ + BoolCheck, DevicePostureData, Int32Check, StringCheck, UnavailableReason, +}; + +/// Returns the operating system name. +fn os_name() -> Result { + System::name().ok_or(UnavailableReason::DetectionFailed) +} + +/// Returns the operating system version. +fn os_version() -> Result { + #[cfg(windows)] + { + // Windows can report versions like "11 (26200)"; core expects a parseable major. + System::os_version() + .and_then(|version| version.split_whitespace().next().map(ToString::to_string)) + .ok_or(UnavailableReason::DetectionFailed) + } + + #[cfg(not(windows))] + { + System::os_version().ok_or(UnavailableReason::DetectionFailed) + } +} + +/// Returns the Linux kernel version. +fn linux_kernel_version() -> Result { + #[cfg(target_os = "linux")] + { + System::kernel_version().ok_or(UnavailableReason::DetectionFailed) + } + + #[cfg(not(target_os = "linux"))] + { + Err(UnavailableReason::NotApplicable) + } +} + +/// Returns the disk encryption status, preferably for the system volume. +fn disk_encryption_status() -> Result { + #[cfg(target_os = "macos")] + { + macos::disk_encryption_status() + } + + #[cfg(windows)] + { + windows::disk_encryption_status() + } + + #[cfg(target_os = "linux")] + { + linux::disk_encryption_status() + } +} + +/// Returns the antivirus status. +fn anti_virus_status() -> Result { + #[cfg(windows)] + { + windows::anti_virus_status() + } + + #[cfg(not(windows))] + { + Err(UnavailableReason::NotApplicable) + } +} + +/// Checks whether the computer is part of a domain. +fn part_of_domain() -> Result { + #[cfg(windows)] + { + windows::part_of_domain() + } + + #[cfg(not(windows))] + { + Err(UnavailableReason::NotApplicable) + } +} + +/// Returns the device integrity status. +fn device_integrity() -> Result { + #[cfg(target_os = "macos")] + { + macos::system_integrity_status() + } + + #[cfg(not(target_os = "macos"))] + Err(UnavailableReason::NotApplicable) +} + +/// Returns the number of days since the last installed Windows security update. +fn security_update_age_days() -> Result { + #[cfg(windows)] + { + windows::security_update_age_days() + } + + #[cfg(not(windows))] + { + Err(UnavailableReason::NotApplicable) + } +} + +#[must_use] +pub fn device_posture_data() -> DevicePostureData { + DevicePostureData { + defguard_client_version: PKG_VERSION.to_owned(), + os_type: OS.to_string(), + os_name: Some(StringCheck::from(os_name())), + os_version: Some(StringCheck::from(os_version())), + disk_encryption: Some(BoolCheck::from(disk_encryption_status())), + antivirus_present: Some(BoolCheck::from(anti_virus_status())), + windows_ad_domain_joined: Some(BoolCheck::from(part_of_domain())), + windows_security_update_age_days: Some(Int32Check::from(security_update_age_days())), + linux_kernel_version: Some(StringCheck::from(linux_kernel_version())), + device_integrity: Some(BoolCheck::from(device_integrity())), + } +} diff --git a/src-tauri/src/enterprise/inspector/tests/linux.rs b/src-tauri/enterprise/posture/src/inspector/tests/linux.rs similarity index 84% rename from src-tauri/src/enterprise/inspector/tests/linux.rs rename to src-tauri/enterprise/posture/src/inspector/tests/linux.rs index 128293ae3..14357d896 100644 --- a/src-tauri/src/enterprise/inspector/tests/linux.rs +++ b/src-tauri/enterprise/posture/src/inspector/tests/linux.rs @@ -2,7 +2,7 @@ use super::super::{disk_encryption_status, os_name, os_version}; #[test] fn test_os_name() { - assert!(os_name().unwrap().ends_with("Linux")); + assert!(os_name().is_ok()); } #[test] diff --git a/src-tauri/src/enterprise/inspector/tests/macos.rs b/src-tauri/enterprise/posture/src/inspector/tests/macos.rs similarity index 100% rename from src-tauri/src/enterprise/inspector/tests/macos.rs rename to src-tauri/enterprise/posture/src/inspector/tests/macos.rs diff --git a/src-tauri/src/enterprise/inspector/tests/mod.rs b/src-tauri/enterprise/posture/src/inspector/tests/mod.rs similarity index 100% rename from src-tauri/src/enterprise/inspector/tests/mod.rs rename to src-tauri/enterprise/posture/src/inspector/tests/mod.rs diff --git a/src-tauri/src/enterprise/inspector/tests/windows.rs b/src-tauri/enterprise/posture/src/inspector/tests/windows.rs similarity index 100% rename from src-tauri/src/enterprise/inspector/tests/windows.rs rename to src-tauri/enterprise/posture/src/inspector/tests/windows.rs diff --git a/src-tauri/src/enterprise/inspector/windows.rs b/src-tauri/enterprise/posture/src/inspector/windows.rs similarity index 92% rename from src-tauri/src/enterprise/inspector/windows.rs rename to src-tauri/enterprise/posture/src/inspector/windows.rs index 30539e322..b0364eca7 100644 --- a/src-tauri/src/enterprise/inspector/windows.rs +++ b/src-tauri/enterprise/posture/src/inspector/windows.rs @@ -2,7 +2,7 @@ use serde::Deserialize; use time::{Date, OffsetDateTime}; -use wmi::{AuthLevel, WMIConnection, WMIError}; +use wmi::{AuthLevel, WMIConnection}; use super::UnavailableReason; @@ -51,17 +51,6 @@ struct Win32QuickFixEngineering { //description: Option, // "Update" or "Security Update" } -/// Convert `WMIError` to `UnavailableReason`. -impl From for UnavailableReason { - fn from(err: WMIError) -> Self { - if let WMIError::HResultError { .. } = err { - UnavailableReason::InsufficientPermissions - } else { - UnavailableReason::DetectionFailed - } - } -} - /// Determine system drive letter. fn system_drive_letter() -> Result { let conn = WMIConnection::new()?; diff --git a/src-tauri/enterprise/posture/src/lib.rs b/src-tauri/enterprise/posture/src/lib.rs new file mode 100644 index 000000000..da9d2d7b8 --- /dev/null +++ b/src-tauri/enterprise/posture/src/lib.rs @@ -0,0 +1,7 @@ +#[macro_use] +extern crate log; + +pub mod inspector; +pub mod posture; + +pub use posture::{authorize_posture_session, get_posture_data}; diff --git a/src-tauri/src/enterprise/posture.rs b/src-tauri/enterprise/posture/src/posture.rs similarity index 86% rename from src-tauri/src/enterprise/posture.rs rename to src-tauri/enterprise/posture/src/posture.rs index f2641a1ea..4db9dd6ab 100644 --- a/src-tauri/src/enterprise/posture.rs +++ b/src-tauri/enterprise/posture/src/posture.rs @@ -1,20 +1,23 @@ -use reqwest::StatusCode; +use reqwest::{StatusCode, Url}; use serde::Deserialize; #[cfg(windows)] -use crate::service::client::DAEMON_CLIENT; -use crate::{ +use defguard_client_core::connection::daemon_client::DAEMON_CLIENT; +use defguard_client_core::{ database::{ models::{instance::Instance, location::Location, wireguard_keys::WireguardKeys, Id}, DB_POOL, }, error::Error, - service::proto::defguard::enterprise::posture::v2::{ - DevicePostureCheckRequest, DevicePostureCheckResponse, DevicePostureData, - }, - utils::post_with_headers, + proxy::post_with_headers, +}; +use defguard_client_proto::defguard::enterprise::posture::v2::{ + DevicePostureCheckRequest, DevicePostureCheckResponse, DevicePostureData, }; +#[cfg(not(windows))] +use crate::inspector::device_posture_data; + const POSTURE_ENDPOINT: &str = "/api/v1/posture/connect"; /// Collects device posture data, sends it to the proxy, and returns the runtime preshared key. @@ -40,7 +43,7 @@ pub async fn authorize_posture_session(location: &Location) -> Result Result { } #[cfg(not(windows))] { - Ok(DevicePostureData::new()) + Ok(device_posture_data()) } } diff --git a/src-tauri/enterprise/provisioning/Cargo.toml b/src-tauri/enterprise/provisioning/Cargo.toml new file mode 100644 index 000000000..107409dbb --- /dev/null +++ b/src-tauri/enterprise/provisioning/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "defguard-client-provisioning" +description = "Zero-touch provisioning for the Defguard desktop client" +authors.workspace = true +edition.workspace = true +homepage.workspace = true +license = "LicenseRef-Proprietary" +rust-version.workspace = true +version.workspace = true + +[dependencies] +defguard-client-core = { path = "../../core" } +log.workspace = true +serde.workspace = true +serde_json.workspace = true + +[dev-dependencies] +tempfile.workspace = true diff --git a/src-tauri/enterprise/provisioning/src/lib.rs b/src-tauri/enterprise/provisioning/src/lib.rs new file mode 100644 index 000000000..221c30d39 --- /dev/null +++ b/src-tauri/enterprise/provisioning/src/lib.rs @@ -0,0 +1,131 @@ +use std::{fmt, fs, path::Path}; + +use log::{debug, warn}; +use serde::{Deserialize, Serialize}; + +const CONFIG_FILE_NAME: &str = "provisioning.json"; + +#[derive(Clone, Deserialize, Serialize)] +pub struct ProvisioningConfig { + pub enrollment_url: String, + pub enrollment_token: String, +} + +impl fmt::Debug for ProvisioningConfig { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let Self { + enrollment_url, + enrollment_token: _, + } = self; + + f.debug_struct("ProvisioningConfig") + .field("enrollment_url", enrollment_url) + .field("enrollment_token", &"***") + .finish() + } +} + +impl ProvisioningConfig { + /// Load configuration from a file at `path`. + fn load(path: &Path) -> Option { + let file_content = match fs::read_to_string(path) { + Ok(content) => content, + Err(err) => { + warn!( + "Failed to open provisioning configuration file at {}. Error details: {err}", + path.display() + ); + return None; + } + }; + + let file_content = file_content.trim_start_matches('\u{FEFF}'); + + match serde_json::from_str::(file_content) { + Ok(config) => Some(config), + Err(err) => { + warn!( + "Failed to parse provisioning configuration file at {}. Error details: {err}", + path.display() + ); + None + } + } + } +} + +/// Try to find and load the provisioning configuration from the given app data directory. +#[must_use] +pub fn try_get_provisioning_config(app_data_dir: &Path) -> Option { + debug!( + "Trying to find provisioning config in {}", + app_data_dir.display() + ); + + let config_file_path = app_data_dir.join(CONFIG_FILE_NAME); + ProvisioningConfig::load(&config_file_path) +} + +#[cfg(test)] +mod tests { + use std::fs; + + use tempfile::tempdir; + + use super::*; + + #[test] + fn test_load_valid_config() { + let dir = tempdir().unwrap(); + fs::write( + dir.path().join(CONFIG_FILE_NAME), + r#"{"enrollment_url":"https://enroll","enrollment_token":"secret"}"#, + ) + .unwrap(); + + let config = try_get_provisioning_config(dir.path()).expect("config should load"); + assert_eq!(config.enrollment_url, "https://enroll"); + assert_eq!(config.enrollment_token, "secret"); + } + + #[test] + fn test_missing_file_returns_none() { + let dir = tempdir().unwrap(); + assert!(try_get_provisioning_config(dir.path()).is_none()); + } + + #[test] + fn test_malformed_json_returns_none() { + let dir = tempdir().unwrap(); + fs::write(dir.path().join(CONFIG_FILE_NAME), b"{ not valid json").unwrap(); + assert!(try_get_provisioning_config(dir.path()).is_none()); + } + + #[test] + fn test_bom_prefixed_config_parses() { + let dir = tempdir().unwrap(); + // A UTF-8 BOM prefix must be tolerated. + let content = + "\u{FEFF}{\"enrollment_url\":\"https://enroll\",\"enrollment_token\":\"secret\"}"; + fs::write(dir.path().join(CONFIG_FILE_NAME), content).unwrap(); + + let config = + try_get_provisioning_config(dir.path()).expect("BOM-prefixed config should load"); + assert_eq!(config.enrollment_url, "https://enroll"); + assert_eq!(config.enrollment_token, "secret"); + } + + #[test] + fn test_debug_redacts_token() { + let config = ProvisioningConfig { + enrollment_url: "https://enroll".into(), + enrollment_token: "super-secret".into(), + }; + + let rendered = format!("{config:?}"); + assert!(rendered.contains("***")); + assert!(!rendered.contains("super-secret")); + // The non-sensitive URL is still shown. + assert!(rendered.contains("https://enroll")); + } +} diff --git a/src-tauri/enterprise/service-locations/Cargo.toml b/src-tauri/enterprise/service-locations/Cargo.toml new file mode 100644 index 000000000..d206b1561 --- /dev/null +++ b/src-tauri/enterprise/service-locations/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "defguard-client-service-locations" +description = "Service location management for the Defguard client daemon" +authors.workspace = true +edition.workspace = true +homepage.workspace = true +license = "LicenseRef-Proprietary" +rust-version.workspace = true +version.workspace = true + +[dependencies] +defguard-client-common = { path = "../../common" } +defguard-client-core = { path = "../../core" } +defguard-client-proto = { path = "../../client-proto" } +defguard_wireguard_rs = { workspace = true } +base64.workspace = true +log.workspace = true +prost = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +thiserror = { workspace = true } + +[target.'cfg(windows)'.dependencies] +known-folders = "1.4" +windows = "0.62" +windows-acl = "0.3" +windows-service = "0.8" +windows-sys = "0.61" diff --git a/src-tauri/enterprise/service-locations/src/lib.rs b/src-tauri/enterprise/service-locations/src/lib.rs new file mode 100644 index 000000000..14e2d1430 --- /dev/null +++ b/src-tauri/enterprise/service-locations/src/lib.rs @@ -0,0 +1,124 @@ +use std::{collections::HashMap, fmt}; + +use defguard_client_core::{ + database::models::{ + location::{Location, ServiceLocationMode}, + Id, + }, + error::Error as CoreError, +}; +use defguard_client_proto::defguard::client::v1::{ + ServiceLocation, ServiceLocationMode as ProtoServiceLocationMode, +}; +use defguard_wireguard_rs::{error::WireguardInterfaceError, WGApi}; +use log::warn; +use serde::{Deserialize, Serialize}; + +#[cfg(windows)] +pub mod windows; + +#[derive(Debug, thiserror::Error)] +pub enum ServiceLocationError { + #[error("Error occurred while initializing service location API: {0}")] + InitError(String), + #[error("Failed to load service location storage: {0}")] + LoadError(String), + #[error(transparent)] + Io(#[from] std::io::Error), + #[error(transparent)] + DecodeError(#[from] base64::DecodeError), + #[error(transparent)] + WireGuardError(#[from] WireguardInterfaceError), + #[error(transparent)] + AddrParseError(#[from] defguard_wireguard_rs::net::IpAddrParseError), + #[error("WireGuard interface error: {0}")] + InterfaceError(String), + #[error(transparent)] + JsonError(#[from] serde_json::Error), + #[error(transparent)] + ProtoEnumError(#[from] prost::UnknownEnumValue), + #[cfg(windows)] + #[error(transparent)] + WindowsServiceError(#[from] windows_service::Error), +} + +#[allow(dead_code)] +#[derive(Default)] +pub struct ServiceLocationManager { + // Interface name: WireGuard API instance + wgapis: HashMap, + // Instance ID: Service locations connected under that instance + connected_service_locations: HashMap>, +} + +#[allow(dead_code)] +#[derive(Serialize, Deserialize)] +pub struct ServiceLocationData { + pub service_locations: Vec, + pub instance_id: String, + pub private_key: String, +} + +#[allow(dead_code)] +pub struct SingleServiceLocationData { + pub service_location: ServiceLocation, + pub instance_id: String, + pub private_key: String, +} + +impl fmt::Debug for ServiceLocationData { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("ServiceLocationData") + .field("service_locations", &self.service_locations) + .field("instance_id", &self.instance_id) + .field("private_key", &"***") + .finish() + } +} + +impl fmt::Debug for SingleServiceLocationData { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("SingleServiceLocationData") + .field("service_locations", &self.service_location) + .field("instance_id", &self.instance_id) + .field("private_key", &"***") + .finish() + } +} + +pub fn to_service_location(location: &Location) -> Result { + if !location.is_service_location() { + warn!("Location {location} is not a service location, so it can't be converted to one."); + return Err(CoreError::ConversionError(format!( + "Failed to convert location {location} to a service location as it's either not marked \ + as one or has MFA enabled." + ))); + } + + let mode = match location.service_location_mode { + ServiceLocationMode::Disabled => { + warn!( + "Location {location} has an invalid service location mode, so it can't be converted to \ + one." + ); + return Err(CoreError::ConversionError(format!( + "Location {location} has an invalid service location mode ({:?}), so it can't be \ + converted to one.", + location.service_location_mode + ))); + } + ServiceLocationMode::PreLogon => ProtoServiceLocationMode::PreLogon as i32, + ServiceLocationMode::AlwaysOn => ProtoServiceLocationMode::AlwaysOn as i32, + }; + + Ok(ServiceLocation { + name: location.name.clone(), + address: location.address.clone(), + pubkey: location.pubkey.clone(), + endpoint: location.endpoint.clone(), + allowed_ips: location.allowed_ips.clone(), + dns: location.dns.clone().unwrap_or_default(), + keepalive_interval: location.keepalive_interval.try_into().unwrap_or(0), + mode, + }) +} diff --git a/src-tauri/enterprise/service-locations/src/windows.rs b/src-tauri/enterprise/service-locations/src/windows.rs new file mode 100644 index 000000000..048d1e673 --- /dev/null +++ b/src-tauri/enterprise/service-locations/src/windows.rs @@ -0,0 +1,969 @@ +use std::{ + collections::HashMap, + ffi::OsStr, + fs::{self, create_dir_all}, + path::PathBuf, + result::Result, + str::FromStr, + sync::{Arc, RwLock}, + thread::sleep, + time::Duration, +}; + +use defguard_client_common::{dns_borrow, find_free_tcp_port, get_interface_name}; +use defguard_client_proto::defguard::client::v1::{ServiceLocation, ServiceLocationMode}; +use defguard_wireguard_rs::{ + key::Key, net::IpAddrMask, peer::Peer, InterfaceConfiguration, WGApi, WireguardInterfaceApi, +}; +use known_folders::get_known_folder_path; +use log::{debug, error, warn}; +use windows::{ + core::PSTR, + Win32::System::RemoteDesktop::{ + self, WTSQuerySessionInformationA, WTSWaitSystemEvent, WTS_CURRENT_SERVER_HANDLE, + WTS_EVENT_LOGOFF, WTS_EVENT_LOGON, WTS_SESSION_INFOA, + }, +}; +use windows_acl::acl::ACL; +use windows_sys::Win32::NetworkManagement::IpHelper::NotifyAddrChange; + +use crate::{ + ServiceLocationData, ServiceLocationError, ServiceLocationManager, SingleServiceLocationData, +}; + +const LOGIN_LOGOFF_EVENT_RETRY_DELAY_SECS: u64 = 5; +// How long to wait after a network change before attempting to connect. +// Gives DHCP time to complete and DNS to become available. +const NETWORK_STABILIZATION_DELAY: Duration = Duration::from_secs(3); +// How long to wait before restarting the network change watcher on error. +const NETWORK_CHANGE_MONITOR_RESTART_DELAY: Duration = Duration::from_secs(5); +const DEFAULT_WIREGUARD_PORT: u16 = 51820; +const DEFGUARD_DIR: &str = "Defguard"; +const SERVICE_LOCATIONS_SUBDIR: &str = "service_locations"; + +/// Watches for IP address changes on any network interface and attempts to connect to any +/// service locations that are not yet connected. This handles the case where the endpoint +/// hostname cannot be resolved at service startup because the network (e.g. Wi-Fi) is not +/// yet available. When the network comes up and an IP is assigned, this watcher fires and +/// retries the connection. +/// +/// Note: `NotifyAddrChange` also fires when WireGuard interfaces are created. This is +/// harmless because `connect_to_service_locations` skips already-connected locations. +/// +/// Runs on a dedicated OS thread because `NotifyAddrChange` is a blocking syscall. +pub fn watch_for_network_change(service_location_manager: Arc>) { + loop { + // NotifyAddrChange blocks until any IP address is added or removed on any interface. + // Passing NULL for both handle and overlapped selects the synchronous (blocking) mode. + let result = unsafe { NotifyAddrChange(std::ptr::null_mut(), std::ptr::null()) }; + + if result != 0 { + error!("NotifyAddrChange failed with error code: {result}"); + sleep(NETWORK_CHANGE_MONITOR_RESTART_DELAY); + continue; + } + + debug!( + "Network address change detected, waiting {NETWORK_STABILIZATION_DELAY:?}s for \ + network to stabilize before attempting service location connections..." + ); + sleep(NETWORK_STABILIZATION_DELAY); + + debug!("Attempting to connect to service locations after network change"); + let connect_result = service_location_manager + .write() + .unwrap() + .connect_to_service_locations(); + match connect_result { + Ok(_) => { + debug!("Service location connect attempt after network change completed"); + } + Err(err) => { + warn!("Failed to connect to service locations after network change: {err}"); + } + } + } +} + +/// Watches for user logon/logoff events and connects/disconnects pre-logon service locations +/// accordingly. +/// +/// Runs on a dedicated OS thread because `WTSWaitSystemEvent` is a blocking syscall. +pub fn watch_for_login_logoff( + service_location_manager: Arc>, +) -> Result<(), ServiceLocationError> { + loop { + let mut event_flags: u32 = 0; + let success = unsafe { + WTSWaitSystemEvent( + Some(WTS_CURRENT_SERVER_HANDLE), + WTS_EVENT_LOGON | WTS_EVENT_LOGOFF, + &mut event_flags, + ) + }; + + match success { + Ok(_) => { + debug!("Waiting for system event returned with event_flags: 0x{event_flags:x}"); + } + Err(err) => { + error!("Failed waiting for login/logoff event: {err:?}"); + sleep(Duration::from_secs(LOGIN_LOGOFF_EVENT_RETRY_DELAY_SECS)); + continue; + } + }; + + if event_flags & WTS_EVENT_LOGON != 0 { + debug!("Detected user logon, attempting to auto-disconnect from service locations."); + service_location_manager + .write() + .unwrap() + .disconnect_service_locations(Some(ServiceLocationMode::PreLogon))?; + } + if event_flags & WTS_EVENT_LOGOFF != 0 { + debug!("Detected user logoff, attempting to auto-connect to service locations."); + service_location_manager + .write() + .unwrap() + .connect_to_service_locations()?; + } + } +} + +fn setup_wgapi(ifname: &str) -> Result { + WGApi::new(ifname).map_err(|err| { + let msg = format!("Failed to setup WireGuard API for interface {ifname}: {err}"); + log::error!("{msg}"); + ServiceLocationError::InterfaceError(msg) + }) +} + +fn get_shared_directory() -> Result { + match get_known_folder_path(known_folders::KnownFolder::ProgramData) { + Some(mut path) => { + path.push(DEFGUARD_DIR); + path.push(SERVICE_LOCATIONS_SUBDIR); + Ok(path) + } + None => Err(ServiceLocationError::LoadError( + "Could not find ProgramData known folder".to_string(), + )), + } +} + +fn set_protected_acls(path: &str) -> Result<(), ServiceLocationError> { + debug!("Setting secure ACLs on: {path}"); + + const SYSTEM_SID: &str = "S-1-5-18"; // NT AUTHORITY\SYSTEM + const ADMINISTRATORS_SID: &str = "S-1-5-32-544"; // BUILTIN\Administrators + + const FILE_ALL_ACCESS: u32 = 0x001F_01FF; + + match ACL::from_file_path(path, false) { + Ok(mut acl) => { + // Remove everything else from access + debug!("Removing all existing ACL entries for {path}"); + let all_entries = acl.all().map_err(|e| { + ServiceLocationError::LoadError(format!("Failed to get ACL entries: {e}")) + })?; + + for entry in all_entries { + if let Some(sid) = entry.sid { + if let Err(e) = acl.remove(sid.as_ptr() as *mut _, None, None) { + debug!("Note: Could not remove ACL entry (might be expected): {e}"); + } + } + } + + debug!("Cleared existing ACL entries, now adding secure entries"); + + // Add SYSTEM with full control + debug!("Adding SYSTEM with full control"); + let system_sid_result = windows_acl::helper::string_to_sid(SYSTEM_SID); + match system_sid_result { + Ok(system_sid) => { + acl.allow(system_sid.as_ptr() as *mut _, true, FILE_ALL_ACCESS) + .map_err(|e| { + ServiceLocationError::LoadError(format!( + "Failed to add SYSTEM ACL: {e}" + )) + })?; + } + Err(e) => { + return Err(ServiceLocationError::LoadError(format!( + "Failed to convert SYSTEM SID: {e}" + ))); + } + } + + // Add Administrators with full control + debug!("Adding Administrators with full control"); + let admin_sid_result = windows_acl::helper::string_to_sid(ADMINISTRATORS_SID); + match admin_sid_result { + Ok(admin_sid) => { + acl.allow(admin_sid.as_ptr() as *mut _, true, FILE_ALL_ACCESS) + .map_err(|e| { + ServiceLocationError::LoadError(format!( + "Failed to add Administrators ACL: {e}" + )) + })?; + } + Err(e) => { + return Err(ServiceLocationError::LoadError(format!( + "Failed to convert Administrators SID: {e}" + ))); + } + } + + debug!("Successfully set secure ACLs on {path} for SYSTEM and Administrators"); + Ok(()) + } + Err(e) => { + error!("Failed to get ACL for {path}: {e}"); + Err(ServiceLocationError::LoadError(format!( + "Failed to get ACL for {path}: {e}" + ))) + } + } +} + +fn get_instance_file_path(instance_id: &str) -> Result { + let mut path = get_shared_directory()?; + path.push(format!("{instance_id}.json")); + Ok(path) +} + +pub(crate) fn is_user_logged_in() -> bool { + debug!("Starting checking if user is logged in..."); + + unsafe { + let mut pp_sessions: *mut WTS_SESSION_INFOA = std::ptr::null_mut(); + let mut count: u32 = 0; + + debug!("Calling WTSEnumerateSessionsA..."); + let ret = RemoteDesktop::WTSEnumerateSessionsA(None, 0, 1, &mut pp_sessions, &mut count); + + match ret { + Ok(_) => { + debug!("WTSEnumerateSessionsA succeeded, found {count} sessions"); + let sessions = std::slice::from_raw_parts(pp_sessions, count as usize); + + for (index, session) in sessions.iter().enumerate() { + debug!( + "Session {index}: SessionId={}, State={:?}, WinStationName={:?}", + session.SessionId, + session.State, + std::ffi::CStr::from_ptr(session.pWinStationName.0 as *const i8) + .to_string_lossy() + ); + + if session.State == windows::Win32::System::RemoteDesktop::WTSActive { + let mut buffer = PSTR::null(); + let mut bytes_returned: u32 = 0; + + let result = WTSQuerySessionInformationA( + None, + session.SessionId, + windows::Win32::System::RemoteDesktop::WTSUserName, + &mut buffer, + &mut bytes_returned, + ); + + match result { + Ok(_) => { + if !buffer.is_null() { + let username = std::ffi::CStr::from_ptr(buffer.0 as *const i8) + .to_string_lossy() + .into_owned(); + + debug!( + "Found session {} username: {username}", + session.SessionId + ); + + windows::Win32::System::RemoteDesktop::WTSFreeMemory( + buffer.0 as *mut _, + ); + + // We found an active session with a username. + // Free the session list before returning to avoid a leak. + windows::Win32::System::RemoteDesktop::WTSFreeMemory( + pp_sessions as _, + ); + return true; + } + } + Err(err) => { + debug!( + "Failed to get username for session {}: {err:?}", + session.SessionId + ); + } + } + } + } + windows::Win32::System::RemoteDesktop::WTSFreeMemory(pp_sessions as _); + debug!("No active sessions found"); + } + Err(err) => { + error!("Failed to enumerate user sessions: {err:?}"); + debug!("WTSEnumerateSessionsA failed: {err:?}"); + } + } + } + + debug!("User is not logged in."); + false +} + +impl ServiceLocationManager { + pub fn init() -> Result { + debug!("Initializing ServiceLocationApi"); + let path = get_shared_directory()?; + + debug!("Creating directory: {path:?}"); + create_dir_all(&path)?; + + if let Some(path_str) = path.to_str() { + debug!("Setting ACLs on service locations directory"); + if let Err(e) = set_protected_acls(path_str) { + warn!("Failed to set ACLs on service locations directory: {e}. Continuing anyway."); + } + } else { + warn!("Failed to convert path to string for ACL setting"); + } + + let manager = Self { + wgapis: HashMap::new(), + connected_service_locations: HashMap::new(), + }; + + debug!("ServiceLocationApi initialized successfully"); + Ok(manager) + } + + /// Check if a specific service location is already connected + fn is_service_location_connected(&self, instance_id: &str, location_pubkey: &str) -> bool { + if let Some(locations) = self.connected_service_locations.get(instance_id) { + for location in locations { + if location.pubkey == location_pubkey { + return true; + } + } + } + false + } + + /// Add a connected service location + fn add_connected_service_location( + &mut self, + instance_id: &str, + location: &ServiceLocation, + ) -> Result<(), ServiceLocationError> { + self.connected_service_locations + .entry(instance_id.to_string()) + .or_default() + .push(location.clone()); + + debug!( + "Added connected service location for instance '{instance_id}', location '{}'", + location.name + ); + Ok(()) + } + + /// Remove connected service locations by filter (write disk-first, then memory) + fn remove_connected_service_locations( + &mut self, + filter: F, + ) -> Result<(), ServiceLocationError> + where + F: Fn(&str, &ServiceLocation) -> bool, + { + // Iterate through connected_service_locations and remove matching locations + let mut instances_to_remove = Vec::new(); + + for (instance_id, locations) in self.connected_service_locations.iter_mut() { + locations.retain(|location| !filter(instance_id, location)); + + // Mark instance for removal if it has no more locations + if locations.is_empty() { + instances_to_remove.push(instance_id.clone()); + } + } + + // Remove instances with no locations + for instance_id in instances_to_remove { + self.connected_service_locations.remove(&instance_id); + } + + debug!("Removed connected service locations matching filter"); + Ok(()) + } + + // Resets the state of the service location: + // 1. If it's an always on location, disconnects and reconnects it. + // 2. Otherwise, just disconnects it if the user is not logged in. + pub fn reset_service_location_state( + &mut self, + instance_id: &str, + location_pubkey: &str, + ) -> Result<(), ServiceLocationError> { + debug!( + "Reseting the state of service location for instance_id: {instance_id}, \ + location_pubkey: {location_pubkey}" + ); + + let service_location_data = self + .load_service_location(instance_id, location_pubkey)? + .ok_or_else(|| { + ServiceLocationError::LoadError(format!( + "Service location with pubkey {} for instance {} not found", + location_pubkey, instance_id + )) + })?; + + debug!( + "Disconnecting service location for instance_id: {instance_id}, location_pubkey: \ + {location_pubkey} ({})", + service_location_data.service_location.name + ); + + self.disconnect_service_location(instance_id, location_pubkey)?; + + debug!( + "Disconnected service location for instance_id: {instance_id}, \ + location_pubkey: {location_pubkey} ({})", + service_location_data.service_location.name + ); + + debug!( + "Reconnecting service location if needed for instance_id: {instance_id}, \ + location_pubkey: {location_pubkey} ({})", + service_location_data.service_location.name + ); + + // We should reconnect only if: + // 1. It's an always on location + // 2. It's a pre-logon location and the user is not logged in + if service_location_data.service_location.mode == ServiceLocationMode::AlwaysOn as i32 + || (service_location_data.service_location.mode == ServiceLocationMode::PreLogon as i32 + && !is_user_logged_in()) + { + debug!( + "Reconnecting service location for instance_id: {instance_id}, location_pubkey: \ + {location_pubkey} ({})", + service_location_data.service_location.name + ); + self.connect_to_service_location(&service_location_data)?; + } + + debug!("Service location state reset completed."); + + Ok(()) + } + + pub fn disconnect_service_locations_by_instance( + &mut self, + instance_id: &str, + ) -> Result<(), ServiceLocationError> { + debug!("Disconnecting all service locations for instance_id: {instance_id}"); + + if let Some(locations) = self.connected_service_locations.get(instance_id) { + // Collect locations to disconnect to avoid borrowing issues + let locations_to_disconnect = locations.to_vec(); + + for location in locations_to_disconnect { + let ifname = get_interface_name(&location.name); + debug!("Tearing down interface: {ifname}"); + if let Some(mut wgapi) = self.wgapis.remove(&ifname) { + if let Err(err) = wgapi.remove_interface() { + error!("Failed to remove interface {ifname}: {err}"); + } else { + debug!("Interface {ifname} removed successfully"); + } + debug!( + "Removing connected service location for instance_id: {instance_id}, \ + location_pubkey: {}", + location.pubkey + ); + debug!( + "Disconnected service location for instance_id: {instance_id}, \ + location_pubkey: {}", + location.pubkey + ); + } else { + error!("Failed to find WireGuard API for interface {ifname}"); + } + } + + self.connected_service_locations.remove(instance_id); + } else { + debug!( + "No connected service locations found for instance_id: {instance_id}. Skipping disconnect" + ); + return Ok(()); + } + + debug!("Disconnected all service locations for instance_id: {instance_id}"); + + Ok(()) + } + + pub(crate) fn disconnect_service_location( + &mut self, + instance_id: &str, + location_pubkey: &str, + ) -> Result<(), ServiceLocationError> { + debug!( + "Disconnecting service location for instance_id: {instance_id}, location_pubkey: \ + {location_pubkey}" + ); + + if let Some(locations) = self.connected_service_locations.get_mut(instance_id) { + if let Some(pos) = locations + .iter() + .position(|loc| loc.pubkey == location_pubkey) + { + let location = locations.remove(pos); + let ifname = get_interface_name(&location.name); + debug!("Tearing down interface: {ifname}"); + if let Some(mut wgapi) = self.wgapis.remove(&ifname) { + if let Err(err) = wgapi.remove_interface() { + error!("Failed to remove interface {ifname}: {err}"); + } else { + debug!("Interface {ifname} removed successfully."); + } + } else { + error!("Failed to find WireGuard API for interface {ifname}. "); + } + } else { + debug!( + "Service location with pubkey {location_pubkey} for instance {instance_id} is \ + not connected, skipping disconnect" + ); + return Ok(()); + } + } else { + debug!( + "No connected service locations found for instance_id: {instance_id}, skipping \ + disconnect" + ); + return Ok(()); + } + + debug!( + "Disconnected service location for instance_id: {instance_id}, location_pubkey: \ + {location_pubkey}" + ); + + Ok(()) + } + + /// Helper function to setup a WireGuard interface for a service location + fn setup_service_location_interface( + &mut self, + location: &ServiceLocation, + private_key: &str, + ) -> Result<(), ServiceLocationError> { + let peer_key = Key::from_str(&location.pubkey)?; + + let mut peer = Peer::new(peer_key.clone()); + peer.set_endpoint(&location.endpoint)?; + + peer.persistent_keepalive_interval = location.keepalive_interval.try_into().ok(); + + let allowed_ips = location + .allowed_ips + .split(',') + .map(str::to_string) + .collect::>(); + + for allowed_ip in &allowed_ips { + match IpAddrMask::from_str(allowed_ip) { + Ok(addr) => { + peer.allowed_ips.push(addr); + } + Err(err) => { + error!( + "Error parsing IP address {allowed_ip} while setting up interface for \ + location {location:?}, error details: {err}" + ); + } + } + } + + let mut addresses = Vec::new(); + + for address in location.address.split(',') { + addresses.push(IpAddrMask::from_str(address.trim())?); + } + + let config = InterfaceConfiguration { + name: location.name.clone(), + prvkey: private_key.to_string(), + addresses, + port: find_free_tcp_port().unwrap_or(DEFAULT_WIREGUARD_PORT), + peers: vec![peer.clone()], + mtu: None, + fwmark: None, // TODO: add + }; + + let ifname = location.name.clone(); + let ifname = get_interface_name(&ifname); + let mut wgapi = match setup_wgapi(&ifname) { + Ok(api) => api, + Err(err) => { + let msg = format!("Failed to setup WireGuard API for interface {ifname}: {err:?}"); + debug!("{msg}"); + return Err(ServiceLocationError::InterfaceError(msg)); + } + }; + + wgapi.create_interface()?; + + // Extract DNS configuration if available + let dns_config = Some(location.dns.clone()); + let (dns, search_domains) = dns_borrow(&dns_config); + debug!( + "Configuring interface {ifname} with DNS: {dns:?} and search domains: \ + {search_domains:?}", + ); + debug!("Interface Configuration: {config:?}"); + + wgapi.configure_interface(&config)?; + wgapi.configure_dns(&dns, &search_domains)?; + + self.wgapis.insert(ifname.clone(), wgapi); + + debug!("Interface {ifname} configured successfully."); + Ok(()) + } + + pub(crate) fn connect_to_service_location( + &mut self, + location_data: &SingleServiceLocationData, + ) -> Result<(), ServiceLocationError> { + let instance_id = &location_data.instance_id; + let location_pubkey = &location_data.service_location.pubkey; + debug!( + "Connecting to service location for instance_id: {instance_id}, location_pubkey: \ + {location_pubkey}" + ); + + // Check if already connected to this service location + if self.is_service_location_connected(instance_id, location_pubkey) { + debug!( + "Service location with pubkey {location_pubkey} for instance {instance_id} is \ + already connected, skipping" + ); + return Ok(()); + } + + let location_data = self + .load_service_location(instance_id, location_pubkey)? + .ok_or_else(|| { + ServiceLocationError::LoadError(format!( + "Service location with pubkey {location_pubkey} for instance {instance_id} not \ + found", + )) + })?; + + self.setup_service_location_interface( + &location_data.service_location, + &location_data.private_key, + )?; + self.add_connected_service_location( + &location_data.instance_id, + &location_data.service_location, + )?; + let ifname = get_interface_name(&location_data.service_location.name); + debug!("Successfully connected to service location '{ifname}'"); + + Ok(()) + } + + pub(crate) fn disconnect_service_locations( + &mut self, + mode: Option, + ) -> Result<(), ServiceLocationError> { + debug!("Disconnecting service locations with mode: {mode:?}"); + + for (instance, locations) in &self.connected_service_locations { + for location in locations { + debug!( + "Found connected service location for instance_id: {instance}, \ + location_pubkey: {}", + location.pubkey + ); + if let Some(m) = mode { + let location_mode: ServiceLocationMode = location.mode.try_into()?; + if location_mode != m { + debug!( + "Skipping interface {} due to the service location mode doesn't match the \ + requested mode (expected {m:?}, found {:?})", + location.name, location.mode + ); + continue; + } + } + + let ifname = get_interface_name(&location.name); + debug!("Tearing down interface: {ifname}"); + if let Some(mut wgapi) = self.wgapis.remove(&ifname) { + if let Err(err) = wgapi.remove_interface() { + error!("Failed to remove interface {ifname}: {err}"); + } else { + debug!("Interface {ifname} removed successfully."); + } + } else { + error!("Failed to find WireGuard API for interface {ifname}"); + } + } + } + + self.remove_connected_service_locations(|_, location| { + if let Some(m) = mode { + let location_mode: ServiceLocationMode = location + .mode + .try_into() + .unwrap_or(ServiceLocationMode::AlwaysOn); + location_mode == m + } else { + true + } + })?; + + debug!("Service locations disconnected."); + + Ok(()) + } + + /// Attempts to connect to all service locations that are not already connected. + /// + /// Returns `Ok(true)` if every location is now connected (either it was already connected or + /// it was successfully connected during this call), and `Ok(false)` if at least one location + /// failed to connect (indicating that a retry may be worthwhile). + pub fn connect_to_service_locations(&mut self) -> Result { + debug!("Attempting to auto-connect to VPN..."); + + let data = self.load_service_locations()?; + debug!("Loaded {} instance(s) from ServiceLocationApi", data.len()); + + let mut all_connected = true; + + for instance_data in data { + debug!( + "Found service locations for instance ID: {}", + instance_data.instance_id + ); + debug!( + "Instance has {} service location(s)", + instance_data.service_locations.len() + ); + for location in instance_data.service_locations { + debug!("Service Location: {location:?}"); + + if location.mode == ServiceLocationMode::PreLogon as i32 { + if is_user_logged_in() { + debug!( + "Skipping pre-logon service location '{}' because user is logged in", + location.name + ); + continue; + } + debug!( + "Proceeding to connect pre-logon service location '{}' because no user \ + is logged in", + location.name + ); + } + + if self.is_service_location_connected(&instance_data.instance_id, &location.pubkey) + { + debug!( + "Skipping service location '{}' because it's already connected", + location.name + ); + continue; + } + + if let Err(err) = + self.setup_service_location_interface(&location, &instance_data.private_key) + { + warn!( + "Failed to setup service location interface for '{}': {err:?}", + location.name + ); + all_connected = false; + continue; + } + + if let Err(err) = + self.add_connected_service_location(&instance_data.instance_id, &location) + { + debug!( + "Failed to persist connected service location after auto-connect: {err:?}" + ); + } + + debug!( + "Successfully connected to service location '{}'", + location.name + ); + } + } + + debug!("Auto-connect attempt completed"); + + Ok(all_connected) + } + + pub fn save_service_locations( + &self, + service_locations: &[ServiceLocation], + instance_id: &str, + private_key: &str, + ) -> Result<(), ServiceLocationError> { + debug!( + "Received a request to save {} service location(s) for instance {instance_id}", + service_locations.len(), + ); + + debug!("Service locations to save: {service_locations:?}"); + + create_dir_all(get_shared_directory()?)?; + + let instance_file_path = get_instance_file_path(instance_id)?; + + let service_location_data = ServiceLocationData { + service_locations: service_locations.to_vec(), + instance_id: instance_id.to_string(), + private_key: private_key.to_string(), + }; + + let json = serde_json::to_string_pretty(&service_location_data)?; + + debug!( + "Writing service location data to file: {}", + instance_file_path.display() + ); + + fs::write(&instance_file_path, &json)?; + + if let Some(file_path_str) = instance_file_path.to_str() { + debug!("Setting ACLs on service location file: {file_path_str}"); + if let Err(err) = set_protected_acls(file_path_str) { + warn!( + "Failed to set ACLs on service location file {file_path_str}: {err}. \ + File saved but may have insecure permissions." + ); + } else { + debug!("Successfully set ACLs on service location file"); + } + } else { + warn!("Failed to convert file path to string for ACL setting"); + } + + debug!( + "Service locations saved successfully for instance {instance_id} to {}", + instance_file_path.display() + ); + Ok(()) + } + + fn load_service_locations(&self) -> Result, ServiceLocationError> { + let base_dir = get_shared_directory()?; + let mut all_locations_data = Vec::new(); + + if base_dir.exists() { + for entry in fs::read_dir(base_dir)? { + let entry = entry?; + let file_path = entry.path(); + + if file_path.is_file() && file_path.extension() == Some(OsStr::new("json")) { + match fs::read_to_string(&file_path) { + Ok(data) => match serde_json::from_str::(&data) { + Ok(locations_data) => { + all_locations_data.push(locations_data); + } + Err(err) => { + error!( + "Failed to parse service locations from file {}: {err}", + file_path.display() + ); + } + }, + Err(err) => { + error!( + "Failed to read service locations file {}: {err}", + file_path.display() + ); + } + } + } + } + } + + debug!( + "Loaded service locations data for {} instances", + all_locations_data.len() + ); + Ok(all_locations_data) + } + + fn load_service_location( + &self, + instance_id: &str, + location_pubkey: &str, + ) -> Result, ServiceLocationError> { + debug!("Loading service location for instance {instance_id} and pubkey {location_pubkey}"); + + let instance_file_path = get_instance_file_path(instance_id)?; + + if instance_file_path.exists() { + let data = fs::read_to_string(&instance_file_path)?; + let service_location_data = serde_json::from_str::(&data)?; + + for location in service_location_data.service_locations { + if location.pubkey == location_pubkey { + debug!( + "Successfully loaded service location for instance {instance_id} and \ + pubkey {location_pubkey}" + ); + return Ok(Some(SingleServiceLocationData { + service_location: location, + instance_id: service_location_data.instance_id, + private_key: service_location_data.private_key, + })); + } + } + + debug!( + "No service location found for instance {instance_id} with pubkey {location_pubkey}" + ); + Ok(None) + } else { + debug!("No service location file found for instance {instance_id}"); + Ok(None) + } + } + + pub fn delete_all_service_locations_for_instance( + &self, + instance_id: &str, + ) -> Result<(), ServiceLocationError> { + debug!("Deleting all service locations for instance {instance_id}"); + + let instance_file_path = get_instance_file_path(instance_id)?; + + if instance_file_path.exists() { + fs::remove_file(&instance_file_path)?; + debug!("Successfully deleted all service locations for instance {instance_id}"); + } else { + debug!("No service location file found for instance {instance_id}"); + } + + Ok(()) + } +} diff --git a/src-tauri/src/apple.rs b/src-tauri/src/apple.rs index b388e6f26..0ddfc17ad 100644 --- a/src-tauri/src/apple.rs +++ b/src-tauri/src/apple.rs @@ -3,28 +3,27 @@ use std::{ collections::HashMap, hint::spin_loop, - net::IpAddr, ptr::NonNull, - str::FromStr, sync::{ atomic::{AtomicBool, Ordering}, - mpsc::{self, channel, Receiver, RecvTimeoutError, Sender}, + mpsc::{self, Receiver, RecvTimeoutError, Sender}, Arc, LazyLock, Mutex, }, time::Duration, }; use block2::RcBlock; -use common::dns_owned; -use defguard_wireguard_rs::{key::Key, net::IpAddrMask, peer::Peer}; -use objc2::{ - rc::Retained, - runtime::{AnyObject, ProtocolObject}, +use defguard_client_core::{ + connection::active_connections::find_connection, + database::models::tunnel_configuration::{ + id_from_manager, manager_for_key_and_value, LOCATION_ID, OBSERVER_COMMS, PLUGIN_BUNDLE_ID, + TUNNEL_ID, + }, }; +use objc2::{rc::Retained, runtime::ProtocolObject}; use objc2_foundation::{ - ns_string, NSArray, NSData, NSDate, NSDictionary, NSError, NSMutableArray, NSMutableDictionary, - NSNotification, NSNotificationCenter, NSNumber, NSObjectProtocol, NSOperationQueue, NSRunLoop, - NSString, + ns_string, NSArray, NSData, NSDate, NSError, NSNotification, NSNotificationCenter, + NSObjectProtocol, NSOperationQueue, NSRunLoop, NSString, }; use objc2_network_extension::{ NETunnelProviderManager, NETunnelProviderProtocol, NETunnelProviderSession, NEVPNConnection, @@ -35,38 +34,18 @@ use tauri::{AppHandle, Emitter, Manager}; use tracing::Level; use crate::{ - active_connections::find_connection, appstate::AppState, database::{ - models::{ - instance::{ClientTrafficPolicy, Instance}, - location::Location, - tunnel::Tunnel, - wireguard_keys::WireguardKeys, - Id, - }, + models::{location::Location, tunnel::Tunnel, Id}, DB_POOL, }, - error::Error, events::EventKey, log_watcher::service_log_watcher::spawn_log_watcher_task, tray::{configure_tray_icon, reload_tray_menu, show_main_window}, - utils::{DEFAULT_ROUTE_IPV4, DEFAULT_ROUTE_IPV6}, ConnectionType, }; -const PLUGIN_BUNDLE_ID: &str = "net.defguard.VPNExtension"; const SYSTEM_SYNC_DELAY: Duration = Duration::from_millis(500); -const LOCATION_ID: &str = "locationId"; -const TUNNEL_ID: &str = "tunnelId"; - -type ObserverSender = Mutex>; -type ObserverReceiver = Mutex>>; - -static OBSERVER_COMMS: LazyLock<(ObserverSender, ObserverReceiver)> = LazyLock::new(|| { - let (tx, rx) = mpsc::channel(); - (Mutex::new(tx), Mutex::new(Some(rx))) -}); type VpnStateSender = Mutex>; type VpnStateReceiver = Mutex>>; @@ -469,285 +448,6 @@ pub fn get_managers_for_tunnels_and_locations( managers } -/// Try to get `Id` out of manager. ID is embedded in configuration dictionary under `key`. -fn id_from_manager(manager: &NETunnelProviderManager, key: &NSString) -> Option { - let plugin_bundle_id = ns_string!(PLUGIN_BUNDLE_ID); - - let vpn_protocol = (unsafe { manager.protocolConfiguration() })?; - let Ok(tunnel_protocol) = vpn_protocol.downcast::() else { - error!("Failed to downcast to NETunnelProviderProtocol"); - return None; - }; - // Sometimes all managers from all apps come through, so filter by bundle ID. - if let Some(bundle_id) = unsafe { tunnel_protocol.providerBundleIdentifier() } { - if &*bundle_id != plugin_bundle_id { - return None; - } - } - - if let Some(config_dict) = unsafe { tunnel_protocol.providerConfiguration() } { - if let Some(any_object) = config_dict.objectForKey(key) { - let Ok(id) = any_object.downcast::() else { - warn!("Failed to downcast ID to NSNumber"); - return None; - }; - return Some(id.as_i64()); - } - } - - None -} - -/// Try to find [`NETunnelProviderManager`] in system settings that matches key and value. -/// Key is usually `locationId` or `tunnelId`. -fn manager_for_key_and_value(key: &str, value: Id) -> Option> { - let key_string = NSString::from_str(key); - let (tx, rx) = channel(); - - let handler = RcBlock::new( - move |managers_ptr: *mut NSArray, error_ptr: *mut NSError| { - if !error_ptr.is_null() { - error!("Failed to load tunnel provider managers."); - return; - } - - let Some(managers) = (unsafe { managers_ptr.as_ref() }) else { - error!("No managers"); - return; - }; - - for manager in managers { - if let Some(id) = id_from_manager(&manager, &key_string) { - if id == value { - // This is the manager we were looking for. - tx.send(Some(manager)).expect("Sender is dead"); - return; - } - } - } - - tx.send(None).expect("Sender is dead"); - }, - ); - unsafe { - NETunnelProviderManager::loadAllFromPreferencesWithCompletionHandler(&handler); - } - - rx.recv().expect("Receiver is dead") -} - -/// Tunnel configuration shared with VPNExtension (written in Swift). -pub(crate) struct TunnelConfiguration { - location_id: Option, - tunnel_id: Option, - name: String, - private_key: String, - addresses: Vec, - listen_port: Option, - peers: Vec, - mtu: Option, - dns: Vec, - dns_search: Vec, -} - -impl TunnelConfiguration { - /// Convert to [`NSDictionary`]. - fn as_nsdict(&self) -> Retained> { - let dict = NSMutableDictionary::new(); - - if let Some(location_id) = self.location_id { - dict.insert( - ns_string!(LOCATION_ID), - NSNumber::new_i64(location_id).as_ref(), - ); - } - - if let Some(tunnel_id) = self.tunnel_id { - dict.insert(ns_string!(TUNNEL_ID), NSNumber::new_i64(tunnel_id).as_ref()); - } - - dict.insert(ns_string!("name"), NSString::from_str(&self.name).as_ref()); - - dict.insert( - ns_string!("privateKey"), - NSString::from_str(&self.private_key).as_ref(), - ); - - // IpAddrMask - let addresses = NSMutableArray::>::new(); - for addr in &self.addresses { - let addr_dict = NSMutableDictionary::::new(); - addr_dict.insert( - ns_string!("address"), - NSString::from_str(&addr.address.to_string()).as_ref(), - ); - addr_dict.insert(ns_string!("cidr"), NSNumber::new_u8(addr.cidr).as_ref()); - addresses.addObject(addr_dict.into_super().as_ref()); - } - dict.insert(ns_string!("addresses"), addresses.as_ref()); - - if let Some(listen_port) = self.listen_port { - dict.insert( - ns_string!("listenPort"), - NSNumber::new_u16(listen_port).as_ref(), - ); - } - - // Peer - let peers = NSMutableArray::>::new(); - for peer in &self.peers { - let peer_dict = NSMutableDictionary::::new(); - peer_dict.insert( - ns_string!("publicKey"), - NSString::from_str(&peer.public_key.to_string()).as_ref(), - ); - - if let Some(preshared_key) = &peer.preshared_key { - peer_dict.insert( - ns_string!("preSharedKey"), - NSString::from_str(&preshared_key.to_string()).as_ref(), - ); - } - - if let Some(endpoint) = &peer.endpoint { - peer_dict.insert( - ns_string!("endpoint"), - NSString::from_str(&endpoint.to_string()).as_ref(), - ); - } - - // Skipping: lastHandshake, txBytes, rxBytes. - - if let Some(persistent_keep_alive) = peer.persistent_keepalive_interval { - peer_dict.insert( - ns_string!("persistentKeepAlive"), - NSNumber::new_u16(persistent_keep_alive).as_ref(), - ); - } - - // IpAddrMask - let allowed_ips = NSMutableArray::>::new(); - for addr in &peer.allowed_ips { - let addr_dict = NSMutableDictionary::::new(); - addr_dict.insert( - ns_string!("address"), - NSString::from_str(&addr.address.to_string()).as_ref(), - ); - addr_dict.insert(ns_string!("cidr"), NSNumber::new_u8(addr.cidr).as_ref()); - allowed_ips.addObject(addr_dict.into_super().as_ref()); - } - peer_dict.insert(ns_string!("allowedIPs"), allowed_ips.as_ref()); - - peers.addObject(peer_dict.into_super().as_ref()); - } - dict.insert(ns_string!("peers"), peers.into_super().as_ref()); - - if let Some(mtu) = self.mtu { - dict.insert(ns_string!("mtu"), NSNumber::new_u32(mtu).as_ref()); - } - - let dns = NSMutableArray::::new(); - for entry in &self.dns { - dns.addObject(NSString::from_str(&entry.to_string()).as_ref()); - } - dict.insert(ns_string!("dns"), dns.as_ref()); - - let dns_search = NSMutableArray::::new(); - for entry in &self.dns_search { - dns_search.addObject(NSString::from_str(entry).as_ref()); - } - dict.insert(ns_string!("dnsSearch"), dns_search.as_ref()); - - dict.into_super() - } - - /// Try to find `NETunnelProviderManager` for this configuration, based on location ID or - /// tunnel ID. - pub(crate) fn tunnel_provider_manager(&self) -> Option> { - let (key, value) = match (self.location_id, self.tunnel_id) { - (Some(location_id), None) => (LOCATION_ID, location_id), - (None, Some(tunnel_id)) => (TUNNEL_ID, tunnel_id), - _ => return None, - }; - - manager_for_key_and_value(key, value) - } - - /// Create or update system VPN settings with this configuration. - pub(crate) fn save(&self) { - let spinlock = Arc::new(AtomicBool::new(false)); - let spinlock_clone = Arc::clone(&spinlock); - let plugin_bundle_id = ns_string!(PLUGIN_BUNDLE_ID); - - let provider_manager = self - .tunnel_provider_manager() - .unwrap_or_else(|| unsafe { NETunnelProviderManager::new() }); - - unsafe { - let tunnel_protocol = NETunnelProviderProtocol::new(); - tunnel_protocol.setProviderBundleIdentifier(Some(plugin_bundle_id)); - let server_address = self.peers.first().map_or(String::new(), |peer| { - peer.endpoint.map_or(String::new(), |sa| sa.to_string()) - }); - let server_address = NSString::from_str(&server_address); - // `serverAddress` must have a non-nil string value for the protocol configuration to be - // valid. - tunnel_protocol.setServerAddress(Some(&server_address)); - - let provider_config = self.as_nsdict(); - tunnel_protocol.setProviderConfiguration(Some(&*provider_config)); - - provider_manager.setProtocolConfiguration(Some(&tunnel_protocol)); - let name = NSString::from_str(&self.name); - provider_manager.setLocalizedDescription(Some(&name)); - provider_manager.setEnabled(true); - - // Save to system settings. - let handler = RcBlock::new(move |error_ptr: *mut NSError| { - if error_ptr.is_null() { - debug!("Saved tunnel configuration for {name} to system settings"); - } else { - error!("Failed to save tunnel configuration for: {name} to system settings"); - } - spinlock_clone.store(true, Ordering::Release); - }); - provider_manager.saveToPreferencesWithCompletionHandler(Some(&*handler)); - } - - while !spinlock.load(Ordering::Acquire) { - spin_loop(); - } - } - - /// Start tunnel for this configuration. - pub(crate) fn start_tunnel(&self) { - if let Some(provider_manager) = self.tunnel_provider_manager() { - if let Err(err) = - unsafe { provider_manager.connection().startVPNTunnelAndReturnError() } - { - error!("Failed to start VPN: {err}"); - } else { - OBSERVER_COMMS - .0 - .lock() - .expect("Failed to lock observer sender") - .send(( - self.location_id - .map_or_else(|| TUNNEL_ID, |_location_id| LOCATION_ID), - self.location_id.or(self.tunnel_id).unwrap(), - )) - .expect("Failed to send to observer channel"); - info!("VPN started"); - } - } else { - debug!( - "Couldn't find configuration from system settings for {}", - self.name - ); - } - } -} - /// Retrieve VPN tunnel statistics from VPNExtension. pub(crate) fn tunnel_stats(id: Id, connection_type: &ConnectionType) -> Option { let new_stats = Arc::new(Mutex::new(None)); @@ -830,7 +530,7 @@ pub async fn sync_locations_and_tunnels(mtu: Option) -> Result<(), sqlx::Er let all_locations = Location::all(&*DB_POOL, false).await?; for location in &all_locations { // For syncing, set `preshred_key` to `None`. - let Ok(tunnel_config) = location.tunnel_configurarion(None, mtu).await else { + let Ok(tunnel_config) = location.tunnel_configuration(None, mtu).await else { error!( "Failed to convert location {} to tunnel configuration.", location.name @@ -843,7 +543,7 @@ pub async fn sync_locations_and_tunnels(mtu: Option) -> Result<(), sqlx::Er // Update tunnel settings. let all_tunnels = Tunnel::all(&*DB_POOL).await?; for tunnel in &all_tunnels { - let Ok(tunnel_config) = tunnel.tunnel_configurarion(mtu) else { + let Ok(tunnel_config) = tunnel.tunnel_configuration(mtu) else { error!( "Failed to convert tunnel {} to tunnel configuration.", tunnel.name @@ -915,293 +615,3 @@ pub async fn sync_locations_and_tunnels(mtu: Option) -> Result<(), sqlx::Er Ok(()) } - -impl Location { - /// Build [`TunnelConfiguration`] from [`Location`]. - pub(crate) async fn tunnel_configurarion( - &self, - preshared_key: Option, - mtu: Option, - ) -> Result { - debug!("Looking for WireGuard keys for location {self} instance"); - let Some(keys) = WireguardKeys::find_by_instance_id(&*DB_POOL, self.instance_id).await? - else { - error!("No keys found for instance: {}", self.instance_id); - return Err(Error::InternalError( - "No keys found for instance".to_string(), - )); - }; - debug!("WireGuard keys found for location {self} instance"); - - // prepare peer config - debug!("Decoding location {self} public key: {}.", self.pubkey); - let peer_key = Key::from_str(&self.pubkey)?; - debug!("Location {self} public key decoded: {peer_key}"); - let mut peer = Peer::new(peer_key); - - debug!("Parsing location {self} endpoint: {}", self.endpoint); - peer.set_endpoint(&self.endpoint)?; - peer.persistent_keepalive_interval = Some(25); - debug!("Parsed location {self} endpoint: {}", self.endpoint); - - if let Some(psk) = preshared_key { - debug!("Decoding location {self} preshared key."); - let peer_psk = Key::from_str(&psk)?; - info!("Location {self} preshared key decoded."); - peer.preshared_key = Some(peer_psk); - } - - debug!("Parsing location {self} allowed IPs: {}", self.allowed_ips); - let Some(instance) = Instance::find_by_id(&*DB_POOL, self.instance_id).await? else { - error!("Instance {} not found", self.instance_id); - return Err(Error::InternalError(format!( - "Instance {} not found", - self.instance_id - ))); - }; - let route_all_traffic = match instance.client_traffic_policy { - ClientTrafficPolicy::ForceAllTraffic => true, - ClientTrafficPolicy::DisableAllTraffic => false, - ClientTrafficPolicy::None => self.route_all_traffic, - }; - let allowed_ips = if route_all_traffic { - debug!("Using all traffic routing for location {self}"); - vec![DEFAULT_ROUTE_IPV4.into(), DEFAULT_ROUTE_IPV6.into()] - } else { - debug!( - "Using predefined location {self} traffic: {}", - self.allowed_ips - ); - self.allowed_ips.split(',').map(str::to_string).collect() - }; - for allowed_ip in &allowed_ips { - match IpAddrMask::from_str(allowed_ip) { - Ok(addr) => { - peer.allowed_ips.push(addr); - } - Err(err) => { - // Handle the error from IpAddrMask::from_str, if needed - error!( - "Error parsing IP address {allowed_ip} while setting up interface for \ - location {self}, error details: {err}" - ); - } - } - } - debug!( - "Parsed allowed IPs for location {self}: {:?}", - peer.allowed_ips - ); - - let addresses = self - .address - .split(',') - .map(str::trim) - .map(IpAddrMask::from_str) - .collect::>() - .map_err(|err| { - let msg = format!("Failed to parse IP addresses '{}': {err}", self.address); - error!("{msg}"); - Error::InternalError(msg) - })?; - let (dns, dns_search) = dns_owned(&self.dns); - Ok(TunnelConfiguration { - location_id: Some(self.id), - tunnel_id: None, - name: self.name.clone(), - private_key: keys.prvkey, - addresses, - listen_port: Some(0), - peers: vec![peer], - mtu, - dns, - dns_search, - }) - } - - /// Check whether VPN tunnel is running for [`Location`]. - pub(crate) fn status(&self) -> Option { - manager_for_key_and_value(LOCATION_ID, self.id).map_or_else( - || { - debug!( - "Couldn't find configuration in system settings for location {}", - self.name - ); - None - }, - |provider_manager| unsafe { - let connection = provider_manager.connection(); - Some(connection.status()) - }, - ) - } - - /// Remove configuration from system settings for [`Location`]. - pub(crate) fn remove_config(&self) { - if let Some(provider_manager) = manager_for_key_and_value(LOCATION_ID, self.id) { - unsafe { - provider_manager.removeFromPreferencesWithCompletionHandler(None); - } - } else { - debug!( - "Couldn't find configuration in system settings for location {}", - self.name - ); - } - } - - /// Stop VPN tunnel for [`Location`]. - pub(crate) fn stop_vpn_tunnel(&self) -> bool { - manager_for_key_and_value(LOCATION_ID, self.id).map_or_else( - || { - debug!( - "Couldn't find configuration in system settings for location {}", - self.name - ); - false - }, - |provider_manager| { - unsafe { - provider_manager.connection().stopVPNTunnel(); - } - info!("VPN stopped"); - true - }, - ) - } -} - -impl Tunnel { - /// Build [`TunnelConfiguration`] from [`Tunnel`]. - pub(crate) fn tunnel_configurarion( - &self, - mtu: Option, - ) -> Result { - // prepare peer config - debug!("Decoding tunnel {self} public key: {}.", self.server_pubkey); - let peer_key = Key::from_str(&self.server_pubkey)?; - debug!("Tunnel {self} public key decoded."); - let mut peer = Peer::new(peer_key); - - debug!("Parsing tunnel {self} endpoint: {}", self.endpoint); - peer.set_endpoint(&self.endpoint)?; - peer.persistent_keepalive_interval = Some( - self.persistent_keep_alive - .try_into() - .expect("Failed to parse persistent keep alive"), - ); - debug!("Parsed tunnel {self} endpoint: {}", self.endpoint); - - if let Some(psk) = &self.preshared_key { - debug!("Decoding tunnel {self} preshared key."); - let peer_psk = Key::from_str(psk)?; - debug!("Preshared key for tunnel {self} decoded."); - peer.preshared_key = Some(peer_psk); - } - - debug!("Parsing tunnel {self} allowed ips: {:?}", self.allowed_ips); - let allowed_ips = if self.route_all_traffic { - debug!("Using all traffic routing for tunnel {self}"); - vec![DEFAULT_ROUTE_IPV4.into(), DEFAULT_ROUTE_IPV6.into()] - } else { - let msg = self.allowed_ips.as_ref().map_or_else( - || "No allowed IP addresses found in tunnel {self} configuration".to_string(), - |ips| format!("Using predefined location traffic for tunnel {self}: {ips}"), - ); - debug!("{msg}"); - self.allowed_ips - .as_ref() - .map(|ips| ips.split(',').map(str::to_string).collect()) - .unwrap_or_default() - }; - for allowed_ip in &allowed_ips { - match IpAddrMask::from_str(allowed_ip.trim()) { - Ok(addr) => { - peer.allowed_ips.push(addr); - } - Err(err) => { - // Handle the error from IpAddrMask::from_str, if needed - error!("Error parsing IP address {allowed_ip}: {err}"); - // Continue to the next iteration of the loop - } - } - } - debug!("Parsed tunnel {self} allowed IPs: {:?}", peer.allowed_ips); - - let addresses = self - .address - .split(',') - .map(str::trim) - .map(IpAddrMask::from_str) - .collect::>() - .map_err(|err| { - let msg = format!("Failed to parse IP addresses '{}': {err}", self.address); - error!("{msg}"); - Error::InternalError(msg) - })?; - let (dns, dns_search) = dns_owned(&self.dns); - Ok(TunnelConfiguration { - location_id: None, - tunnel_id: Some(self.id), - name: self.name.clone(), - private_key: self.prvkey.clone(), - addresses, - listen_port: Some(0), - peers: vec![peer], - mtu, - dns, - dns_search, - }) - } - - /// Check whether VPN tunnel is running for [`Tunnel`]. - pub(crate) fn status(&self) -> Option { - manager_for_key_and_value(TUNNEL_ID, self.id).map_or_else( - || { - debug!( - "Couldn't find configuration in system settings for tunnel {}", - self.name - ); - None - }, - |provider_manager| unsafe { - let connection = provider_manager.connection(); - Some(connection.status()) - }, - ) - } - - /// Remove configuration from system settings for [`Tunnel`]. - pub(crate) fn remove_config(&self) { - if let Some(provider_manager) = manager_for_key_and_value(TUNNEL_ID, self.id) { - unsafe { - provider_manager.removeFromPreferencesWithCompletionHandler(None); - } - } else { - debug!( - "Couldn't find configuration in system settings for tunnel {}", - self.name - ); - } - } - - /// Stop tunnel for [`Tunnel`]. - pub(crate) fn stop_vpn_tunnel(&self) -> bool { - manager_for_key_and_value(TUNNEL_ID, self.id).map_or_else( - || { - debug!( - "Couldn't find configuration in system settings for location {}", - self.name - ); - false - }, - |provider_manager| { - unsafe { - provider_manager.connection().stopVPNTunnel(); - } - info!("VPN stopped"); - true - }, - ) - } -} diff --git a/src-tauri/src/appstate.rs b/src-tauri/src/appstate.rs index 02e6ae4d1..e9a98113d 100644 --- a/src-tauri/src/appstate.rs +++ b/src-tauri/src/appstate.rs @@ -7,13 +7,13 @@ use tauri::{ use tokio_util::sync::CancellationToken; use crate::{ - active_connections::ACTIVE_CONNECTIONS, app_config::AppConfig, database::models::{connection::ActiveConnection, Id}, enterprise::provisioning::ProvisioningConfig, utils::stats_handler, ConnectionType, }; +use defguard_client_core::connection::active_connections::ACTIVE_CONNECTIONS; pub struct AppState { pub log_watchers: Mutex>, diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 8925cd6f4..57f969b70 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -15,7 +15,6 @@ use defguard_client::set_perms; #[cfg(windows)] use defguard_client::utils::sync_connections; use defguard_client::{ - active_connections::close_all_connections, app_config::AppConfig, appstate::AppState, commands::*, @@ -33,6 +32,7 @@ use defguard_client::{ window_manager::*, LOG_FILENAME, VERSION, }; +use defguard_client_core::connection::active_connections::close_all_connections; use log::{Level, LevelFilter}; use tauri::{async_runtime, AppHandle, Builder, Manager, RunEvent, WindowEvent}; use tauri_plugin_deep_link::DeepLinkExt; @@ -305,7 +305,11 @@ fn main() { } // Prepare `AppConfig`. - let config = AppConfig::new(app_handle); + let config_dir = app_handle + .path() + .app_data_dir() + .expect("Failed to access app data"); + let config = AppConfig::new(&config_dir); // Setup logging. diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 9f5d24b85..316cc385f 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -1,20 +1,29 @@ use core::fmt; -use std::{ - collections::{HashMap, HashSet}, - env, - str::FromStr, -}; +use std::{collections::HashMap, env, str::FromStr}; -use chrono::{DateTime, Duration, NaiveDateTime, Utc}; +use chrono::{DateTime, Duration, Utc}; +use defguard_client_core::connection::active_connections::{ + find_connection, get_connection_id_by_type, ACTIVE_CONNECTIONS, +}; +#[cfg(not(target_os = "macos"))] +use defguard_client_core::connection::daemon_client::DAEMON_CLIENT; +use defguard_client_core::connection::disconnect_interface; +#[cfg(not(target_os = "macos"))] +use defguard_client_proto::defguard::client::v1::{ + DeleteServiceLocationsRequest, RemoveInterfaceRequest, SaveServiceLocationsRequest, +}; +use defguard_client_proto::defguard::{ + client_types::DeviceConfigResponse, enterprise::posture::v2::DevicePostureData, +}; use serde::{Deserialize, Serialize}; -use sqlx::{Sqlite, Transaction}; use struct_patch::Patch; use tauri::{AppHandle, Emitter, Manager, State}; const UPDATE_URL: &str = "https://pkgs.defguard.net/api/update/check"; +#[cfg(not(target_os = "macos"))] +use crate::utils::execute_command; use crate::{ - active_connections::{find_connection, get_connection_id_by_type, ACTIVE_CONNECTIONS}, app_config::{AppConfig, AppConfigPatch}, appstate::AppState, database::{ @@ -30,36 +39,27 @@ use crate::{ DB_POOL, }, enterprise::{ - self, periodic::config::poll_instance, posture::authorize_posture_session, + self, + periodic::config::{do_update_instance, poll_instance}, + posture::authorize_posture_session, provisioning::ProvisioningConfig, }, error::Error, events::EventKey, + into_location, log_watcher::{ global_log_watcher::{spawn_global_log_watcher_task, stop_global_log_watcher_task}, service_log_watcher::stop_log_watcher_task, }, - proto::defguard::client_types::DeviceConfigResponse, - service::proto::defguard::enterprise::posture::v2::DevicePostureData, + proxy::construct_platform_header, tray::{configure_tray_icon, reload_tray_menu}, utils::{ - construct_platform_header, disconnect_interface, get_location_interface_details, - get_tunnel_interface_details, get_tunnel_or_location_name, handle_connection_for_location, - handle_connection_for_tunnel, + get_location_interface_details, get_tunnel_interface_details, get_tunnel_or_location_name, + handle_connection_for_location, handle_connection_for_tunnel, }, wg_config::parse_wireguard_config, CommonConnection, CommonConnectionInfo, CommonLocationStats, ConnectionType, }; -#[cfg(not(target_os = "macos"))] -use crate::{ - service::{ - client::DAEMON_CLIENT, - proto::defguard::client::v1::{ - DeleteServiceLocationsRequest, RemoveInterfaceRequest, SaveServiceLocationsRequest, - }, - }, - utils::execute_command, -}; #[derive(Debug, Serialize, thiserror::Error)] #[serde(tag = "kind", content = "message", rename_all = "camelCase")] @@ -172,7 +172,9 @@ pub async fn disconnect( "Emitting the event informing the frontend about the disconnection from \ {connection_type} {name}({location_id})" ); - handle.emit(EventKey::ConnectionChanged.into(), ())?; + handle + .emit(EventKey::ConnectionChanged.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; debug!("Event emitted successfully"); stop_log_watcher_task(&handle, &connection.interface_name)?; reload_tray_menu(&handle).await; @@ -282,7 +284,9 @@ pub async fn disconnect_locations(location_ids: Vec, handle: AppHandle) -> R } if any_disconnected { - handle.emit(EventKey::ConnectionChanged.into(), ())?; + handle + .emit(EventKey::ConnectionChanged.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; reload_tray_menu(&handle).await; configure_tray_icon(&handle).await?; } @@ -308,7 +312,9 @@ async fn maybe_update_instance_config(location_id: Id, handle: &AppHandle) -> Re }; poll_instance(&mut transaction, &mut instance, handle).await?; transaction.commit().await?; - handle.emit(EventKey::InstanceUpdate.into(), ())?; + handle + .emit(EventKey::InstanceUpdate.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; Ok(()) } @@ -380,7 +386,7 @@ pub async fn save_device_config( keys.pubkey, instance.name, instance.id ); for dev_config in response.configs { - let new_location = dev_config.into_location(instance.id); + let new_location = into_location(dev_config, instance.id); debug!( "Saving location {} for instance {}({})", new_location.name, instance.name, instance.id @@ -397,7 +403,9 @@ pub async fn save_device_config( let locations = push_service_locations(&instance, keys).await?; - handle.emit(EventKey::InstanceUpdate.into(), ())?; + handle + .emit(EventKey::InstanceUpdate.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; let res = SaveDeviceConfigResponse { locations, instance, @@ -433,7 +441,9 @@ async fn push_service_locations( "Adding service location {}({}) for instance {}({}) to be saved to the daemon.", saved_location.name, saved_location.id, instance.name, instance.id, ); - service_locations.push(saved_location.to_service_location()?); + service_locations.push(crate::enterprise::service_locations::to_service_location( + saved_location, + )?); } } @@ -653,7 +663,9 @@ pub async fn update_instance( do_update_instance(&mut transaction, &mut instance, response).await?; transaction.commit().await?; - app_handle.emit(EventKey::InstanceUpdate.into(), ())?; + app_handle + .emit(EventKey::InstanceUpdate.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; reload_tray_menu(&app_handle).await; Ok(()) } else { @@ -662,237 +674,6 @@ pub async fn update_instance( } } -/// Returns true if configuration in instance_info differs from current configuration -pub(crate) async fn locations_changed( - transaction: &mut Transaction<'_, Sqlite>, - instance: &Instance, - device_config: &DeviceConfigResponse, -) -> Result { - let db_locations = Location::find_by_instance_id(transaction.as_mut(), instance.id, true) - .await? - .into_iter() - .map(|location| { - let mut new_location = Location::::from(location); - // Ignore `route_all_traffic` flag as Defguard core does not have it. - new_location.route_all_traffic = false; - // Canonicalize mfa_method so a user-set value doesn't falsely trigger a - // config-change detection when the mode hasn't actually changed. - new_location.mfa_method = infer_mfa_method(new_location.location_mfa_mode, None); - new_location - }) - .collect::>(); - let core_locations: HashSet = device_config - .configs - .iter() - .map(|config| config.clone().into_location(instance.id)) - .collect::>(); - - Ok(db_locations != core_locations) -} - -pub(crate) async fn do_update_instance( - transaction: &mut Transaction<'_, Sqlite>, - instance: &mut Instance, - response: DeviceConfigResponse, -) -> Result<(), Error> { - // update instance - debug!("Updating instance {instance}"); - let locations_changed = locations_changed(transaction, instance, &response).await?; - let instance_info = response - .instance - .expect("Missing instance info in device config response"); - instance.name = instance_info.name; - instance.url = instance_info.url; - instance.proxy_url = instance_info.proxy_url; - instance.username = instance_info.username; - // Make sure to update the locations too if we are disabling all traffic - let policy = instance_info.client_traffic_policy.into(); - if instance.client_traffic_policy != policy && policy == ClientTrafficPolicy::DisableAllTraffic - { - debug!("Disabling all traffic for all locations of instance {instance}"); - Location::disable_all_traffic_for_all(transaction.as_mut(), instance.id).await?; - debug!("Disabled all traffic for all locations of instance {instance}"); - } - instance.client_traffic_policy = instance_info.client_traffic_policy.into(); - instance.openid_display_name = instance_info.openid_display_name; - instance.uuid = instance_info.id; - // Token may be empty if it was not issued - // This happens during polling, as core doesn't issue a new token for polling request - if response.token.is_some() { - instance.token = response.token; - debug!("Set polling token for instance {}", instance.name); - } else { - debug!( - "No polling token received for instance {}, not updating", - instance.name - ); - } - instance.save(transaction.as_mut()).await?; - debug!( - "A new base configuration has been applied to instance {instance}, even if nothing changed" - ); - - let mut service_locations = Vec::new(); - - // check if locations have changed - if locations_changed { - // process locations received in response - debug!( - "Updating locations for instance {}({}).", - instance.name, instance.id - ); - // Fetch existing locations for a given instance. - let mut current_locations = - Location::find_by_instance_id(transaction.as_mut(), instance.id, true).await?; - for dev_config in response.configs { - // parse device config - let new_location = dev_config.into_location(instance.id); - - // check if location is already present in current locations - let saved_location = if let Some(position) = current_locations - .iter() - .position(|loc| loc.network_id == new_location.network_id) - { - // remove from list of existing locations - let mut current_location = current_locations.remove(position); - debug!( - "Updating existing location {}({}) for instance {}({}).", - current_location.name, current_location.id, instance.name, instance.id, - ); - // update existing location - current_location.name = new_location.name; - current_location.address = new_location.address; - current_location.pubkey = new_location.pubkey; - current_location.endpoint = new_location.endpoint; - current_location.allowed_ips = new_location.allowed_ips; - current_location.keepalive_interval = new_location.keepalive_interval; - current_location.dns = new_location.dns; - current_location.location_mfa_mode = new_location.location_mfa_mode; - current_location.service_location_mode = new_location.service_location_mode; - // Correct mfa_method to remain consistent with the (possibly updated) mfa_mode. - current_location.mfa_method = infer_mfa_method( - current_location.location_mfa_mode, - current_location.mfa_method, - ); - current_location.posture_check_required = new_location.posture_check_required; - current_location.save(transaction.as_mut()).await?; - info!("Location {current_location} configuration updated for instance {instance}"); - current_location - } else { - // create new location - debug!("Creating new location {new_location} for instance instance {instance}"); - let new_location = new_location.save(transaction.as_mut()).await?; - info!("New location {new_location} created for instance {instance}"); - new_location - }; - - if saved_location.is_service_location() { - debug!( - "Adding service location {}({}) for instance {}({}) to be saved to the daemon.", - saved_location.name, saved_location.id, instance.name, instance.id, - ); - service_locations.push(saved_location.to_service_location()?); - } - } - - // remove locations which were present in current locations - // but no longer found in core response - debug!("Removing locations for instance {instance}"); - for removed_location in current_locations { - removed_location.delete(transaction.as_mut()).await?; - info!( - "Removed location {removed_location} for instance {instance} during instance update" - ); - } - debug!("Finished updating locations for instance {instance}"); - } else { - info!("Locations for instance {instance} didn't change. Not updating them."); - } - - if service_locations.is_empty() { - debug!( - "No service locations for instance {}({}), removing all existing service locations connections if there are any.", - instance.name, instance.id - ); - - #[cfg(not(target_os = "macos"))] - { - let delete_request = DeleteServiceLocationsRequest { - instance_id: instance.uuid.clone(), - }; - DAEMON_CLIENT - .clone() - .delete_service_locations(delete_request) - .await - .map_err(|err| { - error!( - "Error while deleting service locations from the daemon for instance {}({}): {err}", - instance.name, instance.id, - ); - Error::InternalError(err.to_string()) - })?; - debug!( - "Successfully removed all service locations from daemon for instance {}({})", - instance.name, instance.id - ); - } - } else { - debug!( - "Processing {} service location(s) for instance {}({})", - service_locations.len(), - instance.name, - instance.id - ); - - #[cfg(not(target_os = "macos"))] - { - let private_key = WireguardKeys::find_by_instance_id(transaction.as_mut(), instance.id) - .await? - .ok_or(Error::NotFound)? - .prvkey; - - let save_request = SaveServiceLocationsRequest { - service_locations: service_locations.clone(), - instance_id: instance.uuid.clone(), - private_key, - }; - - debug!( - "Sending request to daemon to save {} service location(s) for instance {}({})", - save_request.service_locations.len(), - instance.name, - instance.id - ); - - DAEMON_CLIENT - .clone() - .save_service_locations(save_request) - .await - .map_err(|err| { - error!( - "Error while saving service locations to the daemon for instance {}({}): {err}", - instance.name, instance.id, - ); - Error::InternalError(err.to_string()) - })?; - - info!( - "Successfully saved {} service location(s) to daemon for instance {}({})", - service_locations.len(), - instance.name, - instance.id - ); - - debug!( - "Completed processing all service locations for instance {}({})", - instance.name, instance.id - ); - } - } - - Ok(()) -} - /// If `datetime` is Some, parses the date string, otherwise returns `DateTime` one hour ago. pub(crate) fn parse_timestamp(from: Option) -> Result, Error> { Ok(match from { @@ -901,35 +682,6 @@ pub(crate) fn parse_timestamp(from: Option) -> Result, Err }) } -pub(crate) enum DateTimeAggregation { - Hour, - Second, -} - -impl DateTimeAggregation { - /// Returns database format string for a given aggregation variant. - #[must_use] - pub(crate) fn fstring(&self) -> &'static str { - match self { - Self::Hour => "%Y-%m-%d %H:00:00", - Self::Second => "%Y-%m-%d %H:%M:%S", - } - } -} - -pub(crate) fn get_aggregation(from: NaiveDateTime) -> Result { - // Use hourly aggregation for longer periods - let aggregation = match Utc::now().naive_utc() - from { - duration if duration >= Duration::hours(8) => Ok(DateTimeAggregation::Hour), - duration if duration < Duration::zero() => Err(Error::InternalError(format!( - "Negative duration between dates: now ({}) and {from}", - Utc::now().naive_utc(), - ))), - _ => Ok(DateTimeAggregation::Second), - }?; - Ok(aggregation) -} - #[tauri::command(async)] pub async fn location_stats( location_id: Id, @@ -938,7 +690,7 @@ pub async fn location_stats( ) -> Result>, Error> { trace!("Location stats command received"); let from = parse_timestamp(from)?.naive_utc(); - let aggregation = get_aggregation(from)?; + let aggregation = crate::get_aggregation(from)?; let stats = match connection_type { ConnectionType::Location => { LocationStats::all_by_location_id(&*DB_POOL, location_id, &from, &aggregation, None) @@ -1091,7 +843,9 @@ pub async fn update_location_routing( location.route_all_traffic = route_all_traffic; location.save(&*DB_POOL).await?; debug!("Location routing updated for location {name}(ID: {location_id})"); - handle.emit(EventKey::LocationUpdate.into(), ())?; + handle + .emit(EventKey::LocationUpdate.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; Ok(()) } else { error!( @@ -1105,7 +859,9 @@ pub async fn update_location_routing( tunnel.route_all_traffic = route_all_traffic; tunnel.save(&*DB_POOL).await?; info!("Tunnel routing updated for tunnel {location_id}"); - handle.emit(EventKey::LocationUpdate.into(), ())?; + handle + .emit(EventKey::LocationUpdate.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; Ok(()) } else { error!("Couldn't update tunnel routing: tunnel with id {location_id} not found."); @@ -1134,7 +890,9 @@ pub async fn set_location_mfa_method( "MFA method updated for location {}(ID: {location_id})", location.name, ); - handle.emit(EventKey::LocationUpdate.into(), ())?; + handle + .emit(EventKey::LocationUpdate.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; Ok(()) } else { error!("Location with ID {location_id} not found, cannot set MFA method"); @@ -1183,7 +941,9 @@ pub async fn delete_instance(instance_id: Id, handle: AppHandle) -> Result<(), E configure_tray_icon(&handle).await?; - handle.emit(EventKey::InstanceUpdate.into(), ())?; + handle + .emit(EventKey::InstanceUpdate.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; info!("Successfully deleted instance {instance}."); Ok(()) } @@ -1258,7 +1018,9 @@ pub async fn delete_instance(instance_id: Id, handle: AppHandle) -> Result<(), E configure_tray_icon(&handle).await?; - handle.emit(EventKey::InstanceUpdate.into(), ())?; + handle + .emit(EventKey::InstanceUpdate.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; info!("Successfully deleted instance {instance}."); Ok(()) } @@ -1279,7 +1041,9 @@ pub async fn update_tunnel(mut tunnel: Tunnel, handle: AppHandle) -> Result< debug!("Received tunnel configuration to update: {tunnel}"); tunnel.save(&*DB_POOL).await?; info!("The tunnel {tunnel} configuration has been updated."); - handle.emit(EventKey::LocationUpdate.into(), ())?; + handle + .emit(EventKey::LocationUpdate.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; Ok(()) } @@ -1288,7 +1052,9 @@ pub async fn save_tunnel(tunnel: Tunnel, handle: AppHandle) -> Result<(), debug!("Received tunnel configuration to save: {tunnel}"); let tunnel = tunnel.save(&*DB_POOL).await?; info!("The tunnel {tunnel} configuration has been saved."); - handle.emit(EventKey::LocationUpdate.into(), ())?; + handle + .emit(EventKey::LocationUpdate.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; Ok(()) } @@ -1455,17 +1221,8 @@ pub struct AppVersionInfo { const PRODUCT_NAME: &str = "defguard-client"; -fn select_reported_app_version( - package_version: &str, - build_version_override: Option<&str>, -) -> String { - build_version_override - .filter(|version| !version.trim().is_empty()) - .map_or_else(|| package_version.to_owned(), str::to_owned) -} - fn reported_app_version(handle: &AppHandle) -> String { - select_reported_app_version( + defguard_client_core::version::select_reported_app_version( &handle.package_info().version.to_string(), option_env!("DEFGUARD_CLIENT_BUILD_VERSION"), ) @@ -1530,7 +1287,11 @@ pub async fn command_set_app_config( let res = { let mut app_config = app_state.app_config.lock().unwrap(); app_config.apply(config_patch); - app_config.save(&app_handle); + let config_dir = app_handle + .path() + .app_data_dir() + .expect("Failed to access app data"); + app_config.save(&config_dir); app_config.clone() }; info!("Config changed successfully"); @@ -1604,26 +1365,3 @@ pub async fn all_active_connections() -> Result, Er debug!("Returning {} active connections.", result.len()); Ok(result) } - -#[cfg(test)] -mod tests { - use super::select_reported_app_version; - - #[test] - fn reported_app_version_uses_override_when_present() { - assert_eq!( - select_reported_app_version("1.6.8", Some("1.6.8-beta1")), - "1.6.8-beta1" - ); - } - - #[test] - fn reported_app_version_falls_back_to_package_version_without_override() { - assert_eq!(select_reported_app_version("1.6.8", None), "1.6.8"); - } - - #[test] - fn reported_app_version_ignores_empty_override() { - assert_eq!(select_reported_app_version("1.6.8", Some(" ")), "1.6.8"); - } -} diff --git a/src-tauri/src/enterprise/inspector/mod.rs b/src-tauri/src/enterprise/inspector/mod.rs deleted file mode 100644 index 2a7484cef..000000000 --- a/src-tauri/src/enterprise/inspector/mod.rs +++ /dev/null @@ -1,191 +0,0 @@ -#[cfg(target_os = "linux")] -pub(crate) mod linux; -#[cfg(target_os = "macos")] -pub(crate) mod macos; -#[cfg(test)] -mod tests; -#[cfg(windows)] -pub(crate) mod windows; - -use std::{env::consts::OS, error::Error, fmt}; - -use sysinfo::System; - -use crate::{ - service::proto::defguard::enterprise::posture::v2::{ - bool_check, int32_check, string_check, BoolCheck, DevicePostureData, Int32Check, - StringCheck, UnavailableReason, - }, - VERSION, -}; - -impl fmt::Display for UnavailableReason { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::Unspecified => f.write_str("unspecified"), - Self::DetectionFailed => f.write_str("detection failed"), - Self::NotApplicable => f.write_str("not applicable on this platform"), - Self::InsufficientPermissions => f.write_str("insufficient permissions"), - } - } -} - -impl Error for UnavailableReason {} - -/// Returns the operating system name. -fn os_name() -> Result { - System::name().ok_or(UnavailableReason::DetectionFailed) -} - -/// Returns the operating system version. -fn os_version() -> Result { - #[cfg(windows)] - { - // Windows can report versions like "11 (26200)"; core expects a parseable major. - System::os_version() - .and_then(|version| version.split_whitespace().next().map(ToString::to_string)) - .ok_or(UnavailableReason::DetectionFailed) - } - - #[cfg(not(windows))] - { - System::os_version().ok_or(UnavailableReason::DetectionFailed) - } -} - -/// Returns the Linux kernel version. -fn linux_kernel_version() -> Result { - #[cfg(target_os = "linux")] - { - System::kernel_version().ok_or(UnavailableReason::DetectionFailed) - } - - #[cfg(not(target_os = "linux"))] - { - Err(UnavailableReason::NotApplicable) - } -} - -/// Returns the disk encryption status, preferably for the system volume. -fn disk_encryption_status() -> Result { - #[cfg(target_os = "macos")] - { - macos::disk_encryption_status() - } - - #[cfg(windows)] - { - windows::disk_encryption_status() - } - - #[cfg(target_os = "linux")] - { - linux::disk_encryption_status() - } -} - -/// Returns the antivirus status. -fn anti_virus_status() -> Result { - #[cfg(windows)] - { - windows::anti_virus_status() - } - - #[cfg(not(windows))] - { - Err(UnavailableReason::NotApplicable) - } -} - -/// Checks whether the computer is part of a domain. -fn part_of_domain() -> Result { - #[cfg(windows)] - { - windows::part_of_domain() - } - - #[cfg(not(windows))] - { - Err(UnavailableReason::NotApplicable) - } -} - -/// Returns the device integrity status. -fn device_integrity() -> Result { - #[cfg(target_os = "macos")] - { - macos::system_integrity_status() - } - - #[cfg(not(target_os = "macos"))] - Err(UnavailableReason::NotApplicable) -} - -/// Returns the number of days since the last installed Windows security update. -fn security_update_age_days() -> Result { - #[cfg(windows)] - { - windows::security_update_age_days() - } - - #[cfg(not(windows))] - { - Err(UnavailableReason::NotApplicable) - } -} - -/// Convert `Result` to `BoolCheck`. -impl From> for BoolCheck { - fn from(value: Result) -> Self { - Self { - result: Some(match value { - Ok(inner) => bool_check::Result::Value(inner), - Err(err) => bool_check::Result::Unavailable(err as i32), - }), - } - } -} - -/// Convert `Result` to `Int32Check`. -impl From> for Int32Check { - fn from(value: Result) -> Self { - Self { - result: Some(match value { - Ok(inner) => int32_check::Result::Value(inner), - Err(err) => int32_check::Result::Unavailable(err as i32), - }), - } - } -} - -/// Convert `Result` to `StringCheck`. -impl From> for StringCheck { - fn from(value: Result) -> Self { - Self { - result: Some(match value { - Ok(inner) => string_check::Result::Value(inner), - Err(err) => string_check::Result::Unavailable(err as i32), - }), - } - } -} - -#[allow(unused)] -impl DevicePostureData { - /// Performs system inspection and returns the results. - #[must_use] - pub fn new() -> Self { - Self { - defguard_client_version: VERSION.to_owned(), - os_type: OS.to_string(), - os_name: Some(StringCheck::from(os_name())), - os_version: Some(StringCheck::from(os_version())), - disk_encryption: Some(BoolCheck::from(disk_encryption_status())), - antivirus_present: Some(BoolCheck::from(anti_virus_status())), - windows_ad_domain_joined: Some(BoolCheck::from(part_of_domain())), - windows_security_update_age_days: Some(Int32Check::from(security_update_age_days())), - linux_kernel_version: Some(StringCheck::from(linux_kernel_version())), - device_integrity: Some(BoolCheck::from(device_integrity())), - } - } -} diff --git a/src-tauri/src/enterprise/mod.rs b/src-tauri/src/enterprise/mod.rs index a76ac9a2b..cc227330a 100644 --- a/src-tauri/src/enterprise/mod.rs +++ b/src-tauri/src/enterprise/mod.rs @@ -1,6 +1,6 @@ -pub mod inspector; -pub mod models; +pub use defguard_client_posture::inspector; +pub use defguard_client_posture::posture; +pub use defguard_client_provisioning::{try_get_provisioning_config, ProvisioningConfig}; pub mod periodic; -pub mod posture; pub mod provisioning; pub mod service_locations; diff --git a/src-tauri/src/enterprise/models/instance.rs b/src-tauri/src/enterprise/models/instance.rs deleted file mode 100644 index b0a034379..000000000 --- a/src-tauri/src/enterprise/models/instance.rs +++ /dev/null @@ -1,28 +0,0 @@ -use sqlx::SqliteExecutor; - -use crate::{ - database::models::{ - instance::{ClientTrafficPolicy, Instance}, - Id, - }, - error::Error, -}; - -impl Instance { - pub async fn disable_enterprise_features<'e, E>(&mut self, executor: E) -> Result<(), Error> - where - E: SqliteExecutor<'e>, - { - debug!( - "Disabling enterprise features for instance {}({})", - self.name, self.id - ); - self.client_traffic_policy = ClientTrafficPolicy::None; - self.save(executor).await?; - debug!( - "Disabled enterprise features for instance {}({})", - self.name, self.id - ); - Ok(()) - } -} diff --git a/src-tauri/src/enterprise/models/mod.rs b/src-tauri/src/enterprise/models/mod.rs deleted file mode 100644 index 1d5ea9909..000000000 --- a/src-tauri/src/enterprise/models/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod instance; diff --git a/src-tauri/src/enterprise/periodic/config.rs b/src-tauri/src/enterprise/periodic/config.rs index 22d680319..303c17739 100644 --- a/src-tauri/src/enterprise/periodic/config.rs +++ b/src-tauri/src/enterprise/periodic/config.rs @@ -1,43 +1,41 @@ use std::{ - cmp::Ordering, collections::HashSet, - str::FromStr, sync::{LazyLock, Mutex}, time::Duration, }; -use reqwest::StatusCode; -use serde::Serialize; -use sqlx::{Sqlite, Transaction}; -use tauri::{AppHandle, Emitter, Url}; -use tokio::time::sleep; - -use crate::{ - active_connections::active_connections, - commands::{do_update_instance, locations_changed}, +pub use defguard_client_config_sync::commands::{ + disable_enterprise_features, do_update_instance, locations_changed, +}; +use defguard_client_config_sync::{config_changed, fetch_instance_config}; +use defguard_client_core::{ + connection::active_connections::active_connections, database::{ models::{instance::Instance, Id}, DB_POOL, }, error::Error, events::EventKey, - proto::defguard::client_types::{ - DeviceConfigResponse, InstanceInfoRequest, InstanceInfoResponse, - }, - utils::post_with_headers, - MIN_CORE_VERSION, MIN_PROXY_VERSION, }; +use log::{debug, error, info}; +use sqlx::{Sqlite, Transaction}; +use tauri::{AppHandle, Emitter}; +use tokio::time::sleep; const INTERVAL_SECONDS: Duration = Duration::from_secs(30); -static POLLING_ENDPOINT: &str = "/api/v1/poll"; + +/// Tracks instance IDs for which we already sent a version-mismatch notification, +/// to prevent duplicate notifications in the app's lifetime. +static NOTIFIED_INSTANCES: LazyLock>> = + LazyLock::new(|| Mutex::new(HashSet::new())); /// Periodically retrieves and updates configuration for all [`Instance`]s. /// Updates are only performed if no connections are established to the [`Instance`], -/// otherwise event is emmited and UI message is displayed. +/// otherwise event is emitted and UI message is displayed. pub async fn poll_config(handle: AppHandle) { debug!("Starting the configuration polling loop."); - // Polling starts sooner than app's frontend may load in dev builds, causing events (toasts) to be lost, - // you may want to wait here before starting if you want to debug it. + // Polling starts sooner than app's frontend may load in dev builds, causing events (toasts) + // to be lost; you may want to wait here before starting if you want to debug it. loop { let Ok(mut transaction) = DB_POOL.begin().await else { error!( @@ -49,7 +47,7 @@ pub async fn poll_config(handle: AppHandle) { }; let Ok(mut instances) = Instance::all_with_token(&mut *transaction).await else { error!( - "Failed to retireve instances for config polling, retrying in {}s", + "Failed to retrieve instances for config polling, retrying in {}s", INTERVAL_SECONDS.as_secs() ); let _ = transaction.rollback().await; @@ -68,8 +66,8 @@ pub async fn poll_config(handle: AppHandle) { match err { Error::CoreNotEnterprise => { debug!( - "Tried to contact core for instance {instance} config but it's not \ - enterprise, can't retrieve config" + "Tried to contact core for instance {instance} config but it's \ + not enterprise, can't retrieve config" ); } Error::NoToken => { @@ -118,81 +116,32 @@ pub async fn poll_config(handle: AppHandle) { } } -/// Retrieves configuration for given [`Instance`]. -/// Updates the instance if there aren't any active connections, otherwise displays UI message. +/// Retrieves configuration for a given [`Instance`]. +/// Updates the instance if there aren't any active connections, otherwise emits +/// a ConfigChanged event so the frontend can prompt the user to reconnect. pub async fn poll_instance( transaction: &mut Transaction<'_, Sqlite>, instance: &mut Instance, handle: &AppHandle, ) -> Result<(), Error> { - debug!("Getting config from core for instance {}", instance.name); - // Query proxy api - let request = build_request(instance)?; - let url = Url::from_str(&instance.proxy_url) - .and_then(|url| url.join(POLLING_ENDPOINT)) - .map_err(|_| { - Error::InternalError(format!( - "Can't build polling url: {}/{POLLING_ENDPOINT}", - instance.proxy_url - )) - })?; - let response = post_with_headers(url, &request).await; - let response = response.map_err(|err| { - Error::InternalError(format!( - "HTTP request failed for instance {}({}), url: {}, {err}", - instance.name, instance.id, instance.proxy_url - )) - })?; - debug!( - "Got the following config response for instance {} from core: {response:?}", - instance.name - ); - - check_min_version(&response, instance, handle); - - // Return early if the enterprise features are disabled in the core - if response.status() == StatusCode::PAYMENT_REQUIRED { - debug!( - "Instance {}({}) has enterprise features disabled, checking if this state is reflected \ - on our end.", - instance.name, instance.id - ); - if instance.enterprise_enabled { - info!( - "Instance {}({}) has enterprise features disabled, but we have them enabled, \ - disabling.", - instance.name, instance.id - ); - instance - .disable_enterprise_features(transaction.as_mut()) - .await?; - } else { - debug!( - "Instance {}({}) has enterprise features disabled, and we have them disabled as \ - well, no action needed", - instance.name, instance.id - ); + let fetched = fetch_instance_config(transaction, instance).await?; + + // Emit version-mismatch event if applicable and not already notified + if let Some(payload) = fetched.version_mismatch { + let mut notified_instances = NOTIFIED_INSTANCES.lock().unwrap(); + if notified_instances.insert(instance.id) { + if let Err(err) = handle.emit(EventKey::VersionMismatch.into(), payload) { + error!("Failed to emit version mismatch event to the frontend: {err}"); + // Remove so we can retry next cycle + notified_instances.remove(&instance.id); + } } - return Err(Error::CoreNotEnterprise); } - // Parse the response - debug!( - "Parsing the config response for instance {}.", - instance.name - ); - let response: InstanceInfoResponse = response.json().await.map_err(|err| { - Error::InternalError(format!( - "Failed to parse InstanceInfoResponse for instance {}({}): {err}", - instance.name, instance.id, - )) - })?; - let device_config = response - .device_config - .as_ref() - .ok_or_else(|| Error::InternalError("Device config not present in response".to_string()))?; - debug!("Parsed the config for instance {}", instance.name); - trace!("Parsed config: {device_config:?}"); + let device_config = + fetched.response.device_config.as_ref().ok_or_else(|| { + Error::InternalError("Device config not present in response".to_string()) + })?; // Early return if config didn't change if !config_changed(transaction, instance, device_config).await? { @@ -210,7 +159,6 @@ pub async fn poll_instance( // Config changed. If there are no active connections for this instance, update the database. // Otherwise just display a message to reconnect. - // if active_connections(instance).await?.is_empty() { debug!( "Updating instance {}({}) configuration: {device_config:?}", @@ -235,193 +183,3 @@ pub async fn poll_instance( Ok(()) } - -async fn config_changed( - transaction: &mut Transaction<'_, Sqlite>, - instance: &Instance, - device_config: &DeviceConfigResponse, -) -> Result { - debug!( - "Checking if config and any of the locations changed for instance {}({})", - instance.name, instance.id - ); - let locations_changed = locations_changed(transaction, instance, device_config).await?; - let info_changed = match &device_config.instance { - Some(info) => instance != info, - None => false, - }; - debug!( - "Did the locations change?: {locations_changed}. Did the instance information change?: \ - {info_changed}" - ); - Ok(locations_changed || info_changed) -} - -/// Retrieves token to build InstanceInfoRequest -fn build_request(instance: &Instance) -> Result { - let token = instance.token.as_ref().ok_or_else(|| Error::NoToken)?; - - Ok(InstanceInfoRequest { - token: (*token).clone(), - }) -} - -/// Tracks instance IDs that for which we already sent notification about version mismatches -/// to prevent duplicate notifications in the app's lifetime. -static NOTIFIED_INSTANCES: LazyLock>> = - LazyLock::new(|| Mutex::new(HashSet::new())); - -const CORE_VERSION_HEADER: &str = "defguard-core-version"; -const CORE_CONNECTED_HEADER: &str = "defguard-core-connected"; -const PROXY_VERSION_HEADER: &str = "defguard-component-version"; - -#[derive(Clone, Serialize)] -struct VersionMismatchPayload { - instance_name: String, - instance_id: Id, - core_version: String, - proxy_version: String, - core_required_version: String, - proxy_required_version: String, - core_compatible: bool, - proxy_compatible: bool, -} - -fn check_min_version(response: &reqwest::Response, instance: &Instance, handle: &AppHandle) { - let mut notified_instances = NOTIFIED_INSTANCES.lock().unwrap(); - if notified_instances.contains(&instance.id) { - debug!( - "Instance {}({}) already notified about version mismatch, skipping", - instance.name, instance.id - ); - return; - } - - let detected_core_version: String; - let detected_proxy_version: String; - let defguard_core_connected: Option = response - .headers() - .get(CORE_CONNECTED_HEADER) - .and_then(|v| { - debug!( - "Defguard core connection status header for instance {}({}): {v:?}", - instance.name, instance.id - ); - v.to_str().ok() - }) - .and_then(|s| s.parse().ok()); - - let core_compatible = if let Some(core_version) = response.headers().get(CORE_VERSION_HEADER) { - if let Ok(core_version) = core_version.to_str() { - if let Ok(core_version) = semver::Version::from_str(core_version) { - detected_core_version = core_version.to_string(); - core_version.cmp_precedence(&MIN_CORE_VERSION) != Ordering::Less - } else { - warn!( - "Core version header: invalid semver string in response for instance {}({}): \ - '{core_version}'", - instance.name, instance.id - ); - detected_core_version = core_version.to_string(); - false - } - } else { - warn!( - "Core version header: invalid string in response for instance {}({}): \ - '{core_version:?}'", - instance.name, instance.id - ); - detected_core_version = "unknown".to_string(); - false - } - } else { - warn!( - "Core version header not present in response for instance {}({})", - instance.name, instance.id - ); - detected_core_version = "unknown".to_string(); - false - }; - - let proxy_compatible = if let Some(proxy_version) = response.headers().get(PROXY_VERSION_HEADER) - { - if let Ok(proxy_version) = proxy_version.to_str() { - if let Ok(proxy_version) = semver::Version::from_str(proxy_version) { - detected_proxy_version = proxy_version.to_string(); - proxy_version.cmp_precedence(&MIN_PROXY_VERSION) != Ordering::Less - } else { - warn!( - "Proxy version header not a valid semver string in response for instance {}({}): \ - '{proxy_version}'", - instance.name, instance.id - ); - detected_proxy_version = proxy_version.to_string(); - false - } - } else { - warn!( - "Proxy version header not a valid string in response for instance {}({}): \ - '{proxy_version:?}'", - instance.name, instance.id - ); - detected_proxy_version = "unknown".to_string(); - false - } - } else { - warn!( - "Proxy version header not present in response for instance {}({})", - instance.name, instance.id - ); - detected_proxy_version = "unknown".to_string(); - false - }; - - let should_inform = match defguard_core_connected { - Some(true) => { - debug!( - "Defguard core is connected for instance {}({})", - instance.name, instance.id - ); - true - } - Some(false) => { - info!( - "Defguard core is not connected for instance {}({})", - instance.name, instance.id - ); - false - } - None => { - debug!( - "Defguard core connection status unknown for instance {}({})", - instance.name, instance.id - ); - true - } - }; - - if should_inform && (!core_compatible || !proxy_compatible) { - warn!( - "Instance {} is running incompatible versions: core {detected_core_version}, proxy \ - {detected_proxy_version}. Required versions: core >= {MIN_CORE_VERSION}, proxy >= \ - {MIN_PROXY_VERSION}", - instance.name, - ); - - let payload = VersionMismatchPayload { - instance_name: instance.name.clone(), - instance_id: instance.id, - core_version: detected_core_version, - proxy_version: detected_proxy_version, - core_required_version: MIN_CORE_VERSION.to_string(), - proxy_required_version: MIN_PROXY_VERSION.to_string(), - core_compatible, - proxy_compatible, - }; - if let Err(err) = handle.emit(EventKey::VersionMismatch.into(), payload) { - error!("Failed to emit version mismatch event to the frontend: {err}"); - } else { - notified_instances.insert(instance.id); - } - } -} diff --git a/src-tauri/src/enterprise/provisioning/mod.rs b/src-tauri/src/enterprise/provisioning/mod.rs index 21a359314..698e3876d 100644 --- a/src-tauri/src/enterprise/provisioning/mod.rs +++ b/src-tauri/src/enterprise/provisioning/mod.rs @@ -1,81 +1,12 @@ -use std::{fmt, fs, path::Path}; +pub use defguard_client_provisioning::{try_get_provisioning_config, ProvisioningConfig}; -use serde::{Deserialize, Serialize}; use tauri::{AppHandle, Manager}; -use crate::database::{models::instance::Instance, DB_POOL}; - -const CONFIG_FILE_NAME: &str = "provisioning.json"; - -#[derive(Clone, Deserialize, Serialize)] -pub struct ProvisioningConfig { - pub enrollment_url: String, - pub enrollment_token: String, -} - -impl fmt::Debug for ProvisioningConfig { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let Self { - enrollment_url, - enrollment_token: _, - } = self; - - f.debug_struct("ProvisioningConfig") - .field("enrollment_url", enrollment_url) - .field("enrollment_token", &"***") - .finish() - } -} - -impl ProvisioningConfig { - /// Load configuration from a file at `path`. - fn load(path: &Path) -> Option { - // read content to string first to handle Windows encoding issues - let file_content = match fs::read_to_string(path) { - Ok(content) => content, - Err(err) => { - warn!( - "Failed to open provisioning configuration file at {}. Error details: \ - {err}", - path.display() - ); - return None; - } - }; - - // strip Windows BOM manually - let file_content = file_content.trim_start_matches('\u{FEFF}'); - - match serde_json::from_str::(file_content) { - Ok(config) => Some(config), - Err(err) => { - warn!( - "Failed to parse provisioning configuration file at {}. Error details: \ - {err}", - path.display() - ); - None - } - } - } -} - -#[must_use] -pub fn try_get_provisioning_config(app_data_dir: &Path) -> Option { - debug!( - "Trying to find provisioning config in {}", - app_data_dir.display() - ); - - let config_file_path = app_data_dir.join(CONFIG_FILE_NAME); - ProvisioningConfig::load(&config_file_path) -} +use defguard_client_core::database::{models::instance::Instance, DB_POOL}; /// Checks if the client has already been initialized /// and tries to load provisioning config from file if necessary pub async fn handle_client_initialization(app_handle: &AppHandle) -> Option { - // check if client has already been initialized - // we assume that if any instances exist the client has been initialized match Instance::all(&*DB_POOL).await { Ok(instances) => { if instances.is_empty() { diff --git a/src-tauri/src/enterprise/service_locations/mod.rs b/src-tauri/src/enterprise/service_locations/mod.rs index 199b0c67c..23b60ff98 100644 --- a/src-tauri/src/enterprise/service_locations/mod.rs +++ b/src-tauri/src/enterprise/service_locations/mod.rs @@ -1,123 +1,7 @@ -use std::{collections::HashMap, fmt}; - -use defguard_wireguard_rs::{error::WireguardInterfaceError, WGApi}; -use serde::{Deserialize, Serialize}; - -use crate::{ - database::models::{ - location::{Location, ServiceLocationMode}, - Id, - }, - service::proto::defguard::client::v1::ServiceLocation, +pub use defguard_client_service_locations::{ + to_service_location, ServiceLocationData, ServiceLocationError, ServiceLocationManager, + SingleServiceLocationData, }; #[cfg(windows)] -pub mod windows; - -#[derive(Debug, thiserror::Error)] -pub enum ServiceLocationError { - #[error("Error occurred while initializing service location API: {0}")] - InitError(String), - #[error("Failed to load service location storage: {0}")] - LoadError(String), - #[error(transparent)] - Io(#[from] std::io::Error), - #[error(transparent)] - DecodeError(#[from] base64::DecodeError), - #[error(transparent)] - WireGuardError(#[from] WireguardInterfaceError), - #[error(transparent)] - AddrParseError(#[from] defguard_wireguard_rs::net::IpAddrParseError), - #[error("WireGuard interface error: {0}")] - InterfaceError(String), - #[error(transparent)] - JsonError(#[from] serde_json::Error), - #[error(transparent)] - ProtoEnumError(#[from] prost::UnknownEnumValue), - #[cfg(windows)] - #[error(transparent)] - WindowsServiceError(#[from] windows_service::Error), -} - -#[allow(dead_code)] -#[derive(Default)] -pub(crate) struct ServiceLocationManager { - // Interface name: WireGuard API instance - wgapis: HashMap, - // Instance ID: Service locations connected under that instance - connected_service_locations: HashMap>, -} - -#[allow(dead_code)] -#[derive(Serialize, Deserialize)] -pub(crate) struct ServiceLocationData { - pub service_locations: Vec, - pub instance_id: String, - pub private_key: String, -} - -#[allow(dead_code)] -pub(crate) struct SingleServiceLocationData { - pub service_location: ServiceLocation, - pub instance_id: String, - pub private_key: String, -} - -impl fmt::Debug for ServiceLocationData { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.debug_struct("ServiceLocationData") - .field("service_locations", &self.service_locations) - .field("instance_id", &self.instance_id) - .field("private_key", &"***") - .finish() - } -} - -impl fmt::Debug for SingleServiceLocationData { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.debug_struct("SingleServiceLocationData") - .field("service_locations", &self.service_location) - .field("instance_id", &self.instance_id) - .field("private_key", &"***") - .finish() - } -} - -impl Location { - pub fn to_service_location(&self) -> Result { - if !self.is_service_location() { - warn!("Location {self} is not a service location, so it can't be converted to one."); - return Err(crate::error::Error::ConversionError(format!( - "Failed to convert location {self} to a service location as it's either not marked \ - as one or has MFA enabled." - ))); - } - - let mode = match self.service_location_mode { - ServiceLocationMode::Disabled => { - warn!( - "Location {self} has an invalid service location mode, so it can't be converted to \ - one." - ); - return Err(crate::error::Error::ConversionError(format!( - "Location {self} has an invalid service location mode ({:?}), so it can't be \ - converted to one.", - self.service_location_mode - ))); - } - ServiceLocationMode::PreLogon => 0, - ServiceLocationMode::AlwaysOn => 1, - }; - - Ok(ServiceLocation { - name: self.name.clone(), - address: self.address.clone(), - pubkey: self.pubkey.clone(), - endpoint: self.endpoint.clone(), - allowed_ips: self.allowed_ips.clone(), - dns: self.dns.clone().unwrap_or_default(), - keepalive_interval: self.keepalive_interval.try_into().unwrap_or(0), - mode, - }) - } -} +pub use defguard_client_service_locations::windows; diff --git a/src-tauri/src/enterprise/service_locations/windows.rs b/src-tauri/src/enterprise/service_locations/windows.rs index cf8aee722..2cf9b8e75 100644 --- a/src-tauri/src/enterprise/service_locations/windows.rs +++ b/src-tauri/src/enterprise/service_locations/windows.rs @@ -9,7 +9,7 @@ use std::{ time::Duration, }; -use common::{dns_borrow, find_free_tcp_port, get_interface_name}; +use defguard_client_common::{dns_borrow, find_free_tcp_port, get_interface_name}; use defguard_wireguard_rs::{ key::Key, net::IpAddrMask, peer::Peer, InterfaceConfiguration, WireguardInterfaceApi, }; diff --git a/src-tauri/src/events.rs b/src-tauri/src/events.rs index eb5591e2f..1d8b4125f 100644 --- a/src-tauri/src/events.rs +++ b/src-tauri/src/events.rs @@ -7,41 +7,7 @@ use crate::{ ConnectionType, }; -// Match src/pages/client/types.ts. -#[non_exhaustive] -pub enum EventKey { - ConnectionChanged, - InstanceUpdate, - LocationUpdate, - AppVersionFetch, - ConfigChanged, - DeadConnectionDropped, - DeadConnectionReconnected, - ApplicationConfigChanged, - AddInstance, - MfaTrigger, - VersionMismatch, - UuidMismatch, -} - -impl From for &'static str { - fn from(key: EventKey) -> &'static str { - match key { - EventKey::ConnectionChanged => "connection-changed", - EventKey::InstanceUpdate => "instance-update", - EventKey::LocationUpdate => "location-update", - EventKey::AppVersionFetch => "app-version-fetch", - EventKey::ConfigChanged => "config-changed", - EventKey::DeadConnectionDropped => "dead-connection-dropped", - EventKey::DeadConnectionReconnected => "dead-connection-reconnected", - EventKey::ApplicationConfigChanged => "application-config-changed", - EventKey::AddInstance => "add-instance", - EventKey::MfaTrigger => "mfa-trigger", - EventKey::VersionMismatch => "version-mismatch", - EventKey::UuidMismatch => "uuid-mismatch", - } - } -} +pub use defguard_client_core::events::EventKey; /// Used as payload for [`DEAD_CONNECTION_DROPPED`] event #[derive(Clone, Serialize)] diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index abcf59370..04c488e49 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,134 +1,57 @@ // FIXME: actually refactor errors instead #![allow(clippy::result_large_err)] -#[cfg(unix)] -use std::path::Path; -use std::{fmt, path::PathBuf}; -#[cfg(not(windows))] -use std::{ - fs::{set_permissions, Permissions}, - os::unix::fs::PermissionsExt, -}; - -use chrono::NaiveDateTime; -use semver::Version; -use serde::{Deserialize, Serialize}; -use self::database::models::{Id, NoId}; - -pub mod active_connections; -pub mod app_config; #[cfg(target_os = "macos")] pub mod apple; pub mod appstate; pub mod commands; -pub mod database; pub mod enterprise; -pub mod error; pub mod events; pub mod log_watcher; pub mod periodic; -pub mod proto; pub mod service; pub mod tray; pub mod utils; -pub mod wg_config; pub mod window_manager; -pub const VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), "-", env!("VERGEN_GIT_SHA")); -pub const MIN_CORE_VERSION: Version = Version::new(1, 6, 0); -pub const MIN_PROXY_VERSION: Version = Version::new(1, 6, 0); -pub const CLIENT_VERSION_HEADER: &str = "defguard-client-version"; -pub const CLIENT_PLATFORM_HEADER: &str = "defguard-client-platform"; -pub const PKG_VERSION: &str = env!("CARGO_PKG_VERSION"); -// Must be without ".log" suffix! -pub const LOG_FILENAME: &str = "defguard-client"; -// This must match tauri.bundle.identifier from tauri.conf.json. -const BUNDLE_IDENTIFIER: &str = "net.defguard"; -// Returns the path to the user's data directory. -#[must_use] -pub fn app_data_dir() -> Option { - dirs_next::data_dir().map(|dir| dir.join(BUNDLE_IDENTIFIER)) -} +pub use defguard_client_core::{ + app_config, + app_data_dir, + connection, + database, + error, + get_aggregation, + into_location, + proxy, + version::{ + Version, CLIENT_PLATFORM_HEADER, CLIENT_VERSION_HEADER, LOG_FILENAME, MIN_CORE_VERSION, + MIN_PROXY_VERSION, + }, + wg_config, + // Shared types + CommonConnection, + CommonConnectionInfo, + CommonLocationStats, + CommonWireguardFields, + ConnectionType, + // DateTime aggregation + DateTimeAggregation, + // Constants + DEFAULT_ROUTE_IPV4, + DEFAULT_ROUTE_IPV6, +}; -/// Ensures path has appropriate permissions set (dg25-28): -/// - 700 for directories -/// - 600 for files #[cfg(unix)] -pub fn set_perms(path: &Path) { - let perms = if path.is_dir() { 0o700 } else { 0o600 }; - if let Err(err) = set_permissions(path, Permissions::from_mode(perms)) { - warn!( - "Failed to set permissions on path {}: {err}", - path.display() - ); - } -} - -/// Location type used in commands to check if we using tunnel or location -#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] -pub enum ConnectionType { - Tunnel, - Location, -} +pub use defguard_client_core::set_perms; -impl fmt::Display for ConnectionType { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { - ConnectionType::Tunnel => write!(f, "tunnel"), - ConnectionType::Location => write!(f, "location"), - } - } -} +pub const VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), "-", env!("VERGEN_GIT_SHA")); +pub const PKG_VERSION: &str = env!("CARGO_PKG_VERSION"); #[macro_use] extern crate log; -/// Common fields for Tunnel and Location -#[derive(Debug, Serialize, Deserialize)] -pub struct CommonWireguardFields { - pub instance_id: Id, - // Native network ID from Defguard Core. - pub network_id: Id, - pub name: String, - pub address: String, - pub pubkey: String, - pub endpoint: String, - pub allowed_ips: String, - pub dns: Option, - pub route_all_traffic: bool, -} - -/// Common fields for Connection and TunnelConnection due to shared command -#[derive(Debug, Serialize, Deserialize)] -pub struct CommonConnection { - pub id: I, - pub location_id: Id, - pub start: NaiveDateTime, - pub end: NaiveDateTime, - pub connection_type: ConnectionType, -} - -// Common fields for LocationStats and TunnelStats due to shared command -#[derive(Debug, Serialize, Deserialize)] -pub struct CommonLocationStats { - pub id: I, - pub location_id: Id, - pub upload: i64, - pub download: i64, - pub last_handshake: i64, - pub collected_at: NaiveDateTime, - pub listen_port: u32, - pub persistent_keepalive_interval: Option, - pub connection_type: ConnectionType, -} - -// Common fields for ConnectionInfo and TunnelConnectionInfo due to shared command -#[derive(Debug, Serialize)] -pub struct CommonConnectionInfo { - pub id: Id, - pub location_id: Id, - pub start: NaiveDateTime, - pub end: NaiveDateTime, - pub upload: Option, - pub download: Option, +/// Converts a tauri emit result into our error type. +#[must_use] +pub fn tauri_err_to_app_err(e: tauri::Error) -> defguard_client_core::error::Error { + defguard_client_core::error::Error::Tauri(e.to_string()) } diff --git a/src-tauri/src/periodic/connection.rs b/src-tauri/src/periodic/connection.rs index 38d0e0707..a9f4c102d 100644 --- a/src-tauri/src/periodic/connection.rs +++ b/src-tauri/src/periodic/connection.rs @@ -1,11 +1,11 @@ use std::time::Duration; use chrono::{NaiveDateTime, TimeDelta, Utc}; +use defguard_client_core::connection::active_connections::ACTIVE_CONNECTIONS; use tauri::{AppHandle, Manager}; use tokio::time::interval; use crate::{ - active_connections::ACTIVE_CONNECTIONS, appstate::AppState, commands::{connect, disconnect}, database::{ diff --git a/src-tauri/src/proto.rs b/src-tauri/src/proto.rs deleted file mode 100644 index b89eb1cf7..000000000 --- a/src-tauri/src/proto.rs +++ /dev/null @@ -1,59 +0,0 @@ -use crate::database::models::{ - location::{ - infer_mfa_method, Location, LocationMfaMode as MfaMode, - ServiceLocationMode as SLocationMode, - }, - Id, NoId, -}; - -pub(crate) mod defguard { - pub(crate) use crate::service::proto::defguard::client_types; - - pub(crate) mod proxy { - pub(crate) mod v1 { - tonic::include_proto!("defguard.proxy.v1"); - } - } -} - -impl defguard::client_types::DeviceConfig { - #[must_use] - pub(crate) fn into_location(self, instance_id: Id) -> Location { - let location_mfa_mode = match self.location_mfa_mode { - Some(_location_mfa_mode) => self.location_mfa_mode().into(), - None => { - // handle legacy core response - // DEPRECATED(1.5): superseeded by location_mfa_mode - #[allow(deprecated)] - if self.mfa_enabled { - MfaMode::Internal - } else { - MfaMode::Disabled - } - } - }; - - let service_location_mode = match self.service_location_mode { - Some(_service_location_mode) => self.service_location_mode().into(), - None => SLocationMode::Disabled, // Default to disabled if not set - }; - - Location { - id: NoId, - instance_id, - network_id: self.network_id, - name: self.network_name, - address: self.assigned_ip, // Transforming assigned_ip to address - pubkey: self.pubkey, - endpoint: self.endpoint, - allowed_ips: self.allowed_ips, - dns: self.dns, - route_all_traffic: false, - keepalive_interval: self.keepalive_interval.into(), - location_mfa_mode, - service_location_mode, - mfa_method: infer_mfa_method(location_mfa_mode, None), - posture_check_required: self.posture_check_required.unwrap_or_default(), - } - } -} diff --git a/src-tauri/src/service/client.rs b/src-tauri/src/service/client.rs deleted file mode 100644 index 1897e2b10..000000000 --- a/src-tauri/src/service/client.rs +++ /dev/null @@ -1,70 +0,0 @@ -use std::sync::LazyLock; - -use hyper_util::rt::TokioIo; -#[cfg(windows)] -use tokio::net::windows::named_pipe::ClientOptions; -#[cfg(unix)] -use tokio::net::UnixStream; -use tonic::transport::channel::{Channel, Endpoint}; -#[cfg(unix)] -use tonic::transport::Uri; -use tower::service_fn; -#[cfg(windows)] -use windows_sys::Win32::Foundation::ERROR_PIPE_BUSY; - -use crate::service::proto::defguard::client::v1::desktop_daemon_service_client::DesktopDaemonServiceClient; - -#[cfg(unix)] -use super::daemon::DAEMON_SOCKET_PATH; -#[cfg(windows)] -use super::named_pipe::PIPE_NAME; - -pub(crate) static DAEMON_CLIENT: LazyLock> = - LazyLock::new(|| { - debug!("Setting up gRPC client"); - // URL is ignored since we provide our own connectors for unix socket and windows named pipes. - let endpoint = Endpoint::from_static("http://localhost"); - let channel; - #[cfg(unix)] - { - channel = endpoint.connect_with_connector_lazy(service_fn(|_: Uri| async { - // Connect to a Unix domain socket. - let stream = match UnixStream::connect(DAEMON_SOCKET_PATH).await { - Ok(stream) => stream, - Err(err) if err.kind() == std::io::ErrorKind::PermissionDenied => { - error!( - "Permission denied for UNIX domain socket; please refer to \ - https://docs.defguard.net/support-1/troubleshooting#\ - unix-socket-permission-errors-when-desktop-client-attempts-to-connect-\ - to-vpn-on-linux-machines" - ); - return Err(err); - } - Err(err) => { - error!("Problem connecting to UNIX domain socket: {err}"); - return Err(err); - } - }; - info!("Created unix gRPC client"); - Ok::<_, std::io::Error>(TokioIo::new(stream)) - })); - }; - #[cfg(windows)] - { - channel = endpoint.connect_with_connector_lazy(service_fn(|_| async { - let client = loop { - match ClientOptions::new().open(PIPE_NAME) { - Ok(client) => break client, - Err(err) if err.raw_os_error() == Some(ERROR_PIPE_BUSY as i32) => (), - Err(err) => { - error!("Problem connecting to named pipe: {err}"); - return Err(err); - } - } - }; - info!("Created windows gRPC client"); - Ok::<_, std::io::Error>(TokioIo::new(client)) - })); - } - DesktopDaemonServiceClient::new(channel) - }); diff --git a/src-tauri/src/service/mod.rs b/src-tauri/src/service/mod.rs index 345d068d8..472f7fce9 100644 --- a/src-tauri/src/service/mod.rs +++ b/src-tauri/src/service/mod.rs @@ -1,155 +1,2 @@ -#[cfg(not(target_os = "macos"))] -pub mod client; pub mod config; -pub mod proto; - -#[cfg(not(target_os = "macos"))] -pub mod daemon; -#[cfg(windows)] -pub mod named_pipe; pub mod utils; -#[cfg(windows)] -pub mod windows; - -use std::{ - str::FromStr, - time::{Duration, UNIX_EPOCH}, -}; - -use defguard_wireguard_rs::{ - host::Host, key::Key, net::IpAddrMask, peer::Peer, InterfaceConfiguration, -}; - -use crate::service::proto::defguard::client::v1::{ - InterfaceConfig, InterfaceData, Peer as ProtoPeer, -}; - -impl From for InterfaceConfig { - fn from(config: InterfaceConfiguration) -> Self { - Self { - name: config.name, - prvkey: config.prvkey, - address: config - .addresses - .iter() - .map(ToString::to_string) - .collect::>() - .join(","), - port: u32::from(config.port), - peers: config.peers.into_iter().map(Into::into).collect(), - mtu: config.mtu, - } - } -} - -impl From for InterfaceConfiguration { - fn from(config: InterfaceConfig) -> Self { - let addresses = config - .address - .split(',') - .filter_map(|ip| IpAddrMask::from_str(ip.trim()).ok()) - .collect(); - Self { - name: config.name, - prvkey: config.prvkey, - addresses, - port: config.port as u16, - peers: config.peers.into_iter().map(Into::into).collect(), - mtu: config.mtu, - fwmark: None, // TODO: add to config - } - } -} - -impl From for ProtoPeer { - fn from(peer: Peer) -> Self { - Self { - public_key: peer.public_key.to_lower_hex(), - preshared_key: peer.preshared_key.map(|key| key.to_lower_hex()), - protocol_version: peer.protocol_version, - endpoint: peer.endpoint.map(|addr| addr.to_string()), - last_handshake: peer.last_handshake.map(|time| { - time.duration_since(UNIX_EPOCH) - .expect("Time went backwards") - .as_secs() - }), - tx_bytes: peer.tx_bytes, - rx_bytes: peer.rx_bytes, - persistent_keepalive_interval: peer.persistent_keepalive_interval.map(u32::from), - allowed_ips: peer - .allowed_ips - .into_iter() - .map(|addr| addr.to_string()) - .collect(), - } - } -} - -impl From for Peer { - fn from(peer: ProtoPeer) -> Self { - Self { - public_key: Key::decode(peer.public_key).expect("Failed to parse public key"), - preshared_key: peer - .preshared_key - .map(|key| Key::decode(key).expect("Failed to parse preshared key: {key}")), - protocol_version: peer.protocol_version, - endpoint: peer.endpoint.map(|addr| { - addr.parse() - .expect("Failed to parse endpoint address: {addr}") - }), - last_handshake: peer - .last_handshake - .map(|timestamp| UNIX_EPOCH + Duration::from_secs(timestamp)), - tx_bytes: peer.tx_bytes, - rx_bytes: peer.rx_bytes, - persistent_keepalive_interval: peer - .persistent_keepalive_interval - .and_then(|interval| u16::try_from(interval).ok()), - allowed_ips: peer - .allowed_ips - .into_iter() - .map(|addr| addr.parse().expect("Failed to parse allowed IP: {addr}")) - .collect(), - } - } -} - -impl From for InterfaceData { - fn from(host: Host) -> Self { - Self { - listen_port: u32::from(host.listen_port), - peers: host.peers.into_values().map(Into::into).collect(), - } - } -} - -#[cfg(test)] -mod tests { - use std::time::SystemTime; - - use x25519_dalek::{EphemeralSecret, PublicKey}; - - use super::*; - - #[test] - fn convert_peer() { - let secret = EphemeralSecret::random(); - let key = PublicKey::from(&secret); - let peer_key: Key = key.as_ref().try_into().unwrap(); - let mut base_peer = Peer::new(peer_key); - let addr = IpAddrMask::from_str("10.20.30.2/32").unwrap(); - base_peer.allowed_ips.push(addr); - // Workaround since nanoseconds are lost in conversion. - base_peer.last_handshake = Some(SystemTime::UNIX_EPOCH); - base_peer.protocol_version = Some(3); - base_peer.endpoint = Some("127.0.0.1:8080".parse().unwrap()); - base_peer.tx_bytes = 100; - base_peer.rx_bytes = 200; - - let proto_peer: ProtoPeer = base_peer.clone().into(); - - let converted_peer: Peer = proto_peer.into(); - - assert_eq!(base_peer, converted_peer); - } -} diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index daa0bf0f1..6a1019b76 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -6,12 +6,14 @@ use tauri::{ AppHandle, Emitter, Manager, Runtime, }; +use defguard_client_core::connection::active_connections::{ + get_connection_id_by_type, ACTIVE_CONNECTIONS, +}; use tauri::tray::{MouseButton, MouseButtonState, TrayIconEvent}; #[cfg(not(target_os = "linux"))] use crate::window_manager::WindowManager; use crate::{ - active_connections::{get_connection_id_by_type, ACTIVE_CONNECTIONS}, appstate::AppState, commands::{all_instances, all_locations, connect, disconnect}, database::{models::location::Location, DB_POOL}, @@ -52,24 +54,30 @@ fn store_tray_click_position(app: &AppHandle, event: &TrayIconEvent) { /// Generate contents of system tray menu. async fn generate_tray_menu(app: &AppHandle) -> Result, Error> { debug!("Generating tray menu."); - let quit = MenuItem::with_id(app, TRAY_EVENT_QUIT, "Quit", true, None::<&str>)?; - let show = MenuItem::with_id(app, TRAY_EVENT_SHOW, "Show", true, None::<&str>)?; - let hide = MenuItem::with_id(app, TRAY_EVENT_HIDE, "Hide", true, None::<&str>)?; + let quit = MenuItem::with_id(app, TRAY_EVENT_QUIT, "Quit", true, None::<&str>) + .map_err(crate::tauri_err_to_app_err)?; + let show = MenuItem::with_id(app, TRAY_EVENT_SHOW, "Show", true, None::<&str>) + .map_err(crate::tauri_err_to_app_err)?; + let hide = MenuItem::with_id(app, TRAY_EVENT_HIDE, "Hide", true, None::<&str>) + .map_err(crate::tauri_err_to_app_err)?; let subscribe_updates = MenuItem::with_id( app, TRAY_EVENT_UPDATES, "Subscribe for updates", true, None::<&str>, - )?; + ) + .map_err(crate::tauri_err_to_app_err)?; let join_community = MenuItem::with_id( app, TRAY_EVENT_COMMUNITY, "Community support", true, None::<&str>, - )?; - let follow_us = MenuItem::with_id(app, TRAY_EVENT_FOLLOW, "Follow us", true, None::<&str>)?; + ) + .map_err(crate::tauri_err_to_app_err)?; + let follow_us = MenuItem::with_id(app, TRAY_EVENT_FOLLOW, "Follow us", true, None::<&str>) + .map_err(crate::tauri_err_to_app_err)?; let mut menu = MenuBuilder::new(app); debug!("Getting all instances information for the tray menu"); @@ -94,7 +102,8 @@ async fn generate_tray_menu(app: &AppHandle) -> Result, Error location.menu_label(), true, None::<&str>, - )?; + ) + .map_err(crate::tauri_err_to_app_err)?; menu = menu.item(&menu_item); } } else { @@ -114,10 +123,11 @@ async fn generate_tray_menu(app: &AppHandle) -> Result, Error location.menu_label(), true, None::<&str>, - )?; + ) + .map_err(crate::tauri_err_to_app_err)?; instance_menu = instance_menu.item(&menu_item); } - let submenu = instance_menu.build()?; + let submenu = instance_menu.build().map_err(crate::tauri_err_to_app_err)?; menu = menu.item(&submenu); } } @@ -127,14 +137,14 @@ async fn generate_tray_menu(app: &AppHandle) -> Result, Error } } - Ok(menu - .separator() + menu.separator() .items(&[&show, &hide]) .separator() .items(&[&subscribe_updates, &join_community, &follow_us]) .separator() .item(&quit) - .build()?) + .build() + .map_err(crate::tauri_err_to_app_err) } /// Setup system tray. @@ -197,8 +207,8 @@ pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { } }) .on_menu_event(handle_tray_menu_event) - .build(app)?; - + .build(app) + .map_err(crate::tauri_err_to_app_err)?; debug!("Tray menu successfully generated"); Ok(()) } @@ -296,8 +306,10 @@ pub async fn configure_tray_icon(app_handle: &AppHandle) -> Result<(), Error> { .path() .resolve(&resource_str, BaseDirectory::Resource) { - let icon = Image::from_path(icon_path)?; - tray_icon.set_icon(Some(icon))?; + let icon = Image::from_path(icon_path).map_err(crate::tauri_err_to_app_err)?; + tray_icon + .set_icon(Some(icon)) + .map_err(crate::tauri_err_to_app_err)?; debug!("Tray icon set to {resource_str} successfully."); Ok(()) } else { diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index 6f6bd3b47..732ab902a 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -1,19 +1,25 @@ #[cfg(not(target_os = "macos"))] use std::str::FromStr; -use std::{env, path::Path, process::Command, time::Duration}; +#[cfg(target_os = "macos")] +use std::time::Duration; +use std::{env, path::Path, process::Command}; -use base64::{prelude::BASE64_STANDARD, Engine}; #[cfg(not(target_os = "macos"))] -use common::{find_free_tcp_port, get_interface_name}; +use defguard_client_common::{find_free_tcp_port, get_interface_name}; +#[cfg(windows)] +use defguard_client_core::connection::active_connections::find_connection; +#[cfg(not(target_os = "macos"))] +use defguard_client_core::{ + connection::daemon_client::DAEMON_CLIENT, DEFAULT_ROUTE_IPV4, DEFAULT_ROUTE_IPV6, +}; +#[cfg(not(target_os = "macos"))] +use defguard_client_proto::defguard::client::v1::{ + CreateInterfaceRequest, ReadInterfaceDataRequest, +}; #[cfg(not(target_os = "macos"))] use defguard_wireguard_rs::{key::Key, net::IpAddrMask, peer::Peer, InterfaceConfiguration}; -use prost::Message; -use reqwest::{Client, Response}; -use serde::Serialize; use sqlx::query; use tauri::{AppHandle, Emitter, Manager}; -#[cfg(not(target_os = "macos"))] -use tonic::Code; use tracing::Level; #[cfg(windows)] use windows_service::{ @@ -23,42 +29,25 @@ use windows_service::{ #[cfg(windows)] use windows_sys::Win32::Foundation::ERROR_SERVICE_DOES_NOT_EXIST; -#[cfg(windows)] -use crate::active_connections::find_connection; #[cfg(target_os = "macos")] use crate::apple::tunnel_stats; +#[cfg(not(target_os = "macos"))] +use crate::database::models::{ + location_stats::peer_to_location_stats, tunnel::peer_to_tunnel_stats, +}; use crate::{ appstate::AppState, commands::LocationInterfaceDetails, database::{ - models::{ - connection::{ActiveConnection, Connection}, - location::Location, - tunnel::{Tunnel, TunnelConnection}, - wireguard_keys::WireguardKeys, - Id, - }, + models::{location::Location, tunnel::Tunnel, wireguard_keys::WireguardKeys, Id}, DbPool, DB_POOL, }, error::Error, events::EventKey, log_watcher::service_log_watcher::spawn_log_watcher_task, - proto::defguard::client_types::ClientPlatformInfo, - ConnectionType, CLIENT_PLATFORM_HEADER, CLIENT_VERSION_HEADER, PKG_VERSION, -}; -#[cfg(not(target_os = "macos"))] -use crate::{ - database::models::{location_stats::peer_to_location_stats, tunnel::peer_to_tunnel_stats}, - service::{ - client::DAEMON_CLIENT, - proto::defguard::client::v1::{ - CreateInterfaceRequest, ReadInterfaceDataRequest, RemoveInterfaceRequest, - }, - }, + ConnectionType, }; -pub(crate) static DEFAULT_ROUTE_IPV4: &str = "0.0.0.0/0"; -pub(crate) static DEFAULT_ROUTE_IPV6: &str = "::/0"; // Work-around MFA propagation delay. FIXME: remove once Core API is corrected. #[cfg(target_os = "macos")] static TUNNEL_START_DELAY: Duration = Duration::from_secs(1); @@ -72,59 +61,7 @@ pub(crate) async fn setup_interface( mtu: Option, pool: &DbPool, ) -> Result { - debug!("Setting up interface for location: {location}"); - let interface_name = get_interface_name(name); - - // request interface configuration - debug!("Looking for a free port for interface {interface_name}."); - let Some(port) = find_free_tcp_port() else { - let msg = format!( - "Couldn't find free port during interface {interface_name} setup for location \ - {location}" - ); - error!("{msg}"); - return Err(Error::InternalError(msg)); - }; - debug!("Found free port: {port} for interface {interface_name}."); - - let mut interface_config = location - .interface_configuration(pool, interface_name.clone(), preshared_key, mtu) - .await?; - interface_config.mtu = mtu; - debug!("Creating interface for location {location} with configuration {interface_config:?}"); - let request = CreateInterfaceRequest { - config: Some(interface_config.clone().into()), - dns: location.dns.clone(), - }; - if let Err(error) = DAEMON_CLIENT.clone().create_interface(request).await { - if error.code() == Code::Unavailable { - error!( - "Failed to set up connection for location {location}; background service is \ - unavailable. Make sure the service is running. Error: {error}, Interface \ - configuration: {interface_config:?}" - ); - Err(Error::InternalError( - "Background service is unavailable. Make sure the service is running.".into(), - )) - } else { - error!( - "Failed to send a request to the background service to create an interface for \ - location {location} with the following configuration: {interface_config:?}. \ - Error: {error}" - ); - Err(Error::InternalError(format!( - "Failed to send a request to the background service to create an interface for \ - location {location}. Error: {error}. Check logs for details." - ))) - } - } else { - info!( - "The interface for location {location} has been created successfully, interface \ - name: {}.", - interface_config.name - ); - Ok(interface_name) - } + crate::connection::setup::setup_interface(location, name, preshared_key, mtu, pool).await } #[cfg(target_os = "macos")] @@ -135,7 +72,7 @@ pub(crate) async fn setup_interface( mtu: Option, _pool: &DbPool, ) -> Result { - let tunnel_config = location.tunnel_configurarion(preshared_key, mtu).await?; + let tunnel_config = location.tunnel_configuration(preshared_key, mtu).await?; tunnel_config.save(); tokio::time::sleep(TUNNEL_START_DELAY).await; @@ -530,7 +467,7 @@ pub async fn setup_interface_tunnel( ) -> Result { debug!("Setting up interface for tunnel: {tunnel}"); - let tunnel_config = tunnel.tunnel_configurarion(mtu)?; + let tunnel_config = tunnel.tunnel_configuration(mtu)?; tunnel_config.save(); tokio::time::sleep(TUNNEL_START_DELAY).await; @@ -689,7 +626,9 @@ pub(crate) async fn handle_connection_for_location( .await; debug!("Sending event informing the frontend that a new connection has been created."); - handle.emit(EventKey::ConnectionChanged.into(), ())?; + handle + .emit(EventKey::ConnectionChanged.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; debug!("Event informing the frontend that a new connection has been created sent."); // spawn log watcher @@ -725,7 +664,9 @@ pub(crate) async fn handle_connection_for_tunnel( .await; debug!("Sending event informing the frontend that a new connection has been created."); - handle.emit(EventKey::ConnectionChanged.into(), ())?; + handle + .emit(EventKey::ConnectionChanged.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; debug!("Event informing the frontend that a new connection has been created sent."); // spawn log watcher @@ -766,164 +707,6 @@ pub fn execute_command(command: &str) -> Result<(), Error> { } Ok(()) } - -/// Helper function to remove interface and close connection -pub(crate) async fn disconnect_interface( - active_connection: &ActiveConnection, -) -> Result<(), Error> { - debug!( - "Disconnecting interface {}.", - active_connection.interface_name - ); - let location_id = active_connection.location_id; - let interface_name = active_connection.interface_name.clone(); - - match active_connection.connection_type { - ConnectionType::Location => { - let Some(location) = Location::find_by_id(&*DB_POOL, location_id).await? else { - error!( - "Error while disconnecting interface {interface_name}, location with ID \ - {location_id} not found" - ); - return Err(Error::NotFound); - }; - - #[cfg(target_os = "macos")] - { - let result = location.stop_vpn_tunnel(); - error!( - "stop_tunnel() for location {} returned {result:?}", - location.name - ); - if !result { - return Err(Error::InternalError("Error from tunnel".into())); - } - } - - #[cfg(not(target_os = "macos"))] - { - let request = RemoveInterfaceRequest { - interface_name, - endpoint: location.endpoint.clone(), - }; - debug!( - "Sending request to the background service to remove interface {} for location \ - {}...", - active_connection.interface_name, location.name - ); - if let Err(error) = DAEMON_CLIENT.clone().remove_interface(request).await { - let msg = if error.code() == Code::Unavailable { - format!( - "Couldn't remove interface {}. Background service is unavailable. \ - Please make sure the service is running. Error: {error}.", - active_connection.interface_name - ) - } else { - format!( - "Failed to send a request to the background service to remove interface \ - {}. Error: {error}.", - active_connection.interface_name - ) - }; - error!("{msg}"); - } - } - - let connection: Connection = active_connection.into(); - let connection = connection.save(&*DB_POOL).await?; - debug!( - "Saved location {} new connection status in the database", - location.name - ); - trace!("Saved connection: {connection:?}"); - info!( - "Network interface {} for location {location} has been removed", - active_connection.interface_name - ); - debug!("Finished disconnecting from location {}", location.name); - } - ConnectionType::Tunnel => { - let Some(tunnel) = Tunnel::find_by_id(&*DB_POOL, location_id).await? else { - error!( - "Error while disconnecting interface {interface_name}, tunnel with ID \ - {location_id} not found" - ); - return Err(Error::NotFound); - }; - if let Some(pre_down) = &tunnel.pre_down { - debug!( - "Executing defined PreDown command before setting up the interface {} for the \ - tunnel {tunnel}: {pre_down}", - active_connection.interface_name - ); - let _ = execute_command(pre_down); - info!( - "Executed defined PreDown command before setting up the interface {} for the \ - tunnel {tunnel}: {pre_down}", - active_connection.interface_name - ); - } - - #[cfg(target_os = "macos")] - { - let result = tunnel.stop_vpn_tunnel(); - error!( - "stop_tunnel() for tunnel {} returned {result:?}", - tunnel.name - ); - if !result { - return Err(Error::InternalError("Error from tunnel".into())); - } - } - - #[cfg(not(target_os = "macos"))] - { - let request = RemoveInterfaceRequest { - interface_name, - endpoint: tunnel.endpoint.clone(), - }; - if let Err(error) = DAEMON_CLIENT.clone().remove_interface(request).await { - error!( - "Error while removing interface {}, error details: {error:?}", - active_connection.interface_name - ); - return Err(Error::InternalError(format!( - "Failed to remove interface, error message: {}", - error.message() - ))); - } - } - if let Some(post_down) = &tunnel.post_down { - debug!( - "Executing defined PostDown command after removing the interface {} for the \ - tunnel {tunnel}: {post_down}", - active_connection.interface_name - ); - let _ = execute_command(post_down); - info!( - "Executed defined PostDown command after removing the interface {} for the \ - tunnel {tunnel}: {post_down}", - active_connection.interface_name - ); - } - let connection: TunnelConnection = active_connection.into(); - let connection = connection.save(&*DB_POOL).await?; - debug!( - "Saved new tunnel {} connection status in the database", - tunnel.name - ); - trace!("Saved connection: {connection:#?}"); - info!( - "Network interface {} for tunnel {tunnel} has been removed", - active_connection.interface_name - ); - debug!("Finished disconnecting from tunnel {}", tunnel.name); - } - } - - Ok(()) -} - /// Helper function to get the name of a tunnel or location by its ID /// Returns the name of the tunnel or location if it exists, otherwise "UNKNOWN" /// This is for logging purposes. @@ -1016,7 +799,9 @@ async fn check_connection( .await; debug!("Sending event informing the frontend that a new connection has been created."); - app_handle.emit(EventKey::ConnectionChanged.into(), ())?; + app_handle + .emit(EventKey::ConnectionChanged.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; debug!("Event informing the frontend that a new connection has been created sent."); debug!("Spawning service log watcher for {connection_type} {name}..."); @@ -1089,27 +874,6 @@ pub async fn sync_connections(app_handle: &AppHandle) -> Result<(), Error> { Ok(()) } -#[must_use] -pub(crate) fn construct_platform_header() -> String { - let os = os_info::get(); - - let platform_info = ClientPlatformInfo { - os_family: env::consts::FAMILY.to_string(), - os_type: env::consts::OS.to_string(), - version: os.version().to_string(), - edition: os.edition().map(str::to_string), - codename: os.codename().map(str::to_string), - bitness: Some(os.bitness().to_string()), - architecture: Some(env::consts::ARCH.to_string()), - }; - - debug!("Constructed platform info header: {platform_info:?}"); - - let buffer = platform_info.encode_to_vec(); - - BASE64_STANDARD.encode(buffer) -} - #[must_use] /// Utility function to get all tunnels and locations from the database. #[cfg(target_os = "macos")] @@ -1118,21 +882,3 @@ pub async fn get_all_tunnels_locations() -> (Vec>, Vec>) let locations = Location::all(&*DB_POOL, false).await.unwrap_or_default(); (tunnels, locations) } - -const HTTP_REQ_TIMEOUT: Duration = Duration::from_secs(5); -pub(crate) async fn post_with_headers( - url: tauri::Url, - data: &T, -) -> Result -where - T: Serialize + ?Sized, -{ - Client::new() - .post(url) - .json(data) - .header(CLIENT_VERSION_HEADER, PKG_VERSION) - .header(CLIENT_PLATFORM_HEADER, construct_platform_header()) - .timeout(HTTP_REQ_TIMEOUT) - .send() - .await -} diff --git a/src-tauri/tauri.linux.conf.json b/src-tauri/tauri.linux.conf.json index 8e0c32086..c2753d760 100644 --- a/src-tauri/tauri.linux.conf.json +++ b/src-tauri/tauri.linux.conf.json @@ -1,10 +1,5 @@ { "productName": "defguard-client", - "build": { - "features": [ - "service" - ] - }, "bundle": { "longDescription": "IMPORTANT: Reboot or Re-login Required\nOn initial install the user is added to the defguard group.\nA reboot or logging out and back in is required for group membership changes to take effect.\nThis is not required on subsequent updates." } diff --git a/src-tauri/tauri.windows.conf.json b/src-tauri/tauri.windows.conf.json index eb86e8c78..826c27e7d 100644 --- a/src-tauri/tauri.windows.conf.json +++ b/src-tauri/tauri.windows.conf.json @@ -1,9 +1,4 @@ { - "build": { - "features": [ - "service" - ] - }, "bundle": { "targets": [ "msi" From 989df9efb745a273506bc66c9177279c07e6904d Mon Sep 17 00:00:00 2001 From: Jacek Chmielewski Date: Thu, 11 Jun 2026 10:36:13 +0200 Subject: [PATCH 036/155] Posture checks CI (#945) --- .github/workflows/posture.yaml | 123 ++++++++++++++++++ src-tauri/enterprise/posture/Cargo.toml | 2 +- .../posture/src/inspector/tests/ci/linux.rs | 75 +++++++++++ .../posture/src/inspector/tests/ci/macos.rs | 41 ++++++ .../posture/src/inspector/tests/ci/mod.rs | 6 + .../posture/src/inspector/tests/ci/windows.rs | 122 +++++++++++++++++ .../posture/src/inspector/tests/mod.rs | 1 + .../posture/src/inspector/windows.rs | 47 ++++++- 8 files changed, 413 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/posture.yaml create mode 100644 src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs create mode 100644 src-tauri/enterprise/posture/src/inspector/tests/ci/macos.rs create mode 100644 src-tauri/enterprise/posture/src/inspector/tests/ci/mod.rs create mode 100644 src-tauri/enterprise/posture/src/inspector/tests/ci/windows.rs diff --git a/.github/workflows/posture.yaml b/.github/workflows/posture.yaml new file mode 100644 index 000000000..c4c1ab74a --- /dev/null +++ b/.github/workflows/posture.yaml @@ -0,0 +1,123 @@ +name: "Test posture checks gathering" +on: + push: + branches: + - main + - dev + - 'release/**' + paths-ignore: + - '*.md' + - 'LICENSE' + +env: + CARGO_TERM_COLOR: always + SQLX_OFFLINE: "1" + SCCACHE_GHA_ENABLED: "true" + RUSTC_WRAPPER: "sccache" + +jobs: + + test-linux-postures-unencrypted: + name: Linux postures - unencrypted + runs-on: + - codebuild-defguard-posture-linux-runner-${{ github.run_id }}-${{ github.run_attempt }} + steps: + - uses: actions/checkout@v6 + with: + submodules: recursive + + - uses: dtolnay/rust-toolchain@stable + + - name: Install dependencies + env: + DEBIAN_FRONTEND: noninteractive + run: | + apt-get update + apt-get install -y --no-install-recommends build-essential libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf libssl-dev libxdo-dev unzip protobuf-compiler libprotobuf-dev rpm cryptsetup-bin util-linux + + - uses: mozilla-actions/sccache-action@v0.0.10 + + - name: Run tests + working-directory: src-tauri/ + run: | + cargo test -p defguard-client-posture --locked --lib inspector::tests::ci::linux -- --ignored + + - name: Show sccache stats + run: sccache --show-stats + + test-windows-postures-setup1: + name: Windows postures - setup1 + runs-on: + - self-hosted + - X64 + - Windows + - noad + steps: + + - uses: actions/checkout@v6 + with: + submodules: recursive + + - uses: dtolnay/rust-toolchain@stable + + - uses: mozilla-actions/sccache-action@v0.0.10 + + - name: Run tests + working-directory: src-tauri/ + shell: cmd + run: | + cargo test -p defguard-client-posture --locked --lib inspector::tests::ci::windows::setup1 -- --ignored + + - name: Show sccache stats + run: sccache --show-stats + + test-windows-postures-setup2: + name: Windows postures - setup2 + runs-on: + - self-hosted + - X64 + - Windows + - ad + steps: + + - uses: actions/checkout@v6 + with: + submodules: recursive + + - uses: dtolnay/rust-toolchain@stable + + - uses: mozilla-actions/sccache-action@v0.0.10 + + - name: Run tests + working-directory: src-tauri/ + shell: cmd + run: | + cargo test -p defguard-client-posture --locked --lib inspector::tests::ci::windows::setup2 -- --ignored + + - name: Show sccache stats + run: sccache --show-stats + + test-macos-postures-unencrypted: + name: MacOS postures - unencrypted + runs-on: + - self-hosted + - macOS + steps: + - uses: actions/checkout@v6 + with: + submodules: recursive + + - name: Install Rust stable + uses: dtolnay/rust-toolchain@stable + with: + targets: aarch64-apple-darwin,x86_64-apple-darwin + + - uses: mozilla-actions/sccache-action@v0.0.10 + + - name: Run tests + working-directory: src-tauri/ + run: | + cargo test -p defguard-client-posture --locked --lib inspector::tests::ci::macos -- --ignored + + - name: Show sccache stats + run: sccache --show-stats diff --git a/src-tauri/enterprise/posture/Cargo.toml b/src-tauri/enterprise/posture/Cargo.toml index 63d41ed94..eac4b9655 100644 --- a/src-tauri/enterprise/posture/Cargo.toml +++ b/src-tauri/enterprise/posture/Cargo.toml @@ -25,5 +25,5 @@ sysinfo = { version = "0.39", default-features = false, features = ["system"] } [target.'cfg(windows)'.dependencies] sysinfo = { version = "0.39", default-features = false, features = ["system"] } -time = { version = "0.3", features = ["formatting", "macros"] } +time = { version = "0.3", features = ["formatting", "macros", "serde"] } wmi = { version = "0.18", default-features = false } diff --git a/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs b/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs new file mode 100644 index 000000000..541e98385 --- /dev/null +++ b/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs @@ -0,0 +1,75 @@ +use super::super::super::{disk_encryption_status, linux_kernel_version, os_name, os_version}; +use std::process::Command; + +fn expected_kernel_version() -> String { + let output = Command::new("uname") + .arg("-r") + .output() + .expect("failed to execute uname -r"); + assert!(output.status.success(), "uname -r failed: {output:?}"); + + String::from_utf8(output.stdout) + .expect("uname -r returned non-UTF8 output") + .trim() + .to_owned() +} + +fn expected_os_version() -> String { + if let Ok(os_release) = std::fs::read_to_string("/etc/os-release") { + if let Some(value) = os_release + .lines() + .find_map(|line| line.strip_prefix("VERSION_ID=")) + { + return value.replace('"', ""); + } + } + let lsb_release = + std::fs::read_to_string("/etc/lsb-release").expect("failed to read /etc/lsb-release"); + lsb_release + .lines() + .find_map(|line| line.strip_prefix("DISTRIB_RELEASE=")) + .map(|value| value.replace('"', "")) + .expect("DISTRIB_RELEASE missing from /etc/lsb-release") +} + +fn expected_os_name() -> String { + if let Ok(os_release) = std::fs::read_to_string("/etc/os-release") { + if let Some(value) = os_release + .lines() + .find_map(|line| line.strip_prefix("NAME=")) + { + return value.replace('"', ""); + } + } + let lsb_release = + std::fs::read_to_string("/etc/lsb-release").expect("failed to read /etc/lsb-release"); + lsb_release + .lines() + .find_map(|line| line.strip_prefix("DISTRIB_ID=")) + .map(|value| value.replace('"', "")) + .expect("DISTRIB_ID missing from /etc/lsb-release") +} + +#[test] +#[ignore = "CI posture testing only"] +fn test_linux_os_name() { + assert_eq!(os_name().unwrap(), expected_os_name()); +} + +#[test] +#[ignore = "CI posture testing only"] +fn test_linux_os_version() { + assert_eq!(os_version().unwrap(), expected_os_version()); +} + +#[test] +#[ignore = "CI posture testing only"] +fn test_linux_kernel_version() { + assert_eq!(linux_kernel_version().unwrap(), expected_kernel_version()); +} + +#[test] +#[ignore = "CI posture testing only"] +fn test_disk_encryption_status_unencrypted() { + assert_eq!(disk_encryption_status().unwrap(), false); +} diff --git a/src-tauri/enterprise/posture/src/inspector/tests/ci/macos.rs b/src-tauri/enterprise/posture/src/inspector/tests/ci/macos.rs new file mode 100644 index 000000000..0b385d815 --- /dev/null +++ b/src-tauri/enterprise/posture/src/inspector/tests/ci/macos.rs @@ -0,0 +1,41 @@ +use super::super::super::{device_integrity, disk_encryption_status, os_name, os_version}; +use std::process::Command; + +fn expected_os_version() -> String { + let output = Command::new("sw_vers") + .arg("-productVersion") + .output() + .expect("failed to execute sw_vers -productVersion"); + assert!( + output.status.success(), + "sw_vers -productVersion failed: {output:?}" + ); + String::from_utf8(output.stdout) + .expect("sw_vers returned non-UTF8 output") + .trim() + .to_owned() +} + +#[test] +#[ignore = "CI posture testing only"] +fn test_os_name() { + assert_eq!(os_name().unwrap(), "Darwin"); +} + +#[test] +#[ignore = "CI posture testing only"] +fn test_os_version() { + assert_eq!(os_version().unwrap(), expected_os_version()); +} + +#[test] +#[ignore = "CI posture testing only"] +fn test_device_integrity() { + assert_eq!(device_integrity().unwrap(), true); +} + +#[test] +#[ignore = "CI posture testing only"] +fn test_disk_encryption_status_unencrypted() { + assert_eq!(disk_encryption_status().unwrap(), false); +} diff --git a/src-tauri/enterprise/posture/src/inspector/tests/ci/mod.rs b/src-tauri/enterprise/posture/src/inspector/tests/ci/mod.rs new file mode 100644 index 000000000..0337daa13 --- /dev/null +++ b/src-tauri/enterprise/posture/src/inspector/tests/ci/mod.rs @@ -0,0 +1,6 @@ +#[cfg(target_os = "linux")] +mod linux; +#[cfg(target_os = "macos")] +mod macos; +#[cfg(windows)] +mod windows; diff --git a/src-tauri/enterprise/posture/src/inspector/tests/ci/windows.rs b/src-tauri/enterprise/posture/src/inspector/tests/ci/windows.rs new file mode 100644 index 000000000..7255b9a3b --- /dev/null +++ b/src-tauri/enterprise/posture/src/inspector/tests/ci/windows.rs @@ -0,0 +1,122 @@ +use std::process::Command; + +fn expected_security_update_age_days() -> i32 { + let output = Command::new("powershell") + .args([ + "-NoProfile", + "-Command", + r#" + $today = (Get-Date).ToUniversalTime().Date + Get-CimInstance Win32_QuickFixEngineering | + Where-Object { $_.InstalledOn } | + ForEach-Object { ($today - ([datetime]$_.InstalledOn).Date).Days } | + Sort-Object | + Select-Object -First 1 + "#, + ]) + .output() + .expect("failed to query Windows security updates"); + assert!( + output.status.success(), + "PowerShell query failed: {output:?}" + ); + String::from_utf8(output.stdout) + .expect("PowerShell returned non-UTF8 output") + .trim() + .parse() + .expect("PowerShell did not return an integer update age") +} + +mod setup1 { + use super::super::super::super::{ + anti_virus_status, disk_encryption_status, os_name, os_version, part_of_domain, + security_update_age_days, + }; + use super::expected_security_update_age_days; + + #[test] + #[ignore = "CI posture testing only"] + fn test_os_name() { + assert_eq!(os_name().unwrap(), "Windows"); + } + + #[test] + #[ignore = "CI posture testing only"] + fn test_os_version() { + assert_eq!(os_version().unwrap(), "11"); + } + + #[test] + #[ignore = "CI posture testing only"] + fn test_anti_virus_status_on() { + assert_eq!(anti_virus_status().unwrap(), true); + } + + #[test] + #[ignore = "CI posture testing only"] + fn test_part_of_domain_false() { + assert_eq!(part_of_domain().unwrap(), false); + } + + #[test] + #[ignore = "CI posture testing only"] + fn test_security_update_age_days() { + assert_eq!( + security_update_age_days().unwrap(), + expected_security_update_age_days() + ); + } + + #[test] + #[ignore = "CI posture testing only"] + fn test_disk_encryption_status_unencrypted() { + assert_eq!(disk_encryption_status().unwrap(), false); + } +} + +mod setup2 { + use super::super::super::super::{ + anti_virus_status, disk_encryption_status, os_name, os_version, part_of_domain, + security_update_age_days, + }; + use super::expected_security_update_age_days; + + #[test] + #[ignore = "CI posture testing only"] + fn test_os_name() { + assert_eq!(os_name().unwrap(), "Windows"); + } + + #[test] + #[ignore = "CI posture testing only"] + fn test_os_version() { + assert_eq!(os_version().unwrap(), "11"); + } + + #[test] + #[ignore = "CI posture testing only"] + fn test_anti_virus_status_off() { + assert_eq!(anti_virus_status().unwrap(), false); + } + + #[test] + #[ignore = "CI posture testing only"] + fn test_part_of_domain_true() { + assert_eq!(part_of_domain().unwrap(), true); + } + + #[test] + #[ignore = "CI posture testing only"] + fn test_security_update_age_days() { + assert_eq!( + security_update_age_days().unwrap(), + expected_security_update_age_days() + ); + } + + #[test] + #[ignore = "CI posture testing only"] + fn test_disk_encryption_status_encrypted() { + assert_eq!(disk_encryption_status().unwrap(), true); + } +} diff --git a/src-tauri/enterprise/posture/src/inspector/tests/mod.rs b/src-tauri/enterprise/posture/src/inspector/tests/mod.rs index 0337daa13..7efa4fd9a 100644 --- a/src-tauri/enterprise/posture/src/inspector/tests/mod.rs +++ b/src-tauri/enterprise/posture/src/inspector/tests/mod.rs @@ -1,3 +1,4 @@ +mod ci; #[cfg(target_os = "linux")] mod linux; #[cfg(target_os = "macos")] diff --git a/src-tauri/enterprise/posture/src/inspector/windows.rs b/src-tauri/enterprise/posture/src/inspector/windows.rs index b0364eca7..42cf30b5e 100644 --- a/src-tauri/enterprise/posture/src/inspector/windows.rs +++ b/src-tauri/enterprise/posture/src/inspector/windows.rs @@ -18,9 +18,18 @@ struct Win32EncryptableVolume { #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct AntiVirusProduct { + display_name: String, product_state: u32, } +#[derive(Deserialize)] +#[serde(rename = "MSFT_MpComputerStatus")] +#[serde(rename_all = "PascalCase")] +struct MpComputerStatus { + antivirus_enabled: bool, + real_time_protection_enabled: bool, +} + #[derive(Deserialize)] #[serde(rename = "Win32_ComputerSystem")] #[serde(rename_all = "PascalCase")] @@ -88,6 +97,21 @@ pub(super) fn disk_encryption_status() -> Result { Err(UnavailableReason::DetectionFailed) } +fn antivirus_product_active(product_state: u32) -> bool { + (product_state & 0x0000_F000) == 0x0000_1000 +} + +fn defender_realtime_enabled() -> Result { + let conn = WMIConnection::with_namespace_path("root\\Microsoft\\Windows\\Defender")?; + let statuses: Vec = conn.query()?; + let status = statuses + .into_iter() + .next() + .ok_or(UnavailableReason::DetectionFailed)?; + + Ok(status.antivirus_enabled && status.real_time_protection_enabled) +} + /// Determine AntiVirus status. /// /// Check manually in PowerShell: @@ -95,12 +119,29 @@ pub(super) fn disk_encryption_status() -> Result { /// /// Equivalent to PowerShell command: /// `Get-WmiObject -Namespace "root\SecurityCenter2" -query "SELECT * FROM AntiVirusProduct"` +/// +/// For third-party products, SecurityCenter2's `productState` indicates whether protection is +/// active. Windows Defender can keep reporting an active product state even when real-time +/// protection is disabled, so Defender is verified with `MSFT_MpComputerStatus`. pub(super) fn anti_virus_status() -> Result { let conn = WMIConnection::with_namespace_path("root\\SecurityCenter2")?; let products: Vec = conn.query()?; - Ok(products - .iter() - .any(|product| (product.product_state & 0x0000_F000) == 0x0000_1000)) + + for product in products { + if !antivirus_product_active(product.product_state) { + continue; + } + + if product.display_name == "Windows Defender" { + if defender_realtime_enabled()? { + return Ok(true); + } + } else { + return Ok(true); + } + } + + Ok(false) } /// Check if this machine is part of an Active Directory domain. From fc9abff0e2b42794334db74c8babeafea5522122 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Fri, 12 Jun 2026 08:55:34 +0200 Subject: [PATCH 037/155] replace full view with new ui (#948) * spawn new full view from new-ui project * add views for full-view window * full view enrollment * fix styling on session-timeout * hook up proxy calls * fix mfa steps * fix enrollment api calls * refactor cleanup api definitions * add routes layout nav * Update style.scss * add overview page to full view * overview page selection * Add the new full view support page (#946) * support page * fix app width, cleanup old code * pnpm fix * change text * suggestions * implement overview page for full window * update nav logic * fix redirect when there is no locations to show in full window * remove build old ui from workflows --------- Co-authored-by: Aleksander <170264518+t-aleksander@users.noreply.github.com> --- .github/workflows/build-macos.yaml | 9 - .github/workflows/release.yaml | 4 - new-ui/.stylelintrc.json | 3 +- new-ui/package.json | 31 +- new-ui/pnpm-lock.yaml | 934 +++++++++--------- new-ui/pnpm-workspace.yaml | 5 + new-ui/src/app/day.ts | 2 + .../CompactEmptyPage/CompactEmptyPage.tsx | 2 +- .../CompactLocationsPage.tsx | 29 +- .../components/InstanceSwitcher.tsx | 10 +- .../compact/CompactLocationsPage/style.scss | 21 +- .../full/AddInstancePage/AddInstancePage.tsx | 138 +++ .../src/pages/full/AddInstancePage/style.scss | 20 + new-ui/src/pages/full/AddPage/AddPage.tsx | 28 + .../AddPage/components/AddCard/AddCard.tsx | 64 ++ .../components/AddCard/assets/image_1.png | Bin 0 -> 30643 bytes .../components/AddCard/assets/image_2.png | Bin 0 -> 39309 bytes .../components/AddCard/assets/image_3.png | Bin 0 -> 45686 bytes .../AddPage/components/AddCard/style.scss | 68 ++ new-ui/src/pages/full/AddPage/style.scss | 11 + .../full/EnrollmentPage/EnrollmentPage.tsx | 73 ++ .../EnrollmentControls/EnrollmentControls.tsx | 57 ++ .../components/EnrollmentControls/style.scss | 12 + .../components/EnrollmentTimeoutProvider.tsx | 26 + .../hooks/useEnrollmentStore.tsx | 153 +++ .../steps/FinishStep/FinishStep.tsx | 33 + .../steps/FinishStep/assets/banner.png | Bin 0 -> 133051 bytes .../steps/FinishStep/style.scss | 23 + .../steps/MfaChoiceStep/MfaChoiceStep.tsx | 118 +++ .../steps/MfaChoiceStep/style.scss | 60 ++ .../MfaConfigurationStep.tsx | 120 +++ .../steps/MfaConfigurationStep/style.scss | 30 + .../steps/PasswordStep/PasswordStep.tsx | 236 +++++ .../steps/PasswordStep/style.scss | 47 + .../steps/PasswordStep/utils.ts | 68 ++ .../RecoveryCodesStep/RecoveryCodesStep.tsx | 90 ++ .../steps/RecoveryCodesStep/style.scss | 25 + .../steps/WelcomeStep/WelcomeStep.tsx | 55 ++ .../steps/WelcomeStep/style.scss | 32 + new-ui/src/pages/full/EnrollmentPage/types.ts | 10 + .../pages/full/OverviewPage/OverviewPage.tsx | 95 ++ .../components/DetailsFold/DetailsFold.tsx | 56 ++ .../components/DetailsFold/style.scss | 40 + .../OverviewSelection/OverviewSelection.tsx | 80 ++ .../components/OverviewSelection/style.scss | 69 ++ new-ui/src/pages/full/OverviewPage/style.scss | 66 ++ .../SessionTimeoutPage/SessionTimeoutPage.tsx | 73 ++ .../pages/full/SessionTimeoutPage/style.scss | 35 + .../pages/full/SupportPage/SupportPage.tsx | 101 ++ new-ui/src/pages/full/SupportPage/style.scss | 24 + new-ui/src/routeTree.gen.ts | 237 ++++- new-ui/src/routes/compact/index.tsx | 58 ++ new-ui/src/routes/full.tsx | 14 + new-ui/src/routes/full/_default.tsx | 14 + new-ui/src/routes/full/_default/add/index.tsx | 6 + .../src/routes/full/_default/add/instance.tsx | 20 + new-ui/src/routes/full/_default/overview.tsx | 40 + new-ui/src/routes/full/_default/support.tsx | 6 + new-ui/src/routes/full/enrollment.tsx | 6 + new-ui/src/routes/full/index.tsx | 9 + new-ui/src/routes/full/session-timeout.tsx | 6 + new-ui/src/routes/index.tsx | 6 +- .../src/shared/components/Button/Button.tsx | 97 +- .../src/shared/components/Button/style.scss | 6 - new-ui/src/shared/components/Button/types.ts | 3 +- .../shared/components/CodeInput/CodeInput.tsx | 10 +- .../shared/components/CopyField/CopyField.tsx | 90 ++ .../shared/components/CopyField/style.scss | 55 ++ .../shared/components/FieldLabel/style.scss | 2 +- .../FullPageTitle/FullPageTitle.tsx | 19 + .../components/FullPageTitle/style.scss | 8 + new-ui/src/shared/components/Icon/Icon.tsx | 9 +- .../src/shared/components/Icon/icon-types.ts | 2 + .../components/Icon/icons/IconAnalytics.tsx | 16 + .../components/Icon/icons/IconQuestion.tsx | 19 + .../components/Icon/icons/IconReport.tsx | 21 + new-ui/src/shared/components/Icon/style.scss | 8 +- .../components/InfoBanner/InfoBanner.tsx | 23 + .../shared/components/InfoBanner/style.scss | 33 + new-ui/src/shared/components/Input/Input.tsx | 161 +++ new-ui/src/shared/components/Input/style.scss | 52 + new-ui/src/shared/components/Input/types.ts | 41 + .../components/LocationCard/LocationCard.tsx | 27 +- .../LocationCard/api/startClientMfaSession.ts | 10 +- .../ConnectButton/ConnectButton.tsx | 82 +- .../ConnectionChart/ConnectionChart.tsx | 13 +- .../components/LocationCardConnectButton.tsx | 60 ++ .../LocationCardConnectionInfo.tsx | 107 ++ .../LocationCardConnectionInfo/style.scss | 42 + .../LocationCardConnectionTiles.tsx | 35 + .../LocationCardConnectionTiles/style.scss | 56 ++ .../LocationCardHeaderInfo.tsx | 26 + .../LocationCardHeaderInfo/style.scss | 46 + .../LocationCardMfaEdit.tsx | 30 + .../components/LocationCardMfaEdit/style.scss | 56 ++ .../LocationCard/hooks/useMfaConnect.ts | 2 +- .../shared/components/LocationCard/style.scss | 47 - .../views/ConnectedView/ConnectedView.tsx | 77 +- .../views/ConnectedView/style.scss | 47 - .../views/DefaultView/DefaultView.tsx | 29 +- .../LocationCard/views/DefaultView/style.scss | 38 - .../OverviewLocationCard.tsx | 70 ++ .../OverviewLocationCard/style.scss | 33 + .../RadioIndicator/RadioIndicator.tsx | 105 ++ .../components/RadioIndicator/style.scss | 55 ++ .../ScrollContainer/ScrollContainer.tsx | 18 + .../components/ScrollContainer/style.scss | 13 + new-ui/src/shared/components/Timer/Timer.tsx | 42 + new-ui/src/shared/components/Timer/style.scss | 14 + new-ui/src/shared/components/Timer/types.ts | 3 + .../src/shared/components/Tooltip/Tooltip.tsx | 29 + .../src/shared/components/Tooltip/style.scss | 20 + .../TooltipButton/TooltipButton.tsx | 73 ++ .../components/WindowHeader/WindowHeader.tsx | 22 +- .../shared/components/WindowHeader/style.scss | 20 + .../components/form/FormInput/FormInput.tsx | 73 ++ .../wizard/WizardPage/WizardPage.tsx | 66 ++ .../components/wizard/WizardPage/style.scss | 101 ++ .../WizardStepsCard/WizardStepsCard.tsx | 38 + .../wizard/WizardStepsCard/style.scss | 95 ++ new-ui/src/shared/components/wizard/types.ts | 19 + new-ui/src/shared/consts.ts | 5 + new-ui/src/shared/edge-api/api.ts | 218 ++++ new-ui/src/shared/edge-api/types.ts | 73 ++ new-ui/src/shared/form.tsx | 5 +- new-ui/src/shared/formLogic.ts | 6 + .../src/shared/layouts/FullPage/FullPage.tsx | 22 + .../layouts/FullPageLayout/FullPageLayout.tsx | 14 + .../FullViewNavigation/FullViewNavigation.tsx | 67 ++ .../components/FullViewNavigation/style.scss | 71 ++ .../shared/layouts/FullPageLayout/style.scss | 31 + .../src/shared/providers/AppDataContext.tsx | 29 + .../shared/providers/TauriEventProvider.tsx | 20 +- new-ui/src/shared/rust-api/api.ts | 21 +- new-ui/src/shared/rust-api/types.ts | 8 +- new-ui/src/shared/scss/_base.scss | 21 + .../store/useAppStore.tsx} | 6 +- new-ui/src/shared/utils/download.ts | 42 +- new-ui/src/shared/utils/formatDuration.ts | 8 + new-ui/src/shared/utils/formatRequestBody.ts | 10 + new-ui/src/shared/utils/generateWGKeys.ts | 10 + new-ui/src/shared/utils/mfa.ts | 33 +- src-tauri/capabilities/default.json | 2 +- src-tauri/permissions/default.toml | 8 +- src-tauri/src/bin/defguard-client.rs | 12 +- src-tauri/src/events.rs | 4 +- src-tauri/src/tray.rs | 20 +- src-tauri/src/window_manager/mod.rs | 61 +- src-tauri/src/window_manager/windows.rs | 52 +- 149 files changed, 5947 insertions(+), 1054 deletions(-) create mode 100644 new-ui/src/pages/full/AddInstancePage/AddInstancePage.tsx create mode 100644 new-ui/src/pages/full/AddInstancePage/style.scss create mode 100644 new-ui/src/pages/full/AddPage/AddPage.tsx create mode 100644 new-ui/src/pages/full/AddPage/components/AddCard/AddCard.tsx create mode 100644 new-ui/src/pages/full/AddPage/components/AddCard/assets/image_1.png create mode 100644 new-ui/src/pages/full/AddPage/components/AddCard/assets/image_2.png create mode 100644 new-ui/src/pages/full/AddPage/components/AddCard/assets/image_3.png create mode 100644 new-ui/src/pages/full/AddPage/components/AddCard/style.scss create mode 100644 new-ui/src/pages/full/AddPage/style.scss create mode 100644 new-ui/src/pages/full/EnrollmentPage/EnrollmentPage.tsx create mode 100644 new-ui/src/pages/full/EnrollmentPage/components/EnrollmentControls/EnrollmentControls.tsx create mode 100644 new-ui/src/pages/full/EnrollmentPage/components/EnrollmentControls/style.scss create mode 100644 new-ui/src/pages/full/EnrollmentPage/components/EnrollmentTimeoutProvider.tsx create mode 100644 new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentStore.tsx create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/assets/banner.png create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/style.scss create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/style.scss create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/MfaConfigurationStep.tsx create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/style.scss create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/PasswordStep.tsx create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/style.scss create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/utils.ts create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/RecoveryCodesStep/RecoveryCodesStep.tsx create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/RecoveryCodesStep/style.scss create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/WelcomeStep/WelcomeStep.tsx create mode 100644 new-ui/src/pages/full/EnrollmentPage/steps/WelcomeStep/style.scss create mode 100644 new-ui/src/pages/full/EnrollmentPage/types.ts create mode 100644 new-ui/src/pages/full/OverviewPage/OverviewPage.tsx create mode 100644 new-ui/src/pages/full/OverviewPage/components/DetailsFold/DetailsFold.tsx create mode 100644 new-ui/src/pages/full/OverviewPage/components/DetailsFold/style.scss create mode 100644 new-ui/src/pages/full/OverviewPage/components/OverviewSelection/OverviewSelection.tsx create mode 100644 new-ui/src/pages/full/OverviewPage/components/OverviewSelection/style.scss create mode 100644 new-ui/src/pages/full/OverviewPage/style.scss create mode 100644 new-ui/src/pages/full/SessionTimeoutPage/SessionTimeoutPage.tsx create mode 100644 new-ui/src/pages/full/SessionTimeoutPage/style.scss create mode 100644 new-ui/src/pages/full/SupportPage/SupportPage.tsx create mode 100644 new-ui/src/pages/full/SupportPage/style.scss create mode 100644 new-ui/src/routes/compact/index.tsx create mode 100644 new-ui/src/routes/full.tsx create mode 100644 new-ui/src/routes/full/_default.tsx create mode 100644 new-ui/src/routes/full/_default/add/index.tsx create mode 100644 new-ui/src/routes/full/_default/add/instance.tsx create mode 100644 new-ui/src/routes/full/_default/overview.tsx create mode 100644 new-ui/src/routes/full/_default/support.tsx create mode 100644 new-ui/src/routes/full/enrollment.tsx create mode 100644 new-ui/src/routes/full/index.tsx create mode 100644 new-ui/src/routes/full/session-timeout.tsx create mode 100644 new-ui/src/shared/components/CopyField/CopyField.tsx create mode 100644 new-ui/src/shared/components/CopyField/style.scss create mode 100644 new-ui/src/shared/components/FullPageTitle/FullPageTitle.tsx create mode 100644 new-ui/src/shared/components/FullPageTitle/style.scss create mode 100644 new-ui/src/shared/components/Icon/icons/IconAnalytics.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconQuestion.tsx create mode 100644 new-ui/src/shared/components/Icon/icons/IconReport.tsx create mode 100644 new-ui/src/shared/components/InfoBanner/InfoBanner.tsx create mode 100644 new-ui/src/shared/components/InfoBanner/style.scss create mode 100644 new-ui/src/shared/components/Input/Input.tsx create mode 100644 new-ui/src/shared/components/Input/style.scss create mode 100644 new-ui/src/shared/components/Input/types.ts create mode 100644 new-ui/src/shared/components/LocationCard/components/LocationCardConnectButton.tsx create mode 100644 new-ui/src/shared/components/LocationCard/components/LocationCardConnectionInfo/LocationCardConnectionInfo.tsx create mode 100644 new-ui/src/shared/components/LocationCard/components/LocationCardConnectionInfo/style.scss create mode 100644 new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/LocationCardConnectionTiles.tsx create mode 100644 new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/style.scss create mode 100644 new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/LocationCardHeaderInfo.tsx create mode 100644 new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/style.scss create mode 100644 new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/LocationCardMfaEdit.tsx create mode 100644 new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/style.scss delete mode 100644 new-ui/src/shared/components/LocationCard/views/ConnectedView/style.scss delete mode 100644 new-ui/src/shared/components/LocationCard/views/DefaultView/style.scss create mode 100644 new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx create mode 100644 new-ui/src/shared/components/OverviewLocationCard/style.scss create mode 100644 new-ui/src/shared/components/RadioIndicator/RadioIndicator.tsx create mode 100644 new-ui/src/shared/components/RadioIndicator/style.scss create mode 100644 new-ui/src/shared/components/ScrollContainer/ScrollContainer.tsx create mode 100644 new-ui/src/shared/components/ScrollContainer/style.scss create mode 100644 new-ui/src/shared/components/Timer/Timer.tsx create mode 100644 new-ui/src/shared/components/Timer/style.scss create mode 100644 new-ui/src/shared/components/Timer/types.ts create mode 100644 new-ui/src/shared/components/Tooltip/Tooltip.tsx create mode 100644 new-ui/src/shared/components/Tooltip/style.scss create mode 100644 new-ui/src/shared/components/TooltipButton/TooltipButton.tsx create mode 100644 new-ui/src/shared/components/form/FormInput/FormInput.tsx create mode 100644 new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx create mode 100644 new-ui/src/shared/components/wizard/WizardPage/style.scss create mode 100644 new-ui/src/shared/components/wizard/WizardStepsCard/WizardStepsCard.tsx create mode 100644 new-ui/src/shared/components/wizard/WizardStepsCard/style.scss create mode 100644 new-ui/src/shared/components/wizard/types.ts create mode 100644 new-ui/src/shared/edge-api/api.ts create mode 100644 new-ui/src/shared/edge-api/types.ts create mode 100644 new-ui/src/shared/formLogic.ts create mode 100644 new-ui/src/shared/layouts/FullPage/FullPage.tsx create mode 100644 new-ui/src/shared/layouts/FullPageLayout/FullPageLayout.tsx create mode 100644 new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/FullViewNavigation.tsx create mode 100644 new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/style.scss create mode 100644 new-ui/src/shared/layouts/FullPageLayout/style.scss create mode 100644 new-ui/src/shared/providers/AppDataContext.tsx rename new-ui/src/{pages/compact/CompactLocationsPage/hooks/useCompactLocationsStore.tsx => shared/store/useAppStore.tsx} (76%) create mode 100644 new-ui/src/shared/utils/formatDuration.ts create mode 100644 new-ui/src/shared/utils/formatRequestBody.ts create mode 100644 new-ui/src/shared/utils/generateWGKeys.ts diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index 21972e7c4..a23bc9da0 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -48,11 +48,6 @@ jobs: cache: true version: 11 - # Change to '--frozen-lockfile' once this gets fixed: - # https://github.com/pnpm/action-setup/issues/40 - - name: Install Node dependencies - run: pnpm install --no-frozen-lockfile - - name: Install Node dependencies for New UI run: | cd new-ui @@ -76,10 +71,6 @@ jobs: cd new-ui pnpm build - - name: Build old UI - run: | - pnpm build - - name: Build app uses: tauri-apps/tauri-action@v0 env: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 80de5efd6..c1ee01735 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -102,10 +102,6 @@ jobs: cd new-ui pnpm build - - name: Build old UI - run: | - pnpm build - - name: Build packages uses: tauri-apps/tauri-action@v0.5.23 env: diff --git a/new-ui/.stylelintrc.json b/new-ui/.stylelintrc.json index 6a4e21333..01a6bcd5c 100644 --- a/new-ui/.stylelintrc.json +++ b/new-ui/.stylelintrc.json @@ -5,6 +5,7 @@ "at-rule-no-unknown": null, "scss/at-rule-no-unknown": true, "custom-property-empty-line-before": null, - "value-keyword-case": null + "value-keyword-case": null, + "selector-class-pattern": null } } diff --git a/new-ui/package.json b/new-ui/package.json index db7cc879d..f7bb227af 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -13,14 +13,16 @@ "preview": "vite preview" }, "dependencies": { - "@biomejs/biome": "^2.4.15", + "@biomejs/biome": "^2.4.16", "@floating-ui/react": "^0.27.19", "@stablelib/base64": "^2.0.1", - "@tanstack/react-form": "^1.32.0", - "@tanstack/react-query": "^5.100.14", - "@tanstack/react-router": "^1.170.8", - "@tanstack/router-plugin": "^1.168.11", + "@stablelib/x25519": "^2.0.1", + "@tanstack/react-form": "^1.33.0", + "@tanstack/react-query": "^5.101.0", + "@tanstack/react-router": "^1.170.15", + "@tanstack/router-plugin": "^1.168.18", "@tauri-apps/api": "^2.11.0", + "@tauri-apps/plugin-clipboard-manager": "^2.3.2", "@tauri-apps/plugin-http": "^2.5.9", "@tauri-apps/plugin-log": "^2.8.0", "@tauri-apps/plugin-os": "^2.3.2", @@ -28,32 +30,33 @@ "byte-size": "^9.0.1", "chart.js": "^4.5.1", "clsx": "^2.1.1", - "dayjs": "^1.11.20", + "dayjs": "^1.11.21", "motion": "^12.40.0", "p-timeout": "^7.0.1", "prettier": "^3.8.3", "qrcode.react": "^4.2.0", "radashi": "^12.9.1", - "react": "^19.2.6", + "react": "^19.2.7", "react-chartjs-2": "^5.3.1", - "react-dom": "^19.2.6", + "react-dom": "^19.2.7", + "rxjs": "^7.8.2", "sass": "^1.100.0", "zod": "^4.4.3", - "zustand": "^5.0.13" + "zustand": "^5.0.14" }, "devDependencies": { "@tanstack/devtools-vite": "^0.7.0", "@types/byte-size": "^8.1.2", - "@types/node": "^25.9.1", - "@types/react": "^19.2.15", + "@types/node": "^25.9.2", + "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.2", "autoprefixer": "^10.5.0", "globals": "^17.6.0", - "stylelint": "^17.12.0", + "stylelint": "^17.13.0", "stylelint-config-standard-scss": "^17.0.0", - "stylelint-scss": "^7.1.1", + "stylelint-scss": "^7.2.0", "typescript": "~6.0.3", - "vite": "^8.0.14" + "vite": "^8.0.16" } } diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index 44192227d..a059aa7cd 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -9,29 +9,35 @@ importers: .: dependencies: '@biomejs/biome': - specifier: ^2.4.15 - version: 2.4.15 + specifier: ^2.4.16 + version: 2.4.16 '@floating-ui/react': specifier: ^0.27.19 - version: 0.27.19(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + version: 0.27.19(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@stablelib/base64': specifier: ^2.0.1 version: 2.0.1 + '@stablelib/x25519': + specifier: ^2.0.1 + version: 2.0.1 '@tanstack/react-form': - specifier: ^1.32.0 - version: 1.32.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^1.33.0 + version: 1.33.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/react-query': - specifier: ^5.100.14 - version: 5.100.14(react@19.2.6) + specifier: ^5.101.0 + version: 5.101.0(react@19.2.7) '@tanstack/react-router': - specifier: ^1.170.8 - version: 1.170.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^1.170.15 + version: 1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/router-plugin': - specifier: ^1.168.11 - version: 1.168.11(@tanstack/react-router@1.170.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)) + specifier: ^1.168.18 + version: 1.168.18(@tanstack/react-router@1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(sass@1.100.0)) '@tauri-apps/api': specifier: ^2.11.0 version: 2.11.0 + '@tauri-apps/plugin-clipboard-manager': + specifier: ^2.3.2 + version: 2.3.2 '@tauri-apps/plugin-http': specifier: ^2.5.9 version: 2.5.9 @@ -43,7 +49,7 @@ importers: version: 2.3.2 '@uidotdev/usehooks': specifier: ^2.4.1 - version: 2.4.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + version: 2.4.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) byte-size: specifier: ^9.0.1 version: 9.0.1 @@ -54,11 +60,11 @@ importers: specifier: ^2.1.1 version: 2.1.1 dayjs: - specifier: ^1.11.20 - version: 1.11.20 + specifier: ^1.11.21 + version: 1.11.21 motion: specifier: ^12.40.0 - version: 12.40.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + version: 12.40.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) p-timeout: specifier: ^7.0.1 version: 7.0.1 @@ -67,19 +73,22 @@ importers: version: 3.8.3 qrcode.react: specifier: ^4.2.0 - version: 4.2.0(react@19.2.6) + version: 4.2.0(react@19.2.7) radashi: specifier: ^12.9.1 version: 12.9.1 react: - specifier: ^19.2.6 - version: 19.2.6 + specifier: ^19.2.7 + version: 19.2.7 react-chartjs-2: specifier: ^5.3.1 - version: 5.3.1(chart.js@4.5.1)(react@19.2.6) + version: 5.3.1(chart.js@4.5.1)(react@19.2.7) react-dom: - specifier: ^19.2.6 - version: 19.2.6(react@19.2.6) + specifier: ^19.2.7 + version: 19.2.7(react@19.2.7) + rxjs: + specifier: ^7.8.2 + version: 7.8.2 sass: specifier: ^1.100.0 version: 1.100.0 @@ -87,27 +96,27 @@ importers: specifier: ^4.4.3 version: 4.4.3 zustand: - specifier: ^5.0.13 - version: 5.0.13(@types/react@19.2.15)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)) + specifier: ^5.0.14 + version: 5.0.14(@types/react@19.2.17)(react@19.2.7)(use-sync-external-store@1.6.0(react@19.2.7)) devDependencies: '@tanstack/devtools-vite': specifier: ^0.7.0 - version: 0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)) + version: 0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(sass@1.100.0)) '@types/byte-size': specifier: ^8.1.2 version: 8.1.2 '@types/node': - specifier: ^25.9.1 - version: 25.9.1 + specifier: ^25.9.2 + version: 25.9.2 '@types/react': - specifier: ^19.2.15 - version: 19.2.15 + specifier: ^19.2.17 + version: 19.2.17 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.15) + version: 19.2.3(@types/react@19.2.17) '@vitejs/plugin-react': specifier: ^6.0.2 - version: 6.0.2(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0)) + version: 6.0.2(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(sass@1.100.0)) autoprefixer: specifier: ^10.5.0 version: 10.5.0(postcss@8.5.15) @@ -115,159 +124,143 @@ importers: specifier: ^17.6.0 version: 17.6.0 stylelint: - specifier: ^17.12.0 - version: 17.12.0(typescript@6.0.3) + specifier: ^17.13.0 + version: 17.13.0(typescript@6.0.3) stylelint-config-standard-scss: specifier: ^17.0.0 - version: 17.0.0(postcss@8.5.15)(stylelint@17.12.0(typescript@6.0.3)) + version: 17.0.0(postcss@8.5.15)(stylelint@17.13.0(typescript@6.0.3)) stylelint-scss: - specifier: ^7.1.1 - version: 7.1.1(stylelint@17.12.0(typescript@6.0.3)) + specifier: ^7.2.0 + version: 7.2.0(stylelint@17.13.0(typescript@6.0.3)) typescript: specifier: ~6.0.3 version: 6.0.3 vite: - specifier: ^8.0.14 - version: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0) + specifier: ^8.0.16 + version: 8.0.16(@types/node@25.9.2)(jiti@2.7.0)(sass@1.100.0) packages: - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.29.3': - resolution: {integrity: sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==} + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} engines: {node: '>=6.9.0'} - '@babel/core@7.29.0': - resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.29.1': - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} engines: {node: '>=6.9.0'} - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.29.2': - resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.29.3': - resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-syntax-jsx@7.28.6': - resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.28.6': - resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} - engines: {node: '>=6.9.0'} - - '@biomejs/biome@2.4.15': - resolution: {integrity: sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw==} + '@biomejs/biome@2.4.16': + resolution: {integrity: sha512-x9ajFh1zChVybCiM3TN6OD4phAqLgtPZjFrZF+aTMYCPjwBO+k529TX7PPsAqtGNLeV4UgzwQnowEgS7bGmzcA==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.4.15': - resolution: {integrity: sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg==} + '@biomejs/cli-darwin-arm64@2.4.16': + resolution: {integrity: sha512-wxPvu4XOA85YJk9ixSWUmq/QBHbid85BISbOAqqBM/5xQpPk9ayjk5375tOlSC0BeCwNSbPFafQBm+vBumXq0A==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.4.15': - resolution: {integrity: sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ==} + '@biomejs/cli-darwin-x64@2.4.16': + resolution: {integrity: sha512-xFCqGPwYusQJp4N4NJLi1XJiZqjwFdjhT+KqtNy+Ug3qgfczqnTa6MSDvxJF6TkuDLoYJItMapz6tAf7kCekFw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.4.15': - resolution: {integrity: sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ==} + '@biomejs/cli-linux-arm64-musl@2.4.16': + resolution: {integrity: sha512-oYxnW0ARfJkr72ezzF2OR8N/rtkgLUQeYtF8cFhVswbknHxtTcmzSsanVJP8yQKnGpGpc2ck6c5zLvHahL6Cbg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.4.15': - resolution: {integrity: sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug==} + '@biomejs/cli-linux-arm64@2.4.16': + resolution: {integrity: sha512-2kFb4//jxfZaP6D+Rj5VkHkxgyD9EoRAVBEQb8PKRv+s4NO2zYNJKXFaJmK1CmhufJOWEfpHKaRbOja7qjmdhQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.4.15': - resolution: {integrity: sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w==} + '@biomejs/cli-linux-x64-musl@2.4.16': + resolution: {integrity: sha512-iHDS+MCM65DPqWGu+ECC3uoALyj2H7F4nVUPxIPjz/PIl94EUu+EDfGZDzFP+NY1EOPVt9NQvwFqq7HdMmowdg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.4.15': - resolution: {integrity: sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g==} + '@biomejs/cli-linux-x64@2.4.16': + resolution: {integrity: sha512-NbcBbi/nJqn5baae6wqRXdS7Gadf2uRpehSh6vMSYpG8OhkXl/Xg8aorWrJ+9VWqAT5ml90alLvorkpMW0nBwQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.4.15': - resolution: {integrity: sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w==} + '@biomejs/cli-win32-arm64@2.4.16': + resolution: {integrity: sha512-0rgImMsNb5v/chhkIFe3wu7PEFClS6RBAYUijGL9UsYN3PanSaoK24HSSuSJb1pYbYYVjzAyZTl3gtjJ84BM8A==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.4.15': - resolution: {integrity: sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ==} + '@biomejs/cli-win32-x64@2.4.16': + resolution: {integrity: sha512-Kp85jgoBHa05gix6UIRjfCDiUV3w/8VIdZ247VyyO2gEjaw12WEVhdIjlxp/AMzXxqxQwbxNTDVZ3Mwd2RG5rw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -291,8 +284,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.4': - resolution: {integrity: sha512-wgsqt92b7C7tQhIdPNxj0n9zuUbQlvAuI1exyzeNrOKOi62SD7ren8zqszmpVREjAOqg8cD2FqYhQfAuKjk4sw==} + '@csstools/css-syntax-patches-for-csstree@1.1.5': + resolution: {integrity: sha512-oNjBvzLq2GPZtJphCjLqXow/cHySHSgtxvKZb7OqSZ/xHgw6NWNhfad+6AB9cLeVm6eA9d/qMll3JdEHjy6M+A==} peerDependencies: css-tree: ^3.2.1 peerDependenciesMeta: @@ -528,8 +521,8 @@ packages: '@oxc-project/types@0.120.0': resolution: {integrity: sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==} - '@oxc-project/types@0.132.0': - resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} + '@oxc-project/types@0.133.0': + resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} @@ -619,97 +612,97 @@ packages: resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} - '@rolldown/binding-android-arm64@1.0.2': - resolution: {integrity: sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==} + '@rolldown/binding-android-arm64@1.0.3': + resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.2': - resolution: {integrity: sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==} + '@rolldown/binding-darwin-arm64@1.0.3': + resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.2': - resolution: {integrity: sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==} + '@rolldown/binding-darwin-x64@1.0.3': + resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.2': - resolution: {integrity: sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==} + '@rolldown/binding-freebsd-x64@1.0.3': + resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.2': - resolution: {integrity: sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.2': - resolution: {integrity: sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==} + '@rolldown/binding-linux-arm64-gnu@1.0.3': + resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.2': - resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} + '@rolldown/binding-linux-arm64-musl@1.0.3': + resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.2': - resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} + '@rolldown/binding-linux-ppc64-gnu@1.0.3': + resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.2': - resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} + '@rolldown/binding-linux-s390x-gnu@1.0.3': + resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.2': - resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} + '@rolldown/binding-linux-x64-gnu@1.0.3': + resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.2': - resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} + '@rolldown/binding-linux-x64-musl@1.0.3': + resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.2': - resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} + '@rolldown/binding-openharmony-arm64@1.0.3': + resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.2': - resolution: {integrity: sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==} + '@rolldown/binding-wasm32-wasi@1.0.3': + resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.2': - resolution: {integrity: sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==} + '@rolldown/binding-win32-arm64-msvc@1.0.3': + resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.2': - resolution: {integrity: sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==} + '@rolldown/binding-win32-x64-msvc@1.0.3': + resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -724,6 +717,27 @@ packages: '@stablelib/base64@2.0.1': resolution: {integrity: sha512-P2z89A7N1ETt6RxgpVdDT2xlg8cnm3n6td0lY9gyK7EiWK3wdq388yFX/hLknkCC0we05OZAD1rfxlQJUbl5VQ==} + '@stablelib/binary@2.0.1': + resolution: {integrity: sha512-U9iAO8lXgEDONsA0zPPSgcf3HUBNAqHiJmSHgZz62OvC3Hi2Bhc5kTnQ3S1/L+sthDTHtCMhcEiklmIly6uQ3w==} + + '@stablelib/bytes@2.0.1': + resolution: {integrity: sha512-QIzI6V7nkJA5CjOZ7GoceBd4CIKrJoC471VaI6jh1xPQ2cMhkhQK4HddyzCXOR2y+fBF3/5B2HO3FXXI9C+Xzg==} + + '@stablelib/int@2.0.1': + resolution: {integrity: sha512-Ht63fQp3wz/F8U4AlXEPb7hfJOIILs8Lq55jgtD7KueWtyjhVuzcsGLSTAWtZs3XJDZYdF1WcSKn+kBtbzupww==} + + '@stablelib/keyagreement@2.0.1': + resolution: {integrity: sha512-2+tWBLCMtWlHQ7GqjD5L+lQRyWtun4Lou0IOdTML8zuTuAS0EgihnHFx+4uMZwYU1In40J/WlpyKSLidHfStRQ==} + + '@stablelib/random@2.0.1': + resolution: {integrity: sha512-W6GAtXEEs7r+dSbuBsvoFmlyL3gLxle41tQkjKu17dDWtDdjhVUbtRfRCQcCUeczwkgjQxMPopgwYEvxXtHXGw==} + + '@stablelib/wipe@2.0.1': + resolution: {integrity: sha512-1eU2K9EgOcV4qc9jcP6G72xxZxEm5PfeI5H55l08W95b4oRJaqhmlWRc4xZAm6IVSKhVNxMi66V67hCzzuMTAg==} + + '@stablelib/x25519@2.0.1': + resolution: {integrity: sha512-qi04HS2puHaBf50kM/kes5QcZFGsx8yF0YmCjLCOa/LPmnBaKEKX9ZR82OnnCwMn72YH13R/bBZgr/UP0aPFfA==} + '@tanstack/devtools-client@0.0.6': resolution: {integrity: sha512-f85ZJXJnDIFOoykG/BFIixuAevJovCvJF391LPs6YjBAPhGYC50NWlx1y4iF/UmK5/cCMx+/JqI5SBOz7FanQQ==} engines: {node: '>=18'} @@ -744,8 +758,8 @@ packages: peerDependencies: vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@tanstack/form-core@1.32.0': - resolution: {integrity: sha512-Tn5VRDSjyqjmaet2tJMuEWDRFyrCaon03vxXPlSSaiSs6C/N7lCIwGCXJbZXEUq1kTj8jYN9qyXHbsz4LQHcow==} + '@tanstack/form-core@1.33.0': + resolution: {integrity: sha512-AV4Pw9Dk4orFsuPBcDssfWMJFs+yMYBae7zZ4oTqrCf4ftNGQKxvrQRZeqKHG6A4TkiLeSvf2kzIjcVkrW7E6w==} '@tanstack/history@1.162.0': resolution: {integrity: sha512-79pf/RkhteYZTRgcR4F9kbk84P2N8rugQJswxfIqovlbRiT3yI7eBE+5QorIrZaOKktsgzRlXh1l/du/xpl4iA==} @@ -755,11 +769,11 @@ packages: resolution: {integrity: sha512-y/xtNPNt/YeyoVxE/JCx+T7yjEzpezmbb+toK8DDD1P4m7Kzs5YR956+7OKexG3f8aXgC3rLZl7b1V+yNUSy5w==} engines: {node: '>=18'} - '@tanstack/query-core@5.100.14': - resolution: {integrity: sha512-5X41dGpxgeaHISCRW2oYwcSycZeULZzAunaudXT9ov1KOTj9xwt0CH6hbwqP1/z74ZWF7rYFnDpyYH07XFcZew==} + '@tanstack/query-core@5.101.0': + resolution: {integrity: sha512-cQetA74EB+seWySv1TTKr828TnP0u39m6LykwDXIo84SNortpDkp30TMEjkqtYCNP9c40uT/iwl6MLiufEt0Ow==} - '@tanstack/react-form@1.32.0': - resolution: {integrity: sha512-6WP5SQTA6/H9crCpvpq3ZppYWqtrdE5NjOy6ebABi6uAQPqhfTzrdjS9t40mCZCFtGI5585OhJV6zBP/KN2zcw==} + '@tanstack/react-form@1.33.0': + resolution: {integrity: sha512-unaee+VS4MvKo+s1dmgGUXI4902VeAhuaUbKsQbhFe3MceOpB3JpAUGCDpyzjQPXVFkFY0COKfLrUNX2XZYW4g==} peerDependencies: '@tanstack/react-start': '*' react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -767,38 +781,44 @@ packages: '@tanstack/react-start': optional: true - '@tanstack/react-query@5.100.14': - resolution: {integrity: sha512-oOr6aRdSFEwWhzxEkD/9ZcItM3+LjBSkeVmadWKwUssAHTsqd/7bOjWrX4AbvEkoEhgAxzN0Xk6H/aYzXiYBAw==} + '@tanstack/react-query@5.101.0': + resolution: {integrity: sha512-rLlJXSpkqfizLWgkR5+eLeIk0MvTx/meEIR7LRjxic+qxiQP8zVjq7BqQkiCMNLQBlLfuOLqqr6KO5GtrDlmSg==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-router@1.170.8': - resolution: {integrity: sha512-Qw2ju6jjnIsMpuW+VrnHZWHuugqs592PWsnI56sG28qNhg14CgRLahOcNajfuJR9P4MxKGP94WVzmFKSYUz/ig==} + '@tanstack/react-router@1.170.15': + resolution: {integrity: sha512-GawYz7HEjj8rTUUDoT/SemDEVm63pZUO+2mOcXHY9Jl3EwMS5gFBnPu/2UvcrwRm1jN1k79fokc0d4aFmrLatg==} engines: {node: '>=20.19'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' + '@tanstack/react-store@0.11.0': + resolution: {integrity: sha512-tX4YXh3PDkmpvGQWkWqKpzs/MSqbtuwY9dWdWhtV9Q50PmO+jOkUKIWIX4G85dwt7lxdHLXsiaEKPdKmC8F41w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@tanstack/react-store@0.9.3': resolution: {integrity: sha512-y2iHd/N9OkoQbFJLUX1T9vbc2O9tjH0pQRgTcx1/Nz4IlwLvkgpuglXUx+mXt0g5ZDFrEeDnONPqkbfxXJKwRg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.171.6': - resolution: {integrity: sha512-Ol6DQ+j6rf/rPVELIzo8LHwOQV2KL+zry3b+39kL/GKrt7YId52WJRAFMzuseY4XceSW+PU7sG/Cc1QkwJr0hg==} + '@tanstack/router-core@1.171.13': + resolution: {integrity: sha512-+NOwEj1kO/6IGmpHRIZHasYxYWpyBQGNIZAST9aNrk9Q3YlU9SgqVnl1pbLa9qAKfeNdXQIRve0RQb/0kyDeDA==} engines: {node: '>=20.19'} - '@tanstack/router-generator@1.167.10': - resolution: {integrity: sha512-CjbjWRSo6djLU/C7ncb9IbKUcf4IwpdqhLGngkwKkXaVFXGxEAafA/uhvOCv/UEUVR7NI3tJqqQmxYXGcJPbjw==} + '@tanstack/router-generator@1.167.17': + resolution: {integrity: sha512-xtB9tB2Ws0tWR6Pi7nc3Qk9IYgoh1mQCKWjHqIl9tf6BNUpKoqniJoPAQ4+LGrK8FeZYU0o0p/qlZEyj9FAulA==} engines: {node: '>=20.19'} - '@tanstack/router-plugin@1.168.11': - resolution: {integrity: sha512-b2eom/8xCWL/OiWxKub8kYsr8p+kvmB/eXwYGqCWG8vilcJo+eQCSyp54nKt0AZ5k/ET1+eINc+4mwL3bVeAgg==} + '@tanstack/router-plugin@1.168.18': + resolution: {integrity: sha512-MofS28/axfnfnhOD2RSgJEaU882aX5RsAzhGz5Vc4XhAmvCjy919u9JrNs4QsTWFbTD1P7IJ8WFlFVsrg0pStg==} engines: {node: '>=20.19'} peerDependencies: '@rsbuild/core': '>=1.0.2 || ^2.0.0' - '@tanstack/react-router': ^1.170.8 + '@tanstack/react-router': ^1.170.15 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0' vite-plugin-solid: ^2.11.10 || ^3.0.0-0 webpack: '>=5.92.0' @@ -814,10 +834,13 @@ packages: webpack: optional: true - '@tanstack/router-utils@1.162.1': - resolution: {integrity: sha512-62layyTGmclHDQS/eidwKRfN1hhCKwViG7iEBcVmL0MXgcAB3OOucWCEcDDGd9Cu11H6b4QQ5oOo47MWIqwz0A==} + '@tanstack/router-utils@1.162.2': + resolution: {integrity: sha512-hTWqJtqIFFdvuCl8WXNyrodp2L9zo2G37xKRrcVmVRWpAB2h+U1LuRAfS4tsFTiWOIoE/B+WDVFB8JpoEdw6jQ==} engines: {node: '>=20.19'} + '@tanstack/store@0.11.0': + resolution: {integrity: sha512-WlzzCt3xi0G6pCAJu1U+2jiECwabETDpQDi3hfkFZvJii9AuZqEKbOiVarX1/bWhTNjU486yQtJCCasi/0q+Cw==} + '@tanstack/store@0.9.3': resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==} @@ -828,6 +851,9 @@ packages: '@tauri-apps/api@2.11.0': resolution: {integrity: sha512-7CinYODhky9lmO23xHnUFv0Xt43fbtWMyxZcLcRBlFkcgXKuEirBvHpmtJ89YMhyeGcq20Wuc47Fa4XjyniywA==} + '@tauri-apps/plugin-clipboard-manager@2.3.2': + resolution: {integrity: sha512-CUlb5Hqi2oZbcZf4VUyUH53XWPPdtpw43EUpCza5HWZJwxEoDowFzNUDt1tRUXA8Uq+XPn17Ysfptip33sG4eQ==} + '@tauri-apps/plugin-http@2.5.9': resolution: {integrity: sha512-lCiY0+vs4HvIUSvZrBs8TC3TiCB0MOPRmiUjTq4prW7SlcJE2jdLeT6KBsJrT9Tlplufl7W1pY6SFAO3gCWxDA==} @@ -843,16 +869,16 @@ packages: '@types/byte-size@8.1.2': resolution: {integrity: sha512-jGyVzYu6avI8yuqQCNTZd65tzI8HZrLjKX9sdMqZrGWVlNChu0rf6p368oVEDCYJe5BMx2Ov04tD1wqtgTwGSA==} - '@types/node@25.9.1': - resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} + '@types/node@25.9.2': + resolution: {integrity: sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw==} '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.15': - resolution: {integrity: sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==} + '@types/react@19.2.17': + resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} '@uidotdev/usehooks@2.4.1': resolution: {integrity: sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg==} @@ -889,8 +915,8 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansis@4.3.0: - resolution: {integrity: sha512-44mvgtPvohuU/70DdY5Oz2AIrLJ9k6/5x4KmoSvPwO+5Moijo0+N9D0fKbbYZQWP1hNm5CpOf+E01jhxG/r8xg==} + ansis@4.3.1: + resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==} engines: {node: '>=14'} argparse@2.0.1: @@ -910,8 +936,8 @@ packages: babel-dead-code-elimination@1.0.12: resolution: {integrity: sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==} - baseline-browser-mapping@2.10.32: - resolution: {integrity: sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==} + baseline-browser-mapping@2.10.34: + resolution: {integrity: sha512-IMDedajPifLnHNY0X9n8hKxRTQ6/eTHwr5bDo04WnuqxyKw6LYtQywCuuqPZwhl3aBXMvQpJov42GLCwRRdQzw==} engines: {node: '>=6.0.0'} hasBin: true @@ -940,8 +966,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001793: - resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} + caniuse-lite@1.0.30001797: + resolution: {integrity: sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w==} chalk@5.6.2: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} @@ -1000,8 +1026,8 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - dayjs@1.11.20: - resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} + dayjs@1.11.21: + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} @@ -1020,8 +1046,8 @@ packages: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} - electron-to-chromium@1.5.361: - resolution: {integrity: sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==} + electron-to-chromium@1.5.368: + resolution: {integrity: sha512-7RckJJK4uESJF9PxvfMWd3TGqIiieUTG4HxnKaKuIpGbcr+r2ZEB3g2gAhCP3Fqm42vJSzLfgab9eva/C4/XVw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1151,8 +1177,8 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} - immutable@5.1.5: - resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} + immutable@5.1.6: + resolution: {integrity: sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==} import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} @@ -1191,8 +1217,8 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - isbot@5.1.40: - resolution: {integrity: sha512-yNeeynhhtIVRBk12tBV4eHNxwB42HzR4Q3Ea7vCOiJhImGaAIdIMrbJtacQlBizGLjUPw+akkFI5Dn9T70XoVQ==} + isbot@5.1.41: + resolution: {integrity: sha512-9WFV/Vhh0FEj6CQ7MoHweEL9/vLKPjeoD2I2htbAjX7kbW7VJs3OCpWOVyd+JraNTWVU6/DRx2MZy2KaUNXHcg==} engines: {node: '>=18'} isexe@2.0.0: @@ -1205,8 +1231,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + js-yaml@4.2.0: + resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} hasBin: true jsesc@3.1.0: @@ -1235,8 +1261,8 @@ packages: known-css-properties@0.37.0: resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} - launch-editor@2.13.2: - resolution: {integrity: sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==} + launch-editor@2.14.1: + resolution: {integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==} lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} @@ -1373,8 +1399,8 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-releases@2.0.46: - resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} + node-releases@2.0.47: + resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==} engines: {node: '>=18'} normalize-path@3.0.0: @@ -1467,13 +1493,13 @@ packages: chart.js: ^4.1.1 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom@19.2.6: - resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} + react-dom@19.2.7: + resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} peerDependencies: - react: ^19.2.6 + react: ^19.2.7 - react@19.2.6: - resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} + react@19.2.7: + resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} engines: {node: '>=0.10.0'} readdirp@5.0.0: @@ -1492,14 +1518,17 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown@1.0.2: - resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==} + rolldown@1.0.3: + resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + sass@1.100.0: resolution: {integrity: sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==} engines: {node: '>=20.19.0'} @@ -1590,14 +1619,14 @@ packages: peerDependencies: stylelint: ^17.0.0 - stylelint-scss@7.1.1: - resolution: {integrity: sha512-pLPXJZ7RtAFNLXe8gqarf3B56ScVTd1vPiL9IFgcJkIZsYPzAgLJPh2h9NHrp3BFeKrtAkIgwQ08QSmhvlv1gA==} + stylelint-scss@7.2.0: + resolution: {integrity: sha512-6E79Bachv0Iz0gqRUZgdqdXCsiq26DWBWIBNHYtjTmAp3wJu6cp/I37VfW7BPntmh2puF3bY09XWl4HZGrLhzw==} engines: {node: '>=20.19.0'} peerDependencies: stylelint: ^16.8.2 || ^17.0.0 - stylelint@17.12.0: - resolution: {integrity: sha512-KIlzWXMHUvgfPUR0R7TK3H80yCIi0uoivUwf+6Az4yrHJD1Q3c1qIkh/H5Z0i/K3QXgtq/UMEkWyBUSUwnpnOg==} + stylelint@17.13.0: + resolution: {integrity: sha512-G1WYzMerp7ihOaIe9VJCHLt12MoAD2QLf1AFerYP37+BCRBUK5UCpq8e/mN+zCIaJPKQcaxhE4WlPmqdiOx/gw==} engines: {node: '>=20.19.0'} hasBin: true @@ -1619,8 +1648,8 @@ packages: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} - tinyglobby@0.2.16: - resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} to-regex-range@5.0.1: @@ -1660,8 +1689,8 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - vite@8.0.14: - resolution: {integrity: sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==} + vite@8.0.16: + resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -1732,8 +1761,8 @@ packages: zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} - zustand@5.0.13: - resolution: {integrity: sha512-efI2tVaVQPqtOh114loML/Z80Y4NP3yc+Ff0fYiZJPauNeWZeIp/bRFD7I9bfmCOYBh/PHxlglQ9+wvlwnPikQ==} + zustand@5.0.14: + resolution: {integrity: sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -1752,25 +1781,25 @@ packages: snapshots: - '@babel/code-frame@7.29.0': + '@babel/code-frame@7.29.7': dependencies: - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.29.3': {} + '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.0': + '@babel/core@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.29.2 - '@babel/parser': 7.29.3 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -1780,123 +1809,111 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.29.1': + '@babel/generator@7.29.7': dependencies: - '@babel/parser': 7.29.3 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/helper-compilation-targets@7.28.6': + '@babel/helper-compilation-targets@7.29.7': dependencies: - '@babel/compat-data': 7.29.3 - '@babel/helper-validator-option': 7.27.1 + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-globals@7.28.0': {} + '@babel/helper-globals@7.29.7': {} - '@babel/helper-module-imports@7.28.6': + '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.28.6': {} - - '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-validator-option@7.29.7': {} - '@babel/helpers@7.29.2': + '@babel/helpers@7.29.7': dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 - '@babel/parser@7.29.3': + '@babel/parser@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': + '@babel/template@7.29.7': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': + '@babel/traverse@7.29.7': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/template@7.28.6': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.3 - '@babel/types': 7.29.0 - - '@babel/traverse@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.3 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.29.0': + '@babel/types@7.29.7': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 - '@biomejs/biome@2.4.15': + '@biomejs/biome@2.4.16': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.4.15 - '@biomejs/cli-darwin-x64': 2.4.15 - '@biomejs/cli-linux-arm64': 2.4.15 - '@biomejs/cli-linux-arm64-musl': 2.4.15 - '@biomejs/cli-linux-x64': 2.4.15 - '@biomejs/cli-linux-x64-musl': 2.4.15 - '@biomejs/cli-win32-arm64': 2.4.15 - '@biomejs/cli-win32-x64': 2.4.15 + '@biomejs/cli-darwin-arm64': 2.4.16 + '@biomejs/cli-darwin-x64': 2.4.16 + '@biomejs/cli-linux-arm64': 2.4.16 + '@biomejs/cli-linux-arm64-musl': 2.4.16 + '@biomejs/cli-linux-x64': 2.4.16 + '@biomejs/cli-linux-x64-musl': 2.4.16 + '@biomejs/cli-win32-arm64': 2.4.16 + '@biomejs/cli-win32-x64': 2.4.16 - '@biomejs/cli-darwin-arm64@2.4.15': + '@biomejs/cli-darwin-arm64@2.4.16': optional: true - '@biomejs/cli-darwin-x64@2.4.15': + '@biomejs/cli-darwin-x64@2.4.16': optional: true - '@biomejs/cli-linux-arm64-musl@2.4.15': + '@biomejs/cli-linux-arm64-musl@2.4.16': optional: true - '@biomejs/cli-linux-arm64@2.4.15': + '@biomejs/cli-linux-arm64@2.4.16': optional: true - '@biomejs/cli-linux-x64-musl@2.4.15': + '@biomejs/cli-linux-x64-musl@2.4.16': optional: true - '@biomejs/cli-linux-x64@2.4.15': + '@biomejs/cli-linux-x64@2.4.16': optional: true - '@biomejs/cli-win32-arm64@2.4.15': + '@biomejs/cli-win32-arm64@2.4.16': optional: true - '@biomejs/cli-win32-x64@2.4.15': + '@biomejs/cli-win32-x64@2.4.16': optional: true '@cacheable/memory@2.0.9': @@ -1920,7 +1937,7 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.4(css-tree@3.2.1)': + '@csstools/css-syntax-patches-for-csstree@1.1.5(css-tree@3.2.1)': optionalDependencies: css-tree: 3.2.1 @@ -1964,18 +1981,18 @@ snapshots: '@floating-ui/core': 1.7.5 '@floating-ui/utils': 0.2.11 - '@floating-ui/react-dom@2.1.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@floating-ui/react-dom@2.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@floating-ui/dom': 1.7.6 - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@floating-ui/react@0.27.19(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@floating-ui/react@0.27.19(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@floating-ui/react-dom': 2.1.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@floating-ui/utils': 0.2.11 - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) tabbable: 6.4.0 '@floating-ui/utils@0.2.11': {} @@ -2095,7 +2112,7 @@ snapshots: '@oxc-project/types@0.120.0': {} - '@oxc-project/types@0.132.0': {} + '@oxc-project/types@0.133.0': {} '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -2158,53 +2175,53 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.6 optional: true - '@rolldown/binding-android-arm64@1.0.2': + '@rolldown/binding-android-arm64@1.0.3': optional: true - '@rolldown/binding-darwin-arm64@1.0.2': + '@rolldown/binding-darwin-arm64@1.0.3': optional: true - '@rolldown/binding-darwin-x64@1.0.2': + '@rolldown/binding-darwin-x64@1.0.3': optional: true - '@rolldown/binding-freebsd-x64@1.0.2': + '@rolldown/binding-freebsd-x64@1.0.3': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.2': + '@rolldown/binding-linux-arm64-gnu@1.0.3': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.2': + '@rolldown/binding-linux-arm64-musl@1.0.3': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.2': + '@rolldown/binding-linux-ppc64-gnu@1.0.3': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.2': + '@rolldown/binding-linux-s390x-gnu@1.0.3': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.2': + '@rolldown/binding-linux-x64-gnu@1.0.3': optional: true - '@rolldown/binding-linux-x64-musl@1.0.2': + '@rolldown/binding-linux-x64-musl@1.0.3': optional: true - '@rolldown/binding-openharmony-arm64@1.0.2': + '@rolldown/binding-openharmony-arm64@1.0.3': optional: true - '@rolldown/binding-wasm32-wasi@1.0.2': + '@rolldown/binding-wasm32-wasi@1.0.3': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.2': + '@rolldown/binding-win32-arm64-msvc@1.0.3': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.2': + '@rolldown/binding-win32-x64-msvc@1.0.3': optional: true '@rolldown/pluginutils@1.0.1': {} @@ -2213,6 +2230,31 @@ snapshots: '@stablelib/base64@2.0.1': {} + '@stablelib/binary@2.0.1': + dependencies: + '@stablelib/int': 2.0.1 + + '@stablelib/bytes@2.0.1': {} + + '@stablelib/int@2.0.1': {} + + '@stablelib/keyagreement@2.0.1': + dependencies: + '@stablelib/bytes': 2.0.1 + + '@stablelib/random@2.0.1': + dependencies: + '@stablelib/binary': 2.0.1 + '@stablelib/wipe': 2.0.1 + + '@stablelib/wipe@2.0.1': {} + + '@stablelib/x25519@2.0.1': + dependencies: + '@stablelib/keyagreement': 2.0.1 + '@stablelib/random': 2.0.1 + '@stablelib/wipe': 2.0.1 + '@tanstack/devtools-client@0.0.6': dependencies: '@tanstack/devtools-event-client': 0.4.3 @@ -2226,75 +2268,82 @@ snapshots: '@tanstack/devtools-event-client@0.4.3': {} - '@tanstack/devtools-vite@0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0))': + '@tanstack/devtools-vite@0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(sass@1.100.0))': dependencies: '@tanstack/devtools-client': 0.0.6 '@tanstack/devtools-event-bus': 0.4.1 chalk: 5.6.2 - launch-editor: 2.13.2 + launch-editor: 2.14.1 magic-string: 0.30.21 oxc-parser: 0.120.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) picomatch: 4.0.4 - vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0) + vite: 8.0.16(@types/node@25.9.2)(jiti@2.7.0)(sass@1.100.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' - bufferutil - utf-8-validate - '@tanstack/form-core@1.32.0': + '@tanstack/form-core@1.33.0': dependencies: '@tanstack/devtools-event-client': 0.4.3 '@tanstack/pacer-lite': 0.1.1 - '@tanstack/store': 0.9.3 + '@tanstack/store': 0.11.0 '@tanstack/history@1.162.0': {} '@tanstack/pacer-lite@0.1.1': {} - '@tanstack/query-core@5.100.14': {} + '@tanstack/query-core@5.101.0': {} - '@tanstack/react-form@1.32.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@tanstack/react-form@1.33.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@tanstack/form-core': 1.32.0 - '@tanstack/react-store': 0.9.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - react: 19.2.6 + '@tanstack/form-core': 1.33.0 + '@tanstack/react-store': 0.11.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 transitivePeerDependencies: - react-dom - '@tanstack/react-query@5.100.14(react@19.2.6)': + '@tanstack/react-query@5.101.0(react@19.2.7)': dependencies: - '@tanstack/query-core': 5.100.14 - react: 19.2.6 + '@tanstack/query-core': 5.101.0 + react: 19.2.7 - '@tanstack/react-router@1.170.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@tanstack/react-router@1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@tanstack/history': 1.162.0 - '@tanstack/react-store': 0.9.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@tanstack/router-core': 1.171.6 - isbot: 5.1.40 - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) + '@tanstack/react-store': 0.9.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@tanstack/router-core': 1.171.13 + isbot: 5.1.41 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@tanstack/react-store@0.11.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@tanstack/store': 0.11.0 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + use-sync-external-store: 1.6.0(react@19.2.7) - '@tanstack/react-store@0.9.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@tanstack/react-store@0.9.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@tanstack/store': 0.9.3 - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - use-sync-external-store: 1.6.0(react@19.2.6) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + use-sync-external-store: 1.6.0(react@19.2.7) - '@tanstack/router-core@1.171.6': + '@tanstack/router-core@1.171.13': dependencies: '@tanstack/history': 1.162.0 cookie-es: 3.1.1 seroval: 1.5.4 seroval-plugins: 1.5.4(seroval@1.5.4) - '@tanstack/router-generator@1.167.10': + '@tanstack/router-generator@1.167.17': dependencies: - '@babel/types': 7.29.0 - '@tanstack/router-core': 1.171.6 - '@tanstack/router-utils': 1.162.1 + '@babel/types': 7.29.7 + '@tanstack/router-core': 1.171.13 + '@tanstack/router-utils': 1.162.2 '@tanstack/virtual-file-routes': 1.162.0 jiti: 2.7.0 magic-string: 0.30.21 @@ -2303,47 +2352,48 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.168.11(@tanstack/react-router@1.170.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0))': - dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@tanstack/router-core': 1.171.6 - '@tanstack/router-generator': 1.167.10 - '@tanstack/router-utils': 1.162.1 - '@tanstack/virtual-file-routes': 1.162.0 + '@tanstack/router-plugin@1.168.18(@tanstack/react-router@1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(sass@1.100.0))': + dependencies: + '@babel/core': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + '@tanstack/router-core': 1.171.13 + '@tanstack/router-generator': 1.167.17 + '@tanstack/router-utils': 1.162.2 chokidar: 5.0.0 unplugin: 3.0.0 zod: 4.4.3 optionalDependencies: - '@tanstack/react-router': 1.170.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0) + '@tanstack/react-router': 1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + vite: 8.0.16(@types/node@25.9.2)(jiti@2.7.0)(sass@1.100.0) transitivePeerDependencies: - supports-color - '@tanstack/router-utils@1.162.1': + '@tanstack/router-utils@1.162.2': dependencies: - '@babel/core': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/parser': 7.29.3 - '@babel/types': 7.29.0 - ansis: 4.3.0 + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + ansis: 4.3.1 babel-dead-code-elimination: 1.0.12 diff: 8.0.4 pathe: 2.0.3 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 transitivePeerDependencies: - supports-color + '@tanstack/store@0.11.0': {} + '@tanstack/store@0.9.3': {} '@tanstack/virtual-file-routes@1.162.0': {} '@tauri-apps/api@2.11.0': {} + '@tauri-apps/plugin-clipboard-manager@2.3.2': + dependencies: + '@tauri-apps/api': 2.11.0 + '@tauri-apps/plugin-http@2.5.9': dependencies: '@tauri-apps/api': 2.11.0 @@ -2363,27 +2413,27 @@ snapshots: '@types/byte-size@8.1.2': {} - '@types/node@25.9.1': + '@types/node@25.9.2': dependencies: undici-types: 7.24.6 - '@types/react-dom@19.2.3(@types/react@19.2.15)': + '@types/react-dom@19.2.3(@types/react@19.2.17)': dependencies: - '@types/react': 19.2.15 + '@types/react': 19.2.17 - '@types/react@19.2.15': + '@types/react@19.2.17': dependencies: csstype: 3.2.3 - '@uidotdev/usehooks@2.4.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@uidotdev/usehooks@2.4.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@vitejs/plugin-react@6.0.2(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0))': + '@vitejs/plugin-react@6.0.2(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(sass@1.100.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0) + vite: 8.0.16(@types/node@25.9.2)(jiti@2.7.0)(sass@1.100.0) ajv@8.20.0: dependencies: @@ -2400,7 +2450,7 @@ snapshots: dependencies: color-convert: 2.0.1 - ansis@4.3.0: {} + ansis@4.3.1: {} argparse@2.0.1: {} @@ -2409,7 +2459,7 @@ snapshots: autoprefixer@10.5.0(postcss@8.5.15): dependencies: browserslist: 4.28.2 - caniuse-lite: 1.0.30001793 + caniuse-lite: 1.0.30001797 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.15 @@ -2417,14 +2467,14 @@ snapshots: babel-dead-code-elimination@1.0.12: dependencies: - '@babel/core': 7.29.0 - '@babel/parser': 7.29.3 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/core': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - baseline-browser-mapping@2.10.32: {} + baseline-browser-mapping@2.10.34: {} braces@3.0.3: dependencies: @@ -2432,10 +2482,10 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.32 - caniuse-lite: 1.0.30001793 - electron-to-chromium: 1.5.361 - node-releases: 2.0.46 + baseline-browser-mapping: 2.10.34 + caniuse-lite: 1.0.30001797 + electron-to-chromium: 1.5.368 + node-releases: 2.0.47 update-browserslist-db: 1.2.3(browserslist@4.28.2) byte-size@9.0.1: {} @@ -2450,7 +2500,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001793: {} + caniuse-lite@1.0.30001797: {} chalk@5.6.2: {} @@ -2480,7 +2530,7 @@ snapshots: dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 - js-yaml: 4.1.1 + js-yaml: 4.2.0 parse-json: 5.2.0 optionalDependencies: typescript: 6.0.3 @@ -2496,7 +2546,7 @@ snapshots: csstype@3.2.3: {} - dayjs@1.11.20: {} + dayjs@1.11.21: {} debug@4.4.3: dependencies: @@ -2506,7 +2556,7 @@ snapshots: diff@8.0.4: {} - electron-to-chromium@1.5.361: {} + electron-to-chromium@1.5.368: {} emoji-regex@8.0.0: {} @@ -2558,14 +2608,14 @@ snapshots: fraction.js@5.3.4: {} - framer-motion@12.40.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + framer-motion@12.40.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: motion-dom: 12.40.0 motion-utils: 12.39.0 tslib: 2.8.1 optionalDependencies: - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) fsevents@2.3.3: optional: true @@ -2615,7 +2665,7 @@ snapshots: ignore@7.0.5: {} - immutable@5.1.5: {} + immutable@5.1.6: {} import-fresh@3.3.1: dependencies: @@ -2642,7 +2692,7 @@ snapshots: is-plain-object@5.0.0: {} - isbot@5.1.40: {} + isbot@5.1.41: {} isexe@2.0.0: {} @@ -2650,7 +2700,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.1.1: + js-yaml@4.2.0: dependencies: argparse: 2.0.1 @@ -2670,7 +2720,7 @@ snapshots: known-css-properties@0.37.0: {} - launch-editor@2.13.2: + launch-editor@2.14.1: dependencies: picocolors: 1.1.1 shell-quote: 1.8.4 @@ -2755,13 +2805,13 @@ snapshots: motion-utils@12.39.0: {} - motion@12.40.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + motion@12.40.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - framer-motion: 12.40.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + framer-motion: 12.40.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) tslib: 2.8.1 optionalDependencies: - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) ms@2.1.3: {} @@ -2770,7 +2820,7 @@ snapshots: node-addon-api@7.1.1: optional: true - node-releases@2.0.46: {} + node-releases@2.0.47: {} normalize-path@3.0.0: {} @@ -2810,7 +2860,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -2854,25 +2904,25 @@ snapshots: dependencies: hookified: 2.2.0 - qrcode.react@4.2.0(react@19.2.6): + qrcode.react@4.2.0(react@19.2.7): dependencies: - react: 19.2.6 + react: 19.2.7 queue-microtask@1.2.3: {} radashi@12.9.1: {} - react-chartjs-2@5.3.1(chart.js@4.5.1)(react@19.2.6): + react-chartjs-2@5.3.1(chart.js@4.5.1)(react@19.2.7): dependencies: chart.js: 4.5.1 - react: 19.2.6 + react: 19.2.7 - react-dom@19.2.6(react@19.2.6): + react-dom@19.2.7(react@19.2.7): dependencies: - react: 19.2.6 + react: 19.2.7 scheduler: 0.27.0 - react@19.2.6: {} + react@19.2.7: {} readdirp@5.0.0: {} @@ -2882,35 +2932,39 @@ snapshots: reusify@1.1.0: {} - rolldown@1.0.2: + rolldown@1.0.3: dependencies: - '@oxc-project/types': 0.132.0 + '@oxc-project/types': 0.133.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.2 - '@rolldown/binding-darwin-arm64': 1.0.2 - '@rolldown/binding-darwin-x64': 1.0.2 - '@rolldown/binding-freebsd-x64': 1.0.2 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.2 - '@rolldown/binding-linux-arm64-gnu': 1.0.2 - '@rolldown/binding-linux-arm64-musl': 1.0.2 - '@rolldown/binding-linux-ppc64-gnu': 1.0.2 - '@rolldown/binding-linux-s390x-gnu': 1.0.2 - '@rolldown/binding-linux-x64-gnu': 1.0.2 - '@rolldown/binding-linux-x64-musl': 1.0.2 - '@rolldown/binding-openharmony-arm64': 1.0.2 - '@rolldown/binding-wasm32-wasi': 1.0.2 - '@rolldown/binding-win32-arm64-msvc': 1.0.2 - '@rolldown/binding-win32-x64-msvc': 1.0.2 + '@rolldown/binding-android-arm64': 1.0.3 + '@rolldown/binding-darwin-arm64': 1.0.3 + '@rolldown/binding-darwin-x64': 1.0.3 + '@rolldown/binding-freebsd-x64': 1.0.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 + '@rolldown/binding-linux-arm64-gnu': 1.0.3 + '@rolldown/binding-linux-arm64-musl': 1.0.3 + '@rolldown/binding-linux-ppc64-gnu': 1.0.3 + '@rolldown/binding-linux-s390x-gnu': 1.0.3 + '@rolldown/binding-linux-x64-gnu': 1.0.3 + '@rolldown/binding-linux-x64-musl': 1.0.3 + '@rolldown/binding-openharmony-arm64': 1.0.3 + '@rolldown/binding-wasm32-wasi': 1.0.3 + '@rolldown/binding-win32-arm64-msvc': 1.0.3 + '@rolldown/binding-win32-x64-msvc': 1.0.3 run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + sass@1.100.0: dependencies: chokidar: 5.0.0 - immutable: 5.1.5 + immutable: 5.1.6 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.6 @@ -2958,37 +3012,37 @@ snapshots: dependencies: ansi-regex: 6.2.2 - stylelint-config-recommended-scss@17.0.1(postcss@8.5.15)(stylelint@17.12.0(typescript@6.0.3)): + stylelint-config-recommended-scss@17.0.1(postcss@8.5.15)(stylelint@17.13.0(typescript@6.0.3)): dependencies: postcss-scss: 4.0.9(postcss@8.5.15) - stylelint: 17.12.0(typescript@6.0.3) - stylelint-config-recommended: 18.0.0(stylelint@17.12.0(typescript@6.0.3)) - stylelint-scss: 7.1.1(stylelint@17.12.0(typescript@6.0.3)) + stylelint: 17.13.0(typescript@6.0.3) + stylelint-config-recommended: 18.0.0(stylelint@17.13.0(typescript@6.0.3)) + stylelint-scss: 7.2.0(stylelint@17.13.0(typescript@6.0.3)) optionalDependencies: postcss: 8.5.15 - stylelint-config-recommended@18.0.0(stylelint@17.12.0(typescript@6.0.3)): + stylelint-config-recommended@18.0.0(stylelint@17.13.0(typescript@6.0.3)): dependencies: - stylelint: 17.12.0(typescript@6.0.3) + stylelint: 17.13.0(typescript@6.0.3) - stylelint-config-standard-scss@17.0.0(postcss@8.5.15)(stylelint@17.12.0(typescript@6.0.3)): + stylelint-config-standard-scss@17.0.0(postcss@8.5.15)(stylelint@17.13.0(typescript@6.0.3)): dependencies: - stylelint: 17.12.0(typescript@6.0.3) - stylelint-config-recommended-scss: 17.0.1(postcss@8.5.15)(stylelint@17.12.0(typescript@6.0.3)) - stylelint-config-standard: 40.0.0(stylelint@17.12.0(typescript@6.0.3)) + stylelint: 17.13.0(typescript@6.0.3) + stylelint-config-recommended-scss: 17.0.1(postcss@8.5.15)(stylelint@17.13.0(typescript@6.0.3)) + stylelint-config-standard: 40.0.0(stylelint@17.13.0(typescript@6.0.3)) optionalDependencies: postcss: 8.5.15 - stylelint-config-standard@40.0.0(stylelint@17.12.0(typescript@6.0.3)): + stylelint-config-standard@40.0.0(stylelint@17.13.0(typescript@6.0.3)): dependencies: - stylelint: 17.12.0(typescript@6.0.3) - stylelint-config-recommended: 18.0.0(stylelint@17.12.0(typescript@6.0.3)) + stylelint: 17.13.0(typescript@6.0.3) + stylelint-config-recommended: 18.0.0(stylelint@17.13.0(typescript@6.0.3)) - stylelint-scss@7.1.1(stylelint@17.12.0(typescript@6.0.3)): + stylelint-scss@7.2.0(stylelint@17.13.0(typescript@6.0.3)): dependencies: '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-syntax-patches-for-csstree': 1.1.4(css-tree@3.2.1) + '@csstools/css-syntax-patches-for-csstree': 1.1.5(css-tree@3.2.1) '@csstools/css-tokenizer': 4.0.0 css-tree: 3.2.1 is-plain-object: 5.0.0 @@ -2997,13 +3051,13 @@ snapshots: postcss-resolve-nested-selector: 0.1.6 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - stylelint: 17.12.0(typescript@6.0.3) + stylelint: 17.13.0(typescript@6.0.3) - stylelint@17.12.0(typescript@6.0.3): + stylelint@17.13.0(typescript@6.0.3): dependencies: '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-syntax-patches-for-csstree': 1.1.4(css-tree@3.2.1) + '@csstools/css-syntax-patches-for-csstree': 1.1.5(css-tree@3.2.1) '@csstools/css-tokenizer': 4.0.0 '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) @@ -3059,7 +3113,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tinyglobby@0.2.16: + tinyglobby@0.2.17: dependencies: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 @@ -3088,21 +3142,21 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - use-sync-external-store@1.6.0(react@19.2.6): + use-sync-external-store@1.6.0(react@19.2.7): dependencies: - react: 19.2.6 + react: 19.2.7 util-deprecate@1.0.2: {} - vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(sass@1.100.0): + vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(sass@1.100.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.15 - rolldown: 1.0.2 - tinyglobby: 0.2.16 + rolldown: 1.0.3 + tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.9.2 fsevents: 2.3.3 jiti: 2.7.0 sass: 1.100.0 @@ -3123,8 +3177,8 @@ snapshots: zod@4.4.3: {} - zustand@5.0.13(@types/react@19.2.15)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)): + zustand@5.0.14(@types/react@19.2.17)(react@19.2.7)(use-sync-external-store@1.6.0(react@19.2.7)): optionalDependencies: - '@types/react': 19.2.15 - react: 19.2.6 - use-sync-external-store: 1.6.0(react@19.2.6) + '@types/react': 19.2.17 + react: 19.2.7 + use-sync-external-store: 1.6.0(react@19.2.7) diff --git a/new-ui/pnpm-workspace.yaml b/new-ui/pnpm-workspace.yaml index 620a7bb79..0bae63d7f 100644 --- a/new-ui/pnpm-workspace.yaml +++ b/new-ui/pnpm-workspace.yaml @@ -1,2 +1,7 @@ allowBuilds: '@parcel/watcher': true +minimumReleaseAgeExclude: + - '@types/react@19.2.16' + - react-dom@19.2.7 + - react@19.2.7 + - vite@8.0.16 diff --git a/new-ui/src/app/day.ts b/new-ui/src/app/day.ts index ef815f1ee..a4e7a945f 100644 --- a/new-ui/src/app/day.ts +++ b/new-ui/src/app/day.ts @@ -1,9 +1,11 @@ import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; import 'dayjs/locale/en'; +import duration from 'dayjs/plugin/duration'; import localizedFormat from 'dayjs/plugin/localizedFormat'; import utc from 'dayjs/plugin/utc'; +dayjs.extend(duration); dayjs.extend(relativeTime); dayjs.extend(utc); dayjs.extend(localizedFormat); diff --git a/new-ui/src/pages/compact/CompactEmptyPage/CompactEmptyPage.tsx b/new-ui/src/pages/compact/CompactEmptyPage/CompactEmptyPage.tsx index 3c414b688..914dd6e50 100644 --- a/new-ui/src/pages/compact/CompactEmptyPage/CompactEmptyPage.tsx +++ b/new-ui/src/pages/compact/CompactEmptyPage/CompactEmptyPage.tsx @@ -19,7 +19,7 @@ export const CompactEmptyPage = () => { variant={ButtonVariant.Primary} size={ButtonSize.Primary} onClick={() => { - void api.swapToOldUi(); + void api.swapToFullView(); }} />
diff --git a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx index e900e6bbd..4af8923d1 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx +++ b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx @@ -1,33 +1,30 @@ import './style.scss'; import { useQuery } from '@tanstack/react-query'; import { useLoaderData } from '@tanstack/react-router'; -import { platform } from '@tauri-apps/plugin-os'; -import clsx from 'clsx'; import { useEffect, useMemo } from 'react'; import { Button } from '../../../shared/components/Button/Button'; import { ButtonVariant } from '../../../shared/components/Button/types'; import { Controls } from '../../../shared/components/Controls/Controls'; import { Divider } from '../../../shared/components/Divider/Divider'; import { LocationCard } from '../../../shared/components/LocationCard/LocationCard'; +import { ScrollContainer } from '../../../shared/components/ScrollContainer/ScrollContainer'; import { WindowHeader } from '../../../shared/components/WindowHeader/WindowHeader'; import { api } from '../../../shared/rust-api/api'; import { getInstancesQueryOptions, getLocationsQueryOptions, } from '../../../shared/rust-api/query'; +import { useAppStore } from '../../../shared/store/useAppStore'; import { ThemeSpacing } from '../../../shared/types'; import { isPresent } from '../../../shared/utils/isPresent'; import { CompactPage } from '../CompactPage/CompactPage'; import { InstanceSwitcher } from './components/InstanceSwitcher'; -import { useCompactLocationStore } from './hooks/useCompactLocationsStore'; - -const isWindows = platform() === 'windows'; export const CompactLocationsPage = () => { - const selection = useCompactLocationStore((s) => s.compactViewSelection); - const openLocation = useCompactLocationStore((s) => s.expandedLocation); + const selection = useAppStore((s) => s.compactViewSelection); + const openLocation = useAppStore((s) => s.expandedLocation); - const routeData = useLoaderData({ from: '/' }); + const routeData = useLoaderData({ from: '/compact/' }); const queryInstanceId = useMemo(() => { if (!isPresent(selection)) return routeData.instances[0].id; @@ -56,7 +53,7 @@ export const CompactLocationsPage = () => { useEffect(() => { if (selection === null || instanceInfo === undefined) { - useCompactLocationStore.setState({ + useAppStore.setState({ compactViewSelection: { kind: 'instance', data: routeData.instances[0] }, }); } @@ -69,11 +66,7 @@ export const CompactLocationsPage = () => { }} > -
+
{isPresent(instanceInfo) && @@ -89,16 +82,16 @@ export const CompactLocationsPage = () => { isOpen={isOpen} onOpen={() => { if (isOpen) { - useCompactLocationStore.setState({ expandedLocation: null }); + useAppStore.setState({ expandedLocation: null }); } else { - useCompactLocationStore.setState({ expandedLocation: location.id }); + useAppStore.setState({ expandedLocation: location.id }); } }} /> ); })}
-
+
@@ -107,7 +100,7 @@ export const CompactLocationsPage = () => { size="primary" text="Open Defguard" onClick={() => { - void api.swapToOldUi(); + void api.swapToFullView(); }} /> diff --git a/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx b/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx index cc7d6ff38..c2f3a20e4 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx +++ b/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx @@ -9,14 +9,14 @@ import { getInstancesQueryOptions, getTunnelsQueryOptions, } from '../../../../shared/rust-api/query'; -import { isPresent } from '../../../../shared/utils/isPresent'; import { type CompactViewSelection, - useCompactLocationStore, -} from '../hooks/useCompactLocationsStore'; + useAppStore, +} from '../../../../shared/store/useAppStore'; +import { isPresent } from '../../../../shared/utils/isPresent'; export const InstanceSwitcher = () => { - const selectedInstance = useCompactLocationStore((s) => s.compactViewSelection); + const selectedInstance = useAppStore((s) => s.compactViewSelection); const { data: tunnels } = useQuery(getTunnelsQueryOptions); const { data: instances } = useQuery(getInstancesQueryOptions); @@ -77,7 +77,7 @@ export const InstanceSwitcher = () => { groups={groups} value={selectedOption as never} onChange={(option) => { - useCompactLocationStore.setState({ compactViewSelection: option.value }); + useAppStore.setState({ compactViewSelection: option.value }); }} /> ); diff --git a/new-ui/src/pages/compact/CompactLocationsPage/style.scss b/new-ui/src/pages/compact/CompactLocationsPage/style.scss index 67989c0aa..a31827cd2 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/style.scss +++ b/new-ui/src/pages/compact/CompactLocationsPage/style.scss @@ -13,26 +13,11 @@ flex: 0 0 auto; } - > .scroll-wrap { + .locations { display: flex; flex-flow: column; - flex: 1 1 auto; - overflow-y: auto; - min-height: 0; row-gap: var(--spacing-sm); - - &.windows { - scrollbar-gutter: stable; - overflow-y: scroll; - padding-right: 6px; - } - - > .locations { - display: flex; - flex-flow: column; - row-gap: var(--spacing-sm); - width: 100%; - box-sizing: border-box; - } + width: 100%; + box-sizing: border-box; } } diff --git a/new-ui/src/pages/full/AddInstancePage/AddInstancePage.tsx b/new-ui/src/pages/full/AddInstancePage/AddInstancePage.tsx new file mode 100644 index 000000000..750c4bf1c --- /dev/null +++ b/new-ui/src/pages/full/AddInstancePage/AddInstancePage.tsx @@ -0,0 +1,138 @@ +import './style.scss'; + +import { useLoaderData, useNavigate, useSearch } from '@tanstack/react-router'; +import { Fragment, useMemo } from 'react'; +import z from 'zod'; +import { Button } from '../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../shared/components/Button/types'; +import { Controls } from '../../../shared/components/Controls/Controls'; +import { FullPageTitle } from '../../../shared/components/FullPageTitle/FullPageTitle'; +import { SizedBox } from '../../../shared/components/SizedBox/SizedBox'; +import { edgeApi } from '../../../shared/edge-api/api'; +import { useAppForm } from '../../../shared/form'; +import { formChangeLogic } from '../../../shared/formLogic'; +import { FullPage } from '../../../shared/layouts/FullPage/FullPage'; +import { ThemeSpacing } from '../../../shared/types'; +import { isPresent } from '../../../shared/utils/isPresent'; +import { useEnrollmentStore } from '../EnrollmentPage/hooks/useEnrollmentStore'; + +const formSchema = z.object({ + token: z.string().min(1, 'Required'), + url: z.string().min(1, 'Required'), + name: z.string().min(1, 'Required'), +}); + +type FormFields = z.infer; + +export const AddInstancePage = () => { + const navigate = useNavigate(); + const { deviceName } = useLoaderData({ from: '/full/_default/add/instance' }); + const searchValues = useSearch({ from: '/full/_default/add/instance' }); + + const hasInitialValues = isPresent(searchValues.token) && isPresent(searchValues.url); + + const defaultValues = useMemo((): FormFields => { + return { + token: searchValues.token ?? '', + url: searchValues.url ?? '', + name: deviceName, + }; + }, [searchValues, deviceName]); + + const form = useAppForm({ + defaultValues, + validationLogic: formChangeLogic, + validators: { + onSubmit: formSchema, + onChange: formSchema, + }, + onSubmit: async ({ value, formApi }) => { + const result = await edgeApi.addInstance(value); + if (result.error) { + if (result.error.toLowerCase().includes('Device name')) { + formApi.setErrorMap({ + onSubmit: { + fields: { + name: 'Name already used.', + }, + }, + }); + return; + } else { + formApi.setErrorMap({ + onSubmit: { + fields: { + token: 'Invalid Token or URL', + url: 'Invalid Token or URL', + }, + }, + }); + } + return; + } + if (result.startResponse && !result.startResponse.user.enrolled && result.cookie) { + await edgeApi.createDevice(value.url, result.cookie, value.name.trim()); + useEnrollmentStore + .getState() + .start(result.startResponse, value.url, result.cookie, undefined); + navigate({ + to: '/full/enrollment', + replace: true, + }); + } else { + navigate({ + to: '/full/add', + replace: true, + }); + } + }, + }); + + return ( + + +

{`To add an instance, provide the instance URL along with a valid provisioning token. These credentials are issued by your administrator and are required to initiate the setup.`}

+
{ + e.stopPropagation(); + e.preventDefault(); + form.handleSubmit(); + }} + > + + {!hasInitialValues && ( + + + {(field) => } + + + + {(field) => } + + + + )} + + {(field) => } + + +
+ s.isSubmitting}> + {(isSubmitting) => ( +
+
+
+
+
+ ); +}; diff --git a/new-ui/src/pages/full/AddInstancePage/style.scss b/new-ui/src/pages/full/AddInstancePage/style.scss new file mode 100644 index 000000000..090ec8cb5 --- /dev/null +++ b/new-ui/src/pages/full/AddInstancePage/style.scss @@ -0,0 +1,20 @@ +#add-instance-view { + > .scroll-container { + display: flex; + flex-flow: column; + } + + .page-description { + font: var(--t-body-sm-400); + color: var(--fg-white-70); + padding-bottom: var(--spacing-3xl); + } + + form { + display: contents; + } + + .controls { + margin-top: auto; + } +} diff --git a/new-ui/src/pages/full/AddPage/AddPage.tsx b/new-ui/src/pages/full/AddPage/AddPage.tsx new file mode 100644 index 000000000..dc2d3d0bc --- /dev/null +++ b/new-ui/src/pages/full/AddPage/AddPage.tsx @@ -0,0 +1,28 @@ +import './style.scss'; +import { useNavigate } from '@tanstack/react-router'; +import { FullPageTitle } from '../../../shared/components/FullPageTitle/FullPageTitle'; +import { FullPage } from '../../../shared/layouts/FullPage/FullPage'; +import { ThemeSpacing } from '../../../shared/types'; +import { AddCard } from './components/AddCard/AddCard'; + +export const AddPage = () => { + const navigate = useNavigate(); + return ( + + +
+ { + navigate({ + to: '/full/add/instance', + }); + }} + title="Add Instance" + actionText="Add instance" + description={`Establish a secure connection to your Defguard instance effortlessly by configuring it with a single token—no manual setup.`} + /> +
+
+ ); +}; diff --git a/new-ui/src/pages/full/AddPage/components/AddCard/AddCard.tsx b/new-ui/src/pages/full/AddPage/components/AddCard/AddCard.tsx new file mode 100644 index 000000000..9db24bd33 --- /dev/null +++ b/new-ui/src/pages/full/AddPage/components/AddCard/AddCard.tsx @@ -0,0 +1,64 @@ +import './style.scss'; +import clsx from 'clsx'; +import { Button } from '../../../../../shared/components/Button/Button'; +import defaultImage from './assets/image_1.png'; +import yubiImage from './assets/image_2.png'; +import wireguardImage from './assets/image_3.png'; + +interface Props { + actionText: string; + title: string; + description: string; + image: 'default' | 'yubi' | 'wireguard'; + onClick?: () => void; +} + +export const AddCard = ({ actionText, description, title, image, onClick }: Props) => { + const renderImage = () => { + switch (image) { + case 'default': + return ( + + ); + case 'wireguard': + return ( + + ); + case 'yubi': + return ( + + ); + } + }; + + return ( +
+
+
{renderImage()}
+
+

{title}

+

{description}

+
+
+
+ ); +}; diff --git a/new-ui/src/pages/full/AddPage/components/AddCard/assets/image_1.png b/new-ui/src/pages/full/AddPage/components/AddCard/assets/image_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5247ecac1de537d2a1ea7fc352b60b22cc63ebb6 GIT binary patch literal 30643 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 oap!Sl*$&hm1uAbM?gGW%^hDY6^u7-TPGSH?P& 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

Fk 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 QcLLyNZ*$VR($XvLKUDFx^Z)<= literal 0 HcmV?d00001 diff --git a/new-ui/src/pages/full/AddPage/components/AddCard/assets/image_3.png b/new-ui/src/pages/full/AddPage/components/AddCard/assets/image_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c5f2817c66257049490108a27d382399d76a9285 GIT binary patch literal 45686 zcmYJbcRbbaA3k2m%HAhrudH*dP=^z;A}d+p7}>Jd$v9=p-iip3Y)UAcYzL8|lFd0z zDf3u|GrlkH&-eHJ{o&zphI>5k=Y3t*^SbYs6f+Zjrc1n+&Ye5QWN2{9;@r9O1;Eb? z9S!i#SLFpu;1_*>fo<@)bF3w2Kj$SrUsnd+JRfYKuYIm@g8vWj;-ZJv9j$ZcS~3}k z&eXtb<`7+*kh}iwA>qzJZs+v8JRUliwiLJm-`F+0rDYj$ev^dGwI_sb(>or4*yt`^ zP-4F+lFct(P%AK-+ITcAamoImb;My)01tM`A(Xb+9^@)|J#u^K#%>s}z#!3J-Ob+S zU3Z7!!E>$|nW|rw?7Hi$>cZI|s=MPWjz_^UG4se6QpVPgh3!xnd~D?AtqwS9jX<8* z*GT^a$?YHvZGET zPV04&qSBL9x&X}!Yu<6c;kh&)xhwLsCmfY&w%XkBj{K28S&&u+_P8p02b*&7x$Xu!!C05>K{+K8DuxhOL*U;6Nd2iL& zA4`Pdd=vvCO`Nb~nvFM|;W+JQcs!+x?I?T%`+FJk6LBajBs+vkb&1A@G$VFnG0wlV zb`JYo{tj~sD1jIeP6HOAA$^W0q0GL?EE+^!Wxo!(Dyzs}Ue>^7%ya^Oz0Wm5MfZH? zO~uv*s~y)d6o@fV7MRpUb$x>V(ps&E#okMc=k*2@@ zPT}Ae-TEe97`eGYCIYGuX(rl#DzT7A5{9axjdU2!)k|yR; z!@^w%JaN5d+`xxVGnB``ThT~ue8wu}wBf*ZS_1afKGjD@0k(cW}xv9BDoBvXK72$T~X@SZGC^rpFABeGD5?mG>V*_TGOJwZ{;YEK z2nq^Rp_-={Dfj7~Go<$R_4VD-xcn!S@XzFC=A9AmUP7I9>{wF|dtyhyrH64xcL{nN zo|RXK8v(rjuI!*p)fTnhcA`aHvlyYSX^q{YiX{I?~PB<3+~(54TZ zX#)PyBH4*9vxTXv^l(>UrG*7W>L<02s8G|yl@~x^kNyf3aT4dzQUo3zyId`|`=1BDhu1$EcdB7Yvyq@<$8Wyeje{(h zV68WD$YjYfnn-Y1T!k9qkq+a>3u|P;so=$7ef?fBXDphgpV*h|cHy_>Ba$o;$0TvH zH5T@BiAN_@wOlm*vSinzy$9j-0XN3q{?m*UfFgDvV#!eh0UQ6GmF7j$P71=91(1O- z&ntp=x?;yM1g1nn9NQQu5D$Y<+&{JvmE5P5!b|T(I?g!J(ZtnvK7Ao+8q7An@hfGy z@1T%2#x$0{!uxLZy!V|vCu4yjry?+@CGC7;BzdPn$dhu8WsqK7lR5D`P3RhN)@f~C zoj^dx>G!_X&rIOY2>`-RpLXDCGsbuC;kjbJghETt^!3)0d?o+i9Mzfy`i zvCtQ&4*b{>L42Mt%$Vp6Y~BaN*~~*ne`Q|(M9Ta?#C5l2S9-*5@DwDg58fh}G}jx6 z*cFR08M~U70CxCyx-gL|+1p=qHIH>%Eit*O7g(`=-~Qw(v5;3=NH()S`4>hKnn4;u z{fs+%GSwMX=$&srcYb!S>(gzvS;cFshT=$6qnT z4YUg3a*l9|iQtHo%;75{1DA^!el|0yZ0XAHby%Rc!-sV)*2&z{Be^p;(u-vqqZ3kJ z@|Gh#^z86A7`$6V8R4@EN+Bp|D?a8rg)$zVu0Q5pGQkL;OgHeY0b(U))P}Rb6=a%dcZ$SAKmCGzOjw`Ej{f0 z94V|kRG1g2%G>^&VHl6lMiF?y>I6``iojqV*~Z6vw?g%C?k_u1vW)J^MI3=e``DGTIXeDKFh*8^2&Po zMVL}vCi=C8hraR7{qE(&N%B^sZ-0WIH6{Av%<+~C@}zK1kaXBYz6vm`YZ5|MXL-*5 zA2L~FyXF;pQmagL>k0fC*n!R@L0DZdFok^m2vvd#yQhU-1@sc@beo_oCKm{+5`IEpz(Z+YXBvjk9Te!E>~E5AiMpJ z)uH8^le#gv$`cWk(;>e2jhw-d@(c>-kaK#n>QmXigh-m0(bEXzu*@7Y9t=}O#KbwPfm$#F?MpvTwLD|| z-VllB=xEXH=*0NZ#-iIYrV_L|)Xy?+1sdhzR6*<9KzIL9RsGEM7}8rlFNWRjPw+Ob{PfTk&?Ea-VC=*1#D+q5G4?CCS9}IMmYIY^P!C2RaEa z8%f*JE&+DNvTQwR%`*xg2XHjV#m2?l__-7DiCv|YaTOZRGx!P*&Ynkq`CNS_QTG0C zLnM~|8A5tTl(t_yBI)}@JacYA68gUdf6F9VP$Cs)!2gU#XMzj+x~UV#uU#{-1n)KaV$LX$=N!*r3P98<=c!{ z%Qn=9Aip<;LJa#iSf-^bU7q&v1gVMQ;1c{27kkV+E`P3m0_;~BVBt*i?#Mp&O0QLe z{^^Rt!XHVE6@QCOIfp1(Upexl9GrZ7(hEuYU$5BlDh9=;KWViyrg}hKJZT$ZjDN+j zgw(##T&Bbmm#t*%`rpmZPAkjqbytWVcb5HsZ_m{$^7X=~Qyaq97<+35w6}-zGyZjD zPA*Y|!t!CMByhhI@5Q?XP^9&{w_L=Z7-vR&e5Ww?yPjXYeZ}SAfV;@o-vo<4R~JuC z^;;PzxASD&M@@UhxmhL*-tpPjHH%Xav;=aCi# zP*mfIa1m`;i~#>X9+|+5{&yGx$%S^Lpn9q+nbX)eflvsyBM(A+imtk(teZpP^=WDM zmIbc}bgHbgMuIT_$#J5a06U#kaLe1nxB+1 zieDlH)a`WcFi7;B9$BXkerJ(`y4T$BHkIW)ykz(w_m%XJyu1R7vbrgZ{w_!FVk(ad z|E~MfPb_R&kj(yvS#ehx0>ANY#~hmn6tQZz?meJAL&R_T4JlXvkx^G-PBXLm<4m_h z#**;o`f09uV!w9026IzKgDng(2)pn_ijZ=jKGksGXu{pt*O`K}`og=$IZi~bk7#_I z+3Pw@Wdx|dtK$7Y#VbYQ_6Sb5dNsT;T=vok_3mgsM0x0NwJSE&c_a-*XM@75gzhjopA%h z=rez_!CbmpEd#gGS?5C@oP3e2Pnx{~$lZ0CHc@W&gNDlWBoImQ(d`PUx~?$(l^1FQ zSeJL(y3Pciqz~(GjD7rEc1*3+&f0p=--n_go%|NoX~rhvsVe0faC!Lgy#|-C6ll95)DnrbdTO_2$7E#KuisVX{rqy)KI`5< zM>kJ~KW^QlvvYZwZL6TYG5$-mo?2c|$kw5CU0%T24elquxi*JWtV0mDyl zxtuIHy9#LIpVaP6)i@bvwfZUFLz3p3GyQj^Iv;uU?W{5c5u>APF5^PLt1`y~Ml@5R zPt+w+YH@Ir(nZ!dtfTvdbbX<*)vs*Pd zQH?F}#lV;N(~+KNGC8Sp(R!FTrgoB4tp%xk)c=7A-~vmgHeqh2xCMX9@(Z|o+774iuTFbJ<^rSw zC{ZUGTA<2I4%{BZ`&(>U>K@k(O5cI=Q|C$);eRyVM!ZMk3q>cJ76Wb`#hf1FwuvE| zK*4W(PDP}EH0&H3jGs#8;2%z}HG%W)z-;m& zr*vD;F7b|kd2p zo-zjzipYARjUN%MdJEgs2V#kup*8dT81p zY28SPQEkht=G)(Rk`l0R{ta0mSj{8&_Co)Ko|z)Y;l}d!HR--&K+N&@vsr_A?_0|z zcM(&1mQC22%YstSH-6Qt9 z*zFPTZ3rp?NLJr}ecP2)ocrd|SaSkZrBGv6m?eUY$W6LxREqjXF82bG>JO7@?9k@W z>aGuv0LKuQlwPd0zvnj_9>!PCt6N*q_)HoZ)2$?+vR?z78^#Ey-v)*b(46+A%q$*@wHqAya-v2QdNVu!Os}Doaj{`TbjQ$pU zbm)0M2vX_tYefO*_dzdEer3Ts58Ij;4fd?7V#ncfR^BJ8bU=pmE7Mi``hyTLxk=A7 zKrMOaRyRP7uoQSgDUYB8ixMv&7J(%M_)Uik(CF;bN>0_I-)LE4U$Y3(-n(U4ijoG> zT=xndy!Ko0Id|{z;!aKf1`yV=%b=EVVPgSzTKb%FmA3!qs8-ODm2uv@nxJaFjTtE2e#cza`k z>K+2mK_b;UO8Ni!fB9$aaG1vdnKif)UYu#C;C6;sb=T8u7(1Q!h?T%FNm6rsdIHs* z^N;4}+)p4b3Y>{R_9kwO;!Up^(*a3CHHNahpeLJHzS6{<^sJ|54&awDRNf{Nt;8hk z9;gMR*H=H|pN}hZDl#+Id;4aaDamSkVO{%gB)0&cATU(dxU&&SAFz$u(WkD@871o&UGy&jG1x3!r>NJs0uo9vIt~JP1*+A-gHtAc9y5kZ-O5 zt#Blu?35AYm1U#9h2{$PtSDcAy2LG_ALv~Z`1mfcg8$#9t)&J!u>|H@ryL!~`M)v* z$gJlfLE@j12hD7YpcK!Ys)MnbqF>R6 z^A1$GINY$@7)q=k_z-anAk=e!E&*P2wj=NW`|o@4U4ONkrO1{8Kn5M0eTm`!wovyS z29%y}X@QtGuyTpjkM9q%nf?Ft&0LrI{}3^aEw#M*f9n!?`G3jJBM3~z4oH5R{4*f= zn%GwV#O}k!YosTTZ_l!Dg4MIrM~Qq|YhkXt$88A4%*!nxZQP6s(Xc@r@Cm-fC6CD-!D@ z5JOJLyK2fH!LnxdgP6L_M4LX;u->;j>5=XP#6S2+&zCfyrqOf55+s3w%}uqKMhPUK zG*}r&b+rN8^+n48vr-yPQ=mF2Z0 zodV=#FyLn=`oJmPSB0CE8BZTi%B+t1+!3e-osIN><&IG)($fDYIE*g+xQRElLD1?d z)P2B0*v!J%WABv{q0j|_AWu1A(WD|QV78c1%^!cG1XW&9?wLg65=-ut^aPkZ083D7 zGAOP+Y2Cy429$=CYUB=n{`DqQ!LObl@Ngy!bLA}v4z@=3HYACt&*sO z8)lxn&zMj4Gqgq;b9sDf04w{ zA0QQK#yKIi$^SbYjd442)wO|E)Y9?knrgqolmW*9ZfG;q{J|?>*jr!r^h#zGoBTf>ZoYB`zVV9^FW~4t z2(Sv3^;|f$YA`ckWT;K6P*!=2lcD25e>V-;j2{Nc4i7tLV5hxAoenuJCTvztRR77xlmB{BHSK6Kbxjm3JHi zQvQy~E60YqyIM2%7u=dqBF-D;pN%y)DX=E^tgLgoum?Ffuo0naYL9?;s$BE_-BU6@ zU*xH4!`8g24yeTyu4AYxGQ9nx9cG?sjnuL_@VJA&@A8`%k6T#9IDG=-Af?>xoftwmfG_Iwo^8b4FSYNK!5| zja;guxv1lSyr)qhHG<;YgcW%(uA5A79g;ILGp?_^i(4KzK`-wo;PXdN#ueK-*8fVt z8Qr%@IweVl`UZelf06342r1>pWenblkl%6ap=^|q2T>16hbXeV6#ZL6*((MS_2Q)g z*s<_(^dXIU@* zT)8eFj8u_BfR^~=c?Co_&S`H~aRxn;abbIRW2NP#-Ac;`4hE+gR{%$rpNN8HHCRa8uw_rxiR z3kKYX*)l_o(_SWlYcxfH!2`cVphP zHT_Gf`lYgBuMxcQujU}~j#FYo(Nn)T;tYCcmS2OS*a<0*UHg6S>kD*)%coOiTo4IH zG&R*EZ&HXXT3U>5xBYt-7a6&k{oemdhxuPzLGh*Yt<3)NzRR)TO}dWx81BF1op-Ie z*;8<=xyYSj^y0)O@yVSgS!QGrhu%uBN4PhvJLoG3OupIRJpGaM@Czkqd(G5H9hqCQ z`eyi?Z2${agO;ZWC41zA?>KnzAGuw6nMI#qX2(F=ltdwF9k&^x1yt!(Z`4^J_sVO$ z1=?e5Ly}xz;o1WtMLE#%dX7|pXHqMDwX`wLXQg@t6lwGiaCMDM1coFHcthwvx}O*M zu!prqOoj!w95jgB$?I&ueHPq|LCtuQfio_NIum&_W%3-O!y=YL5+jmzk>lQ-t|Gwj z2Tpr$rRXX+$3Ek6F)xB56>fc;1h`Xe-Jx{J`tit(^ui;1!f0WiD?I8*6=qAe%Hnut z#ZkG)%)RJKyII_^28!#VA8cK}V4Prcy~r}ccQIMFmuidmJAj9@(BE_g>=giluNH+P zKnL2#%$*pv0<5E`EH`iOeH5V>D@dcBP5_dX#78gOL+62^_o|UkH`ae3 ze>0L`mCZk{oT58r&+i|H?P6zWCK?4=s&pw`k}!ny9R6zFSRk9p=dsZ3W<-%CSS6;L zK|_o|=-{QAlShkDM)l8#Zv{8I7d@3187ZA9g+a}8O96xQRe78h0j=jumE3yuFBjWV zyRfAxK(9>>R4hA=Mpp9i6X#O^;vVi=hbs>xIH2&0r_b1^z)S4a*9uViSP-Mlh(D@@ z5_Y@^Tc?jSRI-1~Mq9Z<++8!CxerU>#8`f>XKaz`d;7k_zVXOq;44sFJS`txdExxz zDAxRirOW+cqqzT)C4gM2@vDG;yax1|Cy6w~y#_MdEI2xFc09X;5P}`{YT8svUy4~< z<}PolkPIv0`)EL}3L5yT^^CwHTA+2dU}w^^Xqd=w%b+L~;#lgEK;wpxbK-a|=dzWPbiJC+IHzT8HlVk9LI~#pLUPoIWhrKx3G~>$nFhK#CNX zfgGT=xSDAD8D%U3wW=bQD}FpuLFR;?KRcYJ=Pt1JL*a9=+XEzr@uf0U;LcGJ?WyY6 zj#Y(}IOVG!=@I4SZmJ!t5v?vB(31p(e^i>2fOWxqH(GUj4}xoQ$ltNbKS>&e(msdv z`ksE z*7B8~7O-F%5`-u~qG@5_iuF)bE#)bcvi_%Y40ZhV1o6*i{@O{flZU=0 zGAELLlJ!OgOkK0B2oQi5ayWE@p*-T1P zX{#@w!ti;h#AZWdsXf#8Yd_-Fc1W~04iv-?SVHJtu`tZCbZI&l-!J&k_pBB*`Ww6@ z^h5bZK^xPMk?Xi^Eb|S=U*dzm0>?9`WionNaEn zQq0*&Ea?vb25?--ymsw>B_OWF)o|{2MvXvV*E@csfjqnP<@0vpL$OROa+~(rS@9FU z7*eSm$NCN^JB1XT2o*ogu3*(7&I(bjS#>{O`Af!^X_wY)m*(jv96CX=@jMtO%1h0Q z-%JEDeFqe;TYdkY_~;XkYieq!-vpj!5>T%l;rn$ho3#7YD@@jlPxgHZ#uKq8uxQjv zvJQHf8L>DUE}Rx7^DP&P@1sWkZX?c2wv$(e7n1x|@+mt!s>0kk=DB*xe$QTSEgnTA zn>Uut);L7e7bAE3T=itJH~U?61$Pj76wkG9qFDG%+iyJjy&Wf-tE^YR8n-E|LeMaa zQ;$TU6!U%;sM1CoG?J+H%}1F3ryu`z^!^;>#D_%cONWtCx04$Gs=l^$=HO``I0*R@-vdF?`+TZRk-_%I^rS(hCd%Ffd#OwOw6xDep`N33Jv z{YiecfJpgxb@HR_XIlbKL#q%aXniliZXGUE*v8byI(GL;CN%YbRPM<3`9<@{H>)RI z7*-~>UH)7cD2!TDTH+aUci0Hm=4!s&eN*02leze3p(}GD%yG#Fkt2M2v`=_H#F``) zQT?{3|iY9>PN6ljRpK$p6!gIz2 zurpw{Ec5p;hJdg8tWIPP^1*Yx#Gmnw{O4>mwTsSyh}bdVQW34gB?8ew?=7B zD+Ts7z{V{_mkmI^nT1n<$u~-`#U~hgp-VAVe|C!4Q(tb5Bs5WX6}me~vB{H>6MJB4 zR;If=pHaucB3A)(E0P46JJPmZnLf{$Att&zP5#`n`z87~tz$T(TDoY1ctrg&y z%~?HkbA9tkYGN{-X=7tU!cdThH_#at{_YZYbMwki{G*8yaLPbQ_)Hkle&8?fwP#BW zC!+?df=P8wf5aIw-fK5uDb@@w=8Sj4wyG!;K_5!I#lUu!gbOk0yzVlKiIzCOG;*R z>=rr7L*sE&4DVlfOo}sa>xubu7vMbjKz8@E;kGvv?jgwQeXF-Hgcf*s7>reSWvpqD z)%=U>ivG@TJb2)ngtd-AeKMWY@U^t>BEfd7H5glyIeoey(*F7#^1?A*^$-~t5pYa0 zMN*PpW`OiGo?YCU9V@&Z%w0-z1S5#3Jmd z%AtLdFBgdD`EmZtkOQ0q{t(L>sZCv&itSzo0Xp- zpeo(4&UjfnUdW$%66!j=XNTl-GllbW=SrCtxE}I~sKafY6+GrjOnB6BBDMSdmMMY% zpbSw~cA-DDBO25)^dh$@4v{YAX(E%`@tA9`fyyJ#h7$v?5mo8Q` zwggP3(-DZt2*3Pqcj4yv(AB-LC z&g?JQ?R*(+zq9DeDS4awNnXn9dr55CVo#R*0reK% zlFksv(cE2c<|7Fn0los8i&p~2oKN8b(PYG9x<9W%+d{B|2Vb9ZxNBJg78#tMY%D(N zW4mjSWB2N0;s-S+i|6w_qH96YF4~PW{>*;HMMHcw-RWrd?fk17#v)~|uvv3cgI11z zO=*38wAW6jUTooo$Cud8%&$1uT|@o+Op(byzrct1Q|%S)OHq>1pH_p$ANe=eJ5 z0zI0-;eraPeECCLt(dg>p(-Jfeo}>(;Xs_*&ulu~c|^?3ol^Z^@T#ht-a>TQ?Z1ES z0%n24b*LJzOmCjH>=odOiXEBSqVse`zcVKxHy-)9_BP}!tpc4loH2xG@sLui?KsNm zQ;SmkfX$}|SW~+f8!8jSf#)^aD*$rn4fSdN6(pDYxK-Pr3sooAvUBt9>L?X+i&Wr1 zgBYM8@&5tN9%O9-m1ih>=`-q9zw2%3dj)w-*L#omAiBI4ahIpgwDT}k-@Q<}i96i3 zo(5_B$r0*^Ngb^ww@}i9=678p7AJW0#(x`Qh7|%_CkPi{AewLK# zeYXbuNPimO@$(Oe>|mTnVDB@SWlW_tH*P}u>69mwXo4i)icAXT;kpAdUIjb|Rti^K zLeIAc8})D=*zHW)7QKFRW%6Rnxn%0_>>>=0V6?32{A{6o)ev80>vsgkc}Q*&cFn~+ zgl-+rqRC1~kRIy~kju7Rab7J^=HWRBg4BoAS?L0|!2rYjT2A%Ici<#XeUG1$dhRFS z5Mxchn><**ujUVxVKvXb6~opj&=?=(UiRb?c$zA%pKaTW- zgY63a^VeH3B|yGO7O>78X%;d+k{=C`U+ulyvkd8$-3$~o5h%IolUhb zAix1QebWwwO)0qww>E=wproi3)u}%0OBnRb3Ey5JSM1|K^;1_0Uqcv}{r?&R!WAt6!iZQH0v<DA_tIuO8ubD0$;CLgW;_idWnjGN#0aHQX;C^gdN*8AAI44#8^F@-4 zTG>x?uQ7v>sR_oG-{?w39I;L2$}=1TyGQ({ZJSfXghRK;#kE`P)~-G+Z5dq#3*Fnh zUp}eSL&w!p+)fu4mYq~d5^?q&?Hve7Ey(Joc@uIq9(plQwf0*23*fTc>bRIf=bJYs zD<8aBIDS}c!@0Tc#f|oJK4dMiW>nI>=EYYV&#WcaRIe6W<`hxS7_>6`MfXx{mKRqt z>wvc8kDPXGS$}rH%!I!}sd+lh2Tsd0N!`vG^$PR>+PK*=>A9VM2q3XX?5Nf8fQf=l>i-l$R$)?vOBK9m)3A zEsT}2b7N|(w8YV@;24Ut9|DAIC-gl18sLmt&~!RQ?%bj~br;_g*GG_j%P%REmdiG| z$)`{UXro^n821E!lWN&<7{hdY38~FV3sSns+u|2Qxr4Zl9|B~5)lR7H9(YZpAgL_c z!bbXjzbk+VH9wMj?~EA*IJ|k_$~DA;!=p*G3rDrR1rl8*L2!zd%I`pKAV?m!UXK9v z7Vhtb)ox=u0e8!wDPqduovO)~upkTYYx|1s5sz2SektP2w`HfDwxN;IlBU)lK|xmM z_p5GlD+c#)Em169ok{ZV-%W3qgu6Xd=@LF<2ZkV2K!V`*_npbJAoH7$sB|T0V&LQY zUB|~Ch*O=*_EcS9I>*qDmab_&hQz|Z75T0kz0F@6Dn5xde9y8|H-sqk>(u{ds&aNVIQYziYLdER` ztkrSqdqpe(4as;5wf(Rkw{l}2|48on0DMkL1fNst@r=PGdv;Q|Jc`_FwIibZiwBNS zS1KK$57dx1ssJZWnY%daj-Bqt5JwfPJ_kyE^hJ=5 z>Ree)ey~MFv+SAXYaM?jPgVa(0J)2}s-2-2W-*%XBE;@c0SI zW4D3uW<2`Rd~>51r*MJ0+1(C?MWvGYn;`b9a3*VhT$AIbRGIt3;e;#9VMiz0;$wA^ z19SvboboCoyX3Q|&#x(mvExd=Q zI6c1N$|HIG)6J}bxvD^$0^v`;pXM1UEj5gh9+#U1G!)5|DtnjT{>1RTt4x^hgkSS` zU&;1hhoAksd~5P@=PSAMuH%skd28B>k!qLZOafCgLxk|F+WqQgE*ILqt8;@m6S22A zM*Eg`J`Tg@Ir;p+Y8RUz36@5PMDofl^!Ku~={hh57bu~09F+M4TAv#Q;6X{vk0M3i6WG`8Vqf(D=fA*}F+>qG z_cGU`3|*B7dki~g6Z_hMY(Y)3QE}#KUf<-?=+R&ls3qj(P*Ls}>IGeu(R-t+k#+YS z0PZA_#Hcg`W3F`Jm%${i>vOf>=tP9D-xe>De__5gD@TFV=LxZ z1o?QyrndJ|e_>KeHm-1%O?Wogq(h*@qcQvYQYMvjU95WvMaahjC6Bpa`S2#6Hq)Ok zJKSF|F^-!GW%k^Crd+h80I?q93uRifuMVZ`M6a(cQbn zdC{P4OmXNH+XJqQ&21|muCaiY{#wSMoX1dT}*htwGOvyG<+yU`+vFQsj&B`}%5ef}V z6DF2=B1qUB&d+0WiW+VBpmV_+F-1+`2E31u2Xv12ZQ)oAvY{MbPxbuwl+(YZq zuJ&NodCGKtf_LZ9t0zgEw4LF7(RF;CHAgO(9G1p^L{WlCuZd&ON~fDbC*n`+{zQI? zb9aGkrfyv?H@BYBk#65Wn*=xGUVc-Q*YE4dK4+8po#sr&96CMvzu%Tfj%lWxz6{F? z#~NVZK?}~0-Od|Z(U~5BS6R2+oM%Z7!$%EIyRyiI5a{84?|VFJ^>Vk`JxtpG>PNmk zo%lM__V|rFdz*J$!aUkuvdQxHk#8))H-qG;dwYy#yq|g}T|;E>GW&1~RsUj7&4sJU z2*fgCM?DkcXDewKHRL|GCA06oVX{qu98rmuUA)SkoJV*2s3$zIDmCiio#f2TYOP{% zTc%xsJ#dyed+)ITi)d1zHE#}5J+Stg+VbliDzl zhw|tK(c+nzkkXwG67u&ojx@=Z2H3tf8Lekhzm(so_eNch$mL_Z@9N@p`yXrHWBU>* z=eMWrQpy7KM88OtMdAx24EauO$RWF}HJ{(uv)+E{(`|o2?Y>p~R`h-fvHrT=_(RhR zj>(P7hTa~b4rlgIA>JBHQ|Q>uE88eb+omN+X^jT&J8B-+6ld|%+As$65D{{=i31~U zhg16UE3t}`h;PlRxp&6K+m)XW*0Rs=y|JSUaSxLH%Gmiwf=vXMBmP=DBYwMa;N5ID zWJ=4N^*nm&)hM6eZ8?>gc*URy*V@H=Q+JHTPOY-ZAIl40vCbV{mI4y#^V4fjoU)P- z2Pl&FCS9Vmepeyz@C-kc>;esvvFB;5gcI_Ivu?_V{=IA-)KX%knasm3e}NFQoBy|S zqIiO;;z;qQs?t|}_@X#BVr`x(@7ZaBE zcNuq}MiW_0Pi?USyj#hpBR5<{RQ|odl->@J+~lb0 zwU{V+ycwWt0y0@y?;Q4Tg4gfmVc&gWeArqZOZdm+5?&#buSnwL8b#&~#7$|o}qKVlKxi3293^0><~&j%!} zyE>FRf8Q#t{t6HhXzoj@lQ>u>M}$S=)~DLCAeZO6IiEiFO2dBL8J*l9bnuTq1qoUy zc`fP*ND;EbongE0#Xif_%XF&EY#Tih7PR4KU(Z=z;LmsAWnb%*t-D?CsaEg(lA^g)3}Dn(lAUIY1e(;1+w_aWs+HfV zlkVm?V7%gt(f0zOF|nt@ewSMRKc zPW5UV-0;KXuzJG@#2jEb!V^fXG}TFcY?pcI3x6)AhGZ}9xq-%Un=M`A-c zuU|U7vDuO|tQ>_2@{e;C>#NM%GSSz1#A#-718ozvu(Btq)o50MvF`WyJN-6KN$-|Gv-SsgLU6UBZh2Wa_h|-a-1ulh#be+OksUmrN2oF7D0WH$ zmK#dt&0K?oADs#uR`!bu7yey3t{ndrLdO*?gG=|l9c=HInY2^14zJ}D(8*cfUAWQ9 zb6+s|2Z(ycl{OMOvS~Tvk)cpWu+aFT%vzf^)(u4xUvc;MMFmiBXg(0XGV*J#&+Vj- zg1@Q|a_PL0a!Q7>mXEUe^-p?!+(9i{KJ71d!`XUFXoENw)FSn)s=ZV*ltsx~N3E-w z+TBe0YD}+1-ycK|bA|IM(LUM_CQsUjbtB)wCl?6a`6c(Yw&1~g_A4bx%InV%Hm zc96rrD9&cRa{Bl@UPBavF%+t`&UwH&&1W8{(IxrxeCr-~W7n*dII7wsMktha#-TZc zi(a#=c2mJ9tCisRb%gg+MBIqY~t>?>K9je>D-n{pWQr#|-kxx;h8xspbs zZPRL>E$+Ky>y2c|u8Mt$W^H{b%~+YOtVG=*&5CR5=-fa@Gs)8ioA&7Yj1VqYShy^^ zkAGEKd+VTtFR$FDLv@xM*GP#1EbM;HA73$Hjc5Bgm1jiI2?5wOt5m(N~3 zN2cI!=F;hPL)ojP8#u&M#i(f-IP2~zE-^8TF>iwSBgpS=%gSVfnZAi*?Z#c7UAU!( zMNnk(UTw(k+Pi395n1M*y3|jH&sP~VGrUxpmbA(^iSB7mZw%V|{VZ_JWx9d{j&V+q zk@(30PG5V_=I|a0+nypaFcr8Z3`>>S+u7!`O+_(%yGoQA?;c1PxpFlgd&ZoJ2RkhUN5ZZhx0l?)%ooJ-{p{tK6# zUq$_4S)7dNV8?oB-yFcCj?3UkcT8ahgYxv9EwStV8!Ec(buRfOJdE_ix-GF78upxD z8@sGAYZ@4MspdShz+$H$|0WLu!D-&quY}noKK@GkBcHK%6AMmA5Brff|Ab>Pj;{ zGsy8fr9+dBarR4=%8}t$jhD-pSGSD|q7OS9)jL`t97f!=Z##i>C5{>BWZ1{ru;!H+RcLUSc{r-ft|t`rPAmBXqPqAZ@)3Lpyn4(iQk$ z3^NrWYj~B+qAP5p8A+=jusnmFdtV+bT&(~7f(;=qR?HKP%-zH6xUVuaz54BK`N+}^ zIDaj~{2!XGf-9=7ZHqJvDUI~dARyh{(v5T@-3=lzbazX4gM@U)zz`xzNp}w&`km)p z>-zx%XYF(Dy5ipAPxSsa70ox$Gy&=l35YIXoccTkuwZi%n*P>p3Sc4;2af>BJ}o;W z6il6#-nNx4kGbh50G}tM$-3dTHy?VcqT!;lc?nB*Z?k-5VaLkX-=dHt?Y19y=PEA#x+`uZvIVAa z4!7NjB#eA`iG}1N`#VN|PBQ$d?{y2C!Bryv=FI)?dQGL`?l$q^qA+gdsQC!F<5ZUk z?vUZxFn@M~eU;oAwSpOb5jIjewl}Cafreg0qXI5ox~*v>7l4k(q=Ussv~hmPDv0db zqwGV6)&OJ-PtU2;-^M;#GL!l*Eg!>K0A~{RCRtUM@|gC)m=#0&UvHkLWF_CjbfTwt9o9O*$?}ek6g*OUG8dV{(|&n;6f*f zYc#N|&WuyN+LowJH8s?lLX`Vk-O5CXT50%}^3tmrgu=+kZ8GUxDQ87O582%Zpv{NR z3r_Uqb&B-aV*|!v!H1TcAvi-R|FtWAIEgqe`Yn6eWXp4z*e|>rXHWl*BvpTx3@%7a&B4jLL)834O0f6*M1WiS2O}(e= z6l8Ex?j|0$-VWqIG5~`iGy)!iTX^1smbA{lS=tE}s7Um@^b5*JT8~)O1mc$J>Zc3k z1+?gC6kF8it6Sy=WnXP??DghhN=p>pIbjZNjV5QmD@wi*En?$0xPcm3=Tz8!TWzo% zg}JeOpW8O?W0LsQ?KzjO74Y>+Wzgv()pyOKG$$;;VMU3vovinhY+(MArQ=pD`F_^k z@0v&8O_sc7|Hkz7l#H$AibGZ-lZ8uRY0!K`Vo|SvllB`zVi}v@OPATZ1im_AbB zVfsW(c01sjHnX4V4i;{d@{j*3DxezEd|4(%IK7{I=N9RGLwcz2<~JI)LNuV9Xy{A0 zDF0ZQ_2d4`(!ewDL08@_J~8-p&MBO8Bi{8)a||_(3D(!~HVU8taxm)i(0V`0(}GqC~NWI)^|lbvN-S+q$Z>x*!{eW#StC`+Sj?zfU%bg)XjW z9T9Q3SQgD4l<%6WB`wDOkk>llmq&ghC*T4&(M=t{KVt$;kt+^gYVANmtmwH-Q=}c! z<{k5`{>!m=SUo-)f$m$8lI-buip^hsQt{Ed9Us@qsC{rL*3)%vW0MngZ6#kzq-;_& zCvg(>Q2U{?+ISruXV29lF;^BCd_un8(5M9g-lEX7SzpM`v=r+sh zZ8GRr*#+fuTUX6=wF!ftXMz=T6b>1WX_(p7R9Ve$P*d6xrl$Jrd>x)lg3mW<^}39Z z#^L`dT4*zM!k8(D$L2PZ1J&RPJT6_FrTbTGyrL8CKLB~2mD{)X4|tziWj(CP!fE4+$Ko;= zW32Z_mC->`$*+xA#$l@yS;lj50c#wc62b9%8QDw$=oP@!o%*mD78OrdkNXh!%EEgK~+XdFQbjT2;uV zCGuDus;1g0FsTxbskR(nb;^NsBi&wv9=r>YU?Rl{N8|1*Nc&m{Owk_;+D@X!6w2w9WiFfa=sM$T`1cV2-xEIRxw&D+wFwF1~V71MR!KTu9Y*Ca$6JPyxYdQYD8Ttg^!UDTWMj#0NvQ<40- z`G*15@?0a}jFGJ3LU}WE=uXePcFWbwimPopvb32@;w*xi9;iUarYGucTCJ=NV_Wu+ z>cFy?n&)1)Sdwu6Q={Zj)C~zFDj3>}IKi9I3|_@X8AUz#BgrG4_9MM^IwdD$f)1yI zGI4w;51JVw$x?VZ3ciAWxvPz{gviMh{7Fw-vLwkGP)E8UECT7l4d2BkUtu|E)|$o_ z9{F6Zo#%{HPO+txne?!Zim)4nT|&}IId-+hJ2iT1d#G`#Rwk=wz6b!%r4(Ll`z_ZL zR_k+ux+ZBm$C(&zRd9!a+k6c@piJ~WlfUWorAT*oM72=C{A15uGdYxmILQiA^K0HS zoo{sO&03;87v%4a&gvC`rlQ`EpxAH{NCpX?i@HdIE@xDIh$ex}Sz6mW&b~_vs^XJ} zs#|_VAOF@onmB*tn7BToIHcU1zT zLP34nYa_A21kUIBQR&(?opvt08@nY2(VS+^1;c~BzUFyU;sDLvmA>U;=VEyN)j9GZ z@?~`Y&8LoT=w2B%snK{l%TKU~70Dv^P~)TZq5)+_?R91*{dIWe24hmBX59K?Wx$D2 zZ#XkTc$vBM3`cl|oc=Of)dTT5u*T%y^5H^6PsYu(JInC=tdJ0PL7=3pY3Bkf7R0{z zr=fWcF+x33$71{Z*n$Kk{6fjlC3;3G`uLlk`#~-%RsBh-yHN2CImCND<*E2(*N?6k zBPqr7>tx(w-+`M~jySIoBUXMv0V$=ft{~T#Vu75L`rjshldrcm5KCFE{jaHJF z7XD;RxTibee4|zmCOaOxw-ljCV6!AzaypN6Z}ka-O|r^lqueCOT#0?S+V(O_OHGo8 zfl_otxvymHDKiqt4xWsMF$p3<6AH5bw4@-3k>d{!#X>Fv5mX1=x?CK^>;9EhiuC!5 zu;6U(o1#T-whg1ZF%;GIX7Jn>5G-0g72QciHxH=m{m9Wb;uw*~XYv1ge<@-5dGEvO zlEzY&eI)~W3N=pqA^y(s+8=4Q@Q&iOTl?)~u1cTv0C9!atbWr~xN=jpwcY+U&&KWP zWwv`JAso6~hTZ+I{cR>*NJXWqUgzO5ho_f+H3AggcfLuHmvD|slI_qFkqL1Y5;a@= zUjgg6$zfye9k3v~_1L0Hq!i6Y;ls{4MdMV}yP;`niBq zh6NoC5^Xv27EX5(h85i9dmPS%HVW+{Hji;Dktd48iHK9G@&9Y?Wg2Vk%N2*cZen|v zV2XM)vcQPgWdpvu^NBM8ElMPhZe}|YFLJ&yiK+jggQq_kO>F$24pe=KdKtaRxrta{ z$Ku#g~z&_av9$A1%wI5IAd1CYN5Ri|w%zkWsN*q*Mi9X%G1 z8|J++au~^jgN^U6PIjmAH?1A2)}H=1V^*vQp}~$9&EWGkG=5o&TFCotAcVSKv0qj( zi<-PyIY}U2bc^KzV55)O1E4Q?F%TJ^&3dG;q8}4+&nguvkH!aLc^@Y8H?~6_j6X37 zj|SZA`1>5F>9&hT+h5VsI+I=&+*546i*C`m77y82<*`JLobDq1* zJr6wA3pU!=?Kw|8sULNeW1Cn-H{xD$YCrj%mI%MVXBAz=@2|D|#7EJk3x|)~)^72g zkF?aiS)IG~&~Hk0AP-o%LYNURNv`Dl61KAOdeklIXTdb1x#~Lem#;zG)`Jce{3vn! zkU~p>mj+dFWg|2$tRr)`0s%(<=l52%+jCX-)&xrW*VV)MFgt~$)URI(lbi^Iu$QNo z1=&sLJ86T7iQTmm<;gygno|U$j6O=_5QfRH)s^n=Oun|r7I}`(qD7}C&i*Diy1N0^ zYlHljbrL12n;DcSm3&kmTogCekW}JL`rK!)SVsa+TjU6rwTpC(OCa`M@%Z$rw|(HR zHP-pytfdT1xZOX@CxlBg{mZO*GMZ3-edxDD$Xed8PfY;Gm$U2q;RZ^H6aE}1+7b`9 z<-UP#(Yu*=-XVWscs>Aozq3t{r<5x&6$L0fR?@3yqouO+>#fN5{WrgZZrLu+jbS71 z?;tTH--f?%U3#FBeCJ_K=`afYC(JN#*s3_lVz9uVC>JL0bFNtXC!W>hR96=Pf4;W# z@;zsYedntxEBvbaV2&|HQoXD0Un&P9@nZjJ$@T&nolqHjwjG>=UnH@NFg6OTKvNT1DDbaYgd|(sq7Hf^9qg@ z9(HP;YDeLm>TUP?6=z>Pm_Tz5W139!N4+ZmmmsL0bQ0EuotXKw*Vv-ypJL9HCQ%2m zu&iA16nm9XW*l`??I$txADTQ#VGwsDxRt8vkS{5Z(N#F9rQYcO>AvDLxOz^_sjb{> zS7MMpj+4AjScc)KxyZYKND6f*Y&592} z$z>zwnLWDapwEf4CLQ=Qlqq4u-|8?MVTNjKpG@>gl)pagyK_L$l0dZCWX66WK@(Uf zQdW|=nOB3XI>yG=!FlG3r;m{r(fA~VfZCS(NvmQU5v#k3H*x+GKI2TKzs=ujkqNsh z`Ozct_g|U%872HUbnJ>y!z6d$%?#4`?ptq1fVhsC(?r_XZDk&F}V?2J}XmV=ckHjYQkr+;jUZ2 z8-iT$`S1Mtuv*R{=W_#_-@E`Bb_6J zIk`~|SZ@=sYvH=x_hjgL^nCF~8UESBx1*2(+oPc^DXYl8vPV~6(~C&G;Z?DlDEZxp z0sz}oDLw>~rr5|Y)!0H?TlwsBPw1=%RrBxNe169M^QkjrEw*JCBZd_IXgNqf^7gkZ z=t~NW7XE9q#YWIhQDK{*$3^xfW9GT^Sxz1n=RsIuTW%%IRKL`pQ)|1&GQS#yc%`WN znVVLC%tWt#W$fRhOLlnKbjl3o+KJL5tH z+0L7wIdQ*I-p)qoJRR)<#3|(FA!o!f&KRV)1GY9+@rE1g{UghmI}gtf7m#w19<)M- zBrokOa)-Uji}Vm|*~wny|H`G2sEEZ|adiyr;#^3$ z$B=z=S5eK!hnBeM2`LwJTReQej`OGuB}8FTW3qp!Fdo)ENr5NhDtT7u=@P8>fvdD+#y?~31JVU?k`>Zipb>f z(W@x=^1|`{biNx98p!D(wlQS1ItTpsj9=2L$#_)GY;`aZ>IyX3o6pXL<%ow$6?UfAcd%nDQnBF0`s#WP_6{sXLEBl%7xG&(BG>&jeLj+g_qglOCNr=B@sY@cGV- z#}F-(vypCK^Gnu7kH$xf0oRUhc~-B4u0r9jM=>V2AXy%xVV2)F99A&@{hs2lY$$zr zq;X!WiwBc6whW^uVeFTDTS^6sm6maBtwL&5^<++QrS*IHwu_z?8TlUle?71lK$Qtx zXXJBi7C;PWj@V_txZlS8XJh3F1aM?>~eC_n>$IA!SqMw?^ z-DnAnN@gVbGpMNR79{^3ST+{MT_cRq+rDs z{0v=aRZ<16GPfWl0V9N_Bam?N!i z8uL8K-fEQ#dS3|yzO#BI>G5}dly1yVKNzuc^1E5w8Z^!7%g+?Y#-M+adcfRtIYu`X z93e=%_-cw)l2PD@We+Xvk&eW^c`PSw$bBbp$-XrrBX?EVkg1Nx{WmKSHsV<1 zC|jFkvPL4u=h$AYlLPsK!(8!K~E2l}unAf^`CPJdeX=Isj; zai{t>m6_ei%mr4Y1y@gPs3pRfJh1C6ipxWPX^)5OV;gpaIVY!Pm;0E*oVl){;Z!xB z8q;XQ%%J|mqQNWL+0{^SYF2cg_QwEwl&5#tR)y9Pd2?u_=^2ba#w6-0ML;MN>|FT~ zDQ$`21zFN`^y3vzJ;Hqs>k)Cic>Iq-r=!cn`tSxu>iKGDBCfIZGw`AeDWXP zxYH~=fm}>jf*yPLrPbSRUM*$7Gt)k5xp&@A-V7r{ z(!3-0&#r3pF!|N5NDadJwp<;p#~{oWdqU@Jtwh@=HRv^5$MufHSM`pCUS$f!ort=7 zWF~VaNj%$G<+c#Xp&Ii5=h>h3u&^X09(z>< zT&_v*@bougSe@41F)KAL5uDMY+)1sW30m=6fS3ArNz7a&*$!zU+oR>?%fOc}mYN$c z68eVk>jl{o3}8hmn4+TL)~UC~HOudMa(cuyHvEW3aE+`u(;(S&L|7voETs#G`D?&P zXg}dxH=~KufAb~p0HVR;v!y&$LAnAKZDG3g_Wn*OpHV<+HRARuSb9HY{CY~2D)z+E zj)!YQdxkJS0)O%DwWBn;kUf!-50&W1fgQpZcz>RlL4kd$e>~TohA8(-fRUP}p@O

qD)WC=kH1Pq|Q&|1JPQC>5dw2&j@iMk@p%&%A>M>U@UAJ zD^!lv^%9aen~cTq)~rx=$U$qQ-U`DW(PLe)A<{Cek<%2u5Vh*m!I!BT+wvCmQq$c< z@@D@8A`tH1q5g&IOj{xh@Ik_UL~4}=PW9m^uY<)}JkGu05gUOiSI+5`P+X(`N3rM! z#eZN??!}|Yh1BqYeSgjddMCW1*LlE#QH!h+8ja*!zsK&6l^bs|GE&~~DOZ#2oWDIU z(@Q0$Y77Li~nPz_-Ie>;cqI^6o zco&4t0v>zM#Ms!qcFl_^iA?0@k3I%)m%infdnenz$T&Tp&0W|k`q`g5Ty}l%oE5>> z74`dfsU0v&bA2S!>+s=lJzSl*j7=vBoGF#;ZgqVah(i`#U%3jd3q2G}oHBoy2)Yt^ z_irBF*h(!a0u2v{f_D)7b%Ja9i%rOD*b@Ug;j$P$DYI!}FFQuzjWF4G$A-9>Dmet* z2XTI48V}hy{6=-ZHXteU&A39PchxwwBEsTxp>V%|e1JI+$2BeUw`#g$h>%NPGg^kR z8Wa(%HJibb?a)nQe0SjkfIb~VW+c_8NPG)S8UyPMpY`RjDvt9i?h^|O|AZcT`niiBpW4c1vHmSN^O08@K!j*cG6 zV}u6bkm9rN|5a0TP;VqGCr@@L1kqCRf)yyLc#o;%dZJ%PtoI^I@?X;x(!X#_w5W$C zodx4P8DLQ8{)g>Ph3goau+GT5EAv`CmGcpD$n-eQjt0LBnCrQ9o^ub)lI-il5LZ+k zGDHC0f{Cn^ z>if8C)!gA8Vyx@Ra@EZ>9;%^zWF#Rv;v*&2Cc`4P^6|sv_tO$WkF`D@g>;9M z#nc_KCk_5cLMQd~Ae@F4VU9wdSd^{)fQh!9DqPC|ry43g@aHE%GTtmcqOcq({PE3+ z;o0WLg{DrC`cC$nW(tko@~D zZ32S(Fi<|a7^j;FH#iToBunbQ6go4OT0hLj zJBs=4>^4?M=<(Ll^C@^;!RE!tyIHJ@e2Hy)?%T2Gy<*nl{FXkV3w>#}~2UehPg1 zlu5qf#032UaPZ2YIfSfe53X<2{L!{ZMih-10h>x8zomdTLw7T!Z$`bg{!WUJgbkF! zp?+9B{*FHLpLe+m!+?s%b1|!83gc=%ms)@5uQo6a&kDDwy+XsPVq^=;kO?qB}_r&11{U?>c zS7F#xUbM+-r**106eqZyy@IS#hP*!(2Y1ZpB!1_j(VM>>^@B!WI3*8F>aC0X@^6N*rD zs6EMMSuWRb?qjl>ws7Z8-$w9;0GOePW0GI~wJw=WbgGNCfboCK+e=9p_}lch2F~B| zXpi{ZfS-3d_bg_5uT#kBlip(@19F4be-89} zT`{e~?(crf845U_YWJe3hZVicQnb*Zc-QycNH6Xk*NK!(8Xi1AH!FJ4GT(|{sb@JA zAC=HndnkL+A-OESY?JYu?4Y0nQOr>`-j#>HO--1;jfo5Lx+Fe8>2fKq{r+YP9^Sh`GP*86BjU(>N{2QBQy4Kv?BP)fvq zubp|Xyn!f5xBf#$JctbaVTPf>#%{BRP2h_XC??a|{zh~ipq3z_iMZB(#KsP?s|G)l zS7y|cOg}7Lj=NRABJ0&AM2ZvM2cMEL9%Zv%A7?kYgjZYvwTqVqb?2OJBS#_q<3W1q zL_5=kXR4LQb%BwX8!ab^4RRZOM)#rtzR<(alQV-dPu1$7HG*up$|toLa+F0(w@S&Y z)HPr7TE|o=ny$p!Msx((wiX$I6qLT6o&+=-|6P)?p(cy&5=z~^%iwoA6_mPoqTHex zKsS<*d7)+4VotE-2093E@)RlZEFlMIjBk%OP~8X+z;m)XR{7iP=oQ25sUK;VWNPlV z&Jg%5p7g7SKoA2-r)YY^{N3H6gDQ|&BTQ}bdUqofDwoNu4YTjQDWD*ToP`_3?cMiJkaIWu#UjKZ_bWAu5|y3D2s zi#z2^Qr3lc5|oIi9)EuBp~4SOyXe(+hQK5D4`EW#gFpy<7t?-?CP27F*#zEgPPv8# zTKsUJMW#ewk|BPpSQsV(n^)>uvaEbJ{`*^PXd4bNKvfl)Sx-%-EczOHWxQ_a7d_#4 zq(7A2mNt>BP`Tn>QJ%`2Z9TBs;259eGmI~v4)z27=s`SLy7HXWdsaVjpQLZ136U2m zxy%b{&d)O(kq|4+1bacoiJtJ95VAKVJv{aH9(_p`tqGc=+<2tjg%Tb1S4J=m@Mbs zTLwB;d}1@KR(@0bWfh@CZr&aBZA*P#Sy9^dS$OOZGbJtS1M|bLt*xsN9!3a?$jrur zi5c)q>X=vf%^0QrE*p8_D?<{>znW7MCo62dXR#V?Uf8c4TdCyQQ;G0BUo?G$Hfw(N z^STMyob{SZZoT>X?#tGdnxDURZQ_VJBh*MI%b&&&A#Km;04!BKv?cWW5PjhL+@`U; zUy6X)=VC}{R6%xqbDMUi z=Hd5Gs3wnP$8CE)rF*NOwaGGORu_Bg_ExfaLITM^S_2<&V;3-vDKNMk_!C7%*encO4^pxM3;vSBj_(>mR2- zovQk+)Xb?18dF4Sdo44QRxH}7z*9ppsTq1^o;R!S86*7I(?n53By>#?DA~hC2?^o65W2$CTqE*#7J6pEF|uAg>~(6Pxcw-~ zafviic|JnPZCY)MqA>aNl}V~*yn~NqgU4Do-wB4F=Kvb0am#S)zoQ!G)u2sc_%%EA zfmX%oBpeTjzW(1+#NWkz$c1oFObZ!qs3IzH*noY(446)6;*?xC+Ez>^bfGXSganb)Imw@71Lk9UP1|rRUh54z~5%EEl<@y|P>t zT2qa0pm{~ko{Kq`amD`n8g^&YIjcS>oJLAMnqG!XZI1=K|D}~aeCWoS$dy6UxpLg}vNT0^ zIP!~=ZY{LGI2Xnj+YTNaN`bFncL}EP$kgl{Ax&*V8GbBel_nhmir>}-B$q**AS_*5 z#l+|&Tal}I3m;*F>Q}g!54cx6Ns^wj z2^z&RB$j!LAMvO6Wrk$QUJs4ql#sBWA0K2NVi;U;o7iD#Dg&w<117ipr{F~FBH3VX z%}0LCSb=8)Hn+kGZi7;Dcr)E9+XUrVyWQ(QW?970QeAxlk~+JpD(HlO*Q9bS{~Nss zTq5+p2em%po?nA7x{9aYZvgO0co@(r6YCCg;VO?NF~-sPMf@^gLhUhNBH%mVI+ht> z;_=~Ry8d;vg2N9wG1B7_a?&|v{g3PEUdN&*(uqUy^H0&v|8<_NA%Ua~jSi0ku})<) zMyvk4-ke-+H(n$&eqb($ow^aho|IaE1d_6R?%w>*tM*2`J8d;^U(YsrQ>|f!HdyVo zz;}LHgZm_%&V|||s6VXAR<1dBHU~g?-4E8)8(Si5iv+H1*c9&Vx6^$2Ro~GUrYQi( z&Yg#JVttfFE9+tpOP4VKBg>lRu_P~s>Pk?*YAXK_7}*+7q9o#8unm>pVQU?AVe-cUeV@ZV%B{QqsFoa|Zjr-5 zG=6DGktG8g=0_wiVta+`e$S(6D~fj~Ar9H$1R8MVt41JU6uXWEh-bET@6ool53BHc zZt@WmdF)`29J9FII&(bsC z`!c9dxdnD*WZ4tS#IUm(YO9x(pTO3(;C3rb!ET8`ozi9<8&wTct#E?3rI`r{cYT0=6unGTIjLri)%LB zweWCa)mdm1koPrMjx|dIJOh?`Zx>b9tB9AkdQ;2S##Wlg$4k!gP^VZKs$43GZ6fsz z^YIrrhX*Ee)j^lHY`E_cg1s`xZ1bULGBTIf5M1318-1fKejy<}y({MxQbMbu%kBFE zi$r|5VUijZg#E^v`9l@9Pk7{ggrY_Ku z$4e;g)GhJd6N=v5zmt&>U=Tw5ayq+#hF2C(se2$u_hUy7dKq!4{XjZHg?`z3Iqn!1jcsB=cIk3%6-RM)|Z2#cDpOvg`?Y{0=Jm@L9u4u&}4s zkKaCAR*X@R%WxqP4+!pgjTDv6Hxdg7+0=8(dpOp=ad`4wll`*XSwR;cqQtHgV&EWIz0 zW!uRm7>Huj#5NfMih1$Sg2I8IQ>@jkKPTi7SjCnG_Ro|+jagn*W-Zh zgP8}m$D#CNMV;QJ{~Jjqpky?XMpMrZsC>a7UAS~o+EI2{GNwtmYTl2|%jyp&Kr4ht zEvlBqlGv@NXZ~vN>ZXS*fgr1g~pPT zr1xLg8yJq{ouL*gC&YUY>agtjf8FWlD&1`iHyV^hH7)rP^i9)JdW|#HSa11vKC*6l ztz$YU#ir=9^O*$xuPOYiiz3?edf28^wPOHqHEGeeGg!U>lVc5e%%LwI;?ut3lolaF z{(kanq;GVJ53`?b6sHhP_9ugkHNuW}U9Hzhwowa%*3)^5p81@JVoq94zAapT`Bj+{ zb9*F^c;I>Q+#fMZt;=2;<;>wsG}+%@SD{u`S=9LpG-J}c+QYxKYnbreGMhK~JnU&W zUVi-?TVng!?b)8&T5jM!QIaYd$lBs;#V>#0IGVeBT54`p^4Z(J=HnGPE+GVmmO8D- zMEb1^jE!eKjqfgw@QPEuImNafeb#0gIRDyt0LTN+NX^|zygH$?$a=@Kn2^u7KtA#m zvGb1eYR&`k!MwlBhYr#e}=HSB`wn9rjW zF7vB|g|ob!97Ww1!2{eg!V>jpx<6wG`AI-J{YI7Kh*DhkJ@kf><&P!?YrixO!WIAh z35Rkf7y#?CTPJ{7y#FtrTnQN)`)URc<_IHgy71igG)qH-dTHUFU1OS|-jzSdZxmIc z)!-q|9Pp3D%su|4CG-&E`EW=;xq2&;6JkF>|DdPaMQNQeD50Uh6%3iPLu!cuE(5HH zUrbIsAD;1AE`7?!l$Df-jh#szIskjEuyStfVBgn2V0~R+;O)++5K;y{)RYr@8JJ^H zjqRRVE)swNsn){#{Sfge>IFo(iOZET77|%NG9#qKnR?(n*}}{Q^K!D23qJh!jF~u-lXVlnTN{A@oowuKPlc$+d5pJlz*%LMn7rjqDTqa zPg?GI%0{Kc6#gyHGD3r3P7XFS`RP}wragR1b|O;-tMi~FLN06j;z=ikn(p=Bk|6Ex zb4=l;Wt)%AeMCYF>`Pi>bT#r-3k;|*>FxppO<(A_;(UzYOtL9g1+XeXlzU?)UW>l} zyNVD*q{XTkSY<29Npcj`skUzU$|wrBis50|Vb25dx@7Q^p6)SMx-O0w)-H9@7p7kvebGdClN}hH-2!e$+GdLr3y#aMiQ@75aE`U8nRs@cI2Un28TeS`i{p#t z3sT(jX&Q@d-yOO3UlkwQGfj_ zIpHYV?QNd;w@BhqTjd5#(4n##K21}2jNreVSIHje6AV>KwNJeXlTCY#tA65?iu1d} zkC2-Nl25Un*b(#yh(!Pb?EJ);TvHIQ%hHsi7E@t4zV*mX0HEbRd=8JtQ-#f_nDXQO z!G;!?_qj3Fdvn}jOvczY))LFZOWZ@OlVpi+>*Or|o1Datv#jHMmqmQ&&H4R(CD-M- zj~e}L09&e92Lqtnof-p&depU8@mS^Ps3%9Hl9w?41GMl1QS>M*ndd3A#c657$2PgS7NBzMJ3a^8AnPxupQ<&G-K+}lu( z711A%L(}jlh{En)mHvHM$A9S#TYIU$B?k15_PfJC==*X50%8J#rSJmqH~KNkvyZy# zGROkxou?uJWFSP5MjgyB(oZ0|3{Vmd&3ZypJQ+q@e9eYGxMrjFy?))y)uzvCjduo` zk;(U*03szl*omJS41@?`ZvHoPl-+40)mM<6a4=nBJ1QorEz$MDVR~lQ;dITQ;w^&u zB0^!55f0=<@wC0PQvMy0D+9C;2Aad1dr`$a`Pf;={H|(O~_C-THj(Jl*`MF7| zK~qgu5?+N{8!(iC*`lG{Nnhqj(c~PC&?wGP$HGtaQp{wjORET@(By%e3y%a%4^(H< z#NjBVLb-brEaC@$8zv@)bY0EYqE)YGfDErvb|ed~LU=_y`N=yz(CF$T7S~Q>g}RkM zN^Zpb_x#-0`g7Fx2Uze=-cO-h8>VlF(1j$h6!4@KzWA$*@7tL$I|tY=$SizrZ*I1+ z9)4UZz(bmnF?cW=auHu!!-tBp^kY4zZs)Z0L3;$q6Fub zusO^ZEJ6hFZr)3|r*;I)-zx2k{6D^xL@pnBCa>KbJuX|5;-xm>oO4!rIP z`aJo2c2*xilz*{^5orHVY0=7kh3woQ$B~DksBRpAP(dJE6QY3HxOthhVn$VL)z5V% z8bTTP-0&~syMk0e%2s`J#@qeFy9rFRs~tHmW|}a`k2uvxbQv^Xn^{;~5^3P6GoOA$ zO}9ufD6*q(q;-9uZE&DeVsnBC;LG~7%uqyh++DGd^k9qKzDsg~O0WBZ{(}R6L$K3t=m11~mS|n(l zqWdT2*zPR1u)y0{?u8evL}hEcW|qAR?+yk6yMu=!YN;Kkv+p)DfUstDDdKt2Sj7Rt z1I3j}EPJUBcLbFUWE$MXlQx5K5jWXFApR)>i#q)1cH%x84STXC3}7^O)Y`n3try(a za=7k*l6SN7$T1-1)w8;827;c{fU*XTe(ICw^!^<80(xPR%@4~<b|J|0A`_JJvp-E0F_J7fbIxKQ-*Z|sl zm`+w4vMd^|qYUQMu2lFvtNe6+UA&5Dd-URSOXz2>@NpX3QAIKf5_|Y5so3^7+^-zv zIPAcpiYIw}=7dwLX(DwrNR;HN#;Co59EdVmk9~3J8pmrh)F=XG3qMKWz>gUIey?6O zcJ(4#${RcoKrN7`Z}40B%xov+%BCpp6Amw%u1WdEm9(Yyn+XonKbhMn=502Jp^2Qo zWsU%o8pfa7IqhdBwH@weOiz|O0~q6P1jBbyNC;IY1<=LjGe0vibch$jL6XQ|O4%d1 zRDNv?QQcA1^X9b?bg4e=ENqFuRymdM1VsWY8A*!3_1~WYg99b}C1v1a3EVvtabXD0 zzqTU3PfYZWRR*k>`5z=a2@oTjd^hob6mGM}VPbm^ApfEc7e@gz08J1~rpu_cx!F%= zLUG^Yq)>R*-pJ4!QExZx=15USU2& zHd?t^V`o=!XmtBSNXH!jDe#x6fI8lb4ya@Tqe|kM-H8LT^l9v1~~0_GRxEi>z(=3IQ8XA{OEUZ_$xXIb)QWl?{YX zp&;>3v%z#i2TAQu;}(Pb{$3isj^$_G>cTY~R_J^mCy8Gt*G-X&BNgMaP4D=_(A>3q$80b(jm=5T{a{%J< zsug)g26x-+s~F3$6K78Y{%4RG*`W=Wq%_ctV)1lU<7I8lym_)hsP4E+^76G~GDtAf z@1DkQL$DBL#X_!-bs^0~tU3+(W|uj%`xd_XYf-$&v%`*Tx_?q~^#dS~Z7ONaNw0sE zzl6nD@w{_TtC!i2Q`aH~d|v|~pf1N5)^FrIv~2$REAL-5v(ClmG(7)K?xvill=pp` zh%_p`UxP@k0KR8y19wFH30m4tG~QSE)SxU1kP+o)TXQfx-$sR8HnBEIcnu)&E&Dv* zC)OZ4qR1sY=8R2uE5mg;>$ifkfGXFX#S0}$N~{SdFHn1SrdckZ_S&F6mpIzuPcHqcwIvZCkQZ6^m0pM(x##j^8L>*tM z&vt7_=wPwp&Q;_9jwjtf%SqMS)cS{NLA+_d6q|sDo}sOoSCN1hoLfJTb&wdwE^Xu+ zOukWYP1~|F+Ap@n0bTNK4TpF@mnx8u-t<~=oWa+#$jSF(e_tIbat(OBD0T1XVD7XE zl*-M-rT;2fP+;t-DK*kfZt`tL<_UEokB}it$X z&`T#q|L1kj0f9Lg`cg{b?uXaxFPZuTUQyQ+t2bRTnTdSr6|(0iAnS|y6@wv{EcoLo z(S#6q4-X)22yA)T46nI6YeOa~OS$plZNK@eS3A) zOo66@KPhr?r<0%mT=2NLB$0OA9NZ=213K7SfU3Pa!{_cDh%_cKXP8G>^4VpIn>3DA z`$eC4esJLFgXqk^G~_EKTA(%g3|mQ_)%A-hbD%|BGUCRSp|WshZL8e4JfHIm=nF%5 zEEOoD1^2b675Jl2)@;QDHL_i{OeE)6E?}AJ$Vco0SQ`dm*}Aozg7oDnzdj)gA549J z3?x#?bBn<1utH10+u8flZ!wJYhDL-cZ|6d;X(iH>>uPQpq6y>zYsNdvBYi6MSntNE zgb{zf2(qesnhv(TaW+*s|K2l7)m*JL+?`ZR#)Z=jjftRQH@xSRy3sLGdssT=wg?X7 z^Sx;+>*G5Kid?WB@a*WA4Zr(*ML)c4o_>y)J|1fR^bU=ys38i7akId>4*;;IEFS;^ z{H$TI`_#Pk6QR^I=xIG_HH9_S`2AgH4(Po5Nu}bhYt#KYOdFFRK3I8>3~%DULZSEcKJoEIN*ijZ1X~SPZ$?YDSH&=sb&R{&ji*5&ijn#^=>f zjuFZ4O-E<-BQKV7OB`{ry}aHUVu`2PqN0lRCW`O`f)YH24#>Lp!ky_vw;@yZ7PGrq|a8i=leIHQ`sa+BB9ii+4#;L%yt$;&cZd_w?`ovv@-+H1b9Fn;s$KkIIZA9_O{ zpW&XI019t(#IZW#8my3Wr#KiS(84q}Maodr)R#N5$@z`XW}}eW^b=1Eo#2Mzas_lh zeSJNyAt@v6QekRKYrY|XQ{?pR_$&VObmc@*<}njodf6IlefL%m4>2V-pwFqUN|`)Y z4y`TTbk+7N3Ged~OEq?%9s=DnaWGE$eL&m$Rb4_z*2|ZD$T*!aA>*>+AbIn&yu4VI zbEeFQzX>4aB?nTYR7&**Q*tDB+?4&7pM7+8q~dsz@WYVxxFbqkTs2O#uXrwN-E&Y>~SC*{D(L`_OeOQBE zT6et7tLwr(?)>>Lp12nD?WSF!J%Oi=_UGENQCl-vtiE_}+9(Pv9b+U^7vtyHS9B(I z9Q2$~D-lm|)^)jVSP5PZ#^DRDm%KoyUBeVZj=Rrw)nB8lV&oTWYV^_Y<)mKqfHd^S z@7mJH**7-f3#$9|X?N2J9C-=Tj)j@TEX3RGcIWy)Y4NMxh*#Zp*tp?^h^2Q-l&=x_uvEVd{6yf=Db^q*JA+ zzHvl^im?uw;eQ{Rzvur9DRmG}6 z^%0eXai_|IZ&Z%$4`u{z^%#t5_;AIhFeD*i)L(J&>WlByd?Y8v5Z4+74lx#fyA6qi1m?U7?HAkO=Nl8~F{Y)c@ zsG5ii{yxZtrprlxgVsOdy!kMk8>Azc{x-B7Lp(1#uq|frB_Ly{Hiok_K^_X{JrCOX z8eDR1NB=aGBUeA8`(t9BX9tIAM(`T*I~^8W22yf))(C@|@WEkw!z6D|K$tMEWqPKh zS9+0cq7L7-%o(p^#81P-ZU4&-W#iukAJ_8R{oO_^nWLaQrmfSgAg0{q))^Av!`2bG zPJ6_z`NqMT^TXTCUJJW}-}&8}b-KS6O{TqG#m`SvkowvteD$~PJ{t8+@=eN@V@ieP zlAmZ<%bt{L3mm;hnh?L{M`B|J`Pan?zs%I29!>x!*@20kexcPJElpGJSN!hKZQ|bg zyHl%bWw!PS)3xWDK-K{)7(Q)NHg*;?hq0836-4!ij#SG;Q$g$BXZWV|E8r5fpT*NU z?O12Ze7T18@=tiqSM&3-IMyNQQ#aOPam49Y<-uMm7xv^`>(@II>|GfDodnP1tcr$W z$sD|0aAu1G4vpQTy1TJ~XHIGZ9#8{&)=?wAZFB;G=1*_J&XkxmQ}7zT`Kp&ZVSfRM zcMro3dgTd;g5I5gFHiB9r$DC!m40k2p<{HW4OMxHa(je>g1`4 z;#Fx4FP8$Hqm_6TH`heYimW_uUQ-&JoRu$Ui6G9Izch>RcP*aV#=`RKw$K4kyqD4?oH70aJQ_Oie(Q zkj&W9{vlsG6M0wxyq5onw7*nNU}=q6K6~~=T5z0>@BXOTxFHAlYhiX9S3Mx7S^n-2 zwK;VUz*f#4Uw@>UhXAHz-i4_>v&PR;UBzyQ_if+6_7FOvY*wp7aj@X(n!8*f)+N>A zF1cR!_#3-l#GQ&erez_vwGI3-!oRp+r;YmqgNao_qB_3hHEJB&Q?jcgSEXZG`_JC*7wH3{FpN)DJX!hhkVk zZE)s;Qm%tsVnuWQZ#%F%j237&9hUa5Nl&`V=fUNaHK@`yjhcBLjQ(Gbg6;g^Wwd0} zeN%RbCfBb!-$a;~CA`yKc*z`AC>zk3z|QNZvS~4)EKTqmk+|2$a}y=8>(dsf+P4qj zJmS>*2P&2LA6$Oc1@Xqt9dm%3(T))Ei!t#SB>py`ub3U*d0(Cc$G!dc4xE}@%g=}|*9G_b+z4U6-gHFJ!)sXcl zlJ5%Eu`47h(Q8Bg(&R$Zsee2MQUybPEmFJ9~5Nzi6? zRc*`h-T6d?&?6}|?O^K^?PwjtC*(Iu^mtmEi_h%VJ)__>fEpJ@P9+YDS&-cEjv9&U z-}?oC^4C_#SWE?(_(|^#vyF5kg+-s)e;Goj^CPJG+m*9cZ@(%i^P|6IeHOXiYwDH!F&>{t1HH?Z z3l!LkW9~@`7LFZQywVO{gq&EZ6pWU};Tq}{qNKE0W7)Zw3X=6tLQ7Gqlmc_!{=M{5T%eF8 zKNnr_+^~7zd`zU`PIHo1G0`qyqBHuvJ)=Ha;U;+e?J}tE z+U(|FFX)pov*Mtvozm8XCwnyA%Oq@H{JRp&NH11Rp+C#?L7P29 zeoTm^tgM_D^paVf`g(Tcot*>!i$L}VxrK6+&C}Tc8h8+}4 zGJt2L^c3I(R>YN(E%gvG@%Xvl@t*Tsy=r;mZ$!I#Tkkoh+&qy^o}ja6)Gg>S3;i_H({xUy$#^3L`~9B%pSrOK{{Odx3Kw(GmJU$Rti@t9<8PnBkQJ zGC75n9OG<6U9UA41qI{cD@~D6Yk#_~ZV#vHdnMF{0y{^3^_W)(<`*hp4tva(JN;UP z6LI(+$bfdK&K_)rFe)OcJ6%p_7;{&Q$nC#GPLgRK_n|D;+lQ|A04YNnApM~l|CdB) zDNc&0lNszv<(>Ye)X5w4EHjQK`mQKafd>!hU6Tmxx}%NG7Da*nhC6&2B2!yG-!KI~ znsZPJIJ|$I>Gx}F*fyxAX*tbK5y$#)%Inh=MUVKPb`+x0M_rz)ug2#ES3}7?ue7_x zl6=41WdTnpS7jzk+=n-vf>IQ?1#*;t4iVqvplAGc7G0>Xe!W)$ld;O+qJ!d&1CRzp`-IO9`W22Z&DqNe;F&F^K#u|8G3Z>S!1n~$=c zK{ijUvOc{kz=)NHb_z*t;THfUQyvfTzP7HoM;lmX9=sX)P*`r z1Y%;QZN8REGNilKzHx1fE=EtKHO6m^NgpgcX`$g`sWkAZkOItQ5&3ZtF~9CA+^Y1X|no}DT-iM_r6mX6S040*wmr3>{wLvQ5g z|K0kXK@Ml_cpmpXd+9emyA9<$0ZALNysrv9^BOO}ZQirO6-Z#jtEj5%#kch#8EYM!JF1KD*mj zRPuELZIe#w_1_jky94{rMhO9FkCZ4>sYr!fFi)0*=Q9Y8n6peb$E2POSOMT}RkiPn zWNTs~i)4aRA7yB!eu(b;?CW!>2I%+r;du1IpsKRMMC`eQnYL?ICLumcE~!M^IUF*X z%Nihg2;a^{tNTEF?)fRg>kBNDS`{m*2)lTOWHflAg)r(vGy85fABb6t2V7E*8|#xv zc%7qfsUrmi)ROprog@zos*@T5oY{0Jxej~Ht0gVRhs~a-HVvLg11&%vyc#`rkVr-k z3_;@Ra$7JJqq?{#TNkj|9KYBh%;4}MT@A3#FyB59X2>mEiipNCA~ zKncR0Pm;}?B(tYeU>*yg4fMB#vSR<+LX3z_^g2|O8bMcIQKe;fq{zD7=%3GO8>UaN z1}{C=q%Cp@^Sp1MFhm)Va(`=mw!!3nt!Cb9AC?U;Yb0#7ChyKJF*BKo4t{LLoS427 zA7W_aTc;>enJv~Q5RvJyCv6Il%}jd{E>nzM|OUp*qLB9 zQv;;E9|pYojfH03ZWxt(2#Lxo#ehfl!R3iNl~^Z0dH6}cEJ4JXsfhuo%3K4y$|thI z^#aMtIvT0aavBc)<*HJ3iy=e!){ni}dNyHZNktW*kERR`DxDxb@}djh3z1{m>^Ek> zM10UJNx9U0dYyDKKfnB-e(Q`VDXMc{@<`D0M>uv-`OTzNO%X(sEamu6S^A4kNO@w) z6dY$^FoHioeS}hn&EcD}KkKP|%|1qp^h#mQ=ehky-1bvov){^6E>GcW>2V|EVBqe?w=LYQ%1E4q5KXu*mwGwxLh+>rXzV6sa&dXm zT>iRh>q&jfzfx^ce(|JoXq|DHx!+~*Hx8?@YtjlwyjwDMO|xfnCt%%NtZ_tdsY~jn z0y{QyBI&=?f!3;%OwP}>3=nW(>(vKYjFILNx4oUWwbBXmD#z{0lm!DrkgI|;W~Kla zJLX_-JDK-$<)D9C!sPnYb>}I_BY)CF=>;EFBzdhKBUO8zm5v-fYb25&np$lT=oIA% z?b}&B2wB!q0cD$cllFWmhp8%LN;>R(%T8sydtTf?lDi_p`HneHZr97fpBbp*BN117{)>EhX2Kt!c9w z42qlMlLe>@%%>PRGn%&sPa<$o0)}geX8}263=xbat9)woZ2zUd1rucK+tLrRoQ^C* z9x}Gfrq$jXJmmk7`XyHq%_8r2zV`)@ggzGg+e)?p6^h-JjyPj6R# z!=wUx(E63L9Ly8`a#}X3qaCbS#d*8wZIr1hQW@O4hd;CEWRdWkga4Edf81rR(963PL9y13v?@hW?lQ6AF(M=> z&SEQJj9?z=gKruKK0nWcH}FDVTkcfy(q_$*KjsNZY2`ngd145poz4sVZWbd`?Qmhk%aw6BSc&}>g~Em({JQ;S{BbEG*vsSBQ(DU3ip-CSlPxo^Oypt zY8WGtsJnm17)i#2qfp!8mVg!S<2&o~m&bRGyEE`5=PoTbz=b-RXEzWJJzoQPYDH7b zIoRV~=D8SY!XIi}=8%E!cyStJIOqQsD9-M)bG33-WpuYe$#!(!A}?$ocX#w7BHGJN zEE+34-idp?jAQ>(6uKra*A@wt$NbLZF zWf(1HHoDaAid*#1gw%xAo?{+>rf!P1X}+sGC?mdBRA%_ zEYVQuWA*WHFKRnl9XtAXDTT^a1=RA@Ws6H0{H^@vvXHc^=h_Y3Dl&ob*YRTfjNGw3 zIaV+f0L*rAJ=d2aR4`+%Xf-pV%6!{9`C5xk4^mc&7t3&T{7GI?l&^m?Vbk3Hqb~K& zPFlRc#=cx+g2+Zfy_vrSn+57lNT#Xsd}LJ5^o{AeW{;bWn`zxCFJ3c}&X-&qZfjPF z8=5JA75*Y$eeHfY)&EFWg>caf*mAf(NHMoL>|(dTIe4V1nR}dh4*w@+UY>GnlX>{~4_v2+* zMt*e&cKc%y3FJQO`W*xBn?H*LkBg=^S*efps7C_jfZ&d;CmEuy|bnsKb0@T@*sA79ri~;JR7~ zwWjq_FvHN5wRhW_FS~ereEcm%o>0--o@_xsNDD;B`|f@mS*igM?2 zr1xo$?yjGqQPC1I)1rB$^k2Li4F|$4yNY3mv;rP>RL}no2V(#tl)O7g`hocV))-{D z(SwZ+uju==+@)O2_I~7Q4c!0hGp9PBRY@Cgp)>fYeukzFNb)VSfTWhY-{$K+A1N?$ zm8Wc9`$S&YkrNaQi-~;}o45J<jA0O|nVe zzCMA|N{$OtWS^sFBWhK92ORyg>I}{c$5{4QRw*!ma4jIxUR4Dmc3KH2N`z@n5f8Tl zzHkq(cqu27X)LybX=#LdK!^|!t;fqw^V=;&42J8{^q@zEQ&>X;DGT&sG_BXH==(N$ z1AwGZ^bcSt#t7Prd{N6)pYXbgclZ3sPk}j?c{Lb6e|SNpOOG(9B~ca1#t-nYT5W1% zR7~TRB>ZMrDHqB`t)_hpK#QDiHIEA^)x5z|B%VHuoa)ST4&O3FsGSL3s@v!Qe?$K1 z;tD5GXDNPsNRe>zOzw3Ov<{kZr;1*lQwBLL3fg@egZ2HGbt$I4- zd0G}kz1tWKn9A7I|4SZZ))`WMlqKIf-zb|Mkb%nm?HVXlOA{7lcPLQ%*i7!bb=8!I znoMB8)(#?x$QG1>g7ARYw&w37wAnXARL8`&bNIXK9`}9gg z4sTVO2j+h`Q}CLzEwo!h>^TZL@4LH=WOfKT5M22e5;QWljj1ui^sLvI}Qyr&}*|HSO$Mb#wOp=}-1WsIYr+Y)d{0>bqM2kUVxEGht*5 z>!c?@y3&40ldjEmB>@eC4OhI*csLDkGn?L%%2U1Vq1{luWSHN*Mlf7l8ElB&d=hZ# z5gs%-Q9RibEbqnyCMU-2_1BVN3~ZXKND|6zaTEklB?0Du=%8H-)e_uIh(2YHRoN=+ zQX#(oU!a?ySl_d{wcjLSgpcn>bF?C2BQ>qSfQ{{a+s=~R5MRF#9T%?7fjm0cRQbFf zaX+(8a6MxVq$Pfy9l)U=MlK2!X|0gc%SuRIhn1)V3@=j>PJIA_leS!NxXmAWl%&Py za#);A$SH8HHcvQmKl)HdMZ+xsnjTT7mZc>}Zu+|~*g@DK5&?(aL;;5KZ^Gm>gE8B0 zw(MteW2M09#(r57re@Q88>|%4dcz)WC5v``S<8pV2bjFl0WUyGH|CO=g*3y67?!-J ze6@iWhr#O?4!U@7)_*f4^po02gmP)aBElFxLb|6033q-hxEJ}O|1iAKZ4bd=#8+e{ zvM`U?Jjcz3ef5_}w2)&tBOU~*@LoIikR@qSC0N^52T=$9!yCoa);i_pGhz~n4 zp^Z=DiIvBUJWIlvDp-I;{Nt-5+VKYAFi@(U*fX99;O&RixetE`xh>{UV)R2PQz=j!@&+s!gk4xbty!-F24f^a^x|;v&x+ zI-kIRUG{bBn;vmdO=I<)3)nX1v0rDqJg#+E4U>}Ycdh`HU;%cUwQ4Okv=Tf49jt$* z7T5qpL9wi(#|}By_mJuw7ZW+)#W*p6Of5qre!y2)Ydl5KSAZwI2jId6SEz8>3P%zG zW{4GV&F29S95K`#1g97>%5Z4g0MtDEfjj~*oB$Y3S6be zySx|!utK%L|17_5(l!HjP3wU^kGtDlYm-K4Bxv zeJ%WnYmQ^@7o&zJqU$L9KEB#~+NCl hg6v{cFk_ZisLh>jU;H@H;G9Pf6#{2OW zV?v8Z_L)FE#JopYc4w?hcxEx{FwzJ(1kunb*x0T=Gc9W=%OvnBy$+>ku84W&CHPp? z=uyRgO?jy4f8g`e%w!pUuJ;9Sq&(xx1TA+SI>|p(8Rtj#5|?nlml&pSUd3;kVIfQk z=a8A_0tKu|~9mucCCJ|hE zI9E?J!w1P&%&o^V5pxn4LWon*Sx}l}j7VIxk&?Q9bB;yicahsXBa{1xj)Q2}RcDZ( z4l{RW6SIK!tO}I^K z=Nt|~kdnCypN4r^g`td-J|s-Pi9SJZ+FwU>9n?nf#u>_bVlfh+p>y@M5+Tl7OO zfTtrcq@ZQN!L0=Ut)|K0BD5wm+wGSLjqshD&#Lnq_HC0{*vRQ~JDd-v{v)Yzx7mpL zG+)-U@A29D-!u7FLX4qor3k~a8(mX8oZvj3{!Lfn9+|_D#S%|tU&0=;_-p)q)GOu#cPUKey``+T# z>BMqMdl6yFeb&V?$f*6Yww*LuTc!1kk$T$1j{g4S!fdqem+`+9h}Ah1*ex{%a=Kx9 zt%x9|GG(`TO&-_v@>Q|T$NRhuE!mqEI>*}i;bUWZR)+t*-UKZydCT<{kO^=li&OIE zrdPIO@%s%kz0QYcUju#s3f`g+c|1FFre`Q?nXsc@#5rSA^T-}wa;l@KqnN{Q73QZR ae8lEq`AUBb{T%!R_$kS$$(Bo-2mB8QsJK!9 literal 0 HcmV?d00001 diff --git a/new-ui/src/pages/full/AddPage/components/AddCard/style.scss b/new-ui/src/pages/full/AddPage/components/AddCard/style.scss new file mode 100644 index 000000000..cfa2129cf --- /dev/null +++ b/new-ui/src/pages/full/AddPage/components/AddCard/style.scss @@ -0,0 +1,68 @@ +.add-card { + --border: var(--border-action-disabled); + --shadow: box-shadow: 0 4px 12px 0 rgb(13 47 157 / 0%); + --color: var(--fg-white-80); + + box-sizing: border-box; + border-radius: 12px; + border: 1px solid var(--border); + box-shadow: var(--shadow); + color: var(--color); + overflow: hidden; + transition-duration: 160ms; + transition-timing-function: ease-out; + transition-property: border-color, box-shadow, color; + + &:hover { + --border: var(--border-default); + --shadow: box-shadow: 0 4px 12px 0 rgb(13 47 157 / 14%); + --color: var(--fg-white-100); + } + + &.image-default { + .images { + img { + position: absolute; + top: -55px; + left: -80px; + } + } + } + + .title { + font: var(--t-body-sm-500); + color: var(--fg-white-100); + padding-bottom: var(--spacing-sm); + } + + .description { + color: inherit; + font: var(--t-body-xs-400); + padding-bottom: var(--spacing-xl); + } + + > .track { + display: grid; + grid-template-columns: 100px minmax(0, 1fr); + + > .images { + width: 100%; + background: linear-gradient(163deg, #012bb4 4.53%, #0128a8 104.88%); + backdrop-filter: blur(2px); + overflow: hidden; + position: relative; + } + + > .contents { + user-select: none; + background: var(--bg-dark-blue-20); + box-sizing: border-box; + padding: var(--spacing-md) var(--spacing-md) var(--spacing-md) var(--spacing-xl); + + .btn-wrap, + .btn { + width: 100%; + } + } + } +} diff --git a/new-ui/src/pages/full/AddPage/style.scss b/new-ui/src/pages/full/AddPage/style.scss new file mode 100644 index 000000000..85a7e07d0 --- /dev/null +++ b/new-ui/src/pages/full/AddPage/style.scss @@ -0,0 +1,11 @@ +#add-page-view { + .cards { + display: flex; + flex-flow: row wrap; + gap: var(--spacing-3xl); + + > div { + width: 342px; + } + } +} diff --git a/new-ui/src/pages/full/EnrollmentPage/EnrollmentPage.tsx b/new-ui/src/pages/full/EnrollmentPage/EnrollmentPage.tsx new file mode 100644 index 000000000..6c0f551a5 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/EnrollmentPage.tsx @@ -0,0 +1,73 @@ +import { type ReactNode, useMemo } from 'react'; +import type { WizardPageStep } from '../../../shared/components/wizard/types'; +import { WizardPage } from '../../../shared/components/wizard/WizardPage/WizardPage'; +import { EnrollmentTimeoutProvider } from './components/EnrollmentTimeoutProvider'; +import { useEnrollmentStore } from './hooks/useEnrollmentStore'; +import { FinishStep } from './steps/FinishStep/FinishStep'; +import { MfaChoiceStep } from './steps/MfaChoiceStep/MfaChoiceStep'; +import { MfaConfigurationStep } from './steps/MfaConfigurationStep/MfaConfigurationStep'; +import { PasswordStep } from './steps/PasswordStep/PasswordStep'; +import { RecoveryCodesStep } from './steps/RecoveryCodesStep/RecoveryCodesStep'; +import { WelcomeStep } from './steps/WelcomeStep/WelcomeStep'; +import { EnrollmentStep, type EnrollmentStepValue } from './types'; + +const stepComponents: Record = { + [EnrollmentStep.Welcome]: , + [EnrollmentStep.Password]: , + [EnrollmentStep.MfaChoice]: , + [EnrollmentStep.MfaConfiguration]: , + [EnrollmentStep.RecoveryCodes]: , + [EnrollmentStep.Finish]: , +}; + +export const EnrollmentPage = () => { + const { activeStep, skipPassword, skipMfa, skipMfaChoice } = useEnrollmentStore(); + + const steps = useMemo( + (): Record => ({ + [EnrollmentStep.Welcome]: { + id: EnrollmentStep.Welcome, + order: 1, + label: 'Welcome', + }, + [EnrollmentStep.Password]: { + id: EnrollmentStep.Password, + order: 2, + label: 'Password', + hidden: skipPassword, + }, + [EnrollmentStep.MfaChoice]: { + id: EnrollmentStep.MfaChoice, + order: 3, + label: 'MFA Method', + hidden: skipMfaChoice || skipMfa, + }, + [EnrollmentStep.MfaConfiguration]: { + id: EnrollmentStep.MfaConfiguration, + order: 4, + label: 'MFA Configuration', + hidden: skipMfa, + }, + [EnrollmentStep.RecoveryCodes]: { + id: EnrollmentStep.RecoveryCodes, + order: 5, + label: 'Recovery Codes', + hidden: skipMfa, + }, + [EnrollmentStep.Finish]: { + id: EnrollmentStep.Finish, + order: 6, + label: 'Finish', + }, + }), + [skipMfa, skipMfaChoice, skipPassword], + ); + + return ( + + + {stepComponents[activeStep]} + + + ); +}; diff --git a/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentControls/EnrollmentControls.tsx b/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentControls/EnrollmentControls.tsx new file mode 100644 index 000000000..1a302b7c4 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentControls/EnrollmentControls.tsx @@ -0,0 +1,57 @@ +import './style.scss'; +import { Fragment } from 'react'; +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../shared/components/Controls/Controls'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { Timer } from '../../../../../shared/components/Timer/Timer'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { isPresent } from '../../../../../shared/utils/isPresent'; +import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; + +interface Props { + backText?: string; + nextText?: string; + disableBack?: boolean; + loading?: boolean; + onNext: () => void; + onBack?: () => void; +} + +export const EnrollmentControls = ({ + backText = 'Back', + disableBack = false, + nextText = 'Continue', + loading, + onNext, + onBack, +}: Props) => { + const deadline = useEnrollmentStore((s) => s.deadline); + + return ( + + + + {!disableBack && ( +

+
+ {isPresent(deadline) && } +
+ + + ); +}; diff --git a/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentControls/style.scss b/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentControls/style.scss new file mode 100644 index 000000000..b088a8ab3 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentControls/style.scss @@ -0,0 +1,12 @@ +.enroll-controls { + position: relative; + width: 100%; + + .timer-float { + z-index: 1; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } +} diff --git a/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentTimeoutProvider.tsx b/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentTimeoutProvider.tsx new file mode 100644 index 000000000..fef4b5026 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentTimeoutProvider.tsx @@ -0,0 +1,26 @@ +import { useNavigate } from '@tanstack/react-router'; +import { type PropsWithChildren, useEffect } from 'react'; +import { useEnrollmentStore } from '../hooks/useEnrollmentStore'; + +export const EnrollmentTimeoutProvider = ({ children }: PropsWithChildren) => { + const navigate = useNavigate(); + const deadline = useEnrollmentStore((s) => s.deadline); + + useEffect(() => { + if (!deadline) return; + + const ms = new Date(deadline).getTime() - Date.now(); + if (ms <= 0) { + void navigate({ to: '/full/session-timeout' }); + return; + } + + const timer = setTimeout(() => { + void navigate({ to: '/full/session-timeout' }); + }, ms); + + return () => clearTimeout(timer); + }, [deadline, navigate]); + + return children; +}; diff --git a/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentStore.tsx b/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentStore.tsx new file mode 100644 index 000000000..67b1e6c4f --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentStore.tsx @@ -0,0 +1,153 @@ +import dayjs from 'dayjs'; +import { create } from 'zustand'; +import { createJSONStorage, persist } from 'zustand/middleware'; +import type { EnrollmentStartResponse } from '../../../../shared/edge-api/types'; +import type { MfaMethodValue } from '../../../../shared/rust-api/types'; +import { EnrollmentStep, type EnrollmentStepValue } from '../types'; + +type StoreValues = { + activeStep: EnrollmentStepValue; + startResponse: EnrollmentStartResponse | null; + proxyUrl: string | null; + skipMfa: boolean; + skipPassword: boolean; + skipMfaChoice: boolean; + deadline: string | null; + userPassword: string | null; + userTotpSecret: string | null; + userRecoveryCodes: string[] | null; + userMfaChoice: MfaMethodValue; + sessionCookie: string | null; +}; + +const defaults: StoreValues = { + activeStep: EnrollmentStep.Welcome, + sessionCookie: null, + proxyUrl: null, + userRecoveryCodes: null, + startResponse: null, + skipMfa: false, + skipPassword: false, + skipMfaChoice: true, + deadline: null, + userPassword: null, + userTotpSecret: null, + userMfaChoice: 'totp', +} as const; + +interface Store extends StoreValues { + start: ( + response: EnrollmentStartResponse, + url: string, + cookie: string, + totpSecret?: string, + ) => void; + next: () => void; + back: () => void; +} + +export const useEnrollmentStore = create()( + persist( + (set, get) => ({ + ...defaults, + start: (response, url, cookie, secret) => { + set({ + ...defaults, + proxyUrl: url, + activeStep: EnrollmentStep.Welcome, + startResponse: response, + sessionCookie: cookie, + // if smtp is not present then it's not possible to choose. + skipMfaChoice: + !response.settings.smtp_configured || !response.settings.mfa_required, + skipMfa: !response.settings.mfa_required, + deadline: dayjs.unix(response.deadline_timestamp).toISOString(), + userTotpSecret: secret ?? null, + }); + }, + back: () => { + const { activeStep, skipPassword, skipMfa, skipMfaChoice } = get(); + let prevStep: EnrollmentStepValue; + switch (activeStep) { + case EnrollmentStep.Welcome: + return; + case EnrollmentStep.Password: + prevStep = EnrollmentStep.Welcome; + break; + case EnrollmentStep.MfaChoice: + prevStep = skipPassword ? EnrollmentStep.Welcome : EnrollmentStep.Password; + break; + case EnrollmentStep.MfaConfiguration: + if (!skipMfaChoice) { + prevStep = EnrollmentStep.MfaChoice; + } else if (!skipPassword) { + prevStep = EnrollmentStep.Password; + } else { + prevStep = EnrollmentStep.Welcome; + } + break; + case EnrollmentStep.RecoveryCodes: + prevStep = EnrollmentStep.MfaConfiguration; + break; + case EnrollmentStep.Finish: + if (!skipMfa) { + prevStep = EnrollmentStep.RecoveryCodes; + } else if (!skipPassword) { + prevStep = EnrollmentStep.Password; + } else { + prevStep = EnrollmentStep.Welcome; + } + break; + default: + return; + } + set({ activeStep: prevStep }); + }, + next: () => { + const { activeStep, skipPassword, skipMfa, skipMfaChoice } = get(); + let nextStep: EnrollmentStepValue; + switch (activeStep) { + case EnrollmentStep.Welcome: + if (!skipPassword) { + nextStep = EnrollmentStep.Password; + } else if (!skipMfaChoice && !skipMfa) { + nextStep = EnrollmentStep.MfaChoice; + } else if (!skipMfa) { + nextStep = EnrollmentStep.MfaConfiguration; + } else { + nextStep = EnrollmentStep.Finish; + } + break; + case EnrollmentStep.Password: + if (!skipMfaChoice && !skipMfa) { + nextStep = EnrollmentStep.MfaChoice; + } else if (!skipMfa) { + nextStep = EnrollmentStep.MfaConfiguration; + } else { + nextStep = EnrollmentStep.Finish; + } + break; + case EnrollmentStep.MfaChoice: + nextStep = EnrollmentStep.MfaConfiguration; + break; + case EnrollmentStep.MfaConfiguration: + nextStep = EnrollmentStep.RecoveryCodes; + break; + case EnrollmentStep.RecoveryCodes: + nextStep = EnrollmentStep.Finish; + break; + case EnrollmentStep.Finish: + return; + default: + return; + } + set({ activeStep: nextStep }); + }, + }), + { + name: 'enrollment-store', + storage: createJSONStorage(() => sessionStorage), + version: 1, + }, + ), +); diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx new file mode 100644 index 000000000..fbd8c014f --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx @@ -0,0 +1,33 @@ +import './style.scss'; +import { useNavigate } from '@tanstack/react-router'; +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../shared/components/Controls/Controls'; +import bannerSrc from './assets/banner.png'; + +export const FinishStep = () => { + const navigate = useNavigate(); + return ( +
+
+ +
+

{`New Defguard instance added successfully`}

+

{`You can now connect this device, check its status and view statistics.`}

+
+
+
+ +
+
+
+
+ ); +}; diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/assets/banner.png b/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/assets/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..95cc6e4e74e44c43d4ed3a2af9cecfc2af44ba36 GIT binary patch literal 133051 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
_B2P`H{$p+}8pc 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�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 .content-pad { + box-sizing: border-box; + padding: 0 var(--spacing-md); + + > img { + padding-bottom: var(--spacing-3xl); + } + + > .top { + :nth-child(1) { + font: var(--t-h4); + color: var(--fg-white-100); + padding-bottom: var(--spacing-sm); + } + + :nth-child(2) { + font: var(--t-body-sm-400); + color: var(--fg-white-70); + } + } + } +} diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx new file mode 100644 index 000000000..c4a2bb124 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx @@ -0,0 +1,118 @@ +/** biome-ignore-all lint/style/noNonNullAssertion: this cannot be shown without those store values */ +import { useMutation } from '@tanstack/react-query'; +import clsx from 'clsx'; +import { useState } from 'react'; +import { useShallow } from 'zustand/shallow'; +import { + Icon, + IconKind, + type IconKindValue, +} from '../../../../../shared/components/Icon'; +import { RadioIndicator } from '../../../../../shared/components/RadioIndicator/RadioIndicator'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { edgeApi } from '../../../../../shared/edge-api/api'; +import { MfaMethod, type MfaMethodValue } from '../../../../../shared/rust-api/types'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { EnrollmentControls } from '../../components/EnrollmentControls/EnrollmentControls'; +import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; + +export const MfaChoiceStep = () => { + const [proxyUrl, cookie] = useEnrollmentStore( + useShallow((s) => [s.proxyUrl!, s.sessionCookie!]), + ); + const [mfa, setMfa] = useState( + useEnrollmentStore.getState().userMfaChoice, + ); + + const { mutate, isPending } = useMutation({ + mutationFn: () => edgeApi.startMfaSetup(proxyUrl, cookie, mfa), + onSuccess: (resp) => { + if (mfa === MfaMethod.Totp) { + const secret = resp.result?.totp_secret; + useEnrollmentStore.setState({ + userMfaChoice: mfa, + userTotpSecret: secret, + }); + } else { + useEnrollmentStore.setState({ userMfaChoice: mfa }); + } + useEnrollmentStore.getState().next(); + }, + }); + + return ( +
+
+

Enable Multi-Factor Authentication

+

+ To keep your account safe, you need to set up at least one additional sign-in + step. Use this wizard to get started. +

+
+ +
+ { + setMfa(MfaMethod.Totp); + }} + icon={IconKind.MobileLock} + title="Security code from your authenticator app" + description="Use an app on your phone that generates a temporary code to confirm it's you (Google Authenticator, Microsoft Authenticator, Authy)." + /> + { + setMfa(MfaMethod.Email); + }} + icon={IconKind.Mail} + title="Code from email" + description="We'll send a temporary security code to your email. Enter the code to confirm it's you and continue." + /> +
+ { + mutate(); + }} + loading={isPending} + /> +
+ ); +}; + +const MethodSelectionCard = ({ + active, + title, + description, + icon, + onChange, +}: { + icon: IconKindValue; + active: boolean; + title: string; + description: string; + onChange: () => void; +}) => { + return ( +
+
+
+ +
+
+

{title}

+

{description}

+
+
+ +
+
+
+ ); +}; diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/style.scss b/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/style.scss new file mode 100644 index 000000000..0d1dc95f8 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/style.scss @@ -0,0 +1,60 @@ +#mfa-choice-step { + .methods { + display: flex; + flex-flow: column; + row-gap: var(--spacing-md); + width: 100%; + } + + .method-selection-block { + --border: var(--border-disabled); + + width: 100%; + box-sizing: border-box; + border-radius: 12px; + border: 1px solid var(--border); + cursor: pointer; + padding: var(--spacing-lg) var(--spacing-md); + user-select: none; + + &.active { + --border: var(--border-emphasis); + } + + > .track { + display: grid; + grid-template-columns: + 20px var(--spacing-lg) minmax(0, 412px) minmax(var(--spacing-lg), 1fr) + 24px; + grid-template-rows: 1fr; + + .icon-track { + align-self: start; + grid-column: 1 / 2; + } + + .info-block { + grid-column: 3 / 4; + + .title { + font: var(--t-body-sm-500); + padding-bottom: var(--spacing-xs); + } + + .description { + font: var(--t-body-xs-400); + color: var(--fg-white-70); + } + } + + .indicator-track { + grid-column: 5 / 6; + display: flex; + flex-flow: column; + align-items: center; + justify-content: center; + height: 100%; + } + } + } +} diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/MfaConfigurationStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/MfaConfigurationStep.tsx new file mode 100644 index 000000000..887993492 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/MfaConfigurationStep.tsx @@ -0,0 +1,120 @@ +import { Fragment, useCallback, useEffect, useMemo, useState } from 'react'; +import './style.scss'; +import { useMutation } from '@tanstack/react-query'; +import { useShallow } from 'zustand/shallow'; +import { CodeInput } from '../../../../../shared/components/CodeInput/CodeInput'; +import { CopyField } from '../../../../../shared/components/CopyField/CopyField'; +import { Divider } from '../../../../../shared/components/Divider/Divider'; +import { QrCard } from '../../../../../shared/components/QrCard/QrCard'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { edgeApi } from '../../../../../shared/edge-api/api'; +import { MfaMethod } from '../../../../../shared/rust-api/types'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { isPresent } from '../../../../../shared/utils/isPresent'; +import { EnrollmentControls } from '../../components/EnrollmentControls/EnrollmentControls'; +import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; + +export const MfaConfigurationStep = () => { + const method = useEnrollmentStore((s) => s.userMfaChoice); + const [code, setCode] = useState(null); + const [error, setError] = useState(null); + const [proxyUrl, cookie, password] = useEnrollmentStore( + // biome-ignore lint/style/noNonNullAssertion: safe + useShallow((s) => [s.proxyUrl!, s.sessionCookie!, s.userPassword!]), + ); + + const { mutate, isPending } = useMutation({ + mutationFn: async () => { + const resp = await edgeApi.finishMfaSetup(proxyUrl, cookie, { + // biome-ignore lint/style/noNonNullAssertion: checked in handleSubmit + code: code!, + method, + }); + await edgeApi.activateUser(proxyUrl, cookie, { + password, + }); + return resp; + }, + onError: () => {}, + onSuccess: (resp) => { + if (resp.result) { + useEnrollmentStore.setState({ + userRecoveryCodes: resp.result.recovery_codes, + deadline: null, + }); + useEnrollmentStore.getState().next(); + } + if (resp.error) { + setError('Enter a valid code'); + } + }, + }); + + const handleSubmit = useCallback(() => { + if (code?.trim().length !== 6) { + setError(''); + } + mutate(); + }, [code, mutate]); + + // biome-ignore lint/correctness/useExhaustiveDependencies: side effect of code + useEffect(() => { + setError(null); + }, [code]); + + return ( +
+
+

Configure MFA

+

+ {`Scan this QR code using an authenticator app (Google Auth, Microsoft Auth etc)`} +

+
+ {method === MfaMethod.Email && } + {method === MfaMethod.Totp && } + {method === MfaMethod.Totp && ( +

{`Enter 6-digit code from authentication app`}

+ )} + {method === MfaMethod.Email && ( +

{`Enter 6-digit code from email`}

+ )} + { + handleSubmit(); + }} + error={error} + /> + { + useEnrollmentStore.getState().back(); + }} + onNext={handleSubmit} + loading={isPending} + /> +
+ ); +}; + +export const TotpSetup = () => { + const secret = useEnrollmentStore((s) => s.userTotpSecret); + + const qrData = useMemo(() => { + return `otpauth://totp/Defguard?secret=${secret}`; + }, [secret]); + + return ( + +
+ {isPresent(qrData) && } +
+

+ {`Can't scan QR code? Enter code manually in the app.`} +

+ + +
+ ); +}; diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/style.scss b/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/style.scss new file mode 100644 index 000000000..f79eb5110 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/style.scss @@ -0,0 +1,30 @@ +#mfa-configuration-step { + .qr-track { + width: 100%; + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: center; + padding-top: var(--spacing-2xl); + padding-bottom: var(--spacing-xl); + } + + .scan-hint { + width: 100%; + text-align: center; + font: var(--t-body-xs-400); + color: var(--c-white-60); + user-select: none; + padding-bottom: var(--spacing-md); + } + + .copy-field { + width: 100%; + } + + .code-label { + padding-bottom: var(--spacing-lg); + font: var(--t-body-sm-500); + user-select: none; + } +} diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/PasswordStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/PasswordStep.tsx new file mode 100644 index 000000000..ed08c7ba9 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/PasswordStep.tsx @@ -0,0 +1,236 @@ +/** biome-ignore-all lint/style/noNonNullAssertion: ensured by wizard page */ +import './style.scss'; +import { useStore } from '@tanstack/react-form'; +import { useMutation } from '@tanstack/react-query'; +import clsx from 'clsx'; +import { useCallback } from 'react'; +import z from 'zod'; +import { useShallow } from 'zustand/shallow'; +import { Icon, type IconKindValue } from '../../../../../shared/components/Icon'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { edgeApi } from '../../../../../shared/edge-api/api'; +import { useAppForm, withForm } from '../../../../../shared/form'; +import { formChangeLogic } from '../../../../../shared/formLogic'; +import { MfaMethod } from '../../../../../shared/rust-api/types'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { EnrollmentControls } from '../../components/EnrollmentControls/EnrollmentControls'; +import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; +import { + type PasswordErrorCodeValue, + passwordErrorMessage, + refinePasswordField, +} from './utils'; + +const formSchema = z + .object({ + password: z + .string() + .trim() + .min(1, 'Field is required') + .regex(/^\S+$/, 'Password cannot contain spaces'), + repeat: z.string().trim(), + }) + .superRefine(({ password, repeat }, ctx) => { + const passwordIssues = refinePasswordField(password); + for (const issue of passwordIssues) { + ctx.addIssue({ + message: issue, + code: 'custom', + continue: true, + path: ['password'], + }); + } + if (repeat.length && repeat !== password) { + ctx.addIssue({ + message: "Passwords don't match", + code: 'custom', + path: ['repeat'], + continue: true, + }); + } + }); + +type FormFields = z.infer; + +const defaultValues: FormFields = { + password: '', + repeat: '', +}; + +export const PasswordStep = () => { + const [proxyUrl, cookie] = useEnrollmentStore( + useShallow((s) => [s.proxyUrl!, s.sessionCookie!]), + ); + const { mutateAsync: startMfa } = useMutation({ + mutationFn: () => edgeApi.startMfaSetup(proxyUrl, cookie, MfaMethod.Totp), + }); + + const form = useAppForm({ + defaultValues, + validationLogic: formChangeLogic, + validators: { + onSubmit: formSchema, + onChange: formSchema, + }, + onSubmit: async ({ value }) => { + const { skipMfaChoice, skipMfa } = useEnrollmentStore.getState(); + if (skipMfaChoice) { + const mfaResponse = await startMfa(); + if (mfaResponse.result) { + useEnrollmentStore.setState({ + userTotpSecret: mfaResponse.result.totp_secret ?? null, + }); + } else { + console.error(mfaResponse); + return; + } + } + if (skipMfa) { + await edgeApi.activateUser(proxyUrl, cookie, { + password: value.password, + }); + } else { + useEnrollmentStore.setState({ + userPassword: value.password.trim(), + }); + } + useEnrollmentStore.getState().next(); + }, + }); + + return ( +
+
+

Create password

+

+ Please check your data. If something is wrong, notify your administrator after + you complete the process. +

+
+ +
{ + event.preventDefault(); + event.stopPropagation(); + form.handleSubmit(); + }} + autoComplete="off" + > + + + {(field) => ( + { + const code = message as PasswordErrorCodeValue; + return passwordErrorMessage(code); + }} + /> + )} + + + + {(field) => ( + + )} + + + + s.isSubmitting}> + {(loading) => ( + { + useEnrollmentStore.getState().back(); + }} + onNext={() => { + form.handleSubmit(); + }} + loading={loading} + /> + )} + + +
+
+ ); +}; + +const CheckList = withForm({ + defaultValues: defaultValues, + render: ({ form }) => { + const passwordFieldErrors = useStore( + form.store, + (state) => + (state.fieldMeta.password?.errors as z.core.$ZodIssue[]) + ?.filter((issue) => issue.code === 'custom') + .map((issue) => issue.message) ?? [], + ); + + const isPasswordClean = useStore( + form.store, + (state) => state.fieldMeta.password?.isPristine ?? true, + ); + + const isChecked = useCallback( + (value: PasswordErrorCodeValue): boolean => + !passwordFieldErrors.includes(value) && !isPasswordClean, + [passwordFieldErrors, isPasswordClean], + ); + + return ( +
+

Your passwords must include:

+
    + + + + + +
+
+ ); + }, +}); + +const CheckListItem = ({ + checked, + errorCode, +}: { + errorCode: PasswordErrorCodeValue; + checked: boolean; +}) => { + const iconKind: IconKindValue = checked ? 'check-filled' : 'empty-point'; + + return ( +
  • + {passwordErrorMessage(errorCode)} +
  • + ); +}; diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/style.scss b/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/style.scss new file mode 100644 index 000000000..7e75d28e6 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/style.scss @@ -0,0 +1,47 @@ +#password-step { + .checklist { + user-select: none; + + > p { + font: var(--t-body-xs-600); + color: var(--fg-white-100); + padding-bottom: var(--spacing-md); + } + + ul { + list-style: none; + margin: 0; + display: flex; + flex-flow: column; + row-gap: var(--spacing-sm); + + li { + --color: var(--fg-white-60); + + margin: 0; + padding: 0; + display: flex; + flex-flow: row; + align-items: center; + column-gap: var(--spacing-sm); + + &.active { + --color: var(--fg-success); + } + + .icon[data-kind='empty-point'] { + --icon-color: var(--fg-white-60); + } + + .icon[data-kind='check-filled'] { + --icon-color: var(--fg-success); + } + + span { + font: var(--t-body-xs-500); + color: var(--color); + } + } + } + } +} diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/utils.ts b/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/utils.ts new file mode 100644 index 000000000..636c810c8 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/utils.ts @@ -0,0 +1,68 @@ +const PasswordErrorCode = { + Number: 'password_form_check_number', + Special: 'password_form_check_special', + Lowercase: 'password_form_check_lowercase', + Uppercase: 'password_form_check_uppercase', + Minimum: 'password_form_check_minimum', +} as const; + +const errorCodes = Object.values(PasswordErrorCode); + +export type PasswordErrorCodeValue = + (typeof PasswordErrorCode)[keyof typeof PasswordErrorCode]; + +const errorIsCustomCode = (value: string): value is PasswordErrorCodeValue => { + return (errorCodes as readonly string[]).includes(value); +}; + +const passwordErrorMessages: Record = { + [PasswordErrorCode.Number]: 'At least one number required', + [PasswordErrorCode.Special]: 'At least one special character', + [PasswordErrorCode.Lowercase]: 'At least one lowercase character', + [PasswordErrorCode.Uppercase]: 'At least one uppercase character', + [PasswordErrorCode.Minimum]: 'Minimum length of 8', +}; + +export const passwordErrorMessage = (code: PasswordErrorCodeValue): string => + passwordErrorMessages[code]; + +export const mapPasswordFieldError = ( + errorValue: string, + displayCustomError: boolean = false, +): string => { + if (errorIsCustomCode(errorValue)) { + if (displayCustomError) { + return passwordErrorMessage(errorValue); + } + return 'Password does not meet requirements'; + } + return errorValue; +}; + +const hasNumber = /[0-9]/; + +const hasUppercase = /[A-Z]/; + +const hasLowercase = /[a-z]/; + +const hasSpecialChar = /[^a-zA-Z0-9]/; + +export const refinePasswordField = (password: string): string[] => { + const issues: string[] = []; + if (password.length < 8) { + issues.push(PasswordErrorCode.Minimum); + } + if (!hasNumber.test(password)) { + issues.push(PasswordErrorCode.Number); + } + if (!hasUppercase.test(password)) { + issues.push(PasswordErrorCode.Uppercase); + } + if (!hasLowercase.test(password)) { + issues.push(PasswordErrorCode.Lowercase); + } + if (!hasSpecialChar.test(password)) { + issues.push(PasswordErrorCode.Special); + } + return issues; +}; diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/RecoveryCodesStep/RecoveryCodesStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/RecoveryCodesStep/RecoveryCodesStep.tsx new file mode 100644 index 000000000..2f097807b --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/steps/RecoveryCodesStep/RecoveryCodesStep.tsx @@ -0,0 +1,90 @@ +import './style.scss'; +import { writeText } from '@tauri-apps/plugin-clipboard-manager'; +import { useCallback, useMemo, useRef, useState } from 'react'; +import { Subject } from 'rxjs'; +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { Checkbox } from '../../../../../shared/components/Checkbox/Checkbox'; +import { Controls } from '../../../../../shared/components/Controls/Controls'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { TooltipButton } from '../../../../../shared/components/TooltipButton/TooltipButton'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { downloadText } from '../../../../../shared/utils/download'; +import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; + +export const RecoveryCodesStep = () => { + const codes = useEnrollmentStore((s) => s.userRecoveryCodes) ?? []; + const codesActionValue = useMemo(() => codes.join('\n'), [codes]); + const [confirmed, setConfirmed] = useState(false); + const clipboardSub = useRef(new Subject()); + const downloadSub = useRef(new Subject()); + + const handleCopy = useCallback(async () => { + writeText(codesActionValue).then(() => { + clipboardSub.current.next(); + }); + }, [codesActionValue]); + + const handleDownload = useCallback(() => { + downloadText(codesActionValue, `recovery`, 'txt').then(() => { + downloadSub.current.next(); + }); + }, [codesActionValue]); + + return ( +
    +
    +

    Download recovery codes

    +

    {`Recovery codes are your backup access. Store them securely (e.g. in a password manager like LastPass or Bitwarden) in case you lose your authenticator app.`}

    +
    + +
    + {codes.map((code) => ( +

    {code}

    + ))} +
    + +
    + + +
    + + { + setConfirmed((s) => !s); + }} + /> +
    +
    +
    +
    + ); +}; diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/RecoveryCodesStep/style.scss b/new-ui/src/pages/full/EnrollmentPage/steps/RecoveryCodesStep/style.scss new file mode 100644 index 000000000..49a78a06a --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/steps/RecoveryCodesStep/style.scss @@ -0,0 +1,25 @@ +#recovery-codes-step { + .codes { + display: grid; + background: var(--bg-white-5); + border-radius: 12px; + width: 100%; + grid-template-columns: 1fr 1fr; + column-gap: var(--spacing-4xl); + box-sizing: border-box; + padding: var(--spacing-md); + + p { + font: var(--t-small-400); + color: var(--fg-white-100); + } + } + + .actions { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-md); + } +} diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/WelcomeStep/WelcomeStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/WelcomeStep/WelcomeStep.tsx new file mode 100644 index 000000000..5036be5c4 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/steps/WelcomeStep/WelcomeStep.tsx @@ -0,0 +1,55 @@ +import './style.scss'; +import dayjs from 'dayjs'; +import { useMemo } from 'react'; +import { InfoBanner } from '../../../../../shared/components/InfoBanner/InfoBanner'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { formatDuration } from '../../../../../shared/utils/formatDuration'; +import { EnrollmentControls } from '../../components/EnrollmentControls/EnrollmentControls'; +import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; + +export const WelcomeStep = () => { + const enrollData = useEnrollmentStore((s) => s.startResponse); + + const timeLeft = useMemo(() => { + const deadline = enrollData?.deadline_timestamp; + if (!deadline) return ''; + const duration = dayjs.duration(dayjs.unix(deadline).diff(dayjs())); + return formatDuration(duration); + }, [enrollData?.deadline_timestamp]); + + if (!enrollData) return null; + + return ( +
    + ); +}; diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/WelcomeStep/style.scss b/new-ui/src/pages/full/EnrollmentPage/steps/WelcomeStep/style.scss new file mode 100644 index 000000000..d5bf82d5d --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/steps/WelcomeStep/style.scss @@ -0,0 +1,32 @@ +#welcome-step { + > ul { + font: var(--t-body-sm-400); + margin-left: var(--spacing-lg); + + li:not(:last-child) { + margin-bottom: var(--spacing-md); + } + + ::marker { + color: var(--fg-white-100); + } + } + + .admin-info { + display: flex; + flex-flow: column; + row-gap: 1ch; + flex-grow: 0; + + p, + a { + font: var(--t-body-xs-400); + color: var(--fg-white-100); + } + + a { + cursor: pointer; + text-decoration: none; + } + } +} diff --git a/new-ui/src/pages/full/EnrollmentPage/types.ts b/new-ui/src/pages/full/EnrollmentPage/types.ts new file mode 100644 index 000000000..64909d450 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/types.ts @@ -0,0 +1,10 @@ +export const EnrollmentStep = { + Welcome: 'welcome', + Password: 'password', + MfaChoice: 'mfa-choice', + MfaConfiguration: 'mfa-configuration', + RecoveryCodes: 'recovery-codes', + Finish: 'finish', +} as const; + +export type EnrollmentStepValue = (typeof EnrollmentStep)[keyof typeof EnrollmentStep]; diff --git a/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx b/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx new file mode 100644 index 000000000..ba73a8534 --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx @@ -0,0 +1,95 @@ +import './style.scss'; +import { useQuery } from '@tanstack/react-query'; +import { platform } from '@tauri-apps/plugin-os'; +import clsx from 'clsx'; +import { useEffect, useMemo, useState } from 'react'; +import { Fold } from '../../../shared/components/Fold/Fold'; +import { Icon, IconKind } from '../../../shared/components/Icon'; +import { OverviewLocationCard } from '../../../shared/components/OverviewLocationCard/OverviewLocationCard'; +import { ScrollContainer } from '../../../shared/components/ScrollContainer/ScrollContainer'; +import { SizedBox } from '../../../shared/components/SizedBox/SizedBox'; +import { FullPage } from '../../../shared/layouts/FullPage/FullPage'; +import { useAppData } from '../../../shared/providers/AppDataContext'; +import { getLocationsQueryOptions } from '../../../shared/rust-api/query'; +import { useAppStore } from '../../../shared/store/useAppStore'; +import { Direction, ThemeSpacing, ThemeVariable } from '../../../shared/types'; +import { isPresent } from '../../../shared/utils/isPresent'; +import { DetailsFold } from './components/DetailsFold/DetailsFold'; +import { OverviewSelection } from './components/OverviewSelection/OverviewSelection'; + +const isWindows = platform() === 'windows'; + +export const OverviewPage = () => { + const [detailsOpen, setDetailsOpen] = useState(false); + const { instances, tunnels } = useAppData(); + const selection = useAppStore((s) => s.compactViewSelection); + + const queryInstanceId = useMemo(() => { + if (!isPresent(selection)) return instances[0].id; + if (selection.kind === 'instance') return selection.data.id; + return selection.data.instance_id; + }, [selection, instances]); + + const { data: locations } = useQuery(getLocationsQueryOptions(queryInstanceId)); + + const displayedLocations = useMemo(() => { + if (!isPresent(selection) || selection.kind === 'instance') { + return locations ?? []; + } + return [selection.data]; + }, [selection, locations]); + + // biome-ignore lint/correctness/useExhaustiveDependencies: side effect only relevant on selection + useEffect(() => { + if (selection?.kind === 'tunnel' && detailsOpen) { + setDetailsOpen(false); + } + }, [selection?.kind]); + + return ( + +
    + +
    + +
    +

    {`Locations (${displayedLocations.length})`}

    + {selection?.kind === 'instance' && ( + + )} +
    +
    + + + {selection?.kind === 'instance' && } + +
    + +
    + {displayedLocations.map((location) => ( + + ))} +
    +
    +
    +
    +
    + ); +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/DetailsFold/DetailsFold.tsx b/new-ui/src/pages/full/OverviewPage/components/DetailsFold/DetailsFold.tsx new file mode 100644 index 000000000..1499300fc --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/DetailsFold/DetailsFold.tsx @@ -0,0 +1,56 @@ +import './style.scss'; +import { Divider } from '../../../../../shared/components/Divider/Divider'; +import type { InstanceInfo } from '../../../../../shared/rust-api/types'; +import { ThemeSpacing } from '../../../../../shared/types'; + +interface Props { + data: InstanceInfo; +} + +export const DetailsFold = ({ data }: Props) => { + return ( +
    +
    +

    Device configuration

    +
    +
    +

    Public key

    +
    + +
    +

    Addresses

    +
    + +
    +

    Listen port

    +
    +
    +
    +
    +

    VPN Server Configuration

    +
    +
    +

    Public key

    +

    {data.pubkey}

    +
    + +
    +

    Allowed IPs

    +
    + +
    +

    DNS servers

    +
    + +
    +

    Persistent keep alive

    +
    + +
    +

    Latest Handshake

    +
    +
    +
    +
    + ); +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/DetailsFold/style.scss b/new-ui/src/pages/full/OverviewPage/components/DetailsFold/style.scss new file mode 100644 index 000000000..66066a768 --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/DetailsFold/style.scss @@ -0,0 +1,40 @@ +.details-fold { + display: flex; + flex-flow: column; + row-gap: var(--spacing-3xl); + + > .group { + display: flex; + flex-flow: column; + row-gap: var(--spacing-sm); + + > .card { + box-sizing: border-box; + border-radius: 12px; + border: 1px solid var(--border-disabled); + padding: var(--spacing-md); + + > .row { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: space-between; + column-gap: var(--spacing-2xl); + + :nth-child(1) { + user-select: none; + font: var(--t-body-xs-400); + color: var(--fg-white-80); + text-align: left; + } + + :nth-child(2) { + font: var(--t-body-xs-400); + color: var(--fg-white-100); + text-align: right; + max-width: 365px; + } + } + } + } +} diff --git a/new-ui/src/pages/full/OverviewPage/components/OverviewSelection/OverviewSelection.tsx b/new-ui/src/pages/full/OverviewPage/components/OverviewSelection/OverviewSelection.tsx new file mode 100644 index 000000000..411ab8b89 --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/OverviewSelection/OverviewSelection.tsx @@ -0,0 +1,80 @@ +import './style.scss'; +import clsx from 'clsx'; + +import type { InstanceInfo, LocationInfo } from '../../../../../shared/rust-api/types'; +import { + type CompactViewSelection, + useAppStore, +} from '../../../../../shared/store/useAppStore'; + +type Props = { + instances: InstanceInfo[]; + tunnels: LocationInfo[]; +}; + +type SelectionItemProps = { + label: string; + selected: boolean; + onClick: () => void; +}; + +const SelectionItem = ({ label, selected, onClick }: SelectionItemProps) => ( + +); + +export const OverviewSelection = ({ instances, tunnels }: Props) => { + const selection = useAppStore((s) => s.compactViewSelection); + + const setSelection = (value: CompactViewSelection) => { + useAppStore.setState({ compactViewSelection: value }); + }; + + const isSelected = (candidate: CompactViewSelection): boolean => { + if (!selection) return false; + if (candidate.kind !== selection.kind) return false; + return candidate.data.id === selection.data.id; + }; + + return ( +
    + {instances.length > 0 && ( +
    +

    Instances

    +
    + {instances.map((instance) => { + const value: CompactViewSelection = { kind: 'instance', data: instance }; + return ( + setSelection(value)} + /> + ); + })} +
    +
    + )} + {tunnels.length > 0 && ( +
    +

    Tunnels

    +
    + {tunnels.map((tunnel) => { + const value: CompactViewSelection = { kind: 'tunnel', data: tunnel }; + return ( + setSelection(value)} + /> + ); + })} +
    +
    + )} +
    + ); +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/OverviewSelection/style.scss b/new-ui/src/pages/full/OverviewPage/components/OverviewSelection/style.scss new file mode 100644 index 000000000..de9b75238 --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/OverviewSelection/style.scss @@ -0,0 +1,69 @@ +.overview-selection { + width: 100%; + height: 100%; + box-sizing: border-box; + padding: var(--spacing-md) var(--spacing-sm); + border-right: 1px solid var(--border-disabled); + display: flex; + flex-flow: column; + align-items: center; + justify-content: flex-start; + row-gap: var(--spacing-4xl); + + .group { + display: flex; + flex-flow: column; + width: 100%; + row-gap: var(--spacing-md); + user-select: none; + + > .label { + font: var(--t-body-xs-500); + color: var(--fg-white-70); + } + + > .items { + display: flex; + flex-flow: column; + row-gap: var(--spacing-sm); + + button { + --bg: transparent; + --color: var(--fg-white-80); + + box-sizing: border-box; + border-radius: 8px; + padding: 0 var(--spacing-md); + height: 32px; + width: 100%; + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + color: var(--color); + background: var(--bg); + border: 0; + cursor: pointer; + + @include animate(color, background); + + span { + font: var(--t-body-sm-400); + color: inherit; + } + + &:not(.selected) { + :hover { + --bg: var(--bg-white-5); + --color: var(--fg-white-100); + } + } + + &.selected { + --bg: var(--bg-white-10); + --color: var(--fg-white-100); + } + } + } + } +} diff --git a/new-ui/src/pages/full/OverviewPage/style.scss b/new-ui/src/pages/full/OverviewPage/style.scss new file mode 100644 index 000000000..443895492 --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/style.scss @@ -0,0 +1,66 @@ +#overview-page { + padding: 0; + + .page-grid { + display: grid; + grid-template-columns: 180px minmax(0, 1fr); + grid-template-rows: 1fr; + height: 100%; + width: 100%; + overflow: hidden; + max-height: calc(100dvh - 50px); + } + + .overview-content { + box-sizing: border-box; + padding: var(--spacing-md) var(--spacing-lg) 0 var(--spacing-lg); + display: flex; + flex-flow: column; + overflow: hidden; + + &.windows { + padding: var(--spacing-md) calc(var(--spacing-lg) - 6px) 0 var(--spacing-lg); + } + + .scroll-container { + > .header { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + user-select: none; + + > p { + font: var(--t-h5); + color: var(--fg-white-100); + } + + > button { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: center; + margin-left: auto; + padding: 0; + height: 28px; + border: 0; + background: transparent; + column-gap: var(--spacing-xs); + user-select: none; + + span { + font: var(--t-body-xs-500); + color: var(--fg-white-80); + } + } + } + + > .locations { + display: flex; + flex-flow: column; + row-gap: var(--spacing-md); + padding-bottom: var(--spacing-lg); + } + } + } +} diff --git a/new-ui/src/pages/full/SessionTimeoutPage/SessionTimeoutPage.tsx b/new-ui/src/pages/full/SessionTimeoutPage/SessionTimeoutPage.tsx new file mode 100644 index 000000000..90f416f20 --- /dev/null +++ b/new-ui/src/pages/full/SessionTimeoutPage/SessionTimeoutPage.tsx @@ -0,0 +1,73 @@ +import './style.scss'; +import { useNavigate } from '@tanstack/react-router'; +import { useId } from 'react'; +import { Button } from '../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../shared/components/Button/types'; + +export const SessionTimeoutPage = () => { + const navigate = useNavigate(); + return ( +
    +
    + +

    {`Session time out`}

    +

    {`Sorry, you have exceeded the time limit to complete the process. +Please try again. If you need assistance, please watch our guide +or contact your administrator.`}

    +
    +
    + ); +}; + +const ClockIcon = () => { + const id = useId(); + return ( + + + + + + + + + + + + + + ); +}; diff --git a/new-ui/src/pages/full/SessionTimeoutPage/style.scss b/new-ui/src/pages/full/SessionTimeoutPage/style.scss new file mode 100644 index 000000000..fbf91cb0a --- /dev/null +++ b/new-ui/src/pages/full/SessionTimeoutPage/style.scss @@ -0,0 +1,35 @@ +#session-timeout { + min-height: 100dvh; + min-width: 100%; + + > .positioner { + height: 100dvh; + display: flex; + flex-flow: column; + align-items: center; + justify-content: center; + user-select: none; + + > * { + max-width: 424px; + } + + > svg { + margin-bottom: var(--spacing-lg); + } + + .title { + padding-bottom: var(--spacing-xs); + font: var(--t-small-500); + color: var(--fg-white-100); + text-align: center; + } + + .description { + padding-bottom: var(--spacing-lg); + font: var(--t-body-xs-400); + color: var(--fg-white-60); + text-align: center; + } + } +} diff --git a/new-ui/src/pages/full/SupportPage/SupportPage.tsx b/new-ui/src/pages/full/SupportPage/SupportPage.tsx new file mode 100644 index 000000000..f2bf520b3 --- /dev/null +++ b/new-ui/src/pages/full/SupportPage/SupportPage.tsx @@ -0,0 +1,101 @@ +import './style.scss'; +import { openUrl } from '@tauri-apps/plugin-opener'; +import type { ReactNode } from 'react'; +import { Button } from '../../../shared/components/Button/Button'; +import type { ButtonProps } from '../../../shared/components/Button/types'; +import { ButtonVariant } from '../../../shared/components/Button/types'; +import { Divider } from '../../../shared/components/Divider/Divider'; +import { FullPageTitle } from '../../../shared/components/FullPageTitle/FullPageTitle'; +import { Icon, IconKind } from '../../../shared/components/Icon'; +import type { IconKindValue } from '../../../shared/components/Icon/icon-types'; +import { SizedBox } from '../../../shared/components/SizedBox/SizedBox'; +import { FullPage } from '../../../shared/layouts/FullPage/FullPage'; +import { ThemeSpacing } from '../../../shared/types'; + +type SupportSectionProps = { + icon: IconKindValue; + title: string; + description: ReactNode; + action?: ButtonProps; + divider?: boolean; +}; + +const SupportSection = ({ + icon, + title, + description, + action, + divider = true, +}: SupportSectionProps) => ( +
    +
    + +
    +
    +

    {title}

    + +

    {description}

    + {action && ( + <> + +
    +
    +); + +export const SupportPage = () => { + return ( + + +
    + openUrl('https://docs.defguard.net/'), + }} + /> + + openUrl( + 'https://github.com/DefGuard/client/issues/new?template=02-bug.yml', + ), + }} + /> + + openUrl( + 'https://github.com/DefGuard/client/issues/new?template=01-feature-request.yml', + ), + }} + /> + +
    +
    + ); +}; diff --git a/new-ui/src/pages/full/SupportPage/style.scss b/new-ui/src/pages/full/SupportPage/style.scss new file mode 100644 index 000000000..1f2cdb7f7 --- /dev/null +++ b/new-ui/src/pages/full/SupportPage/style.scss @@ -0,0 +1,24 @@ +#support-page-view { + .sections { + .section { + display: flex; + gap: var(--spacing-lg); + + .icon { + --icon-color: var(--fg-white-60); + } + + .content { + flex: 1; + } + + .title { + font: var(--t-body-sm-500); + } + + .description { + font: var(--t-body-xs-400); + } + } + } +} diff --git a/new-ui/src/routeTree.gen.ts b/new-ui/src/routeTree.gen.ts index c52b87831..c38d0a970 100644 --- a/new-ui/src/routeTree.gen.ts +++ b/new-ui/src/routeTree.gen.ts @@ -9,10 +9,25 @@ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. import { Route as rootRouteImport } from './routes/__root' +import { Route as FullRouteImport } from './routes/full' import { Route as EmptyRouteImport } from './routes/empty' import { Route as IndexRouteImport } from './routes/index' import { Route as PlaygroundIndexRouteImport } from './routes/playground/index' +import { Route as FullIndexRouteImport } from './routes/full/index' +import { Route as CompactIndexRouteImport } from './routes/compact/index' +import { Route as FullSessionTimeoutRouteImport } from './routes/full/session-timeout' +import { Route as FullEnrollmentRouteImport } from './routes/full/enrollment' +import { Route as FullDefaultRouteImport } from './routes/full/_default' +import { Route as FullDefaultSupportRouteImport } from './routes/full/_default/support' +import { Route as FullDefaultOverviewRouteImport } from './routes/full/_default/overview' +import { Route as FullDefaultAddIndexRouteImport } from './routes/full/_default/add/index' +import { Route as FullDefaultAddInstanceRouteImport } from './routes/full/_default/add/instance' +const FullRoute = FullRouteImport.update({ + id: '/full', + path: '/full', + getParentRoute: () => rootRouteImport, +} as any) const EmptyRoute = EmptyRouteImport.update({ id: '/empty', path: '/empty', @@ -28,39 +43,156 @@ const PlaygroundIndexRoute = PlaygroundIndexRouteImport.update({ path: '/playground/', getParentRoute: () => rootRouteImport, } as any) +const FullIndexRoute = FullIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => FullRoute, +} as any) +const CompactIndexRoute = CompactIndexRouteImport.update({ + id: '/compact/', + path: '/compact/', + getParentRoute: () => rootRouteImport, +} as any) +const FullSessionTimeoutRoute = FullSessionTimeoutRouteImport.update({ + id: '/session-timeout', + path: '/session-timeout', + getParentRoute: () => FullRoute, +} as any) +const FullEnrollmentRoute = FullEnrollmentRouteImport.update({ + id: '/enrollment', + path: '/enrollment', + getParentRoute: () => FullRoute, +} as any) +const FullDefaultRoute = FullDefaultRouteImport.update({ + id: '/_default', + getParentRoute: () => FullRoute, +} as any) +const FullDefaultSupportRoute = FullDefaultSupportRouteImport.update({ + id: '/support', + path: '/support', + getParentRoute: () => FullDefaultRoute, +} as any) +const FullDefaultOverviewRoute = FullDefaultOverviewRouteImport.update({ + id: '/overview', + path: '/overview', + getParentRoute: () => FullDefaultRoute, +} as any) +const FullDefaultAddIndexRoute = FullDefaultAddIndexRouteImport.update({ + id: '/add/', + path: '/add/', + getParentRoute: () => FullDefaultRoute, +} as any) +const FullDefaultAddInstanceRoute = FullDefaultAddInstanceRouteImport.update({ + id: '/add/instance', + path: '/add/instance', + getParentRoute: () => FullDefaultRoute, +} as any) export interface FileRoutesByFullPath { '/': typeof IndexRoute '/empty': typeof EmptyRoute + '/full': typeof FullRouteWithChildren + '/full/enrollment': typeof FullEnrollmentRoute + '/full/session-timeout': typeof FullSessionTimeoutRoute + '/compact/': typeof CompactIndexRoute + '/full/': typeof FullIndexRoute '/playground/': typeof PlaygroundIndexRoute + '/full/overview': typeof FullDefaultOverviewRoute + '/full/support': typeof FullDefaultSupportRoute + '/full/add/instance': typeof FullDefaultAddInstanceRoute + '/full/add/': typeof FullDefaultAddIndexRoute } export interface FileRoutesByTo { '/': typeof IndexRoute '/empty': typeof EmptyRoute + '/full': typeof FullIndexRoute + '/full/enrollment': typeof FullEnrollmentRoute + '/full/session-timeout': typeof FullSessionTimeoutRoute + '/compact': typeof CompactIndexRoute '/playground': typeof PlaygroundIndexRoute + '/full/overview': typeof FullDefaultOverviewRoute + '/full/support': typeof FullDefaultSupportRoute + '/full/add/instance': typeof FullDefaultAddInstanceRoute + '/full/add': typeof FullDefaultAddIndexRoute } export interface FileRoutesById { __root__: typeof rootRouteImport '/': typeof IndexRoute '/empty': typeof EmptyRoute + '/full': typeof FullRouteWithChildren + '/full/_default': typeof FullDefaultRouteWithChildren + '/full/enrollment': typeof FullEnrollmentRoute + '/full/session-timeout': typeof FullSessionTimeoutRoute + '/compact/': typeof CompactIndexRoute + '/full/': typeof FullIndexRoute '/playground/': typeof PlaygroundIndexRoute + '/full/_default/overview': typeof FullDefaultOverviewRoute + '/full/_default/support': typeof FullDefaultSupportRoute + '/full/_default/add/instance': typeof FullDefaultAddInstanceRoute + '/full/_default/add/': typeof FullDefaultAddIndexRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath - fullPaths: '/' | '/empty' | '/playground/' + fullPaths: + | '/' + | '/empty' + | '/full' + | '/full/enrollment' + | '/full/session-timeout' + | '/compact/' + | '/full/' + | '/playground/' + | '/full/overview' + | '/full/support' + | '/full/add/instance' + | '/full/add/' fileRoutesByTo: FileRoutesByTo - to: '/' | '/empty' | '/playground' - id: '__root__' | '/' | '/empty' | '/playground/' + to: + | '/' + | '/empty' + | '/full' + | '/full/enrollment' + | '/full/session-timeout' + | '/compact' + | '/playground' + | '/full/overview' + | '/full/support' + | '/full/add/instance' + | '/full/add' + id: + | '__root__' + | '/' + | '/empty' + | '/full' + | '/full/_default' + | '/full/enrollment' + | '/full/session-timeout' + | '/compact/' + | '/full/' + | '/playground/' + | '/full/_default/overview' + | '/full/_default/support' + | '/full/_default/add/instance' + | '/full/_default/add/' fileRoutesById: FileRoutesById } export interface RootRouteChildren { IndexRoute: typeof IndexRoute EmptyRoute: typeof EmptyRoute + FullRoute: typeof FullRouteWithChildren + CompactIndexRoute: typeof CompactIndexRoute PlaygroundIndexRoute: typeof PlaygroundIndexRoute } declare module '@tanstack/react-router' { interface FileRoutesByPath { + '/full': { + id: '/full' + path: '/full' + fullPath: '/full' + preLoaderRoute: typeof FullRouteImport + parentRoute: typeof rootRouteImport + } '/empty': { id: '/empty' path: '/empty' @@ -82,12 +214,111 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof PlaygroundIndexRouteImport parentRoute: typeof rootRouteImport } + '/full/': { + id: '/full/' + path: '/' + fullPath: '/full/' + preLoaderRoute: typeof FullIndexRouteImport + parentRoute: typeof FullRoute + } + '/compact/': { + id: '/compact/' + path: '/compact' + fullPath: '/compact/' + preLoaderRoute: typeof CompactIndexRouteImport + parentRoute: typeof rootRouteImport + } + '/full/session-timeout': { + id: '/full/session-timeout' + path: '/session-timeout' + fullPath: '/full/session-timeout' + preLoaderRoute: typeof FullSessionTimeoutRouteImport + parentRoute: typeof FullRoute + } + '/full/enrollment': { + id: '/full/enrollment' + path: '/enrollment' + fullPath: '/full/enrollment' + preLoaderRoute: typeof FullEnrollmentRouteImport + parentRoute: typeof FullRoute + } + '/full/_default': { + id: '/full/_default' + path: '' + fullPath: '/full' + preLoaderRoute: typeof FullDefaultRouteImport + parentRoute: typeof FullRoute + } + '/full/_default/support': { + id: '/full/_default/support' + path: '/support' + fullPath: '/full/support' + preLoaderRoute: typeof FullDefaultSupportRouteImport + parentRoute: typeof FullDefaultRoute + } + '/full/_default/overview': { + id: '/full/_default/overview' + path: '/overview' + fullPath: '/full/overview' + preLoaderRoute: typeof FullDefaultOverviewRouteImport + parentRoute: typeof FullDefaultRoute + } + '/full/_default/add/': { + id: '/full/_default/add/' + path: '/add' + fullPath: '/full/add/' + preLoaderRoute: typeof FullDefaultAddIndexRouteImport + parentRoute: typeof FullDefaultRoute + } + '/full/_default/add/instance': { + id: '/full/_default/add/instance' + path: '/add/instance' + fullPath: '/full/add/instance' + preLoaderRoute: typeof FullDefaultAddInstanceRouteImport + parentRoute: typeof FullDefaultRoute + } } } +interface FullDefaultRouteChildren { + FullDefaultOverviewRoute: typeof FullDefaultOverviewRoute + FullDefaultSupportRoute: typeof FullDefaultSupportRoute + FullDefaultAddInstanceRoute: typeof FullDefaultAddInstanceRoute + FullDefaultAddIndexRoute: typeof FullDefaultAddIndexRoute +} + +const FullDefaultRouteChildren: FullDefaultRouteChildren = { + FullDefaultOverviewRoute: FullDefaultOverviewRoute, + FullDefaultSupportRoute: FullDefaultSupportRoute, + FullDefaultAddInstanceRoute: FullDefaultAddInstanceRoute, + FullDefaultAddIndexRoute: FullDefaultAddIndexRoute, +} + +const FullDefaultRouteWithChildren = FullDefaultRoute._addFileChildren( + FullDefaultRouteChildren, +) + +interface FullRouteChildren { + FullDefaultRoute: typeof FullDefaultRouteWithChildren + FullEnrollmentRoute: typeof FullEnrollmentRoute + FullSessionTimeoutRoute: typeof FullSessionTimeoutRoute + FullIndexRoute: typeof FullIndexRoute +} + +const FullRouteChildren: FullRouteChildren = { + FullDefaultRoute: FullDefaultRouteWithChildren, + FullEnrollmentRoute: FullEnrollmentRoute, + FullSessionTimeoutRoute: FullSessionTimeoutRoute, + FullIndexRoute: FullIndexRoute, +} + +const FullRouteWithChildren = FullRoute._addFileChildren(FullRouteChildren) + const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, EmptyRoute: EmptyRoute, + FullRoute: FullRouteWithChildren, + CompactIndexRoute: CompactIndexRoute, PlaygroundIndexRoute: PlaygroundIndexRoute, } export const routeTree = rootRouteImport diff --git a/new-ui/src/routes/compact/index.tsx b/new-ui/src/routes/compact/index.tsx new file mode 100644 index 000000000..441551d7c --- /dev/null +++ b/new-ui/src/routes/compact/index.tsx @@ -0,0 +1,58 @@ +import { createFileRoute, redirect } from '@tanstack/react-router'; +import { CompactLocationsPage } from '../../pages/compact/CompactLocationsPage/CompactLocationsPage'; +import { + getInstancesQueryOptions, + getLocationsQueryOptions, + getTunnelsQueryOptions, +} from '../../shared/rust-api/query'; +import type { LocationInfo } from '../../shared/rust-api/types'; +import { useAppStore } from '../../shared/store/useAppStore'; + +export const Route = createFileRoute('/compact/')({ + loader: async ({ context }) => { + const [instances, tunnels] = await Promise.all([ + context.queryClient.fetchQuery(getInstancesQueryOptions), + context.queryClient.fetchQuery(getTunnelsQueryOptions), + ]); + + if (instances.length === 0 && tunnels.length === 0) { + throw redirect({ to: '/empty' }); + } + + const stored = useAppStore.getState().compactViewSelection; + + let storedIsValid: boolean; + if (stored === null) { + storedIsValid = false; + } else if (stored.kind === 'instance') { + storedIsValid = instances.some((i) => i.id === stored.data.id); + } else { + storedIsValid = tunnels.some((t) => t.id === stored.data.id); + } + + let selected: NonNullable; + if (storedIsValid && stored !== null) { + selected = stored; + } else if (instances.length > 0) { + selected = { kind: 'instance', data: instances[0] }; + } else { + selected = { kind: 'tunnel', data: tunnels[0] }; + } + + if (!storedIsValid) { + useAppStore.setState({ compactViewSelection: selected }); + } + + let locations: LocationInfo[]; + if (selected.kind === 'instance') { + locations = await context.queryClient.fetchQuery( + getLocationsQueryOptions(selected.data.id), + ); + } else { + locations = []; + } + + return { instances, tunnels, locations }; + }, + component: CompactLocationsPage, +}); diff --git a/new-ui/src/routes/full.tsx b/new-ui/src/routes/full.tsx new file mode 100644 index 000000000..f9e4c062f --- /dev/null +++ b/new-ui/src/routes/full.tsx @@ -0,0 +1,14 @@ +import { createFileRoute, Outlet } from '@tanstack/react-router'; +import { AppDataProvider } from '../shared/providers/AppDataContext'; + +export const Route = createFileRoute('/full')({ + component: RouteComponent, +}); + +function RouteComponent() { + return ( + + + + ); +} diff --git a/new-ui/src/routes/full/_default.tsx b/new-ui/src/routes/full/_default.tsx new file mode 100644 index 000000000..3724b50fd --- /dev/null +++ b/new-ui/src/routes/full/_default.tsx @@ -0,0 +1,14 @@ +import { createFileRoute, Outlet } from '@tanstack/react-router'; +import { FullPageLayout } from '../../shared/layouts/FullPageLayout/FullPageLayout'; + +export const Route = createFileRoute('/full/_default')({ + component: RouteComponent, +}); + +function RouteComponent() { + return ( + + + + ); +} diff --git a/new-ui/src/routes/full/_default/add/index.tsx b/new-ui/src/routes/full/_default/add/index.tsx new file mode 100644 index 000000000..774d53a64 --- /dev/null +++ b/new-ui/src/routes/full/_default/add/index.tsx @@ -0,0 +1,6 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { AddPage } from '../../../../pages/full/AddPage/AddPage'; + +export const Route = createFileRoute('/full/_default/add/')({ + component: AddPage, +}); diff --git a/new-ui/src/routes/full/_default/add/instance.tsx b/new-ui/src/routes/full/_default/add/instance.tsx new file mode 100644 index 000000000..d85cbe659 --- /dev/null +++ b/new-ui/src/routes/full/_default/add/instance.tsx @@ -0,0 +1,20 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { hostname } from '@tauri-apps/plugin-os'; +import { z } from 'zod'; +import { AddInstancePage } from '../../../../pages/full/AddInstancePage/AddInstancePage'; + +const searchSchema = z.object({ + token: z.string().optional(), + url: z.string().optional(), +}); + +export const Route = createFileRoute('/full/_default/add/instance')({ + validateSearch: searchSchema, + loader: async () => { + const deviceName = await hostname(); + return { + deviceName: deviceName ?? '', + }; + }, + component: AddInstancePage, +}); diff --git a/new-ui/src/routes/full/_default/overview.tsx b/new-ui/src/routes/full/_default/overview.tsx new file mode 100644 index 000000000..54bc2b335 --- /dev/null +++ b/new-ui/src/routes/full/_default/overview.tsx @@ -0,0 +1,40 @@ +import { createFileRoute, redirect } from '@tanstack/react-router'; +import { OverviewPage } from '../../../pages/full/OverviewPage/OverviewPage'; +import { + getInstancesQueryOptions, + getTunnelsQueryOptions, +} from '../../../shared/rust-api/query'; +import { useAppStore } from '../../../shared/store/useAppStore'; + +export const Route = createFileRoute('/full/_default/overview')({ + loader: async ({ context }) => { + const [instances, tunnels] = await Promise.all([ + context.queryClient.fetchQuery(getInstancesQueryOptions), + context.queryClient.fetchQuery(getTunnelsQueryOptions), + ]); + + if (instances.length === 0 && tunnels.length === 0) { + throw redirect({ to: '/full/add' }); + } + + const stored = useAppStore.getState().compactViewSelection; + + let storedIsValid: boolean; + if (stored === null) { + storedIsValid = false; + } else if (stored.kind === 'instance') { + storedIsValid = instances.some((i) => i.id === stored.data.id); + } else { + storedIsValid = tunnels.some((t) => t.id === stored.data.id); + } + + if (!storedIsValid) { + const selected = + instances.length > 0 + ? { kind: 'instance' as const, data: instances[0] } + : { kind: 'tunnel' as const, data: tunnels[0] }; + useAppStore.setState({ compactViewSelection: selected }); + } + }, + component: OverviewPage, +}); diff --git a/new-ui/src/routes/full/_default/support.tsx b/new-ui/src/routes/full/_default/support.tsx new file mode 100644 index 000000000..076652229 --- /dev/null +++ b/new-ui/src/routes/full/_default/support.tsx @@ -0,0 +1,6 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { SupportPage } from '../../../pages/full/SupportPage/SupportPage'; + +export const Route = createFileRoute('/full/_default/support')({ + component: SupportPage, +}); diff --git a/new-ui/src/routes/full/enrollment.tsx b/new-ui/src/routes/full/enrollment.tsx new file mode 100644 index 000000000..b3288d6db --- /dev/null +++ b/new-ui/src/routes/full/enrollment.tsx @@ -0,0 +1,6 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { EnrollmentPage } from '../../pages/full/EnrollmentPage/EnrollmentPage'; + +export const Route = createFileRoute('/full/enrollment')({ + component: EnrollmentPage, +}); diff --git a/new-ui/src/routes/full/index.tsx b/new-ui/src/routes/full/index.tsx new file mode 100644 index 000000000..f068f8f48 --- /dev/null +++ b/new-ui/src/routes/full/index.tsx @@ -0,0 +1,9 @@ +import { createFileRoute, Navigate } from '@tanstack/react-router'; + +export const Route = createFileRoute('/full/')({ + component: RouteComponent, +}); + +function RouteComponent() { + return ; +} diff --git a/new-ui/src/routes/full/session-timeout.tsx b/new-ui/src/routes/full/session-timeout.tsx new file mode 100644 index 000000000..d7810f64d --- /dev/null +++ b/new-ui/src/routes/full/session-timeout.tsx @@ -0,0 +1,6 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { SessionTimeoutPage } from '../../pages/full/SessionTimeoutPage/SessionTimeoutPage'; + +export const Route = createFileRoute('/full/session-timeout')({ + component: SessionTimeoutPage, +}); diff --git a/new-ui/src/routes/index.tsx b/new-ui/src/routes/index.tsx index 7b2a9767c..e3da6280b 100644 --- a/new-ui/src/routes/index.tsx +++ b/new-ui/src/routes/index.tsx @@ -1,12 +1,12 @@ import { createFileRoute, redirect } from '@tanstack/react-router'; import { CompactLocationsPage } from '../pages/compact/CompactLocationsPage/CompactLocationsPage'; -import { useCompactLocationStore } from '../pages/compact/CompactLocationsPage/hooks/useCompactLocationsStore'; import { getInstancesQueryOptions, getLocationsQueryOptions, getTunnelsQueryOptions, } from '../shared/rust-api/query'; import type { LocationInfo } from '../shared/rust-api/types'; +import { useAppStore } from '../shared/store/useAppStore'; export const Route = createFileRoute('/')({ loader: async ({ context }) => { @@ -19,7 +19,7 @@ export const Route = createFileRoute('/')({ throw redirect({ to: '/empty' }); } - const stored = useCompactLocationStore.getState().compactViewSelection; + const stored = useAppStore.getState().compactViewSelection; let storedIsValid: boolean; if (stored === null) { @@ -40,7 +40,7 @@ export const Route = createFileRoute('/')({ } if (!storedIsValid) { - useCompactLocationStore.setState({ compactViewSelection: selected }); + useAppStore.setState({ compactViewSelection: selected }); } let locations: LocationInfo[]; diff --git a/new-ui/src/shared/components/Button/Button.tsx b/new-ui/src/shared/components/Button/Button.tsx index b1258b72e..eca509980 100644 --- a/new-ui/src/shared/components/Button/Button.tsx +++ b/new-ui/src/shared/components/Button/Button.tsx @@ -20,6 +20,7 @@ export const Button = ({ variant = ButtonVariant.Primary, disabled = false, loading = false, + ref, }: ButtonProps) => { const isLoading = loading && !disabled; const [swapDirection, setSwapDirection] = useState<'to-loading' | 'to-content' | null>( @@ -49,55 +50,55 @@ export const Button = ({ }; return ( -
    - -
    + + + + ); }; diff --git a/new-ui/src/shared/components/Button/style.scss b/new-ui/src/shared/components/Button/style.scss index 5cc175e4c..9824f9066 100644 --- a/new-ui/src/shared/components/Button/style.scss +++ b/new-ui/src/shared/components/Button/style.scss @@ -1,9 +1,3 @@ -.btn-wrap { - display: inline-block; - min-width: 0; - position: relative; -} - .btn { --btn-font: var(--t-button-label-primary); --btn-size: var(--button-size-primary); diff --git a/new-ui/src/shared/components/Button/types.ts b/new-ui/src/shared/components/Button/types.ts index fd1c7b3cb..11a1ca841 100644 --- a/new-ui/src/shared/components/Button/types.ts +++ b/new-ui/src/shared/components/Button/types.ts @@ -1,4 +1,4 @@ -import type { HTMLAttributes, MouseEventHandler } from 'react'; +import type { HTMLAttributes, MouseEventHandler, Ref } from 'react'; import type { DirectionValue } from '../../types'; import type { IconKindValue } from '../Icon/icon-types'; @@ -29,4 +29,5 @@ export type ButtonProps = { loading?: boolean; containerProps?: Omit, 'onClick'>; onClick?: MouseEventHandler; + ref?: Ref; }; diff --git a/new-ui/src/shared/components/CodeInput/CodeInput.tsx b/new-ui/src/shared/components/CodeInput/CodeInput.tsx index 9ad3e4f12..7ce6cef7e 100644 --- a/new-ui/src/shared/components/CodeInput/CodeInput.tsx +++ b/new-ui/src/shared/components/CodeInput/CodeInput.tsx @@ -15,6 +15,7 @@ interface Props { value: string | null; error?: string | null; onChange: (value: string) => void; + onSuccessPaste?: (value: string) => void; } const toDigits = (value: string | null, length: number): string[] => { @@ -26,7 +27,13 @@ const toDigits = (value: string | null, length: number): string[] => { return arr; }; -export const CodeInput = ({ onChange, value, error, length = 6 }: Props) => { +export const CodeInput = ({ + onChange, + value, + error, + onSuccessPaste, + length = 6, +}: Props) => { const [digits, setDigits] = useState(() => toDigits(value, length)); const [focusedIndex, setFocusedIndex] = useState(null); const inputRefs = useRef<(HTMLInputElement | null)[]>([]); @@ -95,6 +102,7 @@ export const CodeInput = ({ onChange, value, error, length = 6 }: Props) => { const newDigits = cleaned.split(''); setDigits(newDigits); onChange(cleaned); + onSuccessPaste?.(cleaned); focus(length - 1); } }; diff --git a/new-ui/src/shared/components/CopyField/CopyField.tsx b/new-ui/src/shared/components/CopyField/CopyField.tsx new file mode 100644 index 000000000..c77d315f0 --- /dev/null +++ b/new-ui/src/shared/components/CopyField/CopyField.tsx @@ -0,0 +1,90 @@ +import './style.scss'; +import { + autoUpdate, + FloatingPortal, + offset, + shift, + useFloating, +} from '@floating-ui/react'; +import { writeText } from '@tauri-apps/plugin-clipboard-manager'; +import clsx from 'clsx'; +import { type HTMLAttributes, type Ref, useEffect, useState } from 'react'; +import { isPresent } from '../../utils/isPresent'; +import { Icon } from '../Icon'; +import { Tooltip } from '../Tooltip/Tooltip'; + +type Props = { + text: string; + label?: string; + copyTooltip: string; + ref?: Ref; +} & HTMLAttributes; + +export const CopyField = ({ + text, + label, + ref, + className, + copyTooltip, + ...props +}: Props) => { + const [copied, setCopied] = useState(false); + + const { refs, floatingStyles } = useFloating({ + placement: 'top', + whileElementsMounted: autoUpdate, + middleware: [ + offset(15), + shift({ + padding: 4, + }), + ], + }); + + useEffect(() => { + if (copied) { + const clearCopied = () => { + setCopied(false); + }; + const timeout = setTimeout(clearCopied, 1500); + return () => { + clearTimeout(timeout); + }; + } + }, [copied]); + + return ( + <> +
    +
    + {isPresent(label) && ( +
    +

    {label}

    +
    + )} +
    +

    {text}

    + +
    +
    +
    + {copied && ( + + +

    {copyTooltip}

    +
    +
    + )} + + ); +}; diff --git a/new-ui/src/shared/components/CopyField/style.scss b/new-ui/src/shared/components/CopyField/style.scss new file mode 100644 index 000000000..c44c7c302 --- /dev/null +++ b/new-ui/src/shared/components/CopyField/style.scss @@ -0,0 +1,55 @@ +.copy-field { + & > .inner { + width: 100%; + + .label-track { + padding-bottom: var(--spacing-xs); + user-select: none; + + p { + font: var(--t-input-title); + color: var(--fg-neutral); + } + } + + .track { + width: 100%; + border: 1px solid var(--border-default); + box-sizing: border-box; + padding: var(--input-spacing-sm) var(--input-spacing-lg); + display: grid; + grid-template-columns: auto 20px; + grid-template-rows: 1fr; + column-gap: var(--input-spacing-sm); + align-items: center; + overflow: hidden; + border-radius: var(--input-border-radius); + background-color: var(--fg-white-10); + + p { + font: var(--t-input-text-primary); + color: var(--fg-white-50); + max-width: 100%; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + min-width: 0; + } + + button { + padding: 0; + margin: 0; + border: none; + background-color: transparent; + width: 20px; + height: 20px; + cursor: pointer; + user-select: none; + + .icon[data-kind='check-filled'] { + --icon-color: var(--fg-success); + } + } + } + } +} diff --git a/new-ui/src/shared/components/FieldLabel/style.scss b/new-ui/src/shared/components/FieldLabel/style.scss index 7647a723e..d24608997 100644 --- a/new-ui/src/shared/components/FieldLabel/style.scss +++ b/new-ui/src/shared/components/FieldLabel/style.scss @@ -19,7 +19,7 @@ top: 2px; path { - fill: var(--c-red); + fill: var(--fg-white-60); } } diff --git a/new-ui/src/shared/components/FullPageTitle/FullPageTitle.tsx b/new-ui/src/shared/components/FullPageTitle/FullPageTitle.tsx new file mode 100644 index 000000000..fd059892c --- /dev/null +++ b/new-ui/src/shared/components/FullPageTitle/FullPageTitle.tsx @@ -0,0 +1,19 @@ +import { ThemeSpacing, type ThemeSpacingValue } from '../../types'; +import './style.scss'; + +interface Props { + title: string; + spacing?: ThemeSpacingValue; +} +export const FullPageTitle = ({ title, spacing = ThemeSpacing.Md }: Props) => { + return ( +
    +

    {title}

    +
    + ); +}; diff --git a/new-ui/src/shared/components/FullPageTitle/style.scss b/new-ui/src/shared/components/FullPageTitle/style.scss new file mode 100644 index 000000000..8f3450658 --- /dev/null +++ b/new-ui/src/shared/components/FullPageTitle/style.scss @@ -0,0 +1,8 @@ +.full-page-title { + user-select: none; + + p { + font: var(--t-h5); + color: var(--fg-white-100); + } +} diff --git a/new-ui/src/shared/components/Icon/Icon.tsx b/new-ui/src/shared/components/Icon/Icon.tsx index a43cd6401..76411389a 100644 --- a/new-ui/src/shared/components/Icon/Icon.tsx +++ b/new-ui/src/shared/components/Icon/Icon.tsx @@ -15,6 +15,7 @@ import { IconAddRule } from './icons/IconAddRule'; import { IconAddToken } from './icons/IconAddToken'; import { IconAddUser } from './icons/IconAddUser'; import { IconAliases } from './icons/IconAliases'; +import { IconAnalytics } from './icons/IconAnalytics'; import { IconAndroid } from './icons/IconAndroid'; import { IconApple } from './icons/IconApple'; import { IconAppStore } from './icons/IconAppstore'; @@ -99,7 +100,9 @@ import { IconPlus } from './icons/IconPlus'; import { IconPlusCircle } from './icons/IconPlusCircle'; import { IconProfile } from './icons/IconProfile'; import { IconProtection } from './icons/IconProtection'; +import { IconQuestion } from './icons/IconQuestion'; import { IconRefresh } from './icons/IconRefresh'; +import { IconReport } from './icons/IconReport'; import { IconRequest } from './icons/IconRequest'; import { IconRules } from './icons/IconRules'; import { IconSearch } from './icons/IconSearch'; @@ -305,7 +308,7 @@ export const Icon = ({ case 'add-user': return IconAddUser; case 'analytics': - return EmptyIcon; + return IconAnalytics; case 'archive': return EmptyIcon; case 'attention-outlined': @@ -434,6 +437,8 @@ export const Icon = ({ return IconChat; case 'request': return IconRequest; + case 'question': + return IconQuestion; case 'calendar': return IconCalendar; case 'light-bulb': @@ -450,6 +455,8 @@ export const Icon = ({ return IconPlayFilled; case 'disconnect-all': return IconDisconnectAll; + case 'report': + return IconReport; } }, [iconKind]); diff --git a/new-ui/src/shared/components/Icon/icon-types.ts b/new-ui/src/shared/components/Icon/icon-types.ts index 0bb5f2ac6..e23290f8a 100644 --- a/new-ui/src/shared/components/Icon/icon-types.ts +++ b/new-ui/src/shared/components/Icon/icon-types.ts @@ -137,6 +137,8 @@ export const IconKind = { AuthorisedApp: 'authorised-app', Play: 'play', PlayFilled: 'play-filled', + Question: 'question', + Report: 'report', } as const; export type IconKindValue = (typeof IconKind)[keyof typeof IconKind]; diff --git a/new-ui/src/shared/components/Icon/icons/IconAnalytics.tsx b/new-ui/src/shared/components/Icon/icons/IconAnalytics.tsx new file mode 100644 index 000000000..90814a03f --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconAnalytics.tsx @@ -0,0 +1,16 @@ +export const IconAnalytics = () => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconQuestion.tsx b/new-ui/src/shared/components/Icon/icons/IconQuestion.tsx new file mode 100644 index 000000000..20284cc64 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconQuestion.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; + +export const IconQuestion = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/icons/IconReport.tsx b/new-ui/src/shared/components/Icon/icons/IconReport.tsx new file mode 100644 index 000000000..14d316040 --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconReport.tsx @@ -0,0 +1,21 @@ +import type { SVGProps } from 'react'; + +export const IconReport = (props: SVGProps) => { + return ( + + + + ); +}; diff --git a/new-ui/src/shared/components/Icon/style.scss b/new-ui/src/shared/components/Icon/style.scss index bb973dd5d..2f60dd6f4 100644 --- a/new-ui/src/shared/components/Icon/style.scss +++ b/new-ui/src/shared/components/Icon/style.scss @@ -24,20 +24,20 @@ .icon svg { path { - fill: var(--c-white-100); + fill: var(--icon-color, var(--fg-white-100)); } circle { - stroke: var(--c-white-100); + stroke: var(--icon-color, var(--fg-white-100)); } } .icon[style*='--icon-color'] svg path { - fill: var(--icon-color); + fill: var(--icon-color, var(--fg-white-100)); } .icon[style*='--icon-color'] svg circle { - stroke: var(--icon-color); + stroke: var(--icon-color, var(--fg-white-100)); } .icon svg.stroke-icon path, diff --git a/new-ui/src/shared/components/InfoBanner/InfoBanner.tsx b/new-ui/src/shared/components/InfoBanner/InfoBanner.tsx new file mode 100644 index 000000000..68351cd8d --- /dev/null +++ b/new-ui/src/shared/components/InfoBanner/InfoBanner.tsx @@ -0,0 +1,23 @@ +import './style.scss'; +import { ThemeVariable } from '../../types'; +import { Icon, IconKind, type IconKindValue } from '../Icon'; + +interface Props { + icon?: IconKindValue; + message: string; +} + +export const InfoBanner = ({ message, icon = IconKind.InfoFilled }: Props) => { + return ( +
    +
    +
    + +
    +
    +

    {message}

    +
    +
    +
    + ); +}; diff --git a/new-ui/src/shared/components/InfoBanner/style.scss b/new-ui/src/shared/components/InfoBanner/style.scss new file mode 100644 index 000000000..74e49a121 --- /dev/null +++ b/new-ui/src/shared/components/InfoBanner/style.scss @@ -0,0 +1,33 @@ +.info-banner { + border-radius: 12px; + box-sizing: border-box; + padding: var(--spacing-md); + background-color: var(--bg-white-10); + + > .grid { + display: grid; + grid-template-columns: 20px minmax(0, 1fr); + grid-template-rows: 1fr; + column-gap: var(--spacing-md); + place-items: start start; + + .icon-track { + display: flex; + flex-flow: column; + align-items: flex-start; + justify-content: flex-start; + user-select: none; + } + + .content-track { + display: flex; + flex-flow: column; + row-gap: var(--spacing-md); + + p { + font: var(--t-body-xs-500); + color: var(--fg-white-100); + } + } + } +} diff --git a/new-ui/src/shared/components/Input/Input.tsx b/new-ui/src/shared/components/Input/Input.tsx new file mode 100644 index 000000000..9fc928326 --- /dev/null +++ b/new-ui/src/shared/components/Input/Input.tsx @@ -0,0 +1,161 @@ +import { type HTMLInputTypeAttribute, useId, useMemo, useRef, useState } from 'react'; +import './style.scss'; +import clsx from 'clsx'; +import { isNumber } from 'lodash-es'; +import { isPresent } from '../../utils/isPresent'; +import { mergeRefs } from '../../utils/mergeRefs'; +import { FieldBox } from '../FieldBox/FieldBox'; +import { FieldError } from '../FieldError/FieldError'; +import { FieldLabel } from '../FieldLabel/FieldLabel'; +import { Icon } from '../Icon'; +import type { IconKindValue } from '../Icon/icon-types'; +import type { InputProps } from './types'; + +const externalValueToInput = (value: string | null | number): string | number => { + if (value === null) return ''; + return value; +}; + +const preferredTypeToInternal = (value: InputProps['type']): HTMLInputTypeAttribute => { + if (!isPresent(value)) return 'text'; + + switch (value) { + case 'search': + return 'text'; + case 'number': + return 'number'; + default: + return value; + } +}; + +export const Input = ({ + value, + error, + label, + ref, + name, + placeholder, + boxProps, + testId, + onChange, + onBlur, + onFocus, + notNull, + size = 'default', + type = 'text', + required = false, + disabled = false, + autocomplete = 'off', +}: InputProps) => { + const isPassword = useMemo(() => type === 'password', [type]); + + const preferredTypeIsSearch = useMemo(() => type === 'search', [type]); + + const [inputTypeInner, setInputType] = useState( + preferredTypeToInternal(type), + ); + + const innerRef = useRef(null); + const id = useId(); + + const interactionIconRight = useMemo((): IconKindValue | undefined => { + if (typeof value === 'string') { + // allow clear action for search + if (value?.length && preferredTypeIsSearch) { + return 'clear'; + } + // toggle show / hide for password + if (isPassword) { + if (inputTypeInner === 'password') { + return 'show'; + } else { + return 'hide'; + } + } + } + }, [isPassword, inputTypeInner, value, preferredTypeIsSearch]); + + return ( +
    +
    + {isPresent(label) && ( + { + innerRef.current?.focus(); + }} + /> + )} + { + innerRef.current?.focus(); + }} + iconLeft={preferredTypeIsSearch ? : undefined} + iconRight={ + interactionIconRight ? : undefined + } + reserveInteraction={preferredTypeIsSearch} + onInteractionClick={(e) => { + e.preventDefault(); + e.stopPropagation(); + // clear + if (preferredTypeIsSearch) { + onChange?.(''); + } + if (isPassword) { + setInputType((s) => { + if (s === 'password') { + return 'text'; + } + return 'password'; + }); + } + }} + {...boxProps} + > + { + if (isPresent(onChange)) { + let changeValue: string | null | number = e.target.value; + // allows nulls to be typed directly to form state + if (changeValue === '' && !notNull && !required) { + changeValue = null; + } else { + if (inputTypeInner === 'number') { + const parsed = parseInt(changeValue, 10); + if (!isNumber(parsed)) return; + changeValue = parsed; + } + } + onChange(changeValue); + } + }} + /> + + +
    +
    + ); +}; diff --git a/new-ui/src/shared/components/Input/style.scss b/new-ui/src/shared/components/Input/style.scss new file mode 100644 index 000000000..f902571ce --- /dev/null +++ b/new-ui/src/shared/components/Input/style.scss @@ -0,0 +1,52 @@ +.input { + & > .inner { + box-sizing: border-box; + + &.error { + padding-bottom: var(--form-field-error-space); + } + + .field-label { + cursor: pointer; + user-select: none; + } + + .input-track { + --input-font: var(--t-input-text-primary); + + &.size-lg { + --input-font: var(--t-input-text-big); + } + + input { + font: var(--input-font); + color: var(--fg-white-100); + border: none; + background: none; + border-radius: 0; + width: 100%; + max-width: 100%; + overflow: hidden; + margin: 0; + padding: 0; + + &::placeholder { + font: var(--input-font); + color: var(--fg-white-50); + } + + &:disabled { + cursor: not-allowed; + } + } + } + + &.disabled { + user-select: none; + + & > .field-label { + cursor: not-allowed; + } + } + } +} diff --git a/new-ui/src/shared/components/Input/types.ts b/new-ui/src/shared/components/Input/types.ts new file mode 100644 index 000000000..8bcdd92fc --- /dev/null +++ b/new-ui/src/shared/components/Input/types.ts @@ -0,0 +1,41 @@ +import type { + HTMLAttributes, + HTMLInputAutoCompleteAttribute, + MouseEventHandler, + Ref, +} from 'react'; +import type { FieldBoxProps, FieldSize } from '../FieldBox/types'; + +export type InputProps = { + value: string | null | number; + size?: FieldSize; + type?: 'password' | 'text' | 'search' | 'number'; + ref?: Ref; + error?: string | null; + name?: string; + label?: string; + required?: boolean; + disabled?: boolean; + placeholder?: string; + onChange?: (value: string | number | null) => void; + boxProps?: Partial; + autocomplete?: HTMLInputAutoCompleteAttribute; + testId?: string; + notNull?: boolean; +} & Pick, 'onBlur' | 'onFocus'>; + +export type FormInputProps = Pick< + InputProps, + | 'name' + | 'placeholder' + | 'disabled' + | 'required' + | 'label' + | 'autocomplete' + | 'size' + | 'type' + | 'notNull' +> & { + mapError?: (error: string) => string | undefined; + onDismiss?: MouseEventHandler; +}; diff --git a/new-ui/src/shared/components/LocationCard/LocationCard.tsx b/new-ui/src/shared/components/LocationCard/LocationCard.tsx index d1aa09929..d578eb256 100644 --- a/new-ui/src/shared/components/LocationCard/LocationCard.tsx +++ b/new-ui/src/shared/components/LocationCard/LocationCard.tsx @@ -1,17 +1,13 @@ import './style.scss'; import clsx from 'clsx'; import type { ReactNode } from 'react'; -import { - ConnectionType, - type InstanceInfo, - type LocationInfo, -} from '../../rust-api/types'; +import type { InstanceInfo, LocationInfo } from '../../rust-api/types'; import { Direction } from '../../types'; import { Fold } from '../Fold/Fold'; import { IconKind } from '../Icon'; import { IconButton } from '../IconButton/IconButton'; import { IconButtonVariant } from '../IconButton/types'; -import { LocationCardIcon } from './components/LocationCardIcon'; +import { LocationCardHeaderInfo } from './components/LocationCardHeaderInfo/LocationCardHeaderInfo'; import { LocationCardProvider, useLocationCardContext } from './context/context'; import { LocationCardViews, type LocationCardViewsValue } from './context/types'; import { ConnectedView } from './views/ConnectedView/ConnectedView'; @@ -64,24 +60,7 @@ const LocationCardInner = ({ isOpen, onOpen, disableOpen }: InnerProps) => { })} onClick={onOpen} > -
    - -
    -

    - {location.connection_type === ConnectionType.Location - ? 'Location' - : 'Tunnel'} -

    -
    -

    {location.name}

    - {location.active && ( -
    -

    Online

    -
    - )} -
    -
    -
    +
    {!disableOpen && ( => { let headers: EdgeRequestHeaders; try { - headers = await api.getEdgeRequestHeaders(); + headers = await edgeApi.getEdgeRequestHeaders(); } catch { throw new MfaStartError('Failed to load request headers'); } diff --git a/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx b/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx index a430f3239..9990f2770 100644 --- a/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx +++ b/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx @@ -1,71 +1,19 @@ import './style.scss'; -import { useMutation } from '@tanstack/react-query'; import clsx from 'clsx'; -import { api } from '../../../../rust-api/api'; -import { LocationMfaMode } from '../../../../rust-api/types'; -import { parseConnectError } from '../../api/connectError'; -import { useLocationCardContext } from '../../context/context'; -import { LocationCardViews } from '../../context/types'; -export const ConnectButton = () => { - const { location, setPostureError, setView, startMfa } = useLocationCardContext(); +interface Props { + active: boolean; + onClick: () => void; +} - const { mutate: connect } = useMutation({ - mutationFn: api.connect, - onSuccess: () => { - setView(LocationCardViews.Connected); - }, - onError: (err) => { - const connectError = parseConnectError(err); - - if ( - location.posture_check_required && - connectError?.kind === 'postureCheckFailed' - ) { - setPostureError(connectError.message); - setView(LocationCardViews.PostureCheckFail); - } - }, - meta: { - invalidate: ['locations'], - }, - }); - - const { mutate: disconnect } = useMutation({ - mutationFn: api.disconnect, - onSuccess: () => { - setView(LocationCardViews.Default); - }, - meta: { - invalidate: ['locations'], - }, - }); - - return ( - - ); -}; +export const ConnectButton = ({ active, onClick }: Props) => ( + +); diff --git a/new-ui/src/shared/components/LocationCard/components/ConnectionChart/ConnectionChart.tsx b/new-ui/src/shared/components/LocationCard/components/ConnectionChart/ConnectionChart.tsx index 9332293c9..980714e19 100644 --- a/new-ui/src/shared/components/LocationCard/components/ConnectionChart/ConnectionChart.tsx +++ b/new-ui/src/shared/components/LocationCard/components/ConnectionChart/ConnectionChart.tsx @@ -1,11 +1,9 @@ import './style.scss'; -import { useQuery } from '@tanstack/react-query'; import { BarElement, CategoryScale, Chart as ChartJS, LinearScale } from 'chart.js'; import { sum } from 'radashi'; import { useMemo } from 'react'; import { Bar } from 'react-chartjs-2'; -import { getLocationStatsQueryOptions } from '../../../../rust-api/query'; -import type { ConnectionType } from '../../../../rust-api/types'; +import type { LocationStats } from '../../../../rust-api/types'; import { BoxIcon } from '../../../BoxIcon/BoxIcon'; import { Icon, IconKind } from '../../../Icon'; import { TransferText } from '../../../TransferText/TransferText'; @@ -16,15 +14,10 @@ const UPLOAD_COLOR = 'rgba(255, 255, 255, 0.20)'; const DOWNLOAD_COLOR = 'rgba(255, 255, 255, 1.0)'; interface Props { - locationId: number; - connectionType: ConnectionType; + stats: LocationStats[]; } -export const ConnectionChart = ({ locationId, connectionType }: Props) => { - const { data: stats } = useQuery( - getLocationStatsQueryOptions({ locationId, connectionType }), - ); - +export const ConnectionChart = ({ stats }: Props) => { const statsSum = useMemo( () => ({ download: sum(stats ?? [], (s) => s.download), diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardConnectButton.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectButton.tsx new file mode 100644 index 000000000..ee8edd0f2 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectButton.tsx @@ -0,0 +1,60 @@ +import { useMutation } from '@tanstack/react-query'; +import { api } from '../../../rust-api/api'; +import { LocationMfaMode } from '../../../rust-api/types'; +import { parseConnectError } from '../api/connectError'; +import { useLocationCardContext } from '../context/context'; +import { LocationCardViews } from '../context/types'; +import { ConnectButton } from './ConnectButton/ConnectButton'; + +export const LocationCardConnectButton = () => { + const { location, setPostureError, setView, startMfa } = useLocationCardContext(); + + const { mutate: connect } = useMutation({ + mutationFn: api.connect, + onSuccess: () => { + setView(LocationCardViews.Connected); + }, + onError: (err) => { + const connectError = parseConnectError(err); + + if ( + location.posture_check_required && + connectError?.kind === 'postureCheckFailed' + ) { + setPostureError(connectError.message); + setView(LocationCardViews.PostureCheckFail); + } + }, + meta: { + invalidate: ['locations'], + }, + }); + + const { mutate: disconnect } = useMutation({ + mutationFn: api.disconnect, + onSuccess: () => { + setView(LocationCardViews.Default); + }, + meta: { + invalidate: ['locations'], + }, + }); + + const handleClick = () => { + if (location.active) { + disconnect({ + connectionType: location.connection_type, + locationId: location.id, + }); + } else if (location.location_mfa_mode !== LocationMfaMode.Disabled) { + startMfa(); + } else { + connect({ + connectionType: location.connection_type, + locationId: location.id, + }); + } + }; + + return ; +}; diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionInfo/LocationCardConnectionInfo.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionInfo/LocationCardConnectionInfo.tsx new file mode 100644 index 000000000..5b51b5a6d --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionInfo/LocationCardConnectionInfo.tsx @@ -0,0 +1,107 @@ +import './style.scss'; +import { useQuery } from '@tanstack/react-query'; +import dayjs from 'dayjs'; +import { useId, useMemo } from 'react'; +import { api } from '../../../../rust-api/api'; +import { getLocationStatsQueryOptions } from '../../../../rust-api/query'; +import type { LocationInfo } from '../../../../rust-api/types'; +import { ThemeSpacing } from '../../../../types'; +import { SizedBox } from '../../../SizedBox/SizedBox'; +import { ConnectionChart } from '../ConnectionChart/ConnectionChart'; + +export const LocationCardConnectionInfo = ({ location }: { location: LocationInfo }) => { + const { data: stats } = useQuery( + getLocationStatsQueryOptions({ + locationId: location.id, + connectionType: location.connection_type, + }), + ); + + const { data: lastConnection } = useQuery({ + queryKey: ['locations', location.id, 'last-connect'], + queryFn: () => + api.getLastConnection({ + connectionType: location.connection_type, + locationId: location.id, + }), + }); + + const lastConnectedText = useMemo(() => { + if (!lastConnection) return 'Never'; + return dayjs.utc(lastConnection.end).local().format('DD MMM YYYY'); + }, [lastConnection]); + + if (!stats || stats.length === 0) + return ( +
    + + +

    {`Traffic data not available`}

    + +

    {`Connect once to see the traffic details.`}

    +
    + ); + + return ( +
    +
    +
    +
    Last connected
    +
    {lastConnectedText}
    +
    +
    +
    Assigned IP
    +
    {location.address}
    +
    +
    + + +
    + ); +}; + +const EmptyIcon = () => { + const id = useId(); + return ( + + + + + + + + + + + + + + ); +}; diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionInfo/style.scss b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionInfo/style.scss new file mode 100644 index 000000000..cf0287fc1 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionInfo/style.scss @@ -0,0 +1,42 @@ +.location-card-connection-info { + > .connection-info { + display: flex; + flex-flow: row nowrap; + align-items: flex-start; + justify-content: space-between; + + > .info { + > .label { + font: var(--t-body-xxs-400); + color: var(--fg-white-50); + padding-bottom: var(--spacing-xs); + } + + > .label-value { + font: var(--t-body-xs-500); + } + } + } +} + +.no-connection-info { + display: flex; + flex-flow: column; + align-items: center; + justify-content: center; + user-select: none; + + p { + text-align: center; + } + + .title { + font: var(--t-body-sm-500); + color: var(--fg-white-100); + } + + .description { + font: var(--t-body-xs-400); + color: var(--fg-white-60); + } +} diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/LocationCardConnectionTiles.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/LocationCardConnectionTiles.tsx new file mode 100644 index 000000000..7bce86e0e --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/LocationCardConnectionTiles.tsx @@ -0,0 +1,35 @@ +import clsx from 'clsx'; +import { type LocationInfo, LocationMfaMode } from '../../../../rust-api/types'; +import { mfaToText } from '../../../../utils/mfa'; +import { BoxIcon } from '../../../BoxIcon/BoxIcon'; +import { Icon, IconKind } from '../../../Icon'; + +interface Props { + variant: 'compact' | 'full'; + location: LocationInfo; +} + +export const LocationCardConnectionTiles = ({ location, variant }: Props) => { + return ( +
    +
    + + + +

    Allowed traffic

    +

    + {location.route_all_traffic ? 'All traffic' : 'Predefined traffic'} +

    +
    + {location.location_mfa_mode !== LocationMfaMode.Disabled && ( +
    + + + +

    Active MFA

    +

    {mfaToText(location.mfa_method ?? 'totp')}

    +
    + )} +
    + ); +}; diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/style.scss b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/style.scss new file mode 100644 index 000000000..467228261 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/style.scss @@ -0,0 +1,56 @@ +.location-card-connection-tiles { + &.variant- { + &compact { + display: grid; + grid-template-columns: repeat(2, 1fr); + column-gap: var(--spacing-md); + + .tile { + border-radius: 8px; + padding: var(--spacing-sm) var(--spacing-md); + + > .box-icon { + margin-bottom: 13px; + } + + > .label { + padding-bottom: var(--spacing-xs); + } + } + } + + &full { + display: flex; + flex-flow: row nowrap; + column-gap: var(--spacing-md); + align-items: center; + justify-content: flex-start; + + .tile { + display: inline-flex; + flex-flow: row nowrap; + column-gap: var(--spacing-sm); + padding: var(--spacing-sm); + border-radius: 12px; + + > .label { + display: none; + } + } + } + } + + .tile { + background: var(--bg-white-5); + box-sizing: border-box; + + > .label { + font: var(--t-body-xxs-400); + color: var(--fg-white-50); + } + + > .label-value { + font: var(--t-body-xs-500); + } + } +} diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/LocationCardHeaderInfo.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/LocationCardHeaderInfo.tsx new file mode 100644 index 000000000..e60e0cc6d --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/LocationCardHeaderInfo.tsx @@ -0,0 +1,26 @@ +import './style.scss'; +import { ConnectionType, type LocationInfo } from '../../../../rust-api/types'; +import { LocationCardIcon } from '../LocationCardIcon'; + +interface Props { + location: LocationInfo; +} + +export const LocationCardHeaderInfo = ({ location }: Props) => ( +
    + +
    +

    + {location.connection_type === ConnectionType.Location ? 'Location' : 'Tunnel'} +

    +
    +

    {location.name}

    + {location.active && ( +
    +

    Online

    +
    + )} +
    +
    +
    +); diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/style.scss b/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/style.scss new file mode 100644 index 000000000..77d2601e2 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/style.scss @@ -0,0 +1,46 @@ +.location-card-header-info { + display: flex; + flex-flow: row; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-md); + + .info { + display: flex; + flex-flow: column; + + .label { + font: var(--t-body-xs-400); + color: var(--fg-white-70); + } + + .location-name { + font: var(--t-body-primary-600); + color: var(--fg-white-100); + } + + > .bottom { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-sm); + } + + .online-badge { + display: inline-block; + box-sizing: border-box; + padding: 1px 4px; + border-radius: 4px; + background-color: #74ffb8; + + p { + font-family: var(--font-family-body); + font-size: 10px; + letter-spacing: 0.1px; + font-weight: 600; + color: #2f50c2; + } + } + } +} diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/LocationCardMfaEdit.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/LocationCardMfaEdit.tsx new file mode 100644 index 000000000..7b8189088 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/LocationCardMfaEdit.tsx @@ -0,0 +1,30 @@ +import './style.scss'; +import clsx from 'clsx'; +import { type LocationInfo, MfaMethod } from '../../../../rust-api/types'; +import { mfaToText } from '../../../../utils/mfa'; +import { IconButton } from '../../../IconButton/IconButton'; +import { IconButtonVariant } from '../../../IconButton/types'; + +interface Props { + variant: 'compact' | 'full'; + location: LocationInfo; + onEdit: () => void; +} + +export const LocationCardMfaEdit = ({ location, onEdit, variant }: Props) => { + const mfaMethod = location.mfa_method ?? MfaMethod.Totp; + + return ( +
    +
    +

    MFA

    +
    +

    {mfaToText(mfaMethod)}

    + +
    + ); +}; diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/style.scss b/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/style.scss new file mode 100644 index 000000000..40864b8bb --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/style.scss @@ -0,0 +1,56 @@ +.location-card-mfa-edit { + &.variant- { + &full { + display: inline-flex; + flex-flow: row nowrap; + flex-grow: 0; + align-items: center; + justify-content: flex-start; + + .mfa-badge { + margin-right: var(--spacing-sm); + } + + .name { + margin-right: var(--spacing-md); + } + } + + &compact { + display: grid; + grid-template-columns: auto minmax(0, 1fr) 24px; + grid-template-rows: 1fr; + align-items: center; + column-gap: var(--spacing-md); + user-select: none; + } + } + + > .name { + font: var(--t-body-sm-400); + color: var(--fg-white-100); + } + + .mfa-badge { + border-radius: 4px; + box-sizing: border-box; + display: inline-flex; + flex-flow: row nowrap; + align-items: center; + justify-content: center; + padding: 0 4px; + min-height: 20px; + width: 36px; + background-color: transparent; + border: 1px solid var(--bg-white-60); + + p { + font: var(--font-family-body); + font-size: 11px; + font-weight: 500; + line-height: 16px; + letter-spacing: 0.11px; + color: var(--fg-white-60); + } + } +} diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts index fabfb5af4..f8834125f 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts @@ -2,9 +2,9 @@ import { useMutation, useQuery } from '@tanstack/react-query'; import { fetch } from '@tauri-apps/plugin-http'; import { error } from '@tauri-apps/plugin-log'; import { useCallback, useEffect, useRef, useState } from 'react'; +import type { EdgeRequestHeaders } from '../../../edge-api/types'; import { api } from '../../../rust-api/api'; import { getInstancesQueryOptions } from '../../../rust-api/query'; -import type { EdgeRequestHeaders } from '../../../rust-api/types'; import { CLIENT_MFA_ENDPOINT, type MfaStartMethod, diff --git a/new-ui/src/shared/components/LocationCard/style.scss b/new-ui/src/shared/components/LocationCard/style.scss index c8a68b129..0708b9347 100644 --- a/new-ui/src/shared/components/LocationCard/style.scss +++ b/new-ui/src/shared/components/LocationCard/style.scss @@ -22,53 +22,6 @@ } } - > .left { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - column-gap: var(--spacing-md); - - > .info { - display: flex; - flex-flow: column; - - .label { - font: var(--t-body-xs-400); - color: var(--fg-white-70); - } - - .location-name { - font: var(--t-body-primary-600); - color: var(--fg-white-100); - } - - > .bottom { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: flex-start; - column-gap: var(--spacing-sm); - } - - .online-badge { - display: inline-block; - box-sizing: border-box; - padding: 1px 4px; - border-radius: 4px; - background-color: #74ffb8; - - p { - font-family: var(--font-family-body); - font-size: 10px; - letter-spacing: 0.1px; - font-weight: 600; - color: #2f50c2; - } - } - } - } - > .right { margin-left: auto; } diff --git a/new-ui/src/shared/components/LocationCard/views/ConnectedView/ConnectedView.tsx b/new-ui/src/shared/components/LocationCard/views/ConnectedView/ConnectedView.tsx index 84ab3a929..c78de8a2b 100644 --- a/new-ui/src/shared/components/LocationCard/views/ConnectedView/ConnectedView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/ConnectedView/ConnectedView.tsx @@ -1,46 +1,16 @@ -import './style.scss'; -import { useQuery } from '@tanstack/react-query'; -import dayjs from 'dayjs'; -import { useEffect, useMemo } from 'react'; -import { api } from '../../../../rust-api/api'; -import { LocationMfaMode } from '../../../../rust-api/types'; +import { useEffect } from 'react'; import { ThemeSpacing } from '../../../../types'; -import { mfaToText } from '../../../../utils/mfa'; -import { BoxIcon } from '../../../BoxIcon/BoxIcon'; import { Divider } from '../../../Divider/Divider'; -import { Icon, IconKind } from '../../../Icon'; import { SizedBox } from '../../../SizedBox/SizedBox'; -import { ConnectButton } from '../../components/ConnectButton/ConnectButton'; -import { ConnectionChart } from '../../components/ConnectionChart/ConnectionChart'; +import { LocationCardConnectButton } from '../../components/LocationCardConnectButton'; +import { LocationCardConnectionInfo } from '../../components/LocationCardConnectionInfo/LocationCardConnectionInfo'; +import { LocationCardConnectionTiles } from '../../components/LocationCardConnectionTiles/LocationCardConnectionTiles'; import { useLocationCardContext } from '../../context/context'; import { LocationCardViews } from '../../context/types'; export const ConnectedView = () => { const { location, setView } = useLocationCardContext(); - // const { data: currentConnection } = useQuery({ - // queryKey: ['locations', location.id, 'connection'], - // queryFn: () => - // api.getActiveConnection({ - // connectionType: location.connection_type, - // locationId: location.id, - // }), - // }); - - const { data: lastConnection } = useQuery({ - queryKey: ['locations', location.id, 'last-connect'], - queryFn: () => - api.getLastConnection({ - connectionType: location.connection_type, - locationId: location.id, - }), - }); - - const lastConnectedText = useMemo(() => { - if (!lastConnection) return 'Never'; - return dayjs.utc(lastConnection.end).local().format('DD MMM YYYY'); - }, [lastConnection]); - // biome-ignore lint/correctness/useExhaustiveDependencies: side-effect useEffect(() => { if (!location.active) { @@ -51,44 +21,11 @@ export const ConnectedView = () => { return (
    -
    -
    - - - -

    Allowed traffic

    -

    - {location.route_all_traffic ? 'All traffic' : 'Predefined traffic'} -

    -
    - {location.location_mfa_mode !== LocationMfaMode.Disabled && ( -
    - - - -

    Active MFA

    -

    {mfaToText(location.mfa_method ?? 'totp')}

    -
    - )} -
    + -
    -
    -
    Last connected
    -
    {lastConnectedText}
    -
    -
    -
    Assigned IP
    -
    {location.address}
    -
    -
    - - + - +
    ); }; diff --git a/new-ui/src/shared/components/LocationCard/views/ConnectedView/style.scss b/new-ui/src/shared/components/LocationCard/views/ConnectedView/style.scss deleted file mode 100644 index 6b076ace8..000000000 --- a/new-ui/src/shared/components/LocationCard/views/ConnectedView/style.scss +++ /dev/null @@ -1,47 +0,0 @@ -.location-view-connected { - > .tiles { - display: grid; - grid-template-columns: repeat(2, 1fr); - column-gap: var(--spacing-md); - - > .tile { - background: var(--bg-white-5); - border-radius: 8px; - box-sizing: border-box; - padding: var(--spacing-sm) var(--spacing-md); - - > .box-icon { - margin-bottom: 13px; - } - - > .label { - font: var(--t-body-xxs-400); - color: var(--fg-white-50); - padding-bottom: var(--spacing-xs); - } - - > .label-value { - font: var(--t-body-xs-500); - } - } - } - - > .connection-info { - display: flex; - flex-flow: row nowrap; - align-items: flex-start; - justify-content: space-between; - - > .info { - > .label { - font: var(--t-body-xxs-400); - color: var(--fg-white-50); - padding-bottom: var(--spacing-xs); - } - - > .label-value { - font: var(--t-body-xs-500); - } - } - } -} diff --git a/new-ui/src/shared/components/LocationCard/views/DefaultView/DefaultView.tsx b/new-ui/src/shared/components/LocationCard/views/DefaultView/DefaultView.tsx index 0b5ce633e..46e5aaded 100644 --- a/new-ui/src/shared/components/LocationCard/views/DefaultView/DefaultView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/DefaultView/DefaultView.tsx @@ -1,4 +1,3 @@ -import './style.scss'; import { useMutation } from '@tanstack/react-query'; import { Fragment } from 'react/jsx-runtime'; import { api } from '../../../../rust-api/api'; @@ -8,13 +7,11 @@ import { MfaMethod, } from '../../../../rust-api/types'; import { ThemeSpacing } from '../../../../types'; -import { mfaToText } from '../../../../utils/mfa'; import { Divider } from '../../../Divider/Divider'; -import { IconButton } from '../../../IconButton/IconButton'; -import { IconButtonVariant } from '../../../IconButton/types'; import { SizedBox } from '../../../SizedBox/SizedBox'; import { Toggle } from '../../../Toggle/Toggle'; -import { ConnectButton } from '../../components/ConnectButton/ConnectButton'; +import { LocationCardConnectButton } from '../../components/LocationCardConnectButton'; +import { LocationCardMfaEdit } from '../../components/LocationCardMfaEdit/LocationCardMfaEdit'; import { useLocationCardContext } from '../../context/context'; import { LocationCardViews } from '../../context/types'; @@ -56,23 +53,17 @@ export const DefaultView = () => { {location.location_mfa_mode !== LocationMfaMode.Disabled && mfaMethod && ( -
    -
    -

    MFA

    -
    -

    {mfaToText(mfaMethod)}

    - { - setView(LocationCardViews.MfaSettings); - }} - /> -
    + { + setView(LocationCardViews.MfaSettings); + }} + />
    )} - +
    ); }; diff --git a/new-ui/src/shared/components/LocationCard/views/DefaultView/style.scss b/new-ui/src/shared/components/LocationCard/views/DefaultView/style.scss deleted file mode 100644 index 658c869b6..000000000 --- a/new-ui/src/shared/components/LocationCard/views/DefaultView/style.scss +++ /dev/null @@ -1,38 +0,0 @@ -.location-view-default { - .location-mfa-row { - display: grid; - grid-template-columns: auto minmax(0, 1fr) 24px; - grid-template-rows: 1fr; - align-items: center; - column-gap: var(--spacing-md); - user-select: none; - - > .name { - font: var(--t-body-sm-400); - color: var(--fg-white-100); - } - - .mfa-badge { - border-radius: 4px; - box-sizing: border-box; - display: inline-flex; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - padding: 0 4px; - min-height: 20px; - width: 36px; - background-color: transparent; - border: 1px solid var(--bg-white-60); - - p { - font: var(--font-family-body); - font-size: 11px; - font-weight: 500; - line-height: 16px; - letter-spacing: 0.11px; - color: var(--fg-white-60); - } - } - } -} diff --git a/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx new file mode 100644 index 000000000..bfc0f4886 --- /dev/null +++ b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx @@ -0,0 +1,70 @@ +import './style.scss'; + +import { useMutation } from '@tanstack/react-query'; +import clsx from 'clsx'; +import { useMemo } from 'react'; +import { api } from '../../rust-api/api'; +import type { LocationInfo } from '../../rust-api/types'; +import { ThemeSpacing } from '../../types'; +import { Divider } from '../Divider/Divider'; +import { ConnectButton } from '../LocationCard/components/ConnectButton/ConnectButton'; +import { LocationCardConnectionInfo } from '../LocationCard/components/LocationCardConnectionInfo/LocationCardConnectionInfo'; +import { LocationCardHeaderInfo } from '../LocationCard/components/LocationCardHeaderInfo/LocationCardHeaderInfo'; +import { LocationCardMfaEdit } from '../LocationCard/components/LocationCardMfaEdit/LocationCardMfaEdit'; +import { Toggle } from '../Toggle/Toggle'; + +interface Props { + location: LocationInfo; +} + +export const OverviewLocationCard = ({ location }: Props) => { + const { mutate: updateRouting } = useMutation({ + mutationFn: api.updateLocationRouting, + meta: { + invalidate: ['locations'], + }, + }); + + const traficLabel = useMemo(() => { + if (location.route_all_traffic) { + return 'All traffic is allowed'; + } else { + return 'Predefined traffic only'; + } + }, [location.route_all_traffic]); + + return ( +
    +
    + +
    + {}} /> +
    +
    + +
    + { + updateRouting({ + connectionType: location.connection_type, + locationId: location.id, + routeAllTraffic: !location.route_all_traffic, + }); + }} + /> + { + console.log('Edit'); + }} + /> +
    + + +
    + ); +}; diff --git a/new-ui/src/shared/components/OverviewLocationCard/style.scss b/new-ui/src/shared/components/OverviewLocationCard/style.scss new file mode 100644 index 000000000..a5d15ae04 --- /dev/null +++ b/new-ui/src/shared/components/OverviewLocationCard/style.scss @@ -0,0 +1,33 @@ +.overview-location-card { + width: 100%; + box-sizing: border-box; + padding: var(--spacing-lg) var(--spacing-md); + background: var(--c-saturated-dark-blue-20); + border-radius: 12px; + + > * { + width: 100%; + } + + > .header { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-md); + + > .right { + margin-left: auto; + } + + button { + min-height: 36px; + } + } + + > .controls { + display: flex; + flex-flow: row nowrap; + column-gap: var(--spacing-5xl); + } +} diff --git a/new-ui/src/shared/components/RadioIndicator/RadioIndicator.tsx b/new-ui/src/shared/components/RadioIndicator/RadioIndicator.tsx new file mode 100644 index 000000000..884942210 --- /dev/null +++ b/new-ui/src/shared/components/RadioIndicator/RadioIndicator.tsx @@ -0,0 +1,105 @@ +import './style.scss'; +import { useMemo } from 'react'; + +type Props = { + hover?: boolean; + active?: boolean; + disabled?: boolean; +}; + +export const RadioIndicator = ({ active, disabled, hover }: Props) => { + const RenderIcon = useMemo(() => { + if (active) { + if (disabled) { + return StateSelectedDisabled; + } + return StateSelected; + } + if (disabled) { + return StateDefaultDisabled; + } + if (hover) { + return StateDefaultHover; + } + return StateDefault; + }, [active, disabled, hover]); + + return ( +
    + +
    + ); +}; + +const StateDefault = () => { + return ( + + + + ); +}; + +const StateDefaultHover = () => { + return ( + + + + ); +}; + +const StateDefaultDisabled = () => { + return ( + + + + + ); +}; + +const StateSelected = () => { + return ( + + + + + ); +}; + +const StateSelectedDisabled = () => { + return ( + + + + + ); +}; diff --git a/new-ui/src/shared/components/RadioIndicator/style.scss b/new-ui/src/shared/components/RadioIndicator/style.scss new file mode 100644 index 000000000..08123f860 --- /dev/null +++ b/new-ui/src/shared/components/RadioIndicator/style.scss @@ -0,0 +1,55 @@ +.radio-indicator { + display: inline-flex; + flex-flow: row; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; +} + +.radio-indicator svg { + &.icon-default { + circle { + stroke: var(--fg-white-100); + fill: transparent; + } + } + + &.icon-hover { + circle { + stroke: var(--fg-white-100); + fill: transparent; + } + } + + &.icon-disabled { + circle { + stroke: var(--border-disabled); + fill: var(--bg-white-5); + } + } + + &.icon-selected { + circle { + &:nth-child(1) { + fill: var(--fg-white-100); + } + + &:nth-child(2) { + fill: var(--fg-action); + } + } + } + + &.icon-selected-disabled { + circle { + &:nth-child(1) { + fill: var(--bg-white-10); + } + + &:nth-child(2) { + fill: var(--bg-white-60); + } + } + } +} diff --git a/new-ui/src/shared/components/ScrollContainer/ScrollContainer.tsx b/new-ui/src/shared/components/ScrollContainer/ScrollContainer.tsx new file mode 100644 index 000000000..602936605 --- /dev/null +++ b/new-ui/src/shared/components/ScrollContainer/ScrollContainer.tsx @@ -0,0 +1,18 @@ +import './style.scss'; +import { platform } from '@tauri-apps/plugin-os'; +import clsx from 'clsx'; +import type { PropsWithChildren } from 'react'; + +const isWindows = platform() === 'windows'; + +export const ScrollContainer = ({ children }: PropsWithChildren) => { + return ( +
    + {children} +
    + ); +}; diff --git a/new-ui/src/shared/components/ScrollContainer/style.scss b/new-ui/src/shared/components/ScrollContainer/style.scss new file mode 100644 index 000000000..6a8248041 --- /dev/null +++ b/new-ui/src/shared/components/ScrollContainer/style.scss @@ -0,0 +1,13 @@ +.scroll-container { + display: flex; + flex-flow: column; + flex: 1 1 auto; + overflow-y: auto; + min-height: 0; + + &.windows { + scrollbar-gutter: stable; + overflow-y: scroll; + padding-right: 6px; + } +} diff --git a/new-ui/src/shared/components/Timer/Timer.tsx b/new-ui/src/shared/components/Timer/Timer.tsx new file mode 100644 index 000000000..d8cf2fbe1 --- /dev/null +++ b/new-ui/src/shared/components/Timer/Timer.tsx @@ -0,0 +1,42 @@ +import './style.scss'; +import dayjs from 'dayjs'; +import { useEffect, useState } from 'react'; +import { interval, type Subscription } from 'rxjs'; +import { ThemeVariable } from '../../types'; +import { formatDuration } from '../../utils/formatDuration'; +import { Icon, IconKind } from '../Icon'; +import type { TimerProps } from './types'; + +function formatTimeLeft(deadline: string): string | null { + const diff = dayjs(deadline).diff(dayjs()); + if (diff <= 0) return null; + return formatDuration(dayjs.duration(diff)); +} + +export const Timer = ({ deadline }: TimerProps) => { + const [timeLeft, setTimeLeft] = useState(() => formatTimeLeft(deadline)); + + useEffect(() => { + setTimeLeft(formatTimeLeft(deadline)); + + const diff = dayjs(deadline).diff(dayjs.utc()); + if (diff <= 0) return; + + const sub: Subscription = interval(1_000).subscribe(() => { + const label = formatTimeLeft(deadline); + setTimeLeft(label); + if (!label) sub.unsubscribe(); + }); + + return () => sub.unsubscribe(); + }, [deadline]); + + if (!timeLeft) return null; + + return ( +
    + +

    {`Time left: ${timeLeft}`}

    +
    + ); +}; diff --git a/new-ui/src/shared/components/Timer/style.scss b/new-ui/src/shared/components/Timer/style.scss new file mode 100644 index 000000000..b1b8e5266 --- /dev/null +++ b/new-ui/src/shared/components/Timer/style.scss @@ -0,0 +1,14 @@ +.timer { + display: inline-flex; + flex-flow: row nowrap; + column-gap: var(--spacing-sm); + align-items: center; + justify-content: center; + user-select: none; + pointer-events: none; + + p { + font: var(--t-body-xxs-400); + color: var(--fg-white-60); + } +} diff --git a/new-ui/src/shared/components/Timer/types.ts b/new-ui/src/shared/components/Timer/types.ts new file mode 100644 index 000000000..980036961 --- /dev/null +++ b/new-ui/src/shared/components/Timer/types.ts @@ -0,0 +1,3 @@ +export interface TimerProps { + deadline: string; +} diff --git a/new-ui/src/shared/components/Tooltip/Tooltip.tsx b/new-ui/src/shared/components/Tooltip/Tooltip.tsx new file mode 100644 index 000000000..f80a508ae --- /dev/null +++ b/new-ui/src/shared/components/Tooltip/Tooltip.tsx @@ -0,0 +1,29 @@ +import './style.scss'; +import clsx from 'clsx'; +import { type MotionProps, motion } from 'motion/react'; +import type { HTMLProps, PropsWithChildren, Ref } from 'react'; +import { motionTransitionStandard } from '../../consts'; + +export const Tooltip = ({ + ref, + children, + className, + ...rest +}: PropsWithChildren & { + ref?: Ref; +} & HTMLProps & + MotionProps) => { + return ( + + {children} + + ); +}; diff --git a/new-ui/src/shared/components/Tooltip/style.scss b/new-ui/src/shared/components/Tooltip/style.scss new file mode 100644 index 000000000..1e8a084d4 --- /dev/null +++ b/new-ui/src/shared/components/Tooltip/style.scss @@ -0,0 +1,20 @@ +.tooltip { + --background: var(--bg-white-100); + --border: 1px solid var(--background); + + box-sizing: border-box; + padding: var(--spacing-sm) var(--spacing-md); + z-index: 5; + background-color: var(--background); + max-width: 250px; + box-shadow: var(--menu-shadow); + border: var(--border); + border-radius: 8px; + + span, + p, + a { + font: var(--t-body-xs-400); + color: var(--fg-black); + } +} diff --git a/new-ui/src/shared/components/TooltipButton/TooltipButton.tsx b/new-ui/src/shared/components/TooltipButton/TooltipButton.tsx new file mode 100644 index 000000000..c6af97f15 --- /dev/null +++ b/new-ui/src/shared/components/TooltipButton/TooltipButton.tsx @@ -0,0 +1,73 @@ +import { + autoUpdate, + FloatingPortal, + offset, + shift, + useFloating, +} from '@floating-ui/react'; +import { Fragment, useEffect, useMemo, useState } from 'react'; +import type { Subject } from 'rxjs'; +import { Button } from '../Button/Button'; +import type { ButtonProps } from '../Button/types'; +import { Tooltip } from '../Tooltip/Tooltip'; + +interface Props { + tooltipText: string; + buttonProps: ButtonProps; + tooltipTimeout?: number; + tooltipTrigger?: Subject; +} + +export const TooltipButton = ({ + buttonProps, + tooltipText, + tooltipTrigger, + tooltipTimeout = 1_500, +}: Props) => { + const [tooltipVisible, setTooltipVisible] = useState(false); + + const { refs, floatingStyles } = useFloating({ + placement: 'top', + whileElementsMounted: autoUpdate, + middleware: [offset(15), shift({ padding: 4 })], + open: tooltipVisible, + onOpenChange: setTooltipVisible, + }); + + useEffect(() => { + if (!tooltipTrigger) return; + const sub = tooltipTrigger.subscribe(() => setTooltipVisible(true)); + return () => sub.unsubscribe(); + }, [tooltipTrigger]); + + useEffect(() => { + if (!tooltipVisible) return; + const timeout = setTimeout(() => setTooltipVisible(false), tooltipTimeout); + return () => clearTimeout(timeout); + }, [tooltipVisible, tooltipTimeout]); + + const referenceProps = useMemo((): ButtonProps => { + const base: ButtonProps = { ...buttonProps, ref: refs.setReference }; + if (tooltipTrigger) return base; + return { + ...base, + onClick: (e) => { + buttonProps.onClick?.(e); + setTooltipVisible(true); + }, + }; + }, [buttonProps, refs.setReference, tooltipTrigger]); + + return ( + + - )} -
    -
    - - - {selection?.kind === 'instance' && } - -
    - -
    - {displayedLocations.map((location) => ( - - ))} -
    - + + +
    + +
    + +
    +

    {`Locations (${displayedLocations.length})`}

    + {/* {selection?.kind === 'instance' && ( + + )} */} +
    +
    + + + {selection?.kind === 'instance' && ( + + )} + +
    + +
    + {displayedLocations.map((location) => { + let instance: InstanceInfo | undefined; + if (selection?.kind === 'instance') { + instance = selection.data; + } + return ( + + ); + })} +
    +
    +
    -
    - + + + ); }; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/ConnectModal.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/ConnectModal.tsx new file mode 100644 index 000000000..b37770eee --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/ConnectModal.tsx @@ -0,0 +1,85 @@ +/** biome-ignore-all lint/style/noNonNullAssertion: query ensured by enabled flag */ +import './style.scss'; + +import { useQuery } from '@tanstack/react-query'; +import { type ReactNode, useEffect } from 'react'; +import { useShallow } from 'zustand/shallow'; +import { Modal } from '../../../../../shared/components/Modal/Modal'; +import { api } from '../../../../../shared/rust-api/api'; +import { isPresent } from '../../../../../shared/utils/isPresent'; +import { + ConnectModalTitle, + ConnectModalView, + type ConnectModalViewValue, +} from './hooks/types'; +import { useConnectModal } from './hooks/useConnectModal'; +import { ConnectModalMfaEmail } from './views/ConnectModalMfaEmail/ConnectModalMfaEmail'; +import { ConnectModalMfaMobile } from './views/ConnectModalMfaMobile/ConnectModalMfaMobile'; +import { ConnectModalMfaOidc } from './views/ConnectModalMfaOidc/ConnectModalMfaOidc'; +import { ConnectModalMfaSettings } from './views/ConnectModalMfaSettings/ConnectModalMfaSettings'; +import { ConnectModalMfaTotp } from './views/ConnectModalMfaTotp/ConnectModalMfaTotp'; +import { ConnectModalPostureCheckFail } from './views/ConnectModalPostureCheckFail/ConnectModalPostureCheckFail'; + +export const ConnectModal = () => { + const reset = useConnectModal((s) => s.reset); + + const [view, visible, location] = useConnectModal( + useShallow((s) => [s.view, s.visible, s.location]), + ); + + const isOpen = isPresent(view) && isPresent(location) && visible; + + return ( + { + reset(); + }} + onClose={() => { + useConnectModal.setState({ + visible: false, + }); + }} + > + + + ); +}; + +const viewContent: Record = { + [ConnectModalView.MfaTotp]: , + [ConnectModalView.MfaEmail]: , + [ConnectModalView.MfaOidc]: , + [ConnectModalView.MfaMobile]: , + [ConnectModalView.MfaSettings]: , + [ConnectModalView.PostureCheckFail]: , +} as const; + +const ModalContent = () => { + const storeLocation = useConnectModal((s) => s.location); + const { data: activeConnection, isFetching } = useQuery({ + queryKey: ['active-connection', storeLocation?.id, storeLocation?.connection_type], + queryFn: () => + api.getActiveConnection({ + locationId: storeLocation!.id, + connectionType: storeLocation!.connection_type, + }), + enabled: isPresent(storeLocation), + retry: false, + }); + const activeView = useConnectModal((s) => s.view); + + // When user completes connection and it's working modal is no longer needed so auto close it + useEffect(() => { + if (!isFetching && isPresent(activeConnection)) { + useConnectModal.setState({ visible: false }); + } + }, [activeConnection, isFetching]); + + if (!activeView) return null; + + return viewContent[activeView]; +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/types.ts b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/types.ts new file mode 100644 index 000000000..4077a41ff --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/types.ts @@ -0,0 +1,20 @@ +export const ConnectModalView = { + MfaTotp: 'mfa-totp', + MfaEmail: 'mfa-email', + MfaOidc: 'mfa-oidc', + MfaMobile: 'mfa-mobile', + MfaSettings: 'mfa-settings', + PostureCheckFail: 'posture-check-fail', +} as const; + +export const ConnectModalTitle: Record = { + [ConnectModalView.MfaTotp]: 'Two-factor authentication', + [ConnectModalView.MfaEmail]: 'Two-factor authentication', + [ConnectModalView.MfaOidc]: 'Two-factor authentication', + [ConnectModalView.MfaMobile]: 'Two-factor authentication', + [ConnectModalView.MfaSettings]: 'Change MFA Method', + [ConnectModalView.PostureCheckFail]: 'Access denied', +} as const; + +export type ConnectModalViewValue = + (typeof ConnectModalView)[keyof typeof ConnectModalView]; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModal.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModal.tsx new file mode 100644 index 000000000..fd6d8a835 --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModal.tsx @@ -0,0 +1,43 @@ +import { create } from 'zustand'; +import type { LocationInfo } from '../../../../../../shared/rust-api/types'; +import type { ConnectModalViewValue } from './types'; + +interface StoreValues { + visible: boolean; + location: LocationInfo | null; + view: ConnectModalViewValue | null; + perviousView: ConnectModalViewValue | null; + postureError: string | null; +} + +const defaults: StoreValues = { + visible: false, + location: null, + view: null, + perviousView: null, + postureError: null, +} as const; + +interface Store extends StoreValues { + open: (init?: Partial) => void; + setView: (view: ConnectModalViewValue, values?: Partial) => void; + reset: () => void; +} + +export const useConnectModal = create((set, get) => ({ + ...defaults, + reset: () => { + set(defaults); + }, + open: (init) => { + set({ ...defaults, ...init, visible: true }); + }, + setView: (view, vals) => { + const pervious = get().view ?? null; + if (vals) { + set({ ...vals, view, perviousView: pervious }); + } else { + set({ view, perviousView: pervious }); + } + }, +})); diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModalMfaOidc.ts b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModalMfaOidc.ts new file mode 100644 index 000000000..9c352a9bf --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModalMfaOidc.ts @@ -0,0 +1,162 @@ +import { useMutation, useQuery } from '@tanstack/react-query'; +import { fetch } from '@tauri-apps/plugin-http'; +import { error } from '@tauri-apps/plugin-log'; +import { useCallback, useEffect, useRef, useState } from 'react'; +import { useShallow } from 'zustand/shallow'; +import { + CLIENT_MFA_ENDPOINT, + MfaStartMethod, + shouldShowPostureError, + startClientMfaSession, +} from '../../../../../../shared/components/LocationCard/api/startClientMfaSession'; +import { api } from '../../../../../../shared/rust-api/api'; +import { getInstancesQueryOptions } from '../../../../../../shared/rust-api/query'; +import { useConnectModal } from './useConnectModal'; + +const POLL_INTERVAL_MS = 5_000; +const POLL_TIMEOUT_MS = 5 * 60 * 1_000; + +type MfaFinishResponse = { preshared_key: string }; +type MfaErrorResponse = { error: string }; + +type Options = { + onPostureError?: () => void; + onSessionExpired?: () => void; +}; + +export const useConnectModalMfaOidc = ({ + onPostureError, + onSessionExpired, +}: Options = {}) => { + const location = useConnectModal(useShallow((s) => s.location)); + + const [isStarting, setIsStarting] = useState(false); + const [startError, setStartError] = useState(null); + const [isPolling, setIsPolling] = useState(false); + const [pollError, setPollError] = useState(null); + + const { data: instances } = useQuery(getInstancesQueryOptions); + const instance = instances?.find((i) => i.id === location?.instance_id); + + const intervalRef = useRef | null>(null); + const timeoutRef = useRef | null>(null); + + const { mutate: connectMutate } = useMutation({ + mutationFn: api.connect, + onError: (err) => { + error(`Connect command failed after successful OIDC MFA\n${err}`); + setPollError('Failed to establish VPN connection'); + }, + }); + + const stopPolling = useCallback(() => { + if (intervalRef.current !== null) { + clearInterval(intervalRef.current); + intervalRef.current = null; + } + if (timeoutRef.current !== null) { + clearTimeout(timeoutRef.current); + timeoutRef.current = null; + } + }, []); + + useEffect(() => { + return () => { + stopPolling(); + }; + }, [stopPolling]); + + const startPolling = useCallback( + (token: string, proxyUrl: string, headers: Record) => { + if (!location) return; + + setIsPolling(true); + setPollError(null); + + const poll = async () => { + try { + const res = await fetch(`${proxyUrl}${CLIENT_MFA_ENDPOINT}/finish`, { + method: 'POST', + headers: { 'Content-Type': 'application/json', ...headers }, + body: JSON.stringify({ token }), + }); + + if (res.ok) { + stopPolling(); + setIsPolling(false); + const data = (await res.json()) as MfaFinishResponse; + connectMutate({ + locationId: location.id, + connectionType: location.connection_type, + presharedKey: data.preshared_key, + }); + return; + } + + if (res.status === 428) return; + + stopPolling(); + setIsPolling(false); + const data = (await res.json()) as MfaErrorResponse; + const msg = data.error; + if (msg === 'invalid token' || msg === 'login session not found') { + onSessionExpired?.(); + } else { + setPollError('Authentication failed. Please try again.'); + } + error(`OIDC MFA poll failed for location ${location.id}: ${msg}`); + } catch (e) { + stopPolling(); + setIsPolling(false); + setPollError('Failed to reach server. Please try again.'); + error(`OIDC MFA poll network error for location ${location.id}: ${e}`); + } + }; + + intervalRef.current = setInterval(poll, POLL_INTERVAL_MS); + + timeoutRef.current = setTimeout(() => { + stopPolling(); + setIsPolling(false); + setPollError('Authentication timed out. Please try again.'); + error(`OIDC MFA timed out for location ${location.id}`); + }, POLL_TIMEOUT_MS); + }, + [location, connectMutate, stopPolling, onSessionExpired], + ); + + const start = useCallback(async () => { + if (!instance || !location) { + setStartError('Instance not found'); + return; + } + + setIsStarting(true); + setStartError(null); + setPollError(null); + stopPolling(); + + try { + const { response, headers } = await startClientMfaSession({ + instance, + location, + method: MfaStartMethod.Oidc, + }); + await api.openLink(`${instance.proxy_url}openid/mfa?token=${response.token}`); + startPolling(response.token, instance.proxy_url, headers); + } catch (e) { + if (shouldShowPostureError(e, location)) { + onPostureError?.(); + return; + } + setStartError( + e instanceof Error ? e.message : 'Failed to start OIDC authentication', + ); + error(`OIDC MFA start network error for location ${location.id}: ${e}`); + } finally { + setIsStarting(false); + } + }, [instance, location, startPolling, stopPolling, onPostureError]); + + return { start, isStarting, startError, isPolling, pollError }; +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/style.scss b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/style.scss new file mode 100644 index 000000000..844e9a1ce --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/style.scss @@ -0,0 +1,13 @@ +#connect-modal { + .view-description { + font: var(--t-body-xs-400); + color: var(--fg-white-70); + padding-bottom: var(--spacing-xl); + } + + .controls { + .full { + width: 100%; + } + } +} diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx new file mode 100644 index 000000000..756c4c26f --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx @@ -0,0 +1,98 @@ +import { useCallback, useEffect, useState } from 'react'; +import { useShallow } from 'zustand/shallow'; +import { Button } from '../../../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../../../shared/components/Button/types'; +import { CodeInput } from '../../../../../../../shared/components/CodeInput/CodeInput'; +import { Controls } from '../../../../../../../shared/components/Controls/Controls'; +import { IconKind } from '../../../../../../../shared/components/Icon'; +import { IconButton } from '../../../../../../../shared/components/IconButton/IconButton'; +import { IconButtonVariant } from '../../../../../../../shared/components/IconButton/types'; +import { MfaStartMethod } from '../../../../../../../shared/components/LocationCard/api/startClientMfaSession'; +import { useMfaConnect } from '../../../../../../../shared/components/LocationCard/hooks/useMfaConnect'; +import type { LocationInfo } from '../../../../../../../shared/rust-api/types'; +import { isPresent } from '../../../../../../../shared/utils/isPresent'; +import { ConnectModalView } from '../../hooks/types'; +import { useConnectModal } from '../../hooks/useConnectModal'; + +const MIN_POSTURE_LOADER_MS = 500; + +export const ConnectModalMfaEmail = () => { + const [perviousView, location] = useConnectModal( + useShallow((s) => [s.perviousView, s.location]), + ); + + const { verifyCode, isVerifying, verifyError, isStarting, startError } = useMfaConnect( + location as LocationInfo, + MfaStartMethod.Email, + { + debounceMs: location?.posture_check_required ? MIN_POSTURE_LOADER_MS : 0, + onSessionExpired: () => + useConnectModal.getState().setView(perviousView ?? ConnectModalView.MfaSettings), + onPostureError: () => + useConnectModal.getState().setView(ConnectModalView.PostureCheckFail), + }, + ); + + const [emailCode, setEmailCode] = useState(null); + const [error, setError] = useState(null); + + const handleVerify = useCallback(() => { + if (!isPresent(emailCode)) { + setError('Enter code'); + return; + } + if (emailCode.length !== 6) { + setError('6 digits are required'); + return; + } + verifyCode(emailCode); + }, [emailCode, verifyCode]); + + // biome-ignore lint/correctness/useExhaustiveDependencies: side effect of code input + useEffect(() => { + setError(null); + }, [emailCode, setError]); + + useEffect(() => { + if (verifyError) setError(verifyError); + }, [verifyError]); + + return ( +
    { + if (e.key === 'Enter') handleVerify(); + }} + > +

    + Enter the 6-digit code sent to your email address. +

    + + + + useConnectModal + .getState() + .setView(perviousView ?? ConnectModalView.MfaSettings) + } + /> +
    +
    +
    +
    + ); +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaMobile/ConnectModalMfaMobile.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaMobile/ConnectModalMfaMobile.tsx new file mode 100644 index 000000000..afd35df2a --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaMobile/ConnectModalMfaMobile.tsx @@ -0,0 +1,70 @@ +import './style.scss'; +import { useEffect, useRef, useState } from 'react'; +import { useShallow } from 'zustand/shallow'; +import { Button } from '../../../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../../../shared/components/Controls/Controls'; +import { useMfaMobileConnect } from '../../../../../../../shared/components/LocationCard/hooks/useMfaMobileConnect'; +import { QrCard } from '../../../../../../../shared/components/QrCard/QrCard'; +import type { LocationInfo } from '../../../../../../../shared/rust-api/types'; +import { ConnectModalView } from '../../hooks/types'; +import { useConnectModal } from '../../hooks/useConnectModal'; + +type Screen = 'loading' | 'qr' | 'error'; + +export const ConnectModalMfaMobile = () => { + const [_perviousView, location] = useConnectModal( + useShallow((s) => [s.perviousView, s.location]), + ); + + const { start, isStarting, startError, qrValue, connectionError } = useMfaMobileConnect( + location as LocationInfo, + { + onPostureError: () => + useConnectModal.getState().setView(ConnectModalView.PostureCheckFail), + }, + ); + + const [screen, setScreen] = useState('loading'); + const startedRef = useRef(false); + + useEffect(() => { + if (startedRef.current) return; + startedRef.current = true; + void start(); + }, [start]); + + useEffect(() => { + if (isStarting) { + setScreen('loading'); + } else if (startError ?? connectionError) { + setScreen('error'); + } else if (qrValue) { + setScreen('qr'); + } + }, [isStarting, startError, connectionError, qrValue]); + + const errorMessage = startError ?? connectionError; + + return ( +
    +

    + {screen === 'loading' && 'Preparing authentication...'} + {screen === 'qr' && 'Open your Defguard mobile app and scan the QR code below.'} + {screen === 'error' && {errorMessage}} +

    + {screen === 'qr' && qrValue && ( +
    + +
    + )} + +
    + {screen === 'error' && ( +
    +
    +
    + ); +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaMobile/style.scss b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaMobile/style.scss new file mode 100644 index 000000000..1e5fedeeb --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaMobile/style.scss @@ -0,0 +1,9 @@ +#mfa-mobile-view { + .qr-track { + display: flex; + flex-flow: row; + align-items: center; + justify-content: center; + width: 100%; + } +} diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/ConnectModalMfaOidc.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/ConnectModalMfaOidc.tsx new file mode 100644 index 000000000..6c69b75ad --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/ConnectModalMfaOidc.tsx @@ -0,0 +1,74 @@ +import { useEffect, useState } from 'react'; +import { useShallow } from 'zustand/shallow'; +import { Button } from '../../../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../../../shared/components/Controls/Controls'; +import { ConnectModalView } from '../../hooks/types'; +import { useConnectModal } from '../../hooks/useConnectModal'; +import { useConnectModalMfaOidc } from '../../hooks/useConnectModalMfaOidc'; + +type Screen = 'idle' | 'polling' | 'error'; + +export const ConnectModalMfaOidc = () => { + const perviousView = useConnectModal(useShallow((s) => s.perviousView)); + + const { start, isStarting, startError, isPolling, pollError } = useConnectModalMfaOidc({ + onSessionExpired: () => + useConnectModal.getState().setView(perviousView ?? ConnectModalView.MfaSettings), + onPostureError: () => + useConnectModal.getState().setView(ConnectModalView.PostureCheckFail), + }); + + const [screen, setScreen] = useState('idle'); + + useEffect(() => { + if (startError ?? pollError) { + setScreen((prev) => (prev !== 'idle' ? 'error' : prev)); + } else if (isPolling) { + setScreen('polling'); + } + }, [startError, pollError, isPolling]); + + const handleStart = async () => { + await start(); + setScreen('polling'); + }; + + const errorMessage = startError ?? pollError; + + return ( +
    + {screen === 'idle' && ( +

    + To connect to the VPN, authenticate via your OpenID provider. A browser window + will open for you to sign in. +

    + )} + {screen === 'polling' && ( +

    + Complete the sign-in in your browser. This page will update automatically. +

    + )} + {screen === 'error' &&

    {errorMessage}

    } + +
    + {screen !== 'error' && ( +
    +
    +
    + ); +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/ConnectModalMfaSettings.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/ConnectModalMfaSettings.tsx new file mode 100644 index 000000000..6ca736e7a --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/ConnectModalMfaSettings.tsx @@ -0,0 +1,114 @@ +import './style.scss'; +import { useMutation } from '@tanstack/react-query'; +import { Fragment, useMemo, useState } from 'react'; +import { useShallow } from 'zustand/shallow'; +import { Button } from '../../../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../../../shared/components/Button/types'; +import { Checkbox } from '../../../../../../../shared/components/Checkbox/Checkbox'; +import { Controls } from '../../../../../../../shared/components/Controls/Controls'; +import { IconKind } from '../../../../../../../shared/components/Icon'; +import { IconButton } from '../../../../../../../shared/components/IconButton/IconButton'; +import { IconButtonVariant } from '../../../../../../../shared/components/IconButton/types'; +import { MfaSelector } from '../../../../../../../shared/components/LocationCard/components/MfaSelector/MfaSelector'; +import { SizedBox } from '../../../../../../../shared/components/SizedBox/SizedBox'; +import { api } from '../../../../../../../shared/rust-api/api'; +import { + LocationMfaMode, + MfaMethod, + type MfaMethodValue, +} from '../../../../../../../shared/rust-api/types'; +import { ThemeSpacing } from '../../../../../../../shared/types'; +import { useConnectModal } from '../../hooks/useConnectModal'; + +export const ConnectModalMfaSettings = () => { + const { mutate: setMfaMethod } = useMutation({ + mutationFn: api.setLocationMfaMethod, + meta: { invalidate: [['locations']] }, + }); + + const [perviousView, location] = useConnectModal( + useShallow((s) => [s.perviousView, s.location]), + ); + + const locationDefaultMfaMethod = location?.mfa_method ?? MfaMethod.Totp; + + const [selectedMethod, setSelectedMethod] = useState( + location?.mfa_method ?? MfaMethod.Totp, + ); + const [setAsDefault, setSetAsDefault] = useState(true); + + const MfaFactorsList = useMemo((): MfaMethodValue[] => { + if (location?.location_mfa_mode === LocationMfaMode.Internal) { + return [MfaMethod.Totp, MfaMethod.Email, MfaMethod.MobileApprove]; + } + return [MfaMethod.Oidc]; + }, [location?.location_mfa_mode]); + + const handleSubmit = () => { + if (setAsDefault && selectedMethod !== locationDefaultMfaMethod && location) { + setMfaMethod({ locationId: location.id, mfaMethod: selectedMethod }); + } + if (perviousView === null) { + useConnectModal.setState({ visible: false }); + } else { + useConnectModal.getState().setView(perviousView); + } + }; + + return ( +
    + {perviousView !== null && ( +

    + If you're having issues with your current verification method, you can choose + another one or set a new default. +

    + )} + {perviousView === null && ( +

    + {`You can change the MFA method for a one-time login or set a new default method.`} +

    + )} +
    + {MfaFactorsList.map((factor) => ( + setSelectedMethod(factor)} + /> + ))} +
    + {perviousView !== null && ( + + + setSetAsDefault((prev) => !prev)} + text="Set as default MFA method" + /> + + + )} + {perviousView === null && } + + {perviousView !== null && ( + useConnectModal.getState().setView(perviousView)} + /> + )} +
    +
    +
    +
    + ); +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/style.scss b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/style.scss new file mode 100644 index 000000000..9d4647d5a --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/style.scss @@ -0,0 +1,11 @@ +.modal > .modal-content #mfa-settings-view { + .methods { + display: flex; + flex-flow: column; + row-gap: var(--spacing-md); + } + + .controls { + padding-top: 0; + } +} diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx new file mode 100644 index 000000000..9e51717d4 --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx @@ -0,0 +1,99 @@ +import { useCallback, useEffect, useState } from 'react'; +import { useShallow } from 'zustand/shallow'; +import { Button } from '../../../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../../../shared/components/Button/types'; +import { CodeInput } from '../../../../../../../shared/components/CodeInput/CodeInput'; +import { Controls } from '../../../../../../../shared/components/Controls/Controls'; +import { IconKind } from '../../../../../../../shared/components/Icon'; +import { IconButton } from '../../../../../../../shared/components/IconButton/IconButton'; +import { IconButtonVariant } from '../../../../../../../shared/components/IconButton/types'; +import { MfaStartMethod } from '../../../../../../../shared/components/LocationCard/api/startClientMfaSession'; +import { useMfaConnect } from '../../../../../../../shared/components/LocationCard/hooks/useMfaConnect'; +import type { LocationInfo } from '../../../../../../../shared/rust-api/types'; +import { isPresent } from '../../../../../../../shared/utils/isPresent'; +import { ConnectModalView } from '../../hooks/types'; +import { useConnectModal } from '../../hooks/useConnectModal'; + +const MIN_POSTURE_LOADER_MS = 500; + +export const ConnectModalMfaTotp = () => { + const [perviousView, location] = useConnectModal( + useShallow((s) => [s.perviousView, s.location]), + ); + + const { verifyCode, isVerifying, verifyError, isStarting, startError } = useMfaConnect( + location as LocationInfo, + MfaStartMethod.Totp, + { + debounceMs: location?.posture_check_required ? MIN_POSTURE_LOADER_MS : 0, + onSessionExpired: () => + useConnectModal.getState().setView(perviousView ?? ConnectModalView.MfaSettings), + onPostureError: () => + useConnectModal.getState().setView(ConnectModalView.PostureCheckFail), + }, + ); + + const [totpCode, setTotpCode] = useState(null); + const [error, setError] = useState(null); + + const handleVerify = useCallback(() => { + if (!isPresent(totpCode)) { + setError('Enter code'); + return; + } + if (totpCode.replaceAll(' ', '').length !== 6) { + setError('6 digits are required'); + return; + } + verifyCode(totpCode); + }, [totpCode, verifyCode]); + + // biome-ignore lint/correctness/useExhaustiveDependencies: side effect of code input + useEffect(() => { + setError(null); + }, [totpCode, setError]); + + useEffect(() => { + if (verifyError) setError(verifyError); + }, [verifyError]); + + return ( +
    { + if (e.key === 'Enter') handleVerify(); + }} + > +

    + Paste the code from your Authenticator Application. +

    + + + + useConnectModal + .getState() + .setView(perviousView ?? ConnectModalView.MfaSettings) + } + /> +
    +
    +
    +
    + ); +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalPostureCheckFail/ConnectModalPostureCheckFail.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalPostureCheckFail/ConnectModalPostureCheckFail.tsx new file mode 100644 index 000000000..2bdbf0035 --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalPostureCheckFail/ConnectModalPostureCheckFail.tsx @@ -0,0 +1,50 @@ +import './style.scss'; +import { useMemo } from 'react'; +import { Button } from '../../../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../../../shared/components/Controls/Controls'; +import { LocationViewHeader } from '../../../../../../../shared/components/LocationCard/components/LocationViewHeader/LocationViewHeader'; +import { NoConnectionIcon } from '../../../../../../../shared/components/LocationCard/images/NoConnectionIcon'; +import { SizedBox } from '../../../../../../../shared/components/SizedBox/SizedBox'; +import { ThemeSpacing } from '../../../../../../../shared/types'; +import { useConnectModal } from '../../hooks/useConnectModal'; + +export const ConnectModalPostureCheckFail = () => { + const postureError = useConnectModal((s) => s.postureError); + + const postureErrors = useMemo(() => { + if (!postureError) return ['Your device did not pass posture check.']; + return postureError + .split(',') + .map((e) => e.trim()) + .filter(Boolean); + }, [postureError]); + + const close = () => useConnectModal.setState({ visible: false }); + + return ( +
    + + + + +
    + {postureErrors.map((error) => ( +

    + {error} +

    + ))} +
    +
    + + +
    + ); +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalPostureCheckFail/style.scss b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalPostureCheckFail/style.scss new file mode 100644 index 000000000..282119c80 --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalPostureCheckFail/style.scss @@ -0,0 +1,29 @@ +#posture-check-fail-view { + display: flex; + flex-direction: column; + align-items: center; + + .location-card-view-header { + align-items: center; + row-gap: var(--spacing-sm); + text-align: center; + + > .title { + font: var(--t-body-sm-600); + color: var(--fg-white-100); + } + + .posture-errors { + display: flex; + flex-direction: column; + align-items: center; + gap: var(--spacing-xs); + } + + p.error { + margin: 0; + font: var(--t-body-xs-400); + color: var(--fg-white-70); + } + } +} diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/LocationCardConnectionTiles.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/LocationCardConnectionTiles.tsx index 7bce86e0e..ac47d9324 100644 --- a/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/LocationCardConnectionTiles.tsx +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/LocationCardConnectionTiles.tsx @@ -1,3 +1,4 @@ +import './style.scss'; import clsx from 'clsx'; import { type LocationInfo, LocationMfaMode } from '../../../../rust-api/types'; import { mfaToText } from '../../../../utils/mfa'; diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/LocationCardMfaEdit.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/LocationCardMfaEdit.tsx index 7b8189088..b2ead6c68 100644 --- a/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/LocationCardMfaEdit.tsx +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/LocationCardMfaEdit.tsx @@ -14,17 +14,21 @@ interface Props { export const LocationCardMfaEdit = ({ location, onEdit, variant }: Props) => { const mfaMethod = location.mfa_method ?? MfaMethod.Totp; + if (location.location_mfa_mode === 'disabled') return null; + return (

    MFA

    {mfaToText(mfaMethod)}

    - + {location.location_mfa_mode === 'internal' && ( + + )}
    ); }; diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/style.scss b/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/style.scss index 40864b8bb..4a8d1319f 100644 --- a/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/style.scss +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/style.scss @@ -1,4 +1,6 @@ .location-card-mfa-edit { + user-select: none; + &.variant- { &full { display: inline-flex; diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts index f8834125f..97be47dbe 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts @@ -5,14 +5,13 @@ import { useCallback, useEffect, useRef, useState } from 'react'; import type { EdgeRequestHeaders } from '../../../edge-api/types'; import { api } from '../../../rust-api/api'; import { getInstancesQueryOptions } from '../../../rust-api/query'; +import type { LocationInfo } from '../../../rust-api/types'; import { CLIENT_MFA_ENDPOINT, type MfaStartMethod, + shouldShowPostureError, startClientMfaSession, } from '../api/startClientMfaSession'; -import { useLocationCardContext } from '../context/context'; -import { LocationCardViews } from '../context/types'; -import { handleMfaStartError } from './handleMfaStartError'; type MfaFinishResponse = { preshared_key: string; @@ -26,6 +25,9 @@ type CodeMfaStartMethod = Extract; type UseMfaConnectOptions = { debounceMs?: number; + onConnected?: () => void; + onSessionExpired?: () => void; + onPostureError?: (message: string) => void; }; const waitForMinimumDuration = async (startedAt: number, minimumMs: number) => { @@ -36,11 +38,15 @@ const waitForMinimumDuration = async (startedAt: number, minimumMs: number) => { }; export const useMfaConnect = ( + location: LocationInfo, method: CodeMfaStartMethod, - { debounceMs = 0 }: UseMfaConnectOptions = {}, + { + debounceMs = 0, + onConnected, + onSessionExpired, + onPostureError, + }: UseMfaConnectOptions = {}, ) => { - const { location, setPostureError, setView } = useLocationCardContext(); - const [token, setToken] = useState(null); const [isStarting, setIsStarting] = useState(debounceMs > 0); const [startError, setStartError] = useState(null); @@ -56,7 +62,7 @@ export const useMfaConnect = ( mutationFn: api.connect, meta: { invalidate: ['locations'] }, onSuccess: () => { - setView(LocationCardViews.Connected); + onConnected?.(); }, onError: (err) => { error(`Connect command failed after successful code verification\n${err}`); @@ -87,7 +93,8 @@ export const useMfaConnect = ( setToken(response.token); } catch (err) { await waitForMinimumDuration(startedAt, debounceMs); - if (handleMfaStartError({ err, location, setPostureError, setView })) { + if (shouldShowPostureError(err, location)) { + onPostureError?.(err.message); return; } setStartError(err instanceof Error ? err.message : 'Failed to start MFA'); @@ -132,7 +139,7 @@ export const useMfaConnect = ( errorMessage === 'invalid token' || errorMessage === 'login session not found' ) { - setView(LocationCardViews.Default); + onSessionExpired?.(); } else { setVerifyError('Verification failed'); } @@ -143,7 +150,7 @@ export const useMfaConnect = ( setIsVerifying(false); } }, - [token, instance, requestHeaders, location, connectMutate, setView], + [token, instance, requestHeaders, location, connectMutate, onSessionExpired], ); return { token, isStarting, startError, verifyCode, isVerifying, verifyError }; diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts index 3d4c1c4cd..050a1a40d 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts @@ -1,24 +1,32 @@ import { encode } from '@stablelib/base64'; -import { useMutation } from '@tanstack/react-query'; +import { useMutation, useQuery } from '@tanstack/react-query'; import { error } from '@tauri-apps/plugin-log'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { api } from '../../../rust-api/api'; +import { getInstancesQueryOptions } from '../../../rust-api/query'; +import type { LocationInfo } from '../../../rust-api/types'; import { CLIENT_MFA_ENDPOINT, MfaStartMethod, + shouldShowPostureError, startClientMfaSession, } from '../api/startClientMfaSession'; -import { useLocationCardContext } from '../context/context'; -import { LocationCardViews } from '../context/types'; -import { handleMfaStartError } from './handleMfaStartError'; type TokenData = { token: string; challenge: string; }; -export const useMfaMobileConnect = () => { - const { location, instance, setPostureError, setView } = useLocationCardContext(); +type Options = { + onConnected?: () => void; + onPostureError?: (message?: string) => void; +}; + +export const useMfaMobileConnect = (location: LocationInfo, options?: Options) => { + const { onConnected, onPostureError } = options ?? {}; + + const { data: instances } = useQuery(getInstancesQueryOptions); + const instance = instances?.find((i) => i.id === location.instance_id); const [isStarting, setIsStarting] = useState(false); const [startError, setStartError] = useState(null); @@ -32,7 +40,7 @@ export const useMfaMobileConnect = () => { const { mutate: connectMutate } = useMutation({ mutationFn: api.connect, onSuccess: () => { - setView(LocationCardViews.Connected); + onConnected?.(); }, onError: (err) => { error(`Connect command failed after successful mobile MFA\n${err}`); @@ -42,7 +50,7 @@ export const useMfaMobileConnect = () => { // Open WebSocket when tokenData is available useEffect(() => { - if (!tokenData) return; + if (!tokenData || !instance) return; const wsUrl = `${instance.proxy_url .replace(/^http:/, 'ws:') @@ -122,16 +130,21 @@ export const useMfaMobileConnect = () => { }, []); const qrValue = useMemo(() => { - if (!tokenData) return null; + if (!tokenData || !instance) return null; const json = JSON.stringify({ token: tokenData.token, challenge: tokenData.challenge, instance_id: instance.uuid, }); return encode(new TextEncoder().encode(json)); - }, [tokenData, instance.uuid]); + }, [tokenData, instance]); const start = useCallback(async () => { + if (!instance) { + setStartError('Instance not found'); + return; + } + setIsStarting(true); setStartError(null); setConnectionError(null); @@ -151,7 +164,8 @@ export const useMfaMobileConnect = () => { setTokenData({ token: response.token, challenge: response.challenge }); } catch (e) { - if (handleMfaStartError({ err: e, location, setPostureError, setView })) { + if (shouldShowPostureError(e, location)) { + onPostureError?.(e instanceof Error ? e.message : undefined); return; } setStartError( @@ -161,7 +175,7 @@ export const useMfaMobileConnect = () => { } finally { setIsStarting(false); } - }, [instance, location, setPostureError, setView]); + }, [instance, location, onPostureError]); const reset = useCallback(() => { if (wsRef.current) { diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx index bc9f938de..6eaab2d1a 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx @@ -20,11 +20,18 @@ import { LocationCardMfaStartLoader } from '../LocationCardMfaStartLoader/Locati const MIN_POSTURE_LOADER_MS = 500; export const LocationCardMfaEmailView = () => { - const { setView, location } = useLocationCardContext(); + const { setView, location, setPostureError } = useLocationCardContext(); const { verifyCode, isVerifying, verifyError, isStarting, startError } = useMfaConnect( + location, MfaStartMethod.Email, { debounceMs: location.posture_check_required ? MIN_POSTURE_LOADER_MS : 0, + onConnected: () => setView(LocationCardViews.Connected), + onSessionExpired: () => setView(LocationCardViews.Default), + onPostureError: (msg) => { + setPostureError(msg); + setView(LocationCardViews.PostureCheckFail); + }, }, ); diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx index 34900b047..8ce77b763 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx @@ -17,8 +17,11 @@ import { useMfaMobileConnect } from '../../hooks/useMfaMobileConnect'; type Screen = 'loading' | 'qr' | 'error'; export const LocationCardMfaMobileView = () => { - const { setView, setPostureError } = useLocationCardContext(); - const { start, startError, qrValue, connectionError } = useMfaMobileConnect(); + const { setView, setPostureError, location } = useLocationCardContext(); + const { start, startError, qrValue, connectionError } = useMfaMobileConnect(location, { + onConnected: () => setView(LocationCardViews.Connected), + onPostureError: (message) => setPostureError(message ?? null), + }); const [screen, setScreen] = useState('loading'); const startedRef = useRef(false); diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx index d0eebdca7..0f54d564a 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx @@ -20,11 +20,18 @@ import { LocationCardMfaStartLoader } from '../LocationCardMfaStartLoader/Locati const MIN_POSTURE_LOADER_MS = 500; export const LocationCardMfaTotpView = () => { - const { setView, location } = useLocationCardContext(); + const { setView, location, setPostureError } = useLocationCardContext(); const { verifyCode, isVerifying, verifyError, isStarting, startError } = useMfaConnect( + location, MfaStartMethod.Totp, { debounceMs: location.posture_check_required ? MIN_POSTURE_LOADER_MS : 0, + onConnected: () => setView(LocationCardViews.Connected), + onSessionExpired: () => setView(LocationCardViews.Default), + onPostureError: (msg) => { + setPostureError(msg); + setView(LocationCardViews.PostureCheckFail); + }, }, ); diff --git a/new-ui/src/shared/components/MainBackground/MainBackground.tsx b/new-ui/src/shared/components/MainBackground/MainBackground.tsx index 5807ec1eb..29580c043 100644 --- a/new-ui/src/shared/components/MainBackground/MainBackground.tsx +++ b/new-ui/src/shared/components/MainBackground/MainBackground.tsx @@ -41,6 +41,7 @@ export const MainBackground = () => { window.addEventListener('resize', handleResize); return () => window.removeEventListener('resize', handleResize); }, []); + return ( { + return ( + +
    +

    {title}

    + {isPresent(onClose) && ( + + )} +
    +
    {children}
    + +
    + ); +}; diff --git a/new-ui/src/shared/components/Modal/style.scss b/new-ui/src/shared/components/Modal/style.scss new file mode 100644 index 000000000..49262f6b2 --- /dev/null +++ b/new-ui/src/shared/components/Modal/style.scss @@ -0,0 +1,43 @@ +#modals-root .modal { + --max-width: var(--modal-size-md); + + border-radius: var(--radius-lg); + width: 100%; + max-width: var(--max-width); + position: relative; + overflow: hidden; + + &.size-small { + --max-width: var(--modal-size-sm); + } + + &.size-primary { + --max-width: var(--modal-size-md); + } + + & > .modal-header { + box-sizing: border-box; + padding: var(--spacing-lg) var(--spacing-lg) var(--spacing-md); + border-top-left-radius: var(--radius-lg); + border-top-right-radius: var(--radius-lg); + display: grid; + grid-template-columns: 1fr 24px; + grid-template-rows: 1fr; + user-select: none; + align-items: center; + + .title { + font: var(--t-body-sm-500); + color: var(--fg-white-100); + } + } + + & > .modal-content { + box-sizing: border-box; + padding: 0 var(--spacing-lg) var(--spacing-lg); + + .controls { + padding-top: var(--spacing-3xl); + } + } +} diff --git a/new-ui/src/shared/components/Modal/types.ts b/new-ui/src/shared/components/Modal/types.ts new file mode 100644 index 000000000..e07e3c8e3 --- /dev/null +++ b/new-ui/src/shared/components/Modal/types.ts @@ -0,0 +1,6 @@ +import type { ModalBase } from '../ModalFoundation/types'; + +export interface ModalProps extends ModalBase { + title: string; + size?: 'small' | 'primary'; +} diff --git a/new-ui/src/shared/components/ModalFoundation/ModalFoundation.tsx b/new-ui/src/shared/components/ModalFoundation/ModalFoundation.tsx new file mode 100644 index 000000000..5c19652a8 --- /dev/null +++ b/new-ui/src/shared/components/ModalFoundation/ModalFoundation.tsx @@ -0,0 +1,82 @@ +import './style.scss'; + +import clsx from 'clsx'; +import { AnimatePresence, motion } from 'motion/react'; +import { useEffect, useRef } from 'react'; +import { createPortal } from 'react-dom'; +import { motionTransitionStandard } from '../../consts'; +import type { ModalBase } from './types'; + +const portalTarget = document.getElementById('modals-root') as HTMLElement; +const rootElement = document.getElementById('root') as HTMLElement; + +export const ModalFoundation = ({ + children, + isOpen, + afterClose, + contentClassName, + hideBackdrop, + id, + positionerClassName, +}: Omit) => { + const openRef = useRef(isOpen); + + useEffect(() => { + if (isOpen) { + rootElement.style.overflowY = 'hidden'; + } else { + rootElement.style.overflowY = 'auto'; + } + }, [isOpen]); + + return createPortal( + + {isOpen && ( + + {!hideBackdrop && ( + + )} + + { + if (!openRef.current && target.opacity === 0) { + afterClose?.(); + } + }} + transition={motionTransitionStandard} + > + {children} + + + + )} + , + portalTarget, + ); +}; diff --git a/new-ui/src/shared/components/ModalFoundation/style.scss b/new-ui/src/shared/components/ModalFoundation/style.scss new file mode 100644 index 000000000..2224e38a9 --- /dev/null +++ b/new-ui/src/shared/components/ModalFoundation/style.scss @@ -0,0 +1,30 @@ +#modals-root { + position: relative; + + .modal-root { + display: block; + + .backdrop { + position: fixed; + inset: 0; + display: block; + content: ' '; + width: 100%; + height: 100%; + z-index: 4; + } + + .modal-positioner { + overflow: auto; + position: fixed; + inset: 0; + z-index: 4; + display: flex; + flex-flow: column; + align-items: safe center; + justify-content: safe center; + box-sizing: border-box; + padding: var(--spacing-xl); + } + } +} diff --git a/new-ui/src/shared/components/ModalFoundation/types.ts b/new-ui/src/shared/components/ModalFoundation/types.ts new file mode 100644 index 000000000..cf3d7e0f0 --- /dev/null +++ b/new-ui/src/shared/components/ModalFoundation/types.ts @@ -0,0 +1,11 @@ +import type { PropsWithChildren } from 'react'; + +export interface ModalBase extends PropsWithChildren { + isOpen: boolean; + id?: string; + hideBackdrop?: boolean; + positionerClassName?: string; + contentClassName?: string; + onClose?: (() => void) | null; + afterClose?: () => void; +} diff --git a/new-ui/src/shared/components/ModalGradient/ModalGradient.tsx b/new-ui/src/shared/components/ModalGradient/ModalGradient.tsx new file mode 100644 index 000000000..49497d1a4 --- /dev/null +++ b/new-ui/src/shared/components/ModalGradient/ModalGradient.tsx @@ -0,0 +1,58 @@ +import { useEffect, useRef } from 'react'; + +export const ModalGradient = () => { + const canvasRef = useRef(null); + + useEffect(() => { + const canvas = canvasRef.current; + if (!canvas) return; + const ctx = canvas.getContext('2d'); + if (!ctx) return; + + const draw = (w: number, h: number) => { + canvas.width = w; + canvas.height = h; + + const angle = (134 * Math.PI) / 180; + const length = Math.sqrt(w ** 2 + h ** 2); + + const x1 = w / 2 - (Math.sin(angle) * length) / 2; + const y1 = h / 2 + (Math.cos(angle) * length) / 2; + const x2 = w / 2 + (Math.sin(angle) * length) / 2; + const y2 = h / 2 - (Math.cos(angle) * length) / 2; + + const gradient = ctx.createLinearGradient(x1, y1, x2, y2); + gradient.addColorStop(0, '#5B83FF'); + gradient.addColorStop(1, '#0036DB'); + + ctx.fillStyle = gradient; + ctx.fillRect(0, 0, w, h); + }; + + // biome-ignore lint/style/noNonNullAssertion: Always have parent + const parent = canvas.parentElement!; + draw(parent.clientWidth, parent.clientHeight); + + const observer = new ResizeObserver(([entry]) => { + const { inlineSize: w, blockSize: h } = entry.contentBoxSize[0]; + draw(w, h); + }); + + observer.observe(parent); + return () => observer.disconnect(); + }, []); + + return ( + + ); +}; diff --git a/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx index bfc0f4886..32c2a595f 100644 --- a/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx +++ b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx @@ -3,10 +3,15 @@ import './style.scss'; import { useMutation } from '@tanstack/react-query'; import clsx from 'clsx'; import { useMemo } from 'react'; +import { ConnectModalView } from '../../../pages/full/OverviewPage/components/ConnectModal/hooks/types'; +import { useConnectModal } from '../../../pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModal'; import { api } from '../../rust-api/api'; -import type { LocationInfo } from '../../rust-api/types'; +import type { InstanceInfo, LocationInfo } from '../../rust-api/types'; +import { LocationMfaMode, MfaMethod } from '../../rust-api/types'; import { ThemeSpacing } from '../../types'; +import { isPresent } from '../../utils/isPresent'; import { Divider } from '../Divider/Divider'; +import { parseConnectError } from '../LocationCard/api/connectError'; import { ConnectButton } from '../LocationCard/components/ConnectButton/ConnectButton'; import { LocationCardConnectionInfo } from '../LocationCard/components/LocationCardConnectionInfo/LocationCardConnectionInfo'; import { LocationCardHeaderInfo } from '../LocationCard/components/LocationCardHeaderInfo/LocationCardHeaderInfo'; @@ -15,9 +20,10 @@ import { Toggle } from '../Toggle/Toggle'; interface Props { location: LocationInfo; + instance?: InstanceInfo; } -export const OverviewLocationCard = ({ location }: Props) => { +export const OverviewLocationCard = ({ location, instance }: Props) => { const { mutate: updateRouting } = useMutation({ mutationFn: api.updateLocationRouting, meta: { @@ -25,6 +31,67 @@ export const OverviewLocationCard = ({ location }: Props) => { }, }); + const { mutate: connect } = useMutation({ + mutationFn: api.connect, + onError: (err) => { + const connectError = parseConnectError(err); + if ( + location.posture_check_required && + connectError?.kind === 'postureCheckFailed' + ) { + useConnectModal.getState().open({ + location, + view: ConnectModalView.PostureCheckFail, + postureError: connectError.message, + }); + } + }, + meta: { + invalidate: ['locations'], + }, + }); + + const { mutate: disconnect } = useMutation({ + mutationFn: api.disconnect, + meta: { + invalidate: [ + ['locations'], + ['active-connection'], + ['connection-history'], + ['alive-connections'], + ], + }, + }); + + const handleConnectClick = () => { + if (location.active) { + disconnect({ connectionType: location.connection_type, locationId: location.id }); + return; + } + + if (location.location_mfa_mode !== LocationMfaMode.Disabled) { + const mfaMethod = location.mfa_method ?? MfaMethod.Totp; + let view: (typeof ConnectModalView)[keyof typeof ConnectModalView]; + switch (mfaMethod) { + case MfaMethod.Email: + view = ConnectModalView.MfaEmail; + break; + case MfaMethod.Oidc: + view = ConnectModalView.MfaOidc; + break; + case MfaMethod.MobileApprove: + view = ConnectModalView.MfaMobile; + break; + default: + view = ConnectModalView.MfaTotp; + } + useConnectModal.getState().open({ view, location }); + return; + } + + connect({ connectionType: location.connection_type, locationId: location.id }); + }; + const traficLabel = useMemo(() => { if (location.route_all_traffic) { return 'All traffic is allowed'; @@ -38,28 +105,36 @@ export const OverviewLocationCard = ({ location }: Props) => {
    - {}} /> +
    - { - updateRouting({ - connectionType: location.connection_type, - locationId: location.id, - routeAllTraffic: !location.route_all_traffic, - }); - }} - /> + {(instance?.client_traffic_policy === 'none' || !instance) && ( + { + updateRouting({ + connectionType: location.connection_type, + locationId: location.id, + routeAllTraffic: !location.route_all_traffic, + }); + }} + /> + )} { - console.log('Edit'); + if (isPresent(location)) { + useConnectModal.getState().open({ + view: ConnectModalView.MfaSettings, + location: location, + perviousView: null, + }); + } }} />
    diff --git a/new-ui/src/shared/components/QrCard/QrCard.tsx b/new-ui/src/shared/components/QrCard/QrCard.tsx index 41750999c..b63540e1f 100644 --- a/new-ui/src/shared/components/QrCard/QrCard.tsx +++ b/new-ui/src/shared/components/QrCard/QrCard.tsx @@ -8,7 +8,7 @@ interface Props { export const QrCard = ({ value, size = 200 }: Props) => { return ( -
    - {BOTTOM_LINKS.map((item, i) => ( + {bottomLinks.map((item, i) => ( ))}
    @@ -57,11 +69,12 @@ export const FullViewNavigation = () => { type NavItemProps = NavItemDef; -const NavItem = ({ icon, hidden, ...linkProps }: NavItemProps) => { +const NavItem = ({ icon, hidden, badge, ...linkProps }: NavItemProps) => { if (hidden) return null; return ( + {badge} ); }; diff --git a/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/components/NavBadge.tsx b/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/components/NavBadge.tsx new file mode 100644 index 000000000..94c8d0e00 --- /dev/null +++ b/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/components/NavBadge.tsx @@ -0,0 +1,12 @@ +export const NavBadge = () => ( + + + +); diff --git a/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/style.scss b/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/style.scss index 4b9f8be4f..48cb7d5b7 100644 --- a/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/style.scss +++ b/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/style.scss @@ -34,6 +34,7 @@ --icon: var(--fg-white-80); --bg: transparent; + position: relative; background: var(--bg); width: 36px; height: 36px; @@ -66,6 +67,14 @@ .icon { --icon-color: var(--icon); } + + .nav-badge { + position: absolute; + top: 5px; + right: 7px; + width: 8px; + height: 8px; + } } } } diff --git a/new-ui/src/shared/layouts/FullPageLayout/style.scss b/new-ui/src/shared/layouts/FullPageLayout/style.scss index bf7734250..b0bf05e7e 100644 --- a/new-ui/src/shared/layouts/FullPageLayout/style.scss +++ b/new-ui/src/shared/layouts/FullPageLayout/style.scss @@ -2,7 +2,8 @@ display: grid; grid-template-columns: 52px 1fr; grid-template-rows: 50px 1fr; - min-height: 100dvh; + height: 100dvh; + overflow: hidden; #window-header { grid-row: 1; diff --git a/new-ui/src/shared/rust-api/types.ts b/new-ui/src/shared/rust-api/types.ts index 51f83ab46..2cc593b00 100644 --- a/new-ui/src/shared/rust-api/types.ts +++ b/new-ui/src/shared/rust-api/types.ts @@ -253,6 +253,7 @@ export type NewAppVersionInfo = { release_date: string; release_notes_url: string; update_url: string; + notes?: string | null; }; export type ProvisioningConfig = { diff --git a/new-ui/src/shared/utils/compareVersions.ts b/new-ui/src/shared/utils/compareVersions.ts new file mode 100644 index 000000000..3fed21c8d --- /dev/null +++ b/new-ui/src/shared/utils/compareVersions.ts @@ -0,0 +1,19 @@ +// Compares dotted numeric versions, ignoring pre-release/build suffixes. +export const isVersionGreater = (version: string, than: string): boolean => { + const parse = (v: string) => + v + .trim() + .replace(/^v/, '') + .split(/[-+]/)[0] + .split('.') + .map((part) => Number.parseInt(part, 10) || 0); + + const a = parse(version); + const b = parse(than); + const len = Math.max(a.length, b.length); + for (let i = 0; i < len; i++) { + const diff = (a[i] ?? 0) - (b[i] ?? 0); + if (diff !== 0) return diff > 0; + } + return false; +}; From bd1bf7693a3b9f964a832795ca2950fa7cb3c236 Mon Sep 17 00:00:00 2001 From: Aleksander <170264518+t-aleksander@users.noreply.github.com> Date: Mon, 15 Jun 2026 13:04:53 +0200 Subject: [PATCH 042/155] [New UI] Log view (#953) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * spawn new full view from new-ui project * add views for full-view window * full view enrollment * fix styling on session-timeout * hook up proxy calls * fix mfa steps * fix enrollment api calls * refactor cleanup api definitions * add routes layout nav * Update style.scss * add overview page to full view * overview page selection * Add the new full view support page (#946) * support page * fix app width, cleanup old code * pnpm fix * change text * suggestions * log view * format --------- Co-authored-by: Filip Ślęzak --- new-ui/package.json | 2 + new-ui/pnpm-lock.yaml | 20 ++ new-ui/src/pages/full/LogPage/LogPage.tsx | 217 ++++++++++++++++++ new-ui/src/pages/full/LogPage/style.scss | 36 +++ new-ui/src/routeTree.gen.ts | 21 ++ new-ui/src/routes/full/_default/log.tsx | 6 + new-ui/src/routes/full/_default/overview.tsx | 2 +- .../FullViewNavigation/FullViewNavigation.tsx | 4 + new-ui/src/shared/rust-api/types.ts | 21 ++ new-ui/src/shared/scss/_shared_tokens.scss | 3 + src-tauri/.gitignore | 3 + 11 files changed, 334 insertions(+), 1 deletion(-) create mode 100644 new-ui/src/pages/full/LogPage/LogPage.tsx create mode 100644 new-ui/src/pages/full/LogPage/style.scss create mode 100644 new-ui/src/routes/full/_default/log.tsx diff --git a/new-ui/package.json b/new-ui/package.json index e8fe0db53..dfb536122 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -23,6 +23,8 @@ "@tanstack/router-plugin": "^1.168.18", "@tauri-apps/api": "^2.11.0", "@tauri-apps/plugin-clipboard-manager": "^2.3.2", + "@tauri-apps/plugin-dialog": "^2.7.1", + "@tauri-apps/plugin-fs": "^2.5.1", "@tauri-apps/plugin-http": "^2.5.9", "@tauri-apps/plugin-log": "^2.8.0", "@tauri-apps/plugin-os": "^2.3.2", diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index 9793cab86..9154cc38c 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -38,6 +38,12 @@ importers: '@tauri-apps/plugin-clipboard-manager': specifier: ^2.3.2 version: 2.3.2 + '@tauri-apps/plugin-dialog': + specifier: ^2.7.1 + version: 2.7.1 + '@tauri-apps/plugin-fs': + specifier: ^2.5.1 + version: 2.5.1 '@tauri-apps/plugin-http': specifier: ^2.5.9 version: 2.5.9 @@ -857,6 +863,12 @@ packages: '@tauri-apps/plugin-clipboard-manager@2.3.2': resolution: {integrity: sha512-CUlb5Hqi2oZbcZf4VUyUH53XWPPdtpw43EUpCza5HWZJwxEoDowFzNUDt1tRUXA8Uq+XPn17Ysfptip33sG4eQ==} + '@tauri-apps/plugin-dialog@2.7.1': + resolution: {integrity: sha512-OK1UBXYt+ojcmxMktzzuyonYIFta8CmAASpX+CA+DTGK24KlHjhYI6x2iOJ/TjZF4N7/ACK1oFmEOjIY9IhzOQ==} + + '@tauri-apps/plugin-fs@2.5.1': + resolution: {integrity: sha512-9Lz+Jopp6QyeEWhlpkMx4R/+P9HgR+AVAI4vOZhlT8Xaymtz8iVI/Ov984/XTqgJz/5gz5NretqPB/XEMS3NhQ==} + '@tauri-apps/plugin-http@2.5.9': resolution: {integrity: sha512-lCiY0+vs4HvIUSvZrBs8TC3TiCB0MOPRmiUjTq4prW7SlcJE2jdLeT6KBsJrT9Tlplufl7W1pY6SFAO3gCWxDA==} @@ -2642,6 +2654,14 @@ snapshots: dependencies: '@tauri-apps/api': 2.11.0 + '@tauri-apps/plugin-dialog@2.7.1': + dependencies: + '@tauri-apps/api': 2.11.0 + + '@tauri-apps/plugin-fs@2.5.1': + dependencies: + '@tauri-apps/api': 2.11.0 + '@tauri-apps/plugin-http@2.5.9': dependencies: '@tauri-apps/api': 2.11.0 diff --git a/new-ui/src/pages/full/LogPage/LogPage.tsx b/new-ui/src/pages/full/LogPage/LogPage.tsx new file mode 100644 index 000000000..b36b0d7c5 --- /dev/null +++ b/new-ui/src/pages/full/LogPage/LogPage.tsx @@ -0,0 +1,217 @@ +import './style.scss'; +import { listen, type UnlistenFn } from '@tauri-apps/api/event'; +import * as clipboard from '@tauri-apps/plugin-clipboard-manager'; +import { save } from '@tauri-apps/plugin-dialog'; +import { writeTextFile } from '@tauri-apps/plugin-fs'; +import { error } from '@tauri-apps/plugin-log'; +import { useCallback, useEffect, useRef, useState } from 'react'; +import { Subject } from 'rxjs'; +import { ButtonVariant } from '../../../shared/components/Button/types'; +import { FullPageTitle } from '../../../shared/components/FullPageTitle/FullPageTitle'; +import { Select } from '../../../shared/components/Select/Select'; +import type { SelectOption } from '../../../shared/components/Select/types'; +import { SizedBox } from '../../../shared/components/SizedBox/SizedBox'; +import { TooltipButton } from '../../../shared/components/TooltipButton/TooltipButton'; +import { FullPage } from '../../../shared/layouts/FullPage/FullPage'; +import { api } from '../../../shared/rust-api/api'; +import { + type LogItem, + type LogLevel, + LogSource, + TauriEvent, +} from '../../../shared/rust-api/types'; +import { ThemeSpacing } from '../../../shared/types'; + +type GlobalLogLevel = Extract; + +const logLevelOptions: SelectOption[] = [ + { key: 'error', label: 'Error', value: 'ERROR' }, + { key: 'info', label: 'Info', value: 'INFO' }, + { key: 'debug', label: 'Debug', value: 'DEBUG' }, +]; + +const logSourceOptions: SelectOption[] = [ + { key: 'all', label: 'All', value: LogSource.All }, + { key: 'client', label: 'Client', value: LogSource.Client }, + { key: 'vpn', label: 'VPN', value: LogSource.Vpn }, +]; + +const filterLogByLevel = (target: GlobalLogLevel, log: LogLevel): boolean => { + switch (target) { + case 'ERROR': + return log === 'ERROR'; + case 'INFO': + return ['INFO', 'ERROR', 'WARN'].includes(log); + case 'DEBUG': + return ['ERROR', 'INFO', 'DEBUG', 'WARN'].includes(log); + default: + return true; + } +}; + +const filterLogBySource = (target: LogSource, log: LogSource): boolean => + target === LogSource.All || target === log; + +const createLogLineElement = (content: string): HTMLParagraphElement => { + const element = document.createElement('p'); + element.classList.add('log-line'); + element.textContent = content; + return element; +}; + +export const LogPage = () => { + const logsContainerElement = useRef(null); + const logLevelRef = useRef('INFO'); + const logSourceRef = useRef(LogSource.All); + const [level, setLevel] = useState(logLevelOptions[1]); + const [source, setSource] = useState(logSourceOptions[0]); + + const clearLogs = useCallback(() => { + if (logsContainerElement.current) { + logsContainerElement.current.innerHTML = ''; + } + }, []); + + const restartLogWatcher = useCallback(() => { + clearLogs(); + api.stopGlobalLogWatcher(); + api.startGlobalLogWatcher(); + }, [clearLogs]); + + const getAllLogs = useCallback(() => { + let logs = ''; + logsContainerElement.current?.childNodes.forEach((item) => { + logs += `${item.textContent}\n`; + }); + return logs; + }, []); + + const clipboardSub = useRef(new Subject()); + const downloadSub = useRef(new Subject()); + + const handleLogsCopy = useCallback(() => { + const logs = getAllLogs(); + if (logs) { + clipboard.writeText(logs).then(() => { + clipboardSub.current.next(); + }); + } + }, [getAllLogs]); + + const handleLogsDownload = useCallback(async () => { + try { + const path = await save({ + filters: [ + { + name: 'Logs', + extensions: ['txt', 'log'], + }, + ], + }); + if (path) { + await writeTextFile(path, getAllLogs()); + downloadSub.current.next(); + } + } catch (e) { + error(`Failed to save logs to file: ${String(e)}`); + } + }, [getAllLogs]); + + useEffect(() => { + let eventUnlisten: UnlistenFn; + const startLogListen = async () => { + eventUnlisten = await listen( + TauriEvent.GlobalLogUpdate, + ({ payload: logItems }) => { + const container = logsContainerElement.current; + if (!container) return; + for (const item of logItems) { + if ( + filterLogByLevel(logLevelRef.current, item.level) && + filterLogBySource(logSourceRef.current, item.source) + ) { + const utcTimestamp = item.timestamp.endsWith('Z') + ? item.timestamp + : `${item.timestamp}Z`; + const dateTime = new Date(utcTimestamp).toLocaleString(); + const element = createLogLineElement( + `[${dateTime}][${item.level}][${item.source}] ${item.fields.message}`, + ); + // stick to bottom unless the user scrolled up to read + const scrollAfterAppend = + container.scrollHeight - container.scrollTop - container.clientHeight < + 10; + container.appendChild(element); + // auto scroll to bottom if user didn't scroll up + if (scrollAfterAppend) { + container.scrollTo({ top: container.scrollHeight }); + } + } + } + }, + ); + }; + startLogListen(); + api.startGlobalLogWatcher(); + + return () => { + api.stopGlobalLogWatcher(); + eventUnlisten?.(); + clearLogs(); + }; + }, [clearLogs]); + + return ( + + +

    + The source of the logs. Logs can come from the Defguard client or the VPN + service/extension that manages VPN connections at the network level. +

    + +
    + { + setSource(option); + logSourceRef.current = option.value; + restartLogWatcher(); + }} + /> +
    + + +
    + +
    + + ); +}; diff --git a/new-ui/src/pages/full/LogPage/style.scss b/new-ui/src/pages/full/LogPage/style.scss new file mode 100644 index 000000000..1424363ae --- /dev/null +++ b/new-ui/src/pages/full/LogPage/style.scss @@ -0,0 +1,36 @@ +#log-page-view { + display: flex; + flex-direction: column; + overflow: hidden; + + .page-description { + font: var(--t-body-xs-400); + color: var(--fg-white-60); + } + + .controls { + display: flex; + align-items: center; + gap: var(--spacing-md); + + .spacer { + flex: 1; + } + } + + .log-container { + flex: 1; + border-radius: var(--radius-lg); + border: 1px solid var(--border-disabled); + background-color: var(--bg-white-5); + padding: var(--spacing-lg); + overflow: auto; + + .log-line { + font: var(--t-log-line); + color: var(--fg-white-100); + white-space: pre-wrap; + overflow-wrap: anywhere; + } + } +} diff --git a/new-ui/src/routeTree.gen.ts b/new-ui/src/routeTree.gen.ts index 1322f58d9..cad051fa0 100644 --- a/new-ui/src/routeTree.gen.ts +++ b/new-ui/src/routeTree.gen.ts @@ -21,6 +21,7 @@ import { Route as FullDefaultRouteImport } from './routes/full/_default' import { Route as FullDefaultUpdateRouteImport } from './routes/full/_default/update' import { Route as FullDefaultSupportRouteImport } from './routes/full/_default/support' import { Route as FullDefaultOverviewRouteImport } from './routes/full/_default/overview' +import { Route as FullDefaultLogRouteImport } from './routes/full/_default/log' import { Route as FullDefaultAddIndexRouteImport } from './routes/full/_default/add/index' import { Route as FullDefaultAddInstanceRouteImport } from './routes/full/_default/add/instance' @@ -83,6 +84,11 @@ const FullDefaultOverviewRoute = FullDefaultOverviewRouteImport.update({ path: '/overview', getParentRoute: () => FullDefaultRoute, } as any) +const FullDefaultLogRoute = FullDefaultLogRouteImport.update({ + id: '/log', + path: '/log', + getParentRoute: () => FullDefaultRoute, +} as any) const FullDefaultAddIndexRoute = FullDefaultAddIndexRouteImport.update({ id: '/add/', path: '/add/', @@ -103,6 +109,7 @@ export interface FileRoutesByFullPath { '/compact/': typeof CompactIndexRoute '/full/': typeof FullIndexRoute '/playground/': typeof PlaygroundIndexRoute + '/full/log': typeof FullDefaultLogRoute '/full/overview': typeof FullDefaultOverviewRoute '/full/support': typeof FullDefaultSupportRoute '/full/update': typeof FullDefaultUpdateRoute @@ -117,6 +124,7 @@ export interface FileRoutesByTo { '/full/session-timeout': typeof FullSessionTimeoutRoute '/compact': typeof CompactIndexRoute '/playground': typeof PlaygroundIndexRoute + '/full/log': typeof FullDefaultLogRoute '/full/overview': typeof FullDefaultOverviewRoute '/full/support': typeof FullDefaultSupportRoute '/full/update': typeof FullDefaultUpdateRoute @@ -134,6 +142,7 @@ export interface FileRoutesById { '/compact/': typeof CompactIndexRoute '/full/': typeof FullIndexRoute '/playground/': typeof PlaygroundIndexRoute + '/full/_default/log': typeof FullDefaultLogRoute '/full/_default/overview': typeof FullDefaultOverviewRoute '/full/_default/support': typeof FullDefaultSupportRoute '/full/_default/update': typeof FullDefaultUpdateRoute @@ -151,6 +160,7 @@ export interface FileRouteTypes { | '/compact/' | '/full/' | '/playground/' + | '/full/log' | '/full/overview' | '/full/support' | '/full/update' @@ -165,6 +175,7 @@ export interface FileRouteTypes { | '/full/session-timeout' | '/compact' | '/playground' + | '/full/log' | '/full/overview' | '/full/support' | '/full/update' @@ -181,6 +192,7 @@ export interface FileRouteTypes { | '/compact/' | '/full/' | '/playground/' + | '/full/_default/log' | '/full/_default/overview' | '/full/_default/support' | '/full/_default/update' @@ -282,6 +294,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof FullDefaultOverviewRouteImport parentRoute: typeof FullDefaultRoute } + '/full/_default/log': { + id: '/full/_default/log' + path: '/log' + fullPath: '/full/log' + preLoaderRoute: typeof FullDefaultLogRouteImport + parentRoute: typeof FullDefaultRoute + } '/full/_default/add/': { id: '/full/_default/add/' path: '/add' @@ -300,6 +319,7 @@ declare module '@tanstack/react-router' { } interface FullDefaultRouteChildren { + FullDefaultLogRoute: typeof FullDefaultLogRoute FullDefaultOverviewRoute: typeof FullDefaultOverviewRoute FullDefaultSupportRoute: typeof FullDefaultSupportRoute FullDefaultUpdateRoute: typeof FullDefaultUpdateRoute @@ -308,6 +328,7 @@ interface FullDefaultRouteChildren { } const FullDefaultRouteChildren: FullDefaultRouteChildren = { + FullDefaultLogRoute: FullDefaultLogRoute, FullDefaultOverviewRoute: FullDefaultOverviewRoute, FullDefaultSupportRoute: FullDefaultSupportRoute, FullDefaultUpdateRoute: FullDefaultUpdateRoute, diff --git a/new-ui/src/routes/full/_default/log.tsx b/new-ui/src/routes/full/_default/log.tsx new file mode 100644 index 000000000..cabb9796e --- /dev/null +++ b/new-ui/src/routes/full/_default/log.tsx @@ -0,0 +1,6 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { LogPage } from '../../../pages/full/LogPage/LogPage'; + +export const Route = createFileRoute('/full/_default/log')({ + component: LogPage, +}); diff --git a/new-ui/src/routes/full/_default/overview.tsx b/new-ui/src/routes/full/_default/overview.tsx index 54bc2b335..711692515 100644 --- a/new-ui/src/routes/full/_default/overview.tsx +++ b/new-ui/src/routes/full/_default/overview.tsx @@ -14,7 +14,7 @@ export const Route = createFileRoute('/full/_default/overview')({ ]); if (instances.length === 0 && tunnels.length === 0) { - throw redirect({ to: '/full/add' }); + throw redirect({ to: '/empty' }); } const stored = useAppStore.getState().compactViewSelection; diff --git a/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/FullViewNavigation.tsx b/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/FullViewNavigation.tsx index ce3602a6d..0949b1d14 100644 --- a/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/FullViewNavigation.tsx +++ b/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/FullViewNavigation.tsx @@ -43,6 +43,10 @@ export const FullViewNavigation = () => { icon: IconKind.PlusCircle, to: '/full/add', }, + { + icon: IconKind.ActivityNotes, + to: '/full/log', + }, ], [isEmpty], ); diff --git a/new-ui/src/shared/rust-api/types.ts b/new-ui/src/shared/rust-api/types.ts index 2cc593b00..67f019b02 100644 --- a/new-ui/src/shared/rust-api/types.ts +++ b/new-ui/src/shared/rust-api/types.ts @@ -25,6 +25,26 @@ export const LogLevel = { export type LogLevel = (typeof LogLevel)[keyof typeof LogLevel]; +export const LogSource = { + All: 'All', + Client: 'Client', + Vpn: 'VPN', +} as const; + +export type LogSource = (typeof LogSource)[keyof typeof LogSource]; + +export type LogItem = { + // datetime UTC + timestamp: string; + level: LogLevel; + target: string; + fields: { + message: string; + interface_name?: string; + }; + source: LogSource; +}; + export const ClientTrafficPolicy = { None: 'none', DisableAllTraffic: 'disable_all_traffic', @@ -121,6 +141,7 @@ export const TauriEvent = { MfaTrigger: 'mfa-trigger', VersionMismatch: 'version-mismatch', UuidMismatch: 'uuid-mismatch', + GlobalLogUpdate: 'log-update-global', } as const; export type TauriEventValue = (typeof TauriEvent)[keyof typeof TauriEvent]; diff --git a/new-ui/src/shared/scss/_shared_tokens.scss b/new-ui/src/shared/scss/_shared_tokens.scss index dcea8f428..a46acbc63 100644 --- a/new-ui/src/shared/scss/_shared_tokens.scss +++ b/new-ui/src/shared/scss/_shared_tokens.scss @@ -240,6 +240,9 @@ $jetbrains: --input-spacing-sm: var(--spacing-sm); --input-spacing-lg: var(--spacing-md); + // Log view + --t-log-line: normal 400 12px/20px #{$jetbrains}; + // Tooltip --t-tooltip: normal 400 12px / 16px #{$geist}; --tooltip-letter-spacing: 0.3; diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore index 78b6aae95..c093e9e49 100644 --- a/src-tauri/.gitignore +++ b/src-tauri/.gitignore @@ -2,3 +2,6 @@ # will have compiled files and executables /target/ defguard.db + +# Downloaded build artifacts +resources-macos/binaries/ From a45224570f45bd1d35dde79e72140b7a996edcf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Mon, 15 Jun 2026 13:22:19 +0200 Subject: [PATCH 043/155] Try whatsNew for App Store Connect --- .github/workflows/build-macos.yaml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index a23bc9da0..9ab38ba50 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -82,6 +82,16 @@ jobs: run: | security -v unlock-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" login.keychain xcrun productbuild --sign "${{ env.APPLE_SIGNING_IDENTITY_INSTALLER }}" --component "src-tauri/target/universal-apple-darwin/release/bundle/macos/Defguard.app" /Applications defguard-client.pkg - xcrun altool --upload-app --type macos --file defguard-client.pkg --apiKey ${{ secrets.APPLE_API_KEY }} --apiIssuer ${{ secrets.APPLE_API_ISSUER }} + xcrun altool --apiKey ${{ secrets.APPLE_API_KEY }} --apiIssuer ${{ secrets.APPLE_API_ISSUER }} --upload-app --type macos --file defguard-client.pkg # xcrun notarytool submit --wait --apple-id ${{ env.APPLE_ID }} --password ${{ secrets.NOTARYTOOL_APP_SPECIFIC_PASSWORD }} --team-id ${{ env.APPLE_TEAM_ID }} defguard-client.pkg # xcrun stapler staple defguard-client.pkg + + - name: Upload What's New + env: + APP_ID: "6754601166" + run: | + UPLOAD_DIR=$(mktemp -d) + mkdir -p "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS" + git log -1 --pretty='"whatsNew" = "%B";' > "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS/en-US.txt" + xcrun altool --apiKey ${{ secrets.APPLE_API_KEY }} --apiIssuer ${{ secrets.APPLE_API_ISSUER }} --apple-id ${APP_ID} --bundle-version ${{ github.run_number }} --bundle-short-version-string ${VERSION} --type macos --beta-app-store-text ${UPLOAD_DIR} --download + rm -f -r "${UPLOAD_DIR}" From 089d95bf9648c4583ccb6d96fb95051f846996c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Mon, 15 Jun 2026 13:36:18 +0200 Subject: [PATCH 044/155] fix compact view spacing (#960) --- new-ui/package.json | 4 +- new-ui/pnpm-lock.yaml | 156 +++++++++--------- .../CompactLocationsPage.tsx | 48 +++--- .../compact/CompactLocationsPage/style.scss | 6 + 4 files changed, 111 insertions(+), 103 deletions(-) diff --git a/new-ui/package.json b/new-ui/package.json index dfb536122..40a65cd8d 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -13,7 +13,7 @@ "preview": "vite preview" }, "dependencies": { - "@biomejs/biome": "^2.4.16", + "@biomejs/biome": "^2.5.0", "@floating-ui/react": "^0.27.19", "@stablelib/base64": "^2.0.1", "@stablelib/x25519": "^2.0.1", @@ -43,7 +43,7 @@ "react-dom": "^19.2.7", "react-markdown": "^10.1.0", "rxjs": "^7.8.2", - "sass": "^1.100.0", + "sass": "^1.101.0", "zod": "^4.4.3", "zustand": "^5.0.14" }, diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index 9154cc38c..9b633af1e 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@biomejs/biome': - specifier: ^2.4.16 - version: 2.4.16 + specifier: ^2.5.0 + version: 2.5.0 '@floating-ui/react': specifier: ^0.27.19 version: 0.27.19(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -31,7 +31,7 @@ importers: version: 1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/router-plugin': specifier: ^1.168.18 - version: 1.168.18(@tanstack/react-router@1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.100.0)) + version: 1.168.18(@tanstack/react-router@1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0)) '@tauri-apps/api': specifier: ^2.11.0 version: 2.11.0 @@ -99,8 +99,8 @@ importers: specifier: ^7.8.2 version: 7.8.2 sass: - specifier: ^1.100.0 - version: 1.100.0 + specifier: ^1.101.0 + version: 1.101.0 zod: specifier: ^4.4.3 version: 4.4.3 @@ -110,7 +110,7 @@ importers: devDependencies: '@tanstack/devtools-vite': specifier: ^0.7.0 - version: 0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.100.0)) + version: 0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0)) '@types/byte-size': specifier: ^8.1.2 version: 8.1.2 @@ -125,7 +125,7 @@ importers: version: 19.2.3(@types/react@19.2.17) '@vitejs/plugin-react': specifier: ^6.0.2 - version: 6.0.2(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.100.0)) + version: 6.0.2(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0)) autoprefixer: specifier: ^10.5.0 version: 10.5.0(postcss@8.5.15) @@ -146,7 +146,7 @@ importers: version: 6.0.3 vite: specifier: ^8.0.16 - version: 8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.100.0) + version: 8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0) packages: @@ -217,59 +217,59 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@biomejs/biome@2.4.16': - resolution: {integrity: sha512-x9ajFh1zChVybCiM3TN6OD4phAqLgtPZjFrZF+aTMYCPjwBO+k529TX7PPsAqtGNLeV4UgzwQnowEgS7bGmzcA==} + '@biomejs/biome@2.5.0': + resolution: {integrity: sha512-4kURkd9hAPrdDM3C9n82ycYgx8hvQcW6MjKTEejruj8rK0N8P3OPpdy8BvI8kt3KWY4ycF5XtDOrktetEfhfuw==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.4.16': - resolution: {integrity: sha512-wxPvu4XOA85YJk9ixSWUmq/QBHbid85BISbOAqqBM/5xQpPk9ayjk5375tOlSC0BeCwNSbPFafQBm+vBumXq0A==} + '@biomejs/cli-darwin-arm64@2.5.0': + resolution: {integrity: sha512-Mn3Fwi3SA5fgmfCPqmzpWF2DLZnms3BVAhM088nTnGrTZmHS3wwIjcoZPqpXeNgd3DrrLH6xp8vTLIBuJoZiXw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.4.16': - resolution: {integrity: sha512-xFCqGPwYusQJp4N4NJLi1XJiZqjwFdjhT+KqtNy+Ug3qgfczqnTa6MSDvxJF6TkuDLoYJItMapz6tAf7kCekFw==} + '@biomejs/cli-darwin-x64@2.5.0': + resolution: {integrity: sha512-rg3VPL5P8mYro6pqlXYXuJWph21slVp3SZtAqWSrkZs40d2gTzYmHF8E/X1iTID25btmNKltNDJ926sqVBp7DQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.4.16': - resolution: {integrity: sha512-oYxnW0ARfJkr72ezzF2OR8N/rtkgLUQeYtF8cFhVswbknHxtTcmzSsanVJP8yQKnGpGpc2ck6c5zLvHahL6Cbg==} + '@biomejs/cli-linux-arm64-musl@2.5.0': + resolution: {integrity: sha512-vQdM4oSGaf7ZNeGO9w5+Y8SBtyser9M6znxYbm7Ec8wInxJu1WiKxFYZW5Auj2d80bcVvefuGGRxoFOE0eee8g==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.4.16': - resolution: {integrity: sha512-2kFb4//jxfZaP6D+Rj5VkHkxgyD9EoRAVBEQb8PKRv+s4NO2zYNJKXFaJmK1CmhufJOWEfpHKaRbOja7qjmdhQ==} + '@biomejs/cli-linux-arm64@2.5.0': + resolution: {integrity: sha512-tl+LW8fdD96/xdeWtWwc82LIOc5CoY7N2AsogLTp5R4ECErYt+8Jl/N68ezN9vzSiqPTxw6vjcihoLPYKZHrlw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.4.16': - resolution: {integrity: sha512-iHDS+MCM65DPqWGu+ECC3uoALyj2H7F4nVUPxIPjz/PIl94EUu+EDfGZDzFP+NY1EOPVt9NQvwFqq7HdMmowdg==} + '@biomejs/cli-linux-x64-musl@2.5.0': + resolution: {integrity: sha512-+9hIcMngJ+yGUahXqZuZ8CoWKJE9SAZsFsM3QDvXpNsLbXZ9lqVzgBhOk/jTSYkOA0GLP9eu3teukqpLUojHMg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.4.16': - resolution: {integrity: sha512-NbcBbi/nJqn5baae6wqRXdS7Gadf2uRpehSh6vMSYpG8OhkXl/Xg8aorWrJ+9VWqAT5ml90alLvorkpMW0nBwQ==} + '@biomejs/cli-linux-x64@2.5.0': + resolution: {integrity: sha512-zpEGf4RQbFEh8Vt7OmavLyyOzRbtcE9osCqrS1kfvt8jDvxwhKXLSf7n0ebr/ov0RJ9ssP+lhs6C8a9WwFvrQA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.4.16': - resolution: {integrity: sha512-0rgImMsNb5v/chhkIFe3wu7PEFClS6RBAYUijGL9UsYN3PanSaoK24HSSuSJb1pYbYYVjzAyZTl3gtjJ84BM8A==} + '@biomejs/cli-win32-arm64@2.5.0': + resolution: {integrity: sha512-jB0wAvTLI4itx5VidqVUejPQFhRUxiZ9l9FvZ26D5fl6t3qme+ZB4PD3bTSeL1vZ8NI2Rx/zj6H9zcESuGHKGw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.4.16': - resolution: {integrity: sha512-Kp85jgoBHa05gix6UIRjfCDiUV3w/8VIdZ247VyyO2gEjaw12WEVhdIjlxp/AMzXxqxQwbxNTDVZ3Mwd2RG5rw==} + '@biomejs/cli-win32-x64@2.5.0': + resolution: {integrity: sha512-VT/lF+GId+67j8aDfLkxdxNoVApsPSTbyAtB3jJq0IWTrY77WXfbPfpngxq0bA6JCEv/7k8C9qWjDRKRznDlyw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -981,8 +981,8 @@ packages: bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - baseline-browser-mapping@2.10.35: - resolution: {integrity: sha512-honAfLBde0HAFLdNyBEfuuENkF6zR+ozxqxa/2zJKHBe1qzLqyTSeRKpdPEHAP03rlDGyQOPnCSxnVpVqQo9Mg==} + baseline-browser-mapping@2.10.37: + resolution: {integrity: sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==} engines: {node: '>=6.0.0'} hasBin: true @@ -1011,8 +1011,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001797: - resolution: {integrity: sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w==} + caniuse-lite@1.0.30001799: + resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1119,8 +1119,8 @@ packages: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} - electron-to-chromium@1.5.371: - resolution: {integrity: sha512-e9htk9mAYL6AzmkEhSvVVw7IWGSBJ/Bqdn2eRyRLrj1g6sncN4WbFt5qnILYoCktktr45pyjIrOiRvBThQ808w==} + electron-to-chromium@1.5.372: + resolution: {integrity: sha512-M3yhbAlilnwqC8D21t28UCDGHyitShTmmLRU/H+b74P6Ski16Nb9HONYEaVpMj/pwC7BEo5B95FpjODLCWbtfA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1655,8 +1655,8 @@ packages: peerDependencies: postcss: ^8.4.29 - postcss-selector-parser@7.1.2: - resolution: {integrity: sha512-Wjvt4scRFouioIInHf51IFNP4ltJ2EngJM+cZPGiqbKetBfmP3vpdPV8ID2S6JS6/jdo74N8+aEYH9lQr2C6sA==} + postcss-selector-parser@7.1.4: + resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} engines: {node: '>=4'} postcss-value-parser@4.2.0: @@ -1744,8 +1744,8 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - sass@1.100.0: - resolution: {integrity: sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==} + sass@1.101.0: + resolution: {integrity: sha512-OL3GoQyoUdDt843DpVmDO6y2k1sc5IhUDSpu8XucEI+35neq5QivZ1iuegnpraEVTJXlQGK1gl27zKcTLEPbQw==} engines: {node: '>=20.19.0'} hasBin: true @@ -2141,39 +2141,39 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@biomejs/biome@2.4.16': + '@biomejs/biome@2.5.0': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.4.16 - '@biomejs/cli-darwin-x64': 2.4.16 - '@biomejs/cli-linux-arm64': 2.4.16 - '@biomejs/cli-linux-arm64-musl': 2.4.16 - '@biomejs/cli-linux-x64': 2.4.16 - '@biomejs/cli-linux-x64-musl': 2.4.16 - '@biomejs/cli-win32-arm64': 2.4.16 - '@biomejs/cli-win32-x64': 2.4.16 + '@biomejs/cli-darwin-arm64': 2.5.0 + '@biomejs/cli-darwin-x64': 2.5.0 + '@biomejs/cli-linux-arm64': 2.5.0 + '@biomejs/cli-linux-arm64-musl': 2.5.0 + '@biomejs/cli-linux-x64': 2.5.0 + '@biomejs/cli-linux-x64-musl': 2.5.0 + '@biomejs/cli-win32-arm64': 2.5.0 + '@biomejs/cli-win32-x64': 2.5.0 - '@biomejs/cli-darwin-arm64@2.4.16': + '@biomejs/cli-darwin-arm64@2.5.0': optional: true - '@biomejs/cli-darwin-x64@2.4.16': + '@biomejs/cli-darwin-x64@2.5.0': optional: true - '@biomejs/cli-linux-arm64-musl@2.4.16': + '@biomejs/cli-linux-arm64-musl@2.5.0': optional: true - '@biomejs/cli-linux-arm64@2.4.16': + '@biomejs/cli-linux-arm64@2.5.0': optional: true - '@biomejs/cli-linux-x64-musl@2.4.16': + '@biomejs/cli-linux-x64-musl@2.5.0': optional: true - '@biomejs/cli-linux-x64@2.4.16': + '@biomejs/cli-linux-x64@2.5.0': optional: true - '@biomejs/cli-win32-arm64@2.4.16': + '@biomejs/cli-win32-arm64@2.5.0': optional: true - '@biomejs/cli-win32-x64@2.4.16': + '@biomejs/cli-win32-x64@2.5.0': optional: true '@cacheable/memory@2.0.9': @@ -2208,13 +2208,13 @@ snapshots: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.2)': + '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.4)': dependencies: - postcss-selector-parser: 7.1.2 + postcss-selector-parser: 7.1.4 - '@csstools/selector-specificity@6.0.0(postcss-selector-parser@7.1.2)': + '@csstools/selector-specificity@6.0.0(postcss-selector-parser@7.1.4)': dependencies: - postcss-selector-parser: 7.1.2 + postcss-selector-parser: 7.1.4 '@emnapi/core@1.10.0': dependencies: @@ -2528,7 +2528,7 @@ snapshots: '@tanstack/devtools-event-client@0.4.3': {} - '@tanstack/devtools-vite@0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.100.0))': + '@tanstack/devtools-vite@0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0))': dependencies: '@tanstack/devtools-client': 0.0.6 '@tanstack/devtools-event-bus': 0.4.1 @@ -2537,7 +2537,7 @@ snapshots: magic-string: 0.30.21 oxc-parser: 0.120.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) picomatch: 4.0.4 - vite: 8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.100.0) + vite: 8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -2612,7 +2612,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.168.18(@tanstack/react-router@1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.100.0))': + '@tanstack/router-plugin@1.168.18(@tanstack/react-router@1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0))': dependencies: '@babel/core': 7.29.7 '@babel/template': 7.29.7 @@ -2625,7 +2625,7 @@ snapshots: zod: 4.4.3 optionalDependencies: '@tanstack/react-router': 1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - vite: 8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.100.0) + vite: 8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0) transitivePeerDependencies: - supports-color @@ -2724,10 +2724,10 @@ snapshots: '@ungap/structured-clone@1.3.1': {} - '@vitejs/plugin-react@6.0.2(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.100.0))': + '@vitejs/plugin-react@6.0.2(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.100.0) + vite: 8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0) ajv@8.20.0: dependencies: @@ -2753,7 +2753,7 @@ snapshots: autoprefixer@10.5.0(postcss@8.5.15): dependencies: browserslist: 4.28.2 - caniuse-lite: 1.0.30001797 + caniuse-lite: 1.0.30001799 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.15 @@ -2770,7 +2770,7 @@ snapshots: bail@2.0.2: {} - baseline-browser-mapping@2.10.35: {} + baseline-browser-mapping@2.10.37: {} braces@3.0.3: dependencies: @@ -2778,9 +2778,9 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.35 - caniuse-lite: 1.0.30001797 - electron-to-chromium: 1.5.371 + baseline-browser-mapping: 2.10.37 + caniuse-lite: 1.0.30001799 + electron-to-chromium: 1.5.372 node-releases: 2.0.47 update-browserslist-db: 1.2.3(browserslist@4.28.2) @@ -2796,7 +2796,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001797: {} + caniuse-lite@1.0.30001799: {} ccount@2.0.1: {} @@ -2874,7 +2874,7 @@ snapshots: diff@8.0.4: {} - electron-to-chromium@1.5.371: {} + electron-to-chromium@1.5.372: {} emoji-regex@8.0.0: {} @@ -3482,7 +3482,7 @@ snapshots: dependencies: postcss: 8.5.15 - postcss-selector-parser@7.1.2: + postcss-selector-parser@7.1.4: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 @@ -3595,7 +3595,7 @@ snapshots: dependencies: tslib: 2.8.1 - sass@1.100.0: + sass@1.101.0: dependencies: chokidar: 5.0.0 immutable: 5.1.6 @@ -3698,7 +3698,7 @@ snapshots: known-css-properties: 0.37.0 postcss-media-query-parser: 0.2.3 postcss-resolve-nested-selector: 0.1.6 - postcss-selector-parser: 7.1.2 + postcss-selector-parser: 7.1.4 postcss-value-parser: 4.2.0 stylelint: 17.13.0(typescript@6.0.3) @@ -3709,8 +3709,8 @@ snapshots: '@csstools/css-syntax-patches-for-csstree': 1.1.5(css-tree@3.2.1) '@csstools/css-tokenizer': 4.0.0 '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.2) - '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.2) + '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.4) + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.4) colord: 2.9.3 cosmiconfig: 9.0.2(typescript@6.0.3) css-functions-list: 3.3.3 @@ -3732,7 +3732,7 @@ snapshots: picocolors: 1.1.1 postcss: 8.5.15 postcss-safe-parser: 7.0.1(postcss@8.5.15) - postcss-selector-parser: 7.1.2 + postcss-selector-parser: 7.1.4 postcss-value-parser: 4.2.0 string-width: 8.2.1 supports-hyperlinks: 4.4.0 @@ -3844,7 +3844,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.100.0): + vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -3855,7 +3855,7 @@ snapshots: '@types/node': 25.9.3 fsevents: 2.3.3 jiti: 2.7.0 - sass: 1.100.0 + sass: 1.101.0 webpack-virtual-modules@0.6.2: {} diff --git a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx index 4af8923d1..51b026702 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx +++ b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx @@ -67,29 +67,31 @@ export const CompactLocationsPage = () => { > - -
    - {isPresent(instanceInfo) && - displayedLocations.map((location) => { - const isOpen = - location.id === openLocation || displayedLocations.length === 1; - return ( - { - if (isOpen) { - useAppStore.setState({ expandedLocation: null }); - } else { - useAppStore.setState({ expandedLocation: location.id }); - } - }} - /> - ); - })} +
    + +
    + {isPresent(instanceInfo) && + displayedLocations.map((location) => { + const isOpen = + location.id === openLocation || displayedLocations.length === 1; + return ( + { + if (isOpen) { + useAppStore.setState({ expandedLocation: null }); + } else { + useAppStore.setState({ expandedLocation: location.id }); + } + }} + /> + ); + })} +
    diff --git a/new-ui/src/pages/compact/CompactLocationsPage/style.scss b/new-ui/src/pages/compact/CompactLocationsPage/style.scss index a31827cd2..ede1152da 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/style.scss +++ b/new-ui/src/pages/compact/CompactLocationsPage/style.scss @@ -13,6 +13,12 @@ flex: 0 0 auto; } + .main-content { + display: flex; + flex-flow: column; + row-gap: var(--spacing-sm); + } + .locations { display: flex; flex-flow: column; From 2fb060458249245594d4ce4b371b902519bc633b Mon Sep 17 00:00:00 2001 From: Aleksander <170264518+t-aleksander@users.noreply.github.com> Date: Mon, 15 Jun 2026 13:37:58 +0200 Subject: [PATCH 045/155] [New UI] App settings (#954) * app settings * console log --- .../pages/full/SettingsPage/SettingsPage.tsx | 156 ++++++++++++++++++ new-ui/src/pages/full/SettingsPage/style.scss | 50 ++++++ new-ui/src/routeTree.gen.ts | 21 +++ new-ui/src/routes/full/_default/settings.tsx | 6 + .../FullViewNavigation/FullViewNavigation.tsx | 4 + 5 files changed, 237 insertions(+) create mode 100644 new-ui/src/pages/full/SettingsPage/SettingsPage.tsx create mode 100644 new-ui/src/pages/full/SettingsPage/style.scss create mode 100644 new-ui/src/routes/full/_default/settings.tsx diff --git a/new-ui/src/pages/full/SettingsPage/SettingsPage.tsx b/new-ui/src/pages/full/SettingsPage/SettingsPage.tsx new file mode 100644 index 000000000..43b6c69e0 --- /dev/null +++ b/new-ui/src/pages/full/SettingsPage/SettingsPage.tsx @@ -0,0 +1,156 @@ +import './style.scss'; +import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; +import { openUrl } from '@tauri-apps/plugin-opener'; +import clsx from 'clsx'; +import { type ReactNode, useMemo } from 'react'; +import { Divider } from '../../../shared/components/Divider/Divider'; +import { FullPageTitle } from '../../../shared/components/FullPageTitle/FullPageTitle'; +import { Icon, IconKind } from '../../../shared/components/Icon'; +import { Input } from '../../../shared/components/Input/Input'; +import { Select } from '../../../shared/components/Select/Select'; +import type { SelectOption } from '../../../shared/components/Select/types'; +import { SizedBox } from '../../../shared/components/SizedBox/SizedBox'; +import { Toggle } from '../../../shared/components/Toggle/Toggle'; +import { FullPage } from '../../../shared/layouts/FullPage/FullPage'; +import { api } from '../../../shared/rust-api/api'; +import { getAppConfigQueryOptions } from '../../../shared/rust-api/query'; +import { type AppConfigPatch, LogLevel } from '../../../shared/rust-api/types'; +import { ThemeSpacing } from '../../../shared/types'; +import { isPresent } from '../../../shared/utils/isPresent'; + +const LOG_LEVEL_OPTIONS: SelectOption[] = [ + { key: LogLevel.Off, label: 'Off', value: LogLevel.Off }, + { key: LogLevel.Error, label: 'Error', value: LogLevel.Error }, + { key: LogLevel.Warn, label: 'Warn', value: LogLevel.Warn }, + { key: LogLevel.Info, label: 'Info', value: LogLevel.Info }, + { key: LogLevel.Debug, label: 'Debug', value: LogLevel.Debug }, + { key: LogLevel.Trace, label: 'Trace', value: LogLevel.Trace }, +]; + +export const SettingsPage = () => { + const queryClient = useQueryClient(); + const { data: appConfig } = useQuery(getAppConfigQueryOptions); + + const { mutate: patchConfig } = useMutation({ + mutationFn: (patch: AppConfigPatch) => api.setAppConfig(patch, true), + onSuccess: (config) => { + queryClient.setQueryData(getAppConfigQueryOptions.queryKey, config); + }, + onError: (error) => { + console.error(error); + }, + }); + + const selectedLogLevel = useMemo( + () => + LOG_LEVEL_OPTIONS.find((o) => o.value === appConfig?.log_level) ?? + LOG_LEVEL_OPTIONS[3], + [appConfig?.log_level], + ); + + if (!appConfig) return null; + + return ( + + +
    + + { + if (value === null || value === '') return; + patchConfig({ peer_alive_period: Number(value) }); + }} + /> + + + + { + if (value === null || value === '') return; + patchConfig({ mtu: Number(value) }); + }} + /> + + + + + patchConfig({ check_for_updates: !appConfig.check_for_updates }) + } + /> + + +

    + Defguard is made possible by other open-source software.{' '} + +

    +
    +
    + ); +}; + +type SettingRowProps = { + title: string; + description?: string; + children: ReactNode; + // Render the title and control on a single line instead of stacked. + inline?: boolean; + divider?: boolean; +}; + +const SettingRow = ({ + title, + description, + children, + inline = false, + divider = true, +}: SettingRowProps) => ( +
    +
    +

    {title}

    + {inline &&
    {children}
    } +
    + {isPresent(description) && ( + <> + +

    {description}

    + + )} + {!inline && ( + <> + +
    {children}
    + + )} + {divider && } +
    +); diff --git a/new-ui/src/pages/full/SettingsPage/style.scss b/new-ui/src/pages/full/SettingsPage/style.scss new file mode 100644 index 000000000..5a54a9017 --- /dev/null +++ b/new-ui/src/pages/full/SettingsPage/style.scss @@ -0,0 +1,50 @@ +#settings-page-view { + .sections { + display: flex; + flex-direction: column; + + .setting-row { + .head { + display: flex; + align-items: center; + justify-content: space-between; + + .title { + font: var(--t-body-sm-500); + color: var(--fg-white-100); + } + } + + .description { + font: var(--t-body-xs-400); + color: var(--fg-white-70); + } + + .control { + max-width: 321px; + } + } + + .footer { + display: flex; + align-items: center; + gap: var(--spacing-xs); + font: var(--t-body-xs-400); + color: var(--fg-white-60); + + .link { + display: inline-flex; + align-items: center; + gap: var(--spacing-xs); + font: inherit; + color: var(--fg-white-100); + cursor: pointer; + background: transparent; + border: none; + padding: 0; + + --icon-color: var(--fg-white-100); + } + } + } +} diff --git a/new-ui/src/routeTree.gen.ts b/new-ui/src/routeTree.gen.ts index cad051fa0..0f2cbf7aa 100644 --- a/new-ui/src/routeTree.gen.ts +++ b/new-ui/src/routeTree.gen.ts @@ -20,6 +20,7 @@ import { Route as FullEnrollmentRouteImport } from './routes/full/enrollment' import { Route as FullDefaultRouteImport } from './routes/full/_default' import { Route as FullDefaultUpdateRouteImport } from './routes/full/_default/update' import { Route as FullDefaultSupportRouteImport } from './routes/full/_default/support' +import { Route as FullDefaultSettingsRouteImport } from './routes/full/_default/settings' import { Route as FullDefaultOverviewRouteImport } from './routes/full/_default/overview' import { Route as FullDefaultLogRouteImport } from './routes/full/_default/log' import { Route as FullDefaultAddIndexRouteImport } from './routes/full/_default/add/index' @@ -79,6 +80,11 @@ const FullDefaultSupportRoute = FullDefaultSupportRouteImport.update({ path: '/support', getParentRoute: () => FullDefaultRoute, } as any) +const FullDefaultSettingsRoute = FullDefaultSettingsRouteImport.update({ + id: '/settings', + path: '/settings', + getParentRoute: () => FullDefaultRoute, +} as any) const FullDefaultOverviewRoute = FullDefaultOverviewRouteImport.update({ id: '/overview', path: '/overview', @@ -111,6 +117,7 @@ export interface FileRoutesByFullPath { '/playground/': typeof PlaygroundIndexRoute '/full/log': typeof FullDefaultLogRoute '/full/overview': typeof FullDefaultOverviewRoute + '/full/settings': typeof FullDefaultSettingsRoute '/full/support': typeof FullDefaultSupportRoute '/full/update': typeof FullDefaultUpdateRoute '/full/add/instance': typeof FullDefaultAddInstanceRoute @@ -126,6 +133,7 @@ export interface FileRoutesByTo { '/playground': typeof PlaygroundIndexRoute '/full/log': typeof FullDefaultLogRoute '/full/overview': typeof FullDefaultOverviewRoute + '/full/settings': typeof FullDefaultSettingsRoute '/full/support': typeof FullDefaultSupportRoute '/full/update': typeof FullDefaultUpdateRoute '/full/add/instance': typeof FullDefaultAddInstanceRoute @@ -144,6 +152,7 @@ export interface FileRoutesById { '/playground/': typeof PlaygroundIndexRoute '/full/_default/log': typeof FullDefaultLogRoute '/full/_default/overview': typeof FullDefaultOverviewRoute + '/full/_default/settings': typeof FullDefaultSettingsRoute '/full/_default/support': typeof FullDefaultSupportRoute '/full/_default/update': typeof FullDefaultUpdateRoute '/full/_default/add/instance': typeof FullDefaultAddInstanceRoute @@ -162,6 +171,7 @@ export interface FileRouteTypes { | '/playground/' | '/full/log' | '/full/overview' + | '/full/settings' | '/full/support' | '/full/update' | '/full/add/instance' @@ -177,6 +187,7 @@ export interface FileRouteTypes { | '/playground' | '/full/log' | '/full/overview' + | '/full/settings' | '/full/support' | '/full/update' | '/full/add/instance' @@ -194,6 +205,7 @@ export interface FileRouteTypes { | '/playground/' | '/full/_default/log' | '/full/_default/overview' + | '/full/_default/settings' | '/full/_default/support' | '/full/_default/update' | '/full/_default/add/instance' @@ -287,6 +299,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof FullDefaultSupportRouteImport parentRoute: typeof FullDefaultRoute } + '/full/_default/settings': { + id: '/full/_default/settings' + path: '/settings' + fullPath: '/full/settings' + preLoaderRoute: typeof FullDefaultSettingsRouteImport + parentRoute: typeof FullDefaultRoute + } '/full/_default/overview': { id: '/full/_default/overview' path: '/overview' @@ -321,6 +340,7 @@ declare module '@tanstack/react-router' { interface FullDefaultRouteChildren { FullDefaultLogRoute: typeof FullDefaultLogRoute FullDefaultOverviewRoute: typeof FullDefaultOverviewRoute + FullDefaultSettingsRoute: typeof FullDefaultSettingsRoute FullDefaultSupportRoute: typeof FullDefaultSupportRoute FullDefaultUpdateRoute: typeof FullDefaultUpdateRoute FullDefaultAddInstanceRoute: typeof FullDefaultAddInstanceRoute @@ -330,6 +350,7 @@ interface FullDefaultRouteChildren { const FullDefaultRouteChildren: FullDefaultRouteChildren = { FullDefaultLogRoute: FullDefaultLogRoute, FullDefaultOverviewRoute: FullDefaultOverviewRoute, + FullDefaultSettingsRoute: FullDefaultSettingsRoute, FullDefaultSupportRoute: FullDefaultSupportRoute, FullDefaultUpdateRoute: FullDefaultUpdateRoute, FullDefaultAddInstanceRoute: FullDefaultAddInstanceRoute, diff --git a/new-ui/src/routes/full/_default/settings.tsx b/new-ui/src/routes/full/_default/settings.tsx new file mode 100644 index 000000000..488f738c2 --- /dev/null +++ b/new-ui/src/routes/full/_default/settings.tsx @@ -0,0 +1,6 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { SettingsPage } from '../../../pages/full/SettingsPage/SettingsPage'; + +export const Route = createFileRoute('/full/_default/settings')({ + component: SettingsPage, +}); diff --git a/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/FullViewNavigation.tsx b/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/FullViewNavigation.tsx index 0949b1d14..0a5070df9 100644 --- a/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/FullViewNavigation.tsx +++ b/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/FullViewNavigation.tsx @@ -43,6 +43,10 @@ export const FullViewNavigation = () => { icon: IconKind.PlusCircle, to: '/full/add', }, + { + icon: IconKind.Settings, + to: '/full/settings', + }, { icon: IconKind.ActivityNotes, to: '/full/log', From 1369332f6e7b48e005305eba7b8fff12e20247da Mon Sep 17 00:00:00 2001 From: Maciek <19913370+wojcik91@users.noreply.github.com> Date: Mon, 15 Jun 2026 14:27:21 +0200 Subject: [PATCH 046/155] implement base CLI for Linux & Windows (#949) * setup proto crate * migrate proto conversion module * use new proto crate * scaffold core crate * migrate shared code to core crate * extract version constants and into_location into core crate * move app_config and wg_config into core, decouple AppHandle from config I/O * extract proxy HTTP client * extract daemon gRPC client * extract non-macOS connection setup into core * split macOS-only extension management into a dedicated module in core * setup unified connection interface * setup entirprise crates directory and migrate posture checks * migrate provisioning module * migrate config sync module to a crate * migrate service locations * scaffold service daemon crate * migrate service binary * cleanup * fix tauri build * cleanup * merge nix package update from main * cleanup * expose other binaries as nix packages * make config polling independent from tauri * consolidate crate names and workspace dependencies * add a shared connection layer skeleton * migrate desktop client to shared interface * add an active interface state command * setup base CLI structure & status command * WIP: non-MFA connect/disconnect commands * update protos * implement list_interfaces RPC * update protos * use new RPC to determine active state * configure logging verbosity * make the connect process idempotent * update disconnect logic * clippy lint fixes * attempt to fix pubkey matching * implement basic MFA handling * handle no-argument disconnect * fix list formatting * update location list formatting * adjust list formatting * remove clippy warnings * cleanup * add new CLI as nix package output * extract more shared methods * use model methods instead of raw queries * remove more raw queries * wire up unimplemented flags * respect configured MTU * support posture+MFA combined flow * handle daemon unavailable error * avoid exposing mfa codes * add a shared output trait * cleanup * refresh query cache * add unit tests * add mock proxy tests * add mock daemon test * initial review cleanup * add macOS-specific temporary error messages * handle routing override flags * add find_by_name queries * add shortened command aliases * add CommandOutput trait * migrate status command * migrate list command * migrate connect command * migrate disconnect command * migrate location list * migrate location set command * remove unused * cleanup * add instance and tunnel commands * add missing connection type matching * add missing const * add missing flags * fix typo * remove data dir override * avoid holding read lock * will it compile on macOS? * linter fix * update nix flake inputs * cleanup connect command * get the nix package to build with new ui * cleanup disconnect * reenable tray behavior on linux * more cleaning up * display new windows on linux * clarify const names * cleaning up, up, up * remove duplicate connect logic * suprise, more cleaning up * update lockfile * macOS in not happy * update proto submodule * support version subcommand * fix nix package * add flake output * macOS whoopsie * who knows, maybe this time * unused variables * nix package fix * hide unimplemented command * add warning for non-https proxy * add invalid input error * filter inactive peers * add missing mapping * pass new frontend deps derivation for easier workflow integration * restart service on update * add missing dir error * ensure proper json formatting in fallback * fail before I/O * use shared label * cleaning up here and there * improve mock test setup * add comment * add banner * leave a fixme for reference * fix ID overlap edge case * revert ui changes * update logs * review fixes * typo * update nix package * adjust windows pipe concurrency limit * update hashes * add missing dependency --- .github/workflows/test.yml | 8 +- .gitignore | 2 + flake.lock | 18 +- flake.nix | 7 + new-ui/package.json | 4 + new-ui/pnpm-lock.yaml | 45 ++ nix/package.nix | 49 +- nix/shell.nix | 1 + resources-linux/postinst | 12 +- ...2cbbac0b5e5d916877eeb810df275488743b2.json | 110 ++++ ...00f706a9860e6a6f3070305f8ea85b5ff8efb.json | 104 ++++ src-tauri/Cargo.lock | 80 +++ src-tauri/Cargo.toml | 5 +- src-tauri/client-cli/Cargo.toml | 39 ++ src-tauri/client-cli/assets/logo-color.ansi | 9 + src-tauri/client-cli/assets/logo-mono.txt | 7 + src-tauri/client-cli/src/brand.rs | 50 ++ src-tauri/client-cli/src/cli.rs | 173 ++++++ src-tauri/client-cli/src/commands/connect.rs | 242 ++++++++ .../client-cli/src/commands/disconnect.rs | 300 ++++++++++ src-tauri/client-cli/src/commands/instance.rs | 194 +++++++ src-tauri/client-cli/src/commands/list.rs | 332 +++++++++++ src-tauri/client-cli/src/commands/location.rs | 530 ++++++++++++++++++ src-tauri/client-cli/src/commands/mod.rs | 7 + src-tauri/client-cli/src/commands/status.rs | 274 +++++++++ src-tauri/client-cli/src/commands/tunnel.rs | 254 +++++++++ src-tauri/client-cli/src/exit.rs | 60 ++ src-tauri/client-cli/src/logging.rs | 35 ++ src-tauri/client-cli/src/main.rs | 166 ++++++ src-tauri/client-cli/src/mfa.rs | 219 ++++++++ src-tauri/client-cli/src/mfa_code.rs | 183 ++++++ src-tauri/client-cli/src/output.rs | 126 +++++ src-tauri/client-cli/src/resolve.rs | 501 +++++++++++++++++ src-tauri/client-cli/src/state.rs | 92 +++ src-tauri/client-cli/src/tests_daemon.rs | 233 ++++++++ src-tauri/client-cli/src/tests_proxy.rs | 248 ++++++++ src-tauri/common/src/lib.rs | 14 +- src-tauri/core/Cargo.toml | 1 + src-tauri/core/src/connection/active_state.rs | 194 +++++++ src-tauri/core/src/connection/apple.rs | 359 ++++++++++++ .../core/src/connection/daemon_client.rs | 16 +- src-tauri/core/src/connection/mod.rs | 97 ++++ src-tauri/core/src/connection/setup.rs | 15 +- src-tauri/core/src/database/mod.rs | 4 +- .../core/src/database/models/location.rs | 92 ++- src-tauri/core/src/database/models/tunnel.rs | 17 + src-tauri/core/src/error.rs | 4 + src-tauri/core/src/lib.rs | 2 +- src-tauri/core/src/proxy.rs | 2 +- src-tauri/daemon/src/daemon.rs | 55 +- src-tauri/daemon/src/named_pipe.rs | 9 +- .../posture/src/inspector/tests/ci/linux.rs | 2 +- .../service-locations/src/windows.rs | 2 +- src-tauri/proto | 2 +- src-tauri/src/apple.rs | 99 +--- src-tauri/src/bin/defguard-client.rs | 45 +- src-tauri/src/commands.rs | 80 +-- src-tauri/src/tray.rs | 63 +-- src-tauri/src/utils.rs | 50 +- src-tauri/src/window_manager/mod.rs | 31 +- src-tauri/src/window_manager/windows.rs | 28 +- 61 files changed, 5663 insertions(+), 339 deletions(-) create mode 100644 src-tauri/.sqlx/query-2d0bcf92277e9a28d1b7732bd032cbbac0b5e5d916877eeb810df275488743b2.json create mode 100644 src-tauri/.sqlx/query-56b89ac487ed011e33080a9058700f706a9860e6a6f3070305f8ea85b5ff8efb.json create mode 100644 src-tauri/client-cli/Cargo.toml create mode 100644 src-tauri/client-cli/assets/logo-color.ansi create mode 100644 src-tauri/client-cli/assets/logo-mono.txt create mode 100644 src-tauri/client-cli/src/brand.rs create mode 100644 src-tauri/client-cli/src/cli.rs create mode 100644 src-tauri/client-cli/src/commands/connect.rs create mode 100644 src-tauri/client-cli/src/commands/disconnect.rs create mode 100644 src-tauri/client-cli/src/commands/instance.rs create mode 100644 src-tauri/client-cli/src/commands/list.rs create mode 100644 src-tauri/client-cli/src/commands/location.rs create mode 100644 src-tauri/client-cli/src/commands/mod.rs create mode 100644 src-tauri/client-cli/src/commands/status.rs create mode 100644 src-tauri/client-cli/src/commands/tunnel.rs create mode 100644 src-tauri/client-cli/src/exit.rs create mode 100644 src-tauri/client-cli/src/logging.rs create mode 100644 src-tauri/client-cli/src/main.rs create mode 100644 src-tauri/client-cli/src/mfa.rs create mode 100644 src-tauri/client-cli/src/mfa_code.rs create mode 100644 src-tauri/client-cli/src/output.rs create mode 100644 src-tauri/client-cli/src/resolve.rs create mode 100644 src-tauri/client-cli/src/state.rs create mode 100644 src-tauri/client-cli/src/tests_daemon.rs create mode 100644 src-tauri/client-cli/src/tests_proxy.rs create mode 100644 src-tauri/core/src/connection/active_state.rs create mode 100644 src-tauri/core/src/connection/apple.rs diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 76fe8b84e..c9809695c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -68,22 +68,22 @@ jobs: - name: Check format run: | rustup component add rustfmt - cargo fmt -- --check + cargo fmt --all -- --check - name: Run clippy linter run: | mkdir ../dist rustup component add clippy - cargo clippy --all-targets --all-features -- -D warnings + cargo clippy --workspace --all-targets --all-features -- -D warnings - name: Install cargo extensions uses: taiki-e/install-action@v2 with: - tool: cargo-deny + tool: cargo-deny,cargo-nextest - name: Run cargo deny working-directory: ./src-tauri run: cargo deny check - name: Run tests - run: cargo test --locked --no-fail-fast + run: cargo nextest run --workspace --locked --no-fail-fast diff --git a/.gitignore b/.gitignore index d7a8490a2..9688945cc 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,5 @@ src-tauri/gen/ # nix stuff result + +target diff --git a/flake.lock b/flake.lock index 8992d0e17..224a07bdf 100644 --- a/flake.lock +++ b/flake.lock @@ -14,11 +14,11 @@ }, "crane": { "locked": { - "lastModified": 1779130139, - "narHash": "sha256-BLrtr42azquO7MdGFU5a7KiMl3YpFlTeIXqy1fT5GlQ=", + "lastModified": 1780532242, + "narHash": "sha256-D+BsdpxmtUwtqGoY0IXPhHgTlmqgcZKCEo1oMyn7ep0=", "owner": "ipetkov", "repo": "crane", - "rev": "edb38893982a3338972bb4a2ec7ce7c29ba10fd9", + "rev": "59a82a1222dd3b2080b5cc52a1a2e8d5f1b77f37", "type": "github" }, "original": { @@ -59,11 +59,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1779351318, - "narHash": "sha256-f+JACbTqzZ+G92DSnXOUGRhGANb8Blh7CoeYOeBF8/U=", + "lastModified": 1781173989, + "narHash": "sha256-fnzKKPvS+oieI/pTzotA5tkoM47EB1NpaBcgk4R97hE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4a29d733e8a7d5b824c3d8c958a946a9867b3eb2", + "rev": "8c91a71d13451abc40eb9dae8910f972f979852f", "type": "github" }, "original": { @@ -115,11 +115,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1779419951, - "narHash": "sha256-dMX0PUslUHPajP6o8FEoRdFv9afq/dec4POR0vVfjK4=", + "lastModified": 1781234414, + "narHash": "sha256-HdA+P4fKRGOomkewnI/Tww5Wz4xK1O7+hDO90YAsPB4=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "5b5c521d6cae9ef4aa32f888eb2c0ce595c9be52", + "rev": "1d18bfe3de6244c641ca4e8011186d0981b81d76", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 8da372235..3bae665d0 100644 --- a/flake.nix +++ b/flake.nix @@ -68,6 +68,13 @@ mkdir -p $out/bin cp ${defguard-client}/bin/dg $out/bin/ ''; + defguard-cli = + pkgs.runCommand "defguard-cli" { + nativeBuildInputs = [pkgs.makeWrapper]; + } '' + mkdir -p $out/bin + cp ${defguard-client}/bin/defguard-cli $out/bin/ + ''; }; checks.default = defguard-client; diff --git a/new-ui/package.json b/new-ui/package.json index 40a65cd8d..ac272f5ec 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -27,12 +27,15 @@ "@tauri-apps/plugin-fs": "^2.5.1", "@tauri-apps/plugin-http": "^2.5.9", "@tauri-apps/plugin-log": "^2.8.0", + "@tauri-apps/plugin-opener": "^2.3.2", "@tauri-apps/plugin-os": "^2.3.2", + "@types/lodash-es": "^4.17.12", "@uidotdev/usehooks": "^2.4.1", "byte-size": "^9.0.1", "chart.js": "^4.5.1", "clsx": "^2.1.1", "dayjs": "^1.11.21", + "lodash-es": "^4.17.21", "motion": "^12.40.0", "p-timeout": "^7.0.1", "prettier": "^3.8.4", @@ -41,6 +44,7 @@ "react": "^19.2.7", "react-chartjs-2": "^5.3.1", "react-dom": "^19.2.7", + "react-loading-skeleton": "^3.5.0", "react-markdown": "^10.1.0", "rxjs": "^7.8.2", "sass": "^1.101.0", diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index 9b633af1e..949113678 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -50,9 +50,15 @@ importers: '@tauri-apps/plugin-log': specifier: ^2.8.0 version: 2.8.0 + '@tauri-apps/plugin-opener': + specifier: ^2.3.2 + version: 2.5.4 '@tauri-apps/plugin-os': specifier: ^2.3.2 version: 2.3.2 + '@types/lodash-es': + specifier: ^4.17.12 + version: 4.17.12 '@uidotdev/usehooks': specifier: ^2.4.1 version: 2.4.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -68,6 +74,9 @@ importers: dayjs: specifier: ^1.11.21 version: 1.11.21 + lodash-es: + specifier: ^4.17.21 + version: 4.18.1 motion: specifier: ^12.40.0 version: 12.40.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -92,6 +101,9 @@ importers: react-dom: specifier: ^19.2.7 version: 19.2.7(react@19.2.7) + react-loading-skeleton: + specifier: ^3.5.0 + version: 3.5.0(react@19.2.7) react-markdown: specifier: ^10.1.0 version: 10.1.0(@types/react@19.2.17)(react@19.2.7) @@ -875,6 +887,9 @@ packages: '@tauri-apps/plugin-log@2.8.0': resolution: {integrity: sha512-a+7rOq3MJwpTOLLKbL8d0qGZ85hgHw5pNOWusA9o3cf7cEgtYHiGY/+O8fj8MvywQIGqFv0da2bYQDlrqLE7rw==} + '@tauri-apps/plugin-opener@2.5.4': + resolution: {integrity: sha512-1HnPkb+AmgO29HBazm4uPLKB+r7zzcTBW1d0fyYp1uP+jwtpoiNDGKMMzz58SFp49nOIrxdE3aUJtT57lfO9CQ==} + '@tauri-apps/plugin-os@2.3.2': resolution: {integrity: sha512-n+nXWeuSeF9wcEsSPmRnBEGrRgOy6jjkSU+UVCOV8YUGKb2erhDOxis7IqRXiRVHhY8XMKks00BJ0OAdkpf6+A==} @@ -896,6 +911,12 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.24': + resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} + '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -1448,6 +1469,9 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} @@ -1701,6 +1725,11 @@ packages: peerDependencies: react: ^19.2.7 + react-loading-skeleton@3.5.0: + resolution: {integrity: sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ==} + peerDependencies: + react: '>=16.8.0' + react-markdown@10.1.0: resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==} peerDependencies: @@ -2670,6 +2699,10 @@ snapshots: dependencies: '@tauri-apps/api': 2.11.0 + '@tauri-apps/plugin-opener@2.5.4': + dependencies: + '@tauri-apps/api': 2.11.0 + '@tauri-apps/plugin-os@2.3.2': dependencies: '@tauri-apps/api': 2.11.0 @@ -2695,6 +2728,12 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.24 + + '@types/lodash@4.17.24': {} + '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -3139,6 +3178,8 @@ snapshots: lines-and-columns@1.2.4: {} + lodash-es@4.18.1: {} + lodash.truncate@4.4.2: {} longest-streak@3.1.0: {} @@ -3521,6 +3562,10 @@ snapshots: react: 19.2.7 scheduler: 0.27.0 + react-loading-skeleton@3.5.0(react@19.2.7): + dependencies: + react: 19.2.7 + react-markdown@10.1.0(@types/react@19.2.17)(react@19.2.7): dependencies: '@types/hast': 3.0.4 diff --git a/nix/package.nix b/nix/package.nix index b2d52a157..547c50fac 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -90,11 +90,40 @@ inherit pname version pnpm; src = ../.; fetcherVersion = 3; - hash = "sha256-7B5+C3q+jVQ2taKcfZkfTvH37OBDIPDM/4LLRqWPE+I="; + hash = "sha256-WjcZeKfEEjcry5dJ12yL+dz+/v5CmKSg0iHfYcoOtag="; + }; + + # Prefetch pnpm dependencies for the new UI (separate pnpm project). + newUiPnpmDeps = fetchPnpmDeps { + pname = "defguard-client-new-ui"; + inherit version pnpm; + src = ../new-ui; + fetcherVersion = 3; + hash = "sha256-77eqX4iJs6zxEjguTG0Nf1k2tK+lYJ084sEsbdkl678="; + }; + + # Pre-build the new UI frontend so Tauri can serve it as WebviewUrl::App("compact/") and "full/". + newUiDist = pkgs.stdenv.mkDerivation { + pname = "defguard-client-new-ui"; + inherit version; + src = ../new-ui; + nativeBuildInputs = [pkgs.nodejs_24 pnpm pnpmConfigHook]; + pnpmDeps = newUiPnpmDeps; + buildPhase = '' + runHook preBuild + pnpm tsc -b + pnpm vite build --outDir "$out" + # Create entry points for compact and full view windows. + mkdir -p "$out"/compact "$out"/full + cp "$out"/index.html "$out"/compact/ + cp "$out"/index.html "$out"/full/ + runHook postBuild + ''; + installPhase = "true"; }; in craneLib.mkCargoDerivation { - inherit pname version buildInputs cargoArtifacts cargoVendorDir pnpmDeps; + inherit pname version buildInputs cargoArtifacts cargoVendorDir pnpmDeps newUiDist; src = ../.; @@ -140,9 +169,10 @@ in buildPhase = '' runHook preBuild - # Build the frontend first; tauri's beforeBuildCommand is suppressed - # below to avoid running pnpm build a second time. + # Build the old frontend and copy in the pre-built new UI. pnpm build + cp -r ${newUiDist}/* dist/ + chmod -R u+w dist/ # --config replaces the build section from tauri.linux.conf.json. pnpm tauri build \ @@ -161,6 +191,7 @@ in mkdir -p $out/bin install -Dm755 "$targetDir/${pname}" $out/bin/${pname} install -Dm755 "$targetDir/defguard-service" $out/bin/defguard-service + install -Dm755 "$targetDir/defguard-cli" $out/bin/defguard-cli install -Dm755 "$targetDir/dg" $out/bin/dg mkdir -p $out/lib/${pname} @@ -188,10 +219,14 @@ in SQLX_OFFLINE = "true"; doInstallCargoArtifacts = false; - # passthru attrs are ignored by the build but addressable by external tools: - # pnpmDeps — referenced by the update-pnpm-hash.yaml CI workflow + # passthru attrs are ignored by the build but addressable by external tools. + # There are TWO pnpm lockfiles, each with its own pinned hash that must be kept + # current when the corresponding lockfile changes: + # pnpmDeps - root pnpm project (../pnpm-lock.yaml) + # newUiPnpmDeps - new-ui pnpm project (../new-ui/pnpm-lock.yaml) + # Any hash-refresh automation (e.g. an update-pnpm-hash workflow) must update both. passthru = { - inherit pnpmDeps; + inherit pnpmDeps newUiPnpmDeps; }; meta = with lib; { diff --git a/nix/shell.nix b/nix/shell.nix index 3ed2e761a..36afd3327 100644 --- a/nix/shell.nix +++ b/nix/shell.nix @@ -30,6 +30,7 @@ in rustToolchain trunk sqlx-cli + cargo-nextest vtsls trivy ]; diff --git a/resources-linux/postinst b/resources-linux/postinst index 1dac4b2b9..b42221e18 100644 --- a/resources-linux/postinst +++ b/resources-linux/postinst @@ -76,8 +76,16 @@ case "$1" in # Enable service to start on boot systemctl enable "$SERVICE_NAME" - # Start the service now - systemctl start "$SERVICE_NAME" + # On a fresh install ($2 is empty) start the service; on an upgrade + # ($2 holds the previous version) restart it so the new daemon binary + # is loaded - otherwise an already-running old daemon keeps serving and + # lacks newly added RPCs (e.g. list_interfaces used by the CLI). + # try-restart leaves a deliberately-stopped service stopped. + if [ -z "$2" ]; then + systemctl start "$SERVICE_NAME" + else + systemctl try-restart "$SERVICE_NAME" + fi fi ;; diff --git a/src-tauri/.sqlx/query-2d0bcf92277e9a28d1b7732bd032cbbac0b5e5d916877eeb810df275488743b2.json b/src-tauri/.sqlx/query-2d0bcf92277e9a28d1b7732bd032cbbac0b5e5d916877eeb810df275488743b2.json new file mode 100644 index 000000000..ca3178afb --- /dev/null +++ b/src-tauri/.sqlx/query-2d0bcf92277e9a28d1b7732bd032cbbac0b5e5d916877eeb810df275488743b2.json @@ -0,0 +1,110 @@ +{ + "db_name": "SQLite", + "query": "SELECT id \"id: _\", name, pubkey, prvkey, address, server_pubkey, preshared_key, allowed_ips, endpoint, dns, persistent_keep_alive, route_all_traffic, pre_up, post_up, pre_down, post_down FROM tunnel WHERE name = $1 ORDER BY name ASC", + "describe": { + "columns": [ + { + "name": "id: _", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "name", + "ordinal": 1, + "type_info": "Text" + }, + { + "name": "pubkey", + "ordinal": 2, + "type_info": "Text" + }, + { + "name": "prvkey", + "ordinal": 3, + "type_info": "Text" + }, + { + "name": "address", + "ordinal": 4, + "type_info": "Text" + }, + { + "name": "server_pubkey", + "ordinal": 5, + "type_info": "Text" + }, + { + "name": "preshared_key", + "ordinal": 6, + "type_info": "Text" + }, + { + "name": "allowed_ips", + "ordinal": 7, + "type_info": "Text" + }, + { + "name": "endpoint", + "ordinal": 8, + "type_info": "Text" + }, + { + "name": "dns", + "ordinal": 9, + "type_info": "Text" + }, + { + "name": "persistent_keep_alive", + "ordinal": 10, + "type_info": "Integer" + }, + { + "name": "route_all_traffic", + "ordinal": 11, + "type_info": "Bool" + }, + { + "name": "pre_up", + "ordinal": 12, + "type_info": "Text" + }, + { + "name": "post_up", + "ordinal": 13, + "type_info": "Text" + }, + { + "name": "pre_down", + "ordinal": 14, + "type_info": "Text" + }, + { + "name": "post_down", + "ordinal": 15, + "type_info": "Text" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + true, + true, + false, + true, + false, + false, + true, + true, + true, + true + ] + }, + "hash": "2d0bcf92277e9a28d1b7732bd032cbbac0b5e5d916877eeb810df275488743b2" +} diff --git a/src-tauri/.sqlx/query-56b89ac487ed011e33080a9058700f706a9860e6a6f3070305f8ea85b5ff8efb.json b/src-tauri/.sqlx/query-56b89ac487ed011e33080a9058700f706a9860e6a6f3070305f8ea85b5ff8efb.json new file mode 100644 index 000000000..c40c1f567 --- /dev/null +++ b/src-tauri/.sqlx/query-56b89ac487ed011e33080a9058700f706a9860e6a6f3070305f8ea85b5ff8efb.json @@ -0,0 +1,104 @@ +{ + "db_name": "SQLite", + "query": "SELECT id, instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\", service_location_mode \"service_location_mode: ServiceLocationMode\", mfa_method \"mfa_method: _\", posture_check_required FROM location WHERE name = $1 AND service_location_mode <= $2 ORDER BY name ASC", + "describe": { + "columns": [ + { + "name": "id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "instance_id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "name", + "ordinal": 2, + "type_info": "Text" + }, + { + "name": "address", + "ordinal": 3, + "type_info": "Text" + }, + { + "name": "pubkey", + "ordinal": 4, + "type_info": "Text" + }, + { + "name": "endpoint", + "ordinal": 5, + "type_info": "Text" + }, + { + "name": "allowed_ips", + "ordinal": 6, + "type_info": "Text" + }, + { + "name": "dns", + "ordinal": 7, + "type_info": "Text" + }, + { + "name": "network_id", + "ordinal": 8, + "type_info": "Integer" + }, + { + "name": "route_all_traffic", + "ordinal": 9, + "type_info": "Bool" + }, + { + "name": "keepalive_interval", + "ordinal": 10, + "type_info": "Integer" + }, + { + "name": "location_mfa_mode: LocationMfaMode", + "ordinal": 11, + "type_info": "Integer" + }, + { + "name": "service_location_mode: ServiceLocationMode", + "ordinal": 12, + "type_info": "Integer" + }, + { + "name": "mfa_method: _", + "ordinal": 13, + "type_info": "Integer" + }, + { + "name": "posture_check_required", + "ordinal": 14, + "type_info": "Bool" + } + ], + "parameters": { + "Right": 2 + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false, + true, + false, + false, + false, + false, + false, + true, + false + ] + }, + "hash": "56b89ac487ed011e33080a9058700f706a9860e6a6f3070305f8ea85b5ff8efb" +} diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 0476413dd..e93ac5df7 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1398,6 +1398,30 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "defguard-cli" +version = "2.1.0" +dependencies = [ + "clap", + "defguard-client-common", + "defguard-client-core", + "defguard-client-posture", + "defguard-client-proto", + "owo-colors", + "reqwest 0.13.4", + "secrecy", + "serde", + "serde_json", + "sqlx", + "tempfile", + "thiserror 2.0.18", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-subscriber", +] + [[package]] name = "defguard-client" version = "2.1.0" @@ -1512,6 +1536,7 @@ dependencies = [ "defguard-client-proto", "defguard_wireguard_rs", "dirs-next", + "hex", "hyper-util", "log", "nix", @@ -3253,6 +3278,17 @@ dependencies = [ "once_cell", ] +[[package]] +name = "is-terminal" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.61.2", +] + [[package]] name = "is-wsl" version = "0.4.0" @@ -3263,6 +3299,12 @@ dependencies = [ "once_cell", ] +[[package]] +name = "is_ci" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" + [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -4436,6 +4478,16 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "owo-colors" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" +dependencies = [ + "supports-color 2.1.0", + "supports-color 3.0.2", +] + [[package]] name = "pango" version = "0.18.3" @@ -5640,6 +5692,15 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" +[[package]] +name = "secrecy" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" +dependencies = [ + "zeroize", +] + [[package]] name = "security-framework" version = "3.7.0" @@ -6341,6 +6402,25 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "supports-color" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89" +dependencies = [ + "is-terminal", + "is_ci", +] + +[[package]] +name = "supports-color" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6" +dependencies = [ + "is_ci", +] + [[package]] name = "swift-rs" version = "1.0.7" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 7c9792955..992a7e5c1 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [workspace] -members = ["cli", "common", "client-proto", "core", "daemon", "enterprise/posture", "enterprise/provisioning", "enterprise/config-sync", "enterprise/service-locations"] -default-members = [".", "cli", "daemon"] +members = ["cli", "client-cli", "common", "client-proto", "core", "daemon", "enterprise/posture", "enterprise/provisioning", "enterprise/config-sync", "enterprise/service-locations"] +default-members = [".", "cli", "client-cli", "daemon"] [workspace.dependencies] base64 = "0.22" @@ -10,6 +10,7 @@ dirs-next = "2.0" log = { version = "0.4", features = ["serde"] } prost = "0.14" reqwest = { version = "0.13", features = ["cookies", "json"] } +secrecy = "0.10" semver = { version = "1.0", features = ["serde"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" diff --git a/src-tauri/client-cli/Cargo.toml b/src-tauri/client-cli/Cargo.toml new file mode 100644 index 000000000..0922debb5 --- /dev/null +++ b/src-tauri/client-cli/Cargo.toml @@ -0,0 +1,39 @@ +[package] +name = "defguard-cli" +description = "Command-line client for Defguard VPN - connect, disconnect, status" +authors.workspace = true +edition.workspace = true +homepage.workspace = true +license-file = "../../LICENSE.md" +rust-version.workspace = true +version.workspace = true + +[[bin]] +name = "defguard-cli" + +[dependencies] +clap = { workspace = true, features = ["cargo", "derive", "env"] } +owo-colors = { version = "4", features = ["supports-colors"] } + +common = { package = "defguard-client-common", path = "../common" } +defguard_core = { package = "defguard-client-core", path = "../core" } +defguard_client_posture = { package = "defguard-client-posture", path = "../enterprise/posture" } +defguard_client_proto = { package = "defguard-client-proto", path = "../client-proto" } +reqwest.workspace = true +secrecy.workspace = true +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true +sqlx.workspace = true +thiserror.workspace = true +tokio.workspace = true +tracing.workspace = true +tracing-subscriber = { workspace = true, features = ["env-filter"] } + +# Dummy feature to let tauri build the release. +[features] +custom-protocol = [] + +[dev-dependencies] +tempfile.workspace = true +tokio-stream = "0.1" +tonic.workspace = true diff --git a/src-tauri/client-cli/assets/logo-color.ansi b/src-tauri/client-cli/assets/logo-color.ansi new file mode 100644 index 000000000..554ca7dad --- /dev/null +++ b/src-tauri/client-cli/assets/logo-color.ansi @@ -0,0 +1,9 @@ + ▋▌  + ▂▀▂▃▆▃▋▌ ▅ ▅▂▅ ▊▖ +▕▅ ▆▖▌ ▁▁▁▁▕▊ ▁▁▁ ▁▏▁▁ ▁▁▁▅▅ ▁ ▁ ▁▁▁ ▁▁▁▁ ▁▁▁ ▊▋ +▕ ▃▅▆▀▂ ▘▀▅▅▅▚▊ ▀▗▆▆▅▚▖ ▅▎▅▅ ▗▗▆▆▆▚ ▊▋ ▎▎ ▗▗▆▆▅▝ ▊▕▅▅▅ ▆▀▅▅▅▗▋ +▏▗▆ ▆▖▆▖ ▊▊ ▊▊ ▊▕▀▀▀▀▘▋ ▏ ▋▋ ▎▎ ▊▋ ▎▎ ▀▀▀▀▘▎ ▊▕ ▊▋ ▋▋ +▕▆▀▆▅▃▅▌▌ ▊▊ ▊▊ ▏ ▗▖ ▏ ▗▗▀▀▅▆ ▊▋ ▎▎ ▏▘ ▍▎ ▊▕ ▊▋ ▌▋ +▕▁ ▌▌ ▝▂▆▅▂▅▂ ▝▃▆▀▂▀ ▂ ▃▃▀▀▀▀▆ ▀▂▅▆▀▂ ▝▂▀▀▂▂▎ ▊▂ ▀▂▅▅▂▅▘ +▆▀▂▅▀▆▃▖▌ ▖▃▂▂▂▂▚  + ▆ ▗▚▘ ▔▔▔▔▔  diff --git a/src-tauri/client-cli/assets/logo-mono.txt b/src-tauri/client-cli/assets/logo-mono.txt new file mode 100644 index 000000000..6dd8630a6 --- /dev/null +++ b/src-tauri/client-cli/assets/logo-mono.txt @@ -0,0 +1,7 @@ + ▁▂▁ ▐ +▄▆▀▔▀▆▟ ▕▉ ▕█▀▘ ▁▂▁ ▕▉ +▊▁▂▄▂▁▝ ▁▅▆▀▀▅▉ ▗▅▀▀▆▃▕▕█▆ ▕▅▀▀▜▌▔▗▖ ▆ ▗▆▀▀▆▖ ▗▆▘▘ ▅▇▀▀▅▉ +██▔▔▔█▆ ▕▉ ▕▉ █▙▄▄▄█ ▕█ ▝▉▁▁▟▊ ▐▌ █▎▔▄▅▅▅▉ ▐▉ ▐▉ ▐▉ +▊▔▀▀▀▔▐ ▕█▂▁▁▟▉ ▀▙▁▁▂▅ ▕█ ▕█▃▃▃▂▁▐▙▁▁▃█▎▐▋▁▁▟▉ ▐▉ ▝█▂▁▁▟▉ +▀▅▃▁▃▅█ ▔▀▀▀▔▔ ▔▔▀▔▔ ▕▔ ▟▍▔▔▔▐▌ ▔▀▀▔▔ ▔▔▀▀▔▔ ▔▔ ▔▀▀▔▔▔ + ▔▔▀▔▃█ ▔▀▀▀▀▔▔ diff --git a/src-tauri/client-cli/src/brand.rs b/src-tauri/client-cli/src/brand.rs new file mode 100644 index 000000000..3883327cb --- /dev/null +++ b/src-tauri/client-cli/src/brand.rs @@ -0,0 +1,50 @@ +//! Defguard CLI brand banner -- logo + copyright + version line. +//! +//! Shown when invoked with no arguments or with `--help`. +//! Suppressed for `--version` (which must stay grep-friendly). +//! +//! Two assets: +//! - assets/logo-color.ansi -- ANSI block-character art, +//! used when stdout is an interactive TTY +//! - assets/logo-mono.txt -- plain ASCII fallback (no ANSI), +//! used when output is piped/redirected or NO_COLOR is set +//! +//! Both assets are embedded at compile time via `include_str!`. + +use owo_colors::{OwoColorize, Stream}; + +const LOGO_COLOR: &str = include_str!("../assets/logo-color.ansi"); +const LOGO_MONO: &str = include_str!("../assets/logo-mono.txt"); + +const COPYRIGHT: &str = "Copyright (C) 2026 Defguard Sp. z o.o."; + +/// Print logo + copyright + project name/version to stdout. Picks +/// the colored variant on an interactive TTY, the mono fallback +/// otherwise (so `defguard-cli --help | cat` stays clean ASCII). +pub fn print_banner() { + // owo-colors' supports-colors detection drives the choice: if + // stdout supports color, emit the ANSI variant; otherwise mono. + // We do not feed the logo through if_supports_color directly -- + // it carries its own ANSI escapes -- we just gate which string + // we emit. NO_COLOR / CLICOLOR_FORCE propagate via the + // supports_color() helper. + let use_color = "x" + .if_supports_color(Stream::Stdout, |s| s.red()) + .to_string() + != "x"; + + let logo = if use_color { LOGO_COLOR } else { LOGO_MONO }; + println!("{logo}"); + + let project = common::version_string("defguard-cli"); + if use_color { + let p = project.bright_yellow().bold().to_string(); + let c = COPYRIGHT.dimmed().to_string(); + println!(" {p}"); + println!(" {c}"); + } else { + println!(" {project}"); + println!(" {COPYRIGHT}"); + } + println!(); +} diff --git a/src-tauri/client-cli/src/cli.rs b/src-tauri/client-cli/src/cli.rs new file mode 100644 index 000000000..a99ec08ab --- /dev/null +++ b/src-tauri/client-cli/src/cli.rs @@ -0,0 +1,173 @@ +use clap::{Parser, Subcommand}; + +/// Command-line client for the Defguard VPN. +/// +/// Shares the same database as the desktop client. +#[derive(Parser)] +#[command(name = "defguard-cli", version, about)] +pub struct Cli { + /// Output machine-readable JSON instead of human-readable tables. + #[arg(long, global = true)] + pub json: bool, + + /// Increase log verbosity (staged: -v INFO, -vv DEBUG, -vvv TRACE). + /// Diagnostics go to stderr. Honors DG_LOG / RUST_LOG env. + #[arg(short = 'v', long, action = clap::ArgAction::Count, global = true)] + pub verbose: u8, + + #[command(subcommand)] + pub command: Commands, +} + +#[derive(Subcommand)] +pub enum Commands { + /// List all configured instances, locations, and tunnels. + List, + + /// Show currently-active VPN connections (live state from the daemon). + #[command(alias = "s")] + Status, + + /// Connect to a location or tunnel. + #[command(alias = "c")] + Connect { + /// Location or tunnel name. If omitted, connects to the sole configured + /// location (error if ambiguous). + name: Option, + + /// Connect to a tunnel instead of a location. + #[arg(long)] + tunnel: bool, + + /// Target by id (fast path, skips name resolution). + #[arg(long)] + id: Option, + + /// Instance name qualifier when the same location name exists in multiple + /// instances. + #[arg(long)] + instance: Option, + + /// MFA authentication code (TOTP / email). + #[arg(long)] + code: Option, + + /// Shell command that prints the MFA code to stdout. Receives + /// DG_INSTANCE and DG_LOCATION in its environment. + #[arg(long)] + code_command: Option, + + /// Override the persisted MFA method. + #[arg(long)] + mfa_method: Option, + + /// Override route-all-traffic for this connection only. + #[arg(long, overrides_with = "predefined_traffic")] + all_traffic: bool, + + /// Do not route all traffic (overrides location default). + #[arg(long, overrides_with = "all_traffic")] + predefined_traffic: bool, + }, + + /// Disconnect from a location or tunnel. + #[command(alias = "d")] + Disconnect { + /// Location or tunnel name. If omitted, disconnects the sole active + /// connection (error if ambiguous). + name: Option, + + /// Disconnect a tunnel instead of a location. + #[arg(long)] + tunnel: bool, + + /// Target by id. + #[arg(long)] + id: Option, + + /// Instance name qualifier. + #[arg(long)] + instance: Option, + + /// Disconnect all active connections. + #[arg(long)] + all: bool, + }, + + /// Manage locations (view settings, set MFA method, routing). + #[command(subcommand, alias = "l")] + Location(LocationCommand), + + /// Manage instances. + #[command(subcommand)] + Instance(InstanceCommand), + + /// Manage imported WireGuard tunnels. + #[command(subcommand)] + Tunnel(TunnelCommand), + + /// Enroll a new instance (alternative to the desktop enrollment flow). + // TODO: Hidden until implemented + #[command(hide = true)] + Enroll { + /// Enrollment token. + #[arg(long, env = "DG_ENROLLMENT_TOKEN")] + token: String, + + /// Proxy / Edge URL for enrollment. + #[arg(long, env = "DG_URL")] + url: String, + }, +} + +#[derive(Subcommand)] +pub enum LocationCommand { + /// List all locations. + List, + + /// Show details for a location. + Show { + name: String, + + #[arg(long)] + instance: Option, + }, + + /// Persist a per-location preference. + Set { + name: String, + + #[arg(long)] + instance: Option, + + /// Override the MFA method (totp, email, oidc, mobile). + #[arg(long)] + mfa_method: Option, + + /// Always route all traffic through this location. + #[arg(long, overrides_with = "predefined_traffic")] + route_all_traffic: bool, + + /// Never route all traffic through this location. + #[arg(long, overrides_with = "route_all_traffic")] + predefined_traffic: bool, + }, +} + +#[derive(Subcommand)] +pub enum InstanceCommand { + /// List all enrolled instances. + List, + + /// Show details for an instance. + Show { name: String }, +} + +#[derive(Subcommand)] +pub enum TunnelCommand { + /// List all imported tunnels. + List, + + /// Show details for a tunnel. + Show { name: String }, +} diff --git a/src-tauri/client-cli/src/commands/connect.rs b/src-tauri/client-cli/src/commands/connect.rs new file mode 100644 index 000000000..c39b11bae --- /dev/null +++ b/src-tauri/client-cli/src/commands/connect.rs @@ -0,0 +1,242 @@ +use std::io::{stdin, IsTerminal}; + +use defguard_client_posture::{authorize_posture_session, get_posture_data}; +use defguard_core::database::models::instance::Instance; +use secrecy::ExposeSecret; + +use defguard_core::connection::{active_state::active_state, bring_up, ConnectionTarget}; +use defguard_core::ConnectionType; +use serde_json::json; +use tracing::info; + +use crate::{ + mfa, + mfa_code::CodeSource, + output::CommandOutput, + resolve::{resolve_connect_target, ResolvedTarget, TargetSpec}, + state::{CliError, State}, +}; + +#[allow(clippy::too_many_arguments)] +#[cfg_attr(target_os = "macos", allow(unused_variables, unreachable_code))] +pub async fn handle( + state: &State, + name: Option<&str>, + tunnel: bool, + id: Option, + instance: Option<&str>, + code: Option<&str>, + code_command: Option<&str>, + mfa_method: Option<&str>, + all_traffic: bool, + predefined_traffic: bool, +) -> Result { + #[cfg(target_os = "macos")] + { + return Err(CliError::Other( + "VPN connection management is not yet supported on macOS from the CLI. \ + Use the desktop client." + .into(), + )); + } + + // Per-call routing override: --all-traffic = true, --predefined-traffic = false, + // neither = None (use the location/tunnel default). + let routing_override: Option = if all_traffic { + Some(true) + } else if predefined_traffic { + Some(false) + } else { + None + }; + + let spec = TargetSpec { + name: name.map(String::from), + tunnel, + id, + instance: instance.map(String::from), + }; + + let target = resolve_connect_target(&spec, &state.pool).await?; + + // Idempotency: if the target is already connected, report and exit 0. + let (target_id, target_connection_type, target_name) = match &target { + ResolvedTarget::Location(loc) => (loc.id, ConnectionType::Location, loc.name.as_str()), + ResolvedTarget::Tunnel(tun) => (tun.id, ConnectionType::Tunnel, tun.name.as_str()), + }; + let active = active_state(&state.pool).await?; + if active + .iter() + .any(|c| c.connection_type == target_connection_type && c.target_id == target_id) + { + return Ok(ConnectResult::AlreadyConnected { + name: target_name.to_string(), + }); + } + + let (target_name, psk, mtu) = match &target { + ResolvedTarget::Location(location) => { + if location.mfa_enabled() { + // Determine the MFA code source from CLI flags. + let code_source = code + .map(|c| CodeSource::Literal(c.to_string())) + .or_else(|| code_command.map(|cmd| CodeSource::Command(cmd.to_string()))); + + let source = if let Some(code_source) = code_source { + code_source + } else if stdin().is_terminal() { + CodeSource::Interactive + } else { + return Err(CliError::MfaInputRequired(format!( + "Location '{}' requires MFA but no --code, --code-command, or TTY is available.", + location.name + ))); + }; + + let instance = Instance::find_by_id(&state.pool, location.instance_id) + .await + .map_err(|e| CliError::Other(format!("Failed to load instance: {e}")))? + .ok_or_else(|| { + CliError::Other(format!("Instance {} not found", location.instance_id)) + })?; + + // When posture is also required, collect posture data and pass it + // into the MFA start request so the server can validate both together. + let posture_data = if location.posture_check_required { + Some( + get_posture_data() + .await + .map_err(|e| CliError::Other(e.to_string()))?, + ) + } else { + None + }; + + let psk = mfa::authorize( + location, + &source, + &instance, + mfa_method, + posture_data, + &state.pool, + ) + .await?; + ( + location.name.clone(), + Some(psk.expose_secret().to_string()), + state.app_config.mtu(), + ) + } else if location.posture_check_required { + // Posture only (no MFA). + let psk = authorize_posture_session(location) + .await + .map_err(|e| CliError::Other(e.to_string()))?; + (location.name.clone(), Some(psk), state.app_config.mtu()) + } else { + (location.name.clone(), None, state.app_config.mtu()) + } + } + ResolvedTarget::Tunnel(tun) => ( + tun.name.clone(), + tun.preshared_key.clone(), + state.app_config.mtu(), + ), + }; + + info!("Connecting to {target_name}..."); + let conn_target = match &target { + ResolvedTarget::Location(loc) => ConnectionTarget::Location(loc), + ResolvedTarget::Tunnel(tun) => ConnectionTarget::Tunnel(tun), + }; + bring_up(conn_target, psk, mtu, &state.pool, routing_override).await?; + + Ok(ConnectResult::Connected { name: target_name }) +} + +pub enum ConnectResult { + /// A new connection was established. + Connected { name: String }, + /// The target was already connected (idempotent). + AlreadyConnected { name: String }, +} + +impl CommandOutput for ConnectResult { + fn human(&self) -> String { + match self { + ConnectResult::Connected { name } => format!("Connected to {name}"), + ConnectResult::AlreadyConnected { name } => { + format!("Already connected to {name}") + } + } + } + + fn json(&self) -> serde_json::Value { + match self { + ConnectResult::Connected { name } => json!({ + "connected": name, + }), + ConnectResult::AlreadyConnected { name } => json!({ + "connected": name, + "already": true, + }), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_connected_human() { + let result = ConnectResult::Connected { + name: "office".to_string(), + }; + assert_eq!(result.human(), "Connected to office"); + } + + #[test] + fn test_already_connected_human() { + let result = ConnectResult::AlreadyConnected { + name: "office".to_string(), + }; + assert_eq!(result.human(), "Already connected to office"); + } + + #[test] + fn test_connected_json() { + let result = ConnectResult::Connected { + name: "office".to_string(), + }; + let json = result.json(); + assert_eq!(json["connected"], "office"); + assert!(json["already"].is_null()); + } + + #[test] + fn test_already_connected_json() { + let result = ConnectResult::AlreadyConnected { + name: "office".to_string(), + }; + let json = result.json(); + assert_eq!(json["connected"], "office"); + assert_eq!(json["already"], true); + } + + #[test] + fn test_json_no_message_field() { + let result = ConnectResult::Connected { + name: "office".to_string(), + }; + let json = result.json(); + assert!(json["message"].is_null()); + } + + #[test] + fn test_exit_code_zero() { + let result = ConnectResult::Connected { + name: "office".to_string(), + }; + assert_eq!(result.exit_code(), 0); + } +} diff --git a/src-tauri/client-cli/src/commands/disconnect.rs b/src-tauri/client-cli/src/commands/disconnect.rs new file mode 100644 index 000000000..c65b3a72e --- /dev/null +++ b/src-tauri/client-cli/src/commands/disconnect.rs @@ -0,0 +1,300 @@ +use defguard_core::{ + connection::{active_state::active_state, tear_down}, + ConnectionType, +}; +use serde_json::json; +use tracing::{error, info}; + +use crate::{ + output::CommandOutput, + resolve::resolve_disconnect_target, + resolve::{ResolvedTarget, TargetSpec}, + state::{CliError, State}, +}; + +#[cfg_attr(target_os = "macos", allow(unused_variables, unreachable_code))] +pub async fn handle( + state: &State, + name: Option<&str>, + tunnel: bool, + id: Option, + instance: Option<&str>, + all: bool, +) -> Result { + #[cfg(target_os = "macos")] + { + return Err(CliError::Other( + "VPN connection management is not yet supported on macOS from the CLI. \ + Use the desktop client." + .into(), + )); + } + + if all { + // Disconnect all currently-active connections. + let active = active_state(&state.pool).await?; + + if active.is_empty() { + return Ok(DisconnectResult::NoneActive); + } + + let mut disconnected = Vec::with_capacity(active.len()); + let mut errors = Vec::new(); + + for connection in &active { + let name = connection.name.clone(); + info!( + "Disconnecting {name} on interface {}...", + connection.interface_name + ); + match tear_down(connection).await { + Ok(()) => { + info!("Disconnected {name} ({})", connection.interface_name); + disconnected.push(name); + } + Err(e) => { + let msg = format!("Failed to disconnect {name}: {e}"); + error!("{msg}"); + errors.push(msg); + } + } + } + + Ok(DisconnectResult::All { + disconnected, + errors, + }) + } else { + // No-arg disconnect: if exactly one connection is active, disconnect it. + if name.is_none() && !tunnel && id.is_none() && instance.is_none() { + let active = active_state(&state.pool).await?; + + match active.len() { + 0 => { + return Ok(DisconnectResult::NoneActive); + } + 1 => { + let connection = &active[0]; + let ifname = connection.interface_name.clone(); + let name = connection.name.clone(); + info!("Disconnecting sole active connection {name} on interface {ifname}..."); + tear_down(connection).await?; + return Ok(DisconnectResult::Single { + name, + interface: ifname, + }); + } + _ => { + let names: Vec<_> = active.iter().map(|c| c.name.as_str()).collect(); + return Err(CliError::Usage(format!( + "Multiple active connections ({}). Specify which to disconnect, --all to disconnect all.", + names.join(", ") + ))); + } + } + } + + let spec = TargetSpec { + name: name.map(String::from), + tunnel, + id, + instance: instance.map(String::from), + }; + + let target = resolve_disconnect_target(&spec, &state.pool).await?; + + let (target_id, target_connection_type, target_name) = match &target { + ResolvedTarget::Location(loc) => (loc.id, ConnectionType::Location, loc.name.clone()), + ResolvedTarget::Tunnel(tun) => (tun.id, ConnectionType::Tunnel, tun.name.clone()), + }; + + // Look up the actual interface name from active_state. + let active = active_state(&state.pool).await?; + + let connection = active + .iter() + .find(|c| c.connection_type == target_connection_type && c.target_id == target_id) + .ok_or_else(|| { + CliError::NotFound(format!("'{target_name}' is not currently connected")) + })?; + + let ifname = connection.interface_name.clone(); + + info!("Disconnecting {target_name} on interface {ifname}..."); + + tear_down(connection).await?; + + Ok(DisconnectResult::Single { + name: target_name, + interface: ifname, + }) + } +} + +pub enum DisconnectResult { + Single { + name: String, + interface: String, + }, + All { + disconnected: Vec, + errors: Vec, + }, + NoneActive, +} + +impl CommandOutput for DisconnectResult { + fn human(&self) -> String { + match self { + DisconnectResult::Single { name, interface } => { + format!("Disconnected from {name} ({interface})") + } + DisconnectResult::All { + disconnected, + errors, + } => { + let mut parts: Vec = Vec::new(); + if !disconnected.is_empty() { + parts.push(format!("disconnected: {}", disconnected.join(", "))); + } + if !errors.is_empty() { + parts.push(format!("errors: {}", errors.join(", "))); + } + if parts.is_empty() { + "No active connections.".to_string() + } else { + parts.join("\n") + } + } + DisconnectResult::NoneActive => "No active connections.".to_string(), + } + } + + fn json(&self) -> serde_json::Value { + match self { + DisconnectResult::Single { name, interface } => json!({ + "disconnected": name, + "interface": interface, + }), + DisconnectResult::All { + disconnected, + errors, + } => json!({ + "disconnected": disconnected, + "errors": errors, + }), + DisconnectResult::NoneActive => json!({}), + } + } + + fn exit_code(&self) -> u8 { + match self { + DisconnectResult::All { errors, .. } if !errors.is_empty() => 1, + _ => 0, + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_single_human() { + let result = DisconnectResult::Single { + name: "office".to_string(), + interface: "wg0".to_string(), + }; + assert_eq!(result.human(), "Disconnected from office (wg0)"); + } + + #[test] + fn test_none_active_human() { + let result = DisconnectResult::NoneActive; + assert_eq!(result.human(), "No active connections."); + } + + #[test] + fn test_all_success_human() { + let result = DisconnectResult::All { + disconnected: vec!["office".to_string(), "home".to_string()], + errors: Vec::new(), + }; + assert_eq!(result.human(), "disconnected: office, home"); + } + + #[test] + fn test_all_with_errors_human() { + let result = DisconnectResult::All { + disconnected: vec!["office".to_string()], + errors: vec!["Failed to disconnect home: timeout".to_string()], + }; + let s = result.human(); + assert!(s.contains("disconnected: office")); + assert!(s.contains("errors: Failed to disconnect home: timeout")); + } + + #[test] + fn test_single_json() { + let result = DisconnectResult::Single { + name: "office".to_string(), + interface: "wg0".to_string(), + }; + let json = result.json(); + assert_eq!(json["disconnected"], "office"); + assert_eq!(json["interface"], "wg0"); + assert!(json["message"].is_null()); + } + + #[test] + fn test_all_json() { + let result = DisconnectResult::All { + disconnected: vec!["office".to_string()], + errors: vec!["err".to_string()], + }; + let json = result.json(); + assert_eq!(json["disconnected"].as_array().unwrap().len(), 1); + assert_eq!(json["errors"].as_array().unwrap().len(), 1); + assert!(json["message"].is_null()); + } + + #[test] + fn test_none_active_json() { + let result = DisconnectResult::NoneActive; + let json = result.json(); + assert_eq!(json, serde_json::json!({})); + } + + #[test] + fn test_exit_code_zero_on_success() { + assert_eq!( + DisconnectResult::Single { + name: "x".to_string(), + interface: "y".to_string(), + } + .exit_code(), + 0 + ); + assert_eq!( + DisconnectResult::All { + disconnected: vec!["x".to_string()], + errors: Vec::new(), + } + .exit_code(), + 0 + ); + assert_eq!(DisconnectResult::NoneActive.exit_code(), 0); + } + + #[test] + fn test_exit_code_one_on_partial_failure() { + assert_eq!( + DisconnectResult::All { + disconnected: vec!["x".to_string()], + errors: vec!["e".to_string()], + } + .exit_code(), + 1 + ); + } +} diff --git a/src-tauri/client-cli/src/commands/instance.rs b/src-tauri/client-cli/src/commands/instance.rs new file mode 100644 index 000000000..b816badf0 --- /dev/null +++ b/src-tauri/client-cli/src/commands/instance.rs @@ -0,0 +1,194 @@ +use defguard_core::database::models::{instance::Instance, Id}; +use serde_json::json; + +use crate::{ + output::CommandOutput, + state::{CliError, State}, +}; + +const MIN_NAME_COL_WIDTH: usize = 4; +const MIN_URL_COL_WIDTH: usize = 3; +const MIN_USER_COL_WIDTH: usize = 8; + +pub async fn handle_list(state: &State) -> Result { + let instances = Instance::all(&state.pool).await?; + Ok(InstanceListResult { instances }) +} + +pub async fn handle_show(state: &State, name: &str) -> Result { + let instance = Instance::find_by_name(&state.pool, name) + .await? + .ok_or_else(|| CliError::NotFound(format!("Instance '{name}' not found")))?; + Ok(InstanceShowResult { instance }) +} + +pub struct InstanceListResult { + pub instances: Vec>, +} + +impl CommandOutput for InstanceListResult { + fn human(&self) -> String { + if self.instances.is_empty() { + "No instances configured.".to_string() + } else { + format_instance_list_table(&self.instances) + } + } + + fn json(&self) -> serde_json::Value { + let instances: Vec = self + .instances + .iter() + .map(|inst| { + json!({ + "name": inst.name, + "url": inst.url, + "username": inst.username, + "traffic_policy": format!("{:?}", inst.client_traffic_policy), + }) + }) + .collect(); + json!({ "instances": instances }) + } +} + +fn format_instance_list_table(instances: &[Instance]) -> String { + let name_col_width = instances + .iter() + .map(|i| i.name.len()) + .max() + .unwrap_or(MIN_NAME_COL_WIDTH) + .max(MIN_NAME_COL_WIDTH); + let url_col_width = instances + .iter() + .map(|i| i.url.len()) + .max() + .unwrap_or(MIN_URL_COL_WIDTH) + .max(MIN_URL_COL_WIDTH); + let user_col_width = instances + .iter() + .map(|i| i.username.len()) + .max() + .unwrap_or(MIN_USER_COL_WIDTH) + .max(MIN_USER_COL_WIDTH); + + let mut lines = vec![format!( + " {:, +} + +impl CommandOutput for InstanceShowResult { + fn human(&self) -> String { + let mut lines = Vec::new(); + lines.push(format!("Name: {}", self.instance.name)); + lines.push(format!("UUID: {}", self.instance.uuid)); + lines.push(format!("URL: {}", self.instance.url)); + lines.push(format!("Proxy URL: {}", self.instance.proxy_url)); + lines.push(format!("Username: {}", self.instance.username)); + lines.push(format!( + "Traffic policy: {:?}", + self.instance.client_traffic_policy + )); + if let Some(ref display_name) = self.instance.openid_display_name { + lines.push(format!("OIDC display: {display_name}")); + } + lines.join("\n") + } + + fn json(&self) -> serde_json::Value { + json!({ + "name": self.instance.name, + "uuid": self.instance.uuid, + "url": self.instance.url, + "proxy_url": self.instance.proxy_url, + "username": self.instance.username, + "traffic_policy": format!("{:?}", self.instance.client_traffic_policy), + "openid_display_name": self.instance.openid_display_name, + }) + } +} + +#[cfg(test)] +mod tests { + use defguard_core::database::models::instance::ClientTrafficPolicy; + + use super::*; + + fn make_instance(name: &str) -> Instance { + Instance { + id: 1, + name: name.to_string(), + uuid: "uuid-1".to_string(), + url: "https://vpn.example.com".to_string(), + proxy_url: "https://proxy.example.com".to_string(), + username: "admin".to_string(), + token: None, + client_traffic_policy: ClientTrafficPolicy::None, + enterprise_enabled: false, + openid_display_name: None, + } + } + + #[test] + fn test_list_human_empty() { + let result = InstanceListResult { + instances: Vec::new(), + }; + assert_eq!(result.human(), "No instances configured."); + } + + #[test] + fn test_list_human_with_data() { + let result = InstanceListResult { + instances: vec![make_instance("acme")], + }; + let s = result.human(); + assert!(s.contains("acme")); + assert!(s.contains("https://vpn.example.com")); + assert!(s.contains("admin")); + } + + #[test] + fn test_show_human() { + let result = InstanceShowResult { + instance: make_instance("acme"), + }; + let s = result.human(); + assert!(s.contains("Name: acme")); + assert!(s.contains("URL: https://vpn.example.com")); + assert!(s.contains("Username: admin")); + } + + #[test] + fn test_exit_code_zero() { + assert_eq!( + InstanceListResult { + instances: Vec::new() + } + .exit_code(), + 0 + ); + assert_eq!( + InstanceShowResult { + instance: make_instance("x"), + } + .exit_code(), + 0 + ); + } +} diff --git a/src-tauri/client-cli/src/commands/list.rs b/src-tauri/client-cli/src/commands/list.rs new file mode 100644 index 000000000..bf5fcc2b5 --- /dev/null +++ b/src-tauri/client-cli/src/commands/list.rs @@ -0,0 +1,332 @@ +use std::collections::HashMap; + +use defguard_core::database::models::{instance::Instance, location::Location, tunnel::Tunnel, Id}; +use serde_json::json; + +use crate::{ + commands::location::mfa_label, + output::{CommandOutput, InstanceEntry, LocationEntry, TunnelEntry}, + state::{CliError, State}, +}; + +const MIN_LOCATION_NAME_COL_WIDTH: usize = 8; +const MIN_ENDPOINT_COL_WIDTH: usize = 8; +const MIN_TUNNEL_NAME_COL_WIDTH: usize = 4; + +pub async fn handle(state: &State) -> Result { + let instances = Instance::all(&state.pool).await?; + let locations = Location::all(&state.pool, false).await?; + let tunnels = Tunnel::all(&state.pool).await?; + Ok(ListResult { + instances, + locations, + tunnels, + }) +} + +pub struct ListResult { + pub instances: Vec>, + pub locations: Vec>, + pub tunnels: Vec>, +} + +impl CommandOutput for ListResult { + fn human(&self) -> String { + if self.instances.is_empty() { + "No instances enrolled. Use the desktop app or 'enroll' to get started.".to_string() + } else { + format_list_table(&self.instances, &self.locations, &self.tunnels) + } + } + + fn json(&self) -> serde_json::Value { + let instance_names: HashMap = self + .instances + .iter() + .map(|i| (i.id, i.name.clone())) + .collect(); + + let instances: Vec = self + .instances + .iter() + .map(|i| InstanceEntry { + name: i.name.clone(), + url: i.url.clone(), + }) + .collect(); + + let locations: Vec = self + .locations + .iter() + .map(|l| LocationEntry { + name: l.name.clone(), + instance: instance_names.get(&l.instance_id).cloned(), + address: l.address.clone(), + endpoint: l.endpoint.clone(), + mfa_enabled: Some(l.mfa_enabled()), + mfa_method: Some(mfa_label(l.mfa_method).to_string()), + route_all_traffic: Some(l.route_all_traffic), + }) + .collect(); + + let tunnels: Vec = self + .tunnels + .iter() + .map(|t| TunnelEntry { + name: t.name.clone(), + address: t.address.clone(), + endpoint: t.endpoint.clone(), + }) + .collect(); + + json!({ + "instances": instances, + "locations": locations, + "tunnels": tunnels, + }) + } +} + +fn format_list_table( + instances: &[Instance], + locations: &[Location], + tunnels: &[Tunnel], +) -> String { + let mut instance_locations: HashMap>> = HashMap::new(); + for location in locations { + instance_locations + .entry(location.instance_id) + .or_default() + .push(location); + } + + let location_name_col_width = locations + .iter() + .map(|l| l.name.len()) + .max() + .unwrap_or(MIN_LOCATION_NAME_COL_WIDTH) + .max(MIN_LOCATION_NAME_COL_WIDTH); + let endpoint_col_width = locations + .iter() + .map(|l| l.endpoint.len()) + .max() + .unwrap_or(MIN_ENDPOINT_COL_WIDTH) + .max(MIN_ENDPOINT_COL_WIDTH); + + let mut lines = Vec::new(); + + for instance in instances { + lines.push(format!("\n{} ({})", instance.name, instance.url)); + if let Some(locations) = instance_locations.get(&instance.id) { + lines.push(format!( + " {:3} {:<11}", + "LOCATION", "ADDRESS", "ENDPOINT", "MFA", "Routing" + )); + for location in locations { + let mfa = if location.mfa_enabled() { "yes" } else { "no" }; + let route_label = if location.route_all_traffic { + "All-traffic" + } else { + "Predefined" + }; + lines.push(format!( + " {:3} {route_label:<11}", + location.name, location.address, location.endpoint + )); + } + } else { + lines.push(" (no locations)".to_string()); + } + } + + if !tunnels.is_empty() { + let tunnel_name_col_width = tunnels + .iter() + .map(|t| t.name.len()) + .max() + .unwrap_or(MIN_TUNNEL_NAME_COL_WIDTH) + .max(location_name_col_width); + let tunnel_endpoint_col_width = tunnels + .iter() + .map(|t| t.endpoint.len()) + .max() + .unwrap_or(MIN_ENDPOINT_COL_WIDTH) + .max(endpoint_col_width); + + lines.push("\nTunnels".to_string()); + lines.push(format!( + " {: Instance { + Instance { + id, + name: name.to_string(), + uuid: format!("uuid-{id}"), + url: url.to_string(), + proxy_url: String::new(), + username: "user".to_string(), + token: None, + client_traffic_policy: ClientTrafficPolicy::None, + enterprise_enabled: false, + openid_display_name: None, + } + } + + fn make_location(id: Id, instance_id: Id, name: &str, endpoint: &str) -> Location { + Location { + id, + instance_id, + network_id: 1, + name: name.to_string(), + address: "10.0.0.0/24".to_string(), + pubkey: "pk".to_string(), + endpoint: endpoint.to_string(), + allowed_ips: "0.0.0.0/0".to_string(), + dns: None, + route_all_traffic: false, + keepalive_interval: 25, + location_mfa_mode: LocationMfaMode::Disabled, + service_location_mode: ServiceLocationMode::Disabled, + mfa_method: None, + posture_check_required: false, + } + } + + fn make_tunnel(id: Id, name: &str, endpoint: &str) -> Tunnel { + Tunnel { + id, + name: name.to_string(), + pubkey: "pk".to_string(), + prvkey: "prvk".to_string(), + address: "10.1.0.0/24".to_string(), + server_pubkey: "spk".to_string(), + preshared_key: None, + allowed_ips: Some("0.0.0.0/0".to_string()), + endpoint: endpoint.to_string(), + dns: None, + persistent_keep_alive: 25, + route_all_traffic: false, + pre_up: None, + post_up: None, + pre_down: None, + post_down: None, + } + } + + #[test] + fn test_human_empty() { + let result = ListResult { + instances: Vec::new(), + locations: Vec::new(), + tunnels: Vec::new(), + }; + let s = result.human(); + assert!(s.contains("No instances enrolled")); + } + + #[test] + fn test_human_with_data() { + let inst = make_instance(1, "acme", "https://acme.example"); + let loc = make_location(10, 1, "office", "1.2.3.4:51820"); + let tun = make_tunnel(20, "datacenter", "5.6.7.8:51820"); + + let result = ListResult { + instances: vec![inst], + locations: vec![loc], + tunnels: vec![tun], + }; + let s = result.human(); + assert!(s.contains("acme")); + assert!(s.contains("office")); + assert!(s.contains("datacenter")); + assert!(s.contains("Tunnels")); + } + + #[test] + fn test_json_empty() { + let result = ListResult { + instances: Vec::new(), + locations: Vec::new(), + tunnels: Vec::new(), + }; + let json = result.json(); + assert_eq!(json["instances"].as_array().unwrap().len(), 0); + assert_eq!(json["locations"].as_array().unwrap().len(), 0); + assert_eq!(json["tunnels"].as_array().unwrap().len(), 0); + } + + #[test] + fn test_json_with_data() { + let inst = make_instance(1, "acme", "https://acme.example"); + let loc = make_location(10, 1, "office", "1.2.3.4:51820"); + let loc2 = make_location(11, 1, "home", "9.9.9.9:51820"); + let tun = make_tunnel(20, "datacenter", "5.6.7.8:51820"); + + let result = ListResult { + instances: vec![inst], + locations: vec![loc, loc2], + tunnels: vec![tun], + }; + let json = result.json(); + + let instances = json["instances"].as_array().unwrap(); + assert_eq!(instances.len(), 1); + assert_eq!(instances[0]["name"], "acme"); + assert_eq!(instances[0]["url"], "https://acme.example"); + + let locations = json["locations"].as_array().unwrap(); + assert_eq!(locations.len(), 2); + assert_eq!(locations[0]["name"], "office"); + assert_eq!(locations[0]["instance"], "acme"); + assert_eq!(locations[1]["name"], "home"); + + let tunnels = json["tunnels"].as_array().unwrap(); + assert_eq!(tunnels.len(), 1); + assert_eq!(tunnels[0]["name"], "datacenter"); + assert_eq!(tunnels[0]["endpoint"], "5.6.7.8:51820"); + } + + #[test] + fn test_json_no_message_field() { + let result = ListResult { + instances: Vec::new(), + locations: Vec::new(), + tunnels: Vec::new(), + }; + let json = result.json(); + assert!(json["message"].is_null()); + } + + #[test] + fn test_exit_code_zero() { + let result = ListResult { + instances: Vec::new(), + locations: Vec::new(), + tunnels: Vec::new(), + }; + assert_eq!(result.exit_code(), 0); + } +} diff --git a/src-tauri/client-cli/src/commands/location.rs b/src-tauri/client-cli/src/commands/location.rs new file mode 100644 index 000000000..86114c4d2 --- /dev/null +++ b/src-tauri/client-cli/src/commands/location.rs @@ -0,0 +1,530 @@ +use std::collections::HashMap; + +use defguard_core::database::models::{ + instance::Instance, + location::{Location, LocationMfaMethod}, + Id, +}; +use serde_json::json; + +use crate::{ + output::{CommandOutput, LocationEntry}, + resolve::{self, ResolvedTarget, TargetSpec}, + state::{CliError, State}, +}; + +const MIN_NAME_COL_WIDTH: usize = 8; +const MIN_ENDPOINT_COL_WIDTH: usize = 8; +const MIN_INST_COL_WIDTH: usize = 8; + +pub async fn handle_list(state: &State) -> Result { + let locations = Location::all(&state.pool, false).await?; + + let instance_names: HashMap = Instance::all(&state.pool) + .await? + .into_iter() + .map(|inst| (inst.id, inst.name)) + .collect(); + + Ok(LocationListResult { + locations, + instance_names, + }) +} + +pub async fn handle_set( + state: &State, + name: &str, + instance: Option<&str>, + mfa_method: Option<&str>, + route_all_traffic: Option, + predefined_traffic: bool, +) -> Result { + let spec = TargetSpec { + name: Some(name.to_string()), + tunnel: false, + id: None, + instance: instance.map(String::from), + }; + + let target = resolve::resolve_connect_target(&spec, &state.pool).await?; + let location_id = match &target { + ResolvedTarget::Location(loc) => loc.id, + _ => { + return Err(CliError::NotFound(format!("Location '{name}' not found"))); + } + }; + + let mut changed = Vec::new(); + + if let Some(method_str) = mfa_method { + let method = parse_mfa_method(method_str)?; + Location::set_mfa_method(&state.pool, location_id, method).await?; + changed.push(format!("MFA method → {method_str}")); + } + + if let Some(true) = route_all_traffic { + Location::update_routing(&state.pool, location_id, true).await?; + changed.push("route-all-traffic → on".to_string()); + } else if predefined_traffic { + Location::update_routing(&state.pool, location_id, false).await?; + changed.push("route-all-traffic → off".to_string()); + } + + Ok(LocationSetResult { + name: name.to_string(), + changes: changed, + }) +} + +pub async fn handle_show( + state: &State, + name: &str, + instance: Option<&str>, +) -> Result { + let spec = TargetSpec { + name: Some(name.to_string()), + tunnel: false, + id: None, + instance: instance.map(String::from), + }; + + let target = resolve::resolve_connect_target(&spec, &state.pool).await?; + let ResolvedTarget::Location(location) = &target else { + return Err(CliError::NotFound(format!("Location '{name}' not found"))); + }; + + Ok(LocationShowResult { + name: location.name.clone(), + address: location.address.clone(), + endpoint: location.endpoint.clone(), + pubkey: location.pubkey.clone(), + allowed_ips: location.allowed_ips.clone(), + dns: location.dns.clone(), + mfa_method: mfa_label(location.mfa_method).to_string(), + route_all_traffic: location.route_all_traffic, + keepalive_interval: location.keepalive_interval, + }) +} + +fn parse_mfa_method(raw: &str) -> Result { + match raw.to_lowercase().as_str() { + "totp" => Ok(LocationMfaMethod::Totp), + "email" => Ok(LocationMfaMethod::Email), + "oidc" => Ok(LocationMfaMethod::Oidc), + "biometric" => Ok(LocationMfaMethod::Biometric), + "mobile" | "mobile_approve" => Ok(LocationMfaMethod::MobileApprove), + _ => Err(CliError::Usage(format!( + "Invalid MFA method '{raw}'. Valid: totp, email, oidc, biometric, mobile." + ))), + } +} + +pub(crate) fn mfa_label(method: Option) -> &'static str { + match method { + Some(LocationMfaMethod::Totp) => "totp", + Some(LocationMfaMethod::Email) => "email", + Some(LocationMfaMethod::Oidc) => "oidc", + Some(LocationMfaMethod::Biometric) => "biometric", + Some(LocationMfaMethod::MobileApprove) => "mobile", + None => "none", + } +} + +pub struct LocationListResult { + pub locations: Vec>, + pub instance_names: HashMap, +} + +impl CommandOutput for LocationListResult { + fn human(&self) -> String { + if self.locations.is_empty() { + "No locations configured.".to_string() + } else { + format_location_list_table(&self.locations, &self.instance_names) + } + } + + fn json(&self) -> serde_json::Value { + let locations: Vec = self + .locations + .iter() + .map(|l| LocationEntry { + name: l.name.clone(), + instance: self.instance_names.get(&l.instance_id).cloned(), + address: l.address.clone(), + endpoint: l.endpoint.clone(), + mfa_enabled: None, + mfa_method: Some(mfa_label(l.mfa_method).to_string()), + route_all_traffic: Some(l.route_all_traffic), + }) + .collect(); + json!({ "locations": locations }) + } +} + +fn format_location_list_table( + locations: &[Location], + instance_names: &HashMap, +) -> String { + let name_col_width = locations + .iter() + .map(|l| l.name.len()) + .max() + .unwrap_or(MIN_NAME_COL_WIDTH) + .max(MIN_NAME_COL_WIDTH); + let endpoint_col_width = locations + .iter() + .map(|l| l.endpoint.len()) + .max() + .unwrap_or(MIN_ENDPOINT_COL_WIDTH) + .max(MIN_ENDPOINT_COL_WIDTH); + let inst_col_width = locations + .iter() + .filter_map(|l| instance_names.get(&l.instance_id).map(|n| n.len())) + .max() + .unwrap_or(MIN_INST_COL_WIDTH) + .max(MIN_INST_COL_WIDTH); + + let mut lines = vec![format!( + " {:3} {:<11}", + "LOCATION", "ADDRESS", "ENDPOINT", "INSTANCE", "MFA", "Routing" + )]; + for location in locations { + let instance = instance_names + .get(&location.instance_id) + .map_or("?", String::as_str); + lines.push(format!( + " {:3} {:>11}", + location.name, + location.address, + location.endpoint, + instance, + mfa_label(location.mfa_method), + if location.route_all_traffic { + "All-traffic" + } else { + "Predefined" + } + )); + } + lines.join("\n") +} + +pub struct LocationShowResult { + pub name: String, + pub address: String, + pub endpoint: String, + pub pubkey: String, + pub allowed_ips: String, + pub dns: Option, + pub mfa_method: String, + pub route_all_traffic: bool, + pub keepalive_interval: i64, +} + +impl CommandOutput for LocationShowResult { + fn human(&self) -> String { + let mut lines = Vec::new(); + lines.push(format!("Name: {}", self.name)); + lines.push(format!("Address: {}", self.address)); + lines.push(format!("Endpoint: {}", self.endpoint)); + lines.push(format!("Pubkey: {}", self.pubkey)); + lines.push(format!("Allowed IPs: {}", self.allowed_ips)); + if let Some(dns) = &self.dns { + lines.push(format!("DNS: {dns}")); + } + lines.push(format!("MFA method: {}", self.mfa_method)); + lines.push(format!("Route all traffic: {}", self.route_all_traffic)); + lines.push(format!("Keepalive: {}s", self.keepalive_interval)); + lines.join("\n") + } + + fn json(&self) -> serde_json::Value { + let mut json = json!({ + "name": self.name, + "address": self.address, + "endpoint": self.endpoint, + "pubkey": self.pubkey, + "allowed_ips": self.allowed_ips, + "mfa_method": self.mfa_method, + "route_all_traffic": self.route_all_traffic, + "keepalive_interval": self.keepalive_interval, + }); + if let Some(dns) = &self.dns { + json["dns"] = json!(dns); + } + json + } +} + +pub struct LocationSetResult { + pub name: String, + pub changes: Vec, +} + +impl CommandOutput for LocationSetResult { + fn human(&self) -> String { + if self.changes.is_empty() { + format!("No changes for location '{}'.", self.name) + } else { + format!( + "Updated location '{}': {}", + self.name, + self.changes.join(", ") + ) + } + } + + fn json(&self) -> serde_json::Value { + json!({ + "location": self.name, + "changes": self.changes, + }) + } +} + +#[cfg(test)] +mod tests { + use defguard_core::database::models::location::{LocationMfaMode, ServiceLocationMode}; + + use super::*; + + fn make_location( + id: Id, + instance_id: Id, + name: &str, + endpoint: &str, + mfa: bool, + ) -> Location { + Location { + id, + instance_id, + network_id: 1, + name: name.to_string(), + address: "10.0.0.0/24".to_string(), + pubkey: "pk".to_string(), + endpoint: endpoint.to_string(), + allowed_ips: "0.0.0.0/0".to_string(), + dns: None, + route_all_traffic: false, + keepalive_interval: 25, + location_mfa_mode: if mfa { + LocationMfaMode::Internal + } else { + LocationMfaMode::Disabled + }, + service_location_mode: ServiceLocationMode::Disabled, + mfa_method: None, + posture_check_required: false, + } + } + + #[test] + fn test_list_human_empty() { + let result = LocationListResult { + locations: Vec::new(), + instance_names: HashMap::new(), + }; + assert_eq!(result.human(), "No locations configured."); + } + + #[test] + fn test_list_human_with_data() { + let loc = make_location(1, 10, "office", "1.2.3.4:51820", false); + let mut names = HashMap::new(); + names.insert(10, "acme".to_string()); + let result = LocationListResult { + locations: vec![loc], + instance_names: names, + }; + let s = result.human(); + assert!(s.contains("office")); + assert!(s.contains("acme")); + assert!(s.contains("1.2.3.4:51820")); + } + + #[test] + fn test_list_json_empty() { + let result = LocationListResult { + locations: Vec::new(), + instance_names: HashMap::new(), + }; + let json = result.json(); + assert_eq!(json["locations"].as_array().unwrap().len(), 0); + assert!(json["message"].is_null()); + } + + #[test] + fn test_list_json_with_data() { + let loc = make_location(1, 10, "office", "1.2.3.4:51820", false); + let mut names = HashMap::new(); + names.insert(10, "acme".to_string()); + let result = LocationListResult { + locations: vec![loc], + instance_names: names, + }; + let json = result.json(); + let locations = json["locations"].as_array().unwrap(); + assert_eq!(locations.len(), 1); + assert_eq!(locations[0]["name"], "office"); + assert_eq!(locations[0]["instance"], "acme"); + } + + #[test] + fn test_show_human() { + let result = LocationShowResult { + name: "office".to_string(), + address: "10.0.0.0/24".to_string(), + endpoint: "1.2.3.4:51820".to_string(), + pubkey: "pk".to_string(), + allowed_ips: "0.0.0.0/0".to_string(), + dns: Some("8.8.8.8".to_string()), + mfa_method: "totp".to_string(), + route_all_traffic: false, + keepalive_interval: 25, + }; + let s = result.human(); + assert!(s.contains("Name: office")); + assert!(s.contains("Address: 10.0.0.0/24")); + assert!(s.contains("DNS: 8.8.8.8")); + assert!(s.contains("MFA method: totp")); + } + + #[test] + fn test_show_human_without_dns() { + let result = LocationShowResult { + name: "office".to_string(), + address: "10.0.0.0/24".to_string(), + endpoint: "1.2.3.4:51820".to_string(), + pubkey: "pk".to_string(), + allowed_ips: "0.0.0.0/0".to_string(), + dns: None, + mfa_method: "none".to_string(), + route_all_traffic: true, + keepalive_interval: 30, + }; + let s = result.human(); + assert!(!s.contains("DNS")); + assert!(s.contains("Route all traffic: true")); + } + + #[test] + fn test_show_json() { + let result = LocationShowResult { + name: "office".to_string(), + address: "10.0.0.0/24".to_string(), + endpoint: "1.2.3.4:51820".to_string(), + pubkey: "pk".to_string(), + allowed_ips: "0.0.0.0/0".to_string(), + dns: Some("8.8.8.8".to_string()), + mfa_method: "totp".to_string(), + route_all_traffic: false, + keepalive_interval: 25, + }; + let json = result.json(); + assert_eq!(json["name"], "office"); + assert_eq!(json["dns"], "8.8.8.8"); + assert_eq!(json["mfa_method"], "totp"); + assert!(json["message"].is_null()); + } + + #[test] + fn test_show_json_without_dns() { + let result = LocationShowResult { + name: "office".to_string(), + address: "10.0.0.0/24".to_string(), + endpoint: "1.2.3.4:51820".to_string(), + pubkey: "pk".to_string(), + allowed_ips: "0.0.0.0/0".to_string(), + dns: None, + mfa_method: "none".to_string(), + route_all_traffic: true, + keepalive_interval: 30, + }; + let json = result.json(); + assert!(json["dns"].is_null()); + } + + #[test] + fn test_exit_code_zero() { + assert_eq!( + LocationListResult { + locations: Vec::new(), + instance_names: HashMap::new(), + } + .exit_code(), + 0 + ); + assert_eq!( + LocationShowResult { + name: "x".to_string(), + address: "a".to_string(), + endpoint: "e".to_string(), + pubkey: "p".to_string(), + allowed_ips: "0.0.0.0/0".to_string(), + dns: None, + mfa_method: "n".to_string(), + route_all_traffic: false, + keepalive_interval: 25, + } + .exit_code(), + 0 + ); + assert_eq!( + LocationSetResult { + name: "x".to_string(), + changes: Vec::new(), + } + .exit_code(), + 0 + ); + } + + #[test] + fn test_set_human_no_changes() { + let result = LocationSetResult { + name: "office".to_string(), + changes: Vec::new(), + }; + assert_eq!(result.human(), "No changes for location 'office'."); + } + + #[test] + fn test_set_human_with_changes() { + let result = LocationSetResult { + name: "office".to_string(), + changes: vec![ + "MFA method → totp".to_string(), + "route-all-traffic → on".to_string(), + ], + }; + let s = result.human(); + assert!(s.contains("Updated location 'office'")); + assert!(s.contains("MFA method → totp")); + assert!(s.contains("route-all-traffic → on")); + } + + #[test] + fn test_set_json() { + let result = LocationSetResult { + name: "office".to_string(), + changes: vec!["MFA method → totp".to_string()], + }; + let json = result.json(); + assert_eq!(json["location"], "office"); + assert_eq!(json["changes"].as_array().unwrap().len(), 1); + } + + #[test] + fn test_set_json_empty_changes() { + let result = LocationSetResult { + name: "office".to_string(), + changes: Vec::new(), + }; + let json = result.json(); + assert_eq!(json["location"], "office"); + assert_eq!(json["changes"].as_array().unwrap().len(), 0); + assert!(json["message"].is_null()); + } +} diff --git a/src-tauri/client-cli/src/commands/mod.rs b/src-tauri/client-cli/src/commands/mod.rs new file mode 100644 index 000000000..480489ef5 --- /dev/null +++ b/src-tauri/client-cli/src/commands/mod.rs @@ -0,0 +1,7 @@ +pub mod connect; +pub mod disconnect; +pub mod instance; +pub mod list; +pub mod location; +pub mod status; +pub mod tunnel; diff --git a/src-tauri/client-cli/src/commands/status.rs b/src-tauri/client-cli/src/commands/status.rs new file mode 100644 index 000000000..aa1d9dcd6 --- /dev/null +++ b/src-tauri/client-cli/src/commands/status.rs @@ -0,0 +1,274 @@ +use defguard_core::connection::active_state::{active_state, ActiveConnectionInfo}; +use serde_json::json; + +use crate::{ + output::{ActiveEntry, CommandOutput}, + state::{CliError, State}, +}; + +#[cfg_attr(target_os = "macos", allow(dead_code))] +const MIN_NAME_COL_WIDTH: usize = 4; +#[cfg_attr(target_os = "macos", allow(dead_code))] +const MIN_IFACE_COL_WIDTH: usize = 9; + +#[cfg_attr(target_os = "macos", allow(unused_variables, unreachable_code))] +pub async fn handle(state: &State) -> Result { + #[cfg(target_os = "macos")] + { + return Ok(StatusResult { + connections: Vec::new(), + }); + } + + let connections = active_state(&state.pool).await?; + Ok(StatusResult { connections }) +} + +pub struct StatusResult { + pub connections: Vec, +} + +impl CommandOutput for StatusResult { + fn human(&self) -> String { + #[cfg(target_os = "macos")] + { + "Connection status is not yet supported on macOS from the CLI. \ + Use the desktop client." + .to_string() + } + #[cfg(not(target_os = "macos"))] + { + if self.connections.is_empty() { + "No active connections.".to_string() + } else { + format_status_table(&self.connections) + } + } + } + + fn json(&self) -> serde_json::Value { + let active: Vec = self + .connections + .iter() + .map(|c| ActiveEntry { + connection_type: c.connection_type.to_string(), + name: c.name.clone(), + interface: c.interface_name.clone(), + listen_port: c.stats.as_ref().map(|s| s.listen_port), + tx_bytes: c.stats.as_ref().map(|s| s.tx_bytes), + rx_bytes: c.stats.as_ref().map(|s| s.rx_bytes), + last_handshake_secs: c.stats.as_ref().and_then(|s| s.last_handshake), + }) + .collect(); + json!({ "active": active }) + } +} + +/// Build a human-readable status table string. +#[cfg_attr(target_os = "macos", allow(dead_code))] +fn format_status_table(connections: &[ActiveConnectionInfo]) -> String { + let name_col_width = connections + .iter() + .map(|c| c.name.len()) + .max() + .unwrap_or(MIN_NAME_COL_WIDTH) + .max(MIN_NAME_COL_WIDTH); + let iface_col_width = connections + .iter() + .map(|c| c.interface_name.len()) + .max() + .unwrap_or(MIN_IFACE_COL_WIDTH) + .max(MIN_IFACE_COL_WIDTH); + + let mut lines = vec![format!("\nActive Connections")]; + lines.push(format!( + " {: String { + const UNITS: &[&str] = &["B", "KiB", "MiB", "GiB", "TiB"]; + let mut value = bytes as f64; + let mut unit_idx = 0; + while value >= 1024.0 && unit_idx < UNITS.len() - 1 { + value /= 1024.0; + unit_idx += 1; + } + if unit_idx == 0 { + format!("{bytes} B") + } else { + format!("{value:.1} {}", UNITS[unit_idx]) + } +} + +#[cfg_attr(target_os = "macos", allow(dead_code))] +fn format_handshake(secs: u64) -> String { + use std::time::{Duration, SystemTime, UNIX_EPOCH}; + + let then = UNIX_EPOCH + Duration::from_secs(secs); + let now = SystemTime::now(); + let Ok(elapsed) = now.duration_since(then) else { + return "now".to_string(); + }; + + let secs = elapsed.as_secs(); + if secs < 60 { + format!("{secs}s ago") + } else if secs < 3600 { + format!("{}m ago", secs / 60) + } else if secs < 86400 { + format!("{}h ago", secs / 3600) + } else { + format!("{}d ago", secs / 86400) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use defguard_core::{connection::active_state::InterfaceStats, ConnectionType}; + + fn make_conn( + name: &str, + iface: &str, + stats: Option, + conn_type: ConnectionType, + ) -> ActiveConnectionInfo { + ActiveConnectionInfo { + connection_type: conn_type, + target_id: 1, + name: name.to_string(), + interface_name: iface.to_string(), + stats, + } + } + + #[test] + fn test_human_empty() { + let result = StatusResult { + connections: Vec::new(), + }; + let s = result.human(); + if cfg!(target_os = "macos") { + assert!(s.contains("not yet supported on macOS")); + } else { + assert!(s.contains("No active connections")); + } + } + + #[test] + fn test_human_with_connections() { + let result = StatusResult { + connections: vec![make_conn( + "office", + "wg0", + Some(InterfaceStats { + listen_port: 51820, + tx_bytes: 1024, + rx_bytes: 2048, + last_handshake: Some(1700000000), + }), + ConnectionType::Location, + )], + }; + let s = result.human(); + if !cfg!(target_os = "macos") { + assert!(s.contains("office")); + assert!(s.contains("wg0")); + assert!(s.contains("1.0 KiB")); + assert!(s.contains("2.0 KiB")); + } + } + + #[test] + fn test_json_empty() { + let result = StatusResult { + connections: Vec::new(), + }; + let json = result.json(); + assert_eq!(json["active"].as_array().unwrap().len(), 0); + } + + #[test] + fn test_json_with_connections() { + let result = StatusResult { + connections: vec![ + make_conn( + "office", + "wg0", + Some(InterfaceStats { + listen_port: 51820, + tx_bytes: 1024, + rx_bytes: 2048, + last_handshake: Some(1700000000), + }), + ConnectionType::Location, + ), + make_conn("data-center", "wg1", None, ConnectionType::Tunnel), + ], + }; + let json = result.json(); + let active = json["active"].as_array().unwrap(); + assert_eq!(active.len(), 2); + + assert_eq!(active[0]["name"], "office"); + assert_eq!(active[0]["connection_type"], "location"); + assert_eq!(active[0]["interface"], "wg0"); + assert_eq!(active[0]["listen_port"], 51820); + assert_eq!(active[0]["tx_bytes"], 1024); + assert_eq!(active[0]["rx_bytes"], 2048); + assert_eq!(active[0]["last_handshake_secs"], 1700000000); + + assert_eq!(active[1]["name"], "data-center"); + assert_eq!(active[1]["connection_type"], "tunnel"); + assert_eq!(active[1]["interface"], "wg1"); + assert!(active[1]["listen_port"].is_null()); + } + + #[test] + fn test_json_no_message_field() { + let result = StatusResult { + connections: Vec::new(), + }; + let json = result.json(); + assert!(json["message"].is_null()); + } + + #[test] + fn test_exit_code_zero() { + let result = StatusResult { + connections: Vec::new(), + }; + assert_eq!(result.exit_code(), 0); + } +} diff --git a/src-tauri/client-cli/src/commands/tunnel.rs b/src-tauri/client-cli/src/commands/tunnel.rs new file mode 100644 index 000000000..b3c5a3cc3 --- /dev/null +++ b/src-tauri/client-cli/src/commands/tunnel.rs @@ -0,0 +1,254 @@ +use defguard_core::database::models::{tunnel::Tunnel, Id}; +use serde_json::json; + +use crate::{ + output::CommandOutput, + state::{CliError, State}, +}; + +const MIN_NAME_COL_WIDTH: usize = 4; +const MIN_ADDR_COL_WIDTH: usize = 7; +const MIN_ENDPOINT_COL_WIDTH: usize = 8; + +pub async fn handle_list(state: &State) -> Result { + let tunnels = Tunnel::all(&state.pool).await?; + Ok(TunnelListResult { tunnels }) +} + +pub async fn handle_show(state: &State, name: &str) -> Result { + let tunnels = Tunnel::find_by_name(&state.pool, name).await?; + let tunnel = match tunnels.len() { + 0 => { + return Err(CliError::NotFound(format!("Tunnel '{name}' not found"))); + } + 1 => tunnels + .into_iter() + .next() + .expect("exactly one tunnel expected after length check"), + _ => { + return Err(CliError::NotFound(format!( + "Multiple tunnels named '{name}'" + ))); + } + }; + Ok(TunnelShowResult { tunnel }) +} + +pub struct TunnelListResult { + pub tunnels: Vec>, +} + +impl CommandOutput for TunnelListResult { + fn human(&self) -> String { + if self.tunnels.is_empty() { + "No tunnels configured.".to_string() + } else { + format_tunnel_list_table(&self.tunnels) + } + } + + fn json(&self) -> serde_json::Value { + let tunnels: Vec = self + .tunnels + .iter() + .map(|t| { + json!({ + "name": t.name, + "address": t.address, + "endpoint": t.endpoint, + "route_all_traffic": t.route_all_traffic, + }) + }) + .collect(); + json!({ "tunnels": tunnels }) + } +} + +fn format_tunnel_list_table(tunnels: &[Tunnel]) -> String { + let name_col_width = tunnels + .iter() + .map(|t| t.name.len()) + .max() + .unwrap_or(MIN_NAME_COL_WIDTH) + .max(MIN_NAME_COL_WIDTH); + let addr_col_width = tunnels + .iter() + .map(|t| t.address.len()) + .max() + .unwrap_or(MIN_ADDR_COL_WIDTH) + .max(MIN_ADDR_COL_WIDTH); + let endpoint_col_width = tunnels + .iter() + .map(|t| t.endpoint.len()) + .max() + .unwrap_or(MIN_ENDPOINT_COL_WIDTH) + .max(MIN_ENDPOINT_COL_WIDTH); + + let mut lines = vec![format!( + " {:11}", + "NAME", "ADDRESS", "ENDPOINT", "Routing" + )]; + for tunnel in tunnels { + lines.push(format!( + " {:11}", + tunnel.name, + tunnel.address, + tunnel.endpoint, + if tunnel.route_all_traffic { + "All-traffic" + } else { + "Predefined" + } + )); + } + lines.join("\n") +} + +pub struct TunnelShowResult { + pub tunnel: Tunnel, +} + +impl CommandOutput for TunnelShowResult { + fn human(&self) -> String { + let mut lines = Vec::new(); + lines.push(format!("Name: {}", self.tunnel.name)); + lines.push(format!("Address: {}", self.tunnel.address)); + lines.push(format!("Endpoint: {}", self.tunnel.endpoint)); + lines.push(format!("Pubkey: {}", self.tunnel.pubkey)); + lines.push(format!( + "Server pubkey: {}", + self.tunnel.server_pubkey + )); + if let Some(ref allowed) = self.tunnel.allowed_ips { + lines.push(format!("Allowed IPs: {allowed}")); + } + if let Some(ref dns) = self.tunnel.dns { + lines.push(format!("DNS: {dns}")); + } + lines.push(format!( + "Route all traffic: {}", + self.tunnel.route_all_traffic + )); + lines.push(format!( + "Persistent keepalive: {}", + self.tunnel.persistent_keep_alive + )); + if let Some(ref pre_up) = self.tunnel.pre_up { + lines.push(format!("Pre-up: {pre_up}")); + } + if let Some(ref post_up) = self.tunnel.post_up { + lines.push(format!("Post-up: {post_up}")); + } + if let Some(ref pre_down) = self.tunnel.pre_down { + lines.push(format!("Pre-down: {pre_down}")); + } + if let Some(ref post_down) = self.tunnel.post_down { + lines.push(format!("Post-down: {post_down}")); + } + lines.join("\n") + } + + fn json(&self) -> serde_json::Value { + json!({ + "name": self.tunnel.name, + "address": self.tunnel.address, + "endpoint": self.tunnel.endpoint, + "pubkey": self.tunnel.pubkey, + "server_pubkey": self.tunnel.server_pubkey, + "allowed_ips": self.tunnel.allowed_ips, + "dns": self.tunnel.dns, + "route_all_traffic": self.tunnel.route_all_traffic, + "persistent_keep_alive": self.tunnel.persistent_keep_alive, + "pre_up": self.tunnel.pre_up, + "post_up": self.tunnel.post_up, + "pre_down": self.tunnel.pre_down, + "post_down": self.tunnel.post_down, + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + fn make_tunnel(name: &str) -> Tunnel { + Tunnel { + id: 1, + name: name.to_string(), + pubkey: "pk".to_string(), + prvkey: "sk".to_string(), + address: "10.0.0.0/24".to_string(), + server_pubkey: "spk".to_string(), + preshared_key: None, + allowed_ips: Some("0.0.0.0/0".to_string()), + endpoint: "1.2.3.4:51820".to_string(), + dns: Some("8.8.8.8".to_string()), + persistent_keep_alive: 25, + route_all_traffic: false, + pre_up: None, + post_up: None, + pre_down: None, + post_down: None, + } + } + + #[test] + fn test_list_human_empty() { + let result = TunnelListResult { + tunnels: Vec::new(), + }; + assert_eq!(result.human(), "No tunnels configured."); + } + + #[test] + fn test_list_human_with_data() { + let result = TunnelListResult { + tunnels: vec![make_tunnel("gateway")], + }; + let s = result.human(); + assert!(s.contains("gateway")); + assert!(s.contains("10.0.0.0/24")); + assert!(s.contains("1.2.3.4:51820")); + } + + #[test] + fn test_show_human() { + let result = TunnelShowResult { + tunnel: make_tunnel("gateway"), + }; + let s = result.human(); + assert!(s.contains("Name: gateway")); + assert!(s.contains("Address: 10.0.0.0/24")); + assert!(s.contains("Endpoint: 1.2.3.4:51820")); + assert!(s.contains("DNS: 8.8.8.8")); + } + + #[test] + fn test_show_human_no_dns() { + let mut tun = make_tunnel("gateway"); + tun.dns = None; + tun.allowed_ips = None; + let result = TunnelShowResult { tunnel: tun }; + let s = result.human(); + assert!(!s.contains("DNS")); + assert!(!s.contains("Allowed IPs")); + } + + #[test] + fn test_exit_code_zero() { + assert_eq!( + TunnelListResult { + tunnels: Vec::new() + } + .exit_code(), + 0 + ); + assert_eq!( + TunnelShowResult { + tunnel: make_tunnel("x"), + } + .exit_code(), + 0 + ); + } +} diff --git a/src-tauri/client-cli/src/exit.rs b/src-tauri/client-cli/src/exit.rs new file mode 100644 index 000000000..964cc0b93 --- /dev/null +++ b/src-tauri/client-cli/src/exit.rs @@ -0,0 +1,60 @@ +use crate::state::CliError; + +/// Map a `CliError` variant to the corresponding process exit code. +/// +/// | Code | Meaning | +/// |------|--------------------| +/// | 0 | ok | +/// | 1 | other | +/// | 2 | usage | +/// | 3 | not-found | +/// | 4 | daemon-unavailable | +/// | 5 | mfa-failed | +/// | 6 | not-enrolled | +/// | 7 | invalid-input | +pub fn exit_code_for(err: &CliError) -> u8 { + match err { + CliError::Usage(_) => 2, + CliError::NotFound(_) => 3, + CliError::DaemonUnavailable(_) => 4, + CliError::MfaFailed(_) | CliError::MfaInputRequired(_) => 5, + CliError::NotEnrolled(_) => 6, + CliError::InvalidInput(_) => 7, + CliError::Database(_) => 1, + CliError::Other(_) => 1, + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_exit_code_mapping() { + let cases: &[(&CliError, u8)] = &[ + (&CliError::Usage("bad flag".into()), 2), + (&CliError::NotFound("no such location".into()), 3), + (&CliError::DaemonUnavailable("daemon down".into()), 4), + (&CliError::MfaFailed("wrong code".into()), 5), + (&CliError::MfaInputRequired("no TTY".into()), 5), + (&CliError::NotEnrolled("no instances".into()), 6), + ( + &CliError::InvalidInput("route_all_traffic enforced".into()), + 7, + ), + ( + &CliError::Database(sqlx::Error::Protocol("bad schema".into())), + 1, + ), + (&CliError::Other("something broke".into()), 1), + ]; + for (err, expected) in cases { + assert_eq!( + exit_code_for(err), + *expected, + "{:?} should map to {expected}", + err + ); + } + } +} diff --git a/src-tauri/client-cli/src/logging.rs b/src-tauri/client-cli/src/logging.rs new file mode 100644 index 000000000..1742b3b88 --- /dev/null +++ b/src-tauri/client-cli/src/logging.rs @@ -0,0 +1,35 @@ +//! CLI logging — three-stream model: stdout = data only, stderr = diagnostics. +//! +//! Installs a `tracing_subscriber` that writes to **stderr**. The `tracing-log` +//! feature on `tracing-subscriber` bridges `core`'s `log::*` output so library +//! diagnostics never pollute stdout. +//! +//! Default level: WARN (quiet). Staged with `-v`/`-vv`/`-vvv`. `DG_LOG` or +//! `RUST_LOG` in the environment take precedence. + +use tracing_subscriber::EnvFilter; + +/// Initialise the logging subscriber. +/// +/// * `verbosity` — 0 = WARN (quiet), 1 = INFO, 2 = DEBUG, 3+ = TRACE. +/// * If `DG_LOG` or `RUST_LOG` is set in the environment, it takes precedence. +pub fn init(verbosity: u8) { + let default_directive = match verbosity { + 0 => "warn", + 1 => "info", + 2 => "debug", + _ => "trace", + }; + + let filter = if let Ok(env) = std::env::var("DG_LOG").or_else(|_| std::env::var("RUST_LOG")) { + EnvFilter::new(env) + } else { + EnvFilter::new(default_directive) + }; + + tracing_subscriber::fmt() + .with_writer(std::io::stderr) + .with_env_filter(filter) + .with_target(false) + .init(); +} diff --git a/src-tauri/client-cli/src/main.rs b/src-tauri/client-cli/src/main.rs new file mode 100644 index 000000000..ba3ef5d14 --- /dev/null +++ b/src-tauri/client-cli/src/main.rs @@ -0,0 +1,166 @@ +use std::process::ExitCode; + +use clap::Parser; +use common::check_version_flag; + +mod brand; +mod cli; +mod commands; +mod exit; +mod logging; +mod mfa; +mod mfa_code; +mod output; +mod resolve; +mod state; +#[cfg(test)] +mod tests_daemon; +#[cfg(test)] +mod tests_proxy; + +use cli::{Cli, InstanceCommand, LocationCommand, TunnelCommand}; + +use crate::{ + cli::Commands, + commands::{connect, disconnect, instance, list, location, status, tunnel}, + state::State, +}; + +#[tokio::main] +async fn main() -> ExitCode { + // Handle --version / -V before any other work. + check_version_flag("defguard-cli"); + + // Brand banner: shown before clap's --help, and when invoked with + // zero arguments. NOT shown for --version (must stay grep-friendly). + show_banner_if_appropriate(); + + let cli = Cli::parse(); + + // Init logging to stderr so stdout stays data-only. + logging::init(cli.verbose); + + // Resolve state (DB pool, migrations, app config). + let state = match State::init().await { + Ok(s) => s, + Err(err) => { + let code = exit::exit_code_for(&err); + output::emit_error(&err, cli.json); + return ExitCode::from(code); + } + }; + + // Dispatch command. + match cli.command { + Commands::List => output::finish(list::handle(&state).await, cli.json), + Commands::Status => output::finish(status::handle(&state).await, cli.json), + Commands::Connect { + name, + tunnel, + id, + instance, + code, + code_command, + mfa_method, + all_traffic, + predefined_traffic, + } => output::finish( + connect::handle( + &state, + name.as_deref(), + tunnel, + id, + instance.as_deref(), + code.as_deref(), + code_command.as_deref(), + mfa_method.as_deref(), + all_traffic, + predefined_traffic, + ) + .await, + cli.json, + ), + Commands::Disconnect { + name, + tunnel, + id, + instance, + all, + } => output::finish( + disconnect::handle( + &state, + name.as_deref(), + tunnel, + id, + instance.as_deref(), + all, + ) + .await, + cli.json, + ), + Commands::Location(sub) => match sub { + LocationCommand::List => output::finish(location::handle_list(&state).await, cli.json), + LocationCommand::Set { + name, + instance, + mfa_method, + route_all_traffic, + predefined_traffic, + } => output::finish( + location::handle_set( + &state, + &name, + instance.as_deref(), + mfa_method.as_deref(), + if route_all_traffic { Some(true) } else { None }, + predefined_traffic, + ) + .await, + cli.json, + ), + LocationCommand::Show { name, instance } => output::finish( + location::handle_show(&state, &name, instance.as_deref()).await, + cli.json, + ), + }, + Commands::Instance(sub) => match sub { + InstanceCommand::List => output::finish(instance::handle_list(&state).await, cli.json), + InstanceCommand::Show { name } => { + output::finish(instance::handle_show(&state, &name).await, cli.json) + } + }, + Commands::Tunnel(sub) => match sub { + TunnelCommand::List => output::finish(tunnel::handle_list(&state).await, cli.json), + TunnelCommand::Show { name } => { + output::finish(tunnel::handle_show(&state, &name).await, cli.json) + } + }, + Commands::Enroll { .. } => { + let err = state::CliError::Usage("command not yet implemented".into()); + let code = exit::exit_code_for(&err); + output::emit_error(&err, cli.json); + ExitCode::from(code) + } + } +} + +/// Show the brand banner (logo + copyright + project version) on +/// the two surfaces that need branding: `defguard-cli` with no args +/// (clap prints help; we banner first), and `defguard-cli --help` / +/// `-h`. Suppressed for `--version` / `-V` -- that surface must stay +/// grep-friendly (`defguard-cli --version | head -1`). +fn show_banner_if_appropriate() { + let args: Vec = std::env::args().collect(); + // Skip argv[0]. If user supplied any subcommand or flag other + // than --help / -h, do not print the banner. + let user_args = &args[1..]; + let no_args = user_args.is_empty(); + let asked_help = user_args.iter().any(|a| a == "--help" || a == "-h"); + let asked_version = user_args.iter().any(|a| a == "--version" || a == "-V"); + if asked_version { + return; + } + if no_args || asked_help { + brand::print_banner(); + } +} diff --git a/src-tauri/client-cli/src/mfa.rs b/src-tauri/client-cli/src/mfa.rs new file mode 100644 index 000000000..32521da49 --- /dev/null +++ b/src-tauri/client-cli/src/mfa.rs @@ -0,0 +1,219 @@ +//! Connect-time VPN MFA over `core::proxy` (HTTP). +//! +//! Flow: `start` → `obtain_code` → `finish` → preshared_key. +//! Supports TOTP and email methods. OIDC and mobile-approve are WIP. + +use defguard_client_proto::defguard::{ + client_types::{ + ClientMfaFinishRequest, ClientMfaFinishResponse, ClientMfaStartRequest, + ClientMfaStartResponse, MfaMethod, + }, + enterprise::posture::v2::DevicePostureData, +}; +use defguard_core::{ + database::{ + models::{ + instance::Instance, + location::{infer_mfa_method, Location, LocationMfaMethod}, + wireguard_keys::WireguardKeys, + Id, + }, + DbPool, + }, + proxy::post_with_headers, +}; +use reqwest::{StatusCode, Url}; +use secrecy::{ExposeSecret, SecretString}; +use serde::Deserialize; +use tracing::{debug, info, warn}; + +use crate::{ + mfa_code::{obtain_code, CodeSource, MfaContext}, + state::CliError, +}; + +/// Run the VPN MFA handshake for a location. +/// +/// * `location` - the target location. +/// * `source` - how to obtain the code. +/// * `instance` - the instance this location belongs to (for proxy URL + pubkey). +/// * `method_override` - optional `--mfa-method` flag; if set, uses this instead of the +/// location's stored preference. +/// * `posture_data` - device posture data; must be provided when the location also +/// requires posture checks. +/// +/// Returns the WireGuard preshared key (as a [`SecretString`]) that must +/// be passed to `bring_up`. +pub async fn authorize( + location: &Location, + source: &CodeSource, + instance: &Instance, + method_override: Option<&str>, + posture_data: Option, + pool: &DbPool, +) -> Result { + let method = if let Some(raw) = method_override { + parse_method(raw)? + } else { + infer_method(location) + }; + + // Reject methods not yet supported by the CLI before doing any I/O. + match method { + MfaMethod::Oidc | MfaMethod::Biometric | MfaMethod::MobileApprove => { + return Err(CliError::MfaFailed(format!( + "MFA method {:?} is not yet supported by the CLI. Use the desktop client.", + method + ))); + } + _ => {} + } + + let wireguard_keys = WireguardKeys::find_by_instance_id(pool, instance.id) + .await + .map_err(|e| CliError::Other(e.to_string()))? + .ok_or_else(|| { + CliError::Other(format!( + "WireGuard keys not found for instance {}", + instance.name + )) + })?; + + // Parse the proxy base URL once and reuse it for both MFA requests. + let proxy_base = Url::parse(&instance.proxy_url) + .map_err(|e| CliError::Other(format!("Invalid proxy URL: {e}")))?; + + // The one-time MFA code and the returned preshared key are sensitive; warn (but do + // not block) if the proxy is not using HTTPS, since they would travel in cleartext. + if proxy_base.scheme() != "https" { + warn!( + "Proxy URL '{}' is not HTTPS; the MFA code and preshared key will be sent in cleartext.", + instance.proxy_url + ); + } + + // Step 1: Start the MFA session. + let start_req = ClientMfaStartRequest { + location_id: location.network_id, + pubkey: wireguard_keys.pubkey.clone(), + method: method as i32, + posture_data, + }; + + let start_url = proxy_base + .join("api/v1/client-mfa/start") + .map_err(|e| CliError::Other(format!("Failed to build MFA start URL: {e}")))?; + + debug!("Starting MFA session at {start_url}"); + let response = post_with_headers(start_url, &start_req) + .await + .map_err(|e| CliError::Other(format!("Failed to reach proxy: {e}")))?; + + if !response.status().is_success() { + return Err(handle_mfa_error(response).await); + } + + let start_resp: ClientMfaStartResponse = response + .json() + .await + .map_err(|e| CliError::Other(format!("Invalid MFA start response: {e}")))?; + + let token = start_resp.token.clone(); + debug!("MFA session started, token obtained"); + + // Step 2: Obtain the code. + let ctx = MfaContext { + instance: instance.name.clone(), + location: location.name.clone(), + }; + let code = obtain_code(source, &ctx)?; + + // Step 3: Finish the MFA session. + let finish_req = ClientMfaFinishRequest { + token, + code: Some(code.expose_secret().to_string()), + auth_pub_key: None, + }; + + let finish_url = proxy_base + .join("api/v1/client-mfa/finish") + .map_err(|e| CliError::Other(format!("Failed to build MFA finish URL: {e}")))?; + + debug!("Finishing MFA session at {finish_url}"); + let response = post_with_headers(finish_url, &finish_req) + .await + .map_err(|e| CliError::Other(format!("Failed to reach proxy: {e}")))?; + + if !response.status().is_success() { + return Err(handle_mfa_error(response).await); + } + + let finish_resp: ClientMfaFinishResponse = response + .json() + .await + .map_err(|e| CliError::Other(format!("Invalid MFA finish response: {e}")))?; + + info!("MFA session completed, preshared key obtained"); + Ok(SecretString::from(finish_resp.preshared_key)) +} + +/// Map a non-2xx MFA response to a `CliError`. +async fn handle_mfa_error(response: reqwest::Response) -> CliError { + let status = response.status(); + #[derive(Deserialize)] + struct ErrorBody { + error: Option, + } + + let message = response + .json::() + .await + .ok() + .and_then(|b| b.error) + .unwrap_or_else(|| format!("HTTP {status}")); + + match status { + StatusCode::FORBIDDEN | StatusCode::UNAUTHORIZED => { + CliError::MfaFailed(format!("MFA rejected: {message}")) + } + _ if status.is_client_error() => CliError::MfaFailed(format!("MFA error: {message}")), + _ => CliError::Other(format!("Proxy error (HTTP {status}): {message}")), + } +} + +/// Parse a `--mfa-method` flag string into the proto [`MfaMethod`] enum. +fn parse_method(raw: &str) -> Result { + match raw.to_lowercase().as_str() { + "totp" => Ok(MfaMethod::Totp), + "email" => Ok(MfaMethod::Email), + "oidc" => Ok(MfaMethod::Oidc), + "biometric" => Ok(MfaMethod::Biometric), + "mobile" | "mobile_approve" => Ok(MfaMethod::MobileApprove), + _ => Err(CliError::Usage(format!( + "Invalid --mfa-method '{raw}'. Valid: totp, email, oidc, biometric, mobile." + ))), + } +} + +/// Determine the MFA method to use for a location. +/// +/// Delegates to the core's [`infer_mfa_method`] so that +/// [`LocationMfaMode`] is respected - an External-mode location always +/// uses OIDC, while an Internal-mode location respects the stored +/// preference (defaulting to TOTP when unset). +fn infer_method(location: &Location) -> MfaMethod { + let method = infer_mfa_method(location.location_mfa_mode, location.mfa_method); + match method { + Some(LocationMfaMethod::Totp) => MfaMethod::Totp, + Some(LocationMfaMethod::Email) => MfaMethod::Email, + Some(LocationMfaMethod::Oidc) => MfaMethod::Oidc, + Some(LocationMfaMethod::Biometric) => MfaMethod::Biometric, + Some(LocationMfaMethod::MobileApprove) => MfaMethod::MobileApprove, + None => { + // `infer_mfa_method` only returns None for Disabled mode, but + // this function is only called when `mfa_enabled()` is true. + // Default to TOTP as a safe fallback. + MfaMethod::Totp + } + } +} diff --git a/src-tauri/client-cli/src/mfa_code.rs b/src-tauri/client-cli/src/mfa_code.rs new file mode 100644 index 000000000..2fc46fe87 --- /dev/null +++ b/src-tauri/client-cli/src/mfa_code.rs @@ -0,0 +1,183 @@ +//! Resolve the MFA proof across three input sources. +//! +//! Priority order: `--code` > `--code-command` > interactive TTY prompt. +//! Non-TTY + no code or command → `MfaInputRequired` error. +//! +//! The returned value is wrapped in [`secrecy::SecretString`] so it never +//! appears in logs, debug output, or error messages. + +use std::{ + fmt, + io::{self, IsTerminal, Write}, + process::Command, +}; + +use secrecy::SecretString; +use tracing::debug; + +use crate::state::CliError; + +/// Describes where to source the MFA code from. +/// +/// Manual [`Debug`] impl redacts the `Literal` variant so `--code ` +/// never leaks into logs or error output. +#[derive(Clone)] +pub enum CodeSource { + /// Literal value from `--code <6-digit>`. + Literal(String), + /// Shell command whose stdout yields the code (`--code-command`). + Command(String), + /// Read interactively from the terminal. + Interactive, +} + +impl fmt::Debug for CodeSource { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Literal(_) => f.debug_tuple("Literal").field(&"").finish(), + Self::Command(cmd) => f.debug_tuple("Command").field(cmd).finish(), + Self::Interactive => f.debug_tuple("Interactive").finish(), + } + } +} + +/// Context passed to `--code-command` via environment variables. +pub struct MfaContext { + /// `DG_INSTANCE` - the instance name. + pub instance: String, + /// `DG_LOCATION` - the location name. + pub location: String, +} + +/// Obtain a TOTP/email code from the configured source. +/// +/// The returned [`SecretString`] prevents accidental exposure through +/// [`Debug`], logs, or error messages. Callers that need the raw value +/// must explicitly call `.expose_secret()`. +pub fn obtain_code(source: &CodeSource, ctx: &MfaContext) -> Result { + match source { + CodeSource::Literal(code) => { + debug!("Using --code value"); + Ok(SecretString::from(code.trim())) + } + CodeSource::Command(cmd) => { + debug!("Running --code-command"); + let output = Command::new("sh") + .arg("-c") + .arg(cmd) + .env("DG_INSTANCE", &ctx.instance) + .env("DG_LOCATION", &ctx.location) + .output() + .map_err(|e| CliError::MfaFailed(format!("Failed to run code command: {e}")))?; + + if !output.status.success() { + let stderr = String::from_utf8_lossy(&output.stderr); + return Err(CliError::MfaFailed(format!( + "Code command exited with {}: {}", + output.status, + stderr.trim() + ))); + } + + let code = String::from_utf8_lossy(&output.stdout).trim().to_string(); + if code.is_empty() { + return Err(CliError::MfaFailed( + "Code command produced no output".into(), + )); + } + Ok(SecretString::from(code.as_str())) + } + CodeSource::Interactive => { + if !std::io::stdin().is_terminal() { + return Err(CliError::MfaInputRequired( + "No TTY available for interactive MFA code entry. Provide --code or --code-command." + .into(), + )); + } + + // N.B. stderr - stdout is reserved for data. + eprint!("Enter MFA code for {}: ", ctx.location); + io::stderr().flush().ok(); + + let mut code = String::new(); + io::stdin() + .read_line(&mut code) + .map_err(|e| CliError::MfaFailed(format!("Failed to read code: {e}")))?; + + Ok(SecretString::from(code.trim())) + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use secrecy::ExposeSecret; + + fn ctx() -> MfaContext { + MfaContext { + instance: "test-inst".into(), + location: "test-loc".into(), + } + } + + #[test] + fn test_literal_code_returns_trimmed_secret() { + let source = CodeSource::Literal(" 123456 ".into()); + let secret = obtain_code(&source, &ctx()).unwrap(); + assert_eq!(secret.expose_secret(), "123456"); + } + + #[test] + fn test_command_produces_stdout() { + let source = CodeSource::Command("echo -n 654321".into()); + let secret = obtain_code(&source, &ctx()).unwrap(); + assert_eq!(secret.expose_secret(), "654321"); + } + + #[test] + fn test_command_failure_is_mfa_failed() { + let source = CodeSource::Command("exit 2".into()); + let err = obtain_code(&source, &ctx()).unwrap_err(); + assert!(matches!(err, CliError::MfaFailed(_))); + assert!(err.to_string().contains("exited")); + } + + #[test] + fn test_command_empty_output_is_mfa_failed() { + let source = CodeSource::Command("true".into()); // produces no stdout + let err = obtain_code(&source, &ctx()).unwrap_err(); + assert!(matches!(err, CliError::MfaFailed(_))); + assert!(err.to_string().contains("no output")); + } + + #[test] + fn test_command_receives_env_vars() { + // Print the env vars to stdout so we can assert they're set. + let source = CodeSource::Command("echo -n $DG_INSTANCE/$DG_LOCATION".into()); + let secret = obtain_code(&source, &ctx()).unwrap(); + assert_eq!(secret.expose_secret(), "test-inst/test-loc"); + } + + #[test] + fn test_literal_is_redacted_in_debug() { + let source = CodeSource::Literal("secret123".into()); + let debug = format!("{source:?}"); + assert!(!debug.contains("secret123")); + assert!(debug.contains("")); + } + + #[test] + fn test_command_is_not_redacted_in_debug() { + let source = CodeSource::Command("echo code".into()); + let debug = format!("{source:?}"); + assert!(debug.contains("echo code")); + } + + #[test] + fn test_interactive_shows_in_debug() { + let source = CodeSource::Interactive; + let debug = format!("{source:?}"); + assert!(debug.contains("Interactive")); + } +} diff --git a/src-tauri/client-cli/src/output.rs b/src-tauri/client-cli/src/output.rs new file mode 100644 index 000000000..49a9297dd --- /dev/null +++ b/src-tauri/client-cli/src/output.rs @@ -0,0 +1,126 @@ +use std::process::ExitCode; + +use serde::Serialize; +use serde_json::json; + +use crate::{exit, state::CliError}; + +/// Typed command output that owns both human and JSON representations. +pub trait CommandOutput { + /// Produce a human-readable string (no trailing newline required). + fn human(&self) -> String; + /// Produce a structured JSON value. + fn json(&self) -> serde_json::Value; + /// Exit code override; defaults to 0 (success). + fn exit_code(&self) -> u8 { + 0 + } +} + +/// Render a `CommandOutput` value as either JSON or human-readable output. +pub fn emit(value: &T, json: bool) { + if json { + println!( + "{}", + serde_json::to_string_pretty(&value.json()) + .unwrap_or_else(|e| json!({ "error": e.to_string() }).to_string()) + ); + } else { + println!("{}", value.human()); + } +} + +#[derive(Serialize)] +struct JsonError { + kind: String, + message: String, +} + +/// Render an error. Under `--json`, prints a `{ "kind", "message" }` object. +pub fn emit_error(err: &CliError, json: bool) { + if json { + let je = JsonError { + kind: error_kind(err), + message: err.to_string(), + }; + eprintln!( + "{}", + serde_json::to_string(&je) + .unwrap_or_else(|e| json!({ "error": e.to_string() }).to_string()) + ); + } else { + eprintln!("Error: {err}"); + } +} + +#[derive(Serialize)] +pub struct InstanceEntry { + pub name: String, + pub url: String, +} + +#[derive(Serialize)] +pub struct LocationEntry { + pub name: String, + pub instance: Option, + pub address: String, + pub endpoint: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub mfa_enabled: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub mfa_method: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub route_all_traffic: Option, +} + +#[derive(Serialize)] +pub struct TunnelEntry { + pub name: String, + pub address: String, + pub endpoint: String, +} + +#[derive(Serialize)] +pub struct ActiveEntry { + pub connection_type: String, + pub name: String, + pub interface: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub listen_port: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub tx_bytes: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub rx_bytes: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub last_handshake_secs: Option, +} + +fn error_kind(err: &CliError) -> String { + match err { + CliError::Usage(_) => "usage".into(), + CliError::NotFound(_) => "notFound".into(), + CliError::DaemonUnavailable(_) => "unavailable".into(), + CliError::MfaFailed(_) => "mfaFailed".into(), + CliError::MfaInputRequired(_) => "mfaInputRequired".into(), + CliError::NotEnrolled(_) => "notEnrolled".into(), + CliError::InvalidInput(_) => "invalidInput".into(), + CliError::Database(_) => "database".into(), + CliError::Other(_) => "other".into(), + } +} + +/// Finalize a `CommandOutput` result, emit output, and return the exit code. +pub fn finish(result: Result, json: bool) -> ExitCode { + match result { + Ok(output) => { + let code = output.exit_code(); + emit(&output, json); + ExitCode::from(code) + } + Err(err) => { + let code = exit::exit_code_for(&err); + emit_error(&err, json); + ExitCode::from(code) + } + } +} diff --git a/src-tauri/client-cli/src/resolve.rs b/src-tauri/client-cli/src/resolve.rs new file mode 100644 index 000000000..0b58f4530 --- /dev/null +++ b/src-tauri/client-cli/src/resolve.rs @@ -0,0 +1,501 @@ +use defguard_core::database::{ + models::{instance::Instance, location::Location, tunnel::Tunnel, Id}, + DbPool, +}; + +use crate::state::CliError; + +/// The user's target specification, parsed from CLI arguments. +pub struct TargetSpec { + pub name: Option, + pub tunnel: bool, + pub id: Option, + pub instance: Option, +} + +/// A resolved connection target. +pub enum ResolvedTarget { + Location(Location), + Tunnel(Tunnel), +} + +/// Resolve a target for the `connect` command. +pub async fn resolve_connect_target( + spec: &TargetSpec, + pool: &DbPool, +) -> Result { + // --id fast path + if let Some(id) = spec.id { + if spec.tunnel { + let tun = Tunnel::find_by_id(pool, id) + .await? + .ok_or_else(|| CliError::NotFound(format!("No tunnel with id {id}")))?; + return Ok(ResolvedTarget::Tunnel(tun)); + } + if let Some(loc) = Location::find_by_id(pool, id).await? { + return Ok(ResolvedTarget::Location(loc)); + } + if let Some(tun) = Tunnel::find_by_id(pool, id).await? { + return Ok(ResolvedTarget::Tunnel(tun)); + } + return Err(CliError::NotFound(format!( + "No location or tunnel with id {id}" + ))); + } + + // Named target + if let Some(ref name) = spec.name { + return resolve_named(name, spec.tunnel, spec.instance.as_deref(), pool).await; + } + + // No-arg: pick sole location + resolve_sole_location(pool).await +} + +/// Resolve a target for the `disconnect` command. +/// +/// No-arg / --all resolution is handled directly in the disconnect handler +/// using `active_state`; this function is only called when a target is named. +pub async fn resolve_disconnect_target( + spec: &TargetSpec, + pool: &DbPool, +) -> Result { + resolve_connect_target(spec, pool).await +} + +async fn resolve_named( + name: &str, + tunnel_only: bool, + instance_filter: Option<&str>, + pool: &DbPool, +) -> Result { + if tunnel_only { + let tunnels = Tunnel::find_by_name(pool, name).await?; + return match tunnels.len() { + 0 => Err(CliError::NotFound(format!("Tunnel '{name}' not found"))), + 1 => Ok(ResolvedTarget::Tunnel( + tunnels + .into_iter() + .next() + .expect("exactly one tunnel expected after length check"), + )), + _ => Err(CliError::NotFound(format!( + "Multiple tunnels named '{name}'" + ))), + }; + } + + // Fetch matching locations by name. Instance filter is applied in Rust + // since cross-instance ambiguity is a business rule, not a query concern. + let loc_matches: Vec> = if let Some(inst_name) = instance_filter { + let inst = Instance::find_by_name(pool, inst_name) + .await? + .ok_or_else(|| CliError::NotFound(format!("Instance '{inst_name}' not found")))?; + Location::find_by_name(pool, name) + .await? + .into_iter() + .filter(|l| l.instance_id == inst.id) + .collect() + } else { + Location::find_by_name(pool, name).await? + }; + + let tun_matches = Tunnel::find_by_name(pool, name).await?; + + match (loc_matches.len(), tun_matches.len()) { + (0, 0) => Err(CliError::NotFound(format!("'{name}' not found"))), + (1, 0) => Ok(ResolvedTarget::Location( + loc_matches + .into_iter() + .next() + .expect("exactly one location expected after length check"), + )), + (0, 1) => Ok(ResolvedTarget::Tunnel( + tun_matches + .into_iter() + .next() + .expect("exactly one tunnel expected after length check"), + )), + (1, 1) => Err(CliError::NotFound(format!( + "'{name}' matches both a location and a tunnel. Use --tunnel." + ))), + (n, 0) if n > 1 => Err(CliError::NotFound(format!( + "'{name}' exists in multiple instances. Use --instance to pick one." + ))), + _ => Err(CliError::NotFound(format!( + "'{name}' matches multiple targets" + ))), + } +} + +async fn resolve_sole_location(pool: &DbPool) -> Result { + let locations = Location::all(pool, false).await?; + match locations.len() { + 0 => Err(CliError::NotEnrolled( + "No locations configured. Enroll an instance first.".into(), + )), + 1 => Ok(ResolvedTarget::Location( + locations + .into_iter() + .next() + .expect("exactly one location expected after length check"), + )), + _ => Err(CliError::NotFound( + "Multiple locations available. Specify a name.".into(), + )), + } +} + +#[cfg(test)] +mod tests { + use defguard_core::database::models::{ + instance::{ClientTrafficPolicy, Instance}, + location::{Location, LocationMfaMode, ServiceLocationMode}, + tunnel::Tunnel, + Id, NoId, + }; + + use super::*; + + fn sample_instance(name: &str) -> Instance { + Instance { + id: NoId, + name: name.into(), + uuid: format!("uuid-{name}"), + url: format!("https://{name}.example"), + proxy_url: format!("https://proxy.{name}.example"), + username: "alice".into(), + token: None, + client_traffic_policy: ClientTrafficPolicy::None, + enterprise_enabled: false, + openid_display_name: None, + } + } + + fn sample_location(name: &str, instance_id: Id) -> Location { + Location { + id: NoId, + instance_id, + network_id: 1, + name: name.into(), + address: "10.0.0.2/24".into(), + pubkey: format!("pk-loc-{name}"), + endpoint: "1.2.3.4:51820".into(), + allowed_ips: "0.0.0.0/0".into(), + dns: None, + route_all_traffic: false, + keepalive_interval: 25, + location_mfa_mode: LocationMfaMode::Disabled, + service_location_mode: ServiceLocationMode::Disabled, + mfa_method: None, + posture_check_required: false, + } + } + + fn sample_tunnel(name: &str) -> Tunnel { + Tunnel { + id: NoId, + name: name.into(), + pubkey: format!("pk-tun-{name}"), + prvkey: format!("prvk-tun-{name}"), + address: "10.1.0.2/24".into(), + server_pubkey: format!("spk-tun-{name}"), + preshared_key: None, + allowed_ips: Some("0.0.0.0/0".into()), + endpoint: "5.6.7.8:51820".into(), + dns: None, + persistent_keep_alive: 25, + route_all_traffic: false, + pre_up: None, + post_up: None, + pre_down: None, + post_down: None, + } + } + + /// Unwrap helper: avoids the `Debug` bound on `ResolvedTarget`. + fn expect_ok(result: Result) -> ResolvedTarget { + match result { + Ok(r) => r, + Err(e) => panic!("expected Ok, got Err: {e}"), + } + } + + fn expect_err(result: Result) -> CliError { + match result { + Ok(_) => panic!("expected Err, got Ok"), + Err(e) => e, + } + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_unique_location_by_name(pool: DbPool) { + let i = sample_instance("acme").save(&pool).await.unwrap(); + sample_location("office", i.id).save(&pool).await.unwrap(); + + let spec = TargetSpec { + name: Some("office".into()), + tunnel: false, + id: None, + instance: None, + }; + let result = expect_ok(resolve_connect_target(&spec, &pool).await); + match result { + ResolvedTarget::Location(l) => { + assert_eq!(l.name, "office"); + assert_eq!(l.instance_id, i.id); + } + _ => panic!("expected Location"), + } + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_unique_tunnel_by_name(pool: DbPool) { + sample_tunnel("gateway").save(&pool).await.unwrap(); + + let spec = TargetSpec { + name: Some("gateway".into()), + tunnel: false, + id: None, + instance: None, + }; + let result = expect_ok(resolve_connect_target(&spec, &pool).await); + match result { + ResolvedTarget::Tunnel(t) => assert_eq!(t.name, "gateway"), + _ => panic!("expected Tunnel"), + } + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_tunnel_by_name_with_tunnel_flag(pool: DbPool) { + let i = sample_instance("acme").save(&pool).await.unwrap(); + sample_location("office", i.id).save(&pool).await.unwrap(); + sample_tunnel("office").save(&pool).await.unwrap(); + + // Without --tunnel, the name clash produces an error. + let spec = TargetSpec { + name: Some("office".into()), + tunnel: false, + id: None, + instance: None, + }; + let err = expect_err(resolve_connect_target(&spec, &pool).await); + assert!(matches!(err, CliError::NotFound(_))); + assert!(err.to_string().contains("--tunnel")); + + // With --tunnel, the tunnel is resolved. + let spec = TargetSpec { + name: Some("office".into()), + tunnel: true, + id: None, + instance: None, + }; + let result = expect_ok(resolve_connect_target(&spec, &pool).await); + match result { + ResolvedTarget::Tunnel(t) => assert_eq!(t.name, "office"), + _ => panic!("expected Tunnel"), + } + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_cross_instance_name_collision(pool: DbPool) { + let i1 = sample_instance("acme").save(&pool).await.unwrap(); + let i2 = sample_instance("global").save(&pool).await.unwrap(); + sample_location("office", i1.id).save(&pool).await.unwrap(); + sample_location("office", i2.id).save(&pool).await.unwrap(); + + // Without --instance, ambiguous. + let spec = TargetSpec { + name: Some("office".into()), + tunnel: false, + id: None, + instance: None, + }; + let err = expect_err(resolve_connect_target(&spec, &pool).await); + assert!(matches!(err, CliError::NotFound(_))); + assert!(err.to_string().contains("--instance")); + + // With --instance, resolves to the correct one. + let spec = TargetSpec { + name: Some("office".into()), + tunnel: false, + id: None, + instance: Some("acme".into()), + }; + let result = expect_ok(resolve_connect_target(&spec, &pool).await); + match result { + ResolvedTarget::Location(l) => assert_eq!(l.instance_id, i1.id), + _ => panic!("expected Location"), + } + + let spec = TargetSpec { + name: Some("office".into()), + tunnel: false, + id: None, + instance: Some("global".into()), + }; + let result = expect_ok(resolve_connect_target(&spec, &pool).await); + match result { + ResolvedTarget::Location(l) => assert_eq!(l.instance_id, i2.id), + _ => panic!("expected Location"), + } + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_id_fast_path_location(pool: DbPool) { + let i = sample_instance("acme").save(&pool).await.unwrap(); + let saved = sample_location("office", i.id).save(&pool).await.unwrap(); + + let spec = TargetSpec { + name: None, + tunnel: false, + id: Some(saved.id), + instance: None, + }; + let result = expect_ok(resolve_connect_target(&spec, &pool).await); + match result { + ResolvedTarget::Location(l) => assert_eq!(l.id, saved.id), + _ => panic!("expected Location"), + } + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_id_fast_path_tunnel(pool: DbPool) { + let t = sample_tunnel("gateway").save(&pool).await.unwrap(); + + let spec = TargetSpec { + name: None, + tunnel: false, + id: Some(t.id), + instance: None, + }; + let result = expect_ok(resolve_connect_target(&spec, &pool).await); + match result { + ResolvedTarget::Tunnel(tun) => assert_eq!(tun.id, t.id), + _ => panic!("expected Tunnel"), + } + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_id_fast_path_tunnel_flag_skips_location(pool: DbPool) { + let i = sample_instance("acme").save(&pool).await.unwrap(); + let saved = sample_location("office", i.id).save(&pool).await.unwrap(); + + let spec = TargetSpec { + name: None, + tunnel: true, + id: Some(saved.id), + instance: None, + }; + // --tunnel skips Location lookup; the ID belongs to a Location so + // no Tunnel match is found. + let err = expect_err(resolve_connect_target(&spec, &pool).await); + assert!(matches!(err, CliError::NotFound(_))); + assert!(err.to_string().contains("No tunnel with id")); + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_id_fast_path_tunnel_flag_with_tunnel(pool: DbPool) { + let i = sample_instance("acme").save(&pool).await.unwrap(); + sample_location("office", i.id).save(&pool).await.unwrap(); + let t = sample_tunnel("gateway").save(&pool).await.unwrap(); + + let spec = TargetSpec { + name: None, + tunnel: true, + id: Some(t.id), + instance: None, + }; + let result = expect_ok(resolve_connect_target(&spec, &pool).await); + match result { + ResolvedTarget::Tunnel(tun) => assert_eq!(tun.id, t.id), + _ => panic!("expected Tunnel"), + } + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_id_not_found(pool: DbPool) { + let spec = TargetSpec { + name: None, + tunnel: false, + id: Some(9999), + instance: None, + }; + let err = expect_err(resolve_connect_target(&spec, &pool).await); + assert!(matches!(err, CliError::NotFound(_))); + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_sole_location_no_arg(pool: DbPool) { + let i = sample_instance("acme").save(&pool).await.unwrap(); + sample_location("office", i.id).save(&pool).await.unwrap(); + + let spec = TargetSpec { + name: None, + tunnel: false, + id: None, + instance: None, + }; + let result = expect_ok(resolve_connect_target(&spec, &pool).await); + match result { + ResolvedTarget::Location(l) => assert_eq!(l.name, "office"), + _ => panic!("expected Location"), + } + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_no_arg_with_tunnels_only(pool: DbPool) { + // Tunnels are ignored by the no-arg path (only locations considered). + sample_tunnel("gateway").save(&pool).await.unwrap(); + + let spec = TargetSpec { + name: None, + tunnel: false, + id: None, + instance: None, + }; + let err = expect_err(resolve_connect_target(&spec, &pool).await); + assert!(matches!(err, CliError::NotEnrolled(_))); + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_multiple_locations_no_arg(pool: DbPool) { + let i = sample_instance("acme").save(&pool).await.unwrap(); + sample_location("office", i.id).save(&pool).await.unwrap(); + sample_location("home", i.id).save(&pool).await.unwrap(); + + let spec = TargetSpec { + name: None, + tunnel: false, + id: None, + instance: None, + }; + let err = expect_err(resolve_connect_target(&spec, &pool).await); + assert!(matches!(err, CliError::NotFound(_))); + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_name_not_found(pool: DbPool) { + let spec = TargetSpec { + name: Some("nope".into()), + tunnel: false, + id: None, + instance: None, + }; + let err = expect_err(resolve_connect_target(&spec, &pool).await); + assert!(matches!(err, CliError::NotFound(_))); + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_instance_not_found(pool: DbPool) { + let spec = TargetSpec { + name: Some("office".into()), + tunnel: false, + id: None, + instance: Some("ghost".into()), + }; + let err = expect_err(resolve_connect_target(&spec, &pool).await); + assert!(matches!(err, CliError::NotFound(_))); + assert!(err.to_string().contains("ghost")); + } +} diff --git a/src-tauri/client-cli/src/state.rs b/src-tauri/client-cli/src/state.rs new file mode 100644 index 000000000..234b9952b --- /dev/null +++ b/src-tauri/client-cli/src/state.rs @@ -0,0 +1,92 @@ +//! CLI runtime state and error types. + +use std::path::Path; + +use defguard_core::{ + app_config::AppConfig, + database::{handle_db_migrations, DbPool, DB_POOL}, + error::Error as CoreError, +}; +use thiserror::Error; +use tracing::{debug, info}; + +/// Resolved CLI runtime state +pub struct State { + /// shared SQLite pool + pub pool: DbPool, + /// loaded application configuration (theme, log level, MTU, etc.) + pub app_config: AppConfig, +} + +#[derive(Debug, Error)] +pub enum CliError { + #[error("usage: {0}")] + Usage(String), + + #[error("{0}")] + NotFound(String), + + #[error("daemon unavailable: {0}")] + DaemonUnavailable(String), + + #[error("MFA failed: {0}")] + MfaFailed(String), + + #[error("MFA input required but no TTY: {0}")] + MfaInputRequired(String), + + #[error("not enrolled: {0}")] + NotEnrolled(String), + + #[error("invalid input: {0}")] + InvalidInput(String), + + #[error("{0}")] + Other(String), + + #[error("database error: {0}")] + Database(#[from] sqlx::Error), +} + +impl From for CliError { + fn from(err: CoreError) -> Self { + match err { + CoreError::NotFound => CliError::NotFound(err.to_string()), + CoreError::Database(inner_err) => CliError::Database(inner_err), + CoreError::BackendUnavailable(_) => CliError::DaemonUnavailable(err.to_string()), + CoreError::InvalidInput(_) => CliError::InvalidInput(err.to_string()), + _ => CliError::Other(err.to_string()), + } + } +} + +impl State { + /// Initialize the CLI runtime state: resolve data directory, open the + /// shared SQLite pool, and run migrations. + pub async fn init() -> Result { + let data_dir = defguard_core::app_data_dir() + .map(|p| p.to_string_lossy().to_string()) + .ok_or_else(|| { + CliError::Other( + "Could not determine the application data directory. Ensure a home/data \ + directory is configured for the current user." + .into(), + ) + })?; + + debug!("Using data directory: {data_dir}"); + + // Load application configuration (theme, MTU, log level, etc.). + let app_config = AppConfig::new(Path::new(&data_dir)); + + // Access the pool to trigger lazy initialization. + let pool = DB_POOL.clone(); + + // Run migrations. + handle_db_migrations().await; + + info!("CLI state initialized"); + + Ok(State { pool, app_config }) + } +} diff --git a/src-tauri/client-cli/src/tests_daemon.rs b/src-tauri/client-cli/src/tests_daemon.rs new file mode 100644 index 000000000..c1dbdad3f --- /dev/null +++ b/src-tauri/client-cli/src/tests_daemon.rs @@ -0,0 +1,233 @@ +use std::{ + collections::HashMap, + env::set_var, + fs::remove_file, + os::unix::net::UnixStream, + sync::{ + atomic::{AtomicUsize, Ordering}, + Arc, Mutex, + }, + thread::sleep, + time::Duration, +}; + +use defguard_client_proto::defguard::client::v1::{ + desktop_daemon_service_server::{DesktopDaemonService, DesktopDaemonServiceServer}, + CreateInterfaceRequest, DeleteServiceLocationsRequest, InterfaceData, ManagedInterfaceData, + Peer, ReadInterfaceDataRequest, RemoveInterfaceRequest, SaveServiceLocationsRequest, +}; +use defguard_core::{ + connection::active_state::active_state, + database::{ + models::{ + instance::{ClientTrafficPolicy, Instance}, + location::{Location, LocationMfaMode, ServiceLocationMode}, + NoId, + }, + DbPool, + }, + proto::{client::v1::ListInterfacesResponse, enterprise::posture::v2::DevicePostureData}, + ConnectionType, +}; +use tempfile::{tempdir, TempDir}; +use tokio::{net::UnixListener, sync::mpsc, task::JoinHandle}; +use tokio_stream::wrappers::{ReceiverStream, UnixListenerStream}; +use tonic::{transport::Server, Request, Response, Status}; + +const READY_POLL_INTERVAL: Duration = Duration::from_millis(10); +const READY_POLL_ATTEMPTS: u32 = 50; + +type StreamItem = Result; + +#[derive(Clone, Default)] +pub(crate) struct MockDaemonState { + pub(crate) interfaces: Arc>>, + pub(crate) create_count: Arc, + pub(crate) remove_count: Arc, +} + +struct MockDaemon { + state: MockDaemonState, +} + +#[tonic::async_trait] +impl DesktopDaemonService for MockDaemon { + async fn create_interface( + &self, + _req: Request, + ) -> Result, Status> { + self.state.create_count.fetch_add(1, Ordering::SeqCst); + Ok(Response::new(())) + } + + async fn remove_interface( + &self, + req: Request, + ) -> Result, Status> { + self.state.remove_count.fetch_add(1, Ordering::SeqCst); + self.state + .interfaces + .lock() + .unwrap() + .remove(&req.into_inner().interface_name); + Ok(Response::new(())) + } + + type ReadInterfaceDataStream = ReceiverStream; + + async fn read_interface_data( + &self, + req: Request, + ) -> Result, Status> { + let name = req.into_inner().interface_name; + let data = self.state.interfaces.lock().unwrap().get(&name).cloned(); + let (tx, rx) = mpsc::channel(1); + if let Some(d) = data { + let _ = tx.send(Ok(d)).await; + } + Ok(Response::new(ReceiverStream::new(rx))) + } + + async fn save_service_locations( + &self, + _req: Request, + ) -> Result, Status> { + Err(Status::unimplemented("not mocked")) + } + + async fn delete_service_locations( + &self, + _req: Request, + ) -> Result, Status> { + Err(Status::unimplemented("not mocked")) + } + + async fn get_posture_data( + &self, + _req: Request<()>, + ) -> Result, Status> { + Err(Status::unimplemented("not mocked")) + } + + async fn list_interfaces( + &self, + _req: Request<()>, + ) -> Result, Status> { + let interfaces: Vec = self + .state + .interfaces + .lock() + .unwrap() + .iter() + .map(|(ifname, data)| ManagedInterfaceData { + interface_name: ifname.clone(), + data: Some(data.clone()), + }) + .collect(); + Ok(Response::new(ListInterfacesResponse { interfaces })) + } +} + +/// Spawn a mock daemon on a temp Unix socket. Returns the mock state, the +/// server handle, and the temp dir (which owns the socket file). +fn spawn_mock() -> (MockDaemonState, JoinHandle<()>, TempDir) { + let state = MockDaemonState::default(); + let daemon = MockDaemon { + state: state.clone(), + }; + let dir = tempdir().unwrap(); + let socket_path = dir.path().join("defguard.sock"); + let _ = remove_file(&socket_path); + let uds = UnixListener::bind(&socket_path).unwrap(); + let handle = tokio::spawn(async move { + let incoming = UnixListenerStream::new(uds); + Server::builder() + .add_service(DesktopDaemonServiceServer::new(daemon)) + .serve_with_incoming(incoming) + .await + .ok(); + }); + set_var("DEFGUARD_DAEMON_SOCKET", socket_path.to_str().unwrap()); + // Poll until the socket accepts connections instead of sleeping a fixed amount. + for _ in 0..READY_POLL_ATTEMPTS { + if UnixStream::connect(&socket_path).is_ok() { + break; + } + sleep(READY_POLL_INTERVAL); + } + (state, handle, dir) +} + +#[sqlx::test(migrations = "../migrations")] +async fn test_active_state_lists_interfaces(pool: DbPool) { + let instance = Instance { + id: NoId, + name: "acme".into(), + uuid: "uuid-1".into(), + url: "https://core.example".into(), + proxy_url: "https://proxy.example".into(), + username: "alice".into(), + token: None, + client_traffic_policy: ClientTrafficPolicy::None, + enterprise_enabled: false, + openid_display_name: None, + } + .save(&pool) + .await + .unwrap(); + let location = Location { + id: NoId, + instance_id: instance.id, + network_id: 1, + name: "office".into(), + address: "10.0.0.2/24".into(), + pubkey: "pk-loc".into(), + endpoint: "1.2.3.4:51820".into(), + allowed_ips: "0.0.0.0/0".into(), + dns: None, + route_all_traffic: false, + keepalive_interval: 25, + location_mfa_mode: LocationMfaMode::Disabled, + service_location_mode: ServiceLocationMode::Disabled, + mfa_method: None, + posture_check_required: false, + } + .save(&pool) + .await + .unwrap(); + + let (state, _server, _dir) = spawn_mock(); + + let hex_pubkey = "abba"; + let b64_pubkey = "q7o="; + sqlx::query("UPDATE location SET pubkey = $1 WHERE id = $2") + .bind(b64_pubkey) + .bind(location.id) + .execute(&pool) + .await + .unwrap(); + + state.interfaces.lock().unwrap().insert( + "wg0".into(), + InterfaceData { + listen_port: 51820, + peers: vec![Peer { + public_key: hex_pubkey.into(), + preshared_key: None, + protocol_version: Some(1), + endpoint: Some("1.2.3.4:51820".into()), + last_handshake: Some(1700000000), + tx_bytes: 1000, + rx_bytes: 2000, + persistent_keepalive_interval: Some(0), + allowed_ips: vec!["0.0.0.0/0".into()], + }], + }, + ); + + let connections = active_state(&pool).await.unwrap(); + assert_eq!(connections.len(), 1, "expected 1 active connection"); + assert_eq!(connections[0].name, "office"); + assert_eq!(connections[0].interface_name, "wg0"); + assert_eq!(connections[0].connection_type, ConnectionType::Location); +} diff --git a/src-tauri/client-cli/src/tests_proxy.rs b/src-tauri/client-cli/src/tests_proxy.rs new file mode 100644 index 000000000..ac4c44beb --- /dev/null +++ b/src-tauri/client-cli/src/tests_proxy.rs @@ -0,0 +1,248 @@ +//! Integration tests: mock MFA proxy (HTTP). +//! +//! Each test spawns a tiny tokio-based HTTP server on a random port so +//! `mfa::authorize` can make real HTTP calls against it. The database is +//! seeded via `#[sqlx::test]`. + +use std::{ + io::{ErrorKind, Read, Write}, + net::{SocketAddr, TcpListener, TcpStream}, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, + thread::{sleep, spawn, JoinHandle}, + time::Duration, +}; + +use secrecy::ExposeSecret; + +use crate::{mfa, mfa_code::CodeSource, state::CliError}; + +use defguard_core::database::{ + models::{ + instance::{ClientTrafficPolicy, Instance}, + location::{Location, LocationMfaMode, ServiceLocationMode}, + Id, NoId, + }, + DbPool, +}; + +const READ_TIMEOUT: Duration = Duration::from_secs(5); +const CONNECT_TIMEOUT: Duration = Duration::from_millis(50); +const WAIT_TIMEOUT: Duration = Duration::from_millis(10); + +/// Response template for the mock proxy. +#[derive(Clone)] +struct MockResponse { + status: u16, + body: String, +} + +/// A tiny HTTP server that responds to MFA start/finish requests. +struct MockProxy { + addr: SocketAddr, + shutdown: Arc, + handle: Option>, +} + +impl MockProxy { + fn new(start_response: MockResponse, finish_response: MockResponse) -> Self { + let listener = TcpListener::bind("127.0.0.1:0").unwrap(); + // Non-blocking accept so the loop can observe the shutdown flag and exit cleanly. + listener.set_nonblocking(true).unwrap(); + let addr = listener.local_addr().unwrap(); + let shutdown = Arc::new(AtomicBool::new(false)); + let shutdown_thread = shutdown.clone(); + let handle = spawn(move || { + while !shutdown_thread.load(Ordering::Relaxed) { + let mut stream = match listener.accept() { + Ok((stream, _)) => stream, + Err(ref e) if e.kind() == ErrorKind::WouldBlock => { + sleep(WAIT_TIMEOUT); + continue; + } + Err(_) => break, + }; + stream.set_nonblocking(false).ok(); + stream.set_read_timeout(Some(READ_TIMEOUT)).ok(); + + // Read the full request head rather than assuming one read captures it. + let mut data = Vec::new(); + let mut buf = [0u8; 4096]; + loop { + match stream.read(&mut buf) { + Ok(0) => break, + Ok(n) => { + data.extend_from_slice(&buf[..n]); + if data.windows(4).any(|w| w == b"\r\n\r\n") { + break; + } + } + Err(_) => break, + } + } + + let request = String::from_utf8_lossy(&data); + let response = if request.contains("/api/v1/client-mfa/start") { + &start_response + } else { + &finish_response + }; + let body = format!( + "HTTP/1.1 {} OK\r\nContent-Type: application/json\r\nContent-Length: {}\r\nConnection: close\r\n\r\n{}", + response.status, + response.body.len(), + response.body, + ); + let _ = stream.write_all(body.as_bytes()); + } + }); + MockProxy { + addr, + shutdown, + handle: Some(handle), + } + } + + fn url(&self) -> String { + format!("http://{}/", self.addr) + } + + /// Wait until the proxy is accepting connections. + fn wait_ready(&self) { + for _ in 0..50 { + if TcpStream::connect_timeout(&self.addr, CONNECT_TIMEOUT).is_ok() { + return; + } + sleep(WAIT_TIMEOUT); + } + panic!("MockProxy not ready after 500 ms"); + } +} + +impl Drop for MockProxy { + fn drop(&mut self) { + self.shutdown.store(true, Ordering::Relaxed); + if let Some(handle) = self.handle.take() { + let _ = handle.join(); + } + } +} + +fn mfa_enabled_loc(name: &str, instance_id: Id) -> Location { + Location { + id: NoId, + instance_id, + network_id: 1, + name: name.into(), + address: "10.0.0.2/24".into(), + pubkey: "pk-loc".into(), + endpoint: "1.2.3.4:51820".into(), + allowed_ips: "0.0.0.0/0".into(), + dns: None, + route_all_traffic: false, + keepalive_interval: 25, + location_mfa_mode: LocationMfaMode::Internal, + service_location_mode: ServiceLocationMode::Disabled, + mfa_method: None, + posture_check_required: false, + } +} + +async fn seed_db(pool: &DbPool) -> (Instance, Location) { + let inst = Instance { + id: NoId, + name: "acme".into(), + uuid: "uuid-1".into(), + url: "https://core.example".into(), + proxy_url: String::new(), // filled later + username: "alice".into(), + token: None, + client_traffic_policy: ClientTrafficPolicy::None, + enterprise_enabled: false, + openid_display_name: None, + } + .save(pool) + .await + .unwrap(); + + // Insert wireguard keys (required by mfa::authorize). + sqlx::query("INSERT INTO wireguard_keys (instance_id, pubkey, prvkey) VALUES ($1, $2, $3)") + .bind(inst.id) + .bind("wg-pubkey") + .bind("wg-prvkey") + .execute(pool) + .await + .unwrap(); + + let loc = mfa_enabled_loc("office", inst.id).save(pool).await.unwrap(); + + (inst, loc) +} + +#[sqlx::test(migrations = "../migrations")] +async fn test_mfa_success_returns_psk(pool: DbPool) { + let (mut inst, loc) = seed_db(&pool).await; + let mock = MockProxy::new( + MockResponse { + status: 200, + body: r#"{"token":"tok-123"}"#.into(), + }, + MockResponse { + status: 200, + body: r#"{"preshared_key":"secret-psk"}"#.into(), + }, + ); + mock.wait_ready(); + inst.proxy_url = mock.url(); + + let source = CodeSource::Literal("123456".into()); + let psk = mfa::authorize(&loc, &source, &inst, None, None, &pool) + .await + .unwrap(); + assert_eq!(psk.expose_secret(), "secret-psk"); +} + +#[sqlx::test(migrations = "../migrations")] +async fn test_mfa_rejection_returns_mfa_failed(pool: DbPool) { + let (mut inst, loc) = seed_db(&pool).await; + let mock = MockProxy::new( + MockResponse { + status: 200, + body: r#"{"token":"tok-456"}"#.into(), + }, + MockResponse { + status: 403, + body: r#"{"error":"invalid TOTP code"}"#.into(), + }, + ); + mock.wait_ready(); + inst.proxy_url = mock.url(); + + let source = CodeSource::Literal("000000".into()); + let err = mfa::authorize(&loc, &source, &inst, None, None, &pool) + .await + .unwrap_err(); + + assert!(matches!(err, CliError::MfaFailed(_))); + assert!(err.to_string().contains("invalid TOTP code")); +} + +#[sqlx::test(migrations = "../migrations")] +async fn test_mfa_proxy_unreachable(pool: DbPool) { + let (mut inst, loc) = seed_db(&pool).await; + // Point at a port where nothing is listening. + inst.proxy_url = "http://127.0.0.1:19999/".into(); + + let source = CodeSource::Literal("123456".into()); + let err = mfa::authorize(&loc, &source, &inst, None, None, &pool) + .await + .unwrap_err(); + + assert!( + matches!(err, CliError::Other(_)), + "expected CliError::Other, got {err:?}" + ); + assert!(err.to_string().contains("Failed to reach proxy")); +} diff --git a/src-tauri/common/src/lib.rs b/src-tauri/common/src/lib.rs index 867698e34..48b1bf9f8 100644 --- a/src-tauri/common/src/lib.rs +++ b/src-tauri/common/src/lib.rs @@ -9,10 +9,20 @@ pub const VERSION: &str = env!("CARGO_PKG_VERSION"); /// builds), falling back to `CARGO_PKG_VERSION` + short commit hash. #[must_use] pub fn version_string(binary_name: &str) -> String { + let sha = option_env!("VERGEN_GIT_SHA") + .filter(|s| *s != "VERGEN_IDEMPOTENT_OUTPUT" && !s.trim().is_empty()); let version = option_env!("DEFGUARD_CLIENT_BUILD_VERSION") .filter(|v| !v.trim().is_empty()) - .map(|v| format!("{v} ({})", env!("VERGEN_GIT_SHA"))) - .unwrap_or_else(|| format!("{} ({})", env!("CARGO_PKG_VERSION"), env!("VERGEN_GIT_SHA"))); + .map_or_else( + || match sha { + Some(s) => format!("{} ({s})", env!("CARGO_PKG_VERSION")), + None => env!("CARGO_PKG_VERSION").to_string(), + }, + |v| match sha { + Some(s) => format!("{v} ({s})"), + None => v.to_string(), + }, + ); format!("{binary_name} {version}") } diff --git a/src-tauri/core/Cargo.toml b/src-tauri/core/Cargo.toml index 646321610..1cc2ac2b4 100644 --- a/src-tauri/core/Cargo.toml +++ b/src-tauri/core/Cargo.toml @@ -11,6 +11,7 @@ version.workspace = true [dependencies] base64.workspace = true chrono = { version = "0.4", features = ["serde"] } +hex = "0.4" defguard-client-common = { path = "../common" } defguard-client-proto = { path = "../client-proto" } defguard_wireguard_rs.workspace = true diff --git a/src-tauri/core/src/connection/active_state.rs b/src-tauri/core/src/connection/active_state.rs new file mode 100644 index 000000000..ac444bc30 --- /dev/null +++ b/src-tauri/core/src/connection/active_state.rs @@ -0,0 +1,194 @@ +//! Reconstruct currently-active WireGuard connections by querying the platform backend. +//! +//! The daemon (Linux/Windows) and Network Extension managers (macOS) are the shared +//! source of truth for interface state. + +use crate::{ + database::{models::Id, DbPool}, + error::Error, + ConnectionType, +}; + +#[cfg(not(target_os = "macos"))] +use crate::database::models::{location::Location, tunnel::Tunnel}; + +#[cfg(not(target_os = "macos"))] +use crate::connection::daemon_client::DAEMON_CLIENT; +#[cfg(not(target_os = "macos"))] +use base64::Engine as _; +#[cfg(not(target_os = "macos"))] +use defguard_client_proto::defguard::client::v1::{InterfaceData, Peer}; +#[cfg(not(target_os = "macos"))] +use tonic::Code; + +/// Describes a currently-active WireGuard connection. +#[derive(Clone, Debug)] +pub struct ActiveConnectionInfo { + /// Whether this is a server-defined `Location` or an imported `Tunnel`. + pub connection_type: ConnectionType, + /// The database id of the target (`Location.id` or `Tunnel.id`). + pub target_id: Id, + /// Human-readable name of the location or tunnel. + pub name: String, + /// Platform interface name, e.g. `"wg0"` on Linux. + pub interface_name: String, + /// Live statistics from the most recent backend probe, if any. + pub stats: Option, +} + +/// Snapshot of per-interface statistics retrieved from the backend. +#[derive(Clone, Debug)] +pub struct InterfaceStats { + pub listen_port: u32, + pub tx_bytes: u64, + pub rx_bytes: u64, + pub last_handshake: Option, +} + +/// Query the platform backend for all currently-up WireGuard interfaces and match each +/// peer back to a known `Location` or `Tunnel`. +/// +/// On Linux/Windows this calls the daemon's `ListInterfaces` RPC, which returns an +/// **unfiltered** snapshot of all managed interfaces (unlike `ReadInterfaceData`, which +/// drops peers that haven't completed a handshake or whose stats haven't changed). +/// +/// On macOS the Network Extension path is stubbed (pending the NE spike). +pub async fn active_state(pool: &DbPool) -> Result, Error> { + #[cfg(not(target_os = "macos"))] + { + active_state_daemon(pool).await + } + + #[cfg(target_os = "macos")] + { + warn!("active_state: macOS Network Extension enumeration not yet implemented; returning empty list"); + // Stub: NE-based enumeration pending the macOS spike. + let _ = pool; + Ok(Vec::new()) + } +} + +#[cfg(not(target_os = "macos"))] +async fn active_state_daemon(pool: &DbPool) -> Result, Error> { + let request = tonic::Request::new(()); + let response = DAEMON_CLIENT + .clone() + .list_interfaces(request) + .await + .map_err(|err| { + if err.code() == Code::Unavailable || err.code() == Code::Unimplemented { + error!("Daemon unavailable or outdated: {err}"); + Error::BackendUnavailable( + "Background service is unavailable or outdated. Start or update the background service.".into(), + ) + } else { + error!("Failed to call ListInterfaces: {err}"); + Error::InternalError(format!("ListInterfaces failed: {err}")) + } + })?; + let inner = response.into_inner(); + + info!( + "ListInterfaces returned {} managed interface(s)", + inner.interfaces.len() + ); + + let mut results = Vec::new(); + + for managed in &inner.interfaces { + let Some(iface_data) = &managed.data else { + continue; + }; + + for peer in &iface_data.peers { + // The daemon returns public keys as lower hex (Key::to_lower_hex()), + // but the database stores them as base64. Convert for matching. + let public_key_hex = &peer.public_key; + let public_key_b64 = match hex_to_base64(public_key_hex) { + Ok(k) => k, + Err(e) => { + warn!("Failed to convert hex pubkey to base64: {e}"); + continue; + } + }; + + // Try matching the peer to a Location first. + match Location::find_by_public_key(pool, &public_key_b64).await { + Ok(location) => { + info!( + "Matched peer to location {} (id={})", + location.name, location.id + ); + results.push(ActiveConnectionInfo { + connection_type: ConnectionType::Location, + target_id: location.id, + name: location.name.clone(), + interface_name: managed.interface_name.clone(), + stats: peer_stats(iface_data, peer), + }); + continue; + } + Err(sqlx::Error::RowNotFound) => { + // Not a Location, try Tunnel below. + } + Err(err) => { + warn!("DB error looking up public key: {err}"); + continue; + } + } + + // Then try matching to a Tunnel. + match Tunnel::find_by_server_public_key(pool, &public_key_b64).await { + Ok(tunnel) => { + info!("Matched peer to tunnel {} (id={})", tunnel.name, tunnel.id); + results.push(ActiveConnectionInfo { + connection_type: ConnectionType::Tunnel, + target_id: tunnel.id, + name: tunnel.name.clone(), + interface_name: managed.interface_name.clone(), + stats: peer_stats(iface_data, peer), + }); + continue; + } + Err(sqlx::Error::RowNotFound) => { + // Not a Tunnel either. + } + Err(err) => { + warn!("DB error looking up server public key: {err}"); + continue; + } + } + + debug!("Peer does not match any Location or Tunnel, skipping"); + } + } + + info!("active_state: found {} active connection(s)", results.len()); + Ok(results) +} + +/// Extract per-peer stats from an `InterfaceData` response. +/// +/// `ListInterfaces` returns an unfiltered snapshot that includes peers which have never +/// completed a handshake. Such a peer is not actually connected, so return `None` for it - +/// keeping the `Option` contract meaningful for callers. +#[cfg(not(target_os = "macos"))] +fn peer_stats(iface: &InterfaceData, peer: &Peer) -> Option { + match peer.last_handshake { + Some(ts) if ts > 0 => Some(InterfaceStats { + listen_port: iface.listen_port, + tx_bytes: peer.tx_bytes, + rx_bytes: peer.rx_bytes, + last_handshake: peer.last_handshake, + }), + _ => None, + } +} + +/// Convert a hex-encoded public key to base64, matching the database format. +#[cfg(not(target_os = "macos"))] +fn hex_to_base64(hex_str: &str) -> Result { + let bytes = hex::decode(hex_str) + .map_err(|e| Error::ConversionError(format!("Invalid hex pubkey: {e}")))?; + Ok(base64::engine::general_purpose::STANDARD.encode(&bytes)) +} diff --git a/src-tauri/core/src/connection/apple.rs b/src-tauri/core/src/connection/apple.rs new file mode 100644 index 000000000..8bcf4eacc --- /dev/null +++ b/src-tauri/core/src/connection/apple.rs @@ -0,0 +1,359 @@ +//! Interchangeability and communication with VPNExtension (written in Swift). + +use std::{ + collections::HashMap, + hint::spin_loop, + ptr::NonNull, + sync::{ + atomic::{AtomicBool, Ordering}, + mpsc::{self, channel, Receiver, RecvTimeoutError, Sender}, + Arc, LazyLock, Mutex, + }, + time::Duration, +}; + +const OBSERVER_CLEANUP_INTERVAL: Duration = Duration::from_secs(30); + +use block2::RcBlock; +use objc2::{rc::Retained, runtime::ProtocolObject}; +use objc2_foundation::{ + ns_string, NSArray, NSDate, NSError, NSNotification, NSNotificationCenter, NSNumber, + NSObjectProtocol, NSOperationQueue, NSRunLoop, NSString, +}; +use objc2_network_extension::{ + NETunnelProviderManager, NETunnelProviderProtocol, NEVPNConnection, + NEVPNStatusDidChangeNotification, +}; + +use crate::database::{ + models::{location::Location, tunnel::Tunnel, Id}, + DB_POOL, +}; + +const PLUGIN_BUNDLE_ID: &str = "net.defguard.VPNExtension"; +const LOCATION_ID: &str = "locationId"; +const TUNNEL_ID: &str = "tunnelId"; + +type ObserverSender = Mutex>; +type ObserverReceiver = Mutex>>; + +static OBSERVER_COMMS: LazyLock<(ObserverSender, ObserverReceiver)> = LazyLock::new(|| { + let (tx, rx) = mpsc::channel(); + (Mutex::new(tx), Mutex::new(Some(rx))) +}); + +type VpnStateSender = Mutex>; +type VpnStateReceiver = Mutex>>; + +static VPN_STATE_UPDATE_COMMS: LazyLock<(VpnStateSender, VpnStateReceiver)> = LazyLock::new(|| { + let (tx, rx) = mpsc::channel(); + (Mutex::new(tx), Mutex::new(Some(rx))) +}); + +/// Thread responsible for observing VPN status changes. +/// This is intentionally a blocking function, as it uses the Objective-C objects which are not +/// thread safe. +pub fn observer_thread( + initial_managers: HashMap<(&'static str, Id), Retained>, +) { + debug!("Starting VPN connection observer thread"); + let receiver = { + let mut rx_opt = OBSERVER_COMMS + .1 + .lock() + .expect("Failed to lock observer receiver"); + rx_opt.take().expect("Receiver already taken") + }; + + let mut observers = HashMap::new(); + + // spawn initial observers for existing managers + for ((key, value), manager) in initial_managers { + debug!("Spawning initial observer for manager with key: {key}, value: {value}"); + let connection = unsafe { manager.connection() }; + let observer = create_observer(&connection); + debug!("Registered initial observer for manager with key: {key}, value: {value}"); + observers.insert((key, value), observer); + } + + loop { + match receiver.recv_timeout(OBSERVER_CLEANUP_INTERVAL) { + Ok(message) => { + debug!("Received message to observe the following connection: {message:?}"); + + let (key, value) = message; + + if observers.contains_key(&(key, value)) { + debug!( + "Observer for manager with key: {key}, value: {value} already exists, + skipping", + ); + continue; + } + + let manager = manager_for_key_and_value(key, value).unwrap(); + let connection = unsafe { manager.connection() }; + let observer = create_observer(&connection); + + observers.insert((key, value), observer); + debug!("Registered observer for manager with key: {key}, value: {value}"); + } + Err(RecvTimeoutError::Timeout) => { + debug!("Performing periodic cleanup of dead observers"); + let mut dead_keys = Vec::new(); + + for (key, value) in observers.keys() { + if manager_for_key_and_value(key, *value).is_none() { + debug!( + "Manager for key: {key}, value: {value} no longer exists, marking for + removal" + ); + dead_keys.push((*key, *value)); + } + } + + for dead_key in dead_keys { + if let Some(_observer) = observers.remove(&dead_key) { + debug!( + "Removed dead VPN connection observer for key: {}, value: {}", + dead_key.0, dead_key.1 + ); + } + } + } + Err(RecvTimeoutError::Disconnected) => { + error!("Observer receiver channel disconnected, exiting observer thread"); + break; + } + } + } + + debug!("Exiting VPN connection observer thread"); +} + +/// Tunnel statistics shared with VPNExtension (written in Swift). +/// Run [`NSRunLoop`] until semaphore becomes `true`. +pub fn spawn_runloop_and_wait_for(semaphore: &Arc) { + const ONE_SECOND: f64 = 1.; + let run_loop = NSRunLoop::currentRunLoop(); + let mut date = NSDate::dateWithTimeIntervalSinceNow(ONE_SECOND); + loop { + run_loop.runUntilDate(&date); + if semaphore.load(Ordering::Acquire) { + break; + } + date = date.dateByAddingTimeInterval(ONE_SECOND); + } +} + +/// Handle VPN status change. +fn vpn_status_change_handler(notification: &NSNotification) { + let name = notification.name(); + debug!("Received VPN status change notification: {name:?}"); + VPN_STATE_UPDATE_COMMS + .0 + .lock() + .expect("Failed to lock state update sender") + .send(()) + .expect("Failed to send to state update channel"); + debug!("Sent status update request to channel"); +} + +/// Observe VPN status change. +fn create_observer(object: &NEVPNConnection) -> Retained> { + let center = NSNotificationCenter::defaultCenter(); + let block = RcBlock::new(move |notification: NonNull| { + vpn_status_change_handler(unsafe { notification.as_ref() }); + }); + let queue = NSOperationQueue::mainQueue(); + unsafe { + let name = NEVPNStatusDidChangeNotification; + center.addObserverForName_object_queue_usingBlock( + Some(name), + Some(object), + Some(&queue), + &block, + ) + } +} + +#[must_use] +pub fn get_managers_for_tunnels_and_locations( + tunnels: &[Tunnel], + locations: &[Location], +) -> HashMap<(&'static str, Id), Retained> { + let mut managers = HashMap::new(); + + for location in locations { + if let Some(manager) = manager_for_key_and_value(LOCATION_ID, location.id) { + managers.insert((LOCATION_ID, location.id), manager); + } + } + + for tunnel in tunnels { + if let Some(manager) = manager_for_key_and_value(TUNNEL_ID, tunnel.id) { + managers.insert((TUNNEL_ID, tunnel.id), manager); + } + } + + managers +} + +/// Try to get `Id` out of manager. ID is embedded in configuration dictionary under `key`. +fn id_from_manager(manager: &NETunnelProviderManager, key: &NSString) -> Option { + let plugin_bundle_id = ns_string!(PLUGIN_BUNDLE_ID); + + let vpn_protocol = (unsafe { manager.protocolConfiguration() })?; + let Ok(tunnel_protocol) = vpn_protocol.downcast::() else { + error!("Failed to downcast to NETunnelProviderProtocol"); + return None; + }; + // Sometimes all managers from all apps come through, so filter by bundle ID. + if let Some(bundle_id) = unsafe { tunnel_protocol.providerBundleIdentifier() } { + if &*bundle_id != plugin_bundle_id { + return None; + } + } + + if let Some(config_dict) = unsafe { tunnel_protocol.providerConfiguration() } { + if let Some(any_object) = config_dict.objectForKey(key) { + let Ok(id) = any_object.downcast::() else { + warn!("Failed to downcast ID to NSNumber"); + return None; + }; + return Some(id.as_i64()); + } + } + + None +} + +/// Try to find [`NETunnelProviderManager`] in system settings that matches key and value. +/// Key is usually `locationId` or `tunnelId`. +fn manager_for_key_and_value(key: &str, value: Id) -> Option> { + let key_string = NSString::from_str(key); + let (tx, rx) = channel(); + + let handler = RcBlock::new( + move |managers_ptr: *mut NSArray, error_ptr: *mut NSError| { + if !error_ptr.is_null() { + error!("Failed to load tunnel provider managers."); + return; + } + + let Some(managers) = (unsafe { managers_ptr.as_ref() }) else { + error!("No managers"); + return; + }; + + for manager in managers { + if let Some(id) = id_from_manager(&manager, &key_string) { + if id == value { + // This is the manager we were looking for. + tx.send(Some(manager)).expect("Sender is dead"); + return; + } + } + } + + tx.send(None).expect("Sender is dead"); + }, + ); + unsafe { + NETunnelProviderManager::loadAllFromPreferencesWithCompletionHandler(&handler); + } + + rx.recv().expect("Receiver is dead") +} + +/// Synchronize locations and tunnels with system settings. +pub async fn sync_locations_and_tunnels(mtu: Option) -> Result<(), sqlx::Error> { + // Update location settings. + let all_locations = Location::all(&*DB_POOL, false).await?; + for location in &all_locations { + // For syncing, set `preshred_key` to `None`. + let Ok(tunnel_config) = location.tunnel_configuration(None, mtu).await else { + error!( + "Failed to convert location {} to tunnel configuration.", + location.name + ); + continue; + }; + tunnel_config.save(); + } + + // Update tunnel settings. + let all_tunnels = Tunnel::all(&*DB_POOL).await?; + for tunnel in &all_tunnels { + let Ok(tunnel_config) = tunnel.tunnel_configuration(mtu) else { + error!( + "Failed to convert tunnel {} to tunnel configuration.", + tunnel.name + ); + continue; + }; + tunnel_config.save(); + } + + debug!("Saved all configurations with system settings."); + + // Convert to Vec. + let mut all_location_ids = all_locations + .into_iter() + .map(|entry| entry.id) + .collect::>(); + let mut all_tunnel_ids = all_tunnels + .into_iter() + .map(|entry| entry.id) + .collect::>(); + // For faster lookup using binary search (see below). + all_location_ids.sort_unstable(); + all_tunnel_ids.sort_unstable(); + + let spinlock = Arc::new(AtomicBool::new(false)); + let spinlock_clone = Arc::clone(&spinlock); + let handler = RcBlock::new( + move |managers_ptr: *mut NSArray, error_ptr: *mut NSError| { + if !error_ptr.is_null() { + error!("Failed to load tunnel provider managers."); + return; + } + + let Some(managers) = (unsafe { managers_ptr.as_ref() }) else { + error!("No managers"); + return; + }; + + let location_key = NSString::from_str(LOCATION_ID); + let tunnel_key = NSString::from_str(TUNNEL_ID); + for manager in managers { + if let Some(id) = id_from_manager(&manager, &location_key) { + if all_location_ids.binary_search(&id).is_ok() { + // Known location - skip. + continue; + } + } + if let Some(id) = id_from_manager(&manager, &tunnel_key) { + if all_tunnel_ids.binary_search(&id).is_ok() { + // Known tunnel - skip. + continue; + } + } + unsafe { manager.removeFromPreferencesWithCompletionHandler(None) }; + } + + spinlock_clone.store(true, Ordering::Release); + }, + ); + unsafe { + NETunnelProviderManager::loadAllFromPreferencesWithCompletionHandler(&handler); + } + + while !spinlock.load(Ordering::Acquire) { + spin_loop(); + } + + debug!("Removed unknown configurations from system settings."); + + Ok(()) +} diff --git a/src-tauri/core/src/connection/daemon_client.rs b/src-tauri/core/src/connection/daemon_client.rs index 5bf2d563f..452144269 100644 --- a/src-tauri/core/src/connection/daemon_client.rs +++ b/src-tauri/core/src/connection/daemon_client.rs @@ -16,6 +16,20 @@ use defguard_client_proto::defguard::client::v1::desktop_daemon_service_client:: #[cfg(unix)] const DAEMON_SOCKET_PATH: &str = "/var/run/defguard.socket"; + +/// Returns the daemon socket path. In test/debug builds the +/// `DEFGUARD_DAEMON_SOCKET` environment variable can override the default +/// (useful for integration tests). In release builds the override is +/// disabled to prevent an undocumented channel-redirection surface. +#[cfg(unix)] +#[must_use] +pub fn daemon_socket_path() -> String { + #[cfg(any(test, debug_assertions))] + if let Ok(path) = std::env::var("DEFGUARD_DAEMON_SOCKET") { + return path; + } + DAEMON_SOCKET_PATH.to_string() +} #[cfg(windows)] const PIPE_NAME: &str = r"\\.\pipe\defguard_daemon"; @@ -26,7 +40,7 @@ pub static DAEMON_CLIENT: LazyLock> = LazyLo #[cfg(unix)] { channel = endpoint.connect_with_connector_lazy(service_fn(|_: Uri| async { - let stream = match UnixStream::connect(DAEMON_SOCKET_PATH).await { + let stream = match UnixStream::connect(daemon_socket_path()).await { Ok(stream) => stream, Err(err) if err.kind() == std::io::ErrorKind::PermissionDenied => { error!( diff --git a/src-tauri/core/src/connection/mod.rs b/src-tauri/core/src/connection/mod.rs index 92a8761b8..d3f6dad60 100644 --- a/src-tauri/core/src/connection/mod.rs +++ b/src-tauri/core/src/connection/mod.rs @@ -1,7 +1,104 @@ pub mod active_connections; +pub mod active_state; pub mod daemon_client; pub mod setup; +#[cfg(target_os = "macos")] +pub mod apple; + +#[cfg(not(target_os = "macos"))] +use crate::database::models::connection::ActiveConnection; +#[cfg(target_os = "macos")] +pub use apple::sync_locations_and_tunnels; +#[cfg(not(target_os = "macos"))] +use chrono::Utc; pub use setup::{disconnect_interface, execute_command}; #[cfg(not(target_os = "macos"))] pub use setup::{setup_interface, setup_interface_tunnel}; + +use active_state::ActiveConnectionInfo; + +use crate::database::{ + models::{location::Location, tunnel::Tunnel, Id}, + DbPool, +}; +use crate::error::Error; + +/// Identifies the type of connection target. +pub enum ConnectionTarget<'a> { + Location(&'a Location), + Tunnel(&'a Tunnel), +} + +/// Bring a WireGuard interface up for the given target. +#[cfg_attr(target_os = "macos", allow(unused_variables))] +pub async fn bring_up( + target: ConnectionTarget<'_>, + psk: Option, + mtu: Option, + pool: &DbPool, + route_all_traffic: Option, +) -> Result { + #[cfg(not(target_os = "macos"))] + { + match target { + ConnectionTarget::Location(loc) => { + setup::setup_interface(loc, &loc.name, psk, mtu, pool, route_all_traffic).await + } + ConnectionTarget::Tunnel(tun) => { + setup::setup_interface_tunnel(tun, &tun.name, mtu, route_all_traffic).await + } + } + } + + #[cfg(target_os = "macos")] + { + // Work-around MFA propagation delay. + const TUNNEL_START_DELAY: std::time::Duration = std::time::Duration::from_secs(1); + + let tunnel_config = match target { + ConnectionTarget::Location(loc) => loc.tunnel_configuration(psk, mtu).await, + ConnectionTarget::Tunnel(tun) => tun.tunnel_configuration(mtu), + }?; + + tunnel_config.save(); + tokio::time::sleep(TUNNEL_START_DELAY).await; + tunnel_config.start_tunnel(); + + // On macOS the interface name is managed by the system. + Ok(String::new()) + } +} + +/// Tear down a WireGuard interface identified by `ActiveConnectionInfo`. +/// +/// On macOS this returns [`Error::BackendUnavailable`] - see [`bring_up`]. +// +// FIXME: This constructs an `ActiveConnection` with `start: Utc::now()`, +// which records a zero-duration connection when saved. This impacts the +// connection history overview (all entries appear instant). Connection +// tracking should be refactored to carry the real start time from the +// active-state record through to the history persistence path. +pub async fn tear_down(conn: &ActiveConnectionInfo) -> Result<(), Error> { + #[cfg(not(target_os = "macos"))] + { + let connection = ActiveConnection { + location_id: conn.target_id, + connection_type: conn.connection_type, + start: Utc::now().naive_utc(), + interface_name: conn.interface_name.clone(), + }; + + disconnect_interface(&connection).await + } + + #[cfg(target_os = "macos")] + { + let _ = conn; + Err(Error::BackendUnavailable( + "VPN connection management is not yet supported on macOS from the CLI. \ + Use the desktop client." + .into(), + )) + } +} diff --git a/src-tauri/core/src/connection/setup.rs b/src-tauri/core/src/connection/setup.rs index 3e500117f..713952717 100644 --- a/src-tauri/core/src/connection/setup.rs +++ b/src-tauri/core/src/connection/setup.rs @@ -35,6 +35,7 @@ pub async fn setup_interface( preshared_key: Option, mtu: Option, pool: &DbPool, + route_all_traffic: Option, ) -> Result { debug!("Setting up interface for location: {location}"); let interface_name = get_interface_name(name); @@ -50,7 +51,13 @@ pub async fn setup_interface( debug!("Found free port: {port} for interface {interface_name}."); let interface_config = location - .interface_configuration(pool, interface_name.clone(), preshared_key, mtu) + .interface_configuration( + pool, + interface_name.clone(), + preshared_key, + mtu, + route_all_traffic, + ) .await?; debug!("Creating interface for location {location} with configuration {interface_config:?}"); let request = CreateInterfaceRequest { @@ -63,7 +70,7 @@ pub async fn setup_interface( "Failed to set up connection for location {location}; background service is \ unavailable. Make sure the service is running. Error: {error}" ); - Err(Error::InternalError( + Err(Error::BackendUnavailable( "Background service is unavailable. Make sure the service is running.".into(), )) } else { @@ -90,6 +97,7 @@ pub async fn setup_interface_tunnel( tunnel: &Tunnel, name: &str, mtu: Option, + route_all_traffic: Option, ) -> Result { debug!("Setting up interface for tunnel {tunnel}"); let interface_name = get_interface_name(name); @@ -123,7 +131,8 @@ pub async fn setup_interface_tunnel( "Parsing tunnel {tunnel} allowed ips: {:?}", tunnel.allowed_ips ); - let allowed_ips = if tunnel.route_all_traffic { + let route_all_traffic = route_all_traffic.unwrap_or(tunnel.route_all_traffic); + let allowed_ips = if route_all_traffic { debug!("Using all traffic routing for tunnel {tunnel}"); vec![DEFAULT_ROUTE_IPV4.into(), DEFAULT_ROUTE_IPV6.into()] } else { diff --git a/src-tauri/core/src/database/mod.rs b/src-tauri/core/src/database/mod.rs index 5cbdcaa2d..3df67ec07 100644 --- a/src-tauri/core/src/database/mod.rs +++ b/src-tauri/core/src/database/mod.rs @@ -3,6 +3,7 @@ use std::{ fs::{create_dir_all, File}, str::FromStr, sync::LazyLock, + time::Duration, }; use sqlx::sqlite::{SqliteAutoVacuum, SqliteConnectOptions, SqliteJournalMode, SqlitePool}; @@ -23,7 +24,8 @@ pub static DB_POOL: LazyLock = LazyLock::new(|| { .expect("Failed to set database connenction options.") .create_if_missing(true) .auto_vacuum(SqliteAutoVacuum::Incremental) - .journal_mode(SqliteJournalMode::Wal); + .journal_mode(SqliteJournalMode::Wal) + .busy_timeout(Duration::from_secs(5)); debug!("Connecting to database: {db_url} with options: {opts:?}"); SqlitePool::connect_lazy_with(opts) }); diff --git a/src-tauri/core/src/database/models/location.rs b/src-tauri/core/src/database/models/location.rs index a8369923e..de8c0612c 100644 --- a/src-tauri/core/src/database/models/location.rs +++ b/src-tauri/core/src/database/models/location.rs @@ -10,12 +10,18 @@ use sqlx::{prelude::Type, query, query_as, query_scalar, SqliteExecutor}; #[cfg(not(target_os = "macos"))] use super::wireguard_keys::WireguardKeys; use super::{Id, NoId}; -use crate::error::Error; -use crate::proto::client_types::{ - LocationMfaMode as ProtoLocationMfaMode, ServiceLocationMode as ProtoServiceLocationMode, +use crate::{ + database::{ + models::instance::{ClientTrafficPolicy, Instance}, + DbPool, + }, + error::Error, + proto::client_types::{ + LocationMfaMode as ProtoLocationMfaMode, ServiceLocationMode as ProtoServiceLocationMode, + }, }; #[cfg(not(target_os = "macos"))] -use crate::{database::DbPool, DEFAULT_ROUTE_IPV4, DEFAULT_ROUTE_IPV6}; +use crate::{DEFAULT_ROUTE_IPV4, DEFAULT_ROUTE_IPV6}; #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash, Type)] #[repr(u32)] @@ -120,7 +126,6 @@ impl fmt::Display for Location { impl Location { /// Ignores service locations - #[cfg(any(windows, target_os = "macos"))] pub async fn all<'e, E>(executor: E, include_service_locations: bool) -> sqlx::Result> where E: SqliteExecutor<'e>, @@ -142,7 +147,6 @@ impl Location { .await } - #[cfg(any(windows, target_os = "macos"))] pub async fn exist<'e, E>(executor: E, include_service_locations: bool) -> sqlx::Result where E: SqliteExecutor<'e>, @@ -159,6 +163,28 @@ impl Location { Ok(result != 0) } + /// Find locations by name (excluding service locations). + /// Returns all matches - callers must handle cross-instance ambiguity. + pub async fn find_by_name<'e, E>(executor: E, name: &str) -> sqlx::Result> + where + E: SqliteExecutor<'e>, + { + let max = Self::get_service_location_mode_filter(false); + query_as!( + Self, + "SELECT id, instance_id, name, address, pubkey, endpoint, allowed_ips, dns, \ + network_id, route_all_traffic, keepalive_interval, \ + location_mfa_mode \"location_mfa_mode: LocationMfaMode\", \ + service_location_mode \"service_location_mode: ServiceLocationMode\", \ + mfa_method \"mfa_method: _\", posture_check_required \ + FROM location WHERE name = $1 AND service_location_mode <= $2 ORDER BY name ASC", + name, + max, + ) + .fetch_all(executor) + .await + } + pub async fn save<'e, E>(&mut self, executor: E) -> sqlx::Result<()> where E: SqliteExecutor<'e>, @@ -295,6 +321,7 @@ impl Location { interface_name: String, preshared_key: Option, mtu: Option, + route_all_traffic: Option, ) -> Result { use crate::database::models::instance::{ClientTrafficPolicy, Instance}; @@ -336,7 +363,7 @@ impl Location { let route_all_traffic = match instance.client_traffic_policy { ClientTrafficPolicy::ForceAllTraffic => true, ClientTrafficPolicy::DisableAllTraffic => false, - ClientTrafficPolicy::None => self.route_all_traffic, + ClientTrafficPolicy::None => route_all_traffic.unwrap_or(self.route_all_traffic), }; let allowed_ips = if route_all_traffic { debug!("Using all traffic routing for location {self}"); @@ -391,6 +418,57 @@ impl Location { Ok(interface_config) } + /// Persist a per-location MFA method override, clamped via [`infer_mfa_method`] + /// against the location's MFA mode (`location_mfa_mode`). + pub async fn set_mfa_method( + pool: &DbPool, + location_id: Id, + method: LocationMfaMethod, + ) -> Result<(), Error> { + let mut location = Self::find_by_id(pool, location_id) + .await? + .ok_or(Error::NotFound)?; + let inferred = infer_mfa_method(location.location_mfa_mode, Some(method)); + location.mfa_method = inferred; + location.save(pool).await?; + Ok(()) + } + + /// Persist the route-all-traffic flag for a location, rejecting the update if + /// the owning instance's [`ClientTrafficPolicy`] forbids the requested value. + pub async fn update_routing( + pool: &DbPool, + location_id: Id, + route_all_traffic: bool, + ) -> Result<(), Error> { + let mut location = Self::find_by_id(pool, location_id) + .await? + .ok_or(Error::NotFound)?; + + let instance = Instance::find_by_id(pool, location.instance_id) + .await? + .ok_or(Error::NotFound)?; + + if instance.client_traffic_policy == ClientTrafficPolicy::DisableAllTraffic + && route_all_traffic + { + return Err(Error::InvalidInput( + "Instance has route_all_traffic disabled.".into(), + )); + } + if instance.client_traffic_policy == ClientTrafficPolicy::ForceAllTraffic + && !route_all_traffic + { + return Err(Error::InvalidInput( + "Instance has route_all_traffic enforced.".into(), + )); + } + + location.route_all_traffic = route_all_traffic; + location.save(pool).await?; + Ok(()) + } + /// Returns a filter value that can be used in SQL queries like `service_location_mode <= ?` /// when querying locations to exclude (<= 1) or include service locations (all service /// locations modes). diff --git a/src-tauri/core/src/database/models/tunnel.rs b/src-tauri/core/src/database/models/tunnel.rs index 842967db6..5ed5f26c1 100644 --- a/src-tauri/core/src/database/models/tunnel.rs +++ b/src-tauri/core/src/database/models/tunnel.rs @@ -129,6 +129,23 @@ impl Tunnel { Ok(tunnels) } + /// Find tunnels by name. + pub async fn find_by_name<'e, E>(executor: E, name: &str) -> sqlx::Result> + where + E: SqliteExecutor<'e>, + { + query_as!( + Self, + "SELECT id \"id: _\", name, pubkey, prvkey, address, server_pubkey, preshared_key, \ + allowed_ips, endpoint, dns, persistent_keep_alive, route_all_traffic, pre_up, \ + post_up, pre_down, post_down \ + FROM tunnel WHERE name = $1 ORDER BY name ASC", + name, + ) + .fetch_all(executor) + .await + } + pub async fn find_by_server_public_key<'e, E>(executor: E, pubkey: &str) -> sqlx::Result where E: SqliteExecutor<'e>, diff --git a/src-tauri/core/src/error.rs b/src-tauri/core/src/error.rs index c9d815a60..60b68484b 100644 --- a/src-tauri/core/src/error.rs +++ b/src-tauri/core/src/error.rs @@ -22,6 +22,10 @@ pub enum Error { AddrParse(#[from] AddrParseError), #[error("Internal error: {0}")] InternalError(String), + #[error("Backend service unavailable: {0}")] + BackendUnavailable(String), + #[error("Invalid input: {0}")] + InvalidInput(String), #[error("Failed to parse timestamp")] Datetime, #[error("Object not found")] diff --git a/src-tauri/core/src/lib.rs b/src-tauri/core/src/lib.rs index 3774e43de..a34f73440 100644 --- a/src-tauri/core/src/lib.rs +++ b/src-tauri/core/src/lib.rs @@ -46,7 +46,7 @@ pub fn app_data_dir() -> Option { pub fn set_perms(path: &std::path::Path) { let perms = if path.is_dir() { 0o700 } else { 0o600 }; if let Err(err) = set_permissions(path, Permissions::from_mode(perms)) { - log::warn!( + warn!( "Failed to set permissions on path {}: {err}", path.display() ); diff --git a/src-tauri/core/src/proxy.rs b/src-tauri/core/src/proxy.rs index 70b3537e9..9cb41fd31 100644 --- a/src-tauri/core/src/proxy.rs +++ b/src-tauri/core/src/proxy.rs @@ -25,7 +25,7 @@ pub fn construct_platform_header() -> String { architecture: Some(env::consts::ARCH.to_string()), }; - log::debug!("Constructed platform info header: {platform_info:?}"); + debug!("Constructed platform info header: {platform_info:?}"); BASE64_STANDARD.encode(platform_info.encode_to_vec()) } diff --git a/src-tauri/daemon/src/daemon.rs b/src-tauri/daemon/src/daemon.rs index d3849cf88..8972265f7 100644 --- a/src-tauri/daemon/src/daemon.rs +++ b/src-tauri/daemon/src/daemon.rs @@ -16,7 +16,8 @@ use defguard_client_proto::defguard::{ client::v1::{ desktop_daemon_service_server::{DesktopDaemonService, DesktopDaemonServiceServer}, CreateInterfaceRequest, DeleteServiceLocationsRequest, InterfaceData, - ReadInterfaceDataRequest, RemoveInterfaceRequest, SaveServiceLocationsRequest, + ListInterfacesResponse, ManagedInterfaceData, ReadInterfaceDataRequest, + RemoveInterfaceRequest, SaveServiceLocationsRequest, }, enterprise::posture::v2::DevicePostureData, }; @@ -519,6 +520,58 @@ impl DesktopDaemonService for DaemonService { )) } + async fn list_interfaces( + &self, + _request: tonic::Request<()>, + ) -> Result, Status> { + debug!("Received ListInterfaces request"); + + // Collect interface names under a brief lock. + let ifnames: Vec = { + let Ok(wgapis_map) = self.wgapis.read() else { + error!("Failed to acquire read lock for WGApis"); + return Err(Status::new(Code::Internal, "read lock error")); + }; + wgapis_map.keys().cloned().collect() + }; + + // Read each interface's data, acquiring and releasing the lock per interface + // so that write operations (create/remove) can interleave. + let mut interfaces = Vec::with_capacity(ifnames.len()); + for ifname in &ifnames { + let data = { + let Ok(wgapis_map) = self.wgapis.read() else { + error!("Failed to acquire read lock for WGApis"); + return Err(Status::new(Code::Internal, "read lock error")); + }; + if let Some(wgapi) = wgapis_map.get(ifname) { + match wgapi.read_interface_data() { + Ok(host) => { + debug!("ListInterfaces: returning data for {ifname}"); + Some(host.into()) + } + Err(err) => { + error!("ListInterfaces: failed to read data for {ifname}: {err}"); + None + } + } + } else { + debug!("ListInterfaces: interface {ifname} removed since snapshot"); + None + } + }; + interfaces.push(ManagedInterfaceData { + interface_name: ifname.clone(), + data, + }); + } + debug!( + "ListInterfaces: returning {} managed interface(s)", + interfaces.len() + ); + Ok(Response::new(ListInterfacesResponse { interfaces })) + } + #[cfg(windows)] async fn get_posture_data( &self, diff --git a/src-tauri/daemon/src/named_pipe.rs b/src-tauri/daemon/src/named_pipe.rs index b25d50b1e..90c2bd20e 100644 --- a/src-tauri/daemon/src/named_pipe.rs +++ b/src-tauri/daemon/src/named_pipe.rs @@ -19,7 +19,7 @@ use windows_sys::Win32::{ PSECURITY_DESCRIPTOR, SECURITY_ATTRIBUTES, }, Storage::FileSystem::{FILE_FLAG_OVERLAPPED, PIPE_ACCESS_DUPLEX}, - System::Pipes::{CreateNamedPipeW, PIPE_TYPE_BYTE}, + System::Pipes::{CreateNamedPipeW, PIPE_TYPE_BYTE, PIPE_UNLIMITED_INSTANCES}, }; // Named-pipe name used for IPC between defguard client and windows service. @@ -91,8 +91,8 @@ fn str_to_wide_null_terminated(s: &str) -> Vec { } /// Create a secure Windows named pipe handle with appropriate ACL. -/// Uses `FILE_FLAG_OVERLAPPED` for Tokio compatibility and sets `nMaxInstances = 2` -/// (one client + one service instance). +/// Uses `FILE_FLAG_OVERLAPPED` for Tokio compatibility and sets +/// `nMaxInstances = PIPE_UNLIMITED_INSTANCES` (255). fn create_secure_pipe() -> Result { debug!("Creating secure named pipe {PIPE_NAME}"); @@ -128,8 +128,7 @@ fn create_secure_pipe() -> Result { name_wide.as_ptr(), PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE, - // 1 client + 1 service - 2, + PIPE_UNLIMITED_INSTANCES, 65536, 65536, 0, diff --git a/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs b/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs index 541e98385..725332751 100644 --- a/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs +++ b/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs @@ -71,5 +71,5 @@ fn test_linux_kernel_version() { #[test] #[ignore = "CI posture testing only"] fn test_disk_encryption_status_unencrypted() { - assert_eq!(disk_encryption_status().unwrap(), false); + assert!(!disk_encryption_status().unwrap()); } diff --git a/src-tauri/enterprise/service-locations/src/windows.rs b/src-tauri/enterprise/service-locations/src/windows.rs index 048d1e673..23c9dd18d 100644 --- a/src-tauri/enterprise/service-locations/src/windows.rs +++ b/src-tauri/enterprise/service-locations/src/windows.rs @@ -133,7 +133,7 @@ pub fn watch_for_login_logoff( fn setup_wgapi(ifname: &str) -> Result { WGApi::new(ifname).map_err(|err| { let msg = format!("Failed to setup WireGuard API for interface {ifname}: {err}"); - log::error!("{msg}"); + error!("{msg}"); ServiceLocationError::InterfaceError(msg) }) } diff --git a/src-tauri/proto b/src-tauri/proto index 07397d4e8..e84d7c0c7 160000 --- a/src-tauri/proto +++ b/src-tauri/proto @@ -1 +1 @@ -Subproject commit 07397d4e8712fd89804c49af3e41ddcaeb824cbf +Subproject commit e84d7c0c7d4270e05ec6d1e536353a5e0449d458 diff --git a/src-tauri/src/apple.rs b/src-tauri/src/apple.rs index 0ddfc17ad..05123bacb 100644 --- a/src-tauri/src/apple.rs +++ b/src-tauri/src/apple.rs @@ -16,14 +16,13 @@ use block2::RcBlock; use defguard_client_core::{ connection::active_connections::find_connection, database::models::tunnel_configuration::{ - id_from_manager, manager_for_key_and_value, LOCATION_ID, OBSERVER_COMMS, PLUGIN_BUNDLE_ID, - TUNNEL_ID, + manager_for_key_and_value, LOCATION_ID, OBSERVER_COMMS, PLUGIN_BUNDLE_ID, TUNNEL_ID, }, }; use objc2::{rc::Retained, runtime::ProtocolObject}; use objc2_foundation::{ - ns_string, NSArray, NSData, NSDate, NSError, NSNotification, NSNotificationCenter, - NSObjectProtocol, NSOperationQueue, NSRunLoop, NSString, + ns_string, NSData, NSDate, NSNotification, NSNotificationCenter, NSObjectProtocol, + NSOperationQueue, NSRunLoop, }; use objc2_network_extension::{ NETunnelProviderManager, NETunnelProviderProtocol, NETunnelProviderSession, NEVPNConnection, @@ -523,95 +522,3 @@ pub(crate) fn tunnel_stats(id: Id, connection_type: &ConnectionType) -> Option) -> Result<(), sqlx::Error> { - // Update location settings. - let all_locations = Location::all(&*DB_POOL, false).await?; - for location in &all_locations { - // For syncing, set `preshred_key` to `None`. - let Ok(tunnel_config) = location.tunnel_configuration(None, mtu).await else { - error!( - "Failed to convert location {} to tunnel configuration.", - location.name - ); - continue; - }; - tunnel_config.save(); - } - - // Update tunnel settings. - let all_tunnels = Tunnel::all(&*DB_POOL).await?; - for tunnel in &all_tunnels { - let Ok(tunnel_config) = tunnel.tunnel_configuration(mtu) else { - error!( - "Failed to convert tunnel {} to tunnel configuration.", - tunnel.name - ); - continue; - }; - tunnel_config.save(); - } - - debug!("Saved all configurations with system settings."); - - // Convert to Vec. - let mut all_location_ids = all_locations - .into_iter() - .map(|entry| entry.id) - .collect::>(); - let mut all_tunnel_ids = all_tunnels - .into_iter() - .map(|entry| entry.id) - .collect::>(); - // For faster lookup using binary search (see below). - all_location_ids.sort_unstable(); - all_tunnel_ids.sort_unstable(); - - let spinlock = Arc::new(AtomicBool::new(false)); - let spinlock_clone = Arc::clone(&spinlock); - let handler = RcBlock::new( - move |managers_ptr: *mut NSArray, error_ptr: *mut NSError| { - if !error_ptr.is_null() { - error!("Failed to load tunnel provider managers."); - return; - } - - let Some(managers) = (unsafe { managers_ptr.as_ref() }) else { - error!("No managers"); - return; - }; - - let location_key = NSString::from_str(LOCATION_ID); - let tunnel_key = NSString::from_str(TUNNEL_ID); - for manager in managers { - if let Some(id) = id_from_manager(&manager, &location_key) { - if all_location_ids.binary_search(&id).is_ok() { - // Known location - skip. - continue; - } - } - if let Some(id) = id_from_manager(&manager, &tunnel_key) { - if all_tunnel_ids.binary_search(&id).is_ok() { - // Known tunnel - skip. - continue; - } - } - unsafe { manager.removeFromPreferencesWithCompletionHandler(None) }; - } - - spinlock_clone.store(true, Ordering::Release); - }, - ); - unsafe { - NETunnelProviderManager::loadAllFromPreferencesWithCompletionHandler(&handler); - } - - while !spinlock.load(Ordering::Acquire) { - spin_loop(); - } - - debug!("Removed unknown configurations from system settings."); - - Ok(()) -} diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 9f3fa8f3b..fcdf4d895 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -89,6 +89,7 @@ async fn startup(app_handle: &AppHandle) { use defguard_client::{ apple::get_managers_for_tunnels_and_locations, utils::get_all_tunnels_locations, }; + use defguard_client_core::connection::sync_locations_and_tunnels; let semaphore = Arc::new(AtomicBool::new(false)); let semaphore_clone = Arc::clone(&semaphore); @@ -101,7 +102,7 @@ async fn startup(app_handle: &AppHandle) { .expect("failed to lock app state") .mtu(); let handle = async_runtime::spawn(async move { - if let Err(err) = defguard_client::apple::sync_locations_and_tunnels(mtu).await { + if let Err(err) = sync_locations_and_tunnels(mtu).await { error!("Failed to sync locations and tunnels: {err}"); } semaphore_clone.store(true, Ordering::Release); @@ -155,7 +156,6 @@ async fn startup(app_handle: &AppHandle) { } /// Open the appropriate window, either the old or the new UI, depending if there are locations. -#[cfg(not(target_os = "linux"))] fn open_appropriate_window(app_handle: &AppHandle) { let has_locations = async_runtime::block_on(has_non_service_locations()); if has_locations { @@ -229,13 +229,7 @@ fn main() { let is_deep_link = argv.iter().any(|a| a.starts_with("defguard://")); // User tried to spawn second instance, mirror tray left click path. if !is_deep_link { - #[cfg(target_os = "linux")] - let _ = WindowManager::open_full_view(app); - - #[cfg(not(target_os = "linux"))] - { - open_appropriate_window(app); - } + open_appropriate_window(app); } })) .plugin(tauri_plugin_deep_link::init()) @@ -399,27 +393,20 @@ fn main() { warn!("Failed to pre-build full window: {e}"); } - // Decide which window to show based on platform and available locations. - #[cfg(target_os = "linux")] - { + // Decide which window to show based on available locations. + // If the app was cold-launched by a deep-link, the full view must open, not the + // tray. + let launched_by_deep_link = app_handle + .deep_link() + .get_current() + .ok() + .flatten() + .is_some(); + if launched_by_deep_link { + info!("App launched via deep link, opening full view directly."); let _ = WindowManager::open_full_view(app_handle); - } - #[cfg(not(target_os = "linux"))] - { - // If the app was cold-launched by a deep-link, the full view must open, not the - // tray. - let launched_by_deep_link = app_handle - .deep_link() - .get_current() - .ok() - .flatten() - .is_some(); - if launched_by_deep_link { - info!("App launched via deep link, opening full view directly."); - let _ = WindowManager::open_full_view(app_handle); - } else { - open_appropriate_window(app_handle); - } + } else { + open_appropriate_window(app_handle); } info!("App setup completed, log level: {log_level}"); diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 316cc385f..2a413c152 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -29,8 +29,8 @@ use crate::{ database::{ models::{ connection::{ActiveConnection, Connection, ConnectionInfo}, - instance::{ClientTrafficPolicy, Instance, InstanceInfo}, - location::{infer_mfa_method, Location, LocationMfaMethod, LocationMfaMode}, + instance::{Instance, InstanceInfo}, + location::{Location, LocationMfaMethod, LocationMfaMode}, location_stats::LocationStats, tunnel::{Tunnel, TunnelConnection, TunnelConnectionInfo, TunnelStats}, wireguard_keys::WireguardKeys, @@ -809,50 +809,12 @@ pub async fn update_location_routing( match connection_type { ConnectionType::Location => { - if let Some(mut location) = Location::find_by_id(&*DB_POOL, location_id).await? { - let instance = Instance::find_by_id(&*DB_POOL, location.instance_id) - .await? - .ok_or(Error::NotFound)?; - // Check if the instance has route_all_traffic disabled - if (instance.client_traffic_policy == ClientTrafficPolicy::DisableAllTraffic) - && route_all_traffic - { - error!( - "Couldn't update location routing: instance with id {} has \ - route_all_traffic disabled.", - instance.id - ); - return Err(Error::InternalError( - "Instance has route_all_traffic disabled".into(), - )); - } - // Check if the instance has route_all_traffic enforced - if (instance.client_traffic_policy == ClientTrafficPolicy::ForceAllTraffic) - && !route_all_traffic - { - error!( - "Couldn't update location routing: instance with id {} has \ - route_all_traffic enforced.", - instance.id - ); - return Err(Error::InternalError( - "Instance has route_all_traffic enforced".into(), - )); - } - - location.route_all_traffic = route_all_traffic; - location.save(&*DB_POOL).await?; - debug!("Location routing updated for location {name}(ID: {location_id})"); - handle - .emit(EventKey::LocationUpdate.into(), ()) - .map_err(crate::tauri_err_to_app_err)?; - Ok(()) - } else { - error!( - "Couldn't update location routing: location with id {location_id} not found." - ); - Err(Error::NotFound) - } + Location::update_routing(&DB_POOL, location_id, route_all_traffic).await?; + debug!("Location routing updated for location {name}(ID: {location_id})"); + handle + .emit(EventKey::LocationUpdate.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; + Ok(()) } ConnectionType::Tunnel => { if let Some(mut tunnel) = Tunnel::find_by_id(&*DB_POOL, location_id).await? { @@ -878,26 +840,12 @@ pub async fn set_location_mfa_method( handle: AppHandle, ) -> Result<(), Error> { debug!("Received command to set MFA method for location {location_id}"); - if let Some(mut location) = Location::find_by_id(&*DB_POOL, location_id).await? { - let inferred = infer_mfa_method(location.location_mfa_mode, Some(mfa_method)); - debug!( - "Setting MFA method for location {}(ID: {location_id}) to {inferred:?}", - location.name, - ); - location.mfa_method = inferred; - location.save(&*DB_POOL).await?; - debug!( - "MFA method updated for location {}(ID: {location_id})", - location.name, - ); - handle - .emit(EventKey::LocationUpdate.into(), ()) - .map_err(crate::tauri_err_to_app_err)?; - Ok(()) - } else { - error!("Location with ID {location_id} not found, cannot set MFA method"); - Err(Error::NotFound) - } + Location::set_mfa_method(&DB_POOL, location_id, mfa_method).await?; + debug!("MFA method updated for location (ID: {location_id})"); + handle + .emit(EventKey::LocationUpdate.into(), ()) + .map_err(crate::tauri_err_to_app_err)?; + Ok(()) } #[cfg(target_os = "macos")] diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index 9a967608c..fb8599271 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -11,7 +11,6 @@ use defguard_client_core::connection::active_connections::{ }; use tauri::tray::{MouseButton, MouseButtonState, TrayIconEvent}; -#[cfg(not(target_os = "linux"))] use crate::window_manager::WindowManager; use crate::{ appstate::AppState, @@ -155,6 +154,12 @@ pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { TrayIconBuilder::with_id(TRAY_ICON_ID) .menu(&tray_menu) .show_menu_on_left_click(false) + // NOTE: on Linux this click handler never fires. The `tray-icon` appindicator + // backend (libayatana-appindicator) does not emit tray click events - only the + // context menu works (`show_menu_on_left_click` is likewise a no-op on Linux). + // So left-click cannot open/toggle the window on Linux; users interact via the + // right-click menu's Show/Hide items (handled in `handle_tray_menu_event`). + // This is an upstream limitation, not a bug here. Documented in known-issues. .on_tray_icon_event(|icon, event| { store_tray_click_position(icon.app_handle(), &event); if let TrayIconEvent::Click { @@ -165,43 +170,37 @@ pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { { let app = icon.app_handle(); - #[cfg(target_os = "linux")] - show_main_window(app); + let main_visible = app + .get_webview_window(FULL_VIEW_WINDOW_ID) + .and_then(|w| w.is_visible().ok()) + .unwrap_or(false); - #[cfg(not(target_os = "linux"))] - { - let main_visible = app - .get_webview_window(FULL_VIEW_WINDOW_ID) - .and_then(|w| w.is_visible().ok()) - .unwrap_or(false); - - if main_visible { - if let Some(w) = app.get_webview_window(FULL_VIEW_WINDOW_ID) { - let _ = w.hide(); - } + if main_visible { + if let Some(w) = app.get_webview_window(FULL_VIEW_WINDOW_ID) { + let _ = w.hide(); } + } - let tray_visible = app - .get_webview_window(COMPACT_WINDOW_ID) - .and_then(|w| w.is_visible().ok()) - .unwrap_or(false); + let tray_visible = app + .get_webview_window(COMPACT_WINDOW_ID) + .and_then(|w| w.is_visible().ok()) + .unwrap_or(false); - if tray_visible { - if let Some(w) = app.get_webview_window(COMPACT_WINDOW_ID) { - let _ = w.hide(); + if tray_visible { + if let Some(w) = app.get_webview_window(COMPACT_WINDOW_ID) { + let _ = w.hide(); + } + } else { + let has_locations = tauri::async_runtime::block_on( + crate::window_manager::has_non_service_locations(), + ); + if has_locations { + if let Some(old_ui) = app.get_webview_window(FULL_VIEW_WINDOW_ID) { + let _ = old_ui.hide(); } + show_tray_window(app); } else { - let has_locations = tauri::async_runtime::block_on( - crate::window_manager::has_non_service_locations(), - ); - if has_locations { - if let Some(old_ui) = app.get_webview_window(FULL_VIEW_WINDOW_ID) { - let _ = old_ui.hide(); - } - show_tray_window(app); - } else { - let _ = WindowManager::open_full_view(app); - } + let _ = WindowManager::open_full_view(app); } } } diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index 732ab902a..efdddd44b 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -8,6 +8,7 @@ use std::{env, path::Path, process::Command}; use defguard_client_common::{find_free_tcp_port, get_interface_name}; #[cfg(windows)] use defguard_client_core::connection::active_connections::find_connection; +use defguard_client_core::connection::{bring_up, ConnectionTarget}; #[cfg(not(target_os = "macos"))] use defguard_client_core::{ connection::daemon_client::DAEMON_CLIENT, DEFAULT_ROUTE_IPV4, DEFAULT_ROUTE_IPV6, @@ -52,36 +53,6 @@ use crate::{ #[cfg(target_os = "macos")] static TUNNEL_START_DELAY: Duration = Duration::from_secs(1); -/// Setup client interface for `Instance`. -#[cfg(not(target_os = "macos"))] -pub(crate) async fn setup_interface( - location: &Location, - name: &str, - preshared_key: Option, - mtu: Option, - pool: &DbPool, -) -> Result { - crate::connection::setup::setup_interface(location, name, preshared_key, mtu, pool).await -} - -#[cfg(target_os = "macos")] -pub(crate) async fn setup_interface( - location: &Location, - _name: &str, - preshared_key: Option, - mtu: Option, - _pool: &DbPool, -) -> Result { - let tunnel_config = location.tunnel_configuration(preshared_key, mtu).await?; - - tunnel_config.save(); - tokio::time::sleep(TUNNEL_START_DELAY).await; - tunnel_config.start_tunnel(); - - // FIXME: not really useful nor true. - Ok(String::new()) -} - #[cfg(target_os = "macos")] pub(crate) async fn stats_handler(id: Id, connection_type: ConnectionType) { use crate::database::models::{location_stats::LocationStats, tunnel::TunnelStats}; @@ -619,8 +590,14 @@ pub(crate) async fn handle_connection_for_location( .lock() .expect("failed to lock app state") .mtu(); - let interface_name = - setup_interface(location, &location.name, preshared_key, mtu, &DB_POOL).await?; + let interface_name = bring_up( + ConnectionTarget::Location(location), + preshared_key, + mtu, + &DB_POOL, + None, + ) + .await?; state .add_connection(location.id, &interface_name, ConnectionType::Location) .await; @@ -658,7 +635,14 @@ pub(crate) async fn handle_connection_for_tunnel( .lock() .expect("failed to lock app state") .mtu(); - let interface_name = setup_interface_tunnel(tunnel, &tunnel.name, mtu).await?; + let interface_name = bring_up( + ConnectionTarget::Tunnel(tunnel), + tunnel.preshared_key.clone(), + mtu, + &DB_POOL, + None, + ) + .await?; state .add_connection(tunnel.id, &interface_name, ConnectionType::Tunnel) .await; diff --git a/src-tauri/src/window_manager/mod.rs b/src-tauri/src/window_manager/mod.rs index 466d10eac..6e70b235c 100644 --- a/src-tauri/src/window_manager/mod.rs +++ b/src-tauri/src/window_manager/mod.rs @@ -2,11 +2,9 @@ use tauri::Manager; use tauri::{AppHandle, WebviewUrl, WebviewWindow, WebviewWindowBuilder}; -#[cfg(not(target_os = "linux"))] use crate::database::{models::location::Location, DB_POOL}; /// Returns `true` if there are any non-service locations in the database. -#[cfg(not(target_os = "linux"))] pub async fn has_non_service_locations() -> bool { Location::exist(&*DB_POOL, false).await.unwrap_or_default() } @@ -58,7 +56,7 @@ impl WindowManager { #[cfg(target_os = "macos")] if let Err(err) = macos::enable_rounded_corners(&window) { - tracing::warn!("Failed to enable rounded corners on tray window: {err}"); + warn!("Failed to enable rounded corners on tray window: {err}"); } Ok(window) @@ -119,9 +117,7 @@ pub mod windows; pub mod macos; // Export tauri commands so they can be registered in main.rs -#[cfg_attr(target_os = "linux", allow(unused_variables))] pub(crate) fn show_tray_window(app: &AppHandle) { - #[cfg(not(target_os = "linux"))] let _ = WindowManager::open_tray(app); } @@ -130,50 +126,45 @@ pub fn open_tray_window(app: AppHandle) { show_tray_window(&app); } -#[cfg_attr(target_os = "linux", allow(unused_variables))] #[tauri::command] pub fn open_full_view_window(app: AppHandle) { - #[cfg(not(target_os = "linux"))] let _ = WindowManager::open_full_view(&app); } #[tauri::command] pub fn swap_to_full_view(app: AppHandle) { - tracing::info!("swap_to_old_ui called"); + info!("swap_to_full_view called"); if let Some(window) = tauri::Manager::get_webview_window(&app, COMPACT_WINDOW_ID) { if let Err(err) = window.hide() { - tracing::error!("swap_to_old_ui task: Failed to hide new-ui window: {err:?}"); + error!("swap_to_full_view task: Failed to hide new-ui window: {err:?}"); } } - #[cfg(not(target_os = "linux"))] - { - if let Err(err) = WindowManager::open_full_view(&app) { - tracing::error!("swap_to_old_ui task: Failed to open full view: {err:?}"); - } + if let Err(err) = WindowManager::open_full_view(&app) { + error!("swap_to_full_view task: Failed to open full view: {err:?}"); } } #[tauri::command] pub fn close_tray_window(app: AppHandle) { - tracing::info!("close_tray_window called"); + info!("close_tray_window called"); if let Some(window) = tauri::Manager::get_webview_window(&app, COMPACT_WINDOW_ID) { - tracing::info!("close_tray_window task: Hiding new-ui window"); + info!("close_tray_window task: Hiding new-ui window"); if let Err(err) = window.hide() { - tracing::error!("close_tray_window task: Failed to hide new-ui window: {err:?}"); + error!("close_tray_window task: Failed to hide new-ui window: {err:?}"); } } else { - tracing::warn!("close_tray_window task: new-ui window not found"); + warn!("close_tray_window task: new-ui window not found"); } } #[tauri::command] pub fn swap_to_tray(app: AppHandle) { - tracing::info!("swap_to_new_ui called"); + info!("swap_to_tray called"); show_tray_window(&app); if let Some(window) = tauri::Manager::get_webview_window(&app, FULL_VIEW_WINDOW_ID) { if let Err(err) = window.hide() { - tracing::error!("swap_to_new_ui task: Failed to hide old-ui window: {err:?}"); + error!("swap_to_tray task: Failed to hide full-view window: {err:?}"); } } } diff --git a/src-tauri/src/window_manager/windows.rs b/src-tauri/src/window_manager/windows.rs index 1187574bd..7e8157775 100644 --- a/src-tauri/src/window_manager/windows.rs +++ b/src-tauri/src/window_manager/windows.rs @@ -236,44 +236,44 @@ impl WindowManager { } pub fn open_full_view(app: &tauri::AppHandle) -> tauri::Result { - log::info!("open_full_view: Getting monitors"); + info!("open_full_view: Getting monitors"); let monitors = Self::get_monitors(); - log::info!("open_full_view: Found {} monitors", monitors.len()); + info!("open_full_view: Found {} monitors", monitors.len()); let primary = monitors .iter() .find(|m| m.is_primary) .unwrap_or(&monitors[0]); - log::info!( + info!( "open_full_view: Primary monitor scale factor: {}", primary.scale_factor ); - log::info!("open_full_view: Checking if old-ui window exists"); + info!("open_full_view: Checking if old-ui window exists"); let window = if let Some(window) = tauri::Manager::get_webview_window(app, FULL_VIEW_WINDOW_ID) { - log::info!("open_full_view: old-ui window exists, unminimizing"); + info!("open_full_view: old-ui window exists, unminimizing"); let _ = window.unminimize(); window } else { - log::info!("open_full_view: old-ui window does not exist, building it"); + info!("open_full_view: old-ui window does not exist, building it"); let win = Self::build_full_view_window(app)?; - log::info!("open_full_view: old-ui window built successfully"); + info!("open_full_view: old-ui window built successfully"); win }; - log::info!("open_full_view: Querying outer_size"); + info!("open_full_view: Querying outer_size"); let outer_size = window.outer_size().unwrap_or(tauri::PhysicalSize { width: (FULL_VIEW_WINDOW_WIDTH * primary.scale_factor) as u32, height: (FULL_VIEW_WINDOW_HEIGHT * primary.scale_factor) as u32, }); - log::info!("open_full_view: outer_size = {outer_size:?}"); + info!("open_full_view: outer_size = {outer_size:?}"); - log::info!("open_full_view: Querying inner_size"); + info!("open_full_view: Querying inner_size"); let inner_size = window.inner_size().unwrap_or(tauri::PhysicalSize { width: (FULL_VIEW_WINDOW_WIDTH * primary.scale_factor) as u32, height: (FULL_VIEW_WINDOW_HEIGHT * primary.scale_factor) as u32, }); - log::info!("open_full_view: inner_size = {inner_size:?}"); + info!("open_full_view: inner_size = {inner_size:?}"); let physical_width = outer_size.width as i32; let physical_height = outer_size.height as i32; @@ -324,11 +324,11 @@ impl WindowManager { _ => {} } - log::info!("open_full_view: Setting position to ({window_x}, {window_y})"); + info!("open_full_view: Setting position to ({window_x}, {window_y})"); window.set_position(tauri::PhysicalPosition::new(window_x, window_y))?; - log::info!("open_full_view: Position set, showing window"); + info!("open_full_view: Position set, showing window"); window.show()?; - log::info!("open_full_view: Window shown successfully"); + info!("open_full_view: Window shown successfully"); Ok(window) } } From e81c40d75d12050600299031873b9985bd01bb18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Mon, 15 Jun 2026 14:51:18 +0200 Subject: [PATCH 047/155] remove lodash-es dep --- new-ui/package.json | 4 +-- new-ui/pnpm-lock.yaml | 25 +------------------ new-ui/src/shared/components/Input/Input.tsx | 2 +- .../wizard/WizardPage/WizardPage.tsx | 5 ++-- 4 files changed, 5 insertions(+), 31 deletions(-) diff --git a/new-ui/package.json b/new-ui/package.json index ac272f5ec..d11f1ca6d 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -27,15 +27,13 @@ "@tauri-apps/plugin-fs": "^2.5.1", "@tauri-apps/plugin-http": "^2.5.9", "@tauri-apps/plugin-log": "^2.8.0", - "@tauri-apps/plugin-opener": "^2.3.2", + "@tauri-apps/plugin-opener": "^2.5.4", "@tauri-apps/plugin-os": "^2.3.2", - "@types/lodash-es": "^4.17.12", "@uidotdev/usehooks": "^2.4.1", "byte-size": "^9.0.1", "chart.js": "^4.5.1", "clsx": "^2.1.1", "dayjs": "^1.11.21", - "lodash-es": "^4.17.21", "motion": "^12.40.0", "p-timeout": "^7.0.1", "prettier": "^3.8.4", diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index 949113678..e74ca43b1 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -51,14 +51,11 @@ importers: specifier: ^2.8.0 version: 2.8.0 '@tauri-apps/plugin-opener': - specifier: ^2.3.2 + specifier: ^2.5.4 version: 2.5.4 '@tauri-apps/plugin-os': specifier: ^2.3.2 version: 2.3.2 - '@types/lodash-es': - specifier: ^4.17.12 - version: 4.17.12 '@uidotdev/usehooks': specifier: ^2.4.1 version: 2.4.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -74,9 +71,6 @@ importers: dayjs: specifier: ^1.11.21 version: 1.11.21 - lodash-es: - specifier: ^4.17.21 - version: 4.18.1 motion: specifier: ^12.40.0 version: 12.40.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -911,12 +905,6 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/lodash-es@4.17.12': - resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} - - '@types/lodash@4.17.24': - resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} - '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -1469,9 +1457,6 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lodash-es@4.18.1: - resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} - lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} @@ -2728,12 +2713,6 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/lodash-es@4.17.12': - dependencies: - '@types/lodash': 4.17.24 - - '@types/lodash@4.17.24': {} - '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -3178,8 +3157,6 @@ snapshots: lines-and-columns@1.2.4: {} - lodash-es@4.18.1: {} - lodash.truncate@4.4.2: {} longest-streak@3.1.0: {} diff --git a/new-ui/src/shared/components/Input/Input.tsx b/new-ui/src/shared/components/Input/Input.tsx index 9fc928326..fdb6e6271 100644 --- a/new-ui/src/shared/components/Input/Input.tsx +++ b/new-ui/src/shared/components/Input/Input.tsx @@ -1,7 +1,7 @@ import { type HTMLInputTypeAttribute, useId, useMemo, useRef, useState } from 'react'; import './style.scss'; import clsx from 'clsx'; -import { isNumber } from 'lodash-es'; +import { isNumber } from 'radashi'; import { isPresent } from '../../utils/isPresent'; import { mergeRefs } from '../../utils/mergeRefs'; import { FieldBox } from '../FieldBox/FieldBox'; diff --git a/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx b/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx index 3cb006efd..8fb4d8def 100644 --- a/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx +++ b/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx @@ -1,7 +1,7 @@ import { type HTMLProps, type PropsWithChildren, Suspense, useMemo } from 'react'; import './style.scss'; import clsx from 'clsx'; -import { orderBy } from 'lodash-es'; +import { sort } from 'radashi'; import Skeleton from 'react-loading-skeleton'; import { ThemeSpacing } from '../../../types'; import { SizedBox } from '../../SizedBox/SizedBox'; @@ -26,10 +26,9 @@ export const WizardPage = ({ const visibleSteps = useMemo( () => - orderBy( + sort( Object.values(steps).filter((step) => !step.hidden), (s) => s.order, - ['asc'], ), [steps], ); From d8922370c8d7fd06ee6dadc2a8d6378276fc79f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Mon, 15 Jun 2026 15:00:09 +0200 Subject: [PATCH 048/155] WhatsNew take 2 --- .github/workflows/build-macos.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index 9ab38ba50..8d93947bb 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -82,7 +82,7 @@ jobs: run: | security -v unlock-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" login.keychain xcrun productbuild --sign "${{ env.APPLE_SIGNING_IDENTITY_INSTALLER }}" --component "src-tauri/target/universal-apple-darwin/release/bundle/macos/Defguard.app" /Applications defguard-client.pkg - xcrun altool --apiKey ${{ secrets.APPLE_API_KEY }} --apiIssuer ${{ secrets.APPLE_API_ISSUER }} --upload-app --type macos --file defguard-client.pkg + xcrun altool --api-key ${{ secrets.APPLE_API_KEY }} --api-issuer ${{ secrets.APPLE_API_ISSUER }} --upload-app --platform macos --file defguard-client.pkg --wait # xcrun notarytool submit --wait --apple-id ${{ env.APPLE_ID }} --password ${{ secrets.NOTARYTOOL_APP_SPECIFIC_PASSWORD }} --team-id ${{ env.APPLE_TEAM_ID }} defguard-client.pkg # xcrun stapler staple defguard-client.pkg @@ -93,5 +93,5 @@ jobs: UPLOAD_DIR=$(mktemp -d) mkdir -p "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS" git log -1 --pretty='"whatsNew" = "%B";' > "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS/en-US.txt" - xcrun altool --apiKey ${{ secrets.APPLE_API_KEY }} --apiIssuer ${{ secrets.APPLE_API_ISSUER }} --apple-id ${APP_ID} --bundle-version ${{ github.run_number }} --bundle-short-version-string ${VERSION} --type macos --beta-app-store-text ${UPLOAD_DIR} --download + xcrun altool --api-key ${{ secrets.APPLE_API_KEY }} --api-issuer ${{ secrets.APPLE_API_ISSUER }} --apple-id ${APP_ID} --bundle-version ${{ github.run_number }} --bundle-short-version-string ${VERSION} --platform macos --beta-app-store-text ${UPLOAD_DIR} --upload rm -f -r "${UPLOAD_DIR}" From 9fa4ddd22b02fd3064841c600801cb9c88bbfc80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Mon, 15 Jun 2026 15:22:40 +0200 Subject: [PATCH 049/155] WhatsNew take 3 --- .github/workflows/build-macos.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index 8d93947bb..9223d272d 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -91,7 +91,7 @@ jobs: APP_ID: "6754601166" run: | UPLOAD_DIR=$(mktemp -d) - mkdir -p "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS" + mkdir -p "${UPLOAD_DIR}/beta-${APPLE_ID}/upload/MACOS" git log -1 --pretty='"whatsNew" = "%B";' > "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS/en-US.txt" - xcrun altool --api-key ${{ secrets.APPLE_API_KEY }} --api-issuer ${{ secrets.APPLE_API_ISSUER }} --apple-id ${APP_ID} --bundle-version ${{ github.run_number }} --bundle-short-version-string ${VERSION} --platform macos --beta-app-store-text ${UPLOAD_DIR} --upload + xcrun altool --api-key ${{ secrets.APPLE_API_KEY }} --api-issuer ${{ secrets.APPLE_API_ISSUER }} --apple-id ${APP_ID} --bundle-version ${{ github.run_number }} --bundle-short-version-string ${{ env.VERSION }} --platform macos --beta-app-store-text "${UPLOAD_DIR}" --upload rm -f -r "${UPLOAD_DIR}" From 7b42e333706e6a8eadf1725cfde6360ec6687ce9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Mon, 15 Jun 2026 15:37:07 +0200 Subject: [PATCH 050/155] WhatsNew take 4 --- .github/workflows/build-macos.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index 9223d272d..6cb9750e1 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -91,7 +91,7 @@ jobs: APP_ID: "6754601166" run: | UPLOAD_DIR=$(mktemp -d) - mkdir -p "${UPLOAD_DIR}/beta-${APPLE_ID}/upload/MACOS" + mkdir -p "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS" git log -1 --pretty='"whatsNew" = "%B";' > "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS/en-US.txt" xcrun altool --api-key ${{ secrets.APPLE_API_KEY }} --api-issuer ${{ secrets.APPLE_API_ISSUER }} --apple-id ${APP_ID} --bundle-version ${{ github.run_number }} --bundle-short-version-string ${{ env.VERSION }} --platform macos --beta-app-store-text "${UPLOAD_DIR}" --upload rm -f -r "${UPLOAD_DIR}" From 0d0a77d876bd0301c1a8e44cfd6506ba6bb92c54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Mon, 15 Jun 2026 15:55:34 +0200 Subject: [PATCH 051/155] WhatsNew take 5 --- .github/workflows/build-macos.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index 6cb9750e1..b5a0242d9 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -91,7 +91,8 @@ jobs: APP_ID: "6754601166" run: | UPLOAD_DIR=$(mktemp -d) + VERSION=$(jq -r '.version' package.json) mkdir -p "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS" git log -1 --pretty='"whatsNew" = "%B";' > "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS/en-US.txt" - xcrun altool --api-key ${{ secrets.APPLE_API_KEY }} --api-issuer ${{ secrets.APPLE_API_ISSUER }} --apple-id ${APP_ID} --bundle-version ${{ github.run_number }} --bundle-short-version-string ${{ env.VERSION }} --platform macos --beta-app-store-text "${UPLOAD_DIR}" --upload + xcrun altool --api-key ${{ secrets.APPLE_API_KEY }} --api-issuer ${{ secrets.APPLE_API_ISSUER }} --apple-id ${APP_ID} --bundle-version ${{ github.run_number }} --bundle-short-version-string ${VERSION} --platform macos --beta-app-store-text "${UPLOAD_DIR}" --upload rm -f -r "${UPLOAD_DIR}" From 7df8bab8ac00d2238e2c5607368147d542ba0474 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Mon, 15 Jun 2026 16:08:46 +0200 Subject: [PATCH 052/155] WhatsNew take 6 --- .github/workflows/build-macos.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index b5a0242d9..8bb802175 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -94,5 +94,6 @@ jobs: VERSION=$(jq -r '.version' package.json) mkdir -p "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS" git log -1 --pretty='"whatsNew" = "%B";' > "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS/en-US.txt" + sleep 10 xcrun altool --api-key ${{ secrets.APPLE_API_KEY }} --api-issuer ${{ secrets.APPLE_API_ISSUER }} --apple-id ${APP_ID} --bundle-version ${{ github.run_number }} --bundle-short-version-string ${VERSION} --platform macos --beta-app-store-text "${UPLOAD_DIR}" --upload rm -f -r "${UPLOAD_DIR}" From fdb9ad2301d71480df68249cae47b53a9f696968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Mon, 15 Jun 2026 17:29:04 +0200 Subject: [PATCH 053/155] WhatsNew take 7 --- .github/workflows/build-macos.yaml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index 8bb802175..30c071aaf 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -94,6 +94,14 @@ jobs: VERSION=$(jq -r '.version' package.json) mkdir -p "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS" git log -1 --pretty='"whatsNew" = "%B";' > "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS/en-US.txt" - sleep 10 - xcrun altool --api-key ${{ secrets.APPLE_API_KEY }} --api-issuer ${{ secrets.APPLE_API_ISSUER }} --apple-id ${APP_ID} --bundle-version ${{ github.run_number }} --bundle-short-version-string ${VERSION} --platform macos --beta-app-store-text "${UPLOAD_DIR}" --upload + RETRIES=0 + until [ ${RETRIES} -gt 6 ] + do + xcrun altool --api-key ${{ secrets.APPLE_API_KEY }} --api-issuer ${{ secrets.APPLE_API_ISSUER }} \ + --apple-id ${APP_ID} --bundle-version ${{ github.run_number }} \--bundle-short-version-string ${VERSION} \ + --platform macos --beta-app-store-text "${UPLOAD_DIR}" --upload && break + echo "Waiting for app ${APP_ID} build ${{ github.run_number }} version ${VERSION}" + sleep 10 + ((RETRIES++)) + done rm -f -r "${UPLOAD_DIR}" From 6b8d5887f352c8691ca225db25218192707dacbf Mon Sep 17 00:00:00 2001 From: Maciek <19913370+wojcik91@users.noreply.github.com> Date: Tue, 16 Jun 2026 13:23:31 +0200 Subject: [PATCH 054/155] add external OIDC MFA for the CLI client (#966) * extract mfa method resolution * add basic oidc flow implementation * wire up oidc handler in mfa flow * add basic mock test * add helper for conflicting options * test OIDC timeout * cleanup * clean up some more * reduce verbosity a bit * clarify naming * small improvements * display ID in location lists * add more aliases * remove the enroll command * allow installing CLI through nixos module * include cli binary in packages * port nix hash update workflow from main * update trivyignore date * update hash * formatting * move move flag validation logic * add missing ID * formatting * update clippy lints * add helper for formatting imports * fix imports --- .github/workflows/update-pnpm-hash.yaml | 150 +++++++ .trivyignore.yaml | 4 +- nix/nixos-module.nix | 70 +++- nix/package.nix | 5 +- nix/shell.nix | 19 + src-tauri/Cargo.lock | 1 + src-tauri/Cargo.toml | 8 +- src-tauri/client-cli/Cargo.toml | 1 + src-tauri/client-cli/src/cli.rs | 17 +- src-tauri/client-cli/src/commands/connect.rs | 68 ++-- .../client-cli/src/commands/disconnect.rs | 3 +- src-tauri/client-cli/src/commands/list.rs | 25 +- src-tauri/client-cli/src/commands/location.rs | 10 +- src-tauri/client-cli/src/commands/status.rs | 3 +- src-tauri/client-cli/src/commands/tunnel.rs | 9 +- src-tauri/client-cli/src/exit.rs | 6 +- src-tauri/client-cli/src/main.rs | 7 +- src-tauri/client-cli/src/mfa.rs | 372 ++++++++++++++++-- src-tauri/client-cli/src/mfa_code.rs | 15 +- src-tauri/client-cli/src/output.rs | 4 + src-tauri/client-cli/src/resolve.rs | 2 +- src-tauri/client-cli/src/state.rs | 3 + src-tauri/client-cli/src/tests_proxy.rs | 134 ++++++- .../core/src/connection/active_connections.rs | 3 +- src-tauri/core/src/connection/active_state.rs | 21 +- .../core/src/connection/daemon_client.rs | 3 +- src-tauri/core/src/connection/mod.rs | 30 +- src-tauri/core/src/connection/setup.rs | 3 +- src-tauri/core/src/lib.rs | 11 +- src-tauri/core/src/proxy.rs | 2 +- src-tauri/daemon/src/windows.rs | 8 +- .../enterprise/posture/src/inspector/mod.rs | 3 +- .../posture/src/inspector/tests/ci/linux.rs | 3 +- .../posture/src/inspector/tests/ci/macos.rs | 3 +- .../posture/src/inspector/tests/ci/windows.rs | 20 +- src-tauri/enterprise/posture/src/posture.rs | 5 +- src-tauri/src/appstate.rs | 2 +- src-tauri/src/commands.rs | 8 +- src-tauri/src/enterprise/mod.rs | 3 +- src-tauri/src/enterprise/provisioning/mod.rs | 4 +- .../src/enterprise/service_locations/mod.rs | 5 +- src-tauri/src/events.rs | 3 +- src-tauri/src/lib.rs | 5 +- src-tauri/src/tray.rs | 13 +- src-tauri/src/window_manager/windows.rs | 11 +- src-tauri/tauri.conf.json | 4 + 46 files changed, 877 insertions(+), 232 deletions(-) create mode 100644 .github/workflows/update-pnpm-hash.yaml diff --git a/.github/workflows/update-pnpm-hash.yaml b/.github/workflows/update-pnpm-hash.yaml new file mode 100644 index 000000000..472b442c0 --- /dev/null +++ b/.github/workflows/update-pnpm-hash.yaml @@ -0,0 +1,150 @@ +name: Update pnpm deps Nix hash + +on: + pull_request: + paths: + - pnpm-lock.yaml + - new-ui/pnpm-lock.yaml + +concurrency: + group: pnpm-hash-${{ github.event.pull_request.number }} + cancel-in-progress: true + +permissions: + contents: write + +jobs: + update-pnpm-hash: + runs-on: + - codebuild-defguard-client-runner-${{ github.run_id }}-${{ github.run_attempt }} + + steps: + - uses: actions/checkout@v6 + with: + ref: ${{ github.event.pull_request.head.sha }} + submodules: recursive + + - uses: cachix/install-nix-action@v31 + with: + install_options: --no-daemon + extra_nix_config: | + experimental-features = nix-command flakes + + - name: Compute correct pnpm deps hashes + id: hash + run: | + set -euo pipefail + + FAKE="sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + SYSTEM=$(nix eval --impure --raw --expr 'builtins.currentSystem') + CHANGED=0 + + # Helper: extract the hash for a given attribute, swap in FAKE, + # build it, capture the real hash, and write it back. + update_hash() { + local attr="$1" # e.g. "pnpmDeps" or "newUiPnpmDeps" + local label="$2" # human-readable label for logging + + # Extract the current hash for this attribute. + # Match the line containing "hash = " that follows the + # attribute definition block (${attr} ... = fetchPnpmDeps). + local CURRENT + CURRENT=$(awk "/^[[:space:]]*${attr} = fetchPnpmDeps/,/;[[:space:]]*\$/" nix/package.nix \ + | sed -n 's/^[[:space:]]*hash = "\(sha256-[^"]*\)".*/\1/p' | head -1) + + if [ -z "$CURRENT" ]; then + echo "::error::Could not extract current hash for ${attr} from nix/package.nix" + exit 1 + fi + echo "${label} current hash: ${CURRENT}" + echo "${attr}_current=${CURRENT}" >> "$GITHUB_OUTPUT" + + # Swap in the fake hash. + sed -i "/^[[:space:]]*${attr} = fetchPnpmDeps/,/;[[:space:]]*\$/{s|hash = \"${CURRENT}\"|hash = \"${FAKE}\"|}" nix/package.nix + + # Build only this fixed-output derivation. + echo "building ${attr} for ${SYSTEM}..." + local BUILD_LOG + BUILD_LOG=$(nix build --no-link --no-write-lock-file \ + ".#packages.${SYSTEM}.default.${attr}" 2>&1 || true) + + # Nix prints "got: sha256-..." in the hash mismatch error. + local NEW + NEW=$(printf '%s' "$BUILD_LOG" | sed -n 's/.*got:[[:space:]]*\(sha256-[^[:space:]]*\).*/\1/p' | head -1) + if [ -z "$NEW" ]; then + echo "::error::Could not extract the correct hash for ${attr} from nix output." + echo "Full build log:" + printf '%s\n' "$BUILD_LOG" + exit 1 + fi + + echo "${label} new hash: ${NEW}" + echo "${attr}_new=${NEW}" >> "$GITHUB_OUTPUT" + + # Write the correct hash back. + sed -i "/^[[:space:]]*${attr} = fetchPnpmDeps/,/;[[:space:]]*\$/{s|hash = \"${FAKE}\"|hash = \"${NEW}\"|}" nix/package.nix + + # Track whether anything changed. + if [ "$CURRENT" != "$NEW" ]; then + echo "${attr}_changed=true" >> "$GITHUB_OUTPUT" + CHANGED=1 + else + echo "${attr}_changed=false" >> "$GITHUB_OUTPUT" + fi + } + + # ----- root pnpm-lock.yaml ----- + if git diff --name-only "origin/${{ github.base_ref }}...HEAD" | grep -qx 'pnpm-lock.yaml'; then + update_hash "pnpmDeps" "pnpm root" + fi + + # ----- new-ui/pnpm-lock.yaml ----- + if git diff --name-only "origin/${{ github.base_ref }}...HEAD" | grep -qx 'new-ui/pnpm-lock.yaml'; then + update_hash "newUiPnpmDeps" "pnpm new-ui" + fi + + # If neither lockfile was actually modified, warn but don't fail + # (can happen when the PR touches both, then one is reverted). + if [ "$CHANGED" -eq 0 ]; then + echo "::warning::Workflow triggered but no lockfile changed relative to base." + fi + + - name: Commit updated hashes + if: > + steps.hash.outputs.pnpmDeps_changed == 'true' || + steps.hash.outputs.newUiPnpmDeps_changed == 'true' + uses: actions/github-script@v9 + with: + script: | + const fs = require('fs'); + const content = fs.readFileSync('nix/package.nix', 'utf8'); + const encoded = Buffer.from(content).toString('base64'); + + const parts = []; + if ('${{ steps.hash.outputs.pnpmDeps_changed }}' === 'true') { + parts.push('pnpm'); + } + if ('${{ steps.hash.outputs.newUiPnpmDeps_changed }}' === 'true') { + parts.push('new-ui pnpm'); + } + const headline = `chore(nix): update ${parts.join(' and ')} deps hash`; + + await github.graphql(` + mutation CreateCommit($input: CreateCommitOnBranchInput!) { + createCommitOnBranch(input: $input) { + commit { url } + } + } + `, { + input: { + branch: { + repositoryNameWithOwner: `${context.repo.owner}/${context.repo.repo}`, + branchName: context.payload.pull_request.head.ref, + }, + message: { headline }, + fileChanges: { + additions: [{ path: 'nix/package.nix', contents: encoded }], + }, + expectedHeadOid: context.payload.pull_request.head.sha, + }, + }); diff --git a/.trivyignore.yaml b/.trivyignore.yaml index 3c5ed2002..0f163d54b 100644 --- a/.trivyignore.yaml +++ b/.trivyignore.yaml @@ -1,4 +1,4 @@ vulnerabilities: - id: GHSA-wrw7-89jp-8q8g - expired_at: 2026-06-16 - statement: 'glib is a transitive dependency of Tauri which we cannot update ourselves. Waiting for tauri to finish migration to gtk4-rs: https://github.com/tauri-apps/tauri/issues/12563' + expired_at: 2026-09-30 + statement: "glib is a transitive dependency of Tauri which we cannot update ourselves. Waiting for tauri to finish migration to gtk4-rs: https://github.com/tauri-apps/tauri/issues/12563" diff --git a/nix/nixos-module.nix b/nix/nixos-module.nix index d66563c04..84c083eac 100644 --- a/nix/nixos-module.nix +++ b/nix/nixos-module.nix @@ -4,34 +4,68 @@ pkgs, ... }: let + inherit (lib) mkEnableOption mkIf mkOption mkPackageOption optional types; + craneLib = mkCraneLib pkgs; defguard-client = pkgs.callPackage ./package.nix {inherit pkgs craneLib;}; - cfg = config.programs.defguard-client; + + svcCfg = config.services.defguard-client-daemon; + clientCfg = config.programs.defguard-client; + cliCfg = config.programs.defguard-cli; in { - options.programs.defguard-client = { - enable = lib.mkEnableOption "Defguard VPN client and service"; + options.services.defguard-client-daemon = { + enable = mkEnableOption "Defguard VPN client background service (required by both the desktop client and CLI)"; - package = lib.mkOption { - type = lib.types.package; - default = defguard-client; - description = "defguard-client package to use"; + package = mkPackageOption pkgs "defguard-client" { + default = ["defguard-client"]; + extraDescription = "Package that provides the defguard-service binary."; }; - logLevel = lib.mkOption { - type = lib.types.str; + logLevel = mkOption { + type = types.str; default = "info"; - description = "Log level for defguard-service"; + description = "Log level for defguard-service (--log-level)"; }; - statsPeriod = lib.mkOption { - type = lib.types.int; + logDir = mkOption { + type = types.str; + default = "/var/log/defguard-service"; + description = "Directory for defguard-service logs (--log-dir)"; + }; + + statsPeriod = mkOption { + type = types.int; default = 30; - description = "Interval in seconds for interface statistics updates"; + description = "Interval in seconds for interface statistics updates (--stats-period)"; + }; + }; + + options.programs.defguard-client = { + enable = mkEnableOption "Defguard VPN desktop client"; + + package = mkOption { + type = types.package; + default = defguard-client; + description = "defguard-client package to use"; + }; + }; + + options.programs.defguard-cli = { + enable = mkEnableOption "Defguard VPN CLI client (headless)"; + + package = mkOption { + type = types.package; + default = defguard-client; + description = "Package that provides the defguard-cli binary."; }; }; - config = lib.mkIf cfg.enable { - environment.systemPackages = [cfg.package]; + config = mkIf (svcCfg.enable || clientCfg.enable || cliCfg.enable) { + environment.systemPackages = + [] + ++ optional svcCfg.enable svcCfg.package + ++ optional clientCfg.enable clientCfg.package + ++ optional cliCfg.enable cliCfg.package; systemd.services.defguard-service = { description = "Defguard VPN Service"; @@ -41,7 +75,7 @@ in { after = ["network-online.target"]; serviceConfig = { Group = "defguard"; - ExecStart = "${cfg.package}/bin/defguard-service --log-level ${cfg.logLevel} --stats-period ${toString cfg.statsPeriod}"; + ExecStart = "${svcCfg.package}/bin/defguard-service --log-level ${svcCfg.logLevel} --log-dir ${svcCfg.logDir} --stats-period ${toString svcCfg.statsPeriod}"; ExecReload = "kill -HUP $MAINPID"; KillMode = "process"; KillSignal = "SIGINT"; @@ -51,13 +85,9 @@ in { RestartSec = 2; TasksMax = "infinity"; OOMScoreAdjust = -1000; - # Security hardening NoNewPrivileges = true; PrivateTmp = true; ProtectControlGroups = true; - # Requires WireGuard to be built into the kernel or pre-loaded via - # boot.kernelModules. If WireGuard is a loadable module, auto-loading - # will be blocked by ProtectKernelModules. ProtectKernelModules = true; RestrictRealtime = true; LockPersonality = true; diff --git a/nix/package.nix b/nix/package.nix index 547c50fac..889c87e28 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -99,7 +99,7 @@ inherit version pnpm; src = ../new-ui; fetcherVersion = 3; - hash = "sha256-77eqX4iJs6zxEjguTG0Nf1k2tK+lYJ084sEsbdkl678="; + hash = "sha256-baWUPm0kQqCpfPaKQ/XelD253ly/f2icuR/s/+6jVgE="; }; # Pre-build the new UI frontend so Tauri can serve it as WebviewUrl::App("compact/") and "full/". @@ -176,8 +176,7 @@ in # --config replaces the build section from tauri.linux.conf.json. pnpm tauri build \ - --config '{"build":{"beforeBuildCommand":""}}' \ - --bundles deb + --config '{"build":{"beforeBuildCommand":""}}' runHook postBuild ''; diff --git a/nix/shell.nix b/nix/shell.nix index 36afd3327..a5f50f154 100644 --- a/nix/shell.nix +++ b/nix/shell.nix @@ -8,6 +8,24 @@ targets = ["x86_64-apple-darwin" "aarch64-apple-darwin" "x86_64-pc-windows-gnu"]; }; + # nightly rustfmt, needed only for the unstable import-grouping options that + # `fmt-imports` passes via --config. It is deliberately NOT placed on PATH + # (that would collide with the stable rustfmt above); the wrapper points + # stable `cargo fmt` at it via RUSTFMT, leaving the default toolchain alone. + # The unstable options live only here (not in a committed rustfmt.toml), so a + # normal `cargo fmt` sees no unstable keys and stays warning-free. + rustfmtNightly = pkgs.rust-bin.nightly.latest.rustfmt; + + # Usage: fmt-imports [cargo fmt flags] e.g. fmt-imports --check + fmtImports = pkgs.writeShellScriptBin "fmt-imports" '' + set -euo pipefail + root="$(${pkgs.git}/bin/git rev-parse --show-toplevel)" + cd "$root/src-tauri" + export RUSTFMT="${rustfmtNightly}/bin/rustfmt" + exec ${rustToolchain}/bin/cargo fmt "$@" -- \ + --config imports_granularity=Crate,group_imports=StdExternalCrate + ''; + craneLib = crane.mkLib pkgs; defguard-client = pkgs.callPackage ./package.nix { @@ -28,6 +46,7 @@ in # add additional dev tools packages = with pkgs; [ rustToolchain + fmtImports trunk sqlx-cli cargo-nextest diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index e93ac5df7..4b10f46bc 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1420,6 +1420,7 @@ dependencies = [ "tonic", "tracing", "tracing-subscriber", + "webbrowser", ] [[package]] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 992a7e5c1..73a82f56a 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -30,6 +30,7 @@ tonic-prost = "0.14" tonic-prost-build = "0.14" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] } +webbrowser = "1.0" tempfile = "3" http = "1" vergen-git2 = { version = "9.1", features = ["build"] } @@ -62,6 +63,11 @@ name = "defguard-client" tauri-build = { version = "2", features = [] } vergen-git2.workspace = true +[workspace.lints.clippy] +uninlined_format_args = "deny" +manual_let_else = "warn" +redundant_closure = "warn" + [dependencies] anyhow = "1.0" base64.workspace = true @@ -120,7 +126,7 @@ tower = "0.5" tracing.workspace = true tracing-appender = "0.2" tracing-subscriber.workspace = true -webbrowser = "1.0" +webbrowser.workspace = true x25519-dalek = { version = "2", features = [ "getrandom", "serde", diff --git a/src-tauri/client-cli/Cargo.toml b/src-tauri/client-cli/Cargo.toml index 0922debb5..8350ebfbc 100644 --- a/src-tauri/client-cli/Cargo.toml +++ b/src-tauri/client-cli/Cargo.toml @@ -28,6 +28,7 @@ thiserror.workspace = true tokio.workspace = true tracing.workspace = true tracing-subscriber = { workspace = true, features = ["env-filter"] } +webbrowser.workspace = true # Dummy feature to let tauri build the release. [features] diff --git a/src-tauri/client-cli/src/cli.rs b/src-tauri/client-cli/src/cli.rs index a99ec08ab..b6f3ed2e2 100644 --- a/src-tauri/client-cli/src/cli.rs +++ b/src-tauri/client-cli/src/cli.rs @@ -99,25 +99,12 @@ pub enum Commands { Location(LocationCommand), /// Manage instances. - #[command(subcommand)] + #[command(subcommand, alias = "i")] Instance(InstanceCommand), /// Manage imported WireGuard tunnels. - #[command(subcommand)] + #[command(subcommand, alias = "t")] Tunnel(TunnelCommand), - - /// Enroll a new instance (alternative to the desktop enrollment flow). - // TODO: Hidden until implemented - #[command(hide = true)] - Enroll { - /// Enrollment token. - #[arg(long, env = "DG_ENROLLMENT_TOKEN")] - token: String, - - /// Proxy / Edge URL for enrollment. - #[arg(long, env = "DG_URL")] - url: String, - }, } #[derive(Subcommand)] diff --git a/src-tauri/client-cli/src/commands/connect.rs b/src-tauri/client-cli/src/commands/connect.rs index c39b11bae..118a36951 100644 --- a/src-tauri/client-cli/src/commands/connect.rs +++ b/src-tauri/client-cli/src/commands/connect.rs @@ -1,11 +1,13 @@ use std::io::{stdin, IsTerminal}; use defguard_client_posture::{authorize_posture_session, get_posture_data}; -use defguard_core::database::models::instance::Instance; +use defguard_client_proto::defguard::client_types::MfaMethod; +use defguard_core::{ + connection::{active_state::active_state, bring_up, ConnectionTarget}, + database::models::instance::Instance, + ConnectionType, +}; use secrecy::ExposeSecret; - -use defguard_core::connection::{active_state::active_state, bring_up, ConnectionTarget}; -use defguard_core::ConnectionType; use serde_json::json; use tracing::info; @@ -30,6 +32,7 @@ pub async fn handle( mfa_method: Option<&str>, all_traffic: bool, predefined_traffic: bool, + json: bool, ) -> Result { #[cfg(target_os = "macos")] { @@ -77,21 +80,9 @@ pub async fn handle( let (target_name, psk, mtu) = match &target { ResolvedTarget::Location(location) => { if location.mfa_enabled() { - // Determine the MFA code source from CLI flags. - let code_source = code - .map(|c| CodeSource::Literal(c.to_string())) - .or_else(|| code_command.map(|cmd| CodeSource::Command(cmd.to_string()))); - - let source = if let Some(code_source) = code_source { - code_source - } else if stdin().is_terminal() { - CodeSource::Interactive - } else { - return Err(CliError::MfaInputRequired(format!( - "Location '{}' requires MFA but no --code, --code-command, or TTY is available.", - location.name - ))); - }; + // Resolve the effective MFA method. + // Also rejects --code / --code-command when the method is OIDC. + let method = mfa::resolve_method(location, mfa_method, code, code_command)?; let instance = Instance::find_by_id(&state.pool, location.instance_id) .await @@ -112,15 +103,36 @@ pub async fn handle( None }; - let psk = mfa::authorize( - location, - &source, - &instance, - mfa_method, - posture_data, - &state.pool, - ) - .await?; + let psk = if method == MfaMethod::Oidc { + mfa::authorize_oidc(location, &instance, posture_data, &state.pool, json) + .await? + } else { + // Determine the MFA code source from CLI flags. + let code_source = code + .map(|c| CodeSource::Literal(c.to_string())) + .or_else(|| code_command.map(|cmd| CodeSource::Command(cmd.to_string()))); + + let source = if let Some(code_source) = code_source { + code_source + } else if stdin().is_terminal() { + CodeSource::Interactive + } else { + return Err(CliError::MfaInputRequired(format!( + "Location '{}' requires MFA but no --code, --code-command, or TTY is available.", + location.name + ))); + }; + + mfa::authorize( + location, + &source, + &instance, + method, + posture_data, + &state.pool, + ) + .await? + }; ( location.name.clone(), Some(psk.expose_secret().to_string()), diff --git a/src-tauri/client-cli/src/commands/disconnect.rs b/src-tauri/client-cli/src/commands/disconnect.rs index c65b3a72e..419ba4e3a 100644 --- a/src-tauri/client-cli/src/commands/disconnect.rs +++ b/src-tauri/client-cli/src/commands/disconnect.rs @@ -7,8 +7,7 @@ use tracing::{error, info}; use crate::{ output::CommandOutput, - resolve::resolve_disconnect_target, - resolve::{ResolvedTarget, TargetSpec}, + resolve::{resolve_disconnect_target, ResolvedTarget, TargetSpec}, state::{CliError, State}, }; diff --git a/src-tauri/client-cli/src/commands/list.rs b/src-tauri/client-cli/src/commands/list.rs index bf5fcc2b5..fd901c13b 100644 --- a/src-tauri/client-cli/src/commands/list.rs +++ b/src-tauri/client-cli/src/commands/list.rs @@ -33,7 +33,7 @@ pub struct ListResult { impl CommandOutput for ListResult { fn human(&self) -> String { if self.instances.is_empty() { - "No instances enrolled. Use the desktop app or 'enroll' to get started.".to_string() + "No instances enrolled. Use the desktop app to get started.".to_string() } else { format_list_table(&self.instances, &self.locations, &self.tunnels) } @@ -50,6 +50,7 @@ impl CommandOutput for ListResult { .instances .iter() .map(|i| InstanceEntry { + id: i.id, name: i.name.clone(), url: i.url.clone(), }) @@ -59,6 +60,7 @@ impl CommandOutput for ListResult { .locations .iter() .map(|l| LocationEntry { + id: l.id, name: l.name.clone(), instance: instance_names.get(&l.instance_id).cloned(), address: l.address.clone(), @@ -73,6 +75,7 @@ impl CommandOutput for ListResult { .tunnels .iter() .map(|t| TunnelEntry { + id: t.id, name: t.name.clone(), address: t.address.clone(), endpoint: t.endpoint.clone(), @@ -119,8 +122,8 @@ fn format_list_table( lines.push(format!("\n{} ({})", instance.name, instance.url)); if let Some(locations) = instance_locations.get(&instance.id) { lines.push(format!( - " {:3} {:<11}", - "LOCATION", "ADDRESS", "ENDPOINT", "MFA", "Routing" + " {:>4} {:3} {:<11}", + "ID", "LOCATION", "ADDRESS", "ENDPOINT", "MFA", "Routing" )); for location in locations { let mfa = if location.mfa_enabled() { "yes" } else { "no" }; @@ -130,8 +133,8 @@ fn format_list_table( "Predefined" }; lines.push(format!( - " {:3} {route_label:<11}", - location.name, location.address, location.endpoint + " {:>4} {:3} {route_label:<11}", + location.id, location.name, location.address, location.endpoint )); } } else { @@ -155,13 +158,13 @@ fn format_list_table( lines.push("\nTunnels".to_string()); lines.push(format!( - " {:4} {:4} {:3} {:<11}", - "LOCATION", "ADDRESS", "ENDPOINT", "INSTANCE", "MFA", "Routing" + " {:>4} {:3} {:<11}", + "ID", "LOCATION", "ADDRESS", "ENDPOINT", "INSTANCE", "MFA", "Routing" )]; for location in locations { let instance = instance_names .get(&location.instance_id) .map_or("?", String::as_str); lines.push(format!( - " {:3} {:>11}", + " {:>4} {:3} {:>11}", + location.id, location.name, location.address, location.endpoint, @@ -339,6 +341,7 @@ mod tests { instance_names: names, }; let s = result.human(); + assert!(s.contains("ID")); assert!(s.contains("office")); assert!(s.contains("acme")); assert!(s.contains("1.2.3.4:51820")); @@ -367,6 +370,7 @@ mod tests { let json = result.json(); let locations = json["locations"].as_array().unwrap(); assert_eq!(locations.len(), 1); + assert_eq!(locations[0]["id"], 1); assert_eq!(locations[0]["name"], "office"); assert_eq!(locations[0]["instance"], "acme"); } diff --git a/src-tauri/client-cli/src/commands/status.rs b/src-tauri/client-cli/src/commands/status.rs index aa1d9dcd6..cca5ec047 100644 --- a/src-tauri/client-cli/src/commands/status.rs +++ b/src-tauri/client-cli/src/commands/status.rs @@ -155,9 +155,10 @@ fn format_handshake(secs: u64) -> String { #[cfg(test)] mod tests { - use super::*; use defguard_core::{connection::active_state::InterfaceStats, ConnectionType}; + use super::*; + fn make_conn( name: &str, iface: &str, diff --git a/src-tauri/client-cli/src/commands/tunnel.rs b/src-tauri/client-cli/src/commands/tunnel.rs index b3c5a3cc3..5e0ee2049 100644 --- a/src-tauri/client-cli/src/commands/tunnel.rs +++ b/src-tauri/client-cli/src/commands/tunnel.rs @@ -53,6 +53,7 @@ impl CommandOutput for TunnelListResult { .iter() .map(|t| { json!({ + "id": t.id, "name": t.name, "address": t.address, "endpoint": t.endpoint, @@ -85,12 +86,13 @@ fn format_tunnel_list_table(tunnels: &[Tunnel]) -> String { .max(MIN_ENDPOINT_COL_WIDTH); let mut lines = vec![format!( - " {:11}", - "NAME", "ADDRESS", "ENDPOINT", "Routing" + " {:>4} {:11}", + "ID", "NAME", "ADDRESS", "ENDPOINT", "Routing" )]; for tunnel in tunnels { lines.push(format!( - " {:11}", + " {:>4} {:11}", + tunnel.id, tunnel.name, tunnel.address, tunnel.endpoint, @@ -206,6 +208,7 @@ mod tests { tunnels: vec![make_tunnel("gateway")], }; let s = result.human(); + assert!(s.contains("ID")); assert!(s.contains("gateway")); assert!(s.contains("10.0.0.0/24")); assert!(s.contains("1.2.3.4:51820")); diff --git a/src-tauri/client-cli/src/exit.rs b/src-tauri/client-cli/src/exit.rs index 964cc0b93..b30d7292a 100644 --- a/src-tauri/client-cli/src/exit.rs +++ b/src-tauri/client-cli/src/exit.rs @@ -12,6 +12,7 @@ use crate::state::CliError; /// | 5 | mfa-failed | /// | 6 | not-enrolled | /// | 7 | invalid-input | +/// | 8 | cancelled | pub fn exit_code_for(err: &CliError) -> u8 { match err { CliError::Usage(_) => 2, @@ -20,6 +21,7 @@ pub fn exit_code_for(err: &CliError) -> u8 { CliError::MfaFailed(_) | CliError::MfaInputRequired(_) => 5, CliError::NotEnrolled(_) => 6, CliError::InvalidInput(_) => 7, + CliError::Cancelled(_) => 8, CliError::Database(_) => 1, CliError::Other(_) => 1, } @@ -42,6 +44,7 @@ mod tests { &CliError::InvalidInput("route_all_traffic enforced".into()), 7, ), + (&CliError::Cancelled("user cancelled".into()), 8), ( &CliError::Database(sqlx::Error::Protocol("bad schema".into())), 1, @@ -52,8 +55,7 @@ mod tests { assert_eq!( exit_code_for(err), *expected, - "{:?} should map to {expected}", - err + "{err:?} should map to {expected}", ); } } diff --git a/src-tauri/client-cli/src/main.rs b/src-tauri/client-cli/src/main.rs index ba3ef5d14..022afe892 100644 --- a/src-tauri/client-cli/src/main.rs +++ b/src-tauri/client-cli/src/main.rs @@ -76,6 +76,7 @@ async fn main() -> ExitCode { mfa_method.as_deref(), all_traffic, predefined_traffic, + cli.json, ) .await, cli.json, @@ -135,12 +136,6 @@ async fn main() -> ExitCode { output::finish(tunnel::handle_show(&state, &name).await, cli.json) } }, - Commands::Enroll { .. } => { - let err = state::CliError::Usage("command not yet implemented".into()); - let code = exit::exit_code_for(&err); - output::emit_error(&err, cli.json); - ExitCode::from(code) - } } } diff --git a/src-tauri/client-cli/src/mfa.rs b/src-tauri/client-cli/src/mfa.rs index 32521da49..06cf1c26d 100644 --- a/src-tauri/client-cli/src/mfa.rs +++ b/src-tauri/client-cli/src/mfa.rs @@ -1,7 +1,10 @@ //! Connect-time VPN MFA over `core::proxy` (HTTP). //! //! Flow: `start` → `obtain_code` → `finish` → preshared_key. -//! Supports TOTP and email methods. OIDC and mobile-approve are WIP. +//! Supports TOTP, email, and OIDC methods. Mobile-approve is +//! not yet supported by the CLI. + +use std::time::Duration; use defguard_client_proto::defguard::{ client_types::{ @@ -14,7 +17,7 @@ use defguard_core::{ database::{ models::{ instance::Instance, - location::{infer_mfa_method, Location, LocationMfaMethod}, + location::{infer_mfa_method, Location, LocationMfaMethod, LocationMfaMode}, wireguard_keys::WireguardKeys, Id, }, @@ -25,6 +28,11 @@ use defguard_core::{ use reqwest::{StatusCode, Url}; use secrecy::{ExposeSecret, SecretString}; use serde::Deserialize; +use tokio::{ + select, + signal::ctrl_c, + time::{sleep, Instant}, +}; use tracing::{debug, info, warn}; use crate::{ @@ -32,13 +40,55 @@ use crate::{ state::CliError, }; +/// Resolve the effective MFA method for a location and validate CLI flags +/// that are incompatible with certain methods. +/// +/// When `method_override` is `Some`, parses it into [`MfaMethod`]; otherwise +/// delegates to [`infer_method`] which respects the location's +/// [`LocationMfaMode`]. +/// +/// Rejects: +/// * `--mfa-method oidc` on Internal-mode locations +/// * `--code` / `--code-command` when the resolved method is OIDC +pub(crate) fn resolve_method( + location: &Location, + method_override: Option<&str>, + code: Option<&str>, + code_command: Option<&str>, +) -> Result { + let method = if let Some(raw) = method_override { + let method = parse_method(raw)?; + // OIDC override on an Internal-mode location will be rejected by the + // server. Fail early to give the user a clear error before I/O. + if method == MfaMethod::Oidc && location.location_mfa_mode == LocationMfaMode::Internal { + return Err(CliError::InvalidInput( + "--mfa-method oidc is only valid for locations that use external (OIDC) MFA." + .into(), + )); + } + method + } else { + infer_method(location) + }; + + // OIDC MFA does not use codes; --code / --code-command are incompatible. + if method == MfaMethod::Oidc && (code.is_some() || code_command.is_some()) { + return Err(CliError::InvalidInput(format!( + "location '{}' cannot use --code / --code-command with external (OIDC) MFA", + location.name + ))); + } + + Ok(method) +} + /// Run the VPN MFA handshake for a location. /// /// * `location` - the target location. /// * `source` - how to obtain the code. /// * `instance` - the instance this location belongs to (for proxy URL + pubkey). -/// * `method_override` - optional `--mfa-method` flag; if set, uses this instead of the -/// location's stored preference. +/// * `method` - the resolved [`MfaMethod`] (use [`resolve_method`] to obtain it). +/// **Must not be [`MfaMethod::Oidc`]**; OIDC uses [`authorize_oidc`] instead. /// * `posture_data` - device posture data; must be provided when the location also /// requires posture checks. /// @@ -48,24 +98,26 @@ pub async fn authorize( location: &Location, source: &CodeSource, instance: &Instance, - method_override: Option<&str>, + method: MfaMethod, posture_data: Option, pool: &DbPool, ) -> Result { - let method = if let Some(raw) = method_override { - parse_method(raw)? - } else { - infer_method(location) - }; - // Reject methods not yet supported by the CLI before doing any I/O. + // OIDC is not rejected as "not yet supported" because it IS supported - + // but it has its own dedicated code path (authorize_oidc). If callers + // accidentally invoke authorize() with OIDC, this catch-all is a + // defense-in-depth barrier that emits a clear error. match method { - MfaMethod::Oidc | MfaMethod::Biometric | MfaMethod::MobileApprove => { + MfaMethod::Biometric | MfaMethod::MobileApprove => { return Err(CliError::MfaFailed(format!( - "MFA method {:?} is not yet supported by the CLI. Use the desktop client.", - method + "MFA method {method:?} is not yet supported by the CLI. Use the desktop client." ))); } + MfaMethod::Oidc => { + return Err(CliError::Other( + "Internal error: OIDC MFA must use authorize_oidc, not authorize".into(), + )); + } _ => {} } @@ -85,12 +137,7 @@ pub async fn authorize( // The one-time MFA code and the returned preshared key are sensitive; warn (but do // not block) if the proxy is not using HTTPS, since they would travel in cleartext. - if proxy_base.scheme() != "https" { - warn!( - "Proxy URL '{}' is not HTTPS; the MFA code and preshared key will be sent in cleartext.", - instance.proxy_url - ); - } + check_proxy_scheme(&proxy_base, &instance.proxy_url); // Step 1: Start the MFA session. let start_req = ClientMfaStartRequest { @@ -157,13 +204,14 @@ pub async fn authorize( Ok(SecretString::from(finish_resp.preshared_key)) } +#[derive(Deserialize)] +struct ErrorBody { + error: Option, +} + /// Map a non-2xx MFA response to a `CliError`. async fn handle_mfa_error(response: reqwest::Response) -> CliError { let status = response.status(); - #[derive(Deserialize)] - struct ErrorBody { - error: Option, - } let message = response .json::() @@ -217,3 +265,279 @@ fn infer_method(location: &Location) -> MfaMethod { } } } + +/// Warn if the proxy is not using HTTPS. +/// +/// The one-time MFA code and the returned preshared key are sensitive and would +/// travel in cleartext over plain HTTP. +fn check_proxy_scheme(proxy_base: &Url, proxy_url: &str) { + if proxy_base.scheme() != "https" { + warn!("Proxy URL '{proxy_url}' is not HTTPS; secrets will be sent in cleartext."); + } +} + +/// Open a URL in the system browser. +/// +/// Production: calls [`webbrowser::open`]; prints a hint to stderr on failure. +/// When `json_mode` is true, the fallback message includes the URL itself since +/// it wasn't already printed above. +/// Tests: no-op (never spawn a browser). +#[cfg(not(test))] +fn open_url(url: &str, json_mode: bool) { + if webbrowser::open(url).is_err() { + if json_mode { + eprintln!("Could not open browser. Open this URL manually: {url}"); + } else { + eprintln!("Could not open browser. Open the URL above manually."); + } + } +} + +#[cfg(test)] +fn open_url(_url: &str, _json_mode: bool) { + // no-op: tests must not spawn a browser +} + +/// Fixed interval between OIDC MFA finish polls (shortened for tests). +#[cfg(not(test))] +const OIDC_POLL_INTERVAL: Duration = Duration::from_secs(5); +#[cfg(test)] +const OIDC_POLL_INTERVAL: Duration = Duration::from_millis(5); + +/// Total time the CLI will wait for the user to complete OIDC authentication +/// before giving up (shortened for tests). +#[cfg(not(test))] +const OIDC_POLL_TIMEOUT: Duration = Duration::from_secs(300); +#[cfg(test)] +const OIDC_POLL_TIMEOUT: Duration = Duration::from_millis(200); + +/// Run the OIDC MFA flow for an external-IdP location. +/// +/// Opens the system browser to `{proxy_url}openid/mfa?token=...` and polls +/// the proxy until the user completes authentication with the external +/// identity provider. Returns the WireGuard preshared key. +/// +/// When `json_mode` is true, progress messages on stderr are suppressed so +/// that `--json` output consumers only see the final result/error. +pub(crate) async fn authorize_oidc( + location: &Location, + instance: &Instance, + posture_data: Option, + pool: &DbPool, + json_mode: bool, +) -> Result { + let wireguard_keys = WireguardKeys::find_by_instance_id(pool, instance.id) + .await + .map_err(|e| CliError::Other(e.to_string()))? + .ok_or_else(|| { + CliError::Other(format!( + "WireGuard keys not found for instance {}", + instance.name + )) + })?; + + let proxy_base = Url::parse(&instance.proxy_url) + .map_err(|e| CliError::Other(format!("Invalid proxy URL: {e}")))?; + check_proxy_scheme(&proxy_base, &instance.proxy_url); + + // Step 1: Start the OIDC MFA session. + let start_req = ClientMfaStartRequest { + location_id: location.network_id, + pubkey: wireguard_keys.pubkey.clone(), + method: MfaMethod::Oidc as i32, + posture_data, + }; + + let start_url = proxy_base + .join("api/v1/client-mfa/start") + .map_err(|e| CliError::Other(format!("Failed to build MFA start URL: {e}")))?; + + debug!("Starting OIDC MFA session at {start_url}"); + let response = post_with_headers(start_url, &start_req) + .await + .map_err(|e| CliError::Other(format!("Failed to reach proxy: {e}")))?; + + if !response.status().is_success() { + return Err(handle_mfa_error(response).await); + } + + let start_resp: ClientMfaStartResponse = response + .json() + .await + .map_err(|e| CliError::Other(format!("Invalid MFA start response: {e}")))?; + + // Step 2: Open the browser for the user to authenticate. + // Never log the token-bearing URL via tracing. + let mut browser_url = proxy_base + .join("openid/mfa") + .map_err(|e| CliError::Other(format!("Failed to build OIDC MFA URL: {e}")))?; + browser_url + .query_pairs_mut() + .append_pair("token", &start_resp.token); + + if !json_mode { + eprintln!("Open this URL to authenticate:"); + eprintln!(" {browser_url}"); + eprintln!("Waiting for authentication... (Ctrl-C to cancel)"); + } + open_url(browser_url.as_ref(), json_mode); + + // Step 3: Poll until the user completes authentication or the deadline expires. + poll_finish(&proxy_base, &start_resp.token, json_mode).await +} + +/// Poll [`client-mfa/finish`] until the OIDC session is completed or the +/// deadline expires. +/// +/// Returns the preshared key on success. +async fn poll_finish( + proxy_base: &Url, + token: &str, + json_mode: bool, +) -> Result { + let finish_url = proxy_base + .join("api/v1/client-mfa/finish") + .map_err(|e| CliError::Other(format!("Failed to build MFA finish URL: {e}")))?; + + let finish_req = ClientMfaFinishRequest { + token: token.to_string(), + code: None, + auth_pub_key: None, + }; + + let deadline = Instant::now() + OIDC_POLL_TIMEOUT; + + loop { + // Check if we've exceeded the overall deadline. + let remaining = deadline + .checked_duration_since(Instant::now()) + .unwrap_or_default(); + if remaining.is_zero() { + if !json_mode { + eprintln!("MFA login timed out."); + } + return Err(CliError::MfaFailed("MFA login timed out".into())); + } + + // Poll the proxy (first iteration is immediate, subsequent ones wait + // the poll interval at the end of each loop body). + let (status, body) = select! { + _ = ctrl_c() => { + if !json_mode { + eprintln!("MFA login cancelled."); + } + return Err(CliError::Cancelled("MFA login cancelled.".into())); + } + result = post_with_headers(finish_url.clone(), &finish_req) => { + let response = result + .map_err(|e| CliError::Other(format!("Failed to reach proxy: {e}")))?; + let status = response.status(); + if status == StatusCode::OK { + let finish_resp: ClientMfaFinishResponse = response + .json() + .await + .map_err(|e| CliError::Other(format!("Invalid MFA finish response: {e}")))?; + info!("OIDC MFA session completed, preshared key obtained"); + return Ok(SecretString::from(finish_resp.preshared_key)); + } + (status, response) + } + }; + + // Non-OK, non-428: report the error. + if status != StatusCode::PRECONDITION_REQUIRED { + return Err(handle_mfa_error(body).await); + } + + // 428: OIDC not complete yet. Wait the poll interval, yielding to + // Ctrl-C, then loop around for another check. + select! { + _ = ctrl_c() => { + if !json_mode { + eprintln!("MFA login cancelled."); + } + return Err(CliError::Cancelled("MFA login cancelled.".into())); + } + () = sleep(OIDC_POLL_INTERVAL) => {} + } + } +} + +#[cfg(test)] +mod tests { + use defguard_core::database::models::location::ServiceLocationMode; + + use super::*; + + fn location(name: &str, mode: LocationMfaMode) -> Location { + Location { + id: 1, + instance_id: 1, + network_id: 1, + name: name.into(), + address: "10.0.0.0/24".into(), + pubkey: "pk".into(), + endpoint: "1.2.3.4:51820".into(), + allowed_ips: "0.0.0.0/0".into(), + dns: None, + route_all_traffic: false, + keepalive_interval: 25, + location_mfa_mode: mode, + service_location_mode: ServiceLocationMode::Disabled, + mfa_method: None, + posture_check_required: false, + } + } + + #[test] + fn test_oidc_location_resolves_to_oidc() { + let l = location("office", LocationMfaMode::External); + let method = resolve_method(&l, None, None, None).unwrap(); + assert_eq!(method, MfaMethod::Oidc); + } + + #[test] + fn test_internal_location_resolves_to_totp() { + let l = location("office", LocationMfaMode::Internal); + let method = resolve_method(&l, None, None, None).unwrap(); + assert_eq!(method, MfaMethod::Totp); + } + + #[test] + fn test_code_with_oidc_rejected() { + let l = location("office", LocationMfaMode::External); + let err = resolve_method(&l, None, Some("123456"), None).unwrap_err(); + assert!(matches!(err, CliError::InvalidInput(_))); + assert!(err.to_string().contains("--code")); + } + + #[test] + fn test_code_command_with_oidc_rejected() { + let l = location("office", LocationMfaMode::External); + let err = resolve_method(&l, None, None, Some("pass otp")).unwrap_err(); + assert!(matches!(err, CliError::InvalidInput(_))); + assert!(err.to_string().contains("--code-command")); + } + + #[test] + fn test_code_with_totp_passes() { + let l = location("office", LocationMfaMode::Internal); + let method = resolve_method(&l, None, Some("123456"), None).unwrap(); + assert_eq!(method, MfaMethod::Totp); + } + + #[test] + fn test_no_code_with_oidc_passes() { + let l = location("office", LocationMfaMode::External); + let method = resolve_method(&l, None, None, None).unwrap(); + assert_eq!(method, MfaMethod::Oidc); + } + + #[test] + fn test_mfa_method_oidc_on_internal_rejected() { + let l = location("office", LocationMfaMode::Internal); + let err = resolve_method(&l, Some("oidc"), None, None).unwrap_err(); + assert!(matches!(err, CliError::InvalidInput(_))); + assert!(err.to_string().contains("oidc")); + } +} diff --git a/src-tauri/client-cli/src/mfa_code.rs b/src-tauri/client-cli/src/mfa_code.rs index 2fc46fe87..193047be4 100644 --- a/src-tauri/client-cli/src/mfa_code.rs +++ b/src-tauri/client-cli/src/mfa_code.rs @@ -8,7 +8,7 @@ use std::{ fmt, - io::{self, IsTerminal, Write}, + io::{stderr, stdin, IsTerminal, Write}, process::Command, }; @@ -50,10 +50,6 @@ pub struct MfaContext { } /// Obtain a TOTP/email code from the configured source. -/// -/// The returned [`SecretString`] prevents accidental exposure through -/// [`Debug`], logs, or error messages. Callers that need the raw value -/// must explicitly call `.expose_secret()`. pub fn obtain_code(source: &CodeSource, ctx: &MfaContext) -> Result { match source { CodeSource::Literal(code) => { @@ -88,7 +84,7 @@ pub fn obtain_code(source: &CodeSource, ctx: &MfaContext) -> Result { - if !std::io::stdin().is_terminal() { + if !stdin().is_terminal() { return Err(CliError::MfaInputRequired( "No TTY available for interactive MFA code entry. Provide --code or --code-command." .into(), @@ -97,10 +93,10 @@ pub fn obtain_code(source: &CodeSource, ctx: &MfaContext) -> Result Result MfaContext { MfaContext { instance: "test-inst".into(), diff --git a/src-tauri/client-cli/src/output.rs b/src-tauri/client-cli/src/output.rs index 49a9297dd..990d74a41 100644 --- a/src-tauri/client-cli/src/output.rs +++ b/src-tauri/client-cli/src/output.rs @@ -55,12 +55,14 @@ pub fn emit_error(err: &CliError, json: bool) { #[derive(Serialize)] pub struct InstanceEntry { + pub id: i64, pub name: String, pub url: String, } #[derive(Serialize)] pub struct LocationEntry { + pub id: i64, pub name: String, pub instance: Option, pub address: String, @@ -75,6 +77,7 @@ pub struct LocationEntry { #[derive(Serialize)] pub struct TunnelEntry { + pub id: i64, pub name: String, pub address: String, pub endpoint: String, @@ -104,6 +107,7 @@ fn error_kind(err: &CliError) -> String { CliError::MfaInputRequired(_) => "mfaInputRequired".into(), CliError::NotEnrolled(_) => "notEnrolled".into(), CliError::InvalidInput(_) => "invalidInput".into(), + CliError::Cancelled(_) => "cancelled".into(), CliError::Database(_) => "database".into(), CliError::Other(_) => "other".into(), } diff --git a/src-tauri/client-cli/src/resolve.rs b/src-tauri/client-cli/src/resolve.rs index 0b58f4530..6bb9687c6 100644 --- a/src-tauri/client-cli/src/resolve.rs +++ b/src-tauri/client-cli/src/resolve.rs @@ -132,7 +132,7 @@ async fn resolve_sole_location(pool: &DbPool) -> Result Err(CliError::NotEnrolled( - "No locations configured. Enroll an instance first.".into(), + "No locations configured. Use the desktop app to enroll an instance first.".into(), )), 1 => Ok(ResolvedTarget::Location( locations diff --git a/src-tauri/client-cli/src/state.rs b/src-tauri/client-cli/src/state.rs index 234b9952b..9e10c4480 100644 --- a/src-tauri/client-cli/src/state.rs +++ b/src-tauri/client-cli/src/state.rs @@ -41,6 +41,9 @@ pub enum CliError { #[error("invalid input: {0}")] InvalidInput(String), + #[error("{0}")] + Cancelled(String), + #[error("{0}")] Other(String), diff --git a/src-tauri/client-cli/src/tests_proxy.rs b/src-tauri/client-cli/src/tests_proxy.rs index ac4c44beb..2d11a0ae0 100644 --- a/src-tauri/client-cli/src/tests_proxy.rs +++ b/src-tauri/client-cli/src/tests_proxy.rs @@ -8,17 +8,14 @@ use std::{ io::{ErrorKind, Read, Write}, net::{SocketAddr, TcpListener, TcpStream}, sync::{ - atomic::{AtomicBool, Ordering}, + atomic::{AtomicBool, AtomicU32, Ordering}, Arc, }, thread::{sleep, spawn, JoinHandle}, time::Duration, }; -use secrecy::ExposeSecret; - -use crate::{mfa, mfa_code::CodeSource, state::CliError}; - +use defguard_client_proto::defguard::client_types::MfaMethod; use defguard_core::database::{ models::{ instance::{ClientTrafficPolicy, Instance}, @@ -27,6 +24,9 @@ use defguard_core::database::{ }, DbPool, }; +use secrecy::ExposeSecret; + +use crate::{mfa, mfa_code::CodeSource, state::CliError}; const READ_TIMEOUT: Duration = Duration::from_secs(5); const CONNECT_TIMEOUT: Duration = Duration::from_millis(50); @@ -47,13 +47,34 @@ struct MockProxy { } impl MockProxy { + /// Single-shot finish: each finish request gets the same response. fn new(start_response: MockResponse, finish_response: MockResponse) -> Self { + Self::with_counter(start_response, finish_response, None) + } + + /// OIDC polling: the first `fail_count` calls to `finish` return HTTP 428; + /// subsequent calls return `finish_response` (HTTP 200). + fn with_poll( + start_response: MockResponse, + finish_response: MockResponse, + fail_count: u32, + ) -> Self { + Self::with_counter(start_response, finish_response, Some(fail_count)) + } + + fn with_counter( + start_response: MockResponse, + finish_response: MockResponse, + fail_count: Option, + ) -> Self { let listener = TcpListener::bind("127.0.0.1:0").unwrap(); // Non-blocking accept so the loop can observe the shutdown flag and exit cleanly. listener.set_nonblocking(true).unwrap(); let addr = listener.local_addr().unwrap(); let shutdown = Arc::new(AtomicBool::new(false)); let shutdown_thread = shutdown.clone(); + let finish_hits = Arc::new(AtomicU32::new(0)); + let finish_hits_thread = finish_hits.clone(); let handle = spawn(move || { while !shutdown_thread.load(Ordering::Relaxed) { let mut stream = match listener.accept() { @@ -86,6 +107,17 @@ impl MockProxy { let request = String::from_utf8_lossy(&data); let response = if request.contains("/api/v1/client-mfa/start") { &start_response + } else if let Some(max) = fail_count { + let current = finish_hits_thread.fetch_add(1, Ordering::Relaxed); + if current < max { + // 428: not yet authenticated + &MockResponse { + status: 428, + body: r#"{"error":"OIDC authentication not completed yet"}"#.into(), + } + } else { + &finish_response + } } else { &finish_response }; @@ -130,7 +162,7 @@ impl Drop for MockProxy { } } -fn mfa_enabled_loc(name: &str, instance_id: Id) -> Location { +fn mfa_enabled_location(name: &str, instance_id: Id) -> Location { Location { id: NoId, instance_id, @@ -150,6 +182,14 @@ fn mfa_enabled_loc(name: &str, instance_id: Id) -> Location { } } +/// Build a location that requires **external** (OIDC) MFA. +fn oidc_location(name: &str, instance_id: Id) -> Location { + Location { + location_mfa_mode: LocationMfaMode::External, + ..mfa_enabled_location(name, instance_id) + } +} + async fn seed_db(pool: &DbPool) -> (Instance, Location) { let inst = Instance { id: NoId, @@ -176,14 +216,17 @@ async fn seed_db(pool: &DbPool) -> (Instance, Location) { .await .unwrap(); - let loc = mfa_enabled_loc("office", inst.id).save(pool).await.unwrap(); + let loc = mfa_enabled_location("office", inst.id) + .save(pool) + .await + .unwrap(); (inst, loc) } #[sqlx::test(migrations = "../migrations")] async fn test_mfa_success_returns_psk(pool: DbPool) { - let (mut inst, loc) = seed_db(&pool).await; + let (mut instance, location) = seed_db(&pool).await; let mock = MockProxy::new( MockResponse { status: 200, @@ -195,10 +238,10 @@ async fn test_mfa_success_returns_psk(pool: DbPool) { }, ); mock.wait_ready(); - inst.proxy_url = mock.url(); + instance.proxy_url = mock.url(); let source = CodeSource::Literal("123456".into()); - let psk = mfa::authorize(&loc, &source, &inst, None, None, &pool) + let psk = mfa::authorize(&location, &source, &instance, MfaMethod::Totp, None, &pool) .await .unwrap(); assert_eq!(psk.expose_secret(), "secret-psk"); @@ -206,7 +249,7 @@ async fn test_mfa_success_returns_psk(pool: DbPool) { #[sqlx::test(migrations = "../migrations")] async fn test_mfa_rejection_returns_mfa_failed(pool: DbPool) { - let (mut inst, loc) = seed_db(&pool).await; + let (mut instance, location) = seed_db(&pool).await; let mock = MockProxy::new( MockResponse { status: 200, @@ -218,10 +261,10 @@ async fn test_mfa_rejection_returns_mfa_failed(pool: DbPool) { }, ); mock.wait_ready(); - inst.proxy_url = mock.url(); + instance.proxy_url = mock.url(); let source = CodeSource::Literal("000000".into()); - let err = mfa::authorize(&loc, &source, &inst, None, None, &pool) + let err = mfa::authorize(&location, &source, &instance, MfaMethod::Totp, None, &pool) .await .unwrap_err(); @@ -231,12 +274,12 @@ async fn test_mfa_rejection_returns_mfa_failed(pool: DbPool) { #[sqlx::test(migrations = "../migrations")] async fn test_mfa_proxy_unreachable(pool: DbPool) { - let (mut inst, loc) = seed_db(&pool).await; + let (mut instance, location) = seed_db(&pool).await; // Point at a port where nothing is listening. - inst.proxy_url = "http://127.0.0.1:19999/".into(); + instance.proxy_url = "http://127.0.0.1:19999/".into(); let source = CodeSource::Literal("123456".into()); - let err = mfa::authorize(&loc, &source, &inst, None, None, &pool) + let err = mfa::authorize(&location, &source, &instance, MfaMethod::Totp, None, &pool) .await .unwrap_err(); @@ -246,3 +289,62 @@ async fn test_mfa_proxy_unreachable(pool: DbPool) { ); assert!(err.to_string().contains("Failed to reach proxy")); } + +#[sqlx::test(migrations = "../migrations")] +async fn test_oidc_mfa_success_returns_psk(pool: DbPool) { + let (mut instance, _location) = seed_db(&pool).await; + let oidc_location = oidc_location("office-oidc", instance.id) + .save(&pool) + .await + .unwrap(); + + let mock = MockProxy::with_poll( + MockResponse { + status: 200, + body: r#"{"token":"tok-oidc"}"#.into(), + }, + MockResponse { + status: 200, + body: r#"{"preshared_key":"secret-oidc-psk"}"#.into(), + }, + 2, // first two finish calls return 428, third returns 200 + ); + mock.wait_ready(); + instance.proxy_url = mock.url(); + + let psk = mfa::authorize_oidc(&oidc_location, &instance, None, &pool, false) + .await + .unwrap(); + assert_eq!(psk.expose_secret(), "secret-oidc-psk"); +} + +#[sqlx::test(migrations = "../migrations")] +async fn test_oidc_mfa_times_out_when_never_completed(pool: DbPool) { + let (mut instance, _location) = seed_db(&pool).await; + let oidc_location = oidc_location("office-oidc", instance.id) + .save(&pool) + .await + .unwrap(); + + // Proxy always returns 428 for finish: never authenticates. + let mock = MockProxy::with_poll( + MockResponse { + status: 200, + body: r#"{"token":"tok-timeout"}"#.into(), + }, + MockResponse { + status: 200, + body: r#"{"preshared_key":"unreachable"}"#.into(), + }, + u32::MAX, // never returns 200 + ); + mock.wait_ready(); + instance.proxy_url = mock.url(); + + let err = mfa::authorize_oidc(&oidc_location, &instance, None, &pool, false) + .await + .unwrap_err(); + + assert!(matches!(err, CliError::MfaFailed(_))); + assert!(err.to_string().contains("timed out")); +} diff --git a/src-tauri/core/src/connection/active_connections.rs b/src-tauri/core/src/connection/active_connections.rs index 5477b5d72..0feaa8953 100644 --- a/src-tauri/core/src/connection/active_connections.rs +++ b/src-tauri/core/src/connection/active_connections.rs @@ -3,6 +3,7 @@ use std::{collections::HashSet, sync::LazyLock}; use tokio::sync::Mutex; use crate::{ + connection::disconnect_interface, database::{ models::{connection::ActiveConnection, instance::Instance, location::Location, Id}, DB_POOL, @@ -11,8 +12,6 @@ use crate::{ ConnectionType, }; -use crate::connection::disconnect_interface; - pub static ACTIVE_CONNECTIONS: LazyLock>> = LazyLock::new(|| Mutex::new(Vec::new())); diff --git a/src-tauri/core/src/connection/active_state.rs b/src-tauri/core/src/connection/active_state.rs index ac444bc30..a4f5c32cb 100644 --- a/src-tauri/core/src/connection/active_state.rs +++ b/src-tauri/core/src/connection/active_state.rs @@ -3,17 +3,6 @@ //! The daemon (Linux/Windows) and Network Extension managers (macOS) are the shared //! source of truth for interface state. -use crate::{ - database::{models::Id, DbPool}, - error::Error, - ConnectionType, -}; - -#[cfg(not(target_os = "macos"))] -use crate::database::models::{location::Location, tunnel::Tunnel}; - -#[cfg(not(target_os = "macos"))] -use crate::connection::daemon_client::DAEMON_CLIENT; #[cfg(not(target_os = "macos"))] use base64::Engine as _; #[cfg(not(target_os = "macos"))] @@ -21,6 +10,16 @@ use defguard_client_proto::defguard::client::v1::{InterfaceData, Peer}; #[cfg(not(target_os = "macos"))] use tonic::Code; +#[cfg(not(target_os = "macos"))] +use crate::connection::daemon_client::DAEMON_CLIENT; +#[cfg(not(target_os = "macos"))] +use crate::database::models::{location::Location, tunnel::Tunnel}; +use crate::{ + database::{models::Id, DbPool}, + error::Error, + ConnectionType, +}; + /// Describes a currently-active WireGuard connection. #[derive(Clone, Debug)] pub struct ActiveConnectionInfo { diff --git a/src-tauri/core/src/connection/daemon_client.rs b/src-tauri/core/src/connection/daemon_client.rs index 452144269..46c9268c8 100644 --- a/src-tauri/core/src/connection/daemon_client.rs +++ b/src-tauri/core/src/connection/daemon_client.rs @@ -1,5 +1,6 @@ use std::sync::LazyLock; +use defguard_client_proto::defguard::client::v1::desktop_daemon_service_client::DesktopDaemonServiceClient; use hyper_util::rt::TokioIo; #[cfg(windows)] use tokio::net::windows::named_pipe::ClientOptions; @@ -12,8 +13,6 @@ use tower::service_fn; #[cfg(windows)] use windows_sys::Win32::Foundation::ERROR_PIPE_BUSY; -use defguard_client_proto::defguard::client::v1::desktop_daemon_service_client::DesktopDaemonServiceClient; - #[cfg(unix)] const DAEMON_SOCKET_PATH: &str = "/var/run/defguard.socket"; diff --git a/src-tauri/core/src/connection/mod.rs b/src-tauri/core/src/connection/mod.rs index d3f6dad60..4c24b001c 100644 --- a/src-tauri/core/src/connection/mod.rs +++ b/src-tauri/core/src/connection/mod.rs @@ -6,8 +6,10 @@ pub mod setup; #[cfg(target_os = "macos")] pub mod apple; -#[cfg(not(target_os = "macos"))] -use crate::database::models::connection::ActiveConnection; +#[cfg(target_os = "macos")] +use std::time::Duration; + +use active_state::ActiveConnectionInfo; #[cfg(target_os = "macos")] pub use apple::sync_locations_and_tunnels; #[cfg(not(target_os = "macos"))] @@ -15,14 +17,21 @@ use chrono::Utc; pub use setup::{disconnect_interface, execute_command}; #[cfg(not(target_os = "macos"))] pub use setup::{setup_interface, setup_interface_tunnel}; +#[cfg(target_os = "macos")] +use tokio::time::sleep; -use active_state::ActiveConnectionInfo; - -use crate::database::{ - models::{location::Location, tunnel::Tunnel, Id}, - DbPool, +#[cfg(not(target_os = "macos"))] +use crate::database::models::connection::ActiveConnection; +use crate::{ + database::{ + models::{location::Location, tunnel::Tunnel, Id}, + DbPool, + }, + error::Error, }; -use crate::error::Error; + +#[cfg(target_os = "macos")] +const TUNNEL_START_DELAY: Duration = Duration::from_secs(1); /// Identifies the type of connection target. pub enum ConnectionTarget<'a> { @@ -53,16 +62,13 @@ pub async fn bring_up( #[cfg(target_os = "macos")] { - // Work-around MFA propagation delay. - const TUNNEL_START_DELAY: std::time::Duration = std::time::Duration::from_secs(1); - let tunnel_config = match target { ConnectionTarget::Location(loc) => loc.tunnel_configuration(psk, mtu).await, ConnectionTarget::Tunnel(tun) => tun.tunnel_configuration(mtu), }?; tunnel_config.save(); - tokio::time::sleep(TUNNEL_START_DELAY).await; + sleep(TUNNEL_START_DELAY).await; tunnel_config.start_tunnel(); // On macOS the interface name is managed by the system. diff --git a/src-tauri/core/src/connection/setup.rs b/src-tauri/core/src/connection/setup.rs index 713952717..349723bee 100644 --- a/src-tauri/core/src/connection/setup.rs +++ b/src-tauri/core/src/connection/setup.rs @@ -1,8 +1,7 @@ +use std::process::Command; /// Connection setup helpers. use std::str::FromStr; -use std::process::Command; - use defguard_client_common::{find_free_tcp_port, get_interface_name}; use defguard_client_proto::defguard::client::v1::CreateInterfaceRequest; #[cfg(not(target_os = "macos"))] diff --git a/src-tauri/core/src/lib.rs b/src-tauri/core/src/lib.rs index a34f73440..e29ea56ad 100644 --- a/src-tauri/core/src/lib.rs +++ b/src-tauri/core/src/lib.rs @@ -1,18 +1,17 @@ use std::{fmt, path::PathBuf}; - -use chrono::{Duration, NaiveDateTime, Utc}; -use database::models::Id; -use serde::{Deserialize, Serialize}; #[cfg(unix)] use std::{ fs::{set_permissions, Permissions}, os::unix::fs::PermissionsExt, }; -use database::models::location::{ - infer_mfa_method, Location, LocationMfaMode, ServiceLocationMode, +use chrono::{Duration, NaiveDateTime, Utc}; +use database::models::{ + location::{infer_mfa_method, Location, LocationMfaMode, ServiceLocationMode}, + Id, }; use defguard_client_proto::defguard::client_types::DeviceConfig; +use serde::{Deserialize, Serialize}; pub mod app_config; pub mod connection; diff --git a/src-tauri/core/src/proxy.rs b/src-tauri/core/src/proxy.rs index 9cb41fd31..e24507e64 100644 --- a/src-tauri/core/src/proxy.rs +++ b/src-tauri/core/src/proxy.rs @@ -1,12 +1,12 @@ use std::{env, time::Duration}; use base64::{prelude::BASE64_STANDARD, Engine}; +use defguard_client_proto::defguard::client_types::ClientPlatformInfo; use prost::Message; use reqwest::{Client, Response, Url}; use serde::Serialize; use crate::version::{CLIENT_PLATFORM_HEADER, CLIENT_VERSION_HEADER, PKG_VERSION}; -use defguard_client_proto::defguard::client_types::ClientPlatformInfo; const HTTP_REQ_TIMEOUT: Duration = Duration::from_secs(5); diff --git a/src-tauri/daemon/src/windows.rs b/src-tauri/daemon/src/windows.rs index 9b7279b85..e986982c2 100644 --- a/src-tauri/daemon/src/windows.rs +++ b/src-tauri/daemon/src/windows.rs @@ -6,6 +6,10 @@ use std::{ }; use clap::Parser; +use defguard_client_service_locations::{ + windows::{watch_for_login_logoff, watch_for_network_change}, + ServiceLocationError, ServiceLocationManager, +}; use tokio::{runtime::Runtime, time::sleep}; use tracing::{error, info, warn}; use windows_service::{ @@ -23,10 +27,6 @@ use crate::{ daemon::{run_server, DaemonError}, utils::logging_setup, }; -use defguard_client_service_locations::{ - windows::{watch_for_login_logoff, watch_for_network_change}, - ServiceLocationError, ServiceLocationManager, -}; static SERVICE_NAME: &str = "DefguardService"; const SERVICE_TYPE: ServiceType = ServiceType::OWN_PROCESS; diff --git a/src-tauri/enterprise/posture/src/inspector/mod.rs b/src-tauri/enterprise/posture/src/inspector/mod.rs index 2fb05f477..d168d68c6 100644 --- a/src-tauri/enterprise/posture/src/inspector/mod.rs +++ b/src-tauri/enterprise/posture/src/inspector/mod.rs @@ -9,12 +9,11 @@ pub(crate) mod windows; use std::env::consts::OS; -use sysinfo::System; - use defguard_client_core::version::PKG_VERSION; use defguard_client_proto::defguard::enterprise::posture::v2::{ BoolCheck, DevicePostureData, Int32Check, StringCheck, UnavailableReason, }; +use sysinfo::System; /// Returns the operating system name. fn os_name() -> Result { diff --git a/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs b/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs index 725332751..5bf870773 100644 --- a/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs +++ b/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs @@ -1,6 +1,7 @@ -use super::super::super::{disk_encryption_status, linux_kernel_version, os_name, os_version}; use std::process::Command; +use super::super::super::{disk_encryption_status, linux_kernel_version, os_name, os_version}; + fn expected_kernel_version() -> String { let output = Command::new("uname") .arg("-r") diff --git a/src-tauri/enterprise/posture/src/inspector/tests/ci/macos.rs b/src-tauri/enterprise/posture/src/inspector/tests/ci/macos.rs index 0b385d815..db3d67911 100644 --- a/src-tauri/enterprise/posture/src/inspector/tests/ci/macos.rs +++ b/src-tauri/enterprise/posture/src/inspector/tests/ci/macos.rs @@ -1,6 +1,7 @@ -use super::super::super::{device_integrity, disk_encryption_status, os_name, os_version}; use std::process::Command; +use super::super::super::{device_integrity, disk_encryption_status, os_name, os_version}; + fn expected_os_version() -> String { let output = Command::new("sw_vers") .arg("-productVersion") diff --git a/src-tauri/enterprise/posture/src/inspector/tests/ci/windows.rs b/src-tauri/enterprise/posture/src/inspector/tests/ci/windows.rs index 7255b9a3b..5f0b17887 100644 --- a/src-tauri/enterprise/posture/src/inspector/tests/ci/windows.rs +++ b/src-tauri/enterprise/posture/src/inspector/tests/ci/windows.rs @@ -28,11 +28,13 @@ fn expected_security_update_age_days() -> i32 { } mod setup1 { - use super::super::super::super::{ - anti_virus_status, disk_encryption_status, os_name, os_version, part_of_domain, - security_update_age_days, + use super::{ + super::super::super::{ + anti_virus_status, disk_encryption_status, os_name, os_version, part_of_domain, + security_update_age_days, + }, + expected_security_update_age_days, }; - use super::expected_security_update_age_days; #[test] #[ignore = "CI posture testing only"] @@ -75,11 +77,13 @@ mod setup1 { } mod setup2 { - use super::super::super::super::{ - anti_virus_status, disk_encryption_status, os_name, os_version, part_of_domain, - security_update_age_days, + use super::{ + super::super::super::{ + anti_virus_status, disk_encryption_status, os_name, os_version, part_of_domain, + security_update_age_days, + }, + expected_security_update_age_days, }; - use super::expected_security_update_age_days; #[test] #[ignore = "CI posture testing only"] diff --git a/src-tauri/enterprise/posture/src/posture.rs b/src-tauri/enterprise/posture/src/posture.rs index 4db9dd6ab..583a8221b 100644 --- a/src-tauri/enterprise/posture/src/posture.rs +++ b/src-tauri/enterprise/posture/src/posture.rs @@ -1,6 +1,3 @@ -use reqwest::{StatusCode, Url}; -use serde::Deserialize; - #[cfg(windows)] use defguard_client_core::connection::daemon_client::DAEMON_CLIENT; use defguard_client_core::{ @@ -14,6 +11,8 @@ use defguard_client_core::{ use defguard_client_proto::defguard::enterprise::posture::v2::{ DevicePostureCheckRequest, DevicePostureCheckResponse, DevicePostureData, }; +use reqwest::{StatusCode, Url}; +use serde::Deserialize; #[cfg(not(windows))] use crate::inspector::device_posture_data; diff --git a/src-tauri/src/appstate.rs b/src-tauri/src/appstate.rs index e9a98113d..01d74c4a3 100644 --- a/src-tauri/src/appstate.rs +++ b/src-tauri/src/appstate.rs @@ -1,5 +1,6 @@ use std::{collections::HashMap, sync::Mutex}; +use defguard_client_core::connection::active_connections::ACTIVE_CONNECTIONS; use tauri::{ async_runtime::{spawn, JoinHandle}, PhysicalPosition, @@ -13,7 +14,6 @@ use crate::{ utils::stats_handler, ConnectionType, }; -use defguard_client_core::connection::active_connections::ACTIVE_CONNECTIONS; pub struct AppState { pub log_watchers: Mutex>, diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 2a413c152..4728baa47 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -2,12 +2,12 @@ use core::fmt; use std::{collections::HashMap, env, str::FromStr}; use chrono::{DateTime, Duration, Utc}; -use defguard_client_core::connection::active_connections::{ - find_connection, get_connection_id_by_type, ACTIVE_CONNECTIONS, -}; #[cfg(not(target_os = "macos"))] use defguard_client_core::connection::daemon_client::DAEMON_CLIENT; -use defguard_client_core::connection::disconnect_interface; +use defguard_client_core::connection::{ + active_connections::{find_connection, get_connection_id_by_type, ACTIVE_CONNECTIONS}, + disconnect_interface, +}; #[cfg(not(target_os = "macos"))] use defguard_client_proto::defguard::client::v1::{ DeleteServiceLocationsRequest, RemoveInterfaceRequest, SaveServiceLocationsRequest, diff --git a/src-tauri/src/enterprise/mod.rs b/src-tauri/src/enterprise/mod.rs index cc227330a..e5b0dc05c 100644 --- a/src-tauri/src/enterprise/mod.rs +++ b/src-tauri/src/enterprise/mod.rs @@ -1,5 +1,4 @@ -pub use defguard_client_posture::inspector; -pub use defguard_client_posture::posture; +pub use defguard_client_posture::{inspector, posture}; pub use defguard_client_provisioning::{try_get_provisioning_config, ProvisioningConfig}; pub mod periodic; pub mod provisioning; diff --git a/src-tauri/src/enterprise/provisioning/mod.rs b/src-tauri/src/enterprise/provisioning/mod.rs index 698e3876d..6e2f76b8e 100644 --- a/src-tauri/src/enterprise/provisioning/mod.rs +++ b/src-tauri/src/enterprise/provisioning/mod.rs @@ -1,9 +1,7 @@ +use defguard_client_core::database::{models::instance::Instance, DB_POOL}; pub use defguard_client_provisioning::{try_get_provisioning_config, ProvisioningConfig}; - use tauri::{AppHandle, Manager}; -use defguard_client_core::database::{models::instance::Instance, DB_POOL}; - /// Checks if the client has already been initialized /// and tries to load provisioning config from file if necessary pub async fn handle_client_initialization(app_handle: &AppHandle) -> Option { diff --git a/src-tauri/src/enterprise/service_locations/mod.rs b/src-tauri/src/enterprise/service_locations/mod.rs index 23b60ff98..b67d780e4 100644 --- a/src-tauri/src/enterprise/service_locations/mod.rs +++ b/src-tauri/src/enterprise/service_locations/mod.rs @@ -1,7 +1,6 @@ +#[cfg(windows)] +pub use defguard_client_service_locations::windows; pub use defguard_client_service_locations::{ to_service_location, ServiceLocationData, ServiceLocationError, ServiceLocationManager, SingleServiceLocationData, }; - -#[cfg(windows)] -pub use defguard_client_service_locations::windows; diff --git a/src-tauri/src/events.rs b/src-tauri/src/events.rs index 1ed7fe60d..be4a2874f 100644 --- a/src-tauri/src/events.rs +++ b/src-tauri/src/events.rs @@ -1,3 +1,4 @@ +pub use defguard_client_core::events::EventKey; use serde::Serialize; use tauri::{AppHandle, Emitter, Manager, Url}; use tauri_plugin_notification::NotificationExt; @@ -7,8 +8,6 @@ use crate::{ ConnectionType, }; -pub use defguard_client_core::events::EventKey; - /// Used as payload for [`DEAD_CONNECTION_DROPPED`] event #[derive(Clone, Serialize)] pub struct DeadConnDroppedOut { diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 335ad4b5c..54d63f0f8 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -14,6 +14,8 @@ pub mod tray; pub mod utils; pub mod window_manager; +#[cfg(unix)] +pub use defguard_client_core::set_perms; pub use defguard_client_core::{ app_config, app_data_dir, @@ -41,9 +43,6 @@ pub use defguard_client_core::{ DEFAULT_ROUTE_IPV6, }; -#[cfg(unix)] -pub use defguard_client_core::set_perms; - pub const VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), "-", env!("VERGEN_GIT_SHA")); pub const PKG_VERSION: &str = env!("CARGO_PKG_VERSION"); pub use defguard_client_common::{check_version_flag, version_string}; diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index fb8599271..e15a2b37c 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -1,24 +1,21 @@ +use defguard_client_core::connection::active_connections::{ + get_connection_id_by_type, ACTIVE_CONNECTIONS, +}; use tauri::{ image::Image, menu::{Menu, MenuBuilder, MenuEvent, MenuItem, SubmenuBuilder}, path::BaseDirectory, - tray::TrayIconBuilder, + tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, AppHandle, Emitter, Manager, Runtime, }; -use defguard_client_core::connection::active_connections::{ - get_connection_id_by_type, ACTIVE_CONNECTIONS, -}; -use tauri::tray::{MouseButton, MouseButtonState, TrayIconEvent}; - -use crate::window_manager::WindowManager; use crate::{ appstate::AppState, commands::{all_instances, all_locations, connect, disconnect}, database::{models::location::Location, DB_POOL}, error::Error, events::EventKey, - window_manager::{show_tray_window, COMPACT_WINDOW_ID, FULL_VIEW_WINDOW_ID}, + window_manager::{show_tray_window, WindowManager, COMPACT_WINDOW_ID, FULL_VIEW_WINDOW_ID}, ConnectionType, }; diff --git a/src-tauri/src/window_manager/windows.rs b/src-tauri/src/window_manager/windows.rs index 7e8157775..d62264cfc 100644 --- a/src-tauri/src/window_manager/windows.rs +++ b/src-tauri/src/window_manager/windows.rs @@ -1,11 +1,10 @@ -use std::ffi::OsString; -use std::os::windows::ffi::OsStringExt; +use std::{ffi::OsString, os::windows::ffi::OsStringExt}; -use windows::Win32::Foundation::{LPARAM, RECT}; -use windows::Win32::Graphics::Gdi::{ - EnumDisplayMonitors, GetMonitorInfoW, HDC, HMONITOR, MONITORINFOEXW, +use windows::Win32::{ + Foundation::{LPARAM, RECT}, + Graphics::Gdi::{EnumDisplayMonitors, GetMonitorInfoW, HDC, HMONITOR, MONITORINFOEXW}, + UI::HiDpi::{GetDpiForMonitor, MDT_EFFECTIVE_DPI}, }; -use windows::Win32::UI::HiDpi::{GetDpiForMonitor, MDT_EFFECTIVE_DPI}; use crate::window_manager::{ WindowManager, COMPACT_WINDOW_HEIGHT, COMPACT_WINDOW_ID, COMPACT_WINDOW_WIDTH, diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 92a4a8c10..eeaae2111 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -56,6 +56,8 @@ "linux": { "deb": { "files": { + "/usr/bin/defguard-cli": "target/release/defguard-cli", + "/usr/bin/dg": "target/release/dg", "/usr/sbin/defguard-service": "target/release/defguard-service", "/usr/lib/systemd/system/defguard-service.service": "../resources-linux/defguard-service.service", "../control/rules": "../resources-linux/rules", @@ -69,6 +71,8 @@ }, "rpm": { "files": { + "/usr/bin/defguard-cli": "target/release/defguard-cli", + "/usr/bin/dg": "target/release/dg", "/usr/sbin/defguard-service": "target/release/defguard-service", "/lib/systemd/system/defguard-service.service": "../resources-linux/defguard-service.service" }, From 484fccec3d7eeb6fef833546d8ea65fb13f20e91 Mon Sep 17 00:00:00 2001 From: Aleksander <170264518+t-aleksander@users.noreply.github.com> Date: Tue, 16 Jun 2026 14:13:20 +0200 Subject: [PATCH 055/155] Optional summary field (#969) * summary * move date --- new-ui/src/pages/full/UpdatePage/UpdatePage.tsx | 6 +----- new-ui/src/shared/rust-api/types.ts | 1 + src-tauri/src/commands.rs | 1 + 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/new-ui/src/pages/full/UpdatePage/UpdatePage.tsx b/new-ui/src/pages/full/UpdatePage/UpdatePage.tsx index cf0fb8100..40c4b6ae1 100644 --- a/new-ui/src/pages/full/UpdatePage/UpdatePage.tsx +++ b/new-ui/src/pages/full/UpdatePage/UpdatePage.tsx @@ -20,11 +20,7 @@ const UpdateAvailable = ({ info }: { info: NewAppVersionInfo }) => ( <>

    New {info.version} version is available.

    -

    - We're preparing a new version of the desktop VPN client with a focus on performance, - stability, and everyday usability. These improvements are based on user feedback and - internal testing to make your connection faster, safer, and easier to manage. -

    + {isPresent(info.summary) &&

    {info.summary}

    }
    + + + ); +}; diff --git a/new-ui/src/pages/full/AddTunnelPage/styles.scss b/new-ui/src/pages/full/AddTunnelPage/styles.scss new file mode 100644 index 000000000..1ef9f59b9 --- /dev/null +++ b/new-ui/src/pages/full/AddTunnelPage/styles.scss @@ -0,0 +1,17 @@ +#add-tunnel-page { + .contents { + display: flex; + flex-flow: column; + row-gap: 1ch; + padding-bottom: var(--spacing-3xl); + + .page-description { + font: var(--t-body-sm-400); + color: var(--fg-white-70); + } + } + + .controls { + margin-top: auto; + } +} diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/ConnectModalMfaSettings.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/ConnectModalMfaSettings.tsx index 63c35a213..39bfe37d5 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/ConnectModalMfaSettings.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/ConnectModalMfaSettings.tsx @@ -1,3 +1,4 @@ +/** biome-ignore-all lint/style/noNonNullAssertion: temp */ import './style.scss'; import { useMutation } from '@tanstack/react-query'; import { Fragment, useMemo, useState } from 'react'; @@ -19,6 +20,7 @@ import { type MfaMethodValue, } from '../../../../../../../shared/rust-api/types'; import { ThemeSpacing } from '../../../../../../../shared/types'; +import { decideLocationMfaMethod } from '../../../../../../../shared/utils/decideLocationMfaMethod'; import { ConnectModalView } from '../../hooks/types'; import { useConnectModal } from '../../hooks/useConnectModal'; @@ -37,9 +39,8 @@ export const ConnectModalMfaSettings = () => { const locationDefaultMfaMethod = location?.mfa_method ?? MfaMethod.Totp; const [selectedMethod, setSelectedMethod] = useState( - location - ? (locationMfaPreference[String(location.id)] ?? MfaMethod.Totp) - : MfaMethod.Totp, + decideLocationMfaMethod(location!, locationMfaPreference[String(location!.id)]) ?? + MfaMethod.Totp, ); const [setAsDefault, setSetAsDefault] = useState(true); diff --git a/new-ui/src/pages/full/TunnelWizardPage/TunnelWizardPage.tsx b/new-ui/src/pages/full/TunnelWizardPage/TunnelWizardPage.tsx new file mode 100644 index 000000000..a3f2cc278 --- /dev/null +++ b/new-ui/src/pages/full/TunnelWizardPage/TunnelWizardPage.tsx @@ -0,0 +1,61 @@ +import type { ReactNode } from 'react'; +import type { WizardPageStep } from '../../../shared/components/wizard/types'; +import { WizardPage } from '../../../shared/components/wizard/WizardPage/WizardPage'; +import { useTunnelWizardStore } from './hooks/useTunnelWizardStore'; +import { AdvancedSettingsStep } from './steps/AdvancedSettingsStep/AdvancedSettingsStep'; +import { FinishStep } from './steps/FinishStep/FinishStep'; +import { GeneralInformationStep } from './steps/GeneralInformationStep/GeneralInformationStep'; +import { KeysStep } from './steps/KeysStep/KeysStep'; +import { VpnServerStep } from './steps/VpnServerStep/VpnServerStep'; +import { TunnelWizardStep, type TunnelWizardStepValue } from './types'; + +const stepComponents: Record = { + [TunnelWizardStep.GeneralInformation]: , + [TunnelWizardStep.Keys]: , + [TunnelWizardStep.VpnServer]: , + [TunnelWizardStep.AdvancedSettings]: , + [TunnelWizardStep.Finish]: , +}; + +export const TunnelWizardPage = () => { + const { activeStep } = useTunnelWizardStore(); + + const steps: Record = { + [TunnelWizardStep.GeneralInformation]: { + id: TunnelWizardStep.GeneralInformation, + order: 1, + label: 'General Information', + }, + [TunnelWizardStep.Keys]: { + id: TunnelWizardStep.Keys, + order: 2, + label: 'Keys', + }, + [TunnelWizardStep.VpnServer]: { + id: TunnelWizardStep.VpnServer, + order: 3, + label: 'VPN Server', + }, + [TunnelWizardStep.AdvancedSettings]: { + id: TunnelWizardStep.AdvancedSettings, + order: 4, + label: 'Advanced Settings', + }, + [TunnelWizardStep.Finish]: { + id: TunnelWizardStep.Finish, + order: 5, + label: 'Finish', + }, + }; + + return ( + + {stepComponents[activeStep]} + + ); +}; diff --git a/new-ui/src/pages/full/TunnelWizardPage/hooks/useTunnelWizardStore.tsx b/new-ui/src/pages/full/TunnelWizardPage/hooks/useTunnelWizardStore.tsx new file mode 100644 index 000000000..6fd26bd03 --- /dev/null +++ b/new-ui/src/pages/full/TunnelWizardPage/hooks/useTunnelWizardStore.tsx @@ -0,0 +1,37 @@ +import { create } from 'zustand'; +import { TunnelWizardStep, type TunnelWizardStepValue } from '../types'; + +type StoreValues = { + activeStep: TunnelWizardStepValue; +}; + +const defaults: StoreValues = { + activeStep: TunnelWizardStep.GeneralInformation, +}; + +const STEPS: TunnelWizardStepValue[] = [ + TunnelWizardStep.GeneralInformation, + TunnelWizardStep.Keys, + TunnelWizardStep.VpnServer, + TunnelWizardStep.AdvancedSettings, + TunnelWizardStep.Finish, +]; + +interface Store extends StoreValues { + next: () => void; + back: () => void; + reset: () => void; +} + +export const useTunnelWizardStore = create()((set, get) => ({ + ...defaults, + next: () => { + const idx = STEPS.indexOf(get().activeStep); + if (idx < STEPS.length - 1) set({ activeStep: STEPS[idx + 1] }); + }, + back: () => { + const idx = STEPS.indexOf(get().activeStep); + if (idx > 0) set({ activeStep: STEPS[idx - 1] }); + }, + reset: () => set(defaults), +})); diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/AdvancedSettingsStep/AdvancedSettingsStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/AdvancedSettingsStep/AdvancedSettingsStep.tsx new file mode 100644 index 000000000..5ade7c89b --- /dev/null +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/AdvancedSettingsStep/AdvancedSettingsStep.tsx @@ -0,0 +1 @@ +export const AdvancedSettingsStep = () =>
    Advanced Settings
    ; diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/FinishStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/FinishStep.tsx new file mode 100644 index 000000000..ae8ed27e8 --- /dev/null +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/FinishStep.tsx @@ -0,0 +1 @@ +export const FinishStep = () =>
    Finish
    ; diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx new file mode 100644 index 000000000..367887bb5 --- /dev/null +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx @@ -0,0 +1 @@ +export const GeneralInformationStep = () =>
    General Information
    ; diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/KeysStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/KeysStep.tsx new file mode 100644 index 000000000..d3298b2b5 --- /dev/null +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/KeysStep.tsx @@ -0,0 +1 @@ +export const KeysStep = () =>
    Keys
    ; diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/VpnServerStep/VpnServerStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/VpnServerStep/VpnServerStep.tsx new file mode 100644 index 000000000..603fe379c --- /dev/null +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/VpnServerStep/VpnServerStep.tsx @@ -0,0 +1 @@ +export const VpnServerStep = () =>
    VPN Server
    ; diff --git a/new-ui/src/pages/full/TunnelWizardPage/types.ts b/new-ui/src/pages/full/TunnelWizardPage/types.ts new file mode 100644 index 000000000..15f813138 --- /dev/null +++ b/new-ui/src/pages/full/TunnelWizardPage/types.ts @@ -0,0 +1,10 @@ +export const TunnelWizardStep = { + GeneralInformation: 'general-information', + Keys: 'keys', + VpnServer: 'vpn-server', + AdvancedSettings: 'advanced-settings', + Finish: 'finish', +} as const; + +export type TunnelWizardStepValue = + (typeof TunnelWizardStep)[keyof typeof TunnelWizardStep]; diff --git a/new-ui/src/routeTree.gen.ts b/new-ui/src/routeTree.gen.ts index 0f2cbf7aa..7bbcb7b17 100644 --- a/new-ui/src/routeTree.gen.ts +++ b/new-ui/src/routeTree.gen.ts @@ -15,6 +15,7 @@ import { Route as IndexRouteImport } from './routes/index' import { Route as PlaygroundIndexRouteImport } from './routes/playground/index' import { Route as FullIndexRouteImport } from './routes/full/index' import { Route as CompactIndexRouteImport } from './routes/compact/index' +import { Route as FullTunnelWizardRouteImport } from './routes/full/tunnel-wizard' import { Route as FullSessionTimeoutRouteImport } from './routes/full/session-timeout' import { Route as FullEnrollmentRouteImport } from './routes/full/enrollment' import { Route as FullDefaultRouteImport } from './routes/full/_default' @@ -24,6 +25,7 @@ import { Route as FullDefaultSettingsRouteImport } from './routes/full/_default/ import { Route as FullDefaultOverviewRouteImport } from './routes/full/_default/overview' import { Route as FullDefaultLogRouteImport } from './routes/full/_default/log' import { Route as FullDefaultAddIndexRouteImport } from './routes/full/_default/add/index' +import { Route as FullDefaultAddTunnelRouteImport } from './routes/full/_default/add/tunnel' import { Route as FullDefaultAddInstanceRouteImport } from './routes/full/_default/add/instance' const FullRoute = FullRouteImport.update({ @@ -56,6 +58,11 @@ const CompactIndexRoute = CompactIndexRouteImport.update({ path: '/compact/', getParentRoute: () => rootRouteImport, } as any) +const FullTunnelWizardRoute = FullTunnelWizardRouteImport.update({ + id: '/tunnel-wizard', + path: '/tunnel-wizard', + getParentRoute: () => FullRoute, +} as any) const FullSessionTimeoutRoute = FullSessionTimeoutRouteImport.update({ id: '/session-timeout', path: '/session-timeout', @@ -100,6 +107,11 @@ const FullDefaultAddIndexRoute = FullDefaultAddIndexRouteImport.update({ path: '/add/', getParentRoute: () => FullDefaultRoute, } as any) +const FullDefaultAddTunnelRoute = FullDefaultAddTunnelRouteImport.update({ + id: '/add/tunnel', + path: '/add/tunnel', + getParentRoute: () => FullDefaultRoute, +} as any) const FullDefaultAddInstanceRoute = FullDefaultAddInstanceRouteImport.update({ id: '/add/instance', path: '/add/instance', @@ -112,6 +124,7 @@ export interface FileRoutesByFullPath { '/full': typeof FullRouteWithChildren '/full/enrollment': typeof FullEnrollmentRoute '/full/session-timeout': typeof FullSessionTimeoutRoute + '/full/tunnel-wizard': typeof FullTunnelWizardRoute '/compact/': typeof CompactIndexRoute '/full/': typeof FullIndexRoute '/playground/': typeof PlaygroundIndexRoute @@ -121,6 +134,7 @@ export interface FileRoutesByFullPath { '/full/support': typeof FullDefaultSupportRoute '/full/update': typeof FullDefaultUpdateRoute '/full/add/instance': typeof FullDefaultAddInstanceRoute + '/full/add/tunnel': typeof FullDefaultAddTunnelRoute '/full/add/': typeof FullDefaultAddIndexRoute } export interface FileRoutesByTo { @@ -129,6 +143,7 @@ export interface FileRoutesByTo { '/full': typeof FullIndexRoute '/full/enrollment': typeof FullEnrollmentRoute '/full/session-timeout': typeof FullSessionTimeoutRoute + '/full/tunnel-wizard': typeof FullTunnelWizardRoute '/compact': typeof CompactIndexRoute '/playground': typeof PlaygroundIndexRoute '/full/log': typeof FullDefaultLogRoute @@ -137,6 +152,7 @@ export interface FileRoutesByTo { '/full/support': typeof FullDefaultSupportRoute '/full/update': typeof FullDefaultUpdateRoute '/full/add/instance': typeof FullDefaultAddInstanceRoute + '/full/add/tunnel': typeof FullDefaultAddTunnelRoute '/full/add': typeof FullDefaultAddIndexRoute } export interface FileRoutesById { @@ -147,6 +163,7 @@ export interface FileRoutesById { '/full/_default': typeof FullDefaultRouteWithChildren '/full/enrollment': typeof FullEnrollmentRoute '/full/session-timeout': typeof FullSessionTimeoutRoute + '/full/tunnel-wizard': typeof FullTunnelWizardRoute '/compact/': typeof CompactIndexRoute '/full/': typeof FullIndexRoute '/playground/': typeof PlaygroundIndexRoute @@ -156,6 +173,7 @@ export interface FileRoutesById { '/full/_default/support': typeof FullDefaultSupportRoute '/full/_default/update': typeof FullDefaultUpdateRoute '/full/_default/add/instance': typeof FullDefaultAddInstanceRoute + '/full/_default/add/tunnel': typeof FullDefaultAddTunnelRoute '/full/_default/add/': typeof FullDefaultAddIndexRoute } export interface FileRouteTypes { @@ -166,6 +184,7 @@ export interface FileRouteTypes { | '/full' | '/full/enrollment' | '/full/session-timeout' + | '/full/tunnel-wizard' | '/compact/' | '/full/' | '/playground/' @@ -175,6 +194,7 @@ export interface FileRouteTypes { | '/full/support' | '/full/update' | '/full/add/instance' + | '/full/add/tunnel' | '/full/add/' fileRoutesByTo: FileRoutesByTo to: @@ -183,6 +203,7 @@ export interface FileRouteTypes { | '/full' | '/full/enrollment' | '/full/session-timeout' + | '/full/tunnel-wizard' | '/compact' | '/playground' | '/full/log' @@ -191,6 +212,7 @@ export interface FileRouteTypes { | '/full/support' | '/full/update' | '/full/add/instance' + | '/full/add/tunnel' | '/full/add' id: | '__root__' @@ -200,6 +222,7 @@ export interface FileRouteTypes { | '/full/_default' | '/full/enrollment' | '/full/session-timeout' + | '/full/tunnel-wizard' | '/compact/' | '/full/' | '/playground/' @@ -209,6 +232,7 @@ export interface FileRouteTypes { | '/full/_default/support' | '/full/_default/update' | '/full/_default/add/instance' + | '/full/_default/add/tunnel' | '/full/_default/add/' fileRoutesById: FileRoutesById } @@ -264,6 +288,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof CompactIndexRouteImport parentRoute: typeof rootRouteImport } + '/full/tunnel-wizard': { + id: '/full/tunnel-wizard' + path: '/tunnel-wizard' + fullPath: '/full/tunnel-wizard' + preLoaderRoute: typeof FullTunnelWizardRouteImport + parentRoute: typeof FullRoute + } '/full/session-timeout': { id: '/full/session-timeout' path: '/session-timeout' @@ -327,6 +358,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof FullDefaultAddIndexRouteImport parentRoute: typeof FullDefaultRoute } + '/full/_default/add/tunnel': { + id: '/full/_default/add/tunnel' + path: '/add/tunnel' + fullPath: '/full/add/tunnel' + preLoaderRoute: typeof FullDefaultAddTunnelRouteImport + parentRoute: typeof FullDefaultRoute + } '/full/_default/add/instance': { id: '/full/_default/add/instance' path: '/add/instance' @@ -344,6 +382,7 @@ interface FullDefaultRouteChildren { FullDefaultSupportRoute: typeof FullDefaultSupportRoute FullDefaultUpdateRoute: typeof FullDefaultUpdateRoute FullDefaultAddInstanceRoute: typeof FullDefaultAddInstanceRoute + FullDefaultAddTunnelRoute: typeof FullDefaultAddTunnelRoute FullDefaultAddIndexRoute: typeof FullDefaultAddIndexRoute } @@ -354,6 +393,7 @@ const FullDefaultRouteChildren: FullDefaultRouteChildren = { FullDefaultSupportRoute: FullDefaultSupportRoute, FullDefaultUpdateRoute: FullDefaultUpdateRoute, FullDefaultAddInstanceRoute: FullDefaultAddInstanceRoute, + FullDefaultAddTunnelRoute: FullDefaultAddTunnelRoute, FullDefaultAddIndexRoute: FullDefaultAddIndexRoute, } @@ -365,6 +405,7 @@ interface FullRouteChildren { FullDefaultRoute: typeof FullDefaultRouteWithChildren FullEnrollmentRoute: typeof FullEnrollmentRoute FullSessionTimeoutRoute: typeof FullSessionTimeoutRoute + FullTunnelWizardRoute: typeof FullTunnelWizardRoute FullIndexRoute: typeof FullIndexRoute } @@ -372,6 +413,7 @@ const FullRouteChildren: FullRouteChildren = { FullDefaultRoute: FullDefaultRouteWithChildren, FullEnrollmentRoute: FullEnrollmentRoute, FullSessionTimeoutRoute: FullSessionTimeoutRoute, + FullTunnelWizardRoute: FullTunnelWizardRoute, FullIndexRoute: FullIndexRoute, } diff --git a/new-ui/src/routes/full/_default/add/tunnel.tsx b/new-ui/src/routes/full/_default/add/tunnel.tsx new file mode 100644 index 000000000..0950e243c --- /dev/null +++ b/new-ui/src/routes/full/_default/add/tunnel.tsx @@ -0,0 +1,6 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { AddTunnelPage } from '../../../../pages/full/AddTunnelPage/AddTunnelPage'; + +export const Route = createFileRoute('/full/_default/add/tunnel')({ + component: AddTunnelPage, +}); diff --git a/new-ui/src/routes/full/tunnel-wizard.tsx b/new-ui/src/routes/full/tunnel-wizard.tsx new file mode 100644 index 000000000..6a5e7f51e --- /dev/null +++ b/new-ui/src/routes/full/tunnel-wizard.tsx @@ -0,0 +1,6 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { TunnelWizardPage } from '../../pages/full/TunnelWizardPage/TunnelWizardPage'; + +export const Route = createFileRoute('/full/tunnel-wizard')({ + component: TunnelWizardPage, +}); diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/LocationCardMfaEdit.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/LocationCardMfaEdit.tsx index 6e47a71b2..13e934e1c 100644 --- a/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/LocationCardMfaEdit.tsx +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardMfaEdit/LocationCardMfaEdit.tsx @@ -2,7 +2,8 @@ import './style.scss'; import clsx from 'clsx'; import { useMemo } from 'react'; import { useAppData } from '../../../../providers/AppDataContext'; -import { type LocationInfo, MfaMethod } from '../../../../rust-api/types'; +import type { LocationInfo } from '../../../../rust-api/types'; +import { decideLocationMfaMethod } from '../../../../utils/decideLocationMfaMethod'; import { mfaToText } from '../../../../utils/mfa'; import { IconButton } from '../../../IconButton/IconButton'; import { IconButtonVariant } from '../../../IconButton/types'; @@ -15,12 +16,13 @@ interface Props { export const LocationCardMfaEdit = ({ location, onEdit, variant }: Props) => { const { locationMfaPreference } = useAppData(); + const mfaMethod = useMemo( - () => locationMfaPreference[String(location.id)] ?? MfaMethod.Totp, - [locationMfaPreference, location.id], + () => decideLocationMfaMethod(location, locationMfaPreference[String(location.id)]), + [locationMfaPreference, location], ); - if (location.location_mfa_mode === 'disabled') return null; + if (location.location_mfa_mode === 'disabled' || mfaMethod === null) return null; return (
    diff --git a/new-ui/src/shared/components/LocationCard/context/context.tsx b/new-ui/src/shared/components/LocationCard/context/context.tsx index a097fb913..1ae124b7d 100644 --- a/new-ui/src/shared/components/LocationCard/context/context.tsx +++ b/new-ui/src/shared/components/LocationCard/context/context.tsx @@ -2,6 +2,7 @@ import { createContext, type ReactNode, useCallback, useContext, useState } from import { useAppData } from '../../../providers/AppDataContext'; import type { InstanceInfo, LocationInfo } from '../../../rust-api/types'; import { MfaMethod } from '../../../rust-api/types'; +import { decideLocationMfaMethod } from '../../../utils/decideLocationMfaMethod'; import { LocationCardViews, type LocationCardViewsValue } from './types'; interface LocationCardContextValue { @@ -53,7 +54,11 @@ export const LocationCardProvider = ({ const { locationMfaPreference } = useAppData(); const startMfa = useCallback(() => { - const mfaMethod = locationMfaPreference[String(location.id)] ?? MfaMethod.Totp; + const mfaMethod = decideLocationMfaMethod( + location, + locationMfaPreference[String(location.id)], + ); + if (!mfaMethod) return; switch (mfaMethod) { case MfaMethod.Totp: @@ -69,7 +74,7 @@ export const LocationCardProvider = ({ setView(LocationCardViews.MfaMobile); break; } - }, [setView, location.id, locationMfaPreference]); + }, [setView, location.id, locationMfaPreference, location]); return ( { + switch (location.location_mfa_mode) { + case 'disabled': + return location.mfa_method ?? null; + case 'external': + return MfaMethod.Oidc; + case 'internal': + if (currentMethod === MfaMethod.Oidc || !currentMethod) + return location.mfa_method ?? null; + return currentMethod; + } +}; diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 919c12330..f8b1687e5 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -387,6 +387,16 @@ fn main() { let state = AppState::new(config, provisioning_config); app.manage(state); + match async_runtime::block_on(session_state::initialize_session_state()) { + Ok(initial_state) => { + let managed = app_handle.state::(); + if let Ok(mut guard) = managed.session_state.lock() { + *guard = initial_state; + }; + } + Err(e) => warn!("Failed to initialize session state from DB: {e}"), + } + // Pre-build both windows hidden so they can be shown/hidden without recreation. if let Err(e) = WindowManager::build_tray_window(app_handle) { warn!("Failed to pre-build tray window: {e}"); diff --git a/src-tauri/src/session_state.rs b/src-tauri/src/session_state.rs index 99d360e62..3866ce46a 100644 --- a/src-tauri/src/session_state.rs +++ b/src-tauri/src/session_state.rs @@ -9,7 +9,12 @@ use defguard_client_core::{ events::EventKey, }; -use crate::{appstate::AppState, commands::LocationInfo}; +use crate::{ + appstate::AppState, + commands::LocationInfo, + database::{models::location::Location, DB_POOL}, + error::Error, +}; #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] #[serde(tag = "kind", content = "data", rename_all = "lowercase")] @@ -25,6 +30,18 @@ pub struct SessionState { pub location_mfa_preference: HashMap, } +pub async fn initialize_session_state() -> Result { + let locations = Location::all(&*DB_POOL, false).await?; + let location_mfa_preference = locations + .into_iter() + .filter_map(|loc| loc.mfa_method.map(|method| (loc.id.to_string(), method))) + .collect(); + Ok(SessionState { + location_mfa_preference, + ..SessionState::default() + }) +} + #[tauri::command] pub fn get_session_state(app_state: State<'_, AppState>) -> Result { app_state From 34c70bfaafadca7b31064eb96253ff8c3f878b3e Mon Sep 17 00:00:00 2001 From: Maciek <19913370+wojcik91@users.noreply.github.com> Date: Thu, 18 Jun 2026 14:19:54 +0200 Subject: [PATCH 060/155] implement mobile auth for CLI (#974) * add new dependencies and qr_file option * add qr rendering helper * add initial mobile auth flow implementation * wire up mobile auth * refactor mfa flags validation * test mobile auth * wrap mobile-specific error * handle timeout error * avoid logging token * clarify errors * some cleanup * cleaning up some more stuff * increase timeout * verify type * add clearer messages pointing to the desktop client * skip some tests on windows & mac --- src-tauri/Cargo.lock | 491 ++++++++++++++++++ src-tauri/Cargo.toml | 4 + src-tauri/client-cli/Cargo.toml | 7 + src-tauri/client-cli/src/cli.rs | 5 + src-tauri/client-cli/src/commands/connect.rs | 28 +- src-tauri/client-cli/src/commands/instance.rs | 7 +- src-tauri/client-cli/src/commands/location.rs | 7 +- src-tauri/client-cli/src/commands/tunnel.rs | 7 +- src-tauri/client-cli/src/main.rs | 5 +- src-tauri/client-cli/src/mfa.rs | 386 ++++++++++++-- src-tauri/client-cli/src/mfa_qr.rs | 132 +++++ src-tauri/client-cli/src/state.rs | 2 +- src-tauri/client-cli/src/tests_proxy.rs | 215 +++++++- 13 files changed, 1244 insertions(+), 52 deletions(-) create mode 100644 src-tauri/client-cli/src/mfa_qr.rs diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 4b10f46bc..82c89a7d7 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -38,6 +38,24 @@ dependencies = [ "memchr", ] +[[package]] +name = "aligned" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685" +dependencies = [ + "as-slice", +] + +[[package]] +name = "aligned-vec" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" +dependencies = [ + "equator", +] + [[package]] name = "alloc-no-stdlib" version = "2.0.4" @@ -141,6 +159,12 @@ version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" + [[package]] name = "arboard" version = "3.6.1" @@ -162,12 +186,32 @@ dependencies = [ "x11rb", ] +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "as-slice" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" +dependencies = [ + "stable_deref_trait", +] + [[package]] name = "ashpd" version = "0.10.3" @@ -499,6 +543,49 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" +[[package]] +name = "av-scenechange" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394" +dependencies = [ + "aligned", + "anyhow", + "arg_enum_proc_macro", + "arrayvec", + "log", + "num-rational", + "num-traits", + "pastey", + "rayon", + "thiserror 2.0.18", + "v_frame", + "y4m", +] + +[[package]] +name = "av1-grain" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom 8.0.0", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7178fe5f7d460b13895ebb9dcb28a3a6216d2df2574a0806cb51b555d297f38" +dependencies = [ + "arrayvec", +] + [[package]] name = "aws-lc-rs" version = "1.17.0" @@ -606,6 +693,12 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +[[package]] +name = "bit_field" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" + [[package]] name = "bitflags" version = "1.3.2" @@ -621,6 +714,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "bitstream-io" +version = "4.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eff00be299a18769011411c9def0d827e8f2d7bf0c3dbf53633147a8867fd1f" +dependencies = [ + "no_std_io2", +] + [[package]] name = "bitvec" version = "1.0.1" @@ -736,6 +838,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "built" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c0e531d93d39c34eef561e929e8a7f86d77a5af08aac4f6d6e39976c51858e9" + [[package]] name = "bumpalo" version = "3.20.3" @@ -1028,6 +1136,12 @@ dependencies = [ "cc", ] +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + [[package]] name = "colorchoice" version = "1.0.5" @@ -1200,6 +1314,25 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-queue" version = "0.3.12" @@ -1381,6 +1514,12 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "data-encoding" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" + [[package]] name = "data-url" version = "0.3.2" @@ -1402,21 +1541,28 @@ dependencies = [ name = "defguard-cli" version = "2.1.0" dependencies = [ + "base64 0.22.1", "clap", "defguard-client-common", "defguard-client-core", "defguard-client-posture", "defguard-client-proto", + "futures-util", + "http", + "image", "owo-colors", + "qrcode", "reqwest 0.13.4", "secrecy", "serde", "serde_json", + "sha1", "sqlx", "tempfile", "thiserror 2.0.18", "tokio", "tokio-stream", + "tokio-tungstenite", "tonic", "tracing", "tracing-subscriber", @@ -2074,6 +2220,26 @@ dependencies = [ "regex", ] +[[package]] +name = "equator" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" +dependencies = [ + "equator-macro", +] + +[[package]] +name = "equator-macro" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -2145,6 +2311,21 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "exr" +version = "1.74.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" +dependencies = [ + "bit_field", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + [[package]] name = "fastrand" version = "2.4.1" @@ -2585,6 +2766,16 @@ dependencies = [ "wasip3", ] +[[package]] +name = "gif" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee8cfcc411d9adbbaba82fb72661cc1bcca13e8bba98b364e62b2dba8f960159" +dependencies = [ + "color_quant", + "weezl", +] + [[package]] name = "gio" version = "0.18.4" @@ -3195,12 +3386,38 @@ checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" dependencies = [ "bytemuck", "byteorder-lite", + "color_quant", + "exr", + "gif", + "image-webp", "moxcms", "num-traits", "png 0.18.1", + "qoi", + "ravif", + "rayon", + "rgb", "tiff", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" +dependencies = [ + "byteorder-lite", + "quick-error", ] +[[package]] +name = "imgref" +version = "1.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89194689a993ab15268672e99e7b0e19da2da3268ac682e8f02d29d4d1434cd7" + [[package]] name = "indexmap" version = "1.9.3" @@ -3242,6 +3459,17 @@ dependencies = [ "generic-array", ] +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "ip_network" version = "0.4.1" @@ -3511,6 +3739,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" +[[package]] +name = "lebe" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" + [[package]] name = "libappindicator" version = "0.9.0" @@ -3550,6 +3784,16 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "libfuzzer-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9fd2f41a1cba099f79a0b6b6c35656cf7c03351a7bae8ff0f28f25270f929d2" +dependencies = [ + "arbitrary", + "cc", +] + [[package]] name = "libgit2-sys" version = "0.18.5+1.9.4" @@ -3660,6 +3904,15 @@ dependencies = [ "value-bag", ] +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + [[package]] name = "lru-slab" version = "0.1.2" @@ -3704,6 +3957,16 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", +] + [[package]] name = "md-5" version = "0.10.6" @@ -3929,6 +4192,15 @@ dependencies = [ "memoffset", ] +[[package]] +name = "no_std_io2" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418abd1b6d34fbf6cae440dc874771b0525a604428704c76e48b29a5e67b8003" +dependencies = [ + "memchr", +] + [[package]] name = "nom" version = "7.1.3" @@ -3948,6 +4220,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + [[package]] name = "notify-rust" version = "4.17.0" @@ -3980,6 +4258,16 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + [[package]] name = "num-bigint-dig" version = "0.8.6" @@ -4002,6 +4290,17 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -4022,6 +4321,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -4882,6 +5192,25 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "profiling" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4488a4a36b9a4ba6b9334a32a39971f77c1436ec82c38707bce707699cc3bbcb" +dependencies = [ + "quote", + "syn 2.0.117", +] + [[package]] name = "prost" version = "0.14.4" @@ -4997,6 +5326,24 @@ version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "qrcode" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d68782463e408eb1e668cf6152704bd856c78c5b6417adaee3203d8f4c1fc9ec" +dependencies = [ + "image", +] + [[package]] name = "quick-error" version = "2.0.1" @@ -5163,12 +5510,82 @@ dependencies = [ "getrandom 0.3.4", ] +[[package]] +name = "rav1e" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b" +dependencies = [ + "aligned-vec", + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av-scenechange", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "paste", + "profiling", + "rand 0.9.4", + "rand_chacha 0.9.0", + "simd_helpers", + "thiserror 2.0.18", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e52310197d971b0f5be7fe6b57530dcd27beb35c1b013f29d66c1ad73fbbcc45" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", +] + [[package]] name = "raw-window-handle" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" +[[package]] +name = "rayon" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "redox_syscall" version = "0.5.18" @@ -5385,6 +5802,12 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "rgb" +version = "0.8.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4" + [[package]] name = "ring" version = "0.17.14" @@ -5997,6 +6420,15 @@ dependencies = [ "simdutf8", ] +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] + [[package]] name = "simdutf8" version = "0.1.5" @@ -7288,6 +7720,20 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" +dependencies = [ + "futures-util", + "log", + "native-tls", + "tokio", + "tokio-native-tls", + "tungstenite", +] + [[package]] name = "tokio-util" version = "0.7.18" @@ -7668,6 +8114,25 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "native-tls", + "rand 0.8.6", + "sha1", + "thiserror 1.0.69", + "utf-8", +] + [[package]] name = "typeid" version = "1.0.3" @@ -7987,6 +8452,17 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "v_frame" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + [[package]] name = "valuable" version = "0.1.1" @@ -9374,6 +9850,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "y4m" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448" + [[package]] name = "yoke" version = "0.8.3" @@ -9564,6 +10046,15 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + [[package]] name = "zune-jpeg" version = "0.5.15" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 73a82f56a..59a1bb2a4 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -32,7 +32,11 @@ tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] } webbrowser = "1.0" tempfile = "3" +futures-util = "0.3" http = "1" +image = "0.25" +qrcode = { version = "0.14", features = ["image"] } +tokio-tungstenite = { version = "0.24", features = ["native-tls"] } vergen-git2 = { version = "9.1", features = ["build"] } [workspace.package] diff --git a/src-tauri/client-cli/Cargo.toml b/src-tauri/client-cli/Cargo.toml index 8350ebfbc..e5f33f7cd 100644 --- a/src-tauri/client-cli/Cargo.toml +++ b/src-tauri/client-cli/Cargo.toml @@ -19,6 +19,7 @@ common = { package = "defguard-client-common", path = "../common" } defguard_core = { package = "defguard-client-core", path = "../core" } defguard_client_posture = { package = "defguard-client-posture", path = "../enterprise/posture" } defguard_client_proto = { package = "defguard-client-proto", path = "../client-proto" } +base64.workspace = true reqwest.workspace = true secrecy.workspace = true serde = { workspace = true, features = ["derive"] } @@ -29,12 +30,18 @@ tokio.workspace = true tracing.workspace = true tracing-subscriber = { workspace = true, features = ["env-filter"] } webbrowser.workspace = true +http.workspace = true +qrcode.workspace = true +image.workspace = true +tokio-tungstenite.workspace = true +futures-util.workspace = true # Dummy feature to let tauri build the release. [features] custom-protocol = [] [dev-dependencies] +sha1 = "0.10" tempfile.workspace = true tokio-stream = "0.1" tonic.workspace = true diff --git a/src-tauri/client-cli/src/cli.rs b/src-tauri/client-cli/src/cli.rs index b6f3ed2e2..0a52ab8a4 100644 --- a/src-tauri/client-cli/src/cli.rs +++ b/src-tauri/client-cli/src/cli.rs @@ -61,6 +61,11 @@ pub enum Commands { #[arg(long)] mfa_method: Option, + /// Save the mobile-approve MFA QR code as a PNG image to this path. + /// Required when stderr is not a terminal. + #[arg(long)] + qr_file: Option, + /// Override route-all-traffic for this connection only. #[arg(long, overrides_with = "predefined_traffic")] all_traffic: bool, diff --git a/src-tauri/client-cli/src/commands/connect.rs b/src-tauri/client-cli/src/commands/connect.rs index 118a36951..d35fb9c7a 100644 --- a/src-tauri/client-cli/src/commands/connect.rs +++ b/src-tauri/client-cli/src/commands/connect.rs @@ -1,4 +1,4 @@ -use std::io::{stdin, IsTerminal}; +use std::io::{stderr, stdin, IsTerminal}; use defguard_client_posture::{authorize_posture_session, get_posture_data}; use defguard_client_proto::defguard::client_types::MfaMethod; @@ -30,6 +30,7 @@ pub async fn handle( code: Option<&str>, code_command: Option<&str>, mfa_method: Option<&str>, + qr_file: Option<&str>, all_traffic: bool, predefined_traffic: bool, json: bool, @@ -81,8 +82,10 @@ pub async fn handle( ResolvedTarget::Location(location) => { if location.mfa_enabled() { // Resolve the effective MFA method. - // Also rejects --code / --code-command when the method is OIDC. - let method = mfa::resolve_method(location, mfa_method, code, code_command)?; + let method = mfa::resolve_method(location, mfa_method)?; + + // Reject flags that are incompatible with the resolved method. + mfa::validate_mfa_flags(method, &location.name, code, code_command, qr_file)?; let instance = Instance::find_by_id(&state.pool, location.instance_id) .await @@ -106,6 +109,25 @@ pub async fn handle( let psk = if method == MfaMethod::Oidc { mfa::authorize_oidc(location, &instance, posture_data, &state.pool, json) .await? + } else if method == MfaMethod::MobileApprove { + // Fail-fast: if neither stderr is a TTY nor --qr-file is set, + // the user cannot scan the QR. Do not call /start. + if !stderr().is_terminal() && qr_file.is_none() { + return Err(CliError::InvalidInput( + "No QR display available (stderr is not a TTY). \ + Use --qr-file to save the QR as a PNG image." + .into(), + )); + } + mfa::authorize_mobile_approve( + location, + &instance, + posture_data, + qr_file, + &state.pool, + json, + ) + .await? } else { // Determine the MFA code source from CLI flags. let code_source = code diff --git a/src-tauri/client-cli/src/commands/instance.rs b/src-tauri/client-cli/src/commands/instance.rs index b816badf0..7f0af4650 100644 --- a/src-tauri/client-cli/src/commands/instance.rs +++ b/src-tauri/client-cli/src/commands/instance.rs @@ -29,7 +29,7 @@ pub struct InstanceListResult { impl CommandOutput for InstanceListResult { fn human(&self) -> String { if self.instances.is_empty() { - "No instances configured.".to_string() + "No instances configured. Use the desktop app to enroll first.".to_string() } else { format_instance_list_table(&self.instances) } @@ -149,7 +149,10 @@ mod tests { let result = InstanceListResult { instances: Vec::new(), }; - assert_eq!(result.human(), "No instances configured."); + assert_eq!( + result.human(), + "No instances configured. Use the desktop app to enroll first." + ); } #[test] diff --git a/src-tauri/client-cli/src/commands/location.rs b/src-tauri/client-cli/src/commands/location.rs index 63e922afb..174b212a4 100644 --- a/src-tauri/client-cli/src/commands/location.rs +++ b/src-tauri/client-cli/src/commands/location.rs @@ -139,7 +139,7 @@ pub struct LocationListResult { impl CommandOutput for LocationListResult { fn human(&self) -> String { if self.locations.is_empty() { - "No locations configured.".to_string() + "No locations configured. Use the desktop app to enroll an instance first.".to_string() } else { format_location_list_table(&self.locations, &self.instance_names) } @@ -328,7 +328,10 @@ mod tests { locations: Vec::new(), instance_names: HashMap::new(), }; - assert_eq!(result.human(), "No locations configured."); + assert_eq!( + result.human(), + "No locations configured. Use the desktop app to enroll an instance first." + ); } #[test] diff --git a/src-tauri/client-cli/src/commands/tunnel.rs b/src-tauri/client-cli/src/commands/tunnel.rs index 5e0ee2049..71eda162c 100644 --- a/src-tauri/client-cli/src/commands/tunnel.rs +++ b/src-tauri/client-cli/src/commands/tunnel.rs @@ -41,7 +41,7 @@ pub struct TunnelListResult { impl CommandOutput for TunnelListResult { fn human(&self) -> String { if self.tunnels.is_empty() { - "No tunnels configured.".to_string() + "No tunnels configured. Import tunnels via the desktop app.".to_string() } else { format_tunnel_list_table(&self.tunnels) } @@ -199,7 +199,10 @@ mod tests { let result = TunnelListResult { tunnels: Vec::new(), }; - assert_eq!(result.human(), "No tunnels configured."); + assert_eq!( + result.human(), + "No tunnels configured. Import tunnels via the desktop app." + ); } #[test] diff --git a/src-tauri/client-cli/src/main.rs b/src-tauri/client-cli/src/main.rs index 022afe892..ba6f5fa47 100644 --- a/src-tauri/client-cli/src/main.rs +++ b/src-tauri/client-cli/src/main.rs @@ -10,10 +10,11 @@ mod exit; mod logging; mod mfa; mod mfa_code; +mod mfa_qr; mod output; mod resolve; mod state; -#[cfg(test)] +#[cfg(all(test, target_os = "linux"))] mod tests_daemon; #[cfg(test)] mod tests_proxy; @@ -62,6 +63,7 @@ async fn main() -> ExitCode { code, code_command, mfa_method, + qr_file, all_traffic, predefined_traffic, } => output::finish( @@ -74,6 +76,7 @@ async fn main() -> ExitCode { code.as_deref(), code_command.as_deref(), mfa_method.as_deref(), + qr_file.as_deref(), all_traffic, predefined_traffic, cli.json, diff --git a/src-tauri/client-cli/src/mfa.rs b/src-tauri/client-cli/src/mfa.rs index 06cf1c26d..d279e6341 100644 --- a/src-tauri/client-cli/src/mfa.rs +++ b/src-tauri/client-cli/src/mfa.rs @@ -1,8 +1,6 @@ //! Connect-time VPN MFA over `core::proxy` (HTTP). //! -//! Flow: `start` → `obtain_code` → `finish` → preshared_key. -//! Supports TOTP, email, and OIDC methods. Mobile-approve is -//! not yet supported by the CLI. +//! Supports TOTP, email, OIDC, and mobile-approve methods. use std::time::Duration; @@ -25,36 +23,35 @@ use defguard_core::{ }, proxy::post_with_headers, }; +use futures_util::StreamExt; use reqwest::{StatusCode, Url}; use secrecy::{ExposeSecret, SecretString}; use serde::Deserialize; use tokio::{ + net::TcpStream, select, signal::ctrl_c, time::{sleep, Instant}, }; +use tokio_tungstenite::{connect_async, tungstenite::Message, MaybeTlsStream, WebSocketStream}; use tracing::{debug, info, warn}; use crate::{ mfa_code::{obtain_code, CodeSource, MfaContext}, + mfa_qr, state::CliError, }; -/// Resolve the effective MFA method for a location and validate CLI flags -/// that are incompatible with certain methods. +/// Resolve the effective MFA method for a location. /// /// When `method_override` is `Some`, parses it into [`MfaMethod`]; otherwise /// delegates to [`infer_method`] which respects the location's /// [`LocationMfaMode`]. /// -/// Rejects: -/// * `--mfa-method oidc` on Internal-mode locations -/// * `--code` / `--code-command` when the resolved method is OIDC +/// Rejects `--mfa-method oidc` on Internal-mode locations. pub(crate) fn resolve_method( location: &Location, method_override: Option<&str>, - code: Option<&str>, - code_command: Option<&str>, ) -> Result { let method = if let Some(raw) = method_override { let method = parse_method(raw)?; @@ -71,15 +68,36 @@ pub(crate) fn resolve_method( infer_method(location) }; - // OIDC MFA does not use codes; --code / --code-command are incompatible. - if method == MfaMethod::Oidc && (code.is_some() || code_command.is_some()) { + Ok(method) +} + +/// Validate CLI flags against the resolved MFA method. +/// +/// * `--code` / `--code-command` are incompatible with OIDC and mobile-approve +/// (neither method accepts textual codes). +/// * `--qr-file` is only valid for mobile-approve MFA. +pub(crate) fn validate_mfa_flags( + method: MfaMethod, + location_name: &str, + code: Option<&str>, + code_command: Option<&str>, + qr_file: Option<&str>, +) -> Result<(), CliError> { + if matches!(method, MfaMethod::Oidc | MfaMethod::MobileApprove) + && (code.is_some() || code_command.is_some()) + { return Err(CliError::InvalidInput(format!( - "location '{}' cannot use --code / --code-command with external (OIDC) MFA", - location.name + "location '{location_name}' cannot use --code / --code-command with {method:?} MFA", ))); } - Ok(method) + if method != MfaMethod::MobileApprove && qr_file.is_some() { + return Err(CliError::InvalidInput( + "--qr-file is only valid with mobile-approve MFA".into(), + )); + } + + Ok(()) } /// Run the VPN MFA handshake for a location. @@ -108,11 +126,17 @@ pub async fn authorize( // accidentally invoke authorize() with OIDC, this catch-all is a // defense-in-depth barrier that emits a clear error. match method { - MfaMethod::Biometric | MfaMethod::MobileApprove => { + MfaMethod::Biometric => { return Err(CliError::MfaFailed(format!( - "MFA method {method:?} is not yet supported by the CLI. Use the desktop client." + "MFA method {method:?} is not supported by the CLI. Use the mobile client." ))); } + MfaMethod::MobileApprove => { + return Err(CliError::Other( + "Internal error: MobileApprove MFA must use authorize_mobile_approve, not authorize" + .into(), + )); + } MfaMethod::Oidc => { return Err(CliError::Other( "Internal error: OIDC MFA must use authorize_oidc, not authorize".into(), @@ -131,13 +155,13 @@ pub async fn authorize( )) })?; - // Parse the proxy base URL once and reuse it for both MFA requests. - let proxy_base = Url::parse(&instance.proxy_url) + // Parse the proxy URL once and reuse it for both MFA requests. + let proxy_url = Url::parse(&instance.proxy_url) .map_err(|e| CliError::Other(format!("Invalid proxy URL: {e}")))?; // The one-time MFA code and the returned preshared key are sensitive; warn (but do // not block) if the proxy is not using HTTPS, since they would travel in cleartext. - check_proxy_scheme(&proxy_base, &instance.proxy_url); + check_proxy_scheme(&proxy_url); // Step 1: Start the MFA session. let start_req = ClientMfaStartRequest { @@ -147,7 +171,7 @@ pub async fn authorize( posture_data, }; - let start_url = proxy_base + let start_url = proxy_url .join("api/v1/client-mfa/start") .map_err(|e| CliError::Other(format!("Failed to build MFA start URL: {e}")))?; @@ -182,7 +206,7 @@ pub async fn authorize( auth_pub_key: None, }; - let finish_url = proxy_base + let finish_url = proxy_url .join("api/v1/client-mfa/finish") .map_err(|e| CliError::Other(format!("Failed to build MFA finish URL: {e}")))?; @@ -270,9 +294,12 @@ fn infer_method(location: &Location) -> MfaMethod { /// /// The one-time MFA code and the returned preshared key are sensitive and would /// travel in cleartext over plain HTTP. -fn check_proxy_scheme(proxy_base: &Url, proxy_url: &str) { +fn check_proxy_scheme(proxy_base: &Url) { if proxy_base.scheme() != "https" { - warn!("Proxy URL '{proxy_url}' is not HTTPS; secrets will be sent in cleartext."); + warn!( + "Proxy URL '{}' is not HTTPS; secrets will be sent in cleartext.", + proxy_base.as_str() + ); } } @@ -338,7 +365,7 @@ pub(crate) async fn authorize_oidc( let proxy_base = Url::parse(&instance.proxy_url) .map_err(|e| CliError::Other(format!("Invalid proxy URL: {e}")))?; - check_proxy_scheme(&proxy_base, &instance.proxy_url); + check_proxy_scheme(&proxy_base); // Step 1: Start the OIDC MFA session. let start_req = ClientMfaStartRequest { @@ -463,6 +490,237 @@ async fn poll_finish( } } +/// How long the CLI waits for the user to approve MFA on their mobile device. +#[cfg(not(test))] +const MOBILE_APPROVE_TIMEOUT: Duration = Duration::from_secs(120); +#[cfg(test)] +const MOBILE_APPROVE_TIMEOUT: Duration = Duration::from_secs(5); + +/// Run the mobile-approve MFA flow. +/// +/// Displays a QR code (terminal and/or `--qr-file` PNG), opens a WebSocket +/// to the proxy, and waits for the mobile app to approve the authentication. +/// The CLI performs no cryptography; the mobile device signs the challenge +/// and the proxy pushes the resulting preshared key back over the WebSocket. +/// +/// When `json_mode` is true, progress messages on stderr are suppressed so +/// that `--json` output consumers only see the final result/error. +pub(crate) async fn authorize_mobile_approve( + location: &Location, + instance: &Instance, + posture_data: Option, + qr_file: Option<&str>, + pool: &DbPool, + json_mode: bool, +) -> Result { + let wireguard_keys = WireguardKeys::find_by_instance_id(pool, instance.id) + .await + .map_err(|e| CliError::Other(e.to_string()))? + .ok_or_else(|| { + CliError::Other(format!( + "WireGuard keys not found for instance {}", + instance.name + )) + })?; + + let proxy_base = Url::parse(&instance.proxy_url) + .map_err(|e| CliError::Other(format!("Invalid proxy URL: {e}")))?; + check_proxy_scheme(&proxy_base); + + // Step 1: Start the MFA session. + let start_req = ClientMfaStartRequest { + location_id: location.network_id, + pubkey: wireguard_keys.pubkey.clone(), + method: MfaMethod::MobileApprove as i32, + posture_data, + }; + + let start_url = proxy_base + .join("api/v1/client-mfa/start") + .map_err(|e| CliError::Other(format!("Failed to build MFA start URL: {e}")))?; + + debug!("Starting mobile-approve MFA session at {start_url}"); + let response = post_with_headers(start_url, &start_req) + .await + .map_err(|e| CliError::Other(format!("Failed to reach proxy: {e}")))?; + + if !response.status().is_success() { + return Err(handle_mobile_approve_start_error(response).await); + } + + let start_resp: ClientMfaStartResponse = response + .json() + .await + .map_err(|e| CliError::Other(format!("Invalid MFA start response: {e}")))?; + + // The challenge is always present for MobileApprove (core always generates + // a BiometricChallenge for this method). + let challenge = start_resp.challenge.ok_or_else(|| { + CliError::Other("Proxy did not return a challenge for mobile-approve MFA".into()) + })?; + + // Step 2: Build and render the QR code. + let payload = mfa_qr::build_qr_payload(&start_resp.token, &challenge, &instance.uuid); + mfa_qr::render_qr(&payload, qr_file, json_mode)?; + if !json_mode { + eprintln!("Waiting for mobile approval... (Ctrl-C to cancel)"); + } + + // Step 3: Open a WebSocket and wait for the preshared key. + let ws_url = derive_ws_url(&proxy_base, &start_resp.token)?; + let (ws_stream, _response) = connect_async(&ws_url) + .await + .map_err(|e| CliError::Other(format!("Failed to connect to proxy: {e}")))?; + + let psk = wait_for_mfa_success(ws_stream, MOBILE_APPROVE_TIMEOUT, json_mode).await?; + + info!("Mobile-approve MFA completed, preshared key obtained"); + Ok(SecretString::from(psk)) +} + +/// Handle a non-2xx response from /start during mobile-approve MFA. +/// +/// Rewraps the cryptic server error "selected MFA method is not available" +/// into actionable guidance telling the user to register a mobile authenticator. +async fn handle_mobile_approve_start_error(response: reqwest::Response) -> CliError { + let status = response.status(); + let error_body: Option = response.json().await.ok(); + let message = error_body + .and_then(|b| b.error) + .unwrap_or_else(|| format!("HTTP {status}")); + + if message.contains("selected MFA method is not available") { + return CliError::MfaFailed( + "No mobile authenticator is registered for your account. \ + Register one in the Defguard mobile app, then retry." + .into(), + ); + } + + if status.is_client_error() { + CliError::MfaFailed(format!("MFA error: {message}")) + } else { + CliError::Other(format!("Proxy error (HTTP {status}): {message}")) + } +} + +/// Derive the WebSocket URL from the proxy's base URL and the MFA token. +/// +/// Uses [`Url::join`] so that any path prefix is preserved. +fn derive_ws_url(proxy_base: &Url, token: &str) -> Result { + let mut ws_url = proxy_base + .join("api/v1/client-mfa/remote") + .map_err(|e| CliError::Other(format!("Failed to build WebSocket URL: {e}")))?; + + let ws_scheme = match proxy_base.scheme() { + "https" => "wss", + "http" => "ws", + other => { + return Err(CliError::Other(format!( + "Invalid proxy URL scheme '{other}'; expected http or https" + ))); + } + }; + + ws_url + .set_scheme(ws_scheme) + .map_err(|()| CliError::Other("Failed to set WebSocket URL scheme".into()))?; + ws_url.query_pairs_mut().append_pair("token", token); + + Ok(ws_url.to_string()) +} + +/// Wait on the WebSocket for a single `{"type":"mfa_success","preshared_key":"..."}` +/// text frame, or fail if the deadline expires or the user cancels. +/// +/// Uses an absolute deadline (not a per-frame-gap timeout) so that stray +/// ping/pong traffic does not silently extend the wait. +async fn wait_for_mfa_success( + ws_stream: WebSocketStream>, + timeout: Duration, + json_mode: bool, +) -> Result { + let (_write, mut read) = ws_stream.split(); + + let deadline = Instant::now() + timeout; + + loop { + let remaining = deadline + .checked_duration_since(Instant::now()) + .unwrap_or_default(); + if remaining.is_zero() { + if !json_mode { + eprintln!("Mobile approval timed out."); + } + return Err(CliError::MfaFailed( + "mobile approval timed out; re-run to get a fresh QR".into(), + )); + } + + let msg = select! { + _ = sleep(remaining) => { + if !json_mode { + eprintln!("Mobile approval timed out."); + } + return Err(CliError::MfaFailed( + "mobile approval timed out; re-run to get a fresh QR".into(), + )); + } + _ = ctrl_c() => { + if !json_mode { + eprintln!("MFA cancelled."); + } + return Err(CliError::Cancelled("MFA cancelled.".into())); + } + msg = read.next() => { + match msg { + Some(Ok(msg)) => msg, + Some(Err(_)) => { + // Server closed or errored without sending mfa_success. + if !json_mode { + eprintln!("Mobile approval failed: connection closed by proxy."); + } + return Err(CliError::MfaFailed( + "mobile approval failed: connection closed by proxy".into(), + )); + } + None => { + // Server closed the connection without sending mfa_success. + if !json_mode { + eprintln!("Mobile approval failed: connection closed by proxy."); + } + return Err(CliError::MfaFailed( + "mobile approval failed: connection closed by proxy".into(), + )); + } + } + } + }; + + match msg { + Message::Text(text) => { + if let Ok(parsed) = serde_json::from_str::(&text) { + if parsed.get("type").and_then(|v| v.as_str()) == Some("mfa_success") { + if let Some(key) = parsed["preshared_key"].as_str() { + return Ok(key.to_string()); + } + } + } + // Ignore unrecognised text frames (non-JSON, wrong type, or missing preshared_key). + } + Message::Close(_) => { + if !json_mode { + eprintln!("Mobile approval failed: connection closed by proxy."); + } + return Err(CliError::MfaFailed( + "mobile approval failed: connection closed by proxy".into(), + )); + } + _ => {} // Ignore ping, pong, binary. + } + } +} + #[cfg(test)] mod tests { use defguard_core::database::models::location::ServiceLocationMode; @@ -492,51 +750,99 @@ mod tests { #[test] fn test_oidc_location_resolves_to_oidc() { let l = location("office", LocationMfaMode::External); - let method = resolve_method(&l, None, None, None).unwrap(); + let method = resolve_method(&l, None).unwrap(); assert_eq!(method, MfaMethod::Oidc); } #[test] fn test_internal_location_resolves_to_totp() { let l = location("office", LocationMfaMode::Internal); - let method = resolve_method(&l, None, None, None).unwrap(); + let method = resolve_method(&l, None).unwrap(); assert_eq!(method, MfaMethod::Totp); } #[test] - fn test_code_with_oidc_rejected() { - let l = location("office", LocationMfaMode::External); - let err = resolve_method(&l, None, Some("123456"), None).unwrap_err(); + fn test_validate_flags_oidc_rejects_code() { + let err = + validate_mfa_flags(MfaMethod::Oidc, "office", Some("123456"), None, None).unwrap_err(); assert!(matches!(err, CliError::InvalidInput(_))); assert!(err.to_string().contains("--code")); } #[test] - fn test_code_command_with_oidc_rejected() { - let l = location("office", LocationMfaMode::External); - let err = resolve_method(&l, None, None, Some("pass otp")).unwrap_err(); + fn test_validate_flags_oidc_rejects_code_command() { + let err = validate_mfa_flags(MfaMethod::Oidc, "office", None, Some("pass otp"), None) + .unwrap_err(); + assert!(matches!(err, CliError::InvalidInput(_))); + assert!(err.to_string().contains("--code")); + } + + #[test] + fn test_validate_flags_mobile_approve_rejects_code() { + let err = validate_mfa_flags( + MfaMethod::MobileApprove, + "office", + Some("123456"), + None, + None, + ) + .unwrap_err(); assert!(matches!(err, CliError::InvalidInput(_))); - assert!(err.to_string().contains("--code-command")); + assert!(err.to_string().contains("--code")); } #[test] - fn test_code_with_totp_passes() { - let l = location("office", LocationMfaMode::Internal); - let method = resolve_method(&l, None, Some("123456"), None).unwrap(); - assert_eq!(method, MfaMethod::Totp); + fn test_validate_flags_mobile_approve_rejects_code_command() { + let err = validate_mfa_flags( + MfaMethod::MobileApprove, + "office", + None, + Some("pass otp"), + None, + ) + .unwrap_err(); + assert!(matches!(err, CliError::InvalidInput(_))); + assert!(err.to_string().contains("--code")); + } + + #[test] + fn test_validate_flags_qr_file_only_for_mobile_approve() { + // qr-file on TOTP + let err = + validate_mfa_flags(MfaMethod::Totp, "office", None, None, Some("qr.png")).unwrap_err(); + assert!(matches!(err, CliError::InvalidInput(_))); + assert!(err.to_string().contains("qr-file")); + } + + #[test] + fn test_validate_flags_qr_file_ok_for_mobile_approve() { + validate_mfa_flags( + MfaMethod::MobileApprove, + "office", + None, + None, + Some("qr.png"), + ) + .unwrap(); + } + + #[test] + fn test_validate_flags_pass_through_totp() { + // TOTP with --code should pass validation. + validate_mfa_flags(MfaMethod::Totp, "office", Some("123456"), None, None).unwrap(); } #[test] fn test_no_code_with_oidc_passes() { let l = location("office", LocationMfaMode::External); - let method = resolve_method(&l, None, None, None).unwrap(); + let method = resolve_method(&l, None).unwrap(); assert_eq!(method, MfaMethod::Oidc); } #[test] fn test_mfa_method_oidc_on_internal_rejected() { let l = location("office", LocationMfaMode::Internal); - let err = resolve_method(&l, Some("oidc"), None, None).unwrap_err(); + let err = resolve_method(&l, Some("oidc")).unwrap_err(); assert!(matches!(err, CliError::InvalidInput(_))); assert!(err.to_string().contains("oidc")); } diff --git a/src-tauri/client-cli/src/mfa_qr.rs b/src-tauri/client-cli/src/mfa_qr.rs new file mode 100644 index 000000000..569218525 --- /dev/null +++ b/src-tauri/client-cli/src/mfa_qr.rs @@ -0,0 +1,132 @@ +//! Mobile-approve MFA QR code payload construction and rendering. + +#[cfg(not(test))] +use std::io::{stderr, IsTerminal}; +use std::path::Path; + +use base64::{prelude::BASE64_STANDARD, Engine as _}; +#[cfg(not(test))] +use image::imageops::{resize, FilterType}; +use image::Luma; +#[cfg(not(test))] +use qrcode::render::unicode::Dense1x2; +use qrcode::QrCode; + +use crate::state::CliError; + +#[cfg(not(test))] +// Target minimum size (in pixels) for QR PNG output. +const QR_PNG_MIN_SIZE: u32 = 300; + +/// Build the base64-encoded QR payload for mobile-approve MFA. +/// +/// QR payload format: +/// Base64(JSON{token, challenge, instance_id}) +pub(crate) fn build_qr_payload(token: &str, challenge: &str, instance_id: &str) -> String { + let json = serde_json::json!({ + "token": token, + "challenge": challenge, + "instance_id": instance_id, + }); + let raw = serde_json::to_string(&json).expect("JSON serialization is infallible"); + BASE64_STANDARD.encode(raw.as_bytes()) +} + +/// Render the QR code for a payload string to available output(s). +/// +/// * When **stderr is a TTY** and `json_mode` is false, prints a Unicode +/// `Dense1x2` QR to stderr. +/// * When **`qr_file` is `Some`**, always writes a PNG image to that path +/// (regardless of `json_mode` - the file is machine-readable output). +/// * If **neither** output is viable (non-TTY + no `qr_file`), returns +/// [`CliError::InvalidInput`] with guidance to use `--qr-file`. +/// +/// Terminal and file outputs are independent: when both are available +/// and `!json_mode`, the user sees the terminal QR *and* gets a PNG file. +#[cfg(not(test))] +pub(crate) fn render_qr( + payload: &str, + qr_file: Option<&str>, + json_mode: bool, +) -> Result<(), CliError> { + let is_tty = stderr().is_terminal(); + + if !is_tty && qr_file.is_none() { + return Err(CliError::InvalidInput( + "No QR display available (stderr is not a TTY). \ + Use --qr-file to save the QR as a PNG image." + .into(), + )); + } + + if is_tty && !json_mode { + let code = QrCode::new(payload.as_bytes()) + .map_err(|e| CliError::Other(format!("Failed to generate QR code: {e}")))?; + let rendered = code.render::().build(); + eprintln!("{rendered}"); + } + + if let Some(path) = qr_file { + let code = QrCode::new(payload.as_bytes()) + .map_err(|e| CliError::Other(format!("Failed to generate QR code: {e}")))?; + let image = code.render::>().build(); + // Scale up so the QR is large enough to scan. + // Nearest-neighbour preserves sharp module edges. + let max_dim = image.width().max(image.height()); + let scale = (QR_PNG_MIN_SIZE + max_dim - 1) / max_dim.max(1); + let scaled = resize( + &image, + image.width() * scale, + image.height() * scale, + FilterType::Nearest, + ); + scaled + .save(Path::new(path)) + .map_err(|e| CliError::Other(format!("Failed to save QR image: {e}")))?; + } + + Ok(()) +} + +#[cfg(test)] +pub(crate) fn render_qr( + _payload: &str, + qr_file: Option<&str>, + _json_mode: bool, +) -> Result<(), CliError> { + // Test mode: never render to the terminal. Write to --qr-file + // only so that integration tests can verify the file was produced. + if let Some(path) = qr_file { + let code = QrCode::new(_payload.as_bytes()) + .map_err(|e| CliError::Other(format!("Failed to generate QR code: {e}")))?; + let image = code.render::>().build(); + image + .save(Path::new(path)) + .map_err(|e| CliError::Other(format!("Failed to save QR image: {e}")))?; + } + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_build_qr_payload_bytes() { + let payload = build_qr_payload("tok-abc", "chal-xyz", "uuid-001"); + // Decode and verify the JSON structure. + let decoded = BASE64_STANDARD.decode(&payload).expect("valid base64"); + let json: serde_json::Value = serde_json::from_slice(&decoded).expect("valid JSON"); + assert_eq!(json["token"], "tok-abc"); + assert_eq!(json["challenge"], "chal-xyz"); + assert_eq!(json["instance_id"], "uuid-001"); + } + + #[test] + fn test_build_qr_payload_deterministic() { + // Same inputs must produce identical payloads. + let a = build_qr_payload("tok", "chal", "inst"); + let b = build_qr_payload("tok", "chal", "inst"); + assert_eq!(a, b); + } +} diff --git a/src-tauri/client-cli/src/state.rs b/src-tauri/client-cli/src/state.rs index 9e10c4480..29b14fbb1 100644 --- a/src-tauri/client-cli/src/state.rs +++ b/src-tauri/client-cli/src/state.rs @@ -35,7 +35,7 @@ pub enum CliError { #[error("MFA input required but no TTY: {0}")] MfaInputRequired(String), - #[error("not enrolled: {0}")] + #[error("enrollment required: {0}")] NotEnrolled(String), #[error("invalid input: {0}")] diff --git a/src-tauri/client-cli/src/tests_proxy.rs b/src-tauri/client-cli/src/tests_proxy.rs index 2d11a0ae0..071d5ada5 100644 --- a/src-tauri/client-cli/src/tests_proxy.rs +++ b/src-tauri/client-cli/src/tests_proxy.rs @@ -15,6 +15,7 @@ use std::{ time::Duration, }; +use base64::{prelude::BASE64_STANDARD, Engine as _}; use defguard_client_proto::defguard::client_types::MfaMethod; use defguard_core::database::{ models::{ @@ -25,6 +26,8 @@ use defguard_core::database::{ DbPool, }; use secrecy::ExposeSecret; +use serde_json::json; +use sha1::{Digest, Sha1}; use crate::{mfa, mfa_code::CodeSource, state::CliError}; @@ -39,7 +42,7 @@ struct MockResponse { body: String, } -/// A tiny HTTP server that responds to MFA start/finish requests. +/// A tiny HTTP server that responds to MFA start/finish/remote requests. struct MockProxy { addr: SocketAddr, shutdown: Arc, @@ -47,6 +50,92 @@ struct MockProxy { } impl MockProxy { + /// Mobile-approve MFA: /start returns a token+challenge, /remote upgrades to + /// WebSocket and sends the given preshared key (if `Some`). When `None`, the + /// server closes the connection right after the handshake (used for timeout tests). + fn with_mobile_approve(start_response: MockResponse, preshared_key: Option<&str>) -> Self { + let psk = preshared_key.map(|s| s.to_string()); + let listener = TcpListener::bind("127.0.0.1:0").unwrap(); + listener.set_nonblocking(true).unwrap(); + let addr = listener.local_addr().unwrap(); + let shutdown = Arc::new(AtomicBool::new(false)); + let shutdown_thread = shutdown.clone(); + let handle = spawn(move || { + while !shutdown_thread.load(Ordering::Relaxed) { + let mut stream = match listener.accept() { + Ok((stream, _)) => stream, + Err(ref e) if e.kind() == ErrorKind::WouldBlock => { + sleep(WAIT_TIMEOUT); + continue; + } + Err(_) => break, + }; + stream.set_nonblocking(false).ok(); + stream.set_read_timeout(Some(READ_TIMEOUT)).ok(); + + // Read the full request head. + let mut data = Vec::new(); + let mut buf = [0u8; 4096]; + loop { + match stream.read(&mut buf) { + Ok(0) => break, + Ok(n) => { + data.extend_from_slice(&buf[..n]); + if data.windows(4).any(|w| w == b"\r\n\r\n") { + break; + } + } + Err(_) => break, + } + } + + let request = String::from_utf8_lossy(&data); + + if request.contains("/api/v1/client-mfa/remote") { + // WebSocket upgrade. + if let Some(key) = extract_header(&request, "Sec-WebSocket-Key") { + let accept = compute_ws_accept(&key); + let resp = format!( + "HTTP/1.1 101 Switching Protocols\r\n\ + Upgrade: websocket\r\n\ + Connection: Upgrade\r\n\ + Sec-WebSocket-Accept: {accept}\r\n\ + \r\n" + ); + let _ = stream.write_all(resp.as_bytes()); + + // Send the mfa_success text frame if we have a PSK. + if let Some(ref key) = psk { + let payload = json!({ + "type": "mfa_success", + "preshared_key": key, + }); + let payload_str = serde_json::to_string(&payload).unwrap(); + let frame = build_ws_text_frame(&payload_str); + let _ = stream.write_all(&frame); + } + // When psk is None, just close (no frame) to simulate timeout. + } + } else if request.contains("/api/v1/client-mfa/start") { + let body = format!( + "HTTP/1.1 {} OK\r\nContent-Type: application/json\r\n\ + Content-Length: {}\r\nConnection: close\r\n\r\n{}", + start_response.status, + start_response.body.len(), + start_response.body, + ); + let _ = stream.write_all(body.as_bytes()); + } + // Unknown paths: no response, just close. + } + }); + MockProxy { + addr, + shutdown, + handle: Some(handle), + } + } + /// Single-shot finish: each finish request gets the same response. fn new(start_response: MockResponse, finish_response: MockResponse) -> Self { Self::with_counter(start_response, finish_response, None) @@ -162,6 +251,38 @@ impl Drop for MockProxy { } } +/// Extract a header value from an HTTP request string. +fn extract_header(request: &str, name: &str) -> Option { + let prefix = format!("{name}: "); + request + .lines() + .find(|l| l.to_lowercase().starts_with(&prefix.to_lowercase())) + .and_then(|l| l.split_once(": ").map(|(_, v)| v.trim().to_string())) +} + +/// Compute the Sec-WebSocket-Accept value per RFC 6455 §4.2.2. +fn compute_ws_accept(key: &str) -> String { + let mut hasher = Sha1::new(); + hasher.update(key.as_bytes()); + hasher.update(b"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); + BASE64_STANDARD.encode(hasher.finalize()) +} + +/// Build a WebSocket text frame (unmasked, for server→client). +fn build_ws_text_frame(payload: &str) -> Vec { + let len = payload.len(); + let mut frame = vec![0x81]; // FIN + text opcode + if len < 126 { + frame.push(len as u8); + } else { + // Our test payloads are small; 16-bit length is sufficient. + frame.push(126); + frame.extend_from_slice(&(len as u16).to_be_bytes()); + } + frame.extend_from_slice(payload.as_bytes()); + frame +} + fn mfa_enabled_location(name: &str, instance_id: Id) -> Location { Location { id: NoId, @@ -348,3 +469,95 @@ async fn test_oidc_mfa_times_out_when_never_completed(pool: DbPool) { assert!(matches!(err, CliError::MfaFailed(_))); assert!(err.to_string().contains("timed out")); } + +#[sqlx::test(migrations = "../migrations")] +async fn test_mobile_approve_success_returns_psk(pool: DbPool) { + let (mut instance, location) = seed_db(&pool).await; + + // /start must return a challenge — mobile-approve requires it. + let mock = MockProxy::with_mobile_approve( + MockResponse { + status: 200, + body: r#"{"token":"tok-mob","challenge":"chal-xyz"}"#.into(), + }, + Some("secret-mobile-psk"), + ); + mock.wait_ready(); + instance.proxy_url = mock.url(); + + let psk = mfa::authorize_mobile_approve( + &location, &instance, None, // no posture data + None, // no qr-file (test render_qr is a no-op) + &pool, false, // not json mode + ) + .await + .unwrap(); + assert_eq!(psk.expose_secret(), "secret-mobile-psk"); +} + +#[sqlx::test(migrations = "../migrations")] +async fn test_mobile_approve_no_device_returns_guidance(pool: DbPool) { + let (mut instance, location) = seed_db(&pool).await; + + let mock = MockProxy::with_mobile_approve( + MockResponse { + status: 400, + body: r#"{"error":"selected MFA method is not available"}"#.into(), + }, + Some("unused"), + ); + mock.wait_ready(); + instance.proxy_url = mock.url(); + + let err = mfa::authorize_mobile_approve(&location, &instance, None, None, &pool, false) + .await + .unwrap_err(); + + assert!(matches!(err, CliError::MfaFailed(_))); + assert!(err.to_string().contains("No mobile authenticator")); +} + +#[sqlx::test(migrations = "../migrations")] +async fn test_mobile_approve_unrelated_error_passes_through(pool: DbPool) { + let (mut instance, location) = seed_db(&pool).await; + + let mock = MockProxy::with_mobile_approve( + MockResponse { + status: 500, + body: r#"{"error":"internal server error"}"#.into(), + }, + Some("unused"), + ); + mock.wait_ready(); + instance.proxy_url = mock.url(); + + let err = mfa::authorize_mobile_approve(&location, &instance, None, None, &pool, false) + .await + .unwrap_err(); + + assert!(matches!(err, CliError::Other(_))); + assert!(err.to_string().contains("internal server error")); +} + +#[sqlx::test(migrations = "../migrations")] +async fn test_mobile_approve_server_close_without_frame_times_out(pool: DbPool) { + let (mut instance, location) = seed_db(&pool).await; + + // psk=None: the mock accepts the WS upgrade but closes without sending a frame. + let mock = MockProxy::with_mobile_approve( + MockResponse { + status: 200, + body: r#"{"token":"tok-close","challenge":"chal-xyz"}"#.into(), + }, + None, + ); + mock.wait_ready(); + instance.proxy_url = mock.url(); + + let err = mfa::authorize_mobile_approve(&location, &instance, None, None, &pool, false) + .await + .unwrap_err(); + + assert!(matches!(err, CliError::MfaFailed(_))); + assert!(err.to_string().contains("connection closed by proxy")); +} From 9640e1f1a7fbc77e2c3c468b6092ff6d4e69002c Mon Sep 17 00:00:00 2001 From: Aleksander <170264518+t-aleksander@users.noreply.github.com> Date: Fri, 19 Jun 2026 12:49:32 +0200 Subject: [PATCH 061/155] [New UI] Location details (#980) * location details * fix * properly hide 0 port * new banner * use existing component --- .../LocationDetailsPage.tsx | 70 ++++++++++++++++++ .../pages/full/LocationDetailsPage/style.scss | 7 ++ .../pages/full/OverviewPage/OverviewPage.tsx | 36 +-------- .../components/DetailsFold/DetailsFold.tsx | 56 -------------- .../assets/banner_update_available.png | Bin 363983 -> 88869 bytes new-ui/src/routeTree.gen.ts | 22 ++++++ .../routes/full/_default/location-details.tsx | 14 ++++ .../components/DetailsFold/DetailsFold.tsx | 43 +++++++++++ .../components/DetailsFold/style.scss | 20 ++++- .../LocationCardHeaderInfo.tsx | 19 ++++- .../LocationCardHeaderInfo/style.scss | 13 +++- .../OverviewLocationCard.tsx | 16 +++- .../OverviewLocationCard/style.scss | 3 + 13 files changed, 223 insertions(+), 96 deletions(-) create mode 100644 new-ui/src/pages/full/LocationDetailsPage/LocationDetailsPage.tsx create mode 100644 new-ui/src/pages/full/LocationDetailsPage/style.scss delete mode 100644 new-ui/src/pages/full/OverviewPage/components/DetailsFold/DetailsFold.tsx create mode 100644 new-ui/src/routes/full/_default/location-details.tsx create mode 100644 new-ui/src/shared/components/DetailsFold/DetailsFold.tsx rename new-ui/src/{pages/full/OverviewPage => shared}/components/DetailsFold/style.scss (68%) diff --git a/new-ui/src/pages/full/LocationDetailsPage/LocationDetailsPage.tsx b/new-ui/src/pages/full/LocationDetailsPage/LocationDetailsPage.tsx new file mode 100644 index 000000000..e798604d6 --- /dev/null +++ b/new-ui/src/pages/full/LocationDetailsPage/LocationDetailsPage.tsx @@ -0,0 +1,70 @@ +import './style.scss'; + +import { useQuery } from '@tanstack/react-query'; +import { useNavigate, useSearch } from '@tanstack/react-router'; +import { Button } from '../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../shared/components/Button/types'; +import { Controls } from '../../../shared/components/Controls/Controls'; +import { DetailsFold } from '../../../shared/components/DetailsFold/DetailsFold'; +import { FullPageTitle } from '../../../shared/components/FullPageTitle/FullPageTitle'; +import { FullPage } from '../../../shared/layouts/FullPage/FullPage'; +import { getLocationDetailsQueryOptions } from '../../../shared/rust-api/query'; +import { ThemeSpacing } from '../../../shared/types'; + +const fallback = '–'; + +export const LocationDetailsPage = () => { + const { locationId, locationName, connectionType } = useSearch({ + from: '/full/_default/location-details', + }); + const navigate = useNavigate(); + + const { data } = useQuery( + getLocationDetailsQueryOptions({ locationId, connectionType }), + ); + + return ( + + + + + - )} */} -
    -
    - - - {selection?.kind === 'instance' && ( - - )} -
    diff --git a/new-ui/src/pages/full/OverviewPage/components/DetailsFold/DetailsFold.tsx b/new-ui/src/pages/full/OverviewPage/components/DetailsFold/DetailsFold.tsx deleted file mode 100644 index 1499300fc..000000000 --- a/new-ui/src/pages/full/OverviewPage/components/DetailsFold/DetailsFold.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import './style.scss'; -import { Divider } from '../../../../../shared/components/Divider/Divider'; -import type { InstanceInfo } from '../../../../../shared/rust-api/types'; -import { ThemeSpacing } from '../../../../../shared/types'; - -interface Props { - data: InstanceInfo; -} - -export const DetailsFold = ({ data }: Props) => { - return ( -
    -
    -

    Device configuration

    -
    -
    -

    Public key

    -
    - -
    -

    Addresses

    -
    - -
    -

    Listen port

    -
    -
    -
    -
    -

    VPN Server Configuration

    -
    -
    -

    Public key

    -

    {data.pubkey}

    -
    - -
    -

    Allowed IPs

    -
    - -
    -

    DNS servers

    -
    - -
    -

    Persistent keep alive

    -
    - -
    -

    Latest Handshake

    -
    -
    -
    -
    - ); -}; diff --git a/new-ui/src/pages/full/UpdatePage/assets/banner_update_available.png b/new-ui/src/pages/full/UpdatePage/assets/banner_update_available.png index ce2031f2de160a7c04d0e690f5628c15213c6abc..ba0230f2ff408fcc9c59e1c377a6e0dff51bac37 100644 GIT binary patch literal 88869 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 literal 363983 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 Ca6k!Ss=)kImcs6l@>iHm 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%0AY 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 FullDefaultRoute, } as any) +const FullDefaultLocationDetailsRoute = + FullDefaultLocationDetailsRouteImport.update({ + id: '/location-details', + path: '/location-details', + getParentRoute: () => FullDefaultRoute, + } as any) const FullDefaultAddIndexRoute = FullDefaultAddIndexRouteImport.update({ id: '/add/', path: '/add/', @@ -128,6 +135,7 @@ export interface FileRoutesByFullPath { '/compact/': typeof CompactIndexRoute '/full/': typeof FullIndexRoute '/playground/': typeof PlaygroundIndexRoute + '/full/location-details': typeof FullDefaultLocationDetailsRoute '/full/log': typeof FullDefaultLogRoute '/full/overview': typeof FullDefaultOverviewRoute '/full/settings': typeof FullDefaultSettingsRoute @@ -146,6 +154,7 @@ export interface FileRoutesByTo { '/full/tunnel-wizard': typeof FullTunnelWizardRoute '/compact': typeof CompactIndexRoute '/playground': typeof PlaygroundIndexRoute + '/full/location-details': typeof FullDefaultLocationDetailsRoute '/full/log': typeof FullDefaultLogRoute '/full/overview': typeof FullDefaultOverviewRoute '/full/settings': typeof FullDefaultSettingsRoute @@ -167,6 +176,7 @@ export interface FileRoutesById { '/compact/': typeof CompactIndexRoute '/full/': typeof FullIndexRoute '/playground/': typeof PlaygroundIndexRoute + '/full/_default/location-details': typeof FullDefaultLocationDetailsRoute '/full/_default/log': typeof FullDefaultLogRoute '/full/_default/overview': typeof FullDefaultOverviewRoute '/full/_default/settings': typeof FullDefaultSettingsRoute @@ -188,6 +198,7 @@ export interface FileRouteTypes { | '/compact/' | '/full/' | '/playground/' + | '/full/location-details' | '/full/log' | '/full/overview' | '/full/settings' @@ -206,6 +217,7 @@ export interface FileRouteTypes { | '/full/tunnel-wizard' | '/compact' | '/playground' + | '/full/location-details' | '/full/log' | '/full/overview' | '/full/settings' @@ -226,6 +238,7 @@ export interface FileRouteTypes { | '/compact/' | '/full/' | '/playground/' + | '/full/_default/location-details' | '/full/_default/log' | '/full/_default/overview' | '/full/_default/settings' @@ -351,6 +364,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof FullDefaultLogRouteImport parentRoute: typeof FullDefaultRoute } + '/full/_default/location-details': { + id: '/full/_default/location-details' + path: '/location-details' + fullPath: '/full/location-details' + preLoaderRoute: typeof FullDefaultLocationDetailsRouteImport + parentRoute: typeof FullDefaultRoute + } '/full/_default/add/': { id: '/full/_default/add/' path: '/add' @@ -376,6 +396,7 @@ declare module '@tanstack/react-router' { } interface FullDefaultRouteChildren { + FullDefaultLocationDetailsRoute: typeof FullDefaultLocationDetailsRoute FullDefaultLogRoute: typeof FullDefaultLogRoute FullDefaultOverviewRoute: typeof FullDefaultOverviewRoute FullDefaultSettingsRoute: typeof FullDefaultSettingsRoute @@ -387,6 +408,7 @@ interface FullDefaultRouteChildren { } const FullDefaultRouteChildren: FullDefaultRouteChildren = { + FullDefaultLocationDetailsRoute: FullDefaultLocationDetailsRoute, FullDefaultLogRoute: FullDefaultLogRoute, FullDefaultOverviewRoute: FullDefaultOverviewRoute, FullDefaultSettingsRoute: FullDefaultSettingsRoute, diff --git a/new-ui/src/routes/full/_default/location-details.tsx b/new-ui/src/routes/full/_default/location-details.tsx new file mode 100644 index 000000000..fa53ae724 --- /dev/null +++ b/new-ui/src/routes/full/_default/location-details.tsx @@ -0,0 +1,14 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { z } from 'zod'; +import { LocationDetailsPage } from '../../../pages/full/LocationDetailsPage/LocationDetailsPage'; + +const searchSchema = z.object({ + locationId: z.number(), + locationName: z.string(), + connectionType: z.enum(['Location', 'Tunnel']), +}); + +export const Route = createFileRoute('/full/_default/location-details')({ + validateSearch: searchSchema, + component: LocationDetailsPage, +}); diff --git a/new-ui/src/shared/components/DetailsFold/DetailsFold.tsx b/new-ui/src/shared/components/DetailsFold/DetailsFold.tsx new file mode 100644 index 000000000..6ac9b07c2 --- /dev/null +++ b/new-ui/src/shared/components/DetailsFold/DetailsFold.tsx @@ -0,0 +1,43 @@ +import './style.scss'; + +import clsx from 'clsx'; +import { Fragment, type ReactNode } from 'react'; +import { Divider } from '../Divider/Divider'; + +export type DetailsFoldRow = { + label: string; + value: ReactNode; +}; + +export type DetailsFoldSection = { + title: string; + rows: DetailsFoldRow[]; + compact?: boolean; +}; + +type Props = { + sections: DetailsFoldSection[]; +}; + +export const DetailsFold = ({ sections }: Props) => { + return ( +

    + ); +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/DetailsFold/style.scss b/new-ui/src/shared/components/DetailsFold/style.scss similarity index 68% rename from new-ui/src/pages/full/OverviewPage/components/DetailsFold/style.scss rename to new-ui/src/shared/components/DetailsFold/style.scss index 66066a768..4580799d9 100644 --- a/new-ui/src/pages/full/OverviewPage/components/DetailsFold/style.scss +++ b/new-ui/src/shared/components/DetailsFold/style.scss @@ -8,16 +8,29 @@ flex-flow: column; row-gap: var(--spacing-sm); + > p { + font: var(--t-body-sm-500); + color: var(--fg-white-70); + user-select: none; + } + > .card { box-sizing: border-box; + display: flex; + flex-flow: column; + row-gap: var(--spacing-lg); border-radius: 12px; border: 1px solid var(--border-disabled); padding: var(--spacing-md); - > .row { + &.compact { + row-gap: var(--spacing-md); + } + + .row { display: flex; flex-flow: row nowrap; - align-items: center; + align-items: flex-start; justify-content: space-between; column-gap: var(--spacing-2xl); @@ -26,6 +39,7 @@ font: var(--t-body-xs-400); color: var(--fg-white-80); text-align: left; + flex-shrink: 0; } :nth-child(2) { @@ -33,6 +47,8 @@ color: var(--fg-white-100); text-align: right; max-width: 365px; + min-width: 0; + overflow-wrap: anywhere; } } } diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/LocationCardHeaderInfo.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/LocationCardHeaderInfo.tsx index e60e0cc6d..2b6cc9b50 100644 --- a/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/LocationCardHeaderInfo.tsx +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/LocationCardHeaderInfo.tsx @@ -1,12 +1,15 @@ import './style.scss'; import { ConnectionType, type LocationInfo } from '../../../../rust-api/types'; +import { ThemeVariable } from '../../../../types'; +import { Icon, IconKind } from '../../../Icon'; import { LocationCardIcon } from '../LocationCardIcon'; interface Props { location: LocationInfo; + onInfoClick?: () => void; } -export const LocationCardHeaderInfo = ({ location }: Props) => ( +export const LocationCardHeaderInfo = ({ location, onInfoClick }: Props) => (
    @@ -15,6 +18,20 @@ export const LocationCardHeaderInfo = ({ location }: Props) => (

    {location.name}

    + {onInfoClick && ( + + )} {location.active && (

    Online

    diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/style.scss b/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/style.scss index 77d2601e2..3bb5f3fb9 100644 --- a/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/style.scss +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardHeaderInfo/style.scss @@ -24,7 +24,18 @@ flex-flow: row nowrap; align-items: center; justify-content: flex-start; - column-gap: var(--spacing-sm); + column-gap: var(--spacing-xs); + } + + .info-btn { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0; + margin: 0; + border: 0; + background: transparent; + cursor: pointer; } .online-badge { diff --git a/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx index 32c2a595f..5e00ecdb4 100644 --- a/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx +++ b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx @@ -1,6 +1,7 @@ import './style.scss'; import { useMutation } from '@tanstack/react-query'; +import { useNavigate } from '@tanstack/react-router'; import clsx from 'clsx'; import { useMemo } from 'react'; import { ConnectModalView } from '../../../pages/full/OverviewPage/components/ConnectModal/hooks/types'; @@ -24,6 +25,7 @@ interface Props { } export const OverviewLocationCard = ({ location, instance }: Props) => { + const navigate = useNavigate(); const { mutate: updateRouting } = useMutation({ mutationFn: api.updateLocationRouting, meta: { @@ -103,7 +105,19 @@ export const OverviewLocationCard = ({ location, instance }: Props) => { return (
    - + + navigate({ + to: '/full/location-details', + search: { + locationId: location.id, + locationName: location.name, + connectionType: location.connection_type, + }, + }) + } + />
    diff --git a/new-ui/src/shared/components/OverviewLocationCard/style.scss b/new-ui/src/shared/components/OverviewLocationCard/style.scss index 226f40488..5bef355ea 100644 --- a/new-ui/src/shared/components/OverviewLocationCard/style.scss +++ b/new-ui/src/shared/components/OverviewLocationCard/style.scss @@ -18,6 +18,9 @@ > .right { margin-left: auto; + display: flex; + align-items: center; + column-gap: var(--spacing-xs); } button { From fcd3cd9e2609782f1c44db3b341806fd62d38d72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Fri, 19 Jun 2026 13:53:01 +0200 Subject: [PATCH 062/155] Update client tray icon (#979) * update assets and update logic * fix theme extraction for non windows platform --- resources-linux/defguard-client.spec | 18 ++++++++--- .../resources/icons/tray-32x32-active.png | Bin 646 -> 0 bytes .../resources/icons/tray/blue-connected.png | Bin 0 -> 633 bytes src-tauri/resources/icons/tray/blue.png | Bin 0 -> 484 bytes .../resources/icons/tray/dark-connected.png | Bin 0 -> 1091 bytes src-tauri/resources/icons/tray/dark.png | Bin 0 -> 1047 bytes .../resources/icons/tray/white-connected.png | Bin 0 -> 648 bytes .../icons/{tray-32x32.png => tray/white.png} | Bin src-tauri/src/bin/defguard-client.rs | 8 +++++ src-tauri/src/tray.rs | 19 +++++++++-- src-tauri/tauri.conf.json | 30 ++++-------------- src-tauri/tauri.windows.conf.json | 6 ++-- 12 files changed, 47 insertions(+), 34 deletions(-) delete mode 100644 src-tauri/resources/icons/tray-32x32-active.png create mode 100644 src-tauri/resources/icons/tray/blue-connected.png create mode 100644 src-tauri/resources/icons/tray/blue.png create mode 100644 src-tauri/resources/icons/tray/dark-connected.png create mode 100644 src-tauri/resources/icons/tray/dark.png create mode 100644 src-tauri/resources/icons/tray/white-connected.png rename src-tauri/resources/icons/{tray-32x32.png => tray/white.png} (100%) diff --git a/resources-linux/defguard-client.spec b/resources-linux/defguard-client.spec index 002ad0100..479157073 100644 --- a/resources-linux/defguard-client.spec +++ b/resources-linux/defguard-client.spec @@ -14,15 +14,19 @@ Desktop client for managing WireGuard VPN connections %{__mkdir} -p %{buildroot}/%{_bindir} %{__mkdir} -p %{buildroot}/%{_sbindir} %{__mkdir} -p %{buildroot}/%{_prefix}/lib/systemd/system -%{__mkdir} -p %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons +%{__mkdir} -p %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray %{__mkdir} -p %{buildroot}/%{_datadir}/applications %{__mkdir} -p %{buildroot}/%{_datadir}/icons/hicolor/128x128/apps %{__mkdir} -p %{buildroot}/%{_datadir}/icons/hicolor/256x256@2/apps %{__mkdir} -p %{buildroot}/%{_datadir}/icons/hicolor/32x32/apps %{__install} -m 755 src-tauri/target/release/defguard-client %{buildroot}/%{_bindir}/ %{__install} -m 755 src-tauri/target/release/defguard-service %{buildroot}/%{_sbindir}/ -%{__install} -m 644 src-tauri/target/release/resources/icons/tray-32x32.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray-32x32.png -%{__install} -m 644 src-tauri/target/release/resources/icons/tray-32x32-active.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-active.png +%{__install} -m 644 src-tauri/target/release/resources/icons/tray/blue.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray/blue.png +%{__install} -m 644 src-tauri/target/release/resources/icons/tray/blue-connected.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray/blue-connected.png +%{__install} -m 644 src-tauri/target/release/resources/icons/tray/dark.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray/dark.png +%{__install} -m 644 src-tauri/target/release/resources/icons/tray/dark-connected.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray/dark-connected.png +%{__install} -m 644 src-tauri/target/release/resources/icons/tray/white.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray/white.png +%{__install} -m 644 src-tauri/target/release/resources/icons/tray/white-connected.png %{buildroot}/%{_prefix}/lib/defguard-client/resources/icons/tray/white-connected.png %{__install} -m 644 resources-linux/defguard-service.service %{buildroot}/%{_prefix}/lib/systemd/system/ %{__install} -m 644 resources-linux/defguard-client.desktop %{buildroot}/%{_datadir}/applications/defguard-client.desktop %{__install} -m 644 src-tauri/icons/128x128.png %{buildroot}/%{_datadir}/icons/hicolor/128x128/apps/defguard-client.png @@ -51,8 +55,12 @@ systemctl daemon-reload %files %{_bindir}/defguard-client %{_sbindir}/defguard-service -%{_prefix}/lib/defguard-client/resources/icons/tray-32x32.png -%{_prefix}/lib/defguard-client/resources/icons/tray-32x32-active.png +%{_prefix}/lib/defguard-client/resources/icons/tray/blue.png +%{_prefix}/lib/defguard-client/resources/icons/tray/blue-connected.png +%{_prefix}/lib/defguard-client/resources/icons/tray/dark.png +%{_prefix}/lib/defguard-client/resources/icons/tray/dark-connected.png +%{_prefix}/lib/defguard-client/resources/icons/tray/white.png +%{_prefix}/lib/defguard-client/resources/icons/tray/white-connected.png %{_prefix}/lib/systemd/system/defguard-service.service %{_datadir}/applications/defguard-client.desktop %{_datadir}/icons/hicolor/128x128/apps/defguard-client.png diff --git a/src-tauri/resources/icons/tray-32x32-active.png b/src-tauri/resources/icons/tray-32x32-active.png deleted file mode 100644 index b9aa2784e69abce328eed5f875f9b9837fa85d32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmV;10(t$3P)+oFrZl9How4iu1DqAgj5${LxVdtl1fymM` z0rE3YWn`@w2N}D7{0p=NQ@2H*o4CM;03X=!f~CRlBuhXrw@R6gRD1$JPG@e7TM{E6 znp7Kb3QHwR;NR5&98e@E9(58+LzM+ME?nWJG|wqqk$4Qy!4*v!R^%8-nt+@QWrn<7 zOpAaoHNX*+IK1XbZgJ8eP}9Uy&9n~mk_9W+Nc}!9mFN~dOS>D^c_j0@d}FeR%WL90 ziKSr%7z3vH{Z&QD{S|ykSHeG?5%U3HFDU&?2-vy`J6Ex1Fw6sVcoR6k-m;#>g2W%L zw{j`w>1>!wlmwu75W@+uEIoP$HbCMitQSNj5EO)`3gsjj;IOc7Ed?m`F1wt^J%0xwvV#5Mkd0i27BI>H*b&qH!k-ATS(p?+}j#4pNe1VAO;_zhbQ! zVc#ck&+`$0vY>=)s7Lu73$wr(@DZ}_0-5l}^BX9hB<0+E+*mHSDtV6>wl#ZRfOY@J z6{zy9%Nz@Sk9c61_X3bOz_2DA@C94~Q@H(8K%ejn(hfjY2_+C#2`S~qImqsy_%%Xr gaYV&o@$fCc0HKMNv+P;K@`Qwt-3iVE#lrT4h~vya1mP&6dbgmyB&0LXhAn0E#jbqPzON=#V_z3 zgmCSpca07F$Tg44cmGF{h9;J8EdwP2YB~eMmYGrk$#x157T5t}?Gm6}!U4ZBMH-nL7{qLDpqlmVJ4XF|g$El{Jp}mo&7bEN~NIRDcs~IhWwHnsG(g=N7A`o0^`E zD~hcaAa6KgkqoK1Y*3ad3y4x+>ZM7HZR(z3n}`9i&^)M0ZB@1v6t@@=Fh?`1F;HQj z(X+q_Dw`%gBeJ=Rtrl2SFG1a>0?y;-YkdeTbOx zxUl#afR~FPnr<*B1hzCTEWRx;r7>>^LTzOaNHlvA))Ua9Ik%hjxXXnlP!Qg0%=-aP zeC}f~rkdS^>RI3ze0$70M<#sm`AWJU+JP^nc=0o;jRtexz^e2+$2zT?5mn{D(oaK( z*hRIdyxE3<$;rad78CdBt z#~du2ja@yudlCo{ICwnWi$Js$3t!m-<=O-~===&qYrd2~(DVX*OGWcbjP5A}DBM3D zHGHE-3ykp9IFpq?&BEcf_}oWe&XEc;$>UtCXQ* zRiF_uB|yp6E6M5pBSn$eVr99>@+2vS+yr>T3771FS!qztDgwdID7{ahflu~~$|48C zMK2x`^G)!bg)Alnwg|J#fh)e5&H_rR3L*Xmc(?~k0LHX>~%WFsIK4!#F=%EDqIfy{IoOb2CQ zG0Op7>!V1!K@?GQ5bzJwfMRV0bg* zH#2)@62jei*(?n2?{2@DZ{~gPZ9zmryC+GK(8E)NHMEnaY1<#}3On=EVU-}Af4CzK zfYc(Gon+yT^zF_WTET;+RlKvK3}~Kb%|wdK65P0DB)nq|R5Z_sa#)y$Nd$eatOsXu z%i96X=^~h&1c>H2u+oh_#yYnMOPDB-GJrNO2aIk&)c{r!A0S48L8Qv)Uvuz>9;Q>+Eb0tRG6B!^v~Q8c9$FR$a}MXL!84Plzb z3fPgGtZE1`!ul{$F^X~3cEk2}fr^S2m{ogG9Rk(!L~#H#kH<*kSRcSx=hWe%riLTc zFz(y71Ge3wZ#8WJFb`*jFkZ>Vn2#%PW{9IX767geLlHR-2gnZ=qNWW3q^q1~ zeI5qAAWZ{M`C$}eEj}>;;~bUYjpCPRaw%r6E$>^^kp<>+OY<^&Dj>r&IUcM{Y(%lwXS779!96TxTGAt`tC}f-4R@H z>UuY{-JlYk-H4?}Dc;}ZHEo|5^>R`VsqAj3$8vvmOR{TvFFLT?1-S07FRYax$Ok|Upabv#?T12!uD(gOc3|?v-LGhFwfWBv z*md9Y_7ya1`Iaz_k$w{<1*=q9L9^1662gfYG?zBLK)HPjJ2su%`?m4Z%i2^d6$N!_ zLX4Hp4s=pN4dzIugrBC9`#;x%iWD5Yu%X`i);r$mUiepl0RX;%Vr^hXYz6=T002ov JPDHLkV1mVn@!S9a literal 0 HcmV?d00001 diff --git a/src-tauri/resources/icons/tray/dark.png b/src-tauri/resources/icons/tray/dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2280d0a9baaafa5630baf24b8bfd3c95ad9d38e5 GIT binary patch literal 1047 zcmV+y1nB#TP)bKnz_w9|s&TE&)0q z9fS^`gHXYR3V;gWDoCyaI!HPo9V8{VfR%LbNp{GeBbkfwjAm^)V@dBxZ#RXRrLV5> zc%1&@s$ey5mdoXrKP=PtTx-}g+5R7XO9BA3027e9u&xszryoG}6+y^zQo@aUJk$398>>hXB7n84 z1RQRJS|HesnULcZD!fHN+R7ovI|N?@3i%)e4rxLJv;}!)OQGT#CBLBXH`8b~O*TSe zQ@no)G@=2uiypwo2yZ39?c7AKvA&6Dzzj49IenV*HDI5sO3ISEp@3DO!JKPA`hY-n zKrCSr_Y9UrYf*U+k*)7&3izR<4s!~~i7t9Tx$49dQ=7-^haXATZId3404p@zRvMM* z4Juur;u)%(!M9M!H>4%2Lw^l=<{crRp=|0+#j2iA_0;Ispaw{cfda99ZBj#Zsgg|13r2m?WxGRXhHPjb%sJd<@Vj@}B2s%YlFiJFbM$$xyZcfB@00mpV{$-b!m+AcC zBAuWAOlN0j)ye7U?BwLchQlAQf%W^ezV&EjIqQ|Zsw_(@%EF4G81MW3VcW5D?rR-~ z61l~OgEL_?CaPZ<&xR>I@GKAr_`ie>#t?FwcDvgAvrxn|LVD9C)?49x7tnsg;k9rl zm!l~d4u@$l7^ME7p8$30^?IqKm1QbuMG=;YXRLrdnXmkRSfs0?DKPsykXU;-X?&l5 zy?kBrsLtxKzQ8krd$aHR#XhxS)$x;t(Vd{iI_WLi9Q@)IyxB$gtLv`-0{~i84HP0e Rz}El(002ovPDHLkV1k;z=oSC~ literal 0 HcmV?d00001 diff --git a/src-tauri/resources/icons/tray/white-connected.png b/src-tauri/resources/icons/tray/white-connected.png new file mode 100644 index 0000000000000000000000000000000000000000..d999356bb6820e4d2b5bfa28e157682880326d01 GIT binary patch literal 648 zcmV;30(bq1P)KooAoK`2PY%_$;? zV_jVQq2iz*inzITR+M&dud5&xL?^L=py1L$_ZD@pd&P=4=pe0wgM-HJl@~nE%O%$& z;De7lF1dT(z2C%g94Da@%d!%tf-_Ut*W$VM-L6DD(tzSzP_|lhBF>Lw{LYWd0)eGt z0_10)#7HGV9AxYQ@-NU7Ox+ZHZsGzX0(@Z2@s=9D6DZi$S5 zXi{y!DJ&H&fqz#Aa6p!zc+`q44OJH4xTpv>rFmN6ipXPt4lZiauqek!)CA;gC@|#p zY+M9fDFe2k#O5_ea*G`YfwCr^%BFRolPp-mM(Xz&sYEyES=`;Q$|IS-!Z#+1RCrB% zC$cn50z<$!zrU;~xxa!h>Pq;hGh*HY?0BW02?0x2Ve{8(6BuRzI=l{??@k>&iv@{4 zTyN!4%+qNH+qB0{1*004NLc$cAc=-!VT6oBqJukqz z`{N3f_|^rE1-C~$FwA=aNbF%)kq-C*E`c%J{>h_HxCLnoAglNi@T-KBa>E>CcToHq iptsnfV!wF!7GMA^5Sr+bT7*9U0000 Result<(), Error> { return Ok(()); }; - let mut resource_str = String::from("resources/icons/tray-32x32"); + let mut resource_str = String::from("resources/icons/tray/"); + #[cfg(windows)] + resource_str.push_str("blue"); + #[cfg(not(windows))] + { + use tauri::Theme; + let theme = app_handle + .webview_windows() + .into_values() + .next() + .and_then(|w| w.theme().ok()); + resource_str.push_str(match theme { + Some(Theme::Dark) => "dark", + _ => "light", + }); + } let active_connections = ACTIVE_CONNECTIONS.lock().await; if !active_connections.is_empty() { - resource_str.push_str("-active"); + resource_str.push_str("-connected"); } resource_str.push_str(".png"); debug!("Trying to load the tray icon from {resource_str}"); diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index eeaae2111..c29e904f2 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -8,10 +8,7 @@ "active": true, "category": "Utility", "copyright": "Defguard", - "targets": [ - "deb", - "app" - ], + "targets": ["deb", "app"], "externalBin": [], "icon": [ "icons/32x32.png", @@ -32,10 +29,7 @@ "./resources-windows/fragments/service.wxs", "./resources-windows/fragments/provisioning.wxs" ], - "componentRefs": [ - "DefguardServiceFragment", - "ProvisioningScriptFragment" - ], + "componentRefs": ["DefguardServiceFragment", "ProvisioningScriptFragment"], "template": "./resources-windows/msi/main.wxs" } }, @@ -48,9 +42,7 @@ }, "minimumSystemVersion": "13.5" }, - "resources": [ - "resources/icons/*" - ], + "resources": ["resources/icons/tray/*"], "shortDescription": "Defguard desktop client", "longDescription": "Defguard desktop client", "linux": { @@ -65,9 +57,7 @@ "../control/prerm": "../resources-linux/prerm", "../control/postrm": "../resources-linux/postrm" }, - "depends": [ - "desktop-file-utils" - ] + "depends": ["desktop-file-utils"] }, "rpm": { "files": { @@ -76,9 +66,7 @@ "/usr/sbin/defguard-service": "target/release/defguard-service", "/lib/systemd/system/defguard-service.service": "../resources-linux/defguard-service.service" }, - "depends": [ - "desktop-file-utils" - ], + "depends": ["desktop-file-utils"], "postInstallScript": "../resources-linux/postinst", "preRemoveScript": "../resources-linux/prerm", "postRemoveScript": "../resources-linux/postrm" @@ -91,9 +79,7 @@ "version": "2.1.0", "app": { "security": { - "capabilities": [ - "main-capability" - ], + "capabilities": ["main-capability"], "csp": null }, "windows": [] @@ -101,9 +87,7 @@ "plugins": { "deep-link": { "desktop": { - "schemes": [ - "defguard" - ] + "schemes": ["defguard"] } } } diff --git a/src-tauri/tauri.windows.conf.json b/src-tauri/tauri.windows.conf.json index 826c27e7d..e7d92d08f 100644 --- a/src-tauri/tauri.windows.conf.json +++ b/src-tauri/tauri.windows.conf.json @@ -1,12 +1,10 @@ { "bundle": { - "targets": [ - "msi" - ], + "targets": ["msi"], "resources": [ "resources-windows/binaries/*", "resources-windows/scripts/*", - "resources/icons/*" + "resources/icons/tray/*" ] } } From 335690690e031f152d83de51580ba4ba1d0cf627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Mon, 22 Jun 2026 10:18:31 +0200 Subject: [PATCH 063/155] Add tunnel wizard (#981) * manual wizard flow * import tunnel config file * fix mfa preference desync after polling change * resolve conflict * clippy fix * Update session_state.rs --- .../CompactLocationsPage.tsx | 32 ++-- .../components/InstanceSwitcher.tsx | 14 +- .../pages/full/OverviewPage/OverviewPage.tsx | 32 ++-- .../OverviewSelection/OverviewSelection.tsx | 11 +- .../hooks/useTunnelWizardStore.tsx | 90 +++++++++-- .../AdvancedSettingsStep.tsx | 113 ++++++++++++- .../steps/FinishStep/FinishStep.tsx | 41 ++++- .../steps/FinishStep/assets/banner.png | Bin 0 -> 143811 bytes .../steps/FinishStep/style.scss | 28 ++++ .../GeneralInformationStep.tsx | 151 +++++++++++++++++- .../steps/GeneralInformationStep/style.scss | 7 + .../steps/KeysStep/KeysStep.tsx | 110 ++++++++++++- .../steps/KeysStep/style.scss | 9 ++ .../steps/VpnServerStep/VpnServerStep.tsx | 137 +++++++++++++++- new-ui/src/routes/compact/index.tsx | 10 +- new-ui/src/routes/full/_default/overview.tsx | 8 +- new-ui/src/shared/components/Split/Split.tsx | 22 +++ .../wizard/WizardPage/WizardPage.tsx | 20 ++- new-ui/src/shared/rust-api/api.ts | 9 +- new-ui/src/shared/rust-api/types.ts | 7 +- .../src/shared/utils/generateWGKeys copy.ts | 9 ++ new-ui/src/shared/utils/patterns.ts | 85 ++++++++++ src-tauri/core/src/events.rs | 2 + .../enterprise/config-sync/src/commands.rs | 4 +- src-tauri/src/bin/defguard-client.rs | 33 +++- src-tauri/src/commands.rs | 10 +- src-tauri/src/enterprise/periodic/config.rs | 8 +- src-tauri/src/session_state.rs | 74 ++++++++- 28 files changed, 983 insertions(+), 93 deletions(-) create mode 100644 new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/assets/banner.png create mode 100644 new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/style.scss create mode 100644 new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/style.scss create mode 100644 new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/style.scss create mode 100644 new-ui/src/shared/components/Split/Split.tsx create mode 100644 new-ui/src/shared/utils/generateWGKeys copy.ts create mode 100644 new-ui/src/shared/utils/patterns.ts diff --git a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx index 8bba51700..002408fca 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx +++ b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx @@ -27,34 +27,42 @@ export const CompactLocationsPage = () => { const routeData = useLoaderData({ from: '/compact/' }); + const { data: instances } = useQuery(getInstancesQueryOptions); + + const allInstances = instances ?? routeData.instances; + const allTunnels = routeData.tunnels; + const queryInstanceId = useMemo(() => { if (!isPresent(selection)) return routeData.instances[0].id; - if (selection.kind === 'instance') return selection.data.id; - return selection.data.instance_id; - }, [selection, routeData.instances]); + if (selection.kind === 'instance') return selection.id; + return ( + allTunnels.find((t) => t.id === selection.id)?.instance_id ?? + routeData.instances[0].id + ); + }, [selection, routeData.instances, allTunnels]); const { data: locations } = useQuery(getLocationsQueryOptions(queryInstanceId)); - const { data: instances } = useQuery(getInstancesQueryOptions); - const instanceInfo = useMemo(() => { - const allInstances = instances ?? routeData.instances; if (!isPresent(selection)) return allInstances[0]; if (selection.kind === 'instance') - return allInstances.find((i) => i.id === selection.data.id); - return allInstances.find((i) => i.id === selection.data.instance_id); - }, [selection, instances, routeData.instances]); + return allInstances.find((i) => i.id === selection.id); + const tunnel = allTunnels.find((t) => t.id === selection.id); + return tunnel ? allInstances.find((i) => i.id === tunnel.instance_id) : undefined; + }, [selection, allInstances, allTunnels]); const displayedLocations = useMemo(() => { if (!isPresent(selection) || selection.kind === 'instance') { return locations ?? routeData.locations; } - return [selection.data]; - }, [selection, locations, routeData.locations]); + const tunnel = allTunnels.find((t) => t.id === selection.id); + return tunnel ? [tunnel] : []; + }, [selection, locations, routeData.locations, allTunnels]); useEffect(() => { + if (selection?.kind === 'tunnel') return; if (selection === null || instanceInfo === undefined) { - setViewSelection({ kind: 'instance', data: routeData.instances[0] }); + setViewSelection({ kind: 'instance', id: routeData.instances[0].id }); } }, [routeData.instances, instanceInfo, selection, setViewSelection]); diff --git a/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx b/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx index 87eff3ec2..1394885b7 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx +++ b/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx @@ -28,7 +28,7 @@ export const InstanceSwitcher = () => { options: instances.map((instance) => ({ key: instance.id, label: instance.name, - value: { kind: 'instance', data: instance }, + value: { kind: 'instance', id: instance.id }, })), }; @@ -38,7 +38,7 @@ export const InstanceSwitcher = () => { options: tunnels.map((tunnel) => ({ key: tunnel.id ?? tunnel.name, label: tunnel.name, - value: { kind: 'tunnel', data: tunnel }, + value: { kind: 'tunnel', id: tunnel.id }, })), }; @@ -54,13 +54,9 @@ export const InstanceSwitcher = () => { if (!isPresent(selectedInstance)) return undefined; for (const group of groups) { const found = group.options.find((o) => { - if (selectedInstance.kind === 'instance' && o.value.kind === 'instance') { - return o.value.data.id === selectedInstance.data.id; - } - if (selectedInstance.kind === 'tunnel' && o.value.kind === 'tunnel') { - return o.value.data.id === selectedInstance.data.id; - } - return false; + return ( + o.value.kind === selectedInstance.kind && o.value.id === selectedInstance.id + ); }); if (found) return found; } diff --git a/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx b/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx index e7b294820..c71f1f8a5 100644 --- a/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx +++ b/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx @@ -21,11 +21,27 @@ export const OverviewPage = () => { const { instances, tunnels } = useAppData(); const { viewSelection: selection } = useAppData(); + const selectedTunnel = useMemo( + () => + selection?.kind === 'tunnel' + ? tunnels.find((t) => t.id === selection.id) + : undefined, + [selection, tunnels], + ); + + const selectedInstance = useMemo( + () => + selection?.kind === 'instance' + ? instances.find((i) => i.id === selection.id) + : undefined, + [selection, instances], + ); + const queryInstanceId = useMemo(() => { if (!isPresent(selection)) return instances[0].id; - if (selection.kind === 'instance') return selection.data.id; - return selection.data.instance_id; - }, [selection, instances]); + if (selection.kind === 'instance') return selection.id; + return selectedTunnel?.instance_id ?? instances[0].id; + }, [selection, instances, selectedTunnel]); const { data: locations } = useQuery(getLocationsQueryOptions(queryInstanceId)); @@ -33,8 +49,8 @@ export const OverviewPage = () => { if (!isPresent(selection) || selection.kind === 'instance') { return locations ?? []; } - return [selection.data]; - }, [selection, locations]); + return selectedTunnel ? [selectedTunnel] : []; + }, [selection, locations, selectedTunnel]); return ( @@ -53,10 +69,8 @@ export const OverviewPage = () => {
    {displayedLocations.map((location) => { - let instance: InstanceInfo | undefined; - if (selection?.kind === 'instance') { - instance = selection.data; - } + const instance: InstanceInfo | undefined = + selection?.kind === 'instance' ? selectedInstance : undefined; return ( { const isSelected = (candidate: OverviewViewSelection): boolean => { if (!selection) return false; - if (candidate.kind !== selection.kind) return false; - return candidate.data.id === selection.data.id; + return candidate.kind === selection.kind && candidate.id === selection.id; }; return ( @@ -44,10 +43,10 @@ export const OverviewSelection = ({ instances, tunnels }: Props) => {

    Instances

    {instances.map((instance) => { - const value: OverviewViewSelection = { kind: 'instance', data: instance }; + const value: OverviewViewSelection = { kind: 'instance', id: instance.id }; return ( setSelection(value)} @@ -62,10 +61,10 @@ export const OverviewSelection = ({ instances, tunnels }: Props) => {

    Tunnels

    {tunnels.map((tunnel) => { - const value: OverviewViewSelection = { kind: 'tunnel', data: tunnel }; + const value: OverviewViewSelection = { kind: 'tunnel', id: tunnel.id }; return ( setSelection(value)} diff --git a/new-ui/src/pages/full/TunnelWizardPage/hooks/useTunnelWizardStore.tsx b/new-ui/src/pages/full/TunnelWizardPage/hooks/useTunnelWizardStore.tsx index 6fd26bd03..2567a0ac8 100644 --- a/new-ui/src/pages/full/TunnelWizardPage/hooks/useTunnelWizardStore.tsx +++ b/new-ui/src/pages/full/TunnelWizardPage/hooks/useTunnelWizardStore.tsx @@ -3,35 +3,95 @@ import { TunnelWizardStep, type TunnelWizardStepValue } from '../types'; type StoreValues = { activeStep: TunnelWizardStepValue; + tunnelData: { + name: string; + pubkey: string; + prvkey: string; + address: string; + server_pubkey: string; + preshared_key: string; + allowed_ips?: string; + endpoint: string; + dns?: string; + persistent_keep_alive: number; + route_all_traffic: boolean; + pre_up?: string; + post_up?: string; + pre_down?: string; + post_down?: string; + }; }; const defaults: StoreValues = { activeStep: TunnelWizardStep.GeneralInformation, + tunnelData: { + name: '', + address: '', + endpoint: '', + persistent_keep_alive: 25, + preshared_key: '', + prvkey: '', + pubkey: '', + route_all_traffic: false, + server_pubkey: '', + allowed_ips: '', + dns: '', + post_down: '', + post_up: '', + pre_down: '', + pre_up: '', + }, +}; + +const nextStep = (step: TunnelWizardStepValue): TunnelWizardStepValue => { + switch (step) { + case TunnelWizardStep.GeneralInformation: + return TunnelWizardStep.Keys; + case TunnelWizardStep.Keys: + return TunnelWizardStep.VpnServer; + case TunnelWizardStep.VpnServer: + return TunnelWizardStep.AdvancedSettings; + case TunnelWizardStep.AdvancedSettings: + return TunnelWizardStep.Finish; + default: + return step; + } }; -const STEPS: TunnelWizardStepValue[] = [ - TunnelWizardStep.GeneralInformation, - TunnelWizardStep.Keys, - TunnelWizardStep.VpnServer, - TunnelWizardStep.AdvancedSettings, - TunnelWizardStep.Finish, -]; +const prevStep = (step: TunnelWizardStepValue): TunnelWizardStepValue => { + switch (step) { + case TunnelWizardStep.Keys: + return TunnelWizardStep.GeneralInformation; + case TunnelWizardStep.VpnServer: + return TunnelWizardStep.Keys; + case TunnelWizardStep.AdvancedSettings: + return TunnelWizardStep.VpnServer; + case TunnelWizardStep.Finish: + return TunnelWizardStep.AdvancedSettings; + default: + return step; + } +}; interface Store extends StoreValues { - next: () => void; - back: () => void; + next: (values?: Partial) => void; + back: (values?: Partial) => void; reset: () => void; } export const useTunnelWizardStore = create()((set, get) => ({ ...defaults, - next: () => { - const idx = STEPS.indexOf(get().activeStep); - if (idx < STEPS.length - 1) set({ activeStep: STEPS[idx + 1] }); + next: (tunnelData) => { + set({ + activeStep: nextStep(get().activeStep), + tunnelData: { ...get().tunnelData, ...tunnelData }, + }); }, - back: () => { - const idx = STEPS.indexOf(get().activeStep); - if (idx > 0) set({ activeStep: STEPS[idx - 1] }); + back: (tunnelData) => { + set({ + activeStep: prevStep(get().activeStep), + tunnelData: { ...get().tunnelData, ...tunnelData }, + }); }, reset: () => set(defaults), })); diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/AdvancedSettingsStep/AdvancedSettingsStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/AdvancedSettingsStep/AdvancedSettingsStep.tsx index 5ade7c89b..51375de12 100644 --- a/new-ui/src/pages/full/TunnelWizardPage/steps/AdvancedSettingsStep/AdvancedSettingsStep.tsx +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/AdvancedSettingsStep/AdvancedSettingsStep.tsx @@ -1 +1,112 @@ -export const AdvancedSettingsStep = () =>
    Advanced Settings
    ; +import { useMutation } from '@tanstack/react-query'; +import { useMemo } from 'react'; +import z from 'zod'; +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../shared/components/Controls/Controls'; +import { Divider } from '../../../../../shared/components/Divider/Divider'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { Split } from '../../../../../shared/components/Split/Split'; +import { useAppForm } from '../../../../../shared/form'; +import { formChangeLogic } from '../../../../../shared/formLogic'; +import { api } from '../../../../../shared/rust-api/api'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { useTunnelWizardStore } from '../../hooks/useTunnelWizardStore'; + +const formSchema = z.object({ + pre_up: z.string(), + post_up: z.string(), + pre_down: z.string(), + post_down: z.string(), +}); + +type FormFields = z.infer; + +export const AdvancedSettingsStep = () => { + const initData = useTunnelWizardStore((s) => s.tunnelData); + + const { mutateAsync } = useMutation({ mutationFn: api.saveTunnel }); + + const defaultValues = useMemo( + (): FormFields => ({ + pre_up: initData.pre_up ?? '', + post_up: initData.post_up ?? '', + pre_down: initData.pre_down ?? '', + post_down: initData.post_down ?? '', + }), + [initData.pre_up, initData.post_up, initData.pre_down, initData.post_down], + ); + + const form = useAppForm({ + defaultValues, + validationLogic: formChangeLogic, + validators: { + onSubmit: formSchema, + onChange: formSchema, + }, + onSubmit: async ({ value }) => { + const storeValues = useTunnelWizardStore.getState().tunnelData; + const toSend = { ...storeValues, ...value }; + await mutateAsync(toSend); + useTunnelWizardStore.getState().next(); + }, + }); + + return ( +
    +
    +

    Advanced settings (optional)

    + +

    + Define optional shell commands to run before or after the tunnel interface is + brought up or down. Useful for custom routing rules, firewall adjustments, or + other network configuration. +

    +
    + +
    { + e.stopPropagation(); + e.preventDefault(); + form.handleSubmit(); + }} + > + + + + {(field) => } + + + {(field) => } + + + + + + {(field) => } + + + {(field) => } + + + +
    + +
    + +
    + ); +}; diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/FinishStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/FinishStep.tsx index ae8ed27e8..ef3a656eb 100644 --- a/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/FinishStep.tsx +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/FinishStep.tsx @@ -1 +1,40 @@ -export const FinishStep = () =>
    Finish
    ; +import './style.scss'; + +import { useNavigate } from '@tanstack/react-router'; +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { useTunnelWizardStore } from '../../hooks/useTunnelWizardStore'; +import bannerSrc from './assets/banner.png'; + +export const FinishStep = () => { + const navigate = useNavigate(); + + return ( +
    +
    + +
    +

    Your WireGuard tunnel added successfully

    +

    You can now connect this device, check its status and view statistics.

    +
    +
    +
    + ); +}; diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/assets/banner.png b/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/assets/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..001974a7492f15361abed611595f828450940bf3 GIT binary patch literal 143811 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

    REGss=YWmR&NR-tm|R6%oa}?C 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®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
    kNU&&+_C_j$3}x3GXW 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 MDo>QF6|KVl538iStN;K2 literal 0 HcmV?d00001 diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/style.scss b/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/style.scss new file mode 100644 index 000000000..acc13e86c --- /dev/null +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/style.scss @@ -0,0 +1,28 @@ +#finish-step { + .banner { + box-sizing: border-box; + padding-bottom: var(--spacing-3xl); + } + + h1 { + font: var(--t-h4); + color: var(--fg-white-100); + padding-bottom: var(--spacing-sm); + user-select: none; + } + + > p { + user-select: none; + font: var(--t-small-400); + color: var(--fg-white-70); + padding-bottom: var(--spacing-lg); + } + + > .actions { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-md); + } +} diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx index 367887bb5..e686e7484 100644 --- a/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx @@ -1 +1,150 @@ -export const GeneralInformationStep = () =>
    General Information
    ; +import './style.scss'; +import { useMutation } from '@tanstack/react-query'; +import { useNavigate } from '@tanstack/react-router'; +import { open } from '@tauri-apps/plugin-dialog'; +import { readFile } from '@tauri-apps/plugin-fs'; +import { useMemo, useRef } from 'react'; +import { Subject } from 'rxjs'; +import z from 'zod'; +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../shared/components/Controls/Controls'; +import { Divider } from '../../../../../shared/components/Divider/Divider'; +import { IconKind } from '../../../../../shared/components/Icon'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { TooltipButton } from '../../../../../shared/components/TooltipButton/TooltipButton'; +import { useAppForm } from '../../../../../shared/form'; +import { formChangeLogic } from '../../../../../shared/formLogic'; +import { api } from '../../../../../shared/rust-api/api'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { patternValidIp, patternValidIpV6 } from '../../../../../shared/utils/patterns'; +import { useTunnelWizardStore } from '../../hooks/useTunnelWizardStore'; + +const formSchema = z.object({ + name: z.string().trim().min(1, 'Field is required'), + address: z.string().refine((value) => { + if (value) { + const ips = value.split(',').map((ip) => ip.trim()); + return ips.every((ip) => patternValidIp.test(ip) || patternValidIpV6.test(ip)); + } + return false; + }, 'Field is invalid'), +}); + +type FormFields = z.infer; + +export const GeneralInformationStep = () => { + const navigate = useNavigate(); + const initData = useTunnelWizardStore((s) => s.tunnelData); + + const { mutate: importTunnelFile, isPending } = useMutation({ + mutationFn: async () => { + const filePath = await open({ + multiple: false, + directory: false, + filters: [{ name: 'wg-conf', extensions: ['conf', 'txt', 'config'] }], + }); + if (filePath) { + const decoder = new TextDecoder(); + const fileContents = await readFile(filePath); + const fileString = decoder.decode(fileContents); + const config = await api.parseTunnelConfig({ + filename: filePath, + config: fileString, + }); + const current = useTunnelWizardStore.getState().tunnelData; + useTunnelWizardStore.setState({ tunnelData: { ...current, ...config } }); + if (config.name) { + form.setFieldValue('name', config.name); + } + if (config.address) { + form.setFieldValue('address', config.address); + } + importTooltipRef.current.next(); + } + }, + }); + + const importTooltipRef = useRef(new Subject()); + + const defaultValues = useMemo( + (): FormFields => ({ + address: initData.address, + name: initData.name, + }), + [initData.address, initData.name], + ); + + const form = useAppForm({ + defaultValues, + validationLogic: formChangeLogic, + validators: { + onSubmit: formSchema, + onChange: formSchema, + }, + onSubmit: ({ value }) => { + useTunnelWizardStore.getState().next(value); + }, + }); + + return ( +
    +
    +

    General information

    + +

    {`Upload your config file (optional) and we'll securely extract the connection settings for you. This is the fastest and recommended way to get started.`}

    +
    + { + importTunnelFile(); + }, + }} + tooltipText="Config file applied" + tooltipTrigger={importTooltipRef.current} + /> +
    +
    + +
    { + e.stopPropagation(); + e.preventDefault(); + form.handleSubmit(); + }} + > + + + {(field) => } + + + + {(field) => } + + +
    + +
    + +

    + ); +}; diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/style.scss b/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/style.scss new file mode 100644 index 000000000..d4a26a02b --- /dev/null +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/style.scss @@ -0,0 +1,7 @@ +#general-info-step { + header { + .actions { + padding-top: var(--spacing-xl); + } + } +} diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/KeysStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/KeysStep.tsx index d3298b2b5..b32b7c987 100644 --- a/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/KeysStep.tsx +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/KeysStep.tsx @@ -1 +1,109 @@ -export const KeysStep = () =>
    Keys
    ; +import './style.scss'; +import { useMemo } from 'react'; +import z from 'zod'; +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../shared/components/Controls/Controls'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { TooltipButton } from '../../../../../shared/components/TooltipButton/TooltipButton'; +import { useAppForm } from '../../../../../shared/form'; +import { formChangeLogic } from '../../../../../shared/formLogic'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { generateWGKeys } from '../../../../../shared/utils/generateWGKeys'; +import { patternValidWireguardKey } from '../../../../../shared/utils/patterns'; +import { useTunnelWizardStore } from '../../hooks/useTunnelWizardStore'; + +const formSchema = z.object({ + prvkey: z + .string() + .refine((v) => patternValidWireguardKey.test(v), 'Invalid WireGuard key'), + pubkey: z + .string() + .refine((v) => patternValidWireguardKey.test(v), 'Invalid WireGuard key'), +}); + +type FormFields = z.infer; + +export const KeysStep = () => { + const initData = useTunnelWizardStore((s) => s.tunnelData); + + const defaultValues = useMemo( + (): FormFields => ({ + prvkey: initData.prvkey, + pubkey: initData.pubkey, + }), + [initData.prvkey, initData.pubkey], + ); + + const form = useAppForm({ + defaultValues, + validationLogic: formChangeLogic, + validators: { + onSubmit: formSchema, + onChange: formSchema, + }, + onSubmit: ({ value }) => { + useTunnelWizardStore.getState().next(value); + }, + }); + + return ( +
    +
    +

    Keys

    + +

    {`Upload your config file (optional) and we'll securely extract the connection settings for you. This is the fastest and recommended way to get started.`}

    +
    + +
    { + e.stopPropagation(); + e.preventDefault(); + form.handleSubmit(); + }} + > + + + {(field) => } + + + + {(field) => } + + +
    + { + const pair = generateWGKeys(); + form.setFieldValue('prvkey', pair.privateKey); + form.setFieldValue('pubkey', pair.publicKey); + }, + }} + tooltipText="New keys set" + /> +
    +
    +
    + +
    + +
    + ); +}; diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/style.scss b/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/style.scss new file mode 100644 index 000000000..385f8b46a --- /dev/null +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/style.scss @@ -0,0 +1,9 @@ +#keys-step { + .actions { + width: 100%; + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-end; + } +} diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/VpnServerStep/VpnServerStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/VpnServerStep/VpnServerStep.tsx index 603fe379c..e65d9af0b 100644 --- a/new-ui/src/pages/full/TunnelWizardPage/steps/VpnServerStep/VpnServerStep.tsx +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/VpnServerStep/VpnServerStep.tsx @@ -1 +1,136 @@ -export const VpnServerStep = () =>
    VPN Server
    ; +import { useMemo } from 'react'; +import z from 'zod'; +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../shared/components/Controls/Controls'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { Split } from '../../../../../shared/components/Split/Split'; +import { useAppForm } from '../../../../../shared/form'; +import { formChangeLogic } from '../../../../../shared/formLogic'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { + cidrRegex, + patternValidEndpoint, + patternValidWireguardKey, +} from '../../../../../shared/utils/patterns'; +import { useTunnelWizardStore } from '../../hooks/useTunnelWizardStore'; + +const formSchema = z.object({ + server_pubkey: z + .string() + .refine((v) => patternValidWireguardKey.test(v), 'Invalid WireGuard key'), + preshared_key: z + .string() + .refine((v) => !v || patternValidWireguardKey.test(v), 'Invalid WireGuard key'), + endpoint: z.string().refine((v) => patternValidEndpoint.test(v), 'Invalid address'), + dns: z.string(), + allowed_ips: z.string().refine((v) => { + if (!v) return true; + return v + .split(',') + .map((s) => s.trim()) + .every((cidr) => cidrRegex.test(cidr)); + }, 'Invalid CIDR notation'), + persistent_keep_alive: z.number().int().min(0), +}); + +type FormFields = z.infer; + +export const VpnServerStep = () => { + const initData = useTunnelWizardStore((s) => s.tunnelData); + + const defaultValues = useMemo( + (): FormFields => ({ + server_pubkey: initData.server_pubkey, + preshared_key: initData.preshared_key, + endpoint: initData.endpoint, + dns: initData.dns ?? '', + allowed_ips: initData.allowed_ips ?? '', + persistent_keep_alive: initData.persistent_keep_alive, + }), + [ + initData.server_pubkey, + initData.preshared_key, + initData.endpoint, + initData.dns, + initData.allowed_ips, + initData.persistent_keep_alive, + ], + ); + + const form = useAppForm({ + defaultValues, + validationLogic: formChangeLogic, + validators: { + onSubmit: formSchema, + onChange: formSchema, + }, + onSubmit: ({ value }) => { + useTunnelWizardStore.getState().next(value); + }, + }); + + return ( +
    +
    +

    VPN Server

    + +

    {`Upload your config file (optional) and we'll securely extract the connection settings for you. This is the fastest and recommended way to get started.`}

    +
    + +
    { + e.stopPropagation(); + e.preventDefault(); + form.handleSubmit(); + }} + > + + + + {(field) => } + + + {(field) => } + + + + + + {(field) => } + + + {(field) => } + + + + + {(field) => ( + + )} + + + + {(field) => } + + +
    + +
    + +
    + ); +}; diff --git a/new-ui/src/routes/compact/index.tsx b/new-ui/src/routes/compact/index.tsx index 5f302f0b8..566d5a428 100644 --- a/new-ui/src/routes/compact/index.tsx +++ b/new-ui/src/routes/compact/index.tsx @@ -29,18 +29,18 @@ export const Route = createFileRoute('/compact/')({ if (stored === null) { storedIsValid = false; } else if (stored.kind === 'instance') { - storedIsValid = instances.some((i) => i.id === stored.data.id); + storedIsValid = instances.some((i) => i.id === stored.id); } else { - storedIsValid = tunnels.some((t) => t.id === stored.data.id); + storedIsValid = tunnels.some((t) => t.id === stored.id); } let selected: OverviewViewSelection; if (storedIsValid && stored !== null) { selected = stored; } else if (instances.length > 0) { - selected = { kind: 'instance', data: instances[0] }; + selected = { kind: 'instance', id: instances[0].id }; } else { - selected = { kind: 'tunnel', data: tunnels[0] }; + selected = { kind: 'tunnel', id: tunnels[0].id }; } if (!storedIsValid) { @@ -51,7 +51,7 @@ export const Route = createFileRoute('/compact/')({ let locations: LocationInfo[]; if (selected.kind === 'instance') { locations = await context.queryClient.fetchQuery( - getLocationsQueryOptions(selected.data.id), + getLocationsQueryOptions(selected.id), ); } else { locations = []; diff --git a/new-ui/src/routes/full/_default/overview.tsx b/new-ui/src/routes/full/_default/overview.tsx index 4c4341386..c083fd449 100644 --- a/new-ui/src/routes/full/_default/overview.tsx +++ b/new-ui/src/routes/full/_default/overview.tsx @@ -27,16 +27,16 @@ export const Route = createFileRoute('/full/_default/overview')({ if (stored === null) { storedIsValid = false; } else if (stored.kind === 'instance') { - storedIsValid = instances.some((i) => i.id === stored.data.id); + storedIsValid = instances.some((i) => i.id === stored.id); } else { - storedIsValid = tunnels.some((t) => t.id === stored.data.id); + storedIsValid = tunnels.some((t) => t.id === stored.id); } if (!storedIsValid) { const selected = instances.length > 0 - ? { kind: 'instance' as const, data: instances[0] } - : { kind: 'tunnel' as const, data: tunnels[0] }; + ? { kind: 'instance' as const, id: instances[0].id } + : { kind: 'tunnel' as const, id: tunnels[0].id }; await api.patchSessionState({ view_selection: selected }); await context.queryClient.invalidateQueries({ queryKey: ['session-state'] }); } diff --git a/new-ui/src/shared/components/Split/Split.tsx b/new-ui/src/shared/components/Split/Split.tsx new file mode 100644 index 000000000..daea8804a --- /dev/null +++ b/new-ui/src/shared/components/Split/Split.tsx @@ -0,0 +1,22 @@ +import type { CSSProperties, PropsWithChildren } from 'react'; +import { ThemeSpacing, type ThemeSpacingValue } from '../../types'; + +type Props = PropsWithChildren<{ + split?: number; + spacing?: ThemeSpacingValue; +}>; + +export const Split = ({ children, split = 2, spacing = ThemeSpacing.Sm }: Props) => { + const style: CSSProperties = { + display: 'grid', + gridTemplateColumns: `repeat(${split}, 1fr)`, + columnGap: spacing, + width: '100%', + }; + + return ( +
    + {children} +
    + ); +}; diff --git a/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx b/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx index 8fb4d8def..3e5537dae 100644 --- a/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx +++ b/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx @@ -1,4 +1,10 @@ -import { type HTMLProps, type PropsWithChildren, Suspense, useMemo } from 'react'; +import { + Fragment, + type HTMLProps, + type PropsWithChildren, + Suspense, + useMemo, +} from 'react'; import './style.scss'; import clsx from 'clsx'; import { sort } from 'radashi'; @@ -47,10 +53,14 @@ export const WizardPage = ({
    -
    -

    {`Step ${activeStepIndex + 1} of ${visibleSteps.length}`}

    -
    - + {activeStepIndex !== visibleSteps.length - 1 && ( + +
    +

    {`Step ${activeStepIndex + 1} of ${visibleSteps.length}`}

    +
    + +
    + )} }>{children}
    diff --git a/new-ui/src/shared/rust-api/api.ts b/new-ui/src/shared/rust-api/api.ts index ab6f75891..2ccb9e066 100644 --- a/new-ui/src/shared/rust-api/api.ts +++ b/new-ui/src/shared/rust-api/api.ts @@ -74,11 +74,10 @@ const getTunnels = (): Promise => invoke(TauriCommand.AllTunnels const getTunnelDetails = (tunnelId: number): Promise => invoke(TauriCommand.TunnelDetails, { tunnelId }); -const parseTunnelConfig = ( - filename: string, - config: string, -): Promise> => - invoke(TauriCommand.ParseTunnelConfig, { filename, config }); +const parseTunnelConfig = (data: { + filename: string; + config: string; +}): Promise> => invoke(TauriCommand.ParseTunnelConfig, data); const saveTunnel = (tunnel: TunnelRequest): Promise => invoke(TauriCommand.SaveTunnel, { tunnel }); diff --git a/new-ui/src/shared/rust-api/types.ts b/new-ui/src/shared/rust-api/types.ts index 3912cbe74..b7823393b 100644 --- a/new-ui/src/shared/rust-api/types.ts +++ b/new-ui/src/shared/rust-api/types.ts @@ -368,9 +368,10 @@ export type SetLocationMfaMethodArgs = { mfaMethod: MfaMethodValue; }; -export type OverviewViewSelection = - | { kind: 'instance'; data: InstanceInfo } - | { kind: 'tunnel'; data: LocationInfo }; +export type OverviewViewSelection = { + kind: 'instance' | 'tunnel'; + id: number; +}; /** Mirrors `SessionState` in src/session_state.rs. Fields are snake_case (raw serde output). */ export type SessionState = { diff --git a/new-ui/src/shared/utils/generateWGKeys copy.ts b/new-ui/src/shared/utils/generateWGKeys copy.ts new file mode 100644 index 000000000..6e9818559 --- /dev/null +++ b/new-ui/src/shared/utils/generateWGKeys copy.ts @@ -0,0 +1,9 @@ +import { encode } from '@stablelib/base64'; +import { generateKeyPair } from '@stablelib/x25519'; + +export const generateWGKeys = () => { + const keys = generateKeyPair(); + const publicKey = encode(keys.publicKey); + const privateKey = encode(keys.secretKey); + return { publicKey, privateKey }; +}; diff --git a/new-ui/src/shared/utils/patterns.ts b/new-ui/src/shared/utils/patterns.ts new file mode 100644 index 000000000..0dc65fbba --- /dev/null +++ b/new-ui/src/shared/utils/patterns.ts @@ -0,0 +1,85 @@ +/* eslint-disable no-useless-escape */ +export const patternNoSpecialChars = /^\w+$/; + +export const patternDigitOrLowercase = /^[0-9a-z]+$/g; + +export const patternValidEmail = + // eslint-disable-next-line max-len + /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/g; + +export const patternAtLeastOneUpperCaseChar = /(?=.*?[A-Z])/g; + +export const patternAtLeastOneLowerCaseChar = /(?=.*?[a-z])/g; + +export const patternAtLeastOneDigit = /(?=.*?[0-9])/g; + +export const patternStartsWithDigit = /^\d/; + +export const patternAtLeastOneSpecialChar = /(?=.*?[#?!@$%^&*-])/g; + +export const patternValidPhoneNumber = + /^(\+?\d{1,3}\s?)?(\(\d{1,3}\)|\d{1,3})[-\s]?\d{1,4}[-\s]?\d{1,4}?$/; + +export const patternValidWireguardKey = + /^[A-Za-z0-9+/]{42}[A|E|I|M|Q|U|Y|c|g|k|o|s|w|4|8|0]=$/; + +export const patternBaseUrl = /:\/\/(.[^/]+)/; + +// https://gist.github.com/dperini/729294 +export const patternValidUrl = new RegExp( + '^' + + // protocol identifier (optional) + // short syntax // still required + '(?:(?:(?:https?):)?\\/\\/)' + + // user:pass BasicAuth (optional) + '(?:\\S+(?::\\S*)?@)?' + + '(?:' + + // IP address dotted notation octets + // excludes loopback network 0.0.0.0 + // excludes reserved space >= 224.0.0.0 + // excludes network & broadcast addresses + // (first & last IP address of each class) + '(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])' + + '(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}' + + '(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))' + + '|' + + // host & domain names, may end with dot + // can be replaced by a shortest alternative + // (?![-_])(?:[-\\w\\u00a1-\\uffff]{0,63}[^-_]\\.)+ + '(?:' + + '(?:' + + '[a-z0-9\\u00a1-\\uffff]' + + '[a-z0-9\\u00a1-\\uffff_-]{0,62}' + + ')?' + + '[a-z0-9\\u00a1-\\uffff]\\.' + + ')+' + + // TLD identifier name, may end with dot + '(?:[a-z\\u00a1-\\uffff]{2,}\\.?)' + + ')' + + // port number (optional) + '(?::\\d{2,5})?' + + // resource path (optional) + '(?:[/?#]\\S*)?' + + '$', + 'i', +); + +export const patternValidDomain = + /^(?:(?:(?:[a-zA-z-]+):\/{1,3})?(?:[a-zA-Z0-9])(?:[a-zA-Z0-9\-.]){1,61}(?:\.[a-zA-Z]{2,})+|\[(?:(?:(?:[a-fA-F0-9]){1,4})(?::(?:[a-fA-F0-9]){1,4}){7}|::1|::)\]|(?:(?:[0-9]{1,3})(?:\.[0-9]{1,3}){3}))(?::[0-9]{1,5})?$/; + +export const patternValidIp = + /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\/32)?$/; + +export const cidrRegex = + /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}|[0-9a-fA-F:.]+\/\d{1,3})$/; +// Regular expression to match IPv4, IPv6, domain name, or localhost with port +export const patternValidEndpoint = + /^(localhost|\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b|\b(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}\b)(?::(\d+))?$/; + +// Copied from zod source code and added optional mask at the end to match WireguardRequirements +export const patternValidIpV6 = + /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))(?:\/128)?$/; + +// Reuse pattern from above to support format [ipv6]:port +export const patternValidIpV6WithPort = + /^\[((([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))(\/128)?)\]:(\d{1,5})$/; diff --git a/src-tauri/core/src/events.rs b/src-tauri/core/src/events.rs index cc8802a24..71f859e31 100644 --- a/src-tauri/core/src/events.rs +++ b/src-tauri/core/src/events.rs @@ -16,6 +16,7 @@ pub enum EventKey { UuidMismatch, WindowSwapped, SessionStateChanged, + InstanceUpdated, } impl From for &'static str { @@ -35,6 +36,7 @@ impl From for &'static str { EventKey::UuidMismatch => "uuid-mismatch", EventKey::WindowSwapped => "window-swapped", EventKey::SessionStateChanged => "session-state-changed", + EventKey::InstanceUpdated => "instance-updated", } } } diff --git a/src-tauri/enterprise/config-sync/src/commands.rs b/src-tauri/enterprise/config-sync/src/commands.rs index 7eb4a4726..f74fc8b47 100644 --- a/src-tauri/enterprise/config-sync/src/commands.rs +++ b/src-tauri/enterprise/config-sync/src/commands.rs @@ -49,7 +49,7 @@ pub async fn do_update_instance( transaction: &mut Transaction<'_, Sqlite>, instance: &mut Instance, response: DeviceConfigResponse, -) -> Result<(), Error> { +) -> Result { debug!("Updating instance {instance}"); let locations_changed_val = locations_changed(transaction, instance, &response).await?; let instance_info = response @@ -232,7 +232,7 @@ pub async fn do_update_instance( } } - Ok(()) + Ok(locations_changed_val) } pub async fn disable_enterprise_features<'e, E>( diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 2777aa47d..c39470ce6 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -24,7 +24,7 @@ use defguard_client::{ DB_POOL, }, enterprise::provisioning::handle_client_initialization, - events::handle_deep_link, + events::{handle_deep_link, EventKey}, periodic::run_periodic_tasks, service, session_state, tray::{configure_tray_icon, setup_tray}, @@ -34,7 +34,7 @@ use defguard_client::{ }; use defguard_client_core::connection::active_connections::close_all_connections; use log::{Level, LevelFilter}; -use tauri::{async_runtime, AppHandle, Builder, Manager, RunEvent, WindowEvent}; +use tauri::{async_runtime, AppHandle, Builder, Emitter, Listener, Manager, RunEvent, WindowEvent}; use tauri_plugin_deep_link::DeepLinkExt; use tauri_plugin_log::{Target, TargetKind}; @@ -48,6 +48,35 @@ const LOGGING_TARGET_IGNORE_LIST: [&str; 5] = ["tauri", "sqlx", "hyper", "h2", " static LOG_INCLUDES: LazyLock> = LazyLock::new(load_log_targets); async fn startup(app_handle: &AppHandle) { + // When instance locations change, re-validate MFA preferences and update session state. + { + let handle = app_handle.clone(); + app_handle.listen(Into::<&'static str>::into(EventKey::InstanceUpdated), move |_| { + let handle = handle.clone(); + async_runtime::spawn(async move { + let app_state = handle.state::(); + let preference = match app_state.session_state.lock() { + Ok(guard) => guard.location_mfa_preference.clone(), + Err(err) => { + error!("Session state mutex poisoned during MFA preference validation: {err}"); + return; + } + }; + match session_state::validate_location_mfa_preference(&DB_POOL, preference).await { + Ok(validated) => { + if let Ok(mut guard) = app_state.session_state.lock() { + guard.location_mfa_preference = validated; + } + if let Err(err) = handle.emit(EventKey::SessionStateChanged.into(), ()) { + error!("Failed to emit session-state-changed after MFA preference validation: {err}"); + } + } + Err(err) => error!("Failed to validate location MFA preference: {err}"), + } + }); + }); + } + debug!("Purging old stats from the database."); if let Err(err) = LocationStats::purge(&*DB_POOL).await { error!("Failed to purge location stats: {err}"); diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 06968dc1a..494f9476d 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -660,9 +660,15 @@ pub async fn update_instance( if let Some(mut instance) = Instance::find_by_id(&*DB_POOL, instance_id).await? { debug!("The instance with id {instance_id} to update was found: {instance}"); let mut transaction = DB_POOL.begin().await?; - do_update_instance(&mut transaction, &mut instance, response).await?; + let locations_changed = + do_update_instance(&mut transaction, &mut instance, response).await?; transaction.commit().await?; + if locations_changed { + if let Err(err) = app_handle.emit(EventKey::InstanceUpdated.into(), ()) { + error!("Failed to emit instance-updated event: {err}"); + } + } app_handle .emit(EventKey::InstanceUpdate.into(), ()) .map_err(crate::tauri_err_to_app_err)?; @@ -1006,7 +1012,7 @@ pub async fn save_tunnel(tunnel: Tunnel, handle: AppHandle) -> Result<(), Ok(()) } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize, Clone)] pub struct TunnelInfo { pub id: I, pub name: String, diff --git a/src-tauri/src/enterprise/periodic/config.rs b/src-tauri/src/enterprise/periodic/config.rs index 303c17739..4a0b48aee 100644 --- a/src-tauri/src/enterprise/periodic/config.rs +++ b/src-tauri/src/enterprise/periodic/config.rs @@ -164,11 +164,17 @@ pub async fn poll_instance( "Updating instance {}({}) configuration: {device_config:?}", instance.name, instance.id, ); - do_update_instance(transaction, instance, device_config.clone()).await?; + let locations_changed = + do_update_instance(transaction, instance, device_config.clone()).await?; info!( "Updated instance {}({}) configuration based on core's response", instance.name, instance.id ); + if locations_changed { + if let Err(err) = handle.emit(EventKey::InstanceUpdated.into(), ()) { + error!("Failed to emit instance-updated event: {err}"); + } + } } else { debug!( "Emitting config-changed event for instance {}({})", diff --git a/src-tauri/src/session_state.rs b/src-tauri/src/session_state.rs index 3866ce46a..8a9f47cd7 100644 --- a/src-tauri/src/session_state.rs +++ b/src-tauri/src/session_state.rs @@ -1,26 +1,31 @@ -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use serde::{Deserialize, Serialize}; use struct_patch::Patch; use tauri::{AppHandle, Emitter, Manager, State}; use defguard_client_core::{ - database::models::{instance::InstanceInfo, location::LocationMfaMethod, Id}, + database::models::location::{LocationMfaMethod, LocationMfaMode}, events::EventKey, }; use crate::{ appstate::AppState, - commands::LocationInfo, - database::{models::location::Location, DB_POOL}, + database::{models::location::Location, DbPool, DB_POOL}, error::Error, }; #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] -#[serde(tag = "kind", content = "data", rename_all = "lowercase")] -pub enum OverviewViewSelection { - Instance(InstanceInfo), - Tunnel(LocationInfo), +#[serde(rename_all = "lowercase")] +pub enum ViewSelectionKind { + Instance, + Tunnel, +} + +#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +pub struct OverviewViewSelection { + pub kind: ViewSelectionKind, + pub id: i64, } #[derive(Clone, Debug, Default, Deserialize, Patch, Serialize)] @@ -30,6 +35,59 @@ pub struct SessionState { pub location_mfa_preference: HashMap, } +// verifies integrity of the mfa preference in session, this needs to be ran on location update so polling doesn't break the session store +pub async fn validate_location_mfa_preference( + pool: &DbPool, + mut preference: HashMap, +) -> Result, Error> { + if preference.is_empty() { + return Ok(preference); + } + + let ids: Vec = preference.keys().filter_map(|k| k.parse().ok()).collect(); + + if ids.is_empty() { + preference.clear(); + return Ok(preference); + } + + let placeholders = (0..ids.len()).map(|_| "?").collect::>().join(","); + let sql = format!("SELECT id, location_mfa_mode FROM location WHERE id IN ({placeholders})"); + let mut q = sqlx::query_as::<_, (i64, LocationMfaMode)>(&sql); + for id in &ids { + q = q.bind(*id); + } + let rows = q.fetch_all(pool).await?; + + let mut found = HashSet::with_capacity(rows.len()); + for (id, mfa_mode) in rows { + let key = id.to_string(); + found.insert(key.clone()); + match mfa_mode { + LocationMfaMode::Disabled => { + preference.remove(&key); + } + LocationMfaMode::External => { + preference.insert(key, LocationMfaMethod::Oidc); + } + LocationMfaMode::Internal => { + if let Some(m) = preference.get(&key) { + match m { + LocationMfaMethod::Totp + | LocationMfaMethod::Email + | LocationMfaMethod::MobileApprove => {} + _ => { + preference.insert(key, LocationMfaMethod::Totp); + } + } + } + } + } + } + preference.retain(|k, _| found.contains(k)); + Ok(preference) +} + pub async fn initialize_session_state() -> Result { let locations = Location::all(&*DB_POOL, false).await?; let location_mfa_preference = locations From a0b19af8315b5a1afa8cc32a9b76eb18683deb8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Mon, 22 Jun 2026 11:50:26 +0200 Subject: [PATCH 064/155] change mfa factor in connect process (#982) * change mfa factor in connect process * update ignore --- new-ui/.gitignore | 1 + .../ConnectModalMfaEmail.tsx | 18 ++---- .../ConnectModalMfaMobile.tsx | 23 +++++-- .../ConnectModalMfaSettings.tsx | 22 ++++--- .../ConnectModalMfaTotp.tsx | 18 ++---- .../LocationCardConnectionTiles/style.scss | 1 + .../LocationCardMfaEmailView.tsx | 7 +++ .../LocationCardMfaMobileView.tsx | 7 +++ .../LocationCardMfaSettings.tsx | 19 +++++- .../LocationCardMfaTotpView.tsx | 7 +++ .../OverviewLocationCard.tsx | 62 +++++++++++-------- new-ui/src/shared/rust-api/types.ts | 1 + src-tauri/src/commands.rs | 1 + src-tauri/src/tray.rs | 2 +- src-tauri/src/utils.rs | 2 + 15 files changed, 123 insertions(+), 68 deletions(-) diff --git a/new-ui/.gitignore b/new-ui/.gitignore index a547bf36d..07e023ab3 100644 --- a/new-ui/.gitignore +++ b/new-ui/.gitignore @@ -22,3 +22,4 @@ dist-ssr *.njsproj *.sln *.sw? +.tanstack diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx index 009f7ee76..a2e0399b5 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx @@ -4,9 +4,6 @@ import { Button } from '../../../../../../../shared/components/Button/Button'; import { ButtonVariant } from '../../../../../../../shared/components/Button/types'; import { CodeInput } from '../../../../../../../shared/components/CodeInput/CodeInput'; import { Controls } from '../../../../../../../shared/components/Controls/Controls'; -import { IconKind } from '../../../../../../../shared/components/Icon'; -import { IconButton } from '../../../../../../../shared/components/IconButton/IconButton'; -import { IconButtonVariant } from '../../../../../../../shared/components/IconButton/types'; import { MfaStartMethod } from '../../../../../../../shared/components/LocationCard/api/startClientMfaSession'; import { useMfaConnect } from '../../../../../../../shared/components/LocationCard/hooks/useMfaConnect'; import type { LocationInfo } from '../../../../../../../shared/rust-api/types'; @@ -81,15 +78,12 @@ export const ConnectModalMfaEmail = () => { error={startError ?? error} /> - - useConnectModal - .getState() - .setView(perviousView ?? ConnectModalView.MfaSettings) - } +
    )} -
    - {screen === 'error' && ( -
    + {screen === 'qr' && ( +
    ); diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/ConnectModalMfaSettings.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/ConnectModalMfaSettings.tsx index 39bfe37d5..c84044c94 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/ConnectModalMfaSettings.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaSettings/ConnectModalMfaSettings.tsx @@ -1,19 +1,17 @@ /** biome-ignore-all lint/style/noNonNullAssertion: temp */ import './style.scss'; -import { useMutation } from '@tanstack/react-query'; +import { useMutation, useQuery } from '@tanstack/react-query'; import { Fragment, useMemo, useState } from 'react'; import { useShallow } from 'zustand/shallow'; import { Button } from '../../../../../../../shared/components/Button/Button'; import { ButtonVariant } from '../../../../../../../shared/components/Button/types'; import { Checkbox } from '../../../../../../../shared/components/Checkbox/Checkbox'; import { Controls } from '../../../../../../../shared/components/Controls/Controls'; -import { IconKind } from '../../../../../../../shared/components/Icon'; -import { IconButton } from '../../../../../../../shared/components/IconButton/IconButton'; -import { IconButtonVariant } from '../../../../../../../shared/components/IconButton/types'; import { MfaSelector } from '../../../../../../../shared/components/LocationCard/components/MfaSelector/MfaSelector'; import { SizedBox } from '../../../../../../../shared/components/SizedBox/SizedBox'; import { useAppData } from '../../../../../../../shared/providers/AppDataContext'; import { api } from '../../../../../../../shared/rust-api/api'; +import { getLocationDetailsQueryOptions } from '../../../../../../../shared/rust-api/query'; import { LocationMfaMode, MfaMethod, @@ -36,7 +34,14 @@ export const ConnectModalMfaSettings = () => { useShallow((s) => [s.perviousView, s.location]), ); - const locationDefaultMfaMethod = location?.mfa_method ?? MfaMethod.Totp; + const { data: locationDetails } = useQuery( + getLocationDetailsQueryOptions({ + locationId: location!.id, + connectionType: 'Location', + }), + ); + + const locationDefaultMfaMethod = locationDetails?.mfa_method ?? MfaMethod.Totp; const [selectedMethod, setSelectedMethod] = useState( decideLocationMfaMethod(location!, locationMfaPreference[String(location!.id)]) ?? @@ -118,10 +123,9 @@ export const ConnectModalMfaSettings = () => { {perviousView === null && } {perviousView !== null && ( - useConnectModal.getState().setView(perviousView)} /> )} diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx index f3d920299..037d8a675 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx @@ -4,9 +4,6 @@ import { Button } from '../../../../../../../shared/components/Button/Button'; import { ButtonVariant } from '../../../../../../../shared/components/Button/types'; import { CodeInput } from '../../../../../../../shared/components/CodeInput/CodeInput'; import { Controls } from '../../../../../../../shared/components/Controls/Controls'; -import { IconKind } from '../../../../../../../shared/components/Icon'; -import { IconButton } from '../../../../../../../shared/components/IconButton/IconButton'; -import { IconButtonVariant } from '../../../../../../../shared/components/IconButton/types'; import { MfaStartMethod } from '../../../../../../../shared/components/LocationCard/api/startClientMfaSession'; import { useMfaConnect } from '../../../../../../../shared/components/LocationCard/hooks/useMfaConnect'; import type { LocationInfo } from '../../../../../../../shared/rust-api/types'; @@ -81,15 +78,12 @@ export const ConnectModalMfaTotp = () => { error={startError ?? error} /> - - useConnectModal - .getState() - .setView(perviousView ?? ConnectModalView.MfaSettings) - } +
    - {(instance?.client_traffic_policy === 'none' || !instance) && ( - { - updateRouting({ - connectionType: location.connection_type, - locationId: location.id, - routeAllTraffic: !location.route_all_traffic, - }); - }} - /> + {location.active && ( + + )} + {!location.active && ( + + {(instance?.client_traffic_policy === 'none' || !instance) && ( + { + updateRouting({ + connectionType: location.connection_type, + locationId: location.id, + routeAllTraffic: !location.route_all_traffic, + }); + }} + /> + )} + { + if (isPresent(location)) { + useConnectModal.getState().open({ + view: ConnectModalView.MfaSettings, + location: location, + perviousView: null, + }); + } + }} + /> + )} - { - if (isPresent(location)) { - useConnectModal.getState().open({ - view: ConnectModalView.MfaSettings, - location: location, - perviousView: null, - }); - } - }} - />
    diff --git a/new-ui/src/shared/rust-api/types.ts b/new-ui/src/shared/rust-api/types.ts index b7823393b..3fad9d261 100644 --- a/new-ui/src/shared/rust-api/types.ts +++ b/new-ui/src/shared/rust-api/types.ts @@ -272,6 +272,7 @@ export type LocationDetails = { allowed_ips: string; persistent_keepalive_interval?: number; last_handshake?: number; + mfa_method?: MfaMethodValue; }; export type NewAppVersionInfo = { diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 494f9476d..88d026863 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -636,6 +636,7 @@ pub struct LocationInterfaceDetails { pub allowed_ips: String, pub persistent_keepalive_interval: Option, pub last_handshake: Option, + pub mfa_method: Option, } #[tauri::command(async)] diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index eecc3af21..d8cebd5aa 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -304,7 +304,7 @@ pub async fn configure_tray_icon(app_handle: &AppHandle) -> Result<(), Error> { .and_then(|w| w.theme().ok()); resource_str.push_str(match theme { Some(Theme::Dark) => "dark", - _ => "light", + _ => "white", }); } let active_connections = ACTIVE_CONNECTIONS.lock().await; diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index efdddd44b..68379c6db 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -502,6 +502,7 @@ pub async fn get_tunnel_interface_details( allowed_ips: tunnel.allowed_ips.unwrap_or_default(), persistent_keepalive_interval, last_handshake, + mfa_method: None, }) } else { error!("Error while fetching tunnel details for ID {tunnel_id}: tunnel not found"); @@ -570,6 +571,7 @@ pub async fn get_location_interface_details( allowed_ips: location.allowed_ips, persistent_keepalive_interval, last_handshake, + mfa_method: location.mfa_method, }) } else { error!("Error while fetching location details for ID {location_id}: location not found"); From a35dad0732e42d51cfccbc11e9dfbc8f55a7968e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Mon, 22 Jun 2026 12:56:23 +0200 Subject: [PATCH 065/155] add auto start openid mfa preference to app config (#983) --- new-ui/package.json | 8 +- new-ui/pnpm-lock.yaml | 158 +++++++++--------- .../ConnectModal/hooks/useConnectModal.tsx | 2 + .../ConnectModalMfaOidc.tsx | 78 ++++++--- .../views/ConnectModalMfaOidc/style.scss | 7 + .../pages/full/SettingsPage/SettingsPage.tsx | 9 + .../LocationCard/context/context.tsx | 9 +- .../LocationCardMfaOidcView.tsx | 38 ++++- .../OverviewLocationCard.tsx | 9 +- new-ui/src/shared/rust-api/types.ts | 1 + src-tauri/core/src/app_config.rs | 2 + 11 files changed, 207 insertions(+), 114 deletions(-) create mode 100644 new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/style.scss diff --git a/new-ui/package.json b/new-ui/package.json index d11f1ca6d..e4de41df4 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -19,9 +19,9 @@ "@stablelib/x25519": "^2.0.1", "@tanstack/react-form": "^1.33.0", "@tanstack/react-query": "^5.101.0", - "@tanstack/react-router": "^1.170.15", + "@tanstack/react-router": "^1.170.16", "@tanstack/router-plugin": "^1.168.18", - "@tauri-apps/api": "^2.11.0", + "@tauri-apps/api": "^2.11.1", "@tauri-apps/plugin-clipboard-manager": "^2.3.2", "@tauri-apps/plugin-dialog": "^2.7.1", "@tauri-apps/plugin-fs": "^2.5.1", @@ -50,9 +50,9 @@ "zustand": "^5.0.14" }, "devDependencies": { - "@tanstack/devtools-vite": "^0.7.0", + "@tanstack/devtools-vite": "^0.7.2", "@types/byte-size": "^8.1.2", - "@types/node": "^25.9.3", + "@types/node": "^25.9.4", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.2", diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index e74ca43b1..3c9a7e41c 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -27,14 +27,14 @@ importers: specifier: ^5.101.0 version: 5.101.0(react@19.2.7) '@tanstack/react-router': - specifier: ^1.170.15 - version: 1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + specifier: ^1.170.16 + version: 1.170.16(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/router-plugin': specifier: ^1.168.18 - version: 1.168.18(@tanstack/react-router@1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0)) + version: 1.168.18(@tanstack/react-router@1.170.16(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.4)(jiti@2.7.0)(sass@1.101.0)) '@tauri-apps/api': - specifier: ^2.11.0 - version: 2.11.0 + specifier: ^2.11.1 + version: 2.11.1 '@tauri-apps/plugin-clipboard-manager': specifier: ^2.3.2 version: 2.3.2 @@ -115,14 +115,14 @@ importers: version: 5.0.14(@types/react@19.2.17)(react@19.2.7)(use-sync-external-store@1.6.0(react@19.2.7)) devDependencies: '@tanstack/devtools-vite': - specifier: ^0.7.0 - version: 0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0)) + specifier: ^0.7.2 + version: 0.7.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.16(@types/node@25.9.4)(jiti@2.7.0)(sass@1.101.0)) '@types/byte-size': specifier: ^8.1.2 version: 8.1.2 '@types/node': - specifier: ^25.9.3 - version: 25.9.3 + specifier: ^25.9.4 + version: 25.9.4 '@types/react': specifier: ^19.2.17 version: 19.2.17 @@ -131,7 +131,7 @@ importers: version: 19.2.3(@types/react@19.2.17) '@vitejs/plugin-react': specifier: ^6.0.2 - version: 6.0.2(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0)) + version: 6.0.2(vite@8.0.16(@types/node@25.9.4)(jiti@2.7.0)(sass@1.101.0)) autoprefixer: specifier: ^10.5.0 version: 10.5.0(postcss@8.5.15) @@ -152,7 +152,7 @@ importers: version: 6.0.3 vite: specifier: ^8.0.16 - version: 8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0) + version: 8.0.16(@types/node@25.9.4)(jiti@2.7.0)(sass@1.101.0) packages: @@ -753,21 +753,21 @@ packages: '@stablelib/x25519@2.0.1': resolution: {integrity: sha512-qi04HS2puHaBf50kM/kes5QcZFGsx8yF0YmCjLCOa/LPmnBaKEKX9ZR82OnnCwMn72YH13R/bBZgr/UP0aPFfA==} - '@tanstack/devtools-client@0.0.6': - resolution: {integrity: sha512-f85ZJXJnDIFOoykG/BFIixuAevJovCvJF391LPs6YjBAPhGYC50NWlx1y4iF/UmK5/cCMx+/JqI5SBOz7FanQQ==} + '@tanstack/devtools-client@0.0.7': + resolution: {integrity: sha512-bAqBnXQlg/1PqmIC3XhqzG8jV3YmUQ41fD9VlOVzSilFBD4Kp6WJFJa+7N6TvlYXqMAy8xoeF9gg0d2Lt74OEQ==} engines: {node: '>=18'} - '@tanstack/devtools-event-bus@0.4.1': - resolution: {integrity: sha512-cNnJ89Q021Zf883rlbBTfsaxTfi2r73/qejGtyTa7ksErF3hyDyAq1aTbo5crK9dAL7zSHh9viKY1BtMls1QOA==} + '@tanstack/devtools-event-bus@0.4.2': + resolution: {integrity: sha512-2LHzhwBFlKHCcklsQrGe8TeyjHd4XAF8nuCO6wHmva5fePUkJUULbu6CsCNAlGlCi0KkEsMXZSvRdR4HgMq4yA==} engines: {node: '>=18'} - '@tanstack/devtools-event-client@0.4.3': - resolution: {integrity: sha512-OZI6QyULw0FI0wjgmeYzCIfbgPsOEzwJtCpa69XrfLMtNXLGnz3d/dIabk7frg0TmHo+Ah49w5I4KC7Tufwsvw==} + '@tanstack/devtools-event-client@0.4.4': + resolution: {integrity: sha512-6T5Yop/793YI+H+5J8Hsyj4kCih9sl4t3ElLgKioW5hk3ocn+ZdSJ94tT7vL7uabxSugWYBZlOTMPzEw2puvQw==} engines: {node: '>=18'} hasBin: true - '@tanstack/devtools-vite@0.7.0': - resolution: {integrity: sha512-VXki7K+Xwnpo3IKdNSWGe7YOvtZv33YlulGqaQ+YCpeQhYg8JFuxP50BXibDoRLj5EOX4r21Hs7COdxbRHXkTw==} + '@tanstack/devtools-vite@0.7.2': + resolution: {integrity: sha512-J/M6buLylcQG6MKVpsPLfXH7bfrGdud7awYnbqRFgsSkkBk/ZlZR3wR20WaeCrbvU9dOynxHHMbuB7v7vqPj8Q==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -801,8 +801,8 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-router@1.170.15': - resolution: {integrity: sha512-GawYz7HEjj8rTUUDoT/SemDEVm63pZUO+2mOcXHY9Jl3EwMS5gFBnPu/2UvcrwRm1jN1k79fokc0d4aFmrLatg==} + '@tanstack/react-router@1.170.16': + resolution: {integrity: sha512-w6eq1IJklujs1tESazaK/FxH0+H2l8vm/QPuu1cD3oRW/ubgKneQpd7b64ti/8gUyEimzimJQZDmJr6YHfP5+g==} engines: {node: '>=20.19'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -863,8 +863,8 @@ packages: resolution: {integrity: sha512-uhOeFyxLcU41HzvrxsGpiWdcMbScY1EDgbZ5K7DVRMYInbLYWAC0EA/kx9wXAoSM8q82bUG2hRl8+EAjE6XAbA==} engines: {node: '>=20.19'} - '@tauri-apps/api@2.11.0': - resolution: {integrity: sha512-7CinYODhky9lmO23xHnUFv0Xt43fbtWMyxZcLcRBlFkcgXKuEirBvHpmtJ89YMhyeGcq20Wuc47Fa4XjyniywA==} + '@tauri-apps/api@2.11.1': + resolution: {integrity: sha512-M2FPuYND2m+wh5hfW9ZpSdxMPdEJovPBWwoHJmwUpysTYNHaOkVFN419m/K0LIgjb/7KU2vBgsUepJWugQCvAA==} '@tauri-apps/plugin-clipboard-manager@2.3.2': resolution: {integrity: sha512-CUlb5Hqi2oZbcZf4VUyUH53XWPPdtpw43EUpCza5HWZJwxEoDowFzNUDt1tRUXA8Uq+XPn17Ysfptip33sG4eQ==} @@ -911,8 +911,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@25.9.3': - resolution: {integrity: sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==} + '@types/node@25.9.4': + resolution: {integrity: sha512-dszCsrKb5U7ZsVZBWiHFklTloVl0mSEnWH/iZXfZUlI4rzCUnsvGmgqfuVRHL54ugE7/wRuxEIXRa2iMZ+BG6g==} '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} @@ -990,8 +990,8 @@ packages: bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - baseline-browser-mapping@2.10.37: - resolution: {integrity: sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==} + baseline-browser-mapping@2.10.38: + resolution: {integrity: sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==} engines: {node: '>=6.0.0'} hasBin: true @@ -1128,8 +1128,8 @@ packages: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} - electron-to-chromium@1.5.372: - resolution: {integrity: sha512-M3yhbAlilnwqC8D21t28UCDGHyitShTmmLRU/H+b74P6Ski16Nb9HONYEaVpMj/pwC7BEo5B95FpjODLCWbtfA==} + electron-to-chromium@1.5.376: + resolution: {integrity: sha512-cUVA7/RvbFTEuw/i3obUwDTRIXojaxkResf+ibByPFxjc6XK3VNtcQXV0NSbAlJ0FMjcJGgftVVB4Qo184EXvA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1333,8 +1333,8 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - isbot@5.1.42: - resolution: {integrity: sha512-/SXsVh7KpPRISrD4ffrGSxnTLlUBzEQUfWIusaJPrpJ93FW1P0YEZri5vAUkFsA0m2HRUhQRQadk2wJ+EeKowQ==} + isbot@5.1.43: + resolution: {integrity: sha512-drJhFmibra4LO6Wd7D3Oi6UICRK9244vSZkmxzhlZP0TTdwCA2ueK4PEkUkzPYeuqug9+cqqdWPgihjk5+83Cg==} engines: {node: '>=18'} isexe@2.0.0: @@ -1597,16 +1597,16 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.12: - resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + nanoid@3.3.14: + resolution: {integrity: sha512-U9kYi5bpVMEI31yC8iw4bJJp0avcHXA0W8/wNfLfnvJYzihQo2ZRPYPvpAAd570HAcCBjCTN7vnr+v4StKl1IQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-releases@2.0.47: - resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==} + node-releases@2.0.48: + resolution: {integrity: sha512-1uz8041X6LoI6ZSdZacM9lVY28vuzDlSKitnpbSNK0RfKoIJkX29NBPVEFXhnuSuEOA9Ww0xnPJ+ILWbGAv8DA==} engines: {node: '>=18'} normalize-path@3.0.0: @@ -1875,15 +1875,15 @@ packages: resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} - supports-hyperlinks@4.4.0: - resolution: {integrity: sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==} + supports-hyperlinks@4.5.0: + resolution: {integrity: sha512-ZW2OvfeCXrNTbLakPUzjQG922EeGCOteFSVoek5DKStTh898wf7zgtuFlzQN8HfZCxC3Eh02yJVrRW51hADf+w==} engines: {node: '>=20'} svg-tags@1.0.0: resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} - tabbable@6.4.0: - resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + tabbable@6.5.0: + resolution: {integrity: sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==} table@6.9.0: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} @@ -2267,7 +2267,7 @@ snapshots: '@floating-ui/utils': 0.2.11 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - tabbable: 6.4.0 + tabbable: 6.5.0 '@floating-ui/utils@0.2.11': {} @@ -2529,29 +2529,29 @@ snapshots: '@stablelib/random': 2.0.1 '@stablelib/wipe': 2.0.1 - '@tanstack/devtools-client@0.0.6': + '@tanstack/devtools-client@0.0.7': dependencies: - '@tanstack/devtools-event-client': 0.4.3 + '@tanstack/devtools-event-client': 0.4.4 - '@tanstack/devtools-event-bus@0.4.1': + '@tanstack/devtools-event-bus@0.4.2': dependencies: ws: 8.21.0 transitivePeerDependencies: - bufferutil - utf-8-validate - '@tanstack/devtools-event-client@0.4.3': {} + '@tanstack/devtools-event-client@0.4.4': {} - '@tanstack/devtools-vite@0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0))': + '@tanstack/devtools-vite@0.7.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.16(@types/node@25.9.4)(jiti@2.7.0)(sass@1.101.0))': dependencies: - '@tanstack/devtools-client': 0.0.6 - '@tanstack/devtools-event-bus': 0.4.1 + '@tanstack/devtools-client': 0.0.7 + '@tanstack/devtools-event-bus': 0.4.2 chalk: 5.6.2 launch-editor: 2.14.1 magic-string: 0.30.21 oxc-parser: 0.120.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) picomatch: 4.0.4 - vite: 8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0) + vite: 8.0.16(@types/node@25.9.4)(jiti@2.7.0)(sass@1.101.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -2560,7 +2560,7 @@ snapshots: '@tanstack/form-core@1.33.0': dependencies: - '@tanstack/devtools-event-client': 0.4.3 + '@tanstack/devtools-event-client': 0.4.4 '@tanstack/pacer-lite': 0.1.1 '@tanstack/store': 0.11.0 @@ -2583,12 +2583,12 @@ snapshots: '@tanstack/query-core': 5.101.0 react: 19.2.7 - '@tanstack/react-router@1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@tanstack/react-router@1.170.16(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@tanstack/history': 1.162.0 '@tanstack/react-store': 0.9.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/router-core': 1.171.13 - isbot: 5.1.42 + isbot: 5.1.43 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) @@ -2626,7 +2626,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.168.18(@tanstack/react-router@1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0))': + '@tanstack/router-plugin@1.168.18(@tanstack/react-router@1.170.16(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.4)(jiti@2.7.0)(sass@1.101.0))': dependencies: '@babel/core': 7.29.7 '@babel/template': 7.29.7 @@ -2638,8 +2638,8 @@ snapshots: unplugin: 3.0.0 zod: 4.4.3 optionalDependencies: - '@tanstack/react-router': 1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - vite: 8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0) + '@tanstack/react-router': 1.170.16(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + vite: 8.0.16(@types/node@25.9.4)(jiti@2.7.0)(sass@1.101.0) transitivePeerDependencies: - supports-color @@ -2662,35 +2662,35 @@ snapshots: '@tanstack/virtual-file-routes@1.162.0': {} - '@tauri-apps/api@2.11.0': {} + '@tauri-apps/api@2.11.1': {} '@tauri-apps/plugin-clipboard-manager@2.3.2': dependencies: - '@tauri-apps/api': 2.11.0 + '@tauri-apps/api': 2.11.1 '@tauri-apps/plugin-dialog@2.7.1': dependencies: - '@tauri-apps/api': 2.11.0 + '@tauri-apps/api': 2.11.1 '@tauri-apps/plugin-fs@2.5.1': dependencies: - '@tauri-apps/api': 2.11.0 + '@tauri-apps/api': 2.11.1 '@tauri-apps/plugin-http@2.5.9': dependencies: - '@tauri-apps/api': 2.11.0 + '@tauri-apps/api': 2.11.1 '@tauri-apps/plugin-log@2.8.0': dependencies: - '@tauri-apps/api': 2.11.0 + '@tauri-apps/api': 2.11.1 '@tauri-apps/plugin-opener@2.5.4': dependencies: - '@tauri-apps/api': 2.11.0 + '@tauri-apps/api': 2.11.1 '@tauri-apps/plugin-os@2.3.2': dependencies: - '@tauri-apps/api': 2.11.0 + '@tauri-apps/api': 2.11.1 '@tybys/wasm-util@0.10.2': dependencies: @@ -2719,7 +2719,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@25.9.3': + '@types/node@25.9.4': dependencies: undici-types: 7.24.6 @@ -2742,10 +2742,10 @@ snapshots: '@ungap/structured-clone@1.3.1': {} - '@vitejs/plugin-react@6.0.2(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0))': + '@vitejs/plugin-react@6.0.2(vite@8.0.16(@types/node@25.9.4)(jiti@2.7.0)(sass@1.101.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0) + vite: 8.0.16(@types/node@25.9.4)(jiti@2.7.0)(sass@1.101.0) ajv@8.20.0: dependencies: @@ -2788,7 +2788,7 @@ snapshots: bail@2.0.2: {} - baseline-browser-mapping@2.10.37: {} + baseline-browser-mapping@2.10.38: {} braces@3.0.3: dependencies: @@ -2796,10 +2796,10 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.37 + baseline-browser-mapping: 2.10.38 caniuse-lite: 1.0.30001799 - electron-to-chromium: 1.5.372 - node-releases: 2.0.47 + electron-to-chromium: 1.5.376 + node-releases: 2.0.48 update-browserslist-db: 1.2.3(browserslist@4.28.2) byte-size@9.0.1: {} @@ -2892,7 +2892,7 @@ snapshots: diff@8.0.4: {} - electron-to-chromium@1.5.372: {} + electron-to-chromium@1.5.376: {} emoji-regex@8.0.0: {} @@ -3073,7 +3073,7 @@ snapshots: is-plain-object@5.0.0: {} - isbot@5.1.42: {} + isbot@5.1.43: {} isexe@2.0.0: {} @@ -3420,12 +3420,12 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.12: {} + nanoid@3.3.14: {} node-addon-api@7.1.1: optional: true - node-releases@2.0.47: {} + node-releases@2.0.48: {} normalize-path@3.0.0: {} @@ -3509,7 +3509,7 @@ snapshots: postcss@8.5.15: dependencies: - nanoid: 3.3.12 + nanoid: 3.3.14 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -3757,7 +3757,7 @@ snapshots: postcss-selector-parser: 7.1.4 postcss-value-parser: 4.2.0 string-width: 8.2.1 - supports-hyperlinks: 4.4.0 + supports-hyperlinks: 4.5.0 svg-tags: 1.0.0 table: 6.9.0 write-file-atomic: 7.0.1 @@ -3767,14 +3767,14 @@ snapshots: supports-color@10.2.2: {} - supports-hyperlinks@4.4.0: + supports-hyperlinks@4.5.0: dependencies: has-flag: 5.0.1 supports-color: 10.2.2 svg-tags@1.0.0: {} - tabbable@6.4.0: {} + tabbable@6.5.0: {} table@6.9.0: dependencies: @@ -3866,7 +3866,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.101.0): + vite@8.0.16(@types/node@25.9.4)(jiti@2.7.0)(sass@1.101.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -3874,7 +3874,7 @@ snapshots: rolldown: 1.0.3 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 25.9.3 + '@types/node': 25.9.4 fsevents: 2.3.3 jiti: 2.7.0 sass: 1.101.0 diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModal.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModal.tsx index fd6d8a835..90be49f2b 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModal.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModal.tsx @@ -8,6 +8,7 @@ interface StoreValues { view: ConnectModalViewValue | null; perviousView: ConnectModalViewValue | null; postureError: string | null; + autoStartOpenId: boolean; } const defaults: StoreValues = { @@ -16,6 +17,7 @@ const defaults: StoreValues = { view: null, perviousView: null, postureError: null, + autoStartOpenId: false, } as const; interface Store extends StoreValues { diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/ConnectModalMfaOidc.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/ConnectModalMfaOidc.tsx index 8b1769615..8227de80f 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/ConnectModalMfaOidc.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/ConnectModalMfaOidc.tsx @@ -1,8 +1,15 @@ -import { useEffect, useState } from 'react'; +import './style.scss'; +import { useQuery } from '@tanstack/react-query'; +import { Fragment, useCallback, useEffect, useState } from 'react'; import { useShallow } from 'zustand/shallow'; import { Button } from '../../../../../../../shared/components/Button/Button'; import { ButtonVariant } from '../../../../../../../shared/components/Button/types'; -import { Controls } from '../../../../../../../shared/components/Controls/Controls'; +import { Checkbox } from '../../../../../../../shared/components/Checkbox/Checkbox'; +import { SizedBox } from '../../../../../../../shared/components/SizedBox/SizedBox'; +import { api } from '../../../../../../../shared/rust-api/api'; +import { getAppConfigQueryOptions } from '../../../../../../../shared/rust-api/query'; +import { ThemeSpacing } from '../../../../../../../shared/types'; +import { isPresent } from '../../../../../../../shared/utils/isPresent'; import { ConnectModalPostureCheckLoading } from '../../components/ConnectModalPostureCheckLoading/ConnectModalPostureCheckLoading'; import { ConnectModalView } from '../../hooks/types'; import { useConnectModal } from '../../hooks/useConnectModal'; @@ -11,8 +18,9 @@ import { useConnectModalMfaOidc } from '../../hooks/useConnectModalMfaOidc'; type Screen = 'idle' | 'polling' | 'error'; export const ConnectModalMfaOidc = () => { - const [perviousView, location] = useConnectModal( - useShallow((s) => [s.perviousView, s.location]), + const { data: appConfig } = useQuery(getAppConfigQueryOptions); + const [perviousView, location, initAutoStart] = useConnectModal( + useShallow((s) => [s.perviousView, s.location, s.autoStartOpenId]), ); const { start, isStarting, startError, isPolling, pollError } = useConnectModalMfaOidc({ @@ -34,13 +42,20 @@ export const ConnectModalMfaOidc = () => { } }, [startError, pollError, isPolling]); - const handleStart = async () => { + const handleStart = useCallback(async () => { await start(); setScreen('polling'); - }; + }, [start]); const errorMessage = startError ?? pollError; + // biome-ignore lint/correctness/useExhaustiveDependencies: on mount side effect + useEffect(() => { + if (initAutoStart) { + handleStart(); + } + }, [initAutoStart]); + if (isStarting && location?.posture_check_required && !startError) { return ; } @@ -59,25 +74,40 @@ export const ConnectModalMfaOidc = () => {

    )} {screen === 'error' &&

    {errorMessage}

    } - -
    - {screen !== 'error' && ( -
    -
    + + )} +
    ); }; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/style.scss b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/style.scss new file mode 100644 index 000000000..8d34299cb --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/style.scss @@ -0,0 +1,7 @@ +#mfa-oidc-view { + .actions { + .btn { + width: 100%; + } + } +} diff --git a/new-ui/src/pages/full/SettingsPage/SettingsPage.tsx b/new-ui/src/pages/full/SettingsPage/SettingsPage.tsx index 43b6c69e0..45d4137bf 100644 --- a/new-ui/src/pages/full/SettingsPage/SettingsPage.tsx +++ b/new-ui/src/pages/full/SettingsPage/SettingsPage.tsx @@ -102,6 +102,15 @@ export const SettingsPage = () => { /> + + + patchConfig({ auto_start_openid_mfa: !appConfig.auto_start_openid_mfa }) + } + /> + +

    Defguard is made possible by other open-source software.{' '}

    +
    +
    +
    + + ); +}; diff --git a/new-ui/src/pages/playground/components/PlaygroundSnackbarTest/style.scss b/new-ui/src/pages/playground/components/PlaygroundSnackbarTest/style.scss new file mode 100644 index 000000000..b0e8a6456 --- /dev/null +++ b/new-ui/src/pages/playground/components/PlaygroundSnackbarTest/style.scss @@ -0,0 +1,17 @@ +.playground-snackbar-test { + display: flex; + flex-direction: column; + gap: 12px; + + h3 { + margin: 0; + font-size: 14px; + font-weight: 600; + } + + .actions { + display: flex; + flex-wrap: wrap; + gap: 8px; + } +} diff --git a/new-ui/src/pages/playground/components/PlaygroundTestMenu/PlaygroundTestMenu.tsx b/new-ui/src/pages/playground/components/PlaygroundTestMenu/PlaygroundTestMenu.tsx new file mode 100644 index 000000000..ba0ed4ac3 --- /dev/null +++ b/new-ui/src/pages/playground/components/PlaygroundTestMenu/PlaygroundTestMenu.tsx @@ -0,0 +1,108 @@ +import './style.scss'; +import { useState } from 'react'; +import { Menu } from '../../../../shared/components/Menu/Menu'; +import { PlaygroundCard } from '../PlaygroundCard/PlaygroundCard'; + +export const PlaygroundTestMenu = () => { + const [lastClicked, setLastClicked] = useState(null); + + return ( + +
    +

    Menu

    + {lastClicked &&

    Last clicked: {lastClicked}

    } + setLastClicked('Edit') }, + { + text: 'Duplicate', + icon: 'copy', + onClick: () => setLastClicked('Duplicate'), + }, + ], + }, + { + items: [ + { + text: 'Delete', + icon: 'delete', + variant: 'danger', + onClick: () => setLastClicked('Delete'), + }, + ], + }, + ]} + /> +

    Menu with disabled & nested

    + setLastClicked('New') }, + { + text: 'Open', + icon: 'edit', + disabled: true, + onClick: () => setLastClicked('Open'), + }, + { + text: 'Export', + icon: 'copy', + items: [ + { + text: 'Export as PDF', + onClick: () => setLastClicked('Export as PDF'), + }, + { + text: 'Export as CSV', + onClick: () => setLastClicked('Export as CSV'), + }, + { + text: 'Export as JSON', + disabled: true, + onClick: () => setLastClicked('Export as JSON'), + }, + ], + }, + ], + }, + { + header: { text: 'Advanced' }, + items: [ + { + text: 'Settings', + icon: 'settings', + items: [ + { text: 'General', onClick: () => setLastClicked('General') }, + { text: 'Security', onClick: () => setLastClicked('Security') }, + ], + }, + { + text: 'Maintenance', + icon: 'protection', + disabled: true, + onClick: () => setLastClicked('Maintenance'), + }, + ], + }, + { + items: [ + { + text: 'Delete', + icon: 'delete', + variant: 'danger', + disabled: true, + onClick: () => setLastClicked('Delete (disabled)'), + }, + ], + }, + ]} + /> +
    +
    + ); +}; diff --git a/new-ui/src/pages/playground/components/PlaygroundTestMenu/style.scss b/new-ui/src/pages/playground/components/PlaygroundTestMenu/style.scss new file mode 100644 index 000000000..612c6af41 --- /dev/null +++ b/new-ui/src/pages/playground/components/PlaygroundTestMenu/style.scss @@ -0,0 +1,10 @@ +.playground-test-menu { + display: flex; + flex-direction: column; + gap: 12px; + + .last-clicked { + font-size: 13px; + color: var(--text-secondary); + } +} diff --git a/new-ui/src/pages/playground/components/PlaygroundTestSelect.tsx b/new-ui/src/pages/playground/components/PlaygroundTestSelect.tsx new file mode 100644 index 000000000..c5438222e --- /dev/null +++ b/new-ui/src/pages/playground/components/PlaygroundTestSelect.tsx @@ -0,0 +1,67 @@ +import { useState } from 'react'; +import { Select } from '../../../shared/components/Select/Select'; +import type { + SelectOption, + SelectOptionGroup, +} from '../../../shared/components/Select/types'; + +type RegionOption = { + code: string; +}; + +const quickOptions: readonly SelectOption[] = [ + { + key: 'all', + label: 'All Regions', + value: { code: 'all' }, + }, +]; + +const groupedOptions: readonly SelectOptionGroup[] = [ + { + key: 'eu', + label: 'Europe', + options: [ + { + key: 'de', + label: 'Germany', + value: { code: 'de' }, + }, + { + key: 'fr', + label: 'France', + value: { code: 'fr' }, + }, + ], + }, + { + key: 'americas', + label: 'Americas', + options: [ + { + key: 'us', + label: 'United States', + value: { code: 'us' }, + }, + { + key: 'ca', + label: 'Canada', + value: { code: 'ca' }, + }, + ], + }, +]; + +export const PlaygroundTestSelect = () => { + const [value, setValue] = useState>(quickOptions[0]); + + return ( + +// Accepts an absent instance id and self-disables via skipToken, so callers +// (e.g. a tunnel selection with no backing instance) can pass through whatever +// they resolved without a sentinel id or a separate `enabled` flag. +export const getLocationsQueryOptions = (instanceId: number | undefined) => queryOptions({ queryKey: ['locations', instanceId] as const, - queryFn: () => api.getLocations(instanceId), + queryFn: isPresent(instanceId) ? () => api.getLocations(instanceId) : skipToken, }); export const hasAnyVisibleLocationsQueryOptions = queryOptions({ diff --git a/new-ui/src/shared/rust-api/types.ts b/new-ui/src/shared/rust-api/types.ts index c84aabf18..7ffb204b5 100644 --- a/new-ui/src/shared/rust-api/types.ts +++ b/new-ui/src/shared/rust-api/types.ts @@ -345,10 +345,12 @@ export type TunnelRequest = { prvkey: string; address: string; server_pubkey: string; + preshared_key?: string; allowed_ips?: string; endpoint: string; dns?: string; persistent_keep_alive: number; + route_all_traffic: boolean; pre_up?: string; post_up?: string; pre_down?: string; diff --git a/new-ui/src/shared/utils/patterns.ts b/new-ui/src/shared/utils/patterns.ts index 845194b31..60baf039f 100644 --- a/new-ui/src/shared/utils/patterns.ts +++ b/new-ui/src/shared/utils/patterns.ts @@ -75,9 +75,12 @@ export const patternValidIpWithMask = export const cidrRegex = /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}|[0-9a-fA-F:.]+\/\d{1,3})$/; -// Regular expression to match IPv4, IPv6, domain name, or localhost with port +// Regular expression to match a WireGuard endpoint. A bare IPv4 literal must +// include a port (a port-less IP is almost always a mistake), while domain names +// and localhost may omit it. IPv6 endpoints are validated separately via +// patternValidIpV6WithPort (port required there too). export const patternValidEndpoint = - /^(localhost|\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b|\b(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}\b)(?::(\d+))?$/; + /^(?:(?:localhost|(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,})(?::\d+)?|(?:[0-9]{1,3}\.){3}[0-9]{1,3}:\d+)$/; // Copied from zod source code export const patternValidIpV6 = diff --git a/new-ui/src/shared/utils/zod.ts b/new-ui/src/shared/utils/zod.ts index fcad50861..2e69a823e 100644 --- a/new-ui/src/shared/utils/zod.ts +++ b/new-ui/src/shared/utils/zod.ts @@ -1,4 +1,10 @@ -import type z from 'zod'; +import { z } from 'zod'; +import { + cidrRegex, + patternValidEndpoint, + patternValidIpV6WithPort, + patternValidWireguardKey, +} from './patterns'; export const createZodIssue = ( message: string, @@ -8,3 +14,33 @@ export const createZodIssue = ( message, path, }); + +// Shared field schemas for the WireGuard tunnel forms (add/edit). Kept here so +// the tunnel wizard and the edit-tunnel modal validate identically. + +// WireGuard endpoint (host:port): IPv4:port, domain[:port], or [IPv6]:port. +export const endpointSchema = z + .string() + .refine( + (v) => patternValidEndpoint.test(v) || patternValidIpV6WithPort.test(v), + 'Invalid address', + ); + +// A required WireGuard key. +export const wireguardKeySchema = z + .string() + .refine((v) => patternValidWireguardKey.test(v), 'Invalid WireGuard key'); + +// An optional WireGuard key - an empty value is allowed (e.g. preshared key). +export const optionalWireguardKeySchema = z + .string() + .refine((v) => !v || patternValidWireguardKey.test(v), 'Invalid WireGuard key'); + +// Comma-separated list of CIDR ranges; an empty value is allowed. +export const allowedIpsSchema = z.string().refine((v) => { + if (!v) return true; + return v + .split(',') + .map((s) => s.trim()) + .every((cidr) => cidrRegex.test(cidr)); +}, 'Invalid CIDR notation'); diff --git a/src-tauri/core/src/database/models/mod.rs b/src-tauri/core/src/database/models/mod.rs index 1340da6e5..449de17a2 100644 --- a/src-tauri/core/src/database/models/mod.rs +++ b/src-tauri/core/src/database/models/mod.rs @@ -11,7 +11,7 @@ pub mod wireguard_keys; // Typestate structs to make working with optional IDs easier pub type Id = i64; -#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)] +#[derive(Debug, Default, Deserialize, Eq, Hash, PartialEq, Serialize)] pub struct NoId; const PURGE_DURATION: chrono::Duration = chrono::Duration::days(30); diff --git a/src-tauri/core/src/database/models/tunnel.rs b/src-tauri/core/src/database/models/tunnel.rs index 262ad647d..452c81ad0 100644 --- a/src-tauri/core/src/database/models/tunnel.rs +++ b/src-tauri/core/src/database/models/tunnel.rs @@ -15,6 +15,7 @@ use crate::{ #[serde_as] #[derive(Clone, Deserialize, Serialize)] pub struct Tunnel { + #[serde(default)] pub id: I, pub name: String, // encryption keys From aaba868d5cd3aa888b16369ce6d66a90ffeb3d94 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 9 Jul 2026 15:53:26 +0200 Subject: [PATCH 108/155] Separate keychain for builds (#1031) --- .github/workflows/build-macos.yaml | 49 +++++++-------------- .github/workflows/posture.yaml | 20 --------- .github/workflows/release-macos.yaml | 11 +++-- src-tauri/Cargo.lock | 66 ++++++++++++++++++++++++---- 4 files changed, 81 insertions(+), 65 deletions(-) diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index ae1f2b5b8..f2774d466 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -12,6 +12,8 @@ on: - v*.*.* env: + SCCACHE_GHA_ENABLED: "true" + RUSTC_WRAPPER: "sccache" SQLX_OFFLINE: "1" jobs: @@ -23,11 +25,8 @@ jobs: env: APPLE_SIGNING_IDENTITY: "Apple Distribution: defguard sp. z o.o. (82GZ7KN29J)" APPLE_SIGNING_IDENTITY_INSTALLER: "3rd Party Mac Developer Installer: defguard sp. z o.o. (82GZ7KN29J)" - APPLE_PROVIDER_SHORT_NAME: "82GZ7KN29J" - APPLE_ID: "kamil@defguard.net" - APPLE_TEAM_ID: "82GZ7KN29J" steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: submodules: recursive @@ -47,6 +46,7 @@ jobs: - uses: pnpm/action-setup@v6 with: cache: true + run_install: false version: 11 - name: Install Node dependencies for New UI @@ -59,15 +59,15 @@ jobs: with: targets: aarch64-apple-darwin,x86_64-apple-darwin + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@v0.0.10 + - name: Set build number run: | sed -i '' "s,@BUILD_NUMBER@,${{ github.run_number }}," swift/extension/VPNExtension.xcodeproj/project.pbxproj sed -i '' "s,@BUILD_NUMBER@,${{ github.run_number }}," src-tauri/client-cli/Info.plist sed -i '' "s,@BUILD_NUMBER@,${{ github.run_number }}," src-tauri/tauri.macos.conf.json - - name: Unlock keychain - run: security -v unlock-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" login.keychain - - name: Build new UI run: | cd new-ui @@ -80,34 +80,17 @@ jobs: with: args: --config src-tauri/tauri.app.conf.json --target universal-apple-darwin - # - name: Bundle Defguard CLI - # env: - # BUNDLE: "target/universal-apple-darwin/release/bundle/macos/Defguard.app" - # run: | - # cd src-tauri - # mkdir -p ${BUNDLE}/Contents/Helpers/defguard-cli/Contents/MacOS - # lipo -create -output ${BUNDLE}/Contents/Helpers/defguard-cli/Contents/MacOS/defguard-cli \ - # target/aarch64-apple-darwin/release/defguard-cli \ - # target/x86_64-apple-darwin/release/defguard-cli - # ln -f client-cli/Info.plist ${BUNDLE}/Contents/Helpers/defguard-cli/Contents/Info.plist - # pushd ${BUNDLE}/Contents/Helpers/defguard-cli/Contents - # ln -f ../../../embedded.provisionprofile . - # popd - # codesign --verbose --force --options runtime \ - # --sign "${{ env.APPLE_SIGNING_IDENTITY }}" \ - # --prefix net.defguard. --entitlements Client.entitlements \ - # ${BUNDLE}/Contents/Helpers/defguard-cli - # codesign --verbose --force --options runtime \ - # --sign "${{ env.APPLE_SIGNING_IDENTITY }}" \ - # --entitlements Client.entitlements ${BUNDLE} - - name: Build installation package run: | - security -v unlock-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" login.keychain - xcrun productbuild --sign "${{ env.APPLE_SIGNING_IDENTITY_INSTALLER }}" --component "src-tauri/target/universal-apple-darwin/release/bundle/macos/Defguard.app" /Applications defguard-client.pkg - xcrun altool --api-key ${{ secrets.APPLE_API_KEY }} --api-issuer ${{ secrets.APPLE_API_ISSUER }} --upload-app --platform macos --file defguard-client.pkg --wait - # xcrun notarytool submit --wait --apple-id ${{ env.APPLE_ID }} --password ${{ secrets.NOTARYTOOL_APP_SPECIFIC_PASSWORD }} --team-id ${{ env.APPLE_TEAM_ID }} defguard-client.pkg - # xcrun stapler staple defguard-client.pkg + security unlock-keychain -p "${{ secrets.BUILD_KEYCHAIN_PASSWORD }}" build.keychain + xcrun productbuild --keychain build.keychain \ + --sign "${{ env.APPLE_SIGNING_IDENTITY_INSTALLER }}" \ + --component "src-tauri/target/universal-apple-darwin/release/bundle/macos/Defguard.app" \ + /Applications defguard-client.pkg + xcrun notarytool submit defguard-client.pkg \ + --key ~/.private_keys/AuthKey_${{ secrets.APPLE_API_KEY }}.p8 \ + --key-id "${{ secrets.APPLE_API_KEY }}" --issuer "${{ secrets.APPLE_API_ISSUER }}" \ + --wait - name: Upload What's New env: diff --git a/.github/workflows/posture.yaml b/.github/workflows/posture.yaml index 0f096cee5..52802208b 100644 --- a/.github/workflows/posture.yaml +++ b/.github/workflows/posture.yaml @@ -44,10 +44,6 @@ jobs: run: | cargo test -p defguard-client-posture --locked --lib inspector::tests::ci::linux::setup1 -- --ignored - - name: Show sccache stats - run: sccache --show-stats - - test-linux-postures-encrypted: name: Linux postures - encrypted runs-on: @@ -77,10 +73,6 @@ jobs: run: | cargo test -p defguard-client-posture --locked --lib inspector::tests::ci::linux::setup2 -- --ignored - - name: Show sccache stats - run: sccache --show-stats - - test-windows-postures-setup1: name: Windows postures - setup1 runs-on: @@ -106,9 +98,6 @@ jobs: run: | cargo test -p defguard-client-posture --locked --lib inspector::tests::ci::windows::setup1 -- --ignored - - name: Show sccache stats - run: sccache --show-stats - test-windows-postures-setup2: name: Windows postures - setup2 runs-on: @@ -134,9 +123,6 @@ jobs: run: | cargo test -p defguard-client-posture --locked --lib inspector::tests::ci::windows::setup2 -- --ignored - - name: Show sccache stats - run: sccache --show-stats - test-macos-postures-unencrypted: name: macOS postures - unencrypted runs-on: @@ -159,9 +145,6 @@ jobs: run: | cargo test -p defguard-client-posture --locked --lib inspector::tests::ci::macos::setup1 -- --ignored - - name: Show sccache stats - run: sccache --show-stats - test-macos-postures-encrypted: name: macOS postures - encrypted runs-on: @@ -183,6 +166,3 @@ jobs: working-directory: src-tauri/ run: | cargo test -p defguard-client-posture --locked --lib inspector::tests::ci::macos::setup2 -- --ignored - - - name: Show sccache stats - run: sccache --show-stats diff --git a/.github/workflows/release-macos.yaml b/.github/workflows/release-macos.yaml index f2b7a6bff..ee5da912d 100644 --- a/.github/workflows/release-macos.yaml +++ b/.github/workflows/release-macos.yaml @@ -8,6 +8,8 @@ on: type: string env: + SCCACHE_GHA_ENABLED: "true" + RUSTC_WRAPPER: "sccache" SQLX_OFFLINE: "1" jobs: @@ -17,7 +19,7 @@ jobs: - macOS - native steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: submodules: recursive @@ -37,6 +39,7 @@ jobs: - uses: pnpm/action-setup@v6 with: cache: true + run_install: false version: 11 - name: Install Node dependencies for New UI @@ -49,15 +52,15 @@ jobs: with: targets: aarch64-apple-darwin,x86_64-apple-darwin + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@v0.0.10 + - name: Set build number run: | sed -i '' "s,@BUILD_NUMBER@,${{ github.run_number }}," swift/extension/VPNExtension.xcodeproj/project.pbxproj sed -i '' "s,@BUILD_NUMBER@,${{ github.run_number }}," src-tauri/client-cli/Info.plist sed -i '' "s,@BUILD_NUMBER@,${{ github.run_number }}," src-tauri/tauri.macos.conf.json - - name: Unlock keychain - run: security -v unlock-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" login.keychain - - name: Build new UI run: | cd new-ui diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 471b1f5b9..090c75c09 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -914,9 +914,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" dependencies = [ "serde", ] @@ -2372,14 +2372,16 @@ dependencies = [ [[package]] name = "exr" -version = "1.74.0" +version = "1.74.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" +checksum = "6be87932f10230a4339ab394edd8e4611fcb72553d8295b4d52ea55249b3daa5" dependencies = [ "bit_field", "half", "lebe", "miniz_oxide", + "num-complex", + "pulp", "rayon-core", "smallvec", "zune-inflate", @@ -4342,6 +4344,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "bytemuck", + "num-traits", +] + [[package]] name = "num-conv" version = "0.2.2" @@ -5381,6 +5393,29 @@ dependencies = [ "pulldown-cmark", ] +[[package]] +name = "pulp" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046aa45b989642ec2e4717c8e72d677b13edd831a4d3b6cf37d9a3e54912496a" +dependencies = [ + "bytemuck", + "cfg-if", + "libm", + "num-complex", + "paste", + "pulp-wasm-simd-flag", + "raw-cpuid", + "reborrow", + "version_check", +] + +[[package]] +name = "pulp-wasm-simd-flag" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8f70e07b9c3962945a74e59ca1c511bba65b6419468acc217c457d93f3c740" + [[package]] name = "pxfm" version = "0.1.30" @@ -5648,6 +5683,15 @@ dependencies = [ "rgb", ] +[[package]] +name = "raw-cpuid" +version = "11.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" +dependencies = [ + "bitflags 2.13.0", +] + [[package]] name = "raw-window-handle" version = "0.6.2" @@ -5674,6 +5718,12 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "reborrow" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" + [[package]] name = "redox_syscall" version = "0.5.18" @@ -9893,18 +9943,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.53" +version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75726053136156d419e285b9b7eddaaea9e3fea6ce32eed44a89901f0bd98de1" +checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.53" +version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4714fd92cf900833d49538023a9b3915155210801d1c1169eba513b2addefd71" +checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" dependencies = [ "proc-macro2", "quote", From 8359998f42cffa6972afa424813ff9e4ffecc78a Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 9 Jul 2026 16:40:42 +0200 Subject: [PATCH 109/155] Fix split DNS on macOS (#1033) --- src-tauri/Cargo.lock | 12 ++++++------ .../Sources/Defguard/TunnelConfiguration.swift | 11 ++++++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 090c75c09..c95350497 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -5786,9 +5786,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.4" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" +checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" dependencies = [ "aho-corasick", "memchr", @@ -5798,9 +5798,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" dependencies = [ "aho-corasick", "memchr", @@ -7073,9 +7073,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.39.5" +version = "0.39.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8bd2130a9b60bee2581bf82cfe89ee836424d1f37dcfa4ce21509611684673" +checksum = "d2071df9448915b71c4fe6d25deaf1c22f12bd234f01540b77312bb8e41361e6" dependencies = [ "libc", "memchr", diff --git a/swift/plugin/Sources/Defguard/TunnelConfiguration.swift b/swift/plugin/Sources/Defguard/TunnelConfiguration.swift index ca4f76e7c..619a17cae 100644 --- a/swift/plugin/Sources/Defguard/TunnelConfiguration.swift +++ b/swift/plugin/Sources/Defguard/TunnelConfiguration.swift @@ -71,10 +71,15 @@ final class TunnelConfiguration: Codable { networkSettings.tunnelOverheadBytes = 80 let dnsSettings = NEDNSSettings(servers: dns) - dnsSettings.searchDomains = dnsSearch if !dns.isEmpty { - // Make all DNS queries go through the tunnel. - dnsSettings.matchDomains = [""] + if dnsSearch.isEmpty { + // Resolve all DNS queries. + dnsSettings.matchDomains = [""] + } else { + // Split DNS queries. + dnsSettings.matchDomains = dnsSearch + dnsSettings.searchDomains = dnsSearch + } } networkSettings.dnsSettings = dnsSettings From 6673567d0a0aad0f31648c38b5cc27f767e0ec3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Thu, 9 Jul 2026 16:46:49 +0200 Subject: [PATCH 110/155] Unlock keychain before building the app --- .github/workflows/build-macos.yaml | 5 ++++- .github/workflows/release-macos.yaml | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index f2774d466..226298821 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -73,6 +73,10 @@ jobs: cd new-ui pnpm build + - name: Unlock keychain + run: | + security unlock-keychain -p "${{ secrets.BUILD_KEYCHAIN_PASSWORD }}" build.keychain + - name: Build app uses: tauri-apps/tauri-action@v1 env: @@ -82,7 +86,6 @@ jobs: - name: Build installation package run: | - security unlock-keychain -p "${{ secrets.BUILD_KEYCHAIN_PASSWORD }}" build.keychain xcrun productbuild --keychain build.keychain \ --sign "${{ env.APPLE_SIGNING_IDENTITY_INSTALLER }}" \ --component "src-tauri/target/universal-apple-darwin/release/bundle/macos/Defguard.app" \ diff --git a/.github/workflows/release-macos.yaml b/.github/workflows/release-macos.yaml index ee5da912d..93aad792e 100644 --- a/.github/workflows/release-macos.yaml +++ b/.github/workflows/release-macos.yaml @@ -66,6 +66,10 @@ jobs: cd new-ui pnpm build + - name: Unlock keychain + run: | + security unlock-keychain -p "${{ secrets.BUILD_KEYCHAIN_PASSWORD }}" build.keychain + - name: Build app uses: tauri-apps/tauri-action@v1 env: From c1146bd6533bc0aa057fd885941c1889e355e0ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Thu, 9 Jul 2026 17:11:41 +0200 Subject: [PATCH 111/155] Revert to altool --- .github/workflows/build-macos.yaml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index 226298821..f9276e6a7 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -90,10 +90,9 @@ jobs: --sign "${{ env.APPLE_SIGNING_IDENTITY_INSTALLER }}" \ --component "src-tauri/target/universal-apple-darwin/release/bundle/macos/Defguard.app" \ /Applications defguard-client.pkg - xcrun notarytool submit defguard-client.pkg \ - --key ~/.private_keys/AuthKey_${{ secrets.APPLE_API_KEY }}.p8 \ - --key-id "${{ secrets.APPLE_API_KEY }}" --issuer "${{ secrets.APPLE_API_ISSUER }}" \ - --wait + xcrun altool --api-key ${{ secrets.APPLE_API_KEY }} \ + --api-issuer ${{ secrets.APPLE_API_ISSUER }} \ + --upload-app --platform macos --file defguard-client.pkg --wait - name: Upload What's New env: From b2d27d41e2055d79b0ec66e32c9d6cf7683ce7d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Fri, 10 Jul 2026 14:46:44 +0200 Subject: [PATCH 112/155] fix delete last selectable (#1034) * fix delete last selectable * Update OverviewActionsButton.tsx --- .../OverviewActionsButton.tsx | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/new-ui/src/pages/full/OverviewPage/components/OverviewActionsButton/OverviewActionsButton.tsx b/new-ui/src/pages/full/OverviewPage/components/OverviewActionsButton/OverviewActionsButton.tsx index 86af5b43b..f8325a9aa 100644 --- a/new-ui/src/pages/full/OverviewPage/components/OverviewActionsButton/OverviewActionsButton.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/OverviewActionsButton/OverviewActionsButton.tsx @@ -12,6 +12,7 @@ import { import { Icon } from '../../../../../shared/components/Icon'; import { ThemeVariable } from '../../../../../shared/types'; import './style.scss'; +import { useNavigate } from '@tanstack/react-router'; import { error } from '@tauri-apps/plugin-log'; import { useCallback, useMemo, useState } from 'react'; import { ButtonVariant } from '../../../../../shared/components/Button/types'; @@ -20,6 +21,7 @@ import type { MenuItemsGroup } from '../../../../../shared/components/Menu/types import { useConfirmModal } from '../../../../../shared/hooks/confirmModal/useConfirmModal'; import { openModal } from '../../../../../shared/hooks/modalControls/modalsSubjects'; import { ModalName } from '../../../../../shared/hooks/modalControls/modalTypes'; +import { useAppData } from '../../../../../shared/providers/AppDataContext'; import { api } from '../../../../../shared/rust-api/api'; import type { InstanceInfo, @@ -33,6 +35,8 @@ type Props = { export const OverviewActionsButton = ({ selection, instance }: Props) => { const [isOpen, setOpen] = useState(false); + const navigate = useNavigate(); + const { instances, tunnels, setViewSelection } = useAppData(); const { refs, context, floatingStyles } = useFloating({ placement: 'bottom-end', @@ -86,8 +90,25 @@ export const OverviewActionsButton = ({ selection, instance }: Props) => { } }, [selection, instance]); + const findSelectionCandidate = useCallback( + (current: OverviewViewSelection): OverviewViewSelection | null => { + const combined: OverviewViewSelection[] = [ + ...instances.map((i) => ({ kind: 'instance' as const, id: i.id })), + ...tunnels.map((t) => ({ kind: 'tunnel' as const, id: t.id })), + ]; + const index = combined.findIndex( + (item) => item.kind === current.kind && item.id === current.id, + ); + if (index === -1) return null; + const remaining = combined.filter((_, i) => i !== index); + return remaining[index] ?? remaining[index - 1] ?? null; + }, + [instances, tunnels], + ); + const handleDelete = useCallback(async () => { if (!selection) return; + const candidate = findSelectionCandidate(selection); try { switch (selection.kind) { case 'instance': @@ -97,10 +118,14 @@ export const OverviewActionsButton = ({ selection, instance }: Props) => { await api.deleteTunnel(selection.id); break; } + if (!candidate) { + navigate({ to: '/full/add', replace: true }); + } + setViewSelection(candidate); } catch (e) { error(`Failed delete action, ${String(e)}`); } - }, [selection]); + }, [selection, findSelectionCandidate, setViewSelection, navigate]); const handleDeleteIntent = useCallback(() => { if (!selection) return; From 271a502030370c8282ee61c26bc2a4313db3f053 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:13:12 +0200 Subject: [PATCH 113/155] add enrollment markdown message from core (#1036) * add enrollment markdown message from core fix session timeout during enrollment fix sticky wizard steps side container * chore(nix): update new-ui pnpm deps hash * Update style.scss * pin pnpm to 11.11 * pin pnpm to 11.11 --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/workflows/e2e.yaml | 4 +- .github/workflows/lint.yaml | 2 +- .github/workflows/release-macos.yaml | 2 +- .github/workflows/release.yaml | 4 +- new-ui/package.json | 1 + new-ui/pnpm-lock.yaml | 201 ++++++++++++++++++ .../hooks/useEnrollmentStore.tsx | 5 +- .../steps/FinishStep/FinishStep.tsx | 19 +- .../steps/FinishStep/style.scss | 171 +++++++++++++++ .../SessionTimeoutPage/SessionTimeoutPage.tsx | 10 +- .../RenderMarkdown/RenderMarkdown.tsx | 2 + .../wizard/WizardPage/WizardPage.tsx | 8 +- .../components/wizard/WizardPage/style.scss | 9 +- nix/package.nix | 2 +- 14 files changed, 418 insertions(+), 22 deletions(-) diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 175576bc1..38f1c4a95 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -49,7 +49,7 @@ jobs: uses: pnpm/action-setup@v6 with: cache: true - version: 11 + version: 11.11 run_install: false - name: Install Rust stable @@ -117,7 +117,7 @@ jobs: - name: Install pnpm uses: pnpm/action-setup@v6 with: - version: 11 + version: 11.11 run_install: false - name: Install e2e dependencies diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index f7bb499b3..c7dba3f9b 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -35,7 +35,7 @@ jobs: - uses: pnpm/action-setup@v6 with: cache: true - version: 11 + version: 11.11 run_install: false - name: Get pnpm store directory diff --git a/.github/workflows/release-macos.yaml b/.github/workflows/release-macos.yaml index 93aad792e..8f84b16b1 100644 --- a/.github/workflows/release-macos.yaml +++ b/.github/workflows/release-macos.yaml @@ -40,7 +40,7 @@ jobs: with: cache: true run_install: false - version: 11 + version: 11.11 - name: Install Node dependencies for New UI run: | diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 1ffe2530b..3d076b5a6 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -70,7 +70,7 @@ jobs: uses: pnpm/action-setup@v6 with: cache: true - version: 11 + version: 11.11 run_install: false - name: Get pnpm store directory @@ -178,7 +178,7 @@ jobs: - uses: pnpm/action-setup@v6 with: cache: true - version: 11 + version: 11.11 run_install: false - name: Get pnpm store directory diff --git a/new-ui/package.json b/new-ui/package.json index 4ee6e5002..71af3ebc3 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -46,6 +46,7 @@ "react-markdown": "^10.1.0", "rehype-raw": "^7.0.0", "rehype-sanitize": "^6.0.0", + "remark-gfm": "^4.0.1", "rxjs": "^7.8.2", "sass": "^1.101.0", "zod": "^4.4.3", diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index dd88174f5..198aa1a0a 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -107,6 +107,9 @@ importers: rehype-sanitize: specifier: ^6.0.0 version: 6.0.0 + remark-gfm: + specifier: ^4.0.1 + version: 4.0.1 rxjs: specifier: ^7.8.2 version: 7.8.2 @@ -1160,6 +1163,10 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} @@ -1505,12 +1512,36 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + mathml-tag-names@4.0.0: resolution: {integrity: sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==} + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + mdast-util-from-markdown@2.0.3: resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + mdast-util-mdx-expression@2.0.1: resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} @@ -1546,6 +1577,27 @@ packages: micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + micromark-factory-destination@2.0.1: resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} @@ -1774,12 +1826,18 @@ packages: rehype-sanitize@6.0.0: resolution: {integrity: sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==} + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} remark-rehype@11.1.2: resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -2995,6 +3053,8 @@ snapshots: escalade@3.2.0: {} + escape-string-regexp@5.0.0: {} + estree-util-is-identifier-name@3.0.0: {} extend@3.0.2: {} @@ -3317,8 +3377,17 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + markdown-table@3.0.4: {} + mathml-tag-names@4.0.0: {} + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + mdast-util-from-markdown@2.0.3: dependencies: '@types/mdast': 4.0.4 @@ -3336,6 +3405,63 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-mdx-expression@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 @@ -3433,6 +3559,64 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + micromark-factory-destination@2.0.1: dependencies: micromark-util-character: 2.1.1 @@ -3728,6 +3912,17 @@ snapshots: '@types/hast': 3.0.4 hast-util-sanitize: 5.0.2 + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + remark-parse@11.0.0: dependencies: '@types/mdast': 4.0.4 @@ -3745,6 +3940,12 @@ snapshots: unified: 11.0.5 vfile: 6.0.3 + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + require-from-string@2.0.2: {} resolve-from@4.0.0: {} diff --git a/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentStore.tsx b/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentStore.tsx index 5d8ce4f87..0f3cb0869 100644 --- a/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentStore.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentStore.tsx @@ -142,7 +142,10 @@ export const useEnrollmentStore = create()( default: return; } - set({ activeStep: nextStep }); + set({ + activeStep: nextStep, + deadline: nextStep === EnrollmentStep.Finish ? null : get().deadline, + }); }, }), { diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx index fbd8c014f..f1a453d14 100644 --- a/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx @@ -3,19 +3,28 @@ import { useNavigate } from '@tanstack/react-router'; import { Button } from '../../../../../shared/components/Button/Button'; import { ButtonVariant } from '../../../../../shared/components/Button/types'; import { Controls } from '../../../../../shared/components/Controls/Controls'; +import { RenderMarkdown } from '../../../../../shared/components/RenderMarkdown/RenderMarkdown'; +import { isPresent } from '../../../../../shared/utils/isPresent'; +import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; import bannerSrc from './assets/banner.png'; export const FinishStep = () => { const navigate = useNavigate(); + const response = useEnrollmentStore((s) => s.startResponse); + const markdownContent = response?.final_page_content; + const showMarkdown = isPresent(markdownContent) && markdownContent.length > 0; + return (
    -
    -

    {`New Defguard instance added successfully`}

    -

    {`You can now connect this device, check its status and view statistics.`}

    -
    -
    + {!showMarkdown && ( +
    +

    {`New Defguard instance added successfully`}

    +

    {`You can now connect this device, check its status and view statistics.`}

    +
    + )} + {showMarkdown && }
    diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/style.scss b/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/style.scss index 12380be9d..8fcbe06c1 100644 --- a/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/style.scss +++ b/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/style.scss @@ -20,4 +20,175 @@ } } } + + .controls { + padding-top: var(--spacing-2xl); + } +} + +// markdown +#finish-step .markdown-render { + font-family: var(--font-family-body); + + a { + font-size: 14px; + font-weight: 400; + line-height: 22px; + color: var(--fg-white-100); + text-decoration: underline dotted; + text-underline-offset: 3px; + text-decoration-color: var(--fg-white-100); + } + + p { + font-size: 14px; + font-weight: 400; + line-height: 22px; + margin: var(--spacing-sm) 0; + color: var(--fg-white-80); + + strong { + font-weight: 700; + } + } + + blockquote { + margin: var(--spacing-md) 0; + padding: var(--spacing-sm) var(--spacing-sm) var(--spacing-sm) var(--spacing-xl); + border-left: 2px solid var(--fg-white-50); + background-color: var(--bg-white-5); + + p { + margin: 0; + } + } + + h1 { + font-size: 32px; + font-weight: 600; + line-height: 44px; + padding: 0; + + &:not(:first-child) { + margin-top: var(--spacing-lg); + } + + margin-bottom: var(--spacing-lg); + } + + ul { + list-style: disc; + } + + ul, + ol { + margin-top: var(--spacing-sm); + margin-bottom: var(--spacing-sm); + padding-left: 16px; + + li { + font-size: 14px; + line-height: 24px; + font-weight: 400; + color: var(--fg-white-80); + + &::marker { + font: inherit; + } + + &:not(:last-child) { + margin-bottom: var(--spacing-xs); + } + } + } + + hr { + border: 1px solid var(--bg-white-20); + margin: var(--spacing-lg) 0; + width: 100%; + } + + h2, + h3, + h4, + h5, + h6 { + margin: var(--spacing-sm) 0; + padding: 0; + } + + h2 { + font-size: 28px; + font-weight: 600; + line-height: 40px; + } + + h3 { + font-size: 24px; + font-weight: 600; + line-height: 32px; + } + + h4 { + font-size: 20px; + font-weight: 600; + line-height: 28px; + } + + h5 { + font-size: 18px; + font-weight: 500; + line-height: 28px; + } + + h6 { + font-size: 16px; + font-weight: 600; + line-height: 24px; + } + + table { + width: 100%; + border-collapse: separate; + border-spacing: 0; + border: 1px solid var(--fg-white-40); + border-radius: 8px; + overflow: hidden; + margin-top: var(--spacing-2xl); + + &:not(:last-child) { + margin-bottom: var(--spacing-2xl); + } + + th, + td { + padding: var(--spacing-md); + text-align: left; + background-color: transparent; + } + + thead { + background-color: var(--bg-white-5); + + th { + min-height: 44px; + font-size: 12px; + font-weight: 500; + line-height: 20px; + border-bottom: 1px solid var(--fg-white-40); + } + } + + tbody { + td { + font-size: 14px; + font-weight: 400; + line-height: 24px; + } + + tr:not(:last-child) td { + border-bottom: 1px solid var(--fg-white-40); + } + } + } } diff --git a/new-ui/src/pages/full/SessionTimeoutPage/SessionTimeoutPage.tsx b/new-ui/src/pages/full/SessionTimeoutPage/SessionTimeoutPage.tsx index 90f416f20..23fe82ad9 100644 --- a/new-ui/src/pages/full/SessionTimeoutPage/SessionTimeoutPage.tsx +++ b/new-ui/src/pages/full/SessionTimeoutPage/SessionTimeoutPage.tsx @@ -43,24 +43,24 @@ const ClockIcon = () => { height="47" rx="23.5" stroke="white" - stroke-opacity="0.4" - stroke-dasharray="2 2" + strokeOpacity="0.4" + strokeDasharray="2 2" /> diff --git a/new-ui/src/shared/components/RenderMarkdown/RenderMarkdown.tsx b/new-ui/src/shared/components/RenderMarkdown/RenderMarkdown.tsx index 272ee503f..c16c17bee 100644 --- a/new-ui/src/shared/components/RenderMarkdown/RenderMarkdown.tsx +++ b/new-ui/src/shared/components/RenderMarkdown/RenderMarkdown.tsx @@ -4,6 +4,7 @@ import clsx from 'clsx'; import ReactMarkdown from 'react-markdown'; import rehypeRaw from 'rehype-raw'; import rehypeSanitize, { defaultSchema } from 'rehype-sanitize'; +import remarkGfm from 'remark-gfm'; const sanitizeSchema = { ...defaultSchema, @@ -25,6 +26,7 @@ export const RenderMarkdown = ({ className={clsx('markdown-render', containerCustomClassName)} > , diff --git a/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx b/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx index 3e5537dae..f8497dcb2 100644 --- a/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx +++ b/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx @@ -48,9 +48,11 @@ export const WizardPage = ({
    -

    {title}

    - - +
    +

    {title}

    + + +
    {activeStepIndex !== visibleSteps.length - 1 && ( diff --git a/new-ui/src/shared/components/wizard/WizardPage/style.scss b/new-ui/src/shared/components/wizard/WizardPage/style.scss index 4d909fd7b..24fc253fc 100644 --- a/new-ui/src/shared/components/wizard/WizardPage/style.scss +++ b/new-ui/src/shared/components/wizard/WizardPage/style.scss @@ -11,12 +11,19 @@ height: 100%; & > .side { + position: relative; box-sizing: border-box; padding: var(--spacing-md) var(--spacing-lg); border-right: 1px solid var(--border-disabled); user-select: none; - > .title { + > .side-content { + position: sticky; + top: var(--spacing-md); + align-self: start; + } + + .title { font: var(--t-body-xs-500); color: var(--fg-white-100); } diff --git a/nix/package.nix b/nix/package.nix index 4441fa184..62e730a7c 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -99,7 +99,7 @@ inherit version pnpm; src = ../new-ui; fetcherVersion = 3; - hash = "sha256-9xqPuHyPc3VdM+Hv6/k42c4XIR1wBkOQZ2khXx8PmqM="; + hash = "sha256-ZH0POBb7RMY7y/+5YHi+yhkoNfOZNQDeOilBs17Yd7s="; }; # Pre-build the new UI frontend so Tauri can serve it as WebviewUrl::App("compact/") and "full/". From 75025891065136e74aa40ee8bab9e250c9b15671 Mon Sep 17 00:00:00 2001 From: Kuba <78603704+jakub-tldr@users.noreply.github.com> Date: Tue, 14 Jul 2026 16:20:05 +0200 Subject: [PATCH 114/155] Edge communication error (#1045) --- .../CompactLocationsPage.tsx | 60 ++++++++++--------- .../components/TrayConnectionError.scss | 20 +++++++ .../components/TrayConnectionError.tsx | 20 +++++++ .../components/ConnectModal/ConnectModal.tsx | 2 + .../components/ConnectModal/hooks/types.ts | 2 + .../hooks/useConnectModalMfaOidc.ts | 16 ++++- .../ConnectModalConnectionError.tsx | 23 +++++++ .../ConnectModalConnectionError/style.scss | 7 +++ .../ConnectModalMfaEmail.tsx | 2 + .../ConnectModalMfaMobile.tsx | 2 + .../ConnectModalMfaOidc.tsx | 2 + .../ConnectModalMfaTotp.tsx | 2 + new-ui/src/shared/components/Icon/Icon.tsx | 3 + .../src/shared/components/Icon/icon-types.ts | 1 + .../Icon/icons/IconServiceUnavailable.tsx | 30 ++++++++++ .../LocationCard/api/startClientMfaSession.ts | 4 ++ .../LocationCard/hooks/useMfaConnect.ts | 7 +++ .../LocationCard/hooks/useMfaMobileConnect.ts | 10 +++- .../LocationCard/hooks/useMfaOidcConnect.ts | 6 ++ .../LocationCardMfaEmailView.tsx | 2 + .../LocationCardMfaMobileView.tsx | 2 + .../LocationCardMfaSettings.tsx | 4 ++ .../LocationCardMfaTotpView.tsx | 2 + new-ui/src/shared/store/useAppStore.tsx | 8 +++ 24 files changed, 207 insertions(+), 30 deletions(-) create mode 100644 new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.scss create mode 100644 new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.tsx create mode 100644 new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalConnectionError/ConnectModalConnectionError.tsx create mode 100644 new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalConnectionError/style.scss create mode 100644 new-ui/src/shared/components/Icon/icons/IconServiceUnavailable.tsx diff --git a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx index 1a9e864b8..f9c467419 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx +++ b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx @@ -16,15 +16,17 @@ import { getLocationsQueryOptions, getTunnelsQueryOptions, } from '../../../shared/rust-api/query'; -import { useAppStore } from '../../../shared/store/useAppStore'; +import { useAppStore, useTrayConnectionError } from '../../../shared/store/useAppStore'; import { ThemeSpacing } from '../../../shared/types'; import { isPresent } from '../../../shared/utils/isPresent'; import { CompactPage } from '../CompactPage/CompactPage'; import { InstanceSwitcher } from './components/InstanceSwitcher'; +import { TrayConnectionError } from './components/TrayConnectionError'; export const CompactLocationsPage = () => { const { viewSelection: selection, setViewSelection } = useAppData(); const openLocation = useAppStore((s) => s.expandedLocation); + const connectionError = useTrayConnectionError((s) => s.visible); const routeData = useLoaderData({ from: '/compact/' }); @@ -76,33 +78,37 @@ export const CompactLocationsPage = () => { }} > - -
    - -
    - {displayedLocations.map((location) => { - const isOpen = - location.id === openLocation || displayedLocations.length === 1; - return ( - { - if (isOpen) { - useAppStore.setState({ expandedLocation: null }); - } else { - useAppStore.setState({ expandedLocation: location.id }); - } - }} - /> - ); - })} + {connectionError ? ( + + ) : ( + +
    + +
    + {displayedLocations.map((location) => { + const isOpen = + location.id === openLocation || displayedLocations.length === 1; + return ( + { + if (isOpen) { + useAppStore.setState({ expandedLocation: null }); + } else { + useAppStore.setState({ expandedLocation: location.id }); + } + }} + /> + ); + })} +
    -
    - + + )}
    diff --git a/new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.scss b/new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.scss new file mode 100644 index 000000000..9389f841e --- /dev/null +++ b/new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.scss @@ -0,0 +1,20 @@ +.tray-connection-error { + flex: 1 1 auto; + box-sizing: border-box; + border-radius: var(--radius-lg); + padding: var(--spacing-lg); + background-color: var(--bg-dark-blue-40); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: var(--spacing-2xl); + + .description { + width: 296px; + font: var(--t-body-xs-400); + color: var(--fg-white-100); + text-align: center; + opacity: 0.7; + } +} diff --git a/new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.tsx b/new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.tsx new file mode 100644 index 000000000..d624a4e11 --- /dev/null +++ b/new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.tsx @@ -0,0 +1,20 @@ +import './TrayConnectionError.scss'; +import { Button } from '../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../shared/components/Button/types'; +import { Icon, IconKind } from '../../../../shared/components/Icon'; +import { useTrayConnectionError } from '../../../../shared/store/useAppStore'; + +export const TrayConnectionError = () => { + const close = () => useTrayConnectionError.setState({ visible: false }); + + return ( +
    + +

    + One or more external services are unavailable or unreachable. This may be caused + by a network issue or a temporary service outage. Please try again later. +

    +
    + ); +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/ConnectModal.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/ConnectModal.tsx index ce1e22ea5..febf59116 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/ConnectModal.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/ConnectModal.tsx @@ -14,6 +14,7 @@ import { type ConnectModalViewValue, } from './hooks/types'; import { useConnectModal } from './hooks/useConnectModal'; +import { ConnectModalConnectionError } from './views/ConnectModalConnectionError/ConnectModalConnectionError'; import { ConnectModalMfaEmail } from './views/ConnectModalMfaEmail/ConnectModalMfaEmail'; import { ConnectModalMfaMobile } from './views/ConnectModalMfaMobile/ConnectModalMfaMobile'; import { ConnectModalMfaOidc } from './views/ConnectModalMfaOidc/ConnectModalMfaOidc'; @@ -57,6 +58,7 @@ const viewContent: Record = { [ConnectModalView.MfaMobile]: , [ConnectModalView.MfaSettings]: , [ConnectModalView.PostureCheckFail]: , + [ConnectModalView.ConnectionError]: , } as const; const ModalContent = () => { diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/types.ts b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/types.ts index 4077a41ff..13f779827 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/types.ts +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/types.ts @@ -5,6 +5,7 @@ export const ConnectModalView = { MfaMobile: 'mfa-mobile', MfaSettings: 'mfa-settings', PostureCheckFail: 'posture-check-fail', + ConnectionError: 'connection-error', } as const; export const ConnectModalTitle: Record = { @@ -14,6 +15,7 @@ export const ConnectModalTitle: Record = { [ConnectModalView.MfaMobile]: 'Two-factor authentication', [ConnectModalView.MfaSettings]: 'Change MFA Method', [ConnectModalView.PostureCheckFail]: 'Access denied', + [ConnectModalView.ConnectionError]: 'Connection error', } as const; export type ConnectModalViewValue = diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModalMfaOidc.ts b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModalMfaOidc.ts index de844cd13..4974a3e13 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModalMfaOidc.ts +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModalMfaOidc.ts @@ -5,6 +5,7 @@ import { useCallback, useEffect, useRef, useState } from 'react'; import { useShallow } from 'zustand/shallow'; import { CLIENT_MFA_ENDPOINT, + isEdgeUnavailable, MfaStartMethod, shouldShowPostureError, startClientMfaSession, @@ -22,11 +23,13 @@ type MfaErrorResponse = { error: string }; type Options = { onPostureError?: (msg: string) => void; onSessionExpired?: () => void; + onServiceUnavailable?: () => void; }; export const useConnectModalMfaOidc = ({ onPostureError, onSessionExpired, + onServiceUnavailable, }: Options = {}) => { const location = useConnectModal(useShallow((s) => s.location)); @@ -149,6 +152,10 @@ export const useConnectModalMfaOidc = ({ onPostureError?.(e.message); return; } + if (isEdgeUnavailable(e)) { + onServiceUnavailable?.(); + return; + } setStartError( e instanceof Error ? e.message : 'Failed to start OIDC authentication', ); @@ -156,7 +163,14 @@ export const useConnectModalMfaOidc = ({ } finally { setIsStarting(false); } - }, [instance, location, startPolling, stopPolling, onPostureError]); + }, [ + instance, + location, + startPolling, + stopPolling, + onPostureError, + onServiceUnavailable, + ]); return { start, isStarting, startError, isPolling, pollError }; }; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalConnectionError/ConnectModalConnectionError.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalConnectionError/ConnectModalConnectionError.tsx new file mode 100644 index 000000000..5b74a1c94 --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalConnectionError/ConnectModalConnectionError.tsx @@ -0,0 +1,23 @@ +import './style.scss'; +import { Button } from '../../../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../../../shared/components/Controls/Controls'; +import { useConnectModal } from '../../hooks/useConnectModal'; + +export const ConnectModalConnectionError = () => { + const close = () => useConnectModal.setState({ visible: false }); + + return ( +
    +

    + One or more external services are unavailable or unreachable. This may be caused + by a network issue or a temporary service outage. Please try again later. +

    + +
    +
    +
    +
    + ); +}; diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalConnectionError/style.scss b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalConnectionError/style.scss new file mode 100644 index 000000000..330561123 --- /dev/null +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalConnectionError/style.scss @@ -0,0 +1,7 @@ +#connect-modal #connection-error-view { + .view-description { + font: var(--t-body-sm-400); + color: var(--fg-white-100); + padding-bottom: 0; + } +} diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx index f17cf6ef9..762ad639b 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx @@ -30,6 +30,8 @@ export const ConnectModalMfaEmail = () => { useConnectModal.setState({ postureError: msg }); useConnectModal.getState().setView(ConnectModalView.PostureCheckFail); }, + onServiceUnavailable: () => + useConnectModal.getState().setView(ConnectModalView.ConnectionError), }, ); diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaMobile/ConnectModalMfaMobile.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaMobile/ConnectModalMfaMobile.tsx index cb0d7b321..016547907 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaMobile/ConnectModalMfaMobile.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaMobile/ConnectModalMfaMobile.tsx @@ -25,6 +25,8 @@ export const ConnectModalMfaMobile = () => { useConnectModal.setState({ postureError: msg }); useConnectModal.getState().setView(ConnectModalView.PostureCheckFail); }, + onServiceUnavailable: () => + useConnectModal.getState().setView(ConnectModalView.ConnectionError), }, ); diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/ConnectModalMfaOidc.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/ConnectModalMfaOidc.tsx index 8227de80f..7bc21307a 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/ConnectModalMfaOidc.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaOidc/ConnectModalMfaOidc.tsx @@ -30,6 +30,8 @@ export const ConnectModalMfaOidc = () => { useConnectModal.setState({ postureError: msg }); useConnectModal.getState().setView(ConnectModalView.PostureCheckFail); }, + onServiceUnavailable: () => + useConnectModal.getState().setView(ConnectModalView.ConnectionError), }); const [screen, setScreen] = useState('idle'); diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx index dba162116..3479bdec5 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx @@ -30,6 +30,8 @@ export const ConnectModalMfaTotp = () => { useConnectModal.setState({ postureError: err }); useConnectModal.getState().setView(ConnectModalView.PostureCheckFail); }, + onServiceUnavailable: () => + useConnectModal.getState().setView(ConnectModalView.ConnectionError), }, ); diff --git a/new-ui/src/shared/components/Icon/Icon.tsx b/new-ui/src/shared/components/Icon/Icon.tsx index 76411389a..a533801d6 100644 --- a/new-ui/src/shared/components/Icon/Icon.tsx +++ b/new-ui/src/shared/components/Icon/Icon.tsx @@ -107,6 +107,7 @@ import { IconRequest } from './icons/IconRequest'; import { IconRules } from './icons/IconRules'; import { IconSearch } from './icons/IconSearch'; import { IconServers } from './icons/IconServers'; +import { IconServiceUnavailable } from './icons/IconServiceUnavailable'; import { IconSettings } from './icons/IconSettings'; import { IconShow } from './icons/IconShow'; import { IconSortable } from './icons/IconSortable'; @@ -297,6 +298,8 @@ export const Icon = ({ return IconGlobe; case 'globe-blocked': return IconGlobeBlocked; + case 'service-unavailable': + return IconServiceUnavailable; case 'help': return IconHelp; case 'access-settings': diff --git a/new-ui/src/shared/components/Icon/icon-types.ts b/new-ui/src/shared/components/Icon/icon-types.ts index e23290f8a..b84ddb884 100644 --- a/new-ui/src/shared/components/Icon/icon-types.ts +++ b/new-ui/src/shared/components/Icon/icon-types.ts @@ -39,6 +39,7 @@ export const IconKind = { Notification: 'notification', Globe: 'globe', GlobeBlocked: 'globe-blocked', + ServiceUnavailable: 'service-unavailable', Groups: 'groups', OpenInNewWindow: 'open-in-new-window', Users: 'users', diff --git a/new-ui/src/shared/components/Icon/icons/IconServiceUnavailable.tsx b/new-ui/src/shared/components/Icon/icons/IconServiceUnavailable.tsx new file mode 100644 index 000000000..f409fabcd --- /dev/null +++ b/new-ui/src/shared/components/Icon/icons/IconServiceUnavailable.tsx @@ -0,0 +1,30 @@ +import type { SVGProps } from 'react'; + +export const IconServiceUnavailable = (props: SVGProps) => { + return ( + + + + + + + ); +}; diff --git a/new-ui/src/shared/components/LocationCard/api/startClientMfaSession.ts b/new-ui/src/shared/components/LocationCard/api/startClientMfaSession.ts index be527d949..57803c889 100644 --- a/new-ui/src/shared/components/LocationCard/api/startClientMfaSession.ts +++ b/new-ui/src/shared/components/LocationCard/api/startClientMfaSession.ts @@ -45,6 +45,10 @@ export const shouldShowPostureError = ( ): err is MfaStartError => err instanceof MfaStartError && err.status === 403 && location.posture_check_required; +/** Narrows MFA start errors where the Edge responded with a 5xx */ +export const isEdgeUnavailable = (err: unknown): err is MfaStartError => + err instanceof MfaStartError && (err.status ?? 0) >= 500; + /** Input required to start a desktop-client MFA session. */ type StartClientMfaSessionParams = { instance: InstanceInfo; diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts index 97be47dbe..843ab0be2 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts @@ -8,6 +8,7 @@ import { getInstancesQueryOptions } from '../../../rust-api/query'; import type { LocationInfo } from '../../../rust-api/types'; import { CLIENT_MFA_ENDPOINT, + isEdgeUnavailable, type MfaStartMethod, shouldShowPostureError, startClientMfaSession, @@ -28,6 +29,7 @@ type UseMfaConnectOptions = { onConnected?: () => void; onSessionExpired?: () => void; onPostureError?: (message: string) => void; + onServiceUnavailable?: () => void; }; const waitForMinimumDuration = async (startedAt: number, minimumMs: number) => { @@ -45,6 +47,7 @@ export const useMfaConnect = ( onConnected, onSessionExpired, onPostureError, + onServiceUnavailable, }: UseMfaConnectOptions = {}, ) => { const [token, setToken] = useState(null); @@ -97,6 +100,10 @@ export const useMfaConnect = ( onPostureError?.(err.message); return; } + if (isEdgeUnavailable(err)) { + onServiceUnavailable?.(); + return; + } setStartError(err instanceof Error ? err.message : 'Failed to start MFA'); } finally { setIsStarting(false); diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts index 050a1a40d..1df656a5e 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts @@ -7,6 +7,7 @@ import { getInstancesQueryOptions } from '../../../rust-api/query'; import type { LocationInfo } from '../../../rust-api/types'; import { CLIENT_MFA_ENDPOINT, + isEdgeUnavailable, MfaStartMethod, shouldShowPostureError, startClientMfaSession, @@ -20,10 +21,11 @@ type TokenData = { type Options = { onConnected?: () => void; onPostureError?: (message?: string) => void; + onServiceUnavailable?: () => void; }; export const useMfaMobileConnect = (location: LocationInfo, options?: Options) => { - const { onConnected, onPostureError } = options ?? {}; + const { onConnected, onPostureError, onServiceUnavailable } = options ?? {}; const { data: instances } = useQuery(getInstancesQueryOptions); const instance = instances?.find((i) => i.id === location.instance_id); @@ -168,6 +170,10 @@ export const useMfaMobileConnect = (location: LocationInfo, options?: Options) = onPostureError?.(e instanceof Error ? e.message : undefined); return; } + if (isEdgeUnavailable(e)) { + onServiceUnavailable?.(); + return; + } setStartError( e instanceof Error ? e.message : 'Failed to start mobile authentication', ); @@ -175,7 +181,7 @@ export const useMfaMobileConnect = (location: LocationInfo, options?: Options) = } finally { setIsStarting(false); } - }, [instance, location, onPostureError]); + }, [instance, location, onPostureError, onServiceUnavailable]); const reset = useCallback(() => { if (wsRef.current) { diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts index 938b6bb65..2cc7611cc 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts @@ -4,8 +4,10 @@ import { error } from '@tauri-apps/plugin-log'; import { useCallback, useEffect, useRef, useState } from 'react'; import { api } from '../../../rust-api/api'; import { getInstancesQueryOptions } from '../../../rust-api/query'; +import { useTrayConnectionError } from '../../../store/useAppStore'; import { CLIENT_MFA_ENDPOINT, + isEdgeUnavailable, MfaStartMethod, startClientMfaSession, } from '../api/startClientMfaSession'; @@ -144,6 +146,10 @@ export const useMfaOidcConnect = () => { if (handleMfaStartError({ err: e, location, setPostureError, setView })) { return; } + if (isEdgeUnavailable(e)) { + useTrayConnectionError.setState({ visible: true }); + return; + } setStartError( e instanceof Error ? e.message : 'Failed to start OIDC authentication', ); diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx index e03ecb8cc..6be641c3c 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx @@ -1,4 +1,5 @@ import { useCallback, useEffect, useState } from 'react'; +import { useTrayConnectionError } from '../../../../store/useAppStore'; import { ThemeSpacing } from '../../../../types'; import { isPresent } from '../../../../utils/isPresent'; import { Button } from '../../../Button/Button'; @@ -32,6 +33,7 @@ export const LocationCardMfaEmailView = () => { setPostureError(msg); setView(LocationCardViews.PostureCheckFail); }, + onServiceUnavailable: () => useTrayConnectionError.setState({ visible: true }), }, ); diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx index 2f21cdf8b..91fb81923 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx @@ -1,5 +1,6 @@ import './style.scss'; import { useEffect, useRef, useState } from 'react'; +import { useTrayConnectionError } from '../../../../store/useAppStore'; import { ThemeSpacing } from '../../../../types'; import { Button } from '../../../Button/Button'; import { ButtonVariant } from '../../../Button/types'; @@ -21,6 +22,7 @@ export const LocationCardMfaMobileView = () => { const { start, startError, qrValue, connectionError } = useMfaMobileConnect(location, { onConnected: () => setView(LocationCardViews.Connected), onPostureError: (message) => setPostureError(message ?? null), + onServiceUnavailable: () => useTrayConnectionError.setState({ visible: true }), }); const [screen, setScreen] = useState('loading'); const startedRef = useRef(false); diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/LocationCardMfaSettings.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/LocationCardMfaSettings.tsx index 8b77e8af6..85fccdc2b 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/LocationCardMfaSettings.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaSettings/LocationCardMfaSettings.tsx @@ -60,6 +60,10 @@ export const LocationCardMfaSettings = () => { mfaMethod: selectedMethod, }); } + if (isFromDefault) { + setView(LocationCardViews.Default); + return; + } switch (selectedMethod) { case 'totp': setView(LocationCardViews.MfaTotp); diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx index 5a9e46f3a..98e16f1bd 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx @@ -1,4 +1,5 @@ import { useCallback, useEffect, useState } from 'react'; +import { useTrayConnectionError } from '../../../../store/useAppStore'; import { ThemeSpacing } from '../../../../types'; import { isPresent } from '../../../../utils/isPresent'; import { Button } from '../../../Button/Button'; @@ -32,6 +33,7 @@ export const LocationCardMfaTotpView = () => { setPostureError(msg); setView(LocationCardViews.PostureCheckFail); }, + onServiceUnavailable: () => useTrayConnectionError.setState({ visible: true }), }, ); diff --git a/new-ui/src/shared/store/useAppStore.tsx b/new-ui/src/shared/store/useAppStore.tsx index d013881c3..47329fb92 100644 --- a/new-ui/src/shared/store/useAppStore.tsx +++ b/new-ui/src/shared/store/useAppStore.tsx @@ -20,3 +20,11 @@ export const useAppStore = create()( }, ), ); + +interface TrayConnectionErrorStore { + visible: boolean; +} + +export const useTrayConnectionError = create(() => ({ + visible: false, +})); From af0ab9dcab64782a2b955ad3fcfe21e0298d108c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Wed, 15 Jul 2026 08:58:27 +0200 Subject: [PATCH 115/155] Welcome window (#1043) * init logic * ui elements * skip welcome popup when running e2e tests * disable welcome view for now --- .github/workflows/e2e.yaml | 1 + new-ui/src/pages/welcome/WelcomePage.tsx | 38 +++ .../src/pages/welcome/assets/test_frame.png | Bin 0 -> 398318 bytes .../pages/welcome/components/SlideImage.tsx | 15 + .../pages/welcome/components/SlideVideo.tsx | 18 ++ .../WelcomeCarousel/WelcomeCarousel.tsx | 122 ++++++++ .../CarouselControls/CarouselControls.tsx | 66 +++++ .../components/CarouselControls/style.scss | 41 +++ .../CarouselIndicators/CarouselIndicators.tsx | 27 ++ .../components/CarouselIndicators/style.scss | 40 +++ .../components/WelcomeCarousel/style.scss | 47 +++ .../components/WelcomeCarousel/types.ts | 8 + new-ui/src/pages/welcome/components/types.ts | 8 + new-ui/src/pages/welcome/config.ts | 35 +++ new-ui/src/pages/welcome/style.scss | 30 ++ new-ui/src/routeTree.gen.ts | 21 ++ new-ui/src/routes/welcome.tsx | 6 + .../components/IconButton/IconButton.tsx | 8 +- .../shared/components/IconButton/style.scss | 6 + .../src/shared/components/IconButton/types.ts | 1 + new-ui/src/shared/rust-api/api.ts | 3 + new-ui/src/shared/rust-api/types.ts | 1 + src-tauri/capabilities/default.json | 2 +- src-tauri/core/src/version.rs | 269 +++++++++++++++++- src-tauri/permissions/default.toml | 1 + src-tauri/src/bin/defguard-client.rs | 30 +- src-tauri/src/window_manager/mod.rs | 77 +++++ src-tauri/src/window_manager/windows.rs | 41 ++- 28 files changed, 955 insertions(+), 7 deletions(-) create mode 100644 new-ui/src/pages/welcome/WelcomePage.tsx create mode 100644 new-ui/src/pages/welcome/assets/test_frame.png create mode 100644 new-ui/src/pages/welcome/components/SlideImage.tsx create mode 100644 new-ui/src/pages/welcome/components/SlideVideo.tsx create mode 100644 new-ui/src/pages/welcome/components/WelcomeCarousel/WelcomeCarousel.tsx create mode 100644 new-ui/src/pages/welcome/components/WelcomeCarousel/components/CarouselControls/CarouselControls.tsx create mode 100644 new-ui/src/pages/welcome/components/WelcomeCarousel/components/CarouselControls/style.scss create mode 100644 new-ui/src/pages/welcome/components/WelcomeCarousel/components/CarouselIndicators/CarouselIndicators.tsx create mode 100644 new-ui/src/pages/welcome/components/WelcomeCarousel/components/CarouselIndicators/style.scss create mode 100644 new-ui/src/pages/welcome/components/WelcomeCarousel/style.scss create mode 100644 new-ui/src/pages/welcome/components/WelcomeCarousel/types.ts create mode 100644 new-ui/src/pages/welcome/components/types.ts create mode 100644 new-ui/src/pages/welcome/config.ts create mode 100644 new-ui/src/pages/welcome/style.scss create mode 100644 new-ui/src/routes/welcome.tsx diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 38f1c4a95..25533cfa3 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -27,6 +27,7 @@ jobs: SQLX_OFFLINE: '1' RUSTC_WRAPPER: sccache SCCACHE_GHA_ENABLED: 'true' + DEFGUARD_CLIENT_WELCOME_SKIP: '1' steps: - name: Install system dependencies run: | diff --git a/new-ui/src/pages/welcome/WelcomePage.tsx b/new-ui/src/pages/welcome/WelcomePage.tsx new file mode 100644 index 000000000..8b8b620b7 --- /dev/null +++ b/new-ui/src/pages/welcome/WelcomePage.tsx @@ -0,0 +1,38 @@ +import { Fragment } from 'react/jsx-runtime'; +import { FullPage } from '../../shared/layouts/FullPage/FullPage'; +import './style.scss'; +import { IconKind } from '../../shared/components/Icon'; +import { IconButton } from '../../shared/components/IconButton/IconButton'; +import { IconButtonVariant } from '../../shared/components/IconButton/types'; +import { Snackbar } from '../../shared/providers/snackbar/snackbar'; +import { ThemeSpacing } from '../../shared/types'; +import { WelcomeCarousel } from './components/WelcomeCarousel/WelcomeCarousel'; +import { welcomeSlides } from './config'; + +export const WelcomePage = () => { + return ( + +
    + +
    +

    {`What's new`}

    + { + Snackbar.default(`Close Welcome view`); + }} + /> +
    + +
    +
    + ); +}; diff --git a/new-ui/src/pages/welcome/assets/test_frame.png b/new-ui/src/pages/welcome/assets/test_frame.png new file mode 100644 index 0000000000000000000000000000000000000000..c1c5d96d306db142fcc3fa2bb6ba7cfcb30c5356 GIT binary patch literal 398318 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⧀ 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 literal 0 HcmV?d00001 diff --git a/new-ui/src/pages/welcome/components/SlideImage.tsx b/new-ui/src/pages/welcome/components/SlideImage.tsx new file mode 100644 index 000000000..0e7f96477 --- /dev/null +++ b/new-ui/src/pages/welcome/components/SlideImage.tsx @@ -0,0 +1,15 @@ +type Props = { + src: string; +}; + +export const SlideImage = ({ src }: Props) => { + return ( + + ); +}; diff --git a/new-ui/src/pages/welcome/components/SlideVideo.tsx b/new-ui/src/pages/welcome/components/SlideVideo.tsx new file mode 100644 index 000000000..fc8d7ea71 --- /dev/null +++ b/new-ui/src/pages/welcome/components/SlideVideo.tsx @@ -0,0 +1,18 @@ +type Props = { + src: string; +}; + +export const SlideVideo = ({ src }: Props) => { + return ( + - - ); -}; diff --git a/src/pages/enrollment/steps/MfaRecoveryCodesStep/style.scss b/src/pages/enrollment/steps/MfaRecoveryCodesStep/style.scss deleted file mode 100644 index 78d373c5a..000000000 --- a/src/pages/enrollment/steps/MfaRecoveryCodesStep/style.scss +++ /dev/null @@ -1,27 +0,0 @@ -#enrollment-mfa-recovery-codes-step { - width: 100%; - max-width: 650px; - padding: 50px 40px; - display: flex; - flex-flow: column; - gap: var(--spacing-m); - - & > .codes { - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - gap: var(--spacing-s); - - ul { - li { - &:not(:last-child) { - margin-bottom: var(--spacing-xs); - } - - @include typography(app-code); - font-size: 14px; - } - } - } -} diff --git a/src/pages/enrollment/steps/MfaSetupStep/MfaSetupEmail.tsx b/src/pages/enrollment/steps/MfaSetupStep/MfaSetupEmail.tsx deleted file mode 100644 index 5d26be790..000000000 --- a/src/pages/enrollment/steps/MfaSetupStep/MfaSetupEmail.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import dayjs, { type Dayjs } from 'dayjs'; -import { type ReactNode, useCallback, useEffect, useState } from 'react'; -import { interval } from 'rxjs'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../shared/defguard-ui/components/Layout/Button/types'; -import { MessageBox } from '../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { useToaster } from '../../../../shared/defguard-ui/hooks/toasts/useToaster'; -import { useEnrollmentStore } from '../../hooks/store/useEnrollmentStore'; - -type Props = { - children: ReactNode; - userEmail: string; - refetch: () => void; -}; - -export const MfaSetupEmail = ({ children, userEmail, refetch }: Props) => { - const toaster = useToaster(); - const checkResend = useCallback((resend: Dayjs | undefined) => { - if (resend) { - const cd = resend.add(1, 'minute'); - return cd.isBefore(dayjs()); - } - return true; - }, []); - - const resendTimestamp = useEnrollmentStore((s) => s.emailResendTimestamp); - const setStore = useEnrollmentStore((s) => s.setState); - - const [canResent, setCanResend] = useState(checkResend(resendTimestamp)); - - useEffect(() => { - const sub = interval(1000).subscribe(() => { - if (resendTimestamp) { - setCanResend(checkResend(resendTimestamp)); - } - }); - return () => { - sub.unsubscribe(); - }; - }, [resendTimestamp, checkResend]); - - return ( -
    - -

    - To setup your MFA, enter the code that was sent to your account email: -
    - {userEmail} -

    -
    - {children} -
    - ); -}; diff --git a/src/pages/enrollment/steps/MfaSetupStep/MfaSetupStep.tsx b/src/pages/enrollment/steps/MfaSetupStep/MfaSetupStep.tsx deleted file mode 100644 index ac3d005a0..000000000 --- a/src/pages/enrollment/steps/MfaSetupStep/MfaSetupStep.tsx +++ /dev/null @@ -1,164 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQuery } from '@tanstack/react-query'; -import { error } from '@tauri-apps/plugin-log'; -import { type Ref, useEffect, useRef } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import z from 'zod'; -import { shallow } from 'zustand/shallow'; -import { FormInput } from '../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { LoaderSpinner } from '../../../../shared/defguard-ui/components/Layout/LoaderSpinner/LoaderSpinner'; -import { useToaster } from '../../../../shared/defguard-ui/hooks/toasts/useToaster'; -import { isPresent } from '../../../../shared/defguard-ui/utils/isPresent'; -import { MfaMethod } from '../../../../shared/types'; -import { EnrollmentStepIndicator } from '../../components/EnrollmentStepIndicator/EnrollmentStepIndicator'; -import { EnrollmentStepKey } from '../../const'; -import { useEnrollmentStore } from '../../hooks/store/useEnrollmentStore'; -import { EnrollmentNavDirection } from '../../hooks/types'; -import { useEnrollmentApi } from '../../hooks/useEnrollmentApi'; -import { MfaSetupEmail } from './MfaSetupEmail'; -import { MfaSetupTotp } from './MfaSetupTotp'; - -const formSchema = z.object({ - code: z.string().trim().min(6, 'Enter valid code').max(6, 'Enter valid code'), -}); - -type FormFields = z.infer; - -export const MfaSetupStep = () => { - const submitRef = useRef(null); - const [userInfo, mfaMethod] = useEnrollmentStore((s) => [s.userInfo, s.mfaMethod]); - const [nextSubject, setStoreState] = useEnrollmentStore( - (s) => [s.nextSubject, s.setState], - shallow, - ); - - const { - enrollment: { registerCodeMfaStart }, - } = useEnrollmentApi(); - - const { - data: startData, - isLoading: startLoading, - refetch, - } = useQuery({ - queryFn: () => registerCodeMfaStart(mfaMethod), - queryKey: ['register-mfa', mfaMethod], - refetchOnWindowFocus: false, - enabled: isPresent(mfaMethod), - }); - - // biome-ignore lint/correctness/useExhaustiveDependencies: rxjs sub - useEffect(() => { - const sub = nextSubject.subscribe((direction) => { - switch (direction) { - case EnrollmentNavDirection.NEXT: - submitRef.current?.click(); - break; - case EnrollmentNavDirection.BACK: - setStoreState({ step: EnrollmentStepKey.MFA_CHOICE }); - break; - } - }); - return () => { - sub.unsubscribe(); - }; - }, [nextSubject]); - - return ( - -
    - -

    Configure MFA

    -
    - {startLoading && ( -
    - -
    - )} - {!startLoading && isPresent(userInfo) && ( - <> - {mfaMethod === MfaMethod.TOTP && isPresent(startData?.totp_secret) && ( - - - - )} - {mfaMethod === MfaMethod.EMAIL && ( - - - - )} - - )} -
    - ); -}; - -type CodeFormProps = { - inputRef: Ref; -}; - -const CodeForm = ({ inputRef }: CodeFormProps) => { - const toaster = useToaster(); - const mfaMethod = useEnrollmentStore((s) => s.mfaMethod); - const setStoreState = useEnrollmentStore((s) => s.setState); - const { - enrollment: { registerCodeMfaFinish }, - } = useEnrollmentApi(); - - const { handleSubmit, control, setError } = useForm({ - resolver: zodResolver(formSchema), - }); - - const { mutate, isPending } = useMutation({ - mutationFn: registerCodeMfaFinish, - onSuccess: (response) => { - toaster.success('MFA configured'); - setStoreState({ - loading: false, - step: EnrollmentStepKey.MFA_RECOVERY, - recoveryCodes: response.recovery_codes, - }); - }, - onError: (err) => { - setError( - 'code', - { - message: 'Enter valid code', - type: 'value', - }, - { - shouldFocus: false, - }, - ); - error(`MFA configuration failed! \nReason: ${err.message}`); - }, - }); - - const submitHandler: SubmitHandler = (data) => { - const sendData = { - code: data.code, - method: mfaMethod, - }; - mutate(sendData); - }; - - // biome-ignore lint/correctness/useExhaustiveDependencies: sideEffect - useEffect(() => { - setStoreState({ - loading: isPending, - }); - }, [isPending]); - - return ( -
    - - - - ); -}; diff --git a/src/pages/enrollment/steps/MfaSetupStep/MfaSetupTotp.tsx b/src/pages/enrollment/steps/MfaSetupStep/MfaSetupTotp.tsx deleted file mode 100644 index 2c4f50732..000000000 --- a/src/pages/enrollment/steps/MfaSetupStep/MfaSetupTotp.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import type { ReactNode } from 'react'; -import QRCode from 'react-qr-code'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { MessageBox } from '../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import SvgIconCopy from '../../../../shared/defguard-ui/components/svg/IconCopy'; -import { useClipboard } from '../../../../shared/hooks/useClipboard'; - -type Props = { - children: ReactNode; - email: string; - secret: string; -}; - -export const MfaSetupTotp = ({ children, email, secret }: Props) => { - return ( -
    - - - {children} -
    - ); -}; - -type TotpProps = { - email: string; - secret: string; -}; - -const TotpQr = ({ email, secret }: TotpProps) => { - const { writeToClipboard } = useClipboard(); - return ( -
    -
    - -
    -
    - ); -}; diff --git a/src/pages/enrollment/steps/MfaSetupStep/style.scss b/src/pages/enrollment/steps/MfaSetupStep/style.scss deleted file mode 100644 index ad95f8730..000000000 --- a/src/pages/enrollment/steps/MfaSetupStep/style.scss +++ /dev/null @@ -1,72 +0,0 @@ -#enrollment-totp-card { - width: 100%; - max-width: 650px; - padding: 50px 40px; - display: flex; - flex-flow: column; - row-gap: var(--spacing-m); - - .loading { - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - min-height: 25dvh; - } - - .totp-info { - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - row-gap: var(--spacing-s); - - .qr { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - } - - .btn { - width: unset; - flex-grow: 0; - width: min-content; - } - } - - .btn.resend { - width: 100%; - } - - .totp-setup, - .email-setup { - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - row-gap: var(--spacing-s); - } - - .resend { - width: 100%; - } - - form { - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - row-gap: var(--spacing-m); - width: 100%; - - & > .input { - width: 100%; - } - - input[type='submit'] { - @include visually-hidden(); - } - } -} diff --git a/src/pages/enrollment/steps/PasswordStep/PasswordStep.tsx b/src/pages/enrollment/steps/PasswordStep/PasswordStep.tsx deleted file mode 100644 index 569dd69d6..000000000 --- a/src/pages/enrollment/steps/PasswordStep/PasswordStep.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useEffect, useMemo, useRef } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { FormInput } from '../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { passwordValidator } from '../../../../shared/validators/password'; -import { EnrollmentStepIndicator } from '../../components/EnrollmentStepIndicator/EnrollmentStepIndicator'; -import { EnrollmentStepKey } from '../../const'; -import { useEnrollmentStore } from '../../hooks/store/useEnrollmentStore'; -import { EnrollmentNavDirection } from '../../hooks/types'; - -type FormFields = { - password: string; - repeat: string; -}; - -export const PasswordStep = () => { - const submitRef = useRef(null); - const { LL } = useI18nContext(); - - const userPassword = useEnrollmentStore((state) => state.userPassword); - const [nextSubject, setStore] = useEnrollmentStore( - (state) => [state.nextSubject, state.setState], - shallow, - ); - - const pageLL = LL.pages.enrollment.steps.password; - - const schema = useMemo( - () => - z - .object({ - password: passwordValidator(LL), - repeat: z.string().min(1, LL.form.errors.required()), - }) - .superRefine((values, ctx) => { - if (values.password !== values.repeat && values.repeat.length >= 1) { - ctx.addIssue({ - path: ['repeat'], - message: pageLL.form.fields.repeat.errors.matching(), - code: 'custom', - }); - } - }), - [LL, pageLL.form.fields.repeat.errors], - ); - - const { handleSubmit, control, reset } = useForm({ - defaultValues: { - password: userPassword ?? '', - repeat: '', - }, - mode: 'all', - criteriaMode: 'all', - resolver: zodResolver(schema), - }); - - const handleValidSubmit: SubmitHandler = (values) => { - setStore({ userPassword: values.password, step: EnrollmentStepKey.DEVICE }); - }; - - // biome-ignore lint/correctness/useExhaustiveDependencies: rxjs - useEffect(() => { - const sub = nextSubject.subscribe((direction) => { - switch (direction) { - case EnrollmentNavDirection.BACK: - setStore({ step: EnrollmentStepKey.DATA_VERIFICATION }); - break; - case EnrollmentNavDirection.NEXT: - submitRef.current?.click(); - break; - } - }); - - return () => { - sub.unsubscribe(); - }; - }, [nextSubject]); - - useEffect(() => { - reset(); - //eslint-disable-next-line - }, [reset]); - - return ( - - -

    {pageLL.title()}

    -
    - - - - -
    - ); -}; diff --git a/src/pages/enrollment/steps/PasswordStep/style.scss b/src/pages/enrollment/steps/PasswordStep/style.scss deleted file mode 100644 index 4df9aac79..000000000 --- a/src/pages/enrollment/steps/PasswordStep/style.scss +++ /dev/null @@ -1,20 +0,0 @@ -#enrollment-password-card { - width: 100%; - max-width: 650px; - padding: 50px 40px; - - & > h3 { - margin-bottom: 40px; - } - - & > form { - display: flex; - flex-flow: column; - width: 100%; - row-gap: 15px; - - & > * { - width: 100%; - } - } -} diff --git a/src/pages/enrollment/steps/SendFinishStep/SendFinishStep.tsx b/src/pages/enrollment/steps/SendFinishStep/SendFinishStep.tsx deleted file mode 100644 index e2f39f490..000000000 --- a/src/pages/enrollment/steps/SendFinishStep/SendFinishStep.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import './style.scss'; - -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { debug, error, info } from '@tauri-apps/plugin-log'; -import { useCallback } from 'react'; -import { shallow } from 'zustand/shallow'; -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { LoaderSpinner } from '../../../../shared/defguard-ui/components/Layout/LoaderSpinner/LoaderSpinner'; -import { useToaster } from '../../../../shared/defguard-ui/hooks/toasts/useToaster'; -import useEffectOnce from '../../../../shared/defguard-ui/utils/useEffectOnce'; -import type { - ActivateUserRequest, - CreateDeviceResponse, -} from '../../../../shared/hooks/api/types'; -import { errorDetail } from '../../../../shared/utils/errorDetail'; -import { clientApi } from '../../../client/clientAPI/clientApi'; -import { clientQueryKeys } from '../../../client/query'; -import { EnrollmentStepKey } from '../../const'; -import { useEnrollmentStore } from '../../hooks/store/useEnrollmentStore'; -import { useEnrollmentApi } from '../../hooks/useEnrollmentApi'; - -const { saveConfig } = clientApi; - -export const SendFinishStep = () => { - const { LL } = useI18nContext(); - const toaster = useToaster(); - const { - enrollment: { activateUser }, - } = useEnrollmentApi(); - const queryClient = useQueryClient(); - - const finishData = useEnrollmentStore((s) => ({ - phone_number: s.userInfo?.phone_number as string, - password: s.userPassword as string, - })); - - const deviceKeys = useEnrollmentStore((s) => s.deviceKeys); - const deviceResponse = useEnrollmentStore((s) => s.deviceResponse); - - const [setEnrollmentStore] = useEnrollmentStore((state) => [state.setState], shallow); - - const queryFn = useCallback( - async ( - finishData: ActivateUserRequest, - deviceResponse: CreateDeviceResponse, - privateKey: string, - ) => { - await activateUser(finishData); - info('User activated'); - debug('Invoking save_device_config'); - saveConfig({ - privateKey, - response: deviceResponse, - }) - .then(() => { - debug('Config saved'); - setEnrollmentStore({ deviceName: deviceResponse.device.name }); - const invalidate = [clientQueryKeys.getInstances, clientQueryKeys.getLocations]; - invalidate.forEach((key) => { - queryClient.invalidateQueries({ - queryKey: [key], - }); - }); - }) - .catch((e) => { - const detail = errorDetail(e); - error(`Failed to save config after user activation: ${detail}`); - if (typeof e === 'string') { - if (e.includes('Network Error')) { - toaster.error(LL.common.messages.networkError()); - return; - } - toaster.error(LL.common.messages.errorWithMessage({ message: String(e) })); - } else { - toaster.error( - LL.common.messages.errorWithMessage({ - message: String(e), - }), - ); - } - }); - }, - [ - LL.common.messages.errorWithMessage, - LL.common.messages.networkError, - activateUser, - queryClient.invalidateQueries, - setEnrollmentStore, - toaster.error, - ], - ); - - const { mutate } = useMutation({ - mutationFn: () => - queryFn( - finishData, - deviceResponse as CreateDeviceResponse, - deviceKeys?.private as string, - ), - onError: (e) => { - setEnrollmentStore({ loading: false }); - toaster.error( - LL.common.messages.errorWithMessage({ - message: String(e), - }), - ); - const detail = errorDetail(e); - error(`activateUser mutation failed during enrollment finish: ${detail}`); - }, - onSuccess: () => { - setEnrollmentStore({ loading: false, step: EnrollmentStepKey.FINISH }); - }, - }); - - useEffectOnce(() => { - setEnrollmentStore({ - loading: true, - }); - setTimeout(() => { - mutate(); - }, 250); - }); - - return ( - - - - ); -}; diff --git a/src/pages/enrollment/steps/SendFinishStep/style.scss b/src/pages/enrollment/steps/SendFinishStep/style.scss deleted file mode 100644 index ff74a6180..000000000 --- a/src/pages/enrollment/steps/SendFinishStep/style.scss +++ /dev/null @@ -1,9 +0,0 @@ -#enrollment-finish-request-step { - width: 100%; - max-width: 650px; - min-height: 25dvh; - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; -} diff --git a/src/pages/enrollment/steps/WelcomeStep/WelcomeStep.tsx b/src/pages/enrollment/steps/WelcomeStep/WelcomeStep.tsx deleted file mode 100644 index 694b9acc6..000000000 --- a/src/pages/enrollment/steps/WelcomeStep/WelcomeStep.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import './style.scss'; - -import dayjs from 'dayjs'; -import { useEffect, useMemo } from 'react'; -import ReactMarkdown from 'react-markdown'; -import rehypeSanitaze from 'rehype-sanitize'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { AdminInfo } from '../../components/AdminInfo/AdminInfo'; -import { EnrollmentStepIndicator } from '../../components/EnrollmentStepIndicator/EnrollmentStepIndicator'; -import { EnrollmentStepKey } from '../../const'; -import { useEnrollmentStore } from '../../hooks/store/useEnrollmentStore'; - -export const WelcomeStep = () => { - const { LL } = useI18nContext(); - const [sessionEnd, sessionStart] = useEnrollmentStore((state) => [ - state.sessionEnd, - state.sessionStart, - ]); - const userInfo = useEnrollmentStore((state) => state.userInfo); - - const [nextSubject, setStore] = useEnrollmentStore( - (state) => [state.nextSubject, state.setState], - shallow, - ); - - const markdown = useMemo(() => { - const startDay = dayjs(sessionStart); - const endDay = dayjs(sessionEnd); - const diffMils = endDay.diff(startDay); - const mins = Math.ceil(diffMils / (1000 * 60)); - - return LL.pages.enrollment.steps.welcome.explanation({ - time: mins.toString(), - }); - }, [LL.pages.enrollment.steps.welcome, sessionEnd, sessionStart]); - - // biome-ignore lint/correctness/useExhaustiveDependencies: rxjs sub - useEffect(() => { - const sub = nextSubject.subscribe(() => { - setStore({ step: EnrollmentStepKey.DATA_VERIFICATION }); - }); - return () => { - sub.unsubscribe(); - }; - }, [nextSubject]); - - return ( - - -

    - {LL.pages.enrollment.steps.welcome.title({ name: `${userInfo?.first_name}` })} -

    -
    - {markdown} -
    - -
    - ); -}; diff --git a/src/pages/enrollment/steps/WelcomeStep/style.scss b/src/pages/enrollment/steps/WelcomeStep/style.scss deleted file mode 100644 index e8497a521..000000000 --- a/src/pages/enrollment/steps/WelcomeStep/style.scss +++ /dev/null @@ -1,45 +0,0 @@ -#enrollment { - #enrollment-welcome-card { - box-sizing: border-box; - padding: 50px 40px; - width: 100%; - max-width: 650px; - - & > h3 { - user-select: none; - margin-bottom: 30px; - } - - & > .explenation { - user-select: none; - margin-bottom: 30px; - - p, - ul, - ol, - span { - @include typography(app-welcome-2); - - color: var(--text-body-tertiary); - } - - strong { - color: var(--text-body-primary); - } - } - - & > .admin-info { - user-select: text; - - & > p { - &:not(.title) { - font-weight: 700; - } - } - - & > .title { - user-select: none; - } - } - } -} diff --git a/src/pages/enrollment/style.scss b/src/pages/enrollment/style.scss deleted file mode 100644 index 5b391c084..000000000 --- a/src/pages/enrollment/style.scss +++ /dev/null @@ -1,38 +0,0 @@ -#enrollment { - @include media-breakpoint-down(lg) { - padding: 0; - margin: 0; - margin-bottom: 140px; - } - - @include media-breakpoint-up(lg) { - margin-left: 270px; - - .card { - box-shadow: var(--box-shadow); - - & > .step-indicator { - margin-bottom: 10px; - text-align: left; - } - - h3 { - @include typography(app-body-1); - - color: var(--text-body-primary); - width: 100%; - text-align: left; - user-select: none; - } - } - - & > .logo-container { - margin-bottom: 50px; - } - - & > .controls { - max-width: 650px; - margin-bottom: 50px; - } - } -} diff --git a/src/pages/sessionTimeout/SessionTimeoutPage.tsx b/src/pages/sessionTimeout/SessionTimeoutPage.tsx deleted file mode 100644 index aebd0144a..000000000 --- a/src/pages/sessionTimeout/SessionTimeoutPage.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import './style.scss'; - -import { isUndefined } from 'lodash-es'; -import { useNavigate } from 'react-router-dom'; -import { useBreakpoint } from 'use-breakpoint'; - -import { LogoContainer } from '../../components/LogoContainer/LogoContainer'; -import { useI18nContext } from '../../i18n/i18n-react'; -import { PageContainer } from '../../shared/components/layout/PageContainer/PageContainer'; -import { deviceBreakpoints } from '../../shared/constants'; -import { ArrowSingle } from '../../shared/defguard-ui/components/icons/ArrowSingle/ArrowSingle'; -import { - ArrowSingleDirection, - ArrowSingleSize, -} from '../../shared/defguard-ui/components/icons/ArrowSingle/types'; -import { Button } from '../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../shared/defguard-ui/components/Layout/Button/types'; -import { Card } from '../../shared/defguard-ui/components/Layout/Card/Card'; -import { routes } from '../../shared/routes'; -import { useEnrollmentStore } from '../enrollment/hooks/store/useEnrollmentStore'; - -export const SessionTimeoutPage = () => { - const adminInfo = useEnrollmentStore((state) => state.adminInfo); - const { breakpoint } = useBreakpoint(deviceBreakpoints); - const { LL } = useI18nContext(); - const navigate = useNavigate(); - - return ( - - - -

    {LL.pages.sessionTimeout.card.header()}

    -

    {LL.pages.sessionTimeout.card.message()}

    -
    -
    -
    -
    - ); -}; diff --git a/src/pages/sessionTimeout/style.scss b/src/pages/sessionTimeout/style.scss deleted file mode 100644 index 199673376..000000000 --- a/src/pages/sessionTimeout/style.scss +++ /dev/null @@ -1,66 +0,0 @@ -#session-timeout { - & > .logo-container { - display: none; - - @include media-breakpoint-up(lg) { - display: flex; - margin-bottom: 100px; - } - } - - & > .card { - margin-bottom: 50px; - display: flex; - flex-flow: column; - row-gap: 20px; - width: 100%; - max-width: 720px; - align-items: center; - justify-content: center; - box-sizing: border-box; - padding: 50px 20px; - - @include media-breakpoint-up(lg) { - margin-bottom: 100px; - } - - h2 { - @include typography(app-welcome-1); - color: var(--text-button-primary); - text-align: center; - } - - p { - @include typography(app-welcome-2); - color: var(--text-body-tertiary); - max-width: 490px; - text-align: center; - } - } - - & > .controls { - display: flex; - flex-flow: row wrap; - box-sizing: border-box; - column-gap: 32px; - row-gap: 20px; - align-items: center; - justify-content: center; - - & > .btn { - width: 100%; - - @include media-breakpoint-up(lg) { - width: 344px; - } - - &:nth-of-type(1) { - svg { - g { - fill: var(--surface-icon-primary); - } - } - } - } - } -} diff --git a/src/shared/components/icons/IconDefguard/IconDeguard.tsx b/src/shared/components/icons/IconDefguard/IconDeguard.tsx deleted file mode 100644 index 6c302bfe6..000000000 --- a/src/shared/components/icons/IconDefguard/IconDeguard.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { useId } from 'react'; - -type Props = { - height?: number; - width?: number; - id?: string; - className?: string; -}; - -export const IconDefguard = ({ id, className, height = 43, width = 21 }: Props) => { - const clipPathId = useId(); - return ( - - - - - - - - - - - ); -}; diff --git a/src/shared/components/icons/IconDefguardFull/IconDefguardFull.tsx b/src/shared/components/icons/IconDefguardFull/IconDefguardFull.tsx deleted file mode 100644 index 3c440c7be..000000000 --- a/src/shared/components/icons/IconDefguardFull/IconDefguardFull.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import { useId } from 'react'; - -type Props = { - height?: number; - width?: number; - id?: string; - className?: string; -}; - -export const IconDefguardFull = ({ id, className, height = 99, width = 257 }: Props) => { - const clipPathId = useId(); - return ( - - - - - - - - - - - - - - - - - - - ); -}; diff --git a/src/shared/components/layout/PageContainer/PageContainer.tsx b/src/shared/components/layout/PageContainer/PageContainer.tsx deleted file mode 100644 index 34b4d9e00..000000000 --- a/src/shared/components/layout/PageContainer/PageContainer.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import './style.scss'; - -import classNames from 'classnames'; -import { type HtmlHTMLAttributes, type ReactNode, useMemo } from 'react'; - -type Props = HtmlHTMLAttributes & { - children?: ReactNode; -}; - -export const PageContainer = ({ children, className, ...rest }: Props) => { - const cn = useMemo(() => classNames('page-container', className), [className]); - return ( -
    - {children} -
    - ); -}; diff --git a/src/shared/components/layout/PageContainer/style.scss b/src/shared/components/layout/PageContainer/style.scss deleted file mode 100644 index 327763125..000000000 --- a/src/shared/components/layout/PageContainer/style.scss +++ /dev/null @@ -1,17 +0,0 @@ -.page-container { - position: relative; - box-sizing: border-box; - display: flex; - flex-flow: column; - align-items: center; - justify-content: flex-start; - margin: 0; - background-color: var(--surface-default-modal); - min-height: 100vh; - padding: 85px 0 70px 0; - - @include media-breakpoint-up(lg) { - background-color: var(--surface-frame-bg); - padding: 100px 0; - } -} diff --git a/src/shared/components/providers/DeepLinkProvider.tsx b/src/shared/components/providers/DeepLinkProvider.tsx deleted file mode 100644 index 306ab38cc..000000000 --- a/src/shared/components/providers/DeepLinkProvider.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { listen } from '@tauri-apps/api/event'; -import { error } from '@tauri-apps/plugin-log'; -import { type PropsWithChildren, useEffect } from 'react'; -import { type AddInstancePayload, TauriEventKey } from '../../../pages/client/types'; -import useAddInstance from '../../hooks/useAddInstance'; -import { errorDetail } from '../../utils/errorDetail'; - -export const linkStorageKey = 'lastSuccessfullyHandledDeepLink'; - -export const storeLink = (value: string) => { - sessionStorage.setItem(linkStorageKey, value); -}; - -export const DeepLinkProvider = ({ children }: PropsWithChildren) => { - const { handleAddInstance } = useAddInstance(); - - useEffect(() => { - const unlisten = listen(TauriEventKey.ADD_INSTANCE, (event) => { - handleAddInstance(event.payload).catch((e) => { - error(`Failed to handle add-instance event: ${errorDetail(e)}`); - }); - }); - - return () => { - unlisten.then((fn) => fn()); - }; - }, [handleAddInstance]); - - return <>{children}; -}; diff --git a/src/shared/components/svg/DefguardLogoCollapsed.tsx b/src/shared/components/svg/DefguardLogoCollapsed.tsx deleted file mode 100644 index 0126db6b8..000000000 --- a/src/shared/components/svg/DefguardLogoCollapsed.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import type { SVGProps } from 'react'; - -const SvgDefguardLogoCollapsed = (props: SVGProps) => ( - - - - - - - - - - -); -export default SvgDefguardLogoCollapsed; diff --git a/src/shared/components/svg/DefguardLogoDarkmode.tsx b/src/shared/components/svg/DefguardLogoDarkmode.tsx deleted file mode 100644 index 0b0268721..000000000 --- a/src/shared/components/svg/DefguardLogoDarkmode.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import type { SVGProps } from 'react'; - -const SvgDefguardLogoDarkmode = (props: SVGProps) => ( - - - - - - - - - - - -); -export default SvgDefguardLogoDarkmode; diff --git a/src/shared/components/svg/DefguardLogoIcon.tsx b/src/shared/components/svg/DefguardLogoIcon.tsx deleted file mode 100644 index e2a0d66d0..000000000 --- a/src/shared/components/svg/DefguardLogoIcon.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import type { SVGProps } from 'react'; - -const SvgDefguardLogoIcon = (props: SVGProps) => ( - - - - - - - - - - -); -export default SvgDefguardLogoIcon; diff --git a/src/shared/components/svg/DefguardLogoText.tsx b/src/shared/components/svg/DefguardLogoText.tsx deleted file mode 100644 index 6da22b67e..000000000 --- a/src/shared/components/svg/DefguardLogoText.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type { SVGProps } from 'react'; - -const SvgDefguardLogoText = (props: SVGProps) => ( - - - -); -export default SvgDefguardLogoText; diff --git a/src/shared/components/svg/GithubIcon.tsx b/src/shared/components/svg/GithubIcon.tsx deleted file mode 100644 index 06c54a5a7..000000000 --- a/src/shared/components/svg/GithubIcon.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import type { SVGProps } from 'react'; - -export const GitHubIcon = (props: SVGProps) => ( - - - - - - - - - - - -); diff --git a/src/shared/components/svg/IconCheckmarkSmall.tsx b/src/shared/components/svg/IconCheckmarkSmall.tsx deleted file mode 100644 index 78cb1f9ff..000000000 --- a/src/shared/components/svg/IconCheckmarkSmall.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type { SVGProps } from 'react'; - -const SvgIconCheckmarkSmall = (props: SVGProps) => ( - - - - - - -); -export default SvgIconCheckmarkSmall; diff --git a/src/shared/components/svg/IconNavConnections.tsx b/src/shared/components/svg/IconNavConnections.tsx deleted file mode 100644 index eae5efef6..000000000 --- a/src/shared/components/svg/IconNavConnections.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type { SVGProps } from 'react'; - -const SvgIconNavConnections = (props: SVGProps) => ( - - - -); -export default SvgIconNavConnections; diff --git a/src/shared/components/svg/IconNavVpn.tsx b/src/shared/components/svg/IconNavVpn.tsx deleted file mode 100644 index 12c506897..000000000 --- a/src/shared/components/svg/IconNavVpn.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import type { SVGProps } from 'react'; - -const SvgIconNavVpn = (props: SVGProps) => ( - - - - -); -export default SvgIconNavVpn; diff --git a/src/shared/components/svg/TeoniteLogo.tsx b/src/shared/components/svg/TeoniteLogo.tsx deleted file mode 100644 index be4b11e56..000000000 --- a/src/shared/components/svg/TeoniteLogo.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type { SVGProps } from 'react'; - -const SvgTeoniteLogo = (props: SVGProps) => ( - - - -); -export default SvgTeoniteLogo; diff --git a/src/shared/components/svg/VpnLocation.tsx b/src/shared/components/svg/VpnLocation.tsx deleted file mode 100644 index 974eddf3c..000000000 --- a/src/shared/components/svg/VpnLocation.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import type { SVGProps } from 'react'; - -const SvgVpnLocation = (props: SVGProps) => ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -); -export default SvgVpnLocation; diff --git a/src/shared/constants.ts b/src/shared/constants.ts deleted file mode 100644 index 8cb26e988..000000000 --- a/src/shared/constants.ts +++ /dev/null @@ -1,19 +0,0 @@ -export const inactiveBoxShadow = '0px 0px 0px rgba(0, 0, 0, 0)'; - -export const deviceBreakpoints = { - mobile: 0, - tablet: 768, - desktop: 992, -}; - -export const mastodonUrl = - 'https://mastodonshare.com/?text=%22Defguard%20is%20awesome!%22&url=defguard.net'; - -export const githubUrl = 'https://github.com/Defguard/defguard'; - -export const discussionsUrl = - 'https://github.com/DefGuard/defguard/discussions/new/choose'; - -export const CLIENT_VERSION_HEADER = 'defguard-client-version'; - -export const CLIENT_PLATFORM_HEADER = 'defguard-client-platform'; diff --git a/src/shared/hooks/api/types.ts b/src/shared/hooks/api/types.ts deleted file mode 100644 index 73ca0dddc..000000000 --- a/src/shared/hooks/api/types.ts +++ /dev/null @@ -1,153 +0,0 @@ -import type { DefguardInstance } from '../../../pages/client/types'; -import type { MfaMethod } from '../../types'; - -export type EmptyApiResponse = Record; - -export type AdminInfo = { - name: string; - email: string; - phone_number?: string; -}; - -export type UserInfo = { - first_name: string; - last_name: string; - login: string; - email: string; - is_active: boolean; - phone_number: string; - device_names: string[]; - enrolled: boolean; -}; - -export type EnrollmentStartRequest = { - token: string; - proxyUrl?: string; -}; - -export type EnrollmentSettings = { - admin_device_management: boolean; - mfa_required: boolean; - only_client_activation: boolean; - smtp_configured: boolean; - vpn_setup_optional: boolean; -}; - -export type EnrollmentStartResponse = { - admin: AdminInfo; - user: UserInfo; - instance: EnrollmentInstanceInfo; - deadline_timestamp: number; - final_page_content: string; - vpn_setup_optional: boolean; - settings: EnrollmentSettings; -}; - -export type ActivateUserRequest = { - phone_number: string; - password: string; -}; - -export type ActivateUserResponse = { - token: string; -}; - -export type CreateDeviceRequest = { - name: string; - pubkey: string; -}; - -export type Device = { - id: number; - name: string; - pubkey: string; - // stored by frontend only - privateKey?: string; - user_id: number; - // timestamp - created_at: number; -}; - -export type DeviceConfig = { - network_id: number; - network_name: string; - config: string; -}; - -export type CreateDeviceResponse = { - device: Device; - configs: DeviceConfig[]; - instance: DefguardInstance; -}; - -export type AppInfo = { - version: string; -}; - -export type EnrollmentAdminInfo = { - name: string; - email: string; - phone_number?: string; -}; - -export type EnrollmentInitialUserInfo = { - first_name: string; - last_name: string; - login: string; - email: string; - phone_number?: string; - is_active: boolean; - enrolled: boolean; -}; - -export type EnrollmentInstanceInfo = { - id: string; - name: string; - url: string; - proxy_url?: string; - username: string; - openid_display_name?: string; -}; - -export type NewApplicationVersionInfo = { - version: string; - release_date: string; - release_notes_url: string; - update_url: string; -}; - -export type RegisterCodeMfaFinishRequest = { - code: string; - method: MfaMethod; -}; - -export type RegisterCodeMfaStartResponse = { - totp_secret?: string; -}; - -export type RegisterCodeMfaFinishResponse = { - recovery_codes: string[]; -}; - -// FIXME: strong types -export type UseApi = { - enrollment: { - networkInfo: ( - data: { pubkey: string }, - proxyUrl?: string, - cookie?: string, - ) => Promise; - start: (data: EnrollmentStartRequest) => Promise; - activateUser: (data: ActivateUserRequest) => Promise; - createDevice: (data: CreateDeviceRequest) => Promise; - registerCodeMfaStart: (method: MfaMethod) => Promise; - registerCodeMfaFinish: ( - data: RegisterCodeMfaFinishRequest, - ) => Promise; - }; - getAppInfo: () => Promise; -}; - -export type EnrollmentError = { - error: string; -}; diff --git a/src/shared/hooks/api/utils.ts b/src/shared/hooks/api/utils.ts deleted file mode 100644 index 6539474b8..000000000 --- a/src/shared/hooks/api/utils.ts +++ /dev/null @@ -1,7 +0,0 @@ -// biome-ignore lint/suspicious/noExplicitAny: intended -export const removeNulls = (obj: any) => { - return JSON.parse(JSON.stringify(obj), (_, value) => { - if (value == null) return undefined; - return value; - }); -}; diff --git a/src/shared/hooks/useAddInstance.ts b/src/shared/hooks/useAddInstance.ts deleted file mode 100644 index ea3fde7ac..000000000 --- a/src/shared/hooks/useAddInstance.ts +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Hook which handles adding an instance in the background and triggering enrollment process (if necessary) - * in automated scenarios e.g. deep-link, client provisioning etc. - */ - -import { invoke } from '@tauri-apps/api/core'; -import { debug, error } from '@tauri-apps/plugin-log'; -import dayjs from 'dayjs'; -import { useCallback, useState } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { clientApi } from '../../pages/client/clientAPI/clientApi'; -import { useClientStore } from '../../pages/client/hooks/useClientStore'; -import { AddInstanceFormStep } from '../../pages/client/pages/ClientAddInstancePage/hooks/types'; -import { useAddInstanceStore } from '../../pages/client/pages/ClientAddInstancePage/hooks/useAddInstanceStore'; -import { type AddInstancePayload, ClientConnectionType } from '../../pages/client/types'; -import { useEnrollmentStore } from '../../pages/enrollment/hooks/store/useEnrollmentStore'; -import { useEnrollmentApi } from '../../pages/enrollment/hooks/useEnrollmentApi'; -import { storeLink } from '../components/providers/DeepLinkProvider'; -import type { EnrollmentStartResponse } from '../hooks/api/types'; -import { routes } from '../routes'; - -const prepareProxyUrl = (value: string) => { - let proxyUrl = value; - if (proxyUrl[proxyUrl.length - 1] === '/') { - proxyUrl = proxyUrl.slice(0, -1); - } - proxyUrl = `${proxyUrl}/api/v1`; - return proxyUrl; -}; - -export default function useAddInstance() { - const [loading, setLoading] = useState(false); - - const setEnrollmentState = useEnrollmentStore((s) => s.init); - const setAddInstanceState = useAddInstanceStore((s) => s.setState); - const setClientState = useClientStore((s) => s.setState); - - const navigate = useNavigate(); - - const { - enrollment: { start, networkInfo }, - } = useEnrollmentApi(); - - const handleAddInstance = useCallback( - async (payload: AddInstancePayload, rawLink?: string) => { - setLoading(true); - - await start({ - token: payload.token, - proxyUrl: prepareProxyUrl(payload.url), - }).then(async (response) => { - if (response.ok) { - const authCookie = response.headers - .getSetCookie() - .find((cookie) => cookie.startsWith('defguard_proxy=')); - if (authCookie === undefined) { - error( - 'Failed to automatically add new instance, auth cookie missing from proxy response.', - ); - return; - } - const respData = (await response.json()) as EnrollmentStartResponse; - const instances = await clientApi.getInstances(); - const proxy_api_url = prepareProxyUrl( - respData.instance.proxy_url ?? respData.instance.url, - ); - const existingInstance = instances.find( - (instance) => instance.uuid === respData.instance.id, - ); - if (existingInstance) { - // update existing instance instead - const networkInfoResp = await networkInfo( - { - pubkey: existingInstance.pubkey, - }, - proxy_api_url, - authCookie, - ); - await invoke('update_instance', { - instanceId: existingInstance.id, - response: networkInfoResp, - }); - setClientState({ - selectedInstance: { - type: ClientConnectionType.LOCATION, - id: existingInstance.id, - }, - }); - if (rawLink) { - storeLink(rawLink); - } - debug(`Automatically updated ${existingInstance.name}`); - navigate(routes.client.base, { replace: true }); - return; - } - if (!respData.user.enrolled) { - // user needs full enrollment - const sessionEnd = dayjs - .unix(respData.deadline_timestamp) - .utc() - .local() - .format(); - const sessionStart = dayjs().local().format(); - // set enrollment - setEnrollmentState({ - enrollmentSettings: respData.settings, - proxy_url: proxy_api_url, - userInfo: respData.user, - adminInfo: respData.admin, - endContent: respData.final_page_content, - cookie: authCookie, - sessionEnd, - sessionStart, - }); - navigate('/enrollment', { replace: true }); - } else { - // only needs to register this device - setAddInstanceState({ - step: AddInstanceFormStep.DEVICE, - response: { - cookie: authCookie, - device_names: respData.user.device_names, - url: proxy_api_url, - }, - }); - navigate('/client/add-instance', { replace: true }); - } - } else { - error( - `Adding instance automatically failed. Proxy enrollment start request failed with status: ${response.status}`, - ); - } - }); - }, - [ - setClientState, - networkInfo, - start, - setEnrollmentState, - setAddInstanceState, - navigate, - ], - ); - - return { handleAddInstance, loading, error }; -} diff --git a/src/shared/hooks/useClipboard.ts b/src/shared/hooks/useClipboard.ts deleted file mode 100644 index f02c78372..000000000 --- a/src/shared/hooks/useClipboard.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { writeText } from '@tauri-apps/plugin-clipboard-manager'; -import { error } from '@tauri-apps/plugin-log'; -import { useCallback } from 'react'; - -import { useI18nContext } from '../../i18n/i18n-react'; -import { useToaster } from '../defguard-ui/hooks/toasts/useToaster'; -import { errorDetail } from '../utils/errorDetail'; - -export const useClipboard = () => { - const { LL } = useI18nContext(); - - const toaster = useToaster(); - - const writeToClipboard = useCallback( - async (content: string, customMessage?: string) => { - try { - await writeText(content); - if (customMessage) { - toaster.success(customMessage); - } else { - toaster.success(LL.common.messages.clipboard.success()); - } - } catch (e) { - toaster.error(LL.common.messages.clipboard.error()); - const detail = errorDetail(e); - error(`Failed to write to clipboard: ${detail}`); - } - }, - [LL.common.messages, toaster], - ); - - return { - writeToClipboard, - }; -}; diff --git a/src/shared/images/png/logo_256-256.png b/src/shared/images/png/logo_256-256.png deleted file mode 100644 index 12f44fdee1e9fe0bac7cd5f2734c02f1bf2f9afd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27413 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 - - - - - - - - - \ No newline at end of file diff --git a/src/shared/images/svg/defguard-logo-darkmode.svg b/src/shared/images/svg/defguard-logo-darkmode.svg deleted file mode 100644 index 5d09935c5..000000000 --- a/src/shared/images/svg/defguard-logo-darkmode.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/shared/images/svg/defguard-logo-icon.svg b/src/shared/images/svg/defguard-logo-icon.svg deleted file mode 100644 index b3dbd6986..000000000 --- a/src/shared/images/svg/defguard-logo-icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/shared/images/svg/defguard-logo-text.svg b/src/shared/images/svg/defguard-logo-text.svg deleted file mode 100644 index 141b66684..000000000 --- a/src/shared/images/svg/defguard-logo-text.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/shared/images/svg/icon-checkmark-small.svg b/src/shared/images/svg/icon-checkmark-small.svg deleted file mode 100644 index 22fa28932..000000000 --- a/src/shared/images/svg/icon-checkmark-small.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/shared/images/svg/icon-nav-connections.svg b/src/shared/images/svg/icon-nav-connections.svg deleted file mode 100644 index c09dacff6..000000000 --- a/src/shared/images/svg/icon-nav-connections.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/shared/images/svg/icon-nav-vpn.svg b/src/shared/images/svg/icon-nav-vpn.svg deleted file mode 100644 index 13d63267b..000000000 --- a/src/shared/images/svg/icon-nav-vpn.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/shared/images/svg/teonite-logo.svg b/src/shared/images/svg/teonite-logo.svg deleted file mode 100644 index fe323f775..000000000 --- a/src/shared/images/svg/teonite-logo.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/shared/images/svg/vpn-location.svg b/src/shared/images/svg/vpn-location.svg deleted file mode 100644 index 0f39d1ae1..000000000 --- a/src/shared/images/svg/vpn-location.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/shared/links.ts b/src/shared/links.ts deleted file mode 100644 index ca3b4e4b8..000000000 --- a/src/shared/links.ts +++ /dev/null @@ -1,3 +0,0 @@ -// collection of external links - -export const defguardGithubLink = 'https://github.com/DefGuard'; diff --git a/src/shared/patterns.ts b/src/shared/patterns.ts deleted file mode 100644 index 0dc65fbba..000000000 --- a/src/shared/patterns.ts +++ /dev/null @@ -1,85 +0,0 @@ -/* eslint-disable no-useless-escape */ -export const patternNoSpecialChars = /^\w+$/; - -export const patternDigitOrLowercase = /^[0-9a-z]+$/g; - -export const patternValidEmail = - // eslint-disable-next-line max-len - /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/g; - -export const patternAtLeastOneUpperCaseChar = /(?=.*?[A-Z])/g; - -export const patternAtLeastOneLowerCaseChar = /(?=.*?[a-z])/g; - -export const patternAtLeastOneDigit = /(?=.*?[0-9])/g; - -export const patternStartsWithDigit = /^\d/; - -export const patternAtLeastOneSpecialChar = /(?=.*?[#?!@$%^&*-])/g; - -export const patternValidPhoneNumber = - /^(\+?\d{1,3}\s?)?(\(\d{1,3}\)|\d{1,3})[-\s]?\d{1,4}[-\s]?\d{1,4}?$/; - -export const patternValidWireguardKey = - /^[A-Za-z0-9+/]{42}[A|E|I|M|Q|U|Y|c|g|k|o|s|w|4|8|0]=$/; - -export const patternBaseUrl = /:\/\/(.[^/]+)/; - -// https://gist.github.com/dperini/729294 -export const patternValidUrl = new RegExp( - '^' + - // protocol identifier (optional) - // short syntax // still required - '(?:(?:(?:https?):)?\\/\\/)' + - // user:pass BasicAuth (optional) - '(?:\\S+(?::\\S*)?@)?' + - '(?:' + - // IP address dotted notation octets - // excludes loopback network 0.0.0.0 - // excludes reserved space >= 224.0.0.0 - // excludes network & broadcast addresses - // (first & last IP address of each class) - '(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])' + - '(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}' + - '(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))' + - '|' + - // host & domain names, may end with dot - // can be replaced by a shortest alternative - // (?![-_])(?:[-\\w\\u00a1-\\uffff]{0,63}[^-_]\\.)+ - '(?:' + - '(?:' + - '[a-z0-9\\u00a1-\\uffff]' + - '[a-z0-9\\u00a1-\\uffff_-]{0,62}' + - ')?' + - '[a-z0-9\\u00a1-\\uffff]\\.' + - ')+' + - // TLD identifier name, may end with dot - '(?:[a-z\\u00a1-\\uffff]{2,}\\.?)' + - ')' + - // port number (optional) - '(?::\\d{2,5})?' + - // resource path (optional) - '(?:[/?#]\\S*)?' + - '$', - 'i', -); - -export const patternValidDomain = - /^(?:(?:(?:[a-zA-z-]+):\/{1,3})?(?:[a-zA-Z0-9])(?:[a-zA-Z0-9\-.]){1,61}(?:\.[a-zA-Z]{2,})+|\[(?:(?:(?:[a-fA-F0-9]){1,4})(?::(?:[a-fA-F0-9]){1,4}){7}|::1|::)\]|(?:(?:[0-9]{1,3})(?:\.[0-9]{1,3}){3}))(?::[0-9]{1,5})?$/; - -export const patternValidIp = - /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\/32)?$/; - -export const cidrRegex = - /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}|[0-9a-fA-F:.]+\/\d{1,3})$/; -// Regular expression to match IPv4, IPv6, domain name, or localhost with port -export const patternValidEndpoint = - /^(localhost|\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b|\b(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}\b)(?::(\d+))?$/; - -// Copied from zod source code and added optional mask at the end to match WireguardRequirements -export const patternValidIpV6 = - /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))(?:\/128)?$/; - -// Reuse pattern from above to support format [ipv6]:port -export const patternValidIpV6WithPort = - /^\[((([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))(\/128)?)\]:(\d{1,5})$/; diff --git a/src/shared/providers/ThemeProvider/ThemeProvider.tsx b/src/shared/providers/ThemeProvider/ThemeProvider.tsx deleted file mode 100644 index 9f9b74703..000000000 --- a/src/shared/providers/ThemeProvider/ThemeProvider.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { type ReactNode, useEffect } from 'react'; - -import { useClientStore } from '../../../pages/client/hooks/useClientStore'; -import type { ThemeKey } from '../../defguard-ui/hooks/theme/types'; - -type Props = { - children: ReactNode; -}; - -// this sync settings theme with html dataset -export const ThemeProvider = ({ children }: Props) => { - const currentTheme = useClientStore((state) => state.appConfig.theme); - - useEffect(() => { - const current = document.documentElement.dataset.theme as ThemeKey; - if (currentTheme !== current) { - document.documentElement.dataset.theme = currentTheme; - } - }, [currentTheme]); - - return <>{children}; -}; diff --git a/src/shared/routes.ts b/src/shared/routes.ts deleted file mode 100644 index c8e556dcd..000000000 --- a/src/shared/routes.ts +++ /dev/null @@ -1,18 +0,0 @@ -// ease of use in rest of code while navigating, this should reflect what is built by createBrowserRouter in App.tsx -export const routes = { - main: '/', - client: { - base: '/client', - instancePage: '/client/instance', - addInstance: '/client/add-instance', - addTunnel: '/client/add-tunnel', - tunnelCreated: '/client/tunnel-created', - instanceCreated: '/client/instance-created', - editTunnel: '/client/edit-tunnel', - settings: '/client/settings', - carousel: '/client/carousel', - }, - enrollment: '/enrollment', - timeout: '/timeout', - passwordReset: '/password-reset', -}; diff --git a/src/shared/scss/_base.scss b/src/shared/scss/_base.scss deleted file mode 100644 index da5738a0a..000000000 --- a/src/shared/scss/_base.scss +++ /dev/null @@ -1,83 +0,0 @@ -@use '@scssutils' as *; - -html, -body { - padding: 0; - margin: 0; - font-size: 400; - color: var(--text-body-primary); -} - -#root { - min-width: 100%; - min-height: 100vh; -} - -button { - cursor: pointer; -} - -.hidden, -.visually-hidden { - @include visually-hidden; -} - -input, -button { - margin: 0; - padding: 0; - - &:focus, - &:focus-within { - outline: none; - } -} - -p, -span, -h1, -h2, -h3, -h4, -h5, -h6 { - padding: 0; - margin: 0; -} - -h1, -h2, -h3, -h4, -h5, -h6, -label { - user-select: none; -} - -// SCROLL - -::-webkit-scrollbar { - width: 4px; - height: 4px; -} - -::-webkit-scrollbar-thumb { - border-radius: 15px; - - background-color: var(--text-body-tertiary); - opacity: 0.4; - - &:hover { - opacity: 1; - } -} - -strong { - font-weight: 900; -} - -ol, -ul { - padding-inline-start: 30px; -} diff --git a/src/shared/scss/_fonts.scss b/src/shared/scss/_fonts.scss deleted file mode 100644 index 5f2663d81..000000000 --- a/src/shared/scss/_fonts.scss +++ /dev/null @@ -1,111 +0,0 @@ -@font-face { - font-family: 'Poppins'; - font-weight: 500; - font-display: block; - src: url('/fonts/Poppins/Poppins-Medium.woff2') format('woff2'); - font-style: normal; -} - -@font-face { - font-family: 'Poppins'; - font-weight: 600; - font-display: block; - src: url('/fonts/Poppins/Poppins-SemiBold.woff2') format('woff2'); - font-style: normal; -} - -@font-face { - font-family: 'Poppins'; - font-weight: 400; - font-display: block; - src: url('/fonts/Poppins/Poppins-Regular.woff2') format('woff2'); - font-style: normal; -} - -@font-face { - font-family: 'Poppins'; - font-weight: 300; - font-display: block; - src: url('/fonts/Poppins/Poppins-Light.woff2') format('woff2'); - font-style: normal; -} - -@font-face { - font-family: 'Source Code Pro'; - font-weight: 400; - font-display: block; - src: url('/fonts/SourceCodePro/SourceCodePro-Regular.woff2') format('woff2'); - font-style: normal; -} - -@font-face { - font-family: 'Roboto'; - font-weight: 500; - font-display: block; - src: url('/fonts/Roboto/Roboto-Medium.woff2') format('woff2'); - font-style: normal; -} - -@font-face { - font-family: 'Roboto'; - font-weight: 400; - font-display: block; - src: url('/fonts/Roboto/Roboto-Regular.woff2') format('woff2'); - font-style: normal; -} - -@font-face { - font-family: 'Poppins'; - font-weight: 500; - font-display: block; - src: url('/fonts/Poppins/Poppins-MediumItalic.woff2') format('woff2'); - font-style: italic; -} - -@font-face { - font-family: 'Poppins'; - font-weight: 600; - font-display: block; - src: url('/fonts/Poppins/Poppins-SemiBoldItalic.woff2') format('woff2'); - font-style: italic; -} - -@font-face { - font-family: 'Poppins'; - font-weight: 400; - font-display: block; - src: url('/fonts/Poppins/Poppins-Italic.woff2') format('woff2'); - font-style: italic; -} - -@font-face { - font-family: 'Poppins'; - font-weight: 300; - font-display: block; - src: url('/fonts/Poppins/Poppins-LightItalic.woff2') format('woff2'); - font-style: italic; -} - -@font-face { - font-family: 'Source Code Pro'; - font-weight: 400; - font-display: block; - src: url('/fonts/SourceCodePro/SourceCodePro-Italic.woff2') format('woff2'); - font-style: italic; -} - -@font-face { - font-family: 'Roboto'; - font-weight: 500; - font-display: block; - src: url('/fonts/Roboto/Roboto-MediumItalic.woff2') format('woff2'); - font-style: italic; -} - -@font-face { - font-family: 'Roboto'; - font-weight: 400; - font-display: block; - src: url('/fonts/Roboto/Roboto-Italic.woff2') format('woff2'); - font-style: italic; -} diff --git a/src/shared/scss/index.scss b/src/shared/scss/index.scss deleted file mode 100644 index 97b37dba0..000000000 --- a/src/shared/scss/index.scss +++ /dev/null @@ -1,2 +0,0 @@ -@forward './base'; -@forward './fonts'; diff --git a/src/shared/types.ts b/src/shared/types.ts deleted file mode 100644 index bee7e50f2..000000000 --- a/src/shared/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -export enum MfaMethod { - TOTP = 'Totp', - EMAIL = 'Email', - OIDC = 'Oidc', - BIOMETRIC = 'Biometric', - MOBILE_APPROVE = 'MobileApprove', -} diff --git a/src/shared/utils/detectClickOutside.ts b/src/shared/utils/detectClickOutside.ts deleted file mode 100644 index 933609a88..000000000 --- a/src/shared/utils/detectClickOutside.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Checks if mouse event clicked within any of provided rects - */ -export const detectClickInside = (event: MouseEvent, rects: DOMRect[]) => { - for (const domRect of rects) { - if (domRect) { - const start_x = domRect?.x; - const start_y = domRect?.y; - const end_x = start_x + domRect?.width; - const end_y = start_y + domRect.height; - if ( - event.clientX >= start_x && - event.clientX <= end_x && - event.clientY >= start_y && - event.clientY <= end_y - ) { - return true; - } - } - } - return false; -}; diff --git a/src/shared/utils/downloadWGConfig.ts b/src/shared/utils/downloadWGConfig.ts deleted file mode 100644 index f3c357d0f..000000000 --- a/src/shared/utils/downloadWGConfig.ts +++ /dev/null @@ -1,8 +0,0 @@ -import saveAs from 'file-saver'; - -export const downloadWGConfig = (config: string, fileName: string) => { - const blob = new Blob([config.replace(/^[^\S\r\n]+|[^\S\r\n]+$/gm, '')], { - type: 'text/plain;charset=utf-8', - }); - saveAs(blob, `${fileName.toLowerCase()}.conf`); -}; diff --git a/src/shared/utils/errorDetail.ts b/src/shared/utils/errorDetail.ts deleted file mode 100644 index 59cf3bf8e..000000000 --- a/src/shared/utils/errorDetail.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Extracts the most useful debug string from an unknown caught value. - * - * - For Error objects: returns the stack trace (includes message + call chain). - * Falls back to message if stack is unavailable. - * - For anything else (string, number, …): coerces to string. - */ -export const errorDetail = (e: unknown): string => - e instanceof Error ? (e.stack ?? e.message) : String(e); diff --git a/src/shared/utils/generateWGKeys.ts b/src/shared/utils/generateWGKeys.ts deleted file mode 100644 index 6e9818559..000000000 --- a/src/shared/utils/generateWGKeys.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { encode } from '@stablelib/base64'; -import { generateKeyPair } from '@stablelib/x25519'; - -export const generateWGKeys = () => { - const keys = generateKeyPair(); - const publicKey = encode(keys.publicKey); - const privateKey = encode(keys.secretKey); - return { publicKey, privateKey }; -}; diff --git a/src/shared/utils/getStatsFilterValue.ts b/src/shared/utils/getStatsFilterValue.ts deleted file mode 100644 index a063da3c0..000000000 --- a/src/shared/utils/getStatsFilterValue.ts +++ /dev/null @@ -1,7 +0,0 @@ -import dayjs from 'dayjs'; -import utc from 'dayjs/plugin/utc'; - -dayjs.extend(utc); - -export const getStatsFilterValue = (hours: number): string => - dayjs.utc().subtract(hours, 'hours').toISOString(); diff --git a/src/shared/utils/isComparable.ts b/src/shared/utils/isComparable.ts deleted file mode 100644 index 120180f1a..000000000 --- a/src/shared/utils/isComparable.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const isComparableWithStrictEquality = (val: unknown) => { - const t = typeof val; - return ( - t === 'number' || - t === 'string' || - t === 'boolean' || - t === 'undefined' || - val === null - ); -}; diff --git a/src/shared/validators/password.ts b/src/shared/validators/password.ts deleted file mode 100644 index 2088afcf7..000000000 --- a/src/shared/validators/password.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { z } from 'zod'; - -import type { TranslationFunctions } from '../../i18n/i18n-types'; -import { - patternAtLeastOneDigit, - patternAtLeastOneLowerCaseChar, - patternAtLeastOneSpecialChar, - patternAtLeastOneUpperCaseChar, -} from '../patterns'; - -export const passwordValidator = (LL: TranslationFunctions) => - z - .string() - .trim() - .nonempty(LL.form.errors.required()) - .min(8, LL.form.errors.minLength({ length: 8 })) - .max(128, LL.form.errors.maxLength({ length: 128 })) - .regex(patternAtLeastOneDigit, LL.form.errors.numberRequired()) - .regex(patternAtLeastOneSpecialChar, LL.form.errors.specialsRequired()) - .regex(patternAtLeastOneLowerCaseChar, LL.form.errors.oneLower()) - .regex(patternAtLeastOneUpperCaseChar, LL.form.errors.oneUpper()); diff --git a/src/shared/validators/tunnel.ts b/src/shared/validators/tunnel.ts deleted file mode 100644 index 5039ebe4e..000000000 --- a/src/shared/validators/tunnel.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { patternValidDomain, patternValidIp, patternValidIpV6 } from '../patterns'; - -// Returns flase when invalid -export const validateIpOrDomain = (val: string, allowMask = false): boolean => { - return validateIp(val, allowMask) || patternValidDomain.test(val); -}; - -// Returns flase when invalid -export const validateIpList = ( - val: string, - splitWith = ',', - allowMasks = false, -): boolean => { - const trimed = val.replace(' ', ''); - const split = trimed.split(splitWith); - return split.every((value) => validateIp(value, allowMasks)); -}; - -// Returns flase when invalid -export const validateIpOrDomainList = ( - val: string, - splitWith = ',', - allowMasks = false, -): boolean => { - // split and trim values - const split = val.split(splitWith).map((value) => value.trim()); - return split.every((value) => validateIpOrDomain(value, allowMasks)); -}; - -// Returns flase when invalid -export const validateIp = (ip: string, allowMask = false): boolean => { - if (allowMask) { - if (ip.includes('/')) { - const split = ip.split('/'); - if (split.length !== 2) return false; - const ipValid = patternValidIp.test(split[0]); - if (split[1] === '') return false; - const mask = Number(split[1]); - const maskValid = mask >= 0 && mask <= 32; - return ipValid && maskValid; - } - } - return patternValidIp.test(ip) || patternValidIpV6.test(ip); -}; diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2a..000000000 --- a/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/svgo.config.json b/svgo.config.json deleted file mode 100644 index 24c20eaef..000000000 --- a/svgo.config.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "plugins": [ - { - "name": "preset-default", - "params": { - "overrides": { - "removeViewBox": false - } - } - }, - "prefixIds" - ] -} diff --git a/tsconfig.app.json b/tsconfig.app.json deleted file mode 100644 index cbcdbd829..000000000 --- a/tsconfig.app.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2023", - "useDefineForClassFields": true, - "lib": [ - "ESNext", - "DOM", - "DOM.Iterable" - ], - "module": "ESNext", - "skipLibCheck": true, - "allowSyntheticDefaultImports": true, - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "plugins": [ - { - "name": "typescript-eslint-language-service" - } - ], - "types": [ - "vite/client" - ] - }, - "include": [ - "src" - ], - "exclude": [ - "node_modules", - "dist", - "build" - ] -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index e14af76ce..000000000 --- a/tsconfig.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": "./", - "target": "ES2022", - "types": [ - "vite/client" - ], - "useDefineForClassFields": true, - "lib": [ - "EsNext", - "DOM", - "DOM.Iterable" - ], - "module": "ESNext", - "skipLibCheck": true, - "allowSyntheticDefaultImports": true, - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "plugins": [ - { - "name": "typescript-eslint-language-service" - } - ] - }, - "include": [ - "src" - ], - "exclude": [ - "node_modules", - "dist", - "build" - ], - "references": [ - { - "path": "./tsconfig.node.json" - } - ] -} diff --git a/tsconfig.node.json b/tsconfig.node.json deleted file mode 100644 index 42872c59f..000000000 --- a/tsconfig.node.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true - }, - "include": ["vite.config.ts"] -} diff --git a/tsconfig.node.tsbuildinfo b/tsconfig.node.tsbuildinfo deleted file mode 100644 index ca3935e3e..000000000 --- a/tsconfig.node.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"fileNames":["./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es5.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.dom.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/globals.typedarray.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/buffer.buffer.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/utility.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/header.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/readable.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/fetch.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/formdata.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/connector.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/client-stats.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/client.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/errors.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/dispatcher.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/global-dispatcher.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/global-origin.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/pool-stats.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/pool.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/handlers.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/balanced-pool.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/h2c-client.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/agent.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/mock-interceptor.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/mock-call-history.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/mock-agent.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/mock-client.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/mock-pool.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/mock-errors.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/proxy-agent.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/retry-handler.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/retry-agent.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/api.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/cache-interceptor.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/interceptors.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/util.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/cookies.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/patch.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/websocket.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/eventsource.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/content-type.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/cache.d.ts","./node_modules/.pnpm/undici-types@7.10.0/node_modules/undici-types/index.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/globals.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/assert.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/assert/strict.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/async_hooks.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/buffer.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/child_process.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/cluster.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/console.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/constants.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/crypto.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/dgram.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/dns.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/dns/promises.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/domain.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/dom-events.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/events.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/fs.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/fs/promises.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/http.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/http2.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/https.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/inspector.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/module.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/net.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/os.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/path.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/perf_hooks.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/process.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/punycode.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/querystring.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/readline.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/readline/promises.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/repl.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/sea.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/sqlite.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/stream.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/stream/promises.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/stream/consumers.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/stream/web.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/string_decoder.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/test.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/timers.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/timers/promises.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/tls.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/trace_events.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/tty.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/url.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/util.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/v8.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/vm.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/wasi.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/worker_threads.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/zlib.d.ts","./node_modules/.pnpm/@types+node@24.2.1/node_modules/@types/node/index.d.ts","./node_modules/.pnpm/@swc+types@0.1.24/node_modules/@swc/types/assumptions.d.ts","./node_modules/.pnpm/@swc+types@0.1.24/node_modules/@swc/types/index.d.ts","./node_modules/.pnpm/@swc+core@1.13.3/node_modules/@swc/core/binding.d.ts","./node_modules/.pnpm/@swc+core@1.13.3/node_modules/@swc/core/spack.d.ts","./node_modules/.pnpm/@swc+core@1.13.3/node_modules/@swc/core/index.d.ts","./node_modules/.pnpm/vite@7.1.1_@types+node@24.2.1_sass@1.70.0/node_modules/vite/types/hmrpayload.d.ts","./node_modules/.pnpm/vite@7.1.1_@types+node@24.2.1_sass@1.70.0/node_modules/vite/dist/node/modulerunnertransport-bwuzbvlx.d.ts","./node_modules/.pnpm/vite@7.1.1_@types+node@24.2.1_sass@1.70.0/node_modules/vite/types/customevent.d.ts","./node_modules/.pnpm/@types+estree@1.0.8/node_modules/@types/estree/index.d.ts","./node_modules/.pnpm/rollup@4.46.2/node_modules/rollup/dist/rollup.d.ts","./node_modules/.pnpm/rollup@4.46.2/node_modules/rollup/dist/parseast.d.ts","./node_modules/.pnpm/vite@7.1.1_@types+node@24.2.1_sass@1.70.0/node_modules/vite/types/hot.d.ts","./node_modules/.pnpm/vite@7.1.1_@types+node@24.2.1_sass@1.70.0/node_modules/vite/dist/node/module-runner.d.ts","./node_modules/.pnpm/esbuild@0.25.8/node_modules/esbuild/lib/main.d.ts","./node_modules/.pnpm/vite@7.1.1_@types+node@24.2.1_sass@1.70.0/node_modules/vite/types/internal/terseroptions.d.ts","./node_modules/.pnpm/source-map-js@1.2.1/node_modules/source-map-js/source-map.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/previous-map.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/input.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/declaration.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/root.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/warning.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/lazy-result.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/no-work-result.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/processor.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/result.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/document.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/rule.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/node.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/comment.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/container.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/at-rule.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/list.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/postcss.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/postcss.d.mts","./node_modules/.pnpm/vite@7.1.1_@types+node@24.2.1_sass@1.70.0/node_modules/vite/types/internal/lightningcssoptions.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/util/promise_or.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/importer.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/logger/source_location.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/logger/source_span.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/logger/index.d.ts","./node_modules/.pnpm/immutable@4.3.7/node_modules/immutable/dist/immutable.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/value/boolean.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/value/calculation.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/value/color.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/value/function.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/value/list.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/value/map.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/value/mixin.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/value/number.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/value/string.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/value/argument_list.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/value/index.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/options.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/compile.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/exception.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/legacy/exception.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/legacy/plugin_this.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/legacy/function.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/legacy/importer.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/legacy/options.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/legacy/render.d.ts","./node_modules/.pnpm/sass@1.70.0/node_modules/sass/types/index.d.ts","./node_modules/.pnpm/vite@7.1.1_@types+node@24.2.1_sass@1.70.0/node_modules/vite/types/internal/csspreprocessoroptions.d.ts","./node_modules/.pnpm/vite@7.1.1_@types+node@24.2.1_sass@1.70.0/node_modules/vite/types/importglob.d.ts","./node_modules/.pnpm/vite@7.1.1_@types+node@24.2.1_sass@1.70.0/node_modules/vite/types/metadata.d.ts","./node_modules/.pnpm/vite@7.1.1_@types+node@24.2.1_sass@1.70.0/node_modules/vite/dist/node/index.d.ts","./node_modules/.pnpm/@vitejs+plugin-react-swc@3.11.0_vite@7.1.1_@types+node@24.2.1_sass@1.70.0_/node_modules/@vitejs/plugin-react-swc/index.d.ts","./node_modules/.pnpm/browserslist@4.25.2/node_modules/browserslist/index.d.ts","./node_modules/.pnpm/autoprefixer@10.4.21_postcss@8.5.6/node_modules/autoprefixer/lib/autoprefixer.d.ts","./vite.config.ts","./node_modules/.pnpm/@types+byte-size@8.1.2/node_modules/@types/byte-size/index.d.ts","./node_modules/.pnpm/@types+file-saver@2.0.7/node_modules/@types/file-saver/index.d.ts","./node_modules/.pnpm/@types+lodash@4.17.20/node_modules/@types/lodash/common/common.d.ts","./node_modules/.pnpm/@types+lodash@4.17.20/node_modules/@types/lodash/common/array.d.ts","./node_modules/.pnpm/@types+lodash@4.17.20/node_modules/@types/lodash/common/collection.d.ts","./node_modules/.pnpm/@types+lodash@4.17.20/node_modules/@types/lodash/common/date.d.ts","./node_modules/.pnpm/@types+lodash@4.17.20/node_modules/@types/lodash/common/function.d.ts","./node_modules/.pnpm/@types+lodash@4.17.20/node_modules/@types/lodash/common/lang.d.ts","./node_modules/.pnpm/@types+lodash@4.17.20/node_modules/@types/lodash/common/math.d.ts","./node_modules/.pnpm/@types+lodash@4.17.20/node_modules/@types/lodash/common/number.d.ts","./node_modules/.pnpm/@types+lodash@4.17.20/node_modules/@types/lodash/common/object.d.ts","./node_modules/.pnpm/@types+lodash@4.17.20/node_modules/@types/lodash/common/seq.d.ts","./node_modules/.pnpm/@types+lodash@4.17.20/node_modules/@types/lodash/common/string.d.ts","./node_modules/.pnpm/@types+lodash@4.17.20/node_modules/@types/lodash/common/util.d.ts","./node_modules/.pnpm/@types+lodash@4.17.20/node_modules/@types/lodash/index.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/add.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/after.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/ary.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/assign.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/assignin.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/assigninwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/assignwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/at.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/attempt.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/before.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/bind.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/bindall.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/bindkey.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/camelcase.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/capitalize.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/castarray.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/ceil.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/chain.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/chunk.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/clamp.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/clone.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/clonedeep.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/clonedeepwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/clonewith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/compact.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/concat.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/cond.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/conforms.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/conformsto.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/constant.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/countby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/create.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/curry.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/curryright.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/debounce.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/deburr.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/defaults.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/defaultsdeep.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/defaultto.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/defer.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/delay.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/difference.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/differenceby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/differencewith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/divide.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/drop.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/dropright.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/droprightwhile.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/dropwhile.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/each.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/eachright.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/endswith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/entries.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/entriesin.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/eq.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/escape.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/escaperegexp.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/every.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/extend.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/extendwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/fill.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/filter.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/find.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/findindex.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/findkey.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/findlast.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/findlastindex.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/findlastkey.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/first.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/flatmap.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/flatmapdeep.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/flatmapdepth.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/flatten.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/flattendeep.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/flattendepth.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/flip.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/floor.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/flow.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/flowright.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/foreach.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/foreachright.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/forin.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/forinright.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/forown.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/forownright.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/frompairs.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/functions.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/functionsin.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/get.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/groupby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/gt.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/gte.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/has.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/hasin.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/head.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/identity.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/includes.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/indexof.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/initial.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/inrange.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/intersection.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/intersectionby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/intersectionwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/invert.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/invertby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/invoke.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/invokemap.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isarguments.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isarray.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isarraybuffer.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isarraylike.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isarraylikeobject.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isboolean.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isbuffer.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isdate.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/iselement.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isempty.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isequal.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isequalwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/iserror.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isfinite.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isfunction.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isinteger.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/islength.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/ismap.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/ismatch.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/ismatchwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isnan.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isnative.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isnil.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isnull.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isnumber.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isobject.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isobjectlike.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isplainobject.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isregexp.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/issafeinteger.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isset.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isstring.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/issymbol.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/istypedarray.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isundefined.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isweakmap.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/isweakset.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/iteratee.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/join.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/kebabcase.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/keyby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/keys.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/keysin.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/last.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/lastindexof.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/lowercase.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/lowerfirst.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/lt.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/lte.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/map.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/mapkeys.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/mapvalues.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/matches.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/matchesproperty.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/max.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/maxby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/mean.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/meanby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/memoize.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/merge.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/mergewith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/method.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/methodof.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/min.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/minby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/mixin.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/multiply.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/negate.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/noop.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/now.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/nth.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/ntharg.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/omit.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/omitby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/once.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/orderby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/over.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/overargs.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/overevery.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/oversome.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/pad.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/padend.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/padstart.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/parseint.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/partial.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/partialright.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/partition.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/pick.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/pickby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/property.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/propertyof.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/pull.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/pullall.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/pullallby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/pullallwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/pullat.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/random.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/range.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/rangeright.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/rearg.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/reduce.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/reduceright.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/reject.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/remove.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/repeat.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/replace.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/rest.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/result.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/reverse.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/round.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/sample.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/samplesize.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/set.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/setwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/shuffle.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/size.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/slice.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/snakecase.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/some.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/sortby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/sortedindex.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/sortedindexby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/sortedindexof.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/sortedlastindex.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/sortedlastindexby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/sortedlastindexof.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/sorteduniq.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/sorteduniqby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/split.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/spread.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/startcase.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/startswith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/stubarray.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/stubfalse.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/stubobject.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/stubstring.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/stubtrue.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/subtract.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/sum.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/sumby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/tail.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/take.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/takeright.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/takerightwhile.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/takewhile.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/tap.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/template.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/templatesettings.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/throttle.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/thru.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/times.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/toarray.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/tofinite.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/tointeger.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/tolength.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/tolower.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/tonumber.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/topairs.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/topairsin.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/topath.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/toplainobject.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/tosafeinteger.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/tostring.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/toupper.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/transform.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/trim.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/trimend.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/trimstart.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/truncate.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/unary.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/unescape.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/union.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/unionby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/unionwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/uniq.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/uniqby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/uniqueid.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/uniqwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/unset.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/unzip.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/unzipwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/update.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/updatewith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/uppercase.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/upperfirst.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/values.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/valuesin.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/without.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/words.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/wrap.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/xor.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/xorby.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/xorwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/zip.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/zipobject.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/zipobjectdeep.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/zipwith.d.ts","./node_modules/.pnpm/@types+lodash-es@4.17.12/node_modules/@types/lodash-es/index.d.ts","./node_modules/.pnpm/@types+react@18.3.23/node_modules/@types/react/global.d.ts","./node_modules/.pnpm/csstype@3.1.3/node_modules/csstype/index.d.ts","./node_modules/.pnpm/@types+prop-types@15.7.15/node_modules/@types/prop-types/index.d.ts","./node_modules/.pnpm/@types+react@18.3.23/node_modules/@types/react/index.d.ts","./node_modules/.pnpm/@types+react-dom@18.3.7_@types+react@18.3.23/node_modules/@types/react-dom/index.d.ts"],"fileIdsList":[[54,99],[54,99,149,151,152,153],[54,99,151],[54,99,150],[54,99,235],[54,99,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539],[54,99,223,225,226,227,228,229,230,231,232,233,234,235],[54,99,223,224,226,227,228,229,230,231,232,233,234,235],[54,99,224,225,226,227,228,229,230,231,232,233,234,235],[54,99,223,224,225,227,228,229,230,231,232,233,234,235],[54,99,223,224,225,226,228,229,230,231,232,233,234,235],[54,99,223,224,225,226,227,229,230,231,232,233,234,235],[54,99,223,224,225,226,227,228,230,231,232,233,234,235],[54,99,223,224,225,226,227,228,229,231,232,233,234,235],[54,99,223,224,225,226,227,228,229,230,232,233,234,235],[54,99,223,224,225,226,227,228,229,230,231,233,234,235],[54,99,223,224,225,226,227,228,229,230,231,232,234,235],[54,99,223,224,225,226,227,228,229,230,231,232,233,235],[54,99,223,224,225,226,227,228,229,230,231,232,233,234],[54,96,99],[54,98,99],[99],[54,99,104,134],[54,99,100,105,111,112,119,131,142],[54,99,100,101,111,119],[54,99,102,143],[54,99,103,104,112,120],[54,99,104,131,139],[54,99,105,107,111,119],[54,98,99,106],[54,99,107,108],[54,99,109,111],[54,98,99,111],[54,99,111,112,113,131,142],[54,99,111,112,113,126,131,134],[54,94,99],[54,94,99,107,111,114,119,131,142],[54,99,111,112,114,115,119,131,139,142],[54,99,114,116,131,139,142],[52,53,54,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148],[54,99,111,117],[54,99,118,142],[54,99,107,111,119,131],[54,99,120],[54,99,121],[54,98,99,122],[54,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148],[54,99,124],[54,99,125],[54,99,111,126,127],[54,99,126,128,143,145],[54,99,111,131,132,134],[54,99,133,134],[54,99,131,132],[54,99,134],[54,99,135],[54,96,99,131,136],[54,99,111,137,138],[54,99,137,138],[54,99,104,119,131,139],[54,99,140],[54,99,119,141],[54,99,114,125,142],[54,99,104,143],[54,99,131,144],[54,99,118,145],[54,99,146],[54,99,111,113,122,131,134,142,144,145,147],[54,99,131,148],[54,99,544],[54,99,541,542,543],[54,99,154,216],[54,99,184,218],[54,99,180],[54,99,178,180],[54,99,169,177,178,179,181,183],[54,99,167],[54,99,170,175,180,183],[54,99,166,183],[54,99,170,171,174,175,176,183],[54,99,170,171,172,174,175,183],[54,99,167,168,169,170,171,175,176,177,179,180,181,183],[54,99,183],[54,99,165,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182],[54,99,165,183],[54,99,170,172,173,175,176,183],[54,99,174,183],[54,99,175,176,180,183],[54,99,168,178],[54,99,159,215,216],[54,99,158,159],[54,99,165,203],[54,99,190],[54,99,186,203],[54,99,186,187,190,202,203,204,205,206,207,208,209,210,211],[54,99,207],[54,99,190,208,209],[54,99,206,210],[54,99,188,189],[54,99,188],[54,99,186,187,190,202],[54,99,191,196,202],[54,99,202],[54,99,191,202],[54,99,191,192,193,194,195,196,197,198,199,200,201],[54,61,64,67,68,99,142],[54,64,99,131,142],[54,64,68,99,142],[54,99,131],[54,58,99],[54,62,99],[54,60,61,64,99,142],[54,99,119,139],[54,99,149],[54,58,99,149],[54,60,64,99,119,142],[54,55,56,57,59,63,99,111,131,142],[54,64,72,99],[54,56,62,99],[54,64,88,89,99],[54,56,59,64,99,134,142,149],[54,64,99],[54,60,64,99,142],[54,55,99],[54,58,59,60,62,63,64,65,66,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,89,90,91,92,93,99],[54,64,81,84,99,107],[54,64,72,73,74,99],[54,62,64,73,75,99],[54,63,99],[54,56,58,64,99],[54,64,68,73,75,99],[54,68,99],[54,62,64,67,99,142],[54,56,60,64,72,99],[54,64,81,99],[54,58,64,88,99,134,147,149],[54,99,111,112,114,115,116,119,131,139,142,148,149,155,156,157,159,160,162,163,164,184,185,213,214,215,216],[54,99,155,156,157,161],[54,99,155],[54,99,157],[54,99,212],[54,99,159,216],[54,99,121,216,217,219]],"fileInfos":[{"version":"a7297ff837fcdf174a9524925966429eb8e5feecc2cc55cc06574e6b092c1eaa","impliedFormat":1},{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0671b50bb99cc7ad46e9c68fa0e7f15ba4bc898b59c31a17ea4611fab5095da","affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"e525f9e67f5ddba7b5548430211cae2479070b70ef1fd93550c96c10529457bd","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4bc0794175abedf989547e628949888c1085b1efcd93fc482bccd77ee27f8b7c","impliedFormat":1},{"version":"3c8e93af4d6ce21eb4c8d005ad6dc02e7b5e6781f429d52a35290210f495a674","impliedFormat":1},{"version":"2c9875466123715464539bfd69bcaccb8ff6f3e217809428e0d7bd6323416d01","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"6c8e442ba33b07892169a14f7757321e49ab0f1032d676d321a1fdab8a67d40c","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"1cd673d367293fc5cb31cd7bf03d598eb368e4f31f39cf2b908abbaf120ab85a","impliedFormat":1},{"version":"af13e99445f37022c730bfcafcdc1761e9382ce1ea02afb678e3130b01ce5676","impliedFormat":1},{"version":"3825bf209f1662dfd039010a27747b73d0ef379f79970b1d05601ec8e8a4249f","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"da52342062e70c77213e45107921100ba9f9b3a30dd019444cf349e5fb3470c4","impliedFormat":1},{"version":"e9ace91946385d29192766bf783b8460c7dbcbfc63284aa3c9cae6de5155c8bc","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"1e30c045732e7db8f7a82cf90b516ebe693d2f499ce2250a977ec0d12e44a529","impliedFormat":1},{"version":"84b736594d8760f43400202859cda55607663090a43445a078963031d47e25e7","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"78b29846349d4dfdd88bd6650cc5d2baaa67f2e89dc8a80c8e26ef7995386583","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"e38d4fdf79e1eadd92ed7844c331dbaa40f29f21541cfee4e1acff4db09cda33","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"7c10a32ae6f3962672e6869ee2c794e8055d8225ef35c91c0228e354b4e5d2d3","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"99f569b42ea7e7c5fe404b2848c0893f3e1a56e0547c1cd0f74d5dbb9a9de27e","impliedFormat":1},{"version":"f4b4faedc57701ae727d78ba4a83e466a6e3bdcbe40efbf913b17e860642897c","affectsGlobalScope":true,"impliedFormat":1},{"version":"bbcfd9cd76d92c3ee70475270156755346c9086391e1b9cb643d072e0cf576b8","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"003ec918ec442c3a4db2c36dc0c9c766977ea1c8bcc1ca7c2085868727c3d3f6","affectsGlobalScope":true,"impliedFormat":1},{"version":"938f94db8400d0b479626b9006245a833d50ce8337f391085fad4af540279567","impliedFormat":1},{"version":"c4e8e8031808b158cfb5ac5c4b38d4a26659aec4b57b6a7e2ba0a141439c208c","impliedFormat":1},{"version":"2c91d8366ff2506296191c26fd97cc1990bab3ee22576275d28b654a21261a44","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"db39d9a16e4ddcd8a8f2b7b3292b362cc5392f92ad7ccd76f00bccf6838ac7de","affectsGlobalScope":true,"impliedFormat":1},{"version":"289e9894a4668c61b5ffed09e196c1f0c2f87ca81efcaebdf6357cfb198dac14","impliedFormat":1},{"version":"25a1105595236f09f5bce42398be9f9ededc8d538c258579ab662d509aa3b98e","impliedFormat":1},{"version":"5078cd62dbdf91ae8b1dc90b1384dec71a9c0932d62bdafb1a811d2a8e26bef2","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"62f572306e0b173cc5dfc4c583471151f16ef3779cf27ab96922c92ec82a3bc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"067bdd82d9768baddbdc8df51d85f7b96387c47176bf7f895d2e21e2b6b2f1f4","impliedFormat":1},{"version":"42d30e7d04915facc3ded22b4127c9f517973b4c2b1326e56c10ff70daf6800a","impliedFormat":1},{"version":"bd8b644c5861b94926687618ec2c9e60ad054d334d6b7eb4517f23f53cb11f91","impliedFormat":1},{"version":"bcbabfaca3f6b8a76cb2739e57710daf70ab5c9479ab70f5351c9b4932abf6bd","impliedFormat":1},{"version":"77fced47f495f4ff29bb49c52c605c5e73cd9b47d50080133783032769a9d8a6","impliedFormat":1},{"version":"55f370475031b3d36af8dd47fb3934dff02e0f1330d13f1977c9e676af5c2e70","impliedFormat":1},{"version":"c54f0b30a787b3df16280f4675bd3d9d17bf983ae3cd40087409476bc50b922d","affectsGlobalScope":true,"impliedFormat":1},{"version":"0f5cda0282e1d18198e2887387eb2f026372ebc4e11c4e4516fef8a19ee4d514","impliedFormat":1},{"version":"e99b0e71f07128fc32583e88ccd509a1aaa9524c290efb2f48c22f9bf8ba83b1","impliedFormat":1},{"version":"76957a6d92b94b9e2852cf527fea32ad2dc0ef50f67fe2b14bd027c9ceef2d86","impliedFormat":1},{"version":"5e9f8c1e042b0f598a9be018fc8c3cb670fe579e9f2e18e3388b63327544fe16","affectsGlobalScope":true,"impliedFormat":1},{"version":"a8a99a5e6ed33c4a951b67cc1fd5b64fd6ad719f5747845c165ca12f6c21ba16","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"70b57b5529051497e9f6482b76d91c0dcbb103d9ead8a0549f5bab8f65e5d031","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"1013eb2e2547ad8c100aca52ef9df8c3f209edee32bb387121bb3227f7c00088","impliedFormat":1},{"version":"e07c573ac1971ea89e2c56ff5fd096f6f7bba2e6dbcd5681d39257c8d954d4a8","impliedFormat":1},{"version":"363eedb495912790e867da6ff96e81bf792c8cfe386321e8163b71823a35719a","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"dba28a419aec76ed864ef43e5f577a5c99a010c32e5949fe4e17a4d57c58dd11","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea713aa14a670b1ea0fbaaca4fd204e645f71ca7653a834a8ec07ee889c45de6","impliedFormat":1},{"version":"1e080418e53f9b7a05db81ab517c4e1d71b7194ee26ddd54016bcef3ac474bd4","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"982efeb2573605d4e6d5df4dc7e40846bda8b9e678e058fc99522ab6165c479e","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"3b63610eaabadf26aadf51a563e4b2a8bf56eeaab1094f2a2b21509008eaef0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"2d5d50cd0667d9710d4d2f6e077cc4e0f9dc75e106cccaea59999b36873c5a0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"784490137935e1e38c49b9289110e74a1622baf8a8907888dcbe9e476d7c5e44","impliedFormat":1},{"version":"42180b657831d1b8fead051698618b31da623fb71ff37f002cb9d932cfa775f1","impliedFormat":1},{"version":"4f98d6fb4fe7cbeaa04635c6eaa119d966285d4d39f0eb55b2654187b0b27446","impliedFormat":1},{"version":"f8529fe0645fd9af7441191a4961497cc7638f75a777a56248eac6a079bb275d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4445f6ce6289c5b2220398138da23752fd84152c5c95bb8b58dedefc1758c036","impliedFormat":1},{"version":"a51f786b9f3c297668f8f322a6c58f85d84948ef69ade32069d5d63ec917221c","impliedFormat":1},{"version":"7a0b3e902cabef41f2d37e5eb4dab644c5b8470594318810434df7cc547b0cf8","impliedFormat":1},{"version":"e32c3ff360bf74a4257a289b9ed4f67196e7b66233942752b13781b23499c0db","impliedFormat":1},{"version":"d7d1b49e0462eb979fd506c9667f1d4afbb0d39940ec9da5ef4473d1b952b0b6","impliedFormat":1},{"version":"136ac2fb228b2c64ad2d039eb4de311212505a20a91b9ba632bd6cfdc3b4126f","impliedFormat":1},{"version":"7d98e7acbe7ffe68b699bf7656af842f5d5efecd1df67800b92ed71ed60f2287","impliedFormat":1},{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"5c31dea483b64cbb341ea8a7073c457720d1574f87837e71cccb70ce91196211","impliedFormat":99},{"version":"11443a1dcfaaa404c68d53368b5b818712b95dd19f188cab1669c39bee8b84b3","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"ffb518fc55181aefd066c690dbc0f8fa6a1533c8ddac595469c8c5f7fda2d756","affectsGlobalScope":true,"impliedFormat":1},{"version":"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"217d7b67dacf8438f0be82b846f933981a1e6527e63c082c56adaf4782d62ab4","impliedFormat":99},{"version":"161c8e0690c46021506e32fda85956d785b70f309ae97011fd27374c065cac9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","impliedFormat":1},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"8885cf05f3e2abf117590bbb951dcf6359e3e5ac462af1c901cfd24c6a6472e2","impliedFormat":1},{"version":"333caa2bfff7f06017f114de738050dd99a765c7eb16571c6d25a38c0d5365dc","impliedFormat":1},{"version":"e61df3640a38d535fd4bc9f4a53aef17c296b58dc4b6394fd576b808dd2fe5e6","impliedFormat":1},{"version":"459920181700cec8cbdf2a5faca127f3f17fd8dd9d9e577ed3f5f3af5d12a2e4","impliedFormat":1},{"version":"4719c209b9c00b579553859407a7e5dcfaa1c472994bd62aa5dd3cc0757eb077","impliedFormat":1},{"version":"7ec359bbc29b69d4063fe7dad0baaf35f1856f914db16b3f4f6e3e1bca4099fa","impliedFormat":1},{"version":"70790a7f0040993ca66ab8a07a059a0f8256e7bb57d968ae945f696cbff4ac7a","impliedFormat":1},{"version":"d1b9a81e99a0050ca7f2d98d7eedc6cda768f0eb9fa90b602e7107433e64c04c","impliedFormat":1},{"version":"a022503e75d6953d0e82c2c564508a5c7f8556fad5d7f971372d2d40479e4034","impliedFormat":1},{"version":"b215c4f0096f108020f666ffcc1f072c81e9f2f95464e894a5d5f34c5ea2a8b1","impliedFormat":1},{"version":"644491cde678bd462bb922c1d0cfab8f17d626b195ccb7f008612dc31f445d2d","impliedFormat":1},{"version":"dfe54dab1fa4961a6bcfba68c4ca955f8b5bbeb5f2ab3c915aa7adaa2eabc03a","impliedFormat":1},{"version":"1251d53755b03cde02466064260bb88fd83c30006a46395b7d9167340bc59b73","impliedFormat":1},{"version":"47865c5e695a382a916b1eedda1b6523145426e48a2eae4647e96b3b5e52024f","impliedFormat":1},{"version":"4cdf27e29feae6c7826cdd5c91751cc35559125e8304f9e7aed8faef97dcf572","impliedFormat":1},{"version":"331b8f71bfae1df25d564f5ea9ee65a0d847c4a94baa45925b6f38c55c7039bf","impliedFormat":1},{"version":"2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","impliedFormat":1},{"version":"0146fd6262c3fd3da51cb0254bb6b9a4e42931eb2f56329edd4c199cb9aaf804","impliedFormat":1},{"version":"183f480885db5caa5a8acb833c2be04f98056bdcc5fb29e969ff86e07efe57ab","impliedFormat":99},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":1},{"version":"71b110829b8f5e7653352a132544ece2b9a10e93ba1c77453187673bd46f13ee","impliedFormat":1},{"version":"a93ee856675c0eb60f270383d10eb4fa49ef9637a962661897e8565d682c1372","impliedFormat":1},{"version":"1223780c318ef42fd33ac772996335ed92d57cf7c0fc73178acab5e154971aab","impliedFormat":1},{"version":"0d04cbe88c8a25c2debd2eef03ec5674563e23ca9323fa82ede3577822653bd2","impliedFormat":1},{"version":"57c8cbb9afab16efe0f85d5508cb46b09bd3678b1d509102e6d1a61c245d303a","impliedFormat":1},{"version":"4ace083580c1b77eb8ddf4ea915cde605af1a96e426c4c04b897feef1acdb534","impliedFormat":1},{"version":"daf07c1ca8ccfb21ad958833546a4f414c418fe096dcebdbb90b02e12aa5c3a2","impliedFormat":1},{"version":"89ac5224feeb2de76fc52fc2a91c5f6448a98dbe4e8d726ecb1730fa64cd2d30","impliedFormat":1},{"version":"e259db66999453467359d0ea0a125866edaa851c580a5e840f4cac96ce5b035a","impliedFormat":1},{"version":"acf00cfabe8c4de18bea655754ea39c4d04140257556bbf283255b695d00e36f","impliedFormat":1},{"version":"39b70d5f131fcfdeba404ee63aba25f26d8376a73bacd8275fb5a9f06219ac77","impliedFormat":1},{"version":"cdae26c737cf4534eeec210e42eab2d5f0c3855240d8dde3be4aee9194e4e781","impliedFormat":1},{"version":"5aa0c50083d0d9a423a46afaef78c7f42420759cfa038ad40e8b9e6cafc38831","impliedFormat":1},{"version":"10d6a49a99a593678ba4ea6073d53d005adfc383df24a9e93f86bf47de6ed857","impliedFormat":1},{"version":"1b7ea32849a7982047c2e5d372300a4c92338683864c9ab0f5bbd1acadae83a3","impliedFormat":1},{"version":"224083e6fcec1d300229da3d1dafc678c642863996cbfed7290df20954435a55","impliedFormat":1},{"version":"51e0c0d376d59425f8a2c5d775c34cc3eb87da4a423e12ec097fc40432aa8c16","impliedFormat":1},{"version":"522a2ab83e7c08e8bde2d3f2b689529aa3919eb2b544232d8f044803ddadd7b3","impliedFormat":1},{"version":"ca055d26105248f745ea6259b4c498ebeed18c9b772e7f2b3a16f50226ff9078","impliedFormat":1},{"version":"ea6b2badb951d6dfa24bb7d7eb733327e5f9a15fc994d6dc1c54b2c7a83b6a0b","impliedFormat":1},{"version":"03fdf8dba650d830388b9985750d770dd435f95634717f41cea814863a9ac98b","impliedFormat":1},{"version":"6fd08e3ef1568cd0dc735c9015f6765e25143a4a0331d004a29c51b50eec402a","impliedFormat":1},{"version":"2e988cd4d24edac4936449630581c79686c8adac10357eb0cdb410c24f47c7f0","impliedFormat":1},{"version":"b813f62a37886ed986b0f6f8c5bf323b3fcae32c1952b71d75741e74ea9353cf","impliedFormat":1},{"version":"7e5e80eababa97e96a0d4e60cd26c096c5d235b78b584faf2929feb286195170","impliedFormat":1},{"version":"83fe1053701101ac6d25364696fea50d2ceb2f81d1456bc11e682a20aaeac52e","impliedFormat":1},{"version":"10a1a3731b2f8b224b4d7a4d0c7340d32fbd034679fa562f55141b668a326386","impliedFormat":1},{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59f8dc89b9e724a6a667f52cdf4b90b6816ae6c9842ce176d38fcc973669009e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e4af494f7a14b226bbe732e9c130d8811f8c7025911d7c58dd97121a85519715","impliedFormat":1},{"version":"a5d643092d2f16cb861872357b12ab844f33fc1181f7c5aed447b3424b4f5668","impliedFormat":99},{"version":"064569cccad7d2ee3b9ec0e306919ca0c1bab8169de19a0784adaf798125fd49","impliedFormat":99},{"version":"88623aa2028777d8f073c61590feb7f3abde4513918329d868c8c0cb38d2d000","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f21bd6e22ec4af7e666f033455090f6cc26a692c1524acb113526a38f07d48e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fe3e24828f33dd7ef2fa2a169109cf97ac06515d8d2005f3eab7353863631ebb","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"},{"version":"596d8f74336c5aa7955e53e166bd2ca68aecca5c2ff50bc9d16579c36430ecf1","impliedFormat":1},{"version":"ba854883a418fca4343b51cb93718d481770f3b81e978bbf6378a2385264e55c","impliedFormat":1},{"version":"380b919bfa0516118edaf25b99e45f855e7bc3fd75ce4163a1cfe4a666388804","impliedFormat":1},{"version":"0b24a72109c8dd1b41f94abfe1bb296ba01b3734b8ac632db2c48ffc5dccaf01","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"b88749bdb18fc1398370e33aa72bc4f88274118f4960e61ce26605f9b33c5ba2","impliedFormat":1},{"version":"0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"cf93e7b09b66e142429611c27ba2cbf330826057e3c793e1e2861e976fae3940","impliedFormat":99},{"version":"90e727d145feb03695693fdc9f165a4dc10684713ee5f6aa81e97a6086faa0f8","impliedFormat":99},{"version":"ee2c6ec73c636c9da5ab4ce9227e5197f55a57241d66ea5828f94b69a4a09a2d","impliedFormat":99},{"version":"afaf64477630c7297e3733765046c95640ab1c63f0dfb3c624691c8445bc3b08","impliedFormat":99},{"version":"5aa03223a53ad03171988820b81a6cae9647eabcebcb987d1284799de978d8e3","impliedFormat":99},{"version":"7f50c8914983009c2b940923d891e621db624ba32968a51db46e0bf480e4e1cb","impliedFormat":99},{"version":"90fc18234b7d2e19d18ac026361aaf2f49d27c98dc30d9f01e033a9c2b01c765","impliedFormat":99},{"version":"a980e4d46239f344eb4d5442b69dcf1d46bd2acac8d908574b5a507181f7e2a1","impliedFormat":99},{"version":"bbbfa4c51cdaa6e2ef7f7be3ae199b319de6b31e3b5afa7e5a2229c14bb2568a","impliedFormat":99},{"version":"bc7bfe8f48fa3067deb3b37d4b511588b01831ba123a785ea81320fe74dd9540","impliedFormat":99},{"version":"fd60c0aaf7c52115f0e7f367d794657ac18dbb257255777406829ab65ca85746","impliedFormat":99},{"version":"15c17866d58a19f4a01a125f3f511567bd1c22235b4fd77bf90c793bf28388c3","impliedFormat":99},{"version":"51301a76264b1e1b4046f803bda44307fba403183bc274fe9e7227252d7315cb","impliedFormat":99},{"version":"ddef23e8ace6c2b2ddf8d8092d30b1dd313743f7ff47b2cbb43f36c395896008","impliedFormat":99},{"version":"9e42df47111429042b5e22561849a512ad5871668097664b8fb06a11640140ac","impliedFormat":99},{"version":"391fcc749c6f94c6c4b7f017c6a6f63296c1c9ae03fa639f99337dddb9cc33fe","impliedFormat":99},{"version":"ac4706eb1fb167b19f336a93989763ab175cd7cc6227b0dcbfa6a7824c6ba59a","impliedFormat":99},{"version":"633220dc1e1a5d0ccf11d3c3e8cadc9124daf80fef468f2ff8186a2775229de3","impliedFormat":99},{"version":"6de22ad73e332e513454f0292275155d6cb77f2f695b73f0744928c4ebb3a128","impliedFormat":99},{"version":"ebe0e3c77f5114b656d857213698fade968cff1b3a681d1868f3cfdd09d63b75","impliedFormat":99},{"version":"22c27a87488a0625657b52b9750122814c2f5582cac971484cda0dcd7a46dc3b","impliedFormat":99},{"version":"7e7a817c8ec57035b2b74df8d5dbcc376a4a60ad870b27ec35463536158e1156","impliedFormat":99},{"version":"0e2061f86ca739f34feae42fd7cce27cc171788d251a587215b33eaec456e786","impliedFormat":99},{"version":"91659b2b090cadffdb593736210910508fc5b77046d4ce180b52580b14b075ec","impliedFormat":99},{"version":"d0f6c657c45faaf576ca1a1dc64484534a8dc74ada36fd57008edc1aab65a02b","impliedFormat":99},{"version":"ce0c52b1ebc023b71d3c1fe974804a2422cf1d85d4af74bb1bced36ff3bff8b5","impliedFormat":99},{"version":"9c6acb4a388887f9a5552eda68987ee5d607152163d72f123193a984c48157c9","impliedFormat":99},{"version":"90d0a9968cbb7048015736299f96a0cceb01cf583fd2e9a9edbc632ac4c81b01","impliedFormat":99},{"version":"49abec0571c941ab6f095885a76828d50498511c03bb326eec62a852e58000c5","impliedFormat":99},{"version":"8eeb4a4ff94460051173d561749539bca870422a6400108903af2fb7a1ffe3d7","impliedFormat":99},{"version":"49e39b284b87452fed1e27ac0748ba698f5a27debe05084bc5066b3ecf4ed762","impliedFormat":99},{"version":"59dcf835762f8df90fba5a3f8ba87941467604041cf127fb456543c793b71456","impliedFormat":99},{"version":"33e0c4c683dcaeb66bedf5bb6cc35798d00ac58d7f3bc82aadb50fa475781d60","impliedFormat":99},{"version":"605839abb6d150b0d83ed3712e1b3ffbeb309e382770e7754085d36bc2d84a4c","impliedFormat":99},{"version":"a862dcb740371257e3dae1ab379b0859edcb5119484f8359a5e6fb405db9e12e","impliedFormat":99},{"version":"0f0a16a0e8037c17e28f537028215e87db047eba52281bd33484d5395402f3c1","impliedFormat":99},{"version":"cf533aed4c455b526ddccbb10dae7cc77e9269c3d7862f9e5cedbd4f5c92e05e","impliedFormat":99},{"version":"f8a60ca31702a0209ef217f8f3b4b32f498813927df2304787ac968c78d8560d","impliedFormat":99},{"version":"530192961885d3ddad87bf9c4390e12689fa29ff515df57f17a57c9125fc77c3","impliedFormat":99},{"version":"165ba9e775dd769749e2177c383d24578e3b212e4774b0a72ad0f6faee103b68","impliedFormat":99},{"version":"61448f238fdfa94e5ccce1f43a7cced5e548b1ea2d957bec5259a6e719378381","impliedFormat":99},{"version":"69fa523e48131ced0a52ab1af36c3a922c5fd7a25e474d82117329fe051f5b85","impliedFormat":99},{"version":"fa10b79cd06f5dd03435e184fb05cc5f0d02713bfb4ee9d343db527501be334c","impliedFormat":99},{"version":"c6fb591e363ee4dea2b102bb721c0921485459df23a2d2171af8354cacef4bce","impliedFormat":99},{"version":"ea7e1f1097c2e61ed6e56fa04a9d7beae9d276d87ac6edb0cd39a3ee649cddfe","impliedFormat":99},{"version":"e8cf2659d87462aae9c7647e2a256ac7dcaf2a565a9681bfb49328a8a52861e8","impliedFormat":99},{"version":"7e374cb98b705d35369b3c15444ef2ff5ff983bd2fbb77a287f7e3240abf208c","impliedFormat":99},{"version":"ca75ba1519f9a426b8c512046ebbad58231d8627678d054008c93c51bc0f3fa5","impliedFormat":99},{"version":"ff63760147d7a60dcfc4ac16e40aa2696d016b9ffe27e296b43655dfa869d66b","impliedFormat":99},{"version":"4d434123b16f46b290982907a4d24675442eb651ca95a5e98e4c274be16f1220","impliedFormat":99},{"version":"57263d6ba38046e85f499f3c0ab518cfaf0a5f5d4f53bdae896d045209ab4aff","impliedFormat":99},{"version":"d3a535f2cd5d17f12b1abf0b19a64e816b90c8c10a030b58f308c0f7f2acfe2c","impliedFormat":99},{"version":"be26d49bb713c13bd737d00ae8a61aa394f0b76bc2d5a1c93c74f59402eb8db3","impliedFormat":99},{"version":"c7012003ac0c9e6c9d3a6418128ddebf6219d904095180d4502b19c42f46a186","impliedFormat":99},{"version":"d58c55750756bcf73f474344e6b4a9376e5381e4ba7d834dc352264b491423b6","impliedFormat":99},{"version":"01e2aabfabe22b4bf6d715fc54d72d32fa860a3bd1faa8974e0d672c4b565dfe","impliedFormat":99},{"version":"ba2c489bb2566c16d28f0500b3d98013917e471c40a4417c03991460cb248e88","impliedFormat":99},{"version":"39f94b619f0844c454a6f912e5d6868d0beb32752587b134c3c858b10ecd7056","impliedFormat":99},{"version":"0d2d8b0477b1cf16b34088e786e9745c3e8145bc8eea5919b700ad054e70a095","impliedFormat":99},{"version":"2a5e963b2b8f33a50bb516215ba54a20801cb379a8e9b1ae0b311e900dc7254c","impliedFormat":99},{"version":"d8307f62b55feeb5858529314761089746dce957d2b8fd919673a4985fa4342a","impliedFormat":99},{"version":"bf449ec80fc692b2703ad03e64ae007b3513ecd507dc2ab77f39be6f578e6f5c","impliedFormat":99},{"version":"f780213dd78998daf2511385dd51abf72905f709c839a9457b6ba2a55df57be7","impliedFormat":99},{"version":"2b7843e8a9a50bdf511de24350b6d429a3ee28430f5e8af7d3599b1e9aa7057f","impliedFormat":99},{"version":"05d95be6e25b4118c2eb28667e784f0b25882f6a8486147788df675c85391ab7","impliedFormat":99},{"version":"62d2721e9f2c9197c3e2e5cffeb2f76c6412121ae155153179049890011eb785","impliedFormat":99},{"version":"ff5668fb7594c02aca5e7ba7be6c238676226e450681ca96b457f4a84898b2d9","impliedFormat":99},{"version":"59fd37ea08657fef36c55ddea879eae550ffe21d7e3a1f8699314a85a30d8ae9","impliedFormat":99},{"version":"84e23663776e080e18b25052eb3459b1a0486b5b19f674d59b96347c0cb7312a","impliedFormat":99},{"version":"43e5934c7355731eec20c5a2aa7a859086f19f60a4e5fcd80e6684228f6fb767","impliedFormat":99},{"version":"a49c210c136c518a7c08325f6058fc648f59f911c41c93de2026db692bba0e47","impliedFormat":99},{"version":"1a92f93597ebc451e9ef4b158653c8d31902de5e6c8a574470ecb6da64932df4","impliedFormat":99},{"version":"256513ad066ac9898a70ca01e6fbdb3898a4e0fe408fbf70608fdc28ac1af224","impliedFormat":99},{"version":"d9835850b6cc05c21e8d85692a8071ebcf167a4382e5e39bf700c4a1e816437e","impliedFormat":99},{"version":"e5ab7190f818442e958d0322191c24c2447ddceae393c4e811e79cda6bd49836","impliedFormat":99},{"version":"91b4b77ef81466ce894f1aade7d35d3589ddd5c9981109d1dea11f55a4b807a0","impliedFormat":99},{"version":"03abb209bed94c8c893d9872639e3789f0282061c7aa6917888965e4047a8b5f","impliedFormat":99},{"version":"e97a07901de562219f5cba545b0945a1540d9663bd9abce66495721af3903eec","impliedFormat":99},{"version":"bf39ed1fdf29bc8178055ec4ff32be6725c1de9f29c252e31bdc71baf5c227e6","impliedFormat":99},{"version":"985eabf06dac7288fc355435b18641282f86107e48334a83605739a1fe82ac15","impliedFormat":99},{"version":"6112d33bcf51e3e6f6a81e419f29580e2f8e773529d53958c7c1c99728d4fb2e","impliedFormat":99},{"version":"89e9f7e87a573504acc2e7e5ad727a110b960330657d1b9a6d3526e77c83d8be","impliedFormat":99},{"version":"44bbb88abe9958c7c417e8687abf65820385191685009cc4b739c2d270cb02e9","impliedFormat":99},{"version":"ab4b506b53d2c4aec4cc00452740c540a0e6abe7778063e95c81a5cd557c19eb","impliedFormat":99},{"version":"858757bde6d615d0d1ee474c972131c6d79c37b0b61897da7fbd7110beb8af12","impliedFormat":99},{"version":"60b9dea33807b086a1b4b4b89f72d5da27ad0dd36d6436a6e306600c47438ac4","impliedFormat":99},{"version":"409c963b1166d0c1d49fdad1dfeb4de27fd2d6662d699009857de9baf43ca7c3","impliedFormat":99},{"version":"b7674ecfeb5753e965404f7b3d31eec8450857d1a23770cb867c82f264f546ab","impliedFormat":99},{"version":"c9800b9a9ad7fcdf74ed8972a5928b66f0e4ff674d55fd038a3b1c076911dcbe","impliedFormat":99},{"version":"99864433e35b24c61f8790d2224428e3b920624c01a6d26ea8b27ee1f62836bb","impliedFormat":99},{"version":"c391317b9ff8f87d28c6bfe4e50ed92e8f8bfab1bb8a03cd1fe104ff13186f83","impliedFormat":99},{"version":"42bdc3c98446fdd528e2591213f71ce6f7008fb9bb12413bd57df60d892a3fb5","impliedFormat":99},{"version":"542d2d689b58c25d39a76312ccaea2fcd10a45fb27b890e18015399c8032e2d9","impliedFormat":99},{"version":"97d1656f0a563dbb361d22b3d7c2487427b0998f347123abd1c69a4991326c96","impliedFormat":99},{"version":"d4f53ed7960c9fba8378af3fa28e3cc483d6c0b48e4a152a83ff0973d507307d","impliedFormat":99},{"version":"0665de5280d65ec32776dc55fb37128e259e60f389cde5b9803cf9e81ad23ce0","impliedFormat":99},{"version":"b6dc8fd1c6092da86725c338ca6c263d1c6dd3073046d3ec4eb2d68515062da2","impliedFormat":99},{"version":"d9198a0f01f00870653347560e10494efeca0bfa2de0988bd5d883a9d2c47edb","impliedFormat":99},{"version":"d4279865b926d7e2cfe8863b2eae270c4c035b6e923af8f9d7e6462d68679e07","impliedFormat":99},{"version":"73b6945448bb3425b764cfe7b1c4b0b56c010cc66e5f438ef320c53e469797eb","impliedFormat":99},{"version":"cf72fd8ffa5395f4f1a26be60246ec79c5a9ad201579c9ba63fd2607b5daf184","impliedFormat":99},{"version":"301a458744666096f84580a78cc3f6e8411f8bab92608cdaa33707546ca2906f","impliedFormat":99},{"version":"711e70c0916ff5f821ea208043ecd3e67ed09434b8a31d5616286802b58ebebe","impliedFormat":99},{"version":"e1f2fd9f88dd0e40c358fbf8c8f992211ab00a699e7d6823579b615b874a8453","impliedFormat":99},{"version":"17db3a9dcb2e1689ff7ace9c94fa110c88da64d69f01dc2f3cec698e4fc7e29e","impliedFormat":99},{"version":"73fb07305106bb18c2230890fcacf910fd1a7a77d93ac12ec40bc04c49ee5b8e","impliedFormat":99},{"version":"2c5f341625a45530b040d59a4bc2bc83824d258985ede10c67005be72d3e21d0","impliedFormat":99},{"version":"c4a262730d4277ecaaf6f6553dabecc84dcca8decaebbf2e16f1df8bbd996397","impliedFormat":99},{"version":"c23c533d85518f3358c55a7f19ab1a05aad290251e8bba0947bd19ea3c259467","impliedFormat":99},{"version":"5d0322a0b8cdc67b8c71e4ccaa30286b0c8453211d4c955a217ac2d3590e911f","impliedFormat":99},{"version":"f5e4032b6e4e116e7fec5b2620a2a35d0b6b8b4a1cc9b94a8e5ee76190153110","impliedFormat":99},{"version":"9ab26cb62a0e86ab7f669c311eb0c4d665457eb70a103508aa39da6ccee663da","impliedFormat":99},{"version":"5f64d1a11d8d4ce2c7ee3b72471df76b82d178a48964a14cdfdc7c5ef7276d70","impliedFormat":99},{"version":"24e2fbc48f65814e691d9377399807b9ec22cd54b51d631ba9e48ee18c5939dd","impliedFormat":99},{"version":"bfa2648b2ee90268c6b6f19e84da3176b4d46329c9ec0555d470e647d0568dfb","impliedFormat":99},{"version":"75ef3cb4e7b3583ba268a094c1bd16ce31023f2c3d1ac36e75ca65aca9721534","impliedFormat":99},{"version":"3be6b3304a81d0301838860fd3b4536c2b93390e785808a1f1a30e4135501514","impliedFormat":99},{"version":"da66c1b3e50ef9908e31ce7a281b137b2db41423c2b143c62524f97a536a53d9","impliedFormat":99},{"version":"3ada1b216e45bb9e32e30d8179a0a95870576fe949c33d9767823ccf4f4f4c97","impliedFormat":99},{"version":"1ace2885dffab849f7c98bffe3d1233260fbf07ee62cb58130167fd67a376a65","impliedFormat":99},{"version":"2126e5989c0ca5194d883cf9e9c10fe3e5224fbd3e4a4a6267677544e8be0aae","impliedFormat":99},{"version":"41a6738cf3c756af74753c5033e95c5b33dfc1f6e1287fa769a1ac4027335bf5","impliedFormat":99},{"version":"6e8630be5b0166cbc9f359b9f9e42801626d64ff1702dcb691af811149766154","impliedFormat":99},{"version":"e36b77c04e00b4a0bb4e1364f2646618a54910c27f6dc3fc558ca2ced8ca5bc5","impliedFormat":99},{"version":"2c4ea7e9f95a558f46c89726d1fedcb525ef649eb755a3d7d5055e22b80c2904","impliedFormat":99},{"version":"4875d65190e789fad05e73abd178297b386806b88b624328222d82e455c0f2e7","impliedFormat":99},{"version":"bf5302ecfaacee37c2316e33703723d62e66590093738c8921773ee30f2ecc38","impliedFormat":99},{"version":"62684064fe034d54b87f62ad416f41b98a405dee4146d0ec03b198c3634ea93c","impliedFormat":99},{"version":"be02cbdb1688c8387f8a76a9c6ed9d75d8bb794ec5b9b1d2ba3339a952a00614","impliedFormat":99},{"version":"cefaff060473a5dbf4939ee1b52eb900f215f8d6249dc7c058d6b869d599983c","impliedFormat":99},{"version":"b2797235a4c1a7442a6f326f28ffb966226c3419399dbb33634b8159af2c712f","impliedFormat":99},{"version":"164d633bbd4329794d329219fc173c3de85d5ad866d44e5b5f0fb60c140e98f2","impliedFormat":99},{"version":"b74300dd0a52eaf564b3757c07d07e1d92def4e3b8708f12eedb40033e4cafe9","impliedFormat":99},{"version":"a792f80b1e265b06dce1783992dbee2b45815a7bdc030782464b8cf982337cf2","impliedFormat":99},{"version":"8816b4b3a87d9b77f0355e616b38ed5054f993cc4c141101297f1914976a94b1","impliedFormat":99},{"version":"0f35e4da974793534c4ca1cdd9491eab6993f8cf47103dadfc048b899ed9b511","impliedFormat":99},{"version":"0ccdfcaebf297ec7b9dde20bbbc8539d5951a3d8aaa40665ca469da27f5a86e1","impliedFormat":99},{"version":"7fcb05c8ce81f05499c7b0488ae02a0a1ac6aebc78c01e9f8c42d98f7ba68140","impliedFormat":99},{"version":"81c376c9e4d227a4629c7fca9dde3bbdfa44bd5bd281aee0ed03801182368dc5","impliedFormat":99},{"version":"0f2448f95110c3714797e4c043bbc539368e9c4c33586d03ecda166aa9908843","impliedFormat":99},{"version":"b2f1a443f7f3982d7325775906b51665fe875c82a62be3528a36184852faa0bb","impliedFormat":99},{"version":"7568ff1f23363d7ee349105eb936e156d61aea8864187a4c5d85c60594b44a25","impliedFormat":99},{"version":"8c4d1d9a4eba4eac69e6da0f599a424b2689aee55a455f0b5a7f27a807e064db","impliedFormat":99},{"version":"e1beb9077c100bdd0fc8e727615f5dae2c6e1207de224569421907072f4ec885","impliedFormat":99},{"version":"3dda13836320ec71b95a68cd3d91a27118b34c05a2bfda3e7e51f1d8ca9b960b","impliedFormat":99},{"version":"fedc79cb91f2b3a14e832d7a8e3d58eb02b5d5411c843fcbdc79e35041316b36","impliedFormat":99},{"version":"99f395322ffae908dcdfbaa2624cc7a2a2cb7b0fbf1a1274aca506f7b57ebcb5","impliedFormat":99},{"version":"5e1f7c43e8d45f2222a5c61cbc88b074f4aaf1ca4b118ac6d6123c858efdcd71","impliedFormat":99},{"version":"7388273ab71cb8f22b3f25ffd8d44a37d5740077c4d87023da25575204d57872","impliedFormat":99},{"version":"0a48ceb01a0fdfc506aa20dfd8a3563edbdeaa53a8333ddf261d2ee87669ea7b","impliedFormat":99},{"version":"3182d06b874f31e8e55f91ea706c85d5f207f16273480f46438781d0bd2a46a1","impliedFormat":99},{"version":"ccd47cab635e8f71693fa4e2bbb7969f559972dae97bd5dbd1bbfee77a63b410","impliedFormat":99},{"version":"89770fa14c037f3dc3882e6c56be1c01bb495c81dec96fa29f868185d9555a5d","impliedFormat":99},{"version":"7048c397f08c54099c52e6b9d90623dc9dc6811ea142f8af3200e40d66a972e1","impliedFormat":99},{"version":"512120cd6f026ce1d3cf686c6ab5da80caa40ef92aa47466ec60ba61a48b5551","impliedFormat":99},{"version":"6cd0cb7f999f221e984157a7640e7871960131f6b221d67e4fdc2a53937c6770","impliedFormat":99},{"version":"f48b84a0884776f1bc5bf0fcf3f69832e97b97dc55d79d7557f344de900d259b","impliedFormat":99},{"version":"dca490d986411644b0f9edf6ea701016836558e8677c150dca8ad315178ec735","impliedFormat":99},{"version":"a028a04948cf98c1233166b48887dad324e8fe424a4be368a287c706d9ccd491","impliedFormat":99},{"version":"3046ed22c701f24272534b293c10cfd17b0f6a89c2ec6014c9a44a90963dfa06","impliedFormat":99},{"version":"394da10397d272f19a324c95bea7492faadf2263da157831e02ae1107bd410f5","impliedFormat":99},{"version":"0580595a99248b2d30d03f2307c50f14eb21716a55beb84dd09d240b1b087a42","impliedFormat":99},{"version":"a7da9510150f36a9bea61513b107b59a423fdff54429ad38547c7475cd390e95","impliedFormat":99},{"version":"659615f96e64361af7127645bb91f287f7b46c5d03bea7371e6e02099226d818","impliedFormat":99},{"version":"1f2a42974920476ce46bb666cd9b3c1b82b2072b66ccd0d775aa960532d78176","impliedFormat":99},{"version":"500b3ae6095cbab92d81de0b40c9129f5524d10ad955643f81fc07d726c5a667","impliedFormat":99},{"version":"a957ad4bd562be0662fb99599dbcf0e16d1631f857e5e1a83a3f3afb6c226059","impliedFormat":99},{"version":"e57a4915266a6a751c6c172e8f30f6df44a495608613e1f1c410196207da9641","impliedFormat":99},{"version":"7a12e57143b7bc5a52a41a8c4e6283a8f8d59a5e302478185fb623a7157fff5e","impliedFormat":99},{"version":"17b3426162e1d9cb0a843e8d04212aabe461d53548e671236de957ed3ae9471b","impliedFormat":99},{"version":"f38e86eb00398d63180210c5090ef6ed065004474361146573f98b3c8a96477d","impliedFormat":99},{"version":"231d9e32382d3971f58325e5a85ba283a2021243651cb650f82f87a1bf62d649","impliedFormat":99},{"version":"6532e3e87b87c95f0771611afce929b5bad9d2c94855b19b29b3246937c9840b","impliedFormat":99},{"version":"65704bbb8f0b55c73871335edd3c9cead7c9f0d4b21f64f5d22d0987c45687f0","impliedFormat":99},{"version":"787232f574af2253ac860f22a445c755d57c73a69a402823ae81ba0dfdd1ce23","impliedFormat":99},{"version":"5e63903cd5ebce02486b91647d951d61a16ad80d65f9c56581cd624f39a66007","impliedFormat":99},{"version":"bcc89a120d8f3c02411f4df6b1d989143c01369314e9b0e04794441e6b078d22","impliedFormat":99},{"version":"d17531ef42b7c76d953f63bd5c5cd927c4723e62a7e0b2badf812d5f35f784eb","impliedFormat":99},{"version":"6d4ee1a8e3a97168ea4c4cc1c68bb61a3fd77134f15c71bb9f3f63df3d26b54c","impliedFormat":99},{"version":"1eb04fea6b47b16922ed79625d90431a8b2fc7ba9d5768b255e62df0c96f1e3a","impliedFormat":99},{"version":"de0c2eece83bd81b8682f4496f558beb728263e17e74cbc4910e5c9ce7bef689","impliedFormat":99},{"version":"98866542d45306dab48ecc3ddd98ee54fa983353bc3139dfbc619df882f54d90","impliedFormat":99},{"version":"9e04c7708917af428c165f1e38536ddb2e8ecd576f55ed11a97442dc34b6b010","impliedFormat":99},{"version":"31fe6f6d02b53c1a7c34b8d8f8c87ee9b6dd4b67f158cbfff3034b4f3f69c409","impliedFormat":99},{"version":"2e1d853f84188e8e002361f4bfdd892ac31c68acaeac426a63cd4ff7abf150d0","impliedFormat":99},{"version":"666b5289ec8a01c4cc0977c62e3fd32e89a8e3fd9e97c8d8fd646f632e63c055","impliedFormat":99},{"version":"a1107bbb2b10982dba1f7958a6a5cf841e1a19d6976d0ecdc4c43269c7b0eaf2","impliedFormat":99},{"version":"07fa6122f7495331f39167ec9e4ebd990146a20f99c16c17bc0a98aa81f63b27","impliedFormat":99},{"version":"39c1483481b35c2123eaab5094a8b548a0c3f1e483ab7338102c3291f1ab18bf","impliedFormat":99},{"version":"b73e6242c13796e7d5fba225bf1c07c8ee66d31b7bb65f45be14226a9ae492d2","impliedFormat":99},{"version":"f2931608d541145d189390d6cfb74e1b1e88f73c0b9a80c4356a4daa7fa5e005","impliedFormat":99},{"version":"8684656fe3bf1425a91bd62b8b455a1c7ec18b074fd695793cfae44ae02e381a","impliedFormat":99},{"version":"ccf0b9057dd65c7fb5e237de34f706966ebc30c6d3669715ed05e76225f54fbd","impliedFormat":99},{"version":"d930f077da575e8ea761e3d644d4c6279e2d847bae2b3ea893bbd572315acc21","impliedFormat":99},{"version":"19b0616946cb615abde72c6d69049f136cc4821b784634771c1d73bec8005f73","impliedFormat":99},{"version":"553312560ad0ef97b344b653931935d6e80840c2de6ab90b8be43cbacf0d04cf","impliedFormat":99},{"version":"1225cf1910667bfd52b4daa9974197c3485f21fe631c3ce9db3b733334199faa","impliedFormat":99},{"version":"f7cb9e46bd6ab9d620d68257b525dbbbbc9b0b148adf500b819d756ebc339de0","impliedFormat":99},{"version":"e46d6c3120aca07ae8ec3189edf518c667d027478810ca67a62431a0fa545434","impliedFormat":99},{"version":"9d234b7d2f662a135d430d3190fc21074325f296273125244b2bf8328b5839a0","impliedFormat":99},{"version":"0554ef14d10acea403348c53436b1dd8d61e7c73ef5872e2fe69cc1c433b02f8","impliedFormat":99},{"version":"2f6ae5538090db60514336bd1441ca208a8fab13108cfa4b311e61eaca5ff716","impliedFormat":99},{"version":"17bf4ce505a4cff88fb56177a8f7eb48aa55c22ccc4cce3e49cc5c8ddc54b07d","impliedFormat":99},{"version":"3d735f493d7da48156b79b4d8a406bf2bbf7e3fe379210d8f7c085028143ee40","impliedFormat":99},{"version":"41de1b3ddd71bd0d9ed7ac217ca1b15b177dd731d5251cde094945c20a715d03","impliedFormat":99},{"version":"17d9c562a46c6a25bc2f317c9b06dd4e8e0368cbe9bdf89be6117aeafd577b36","impliedFormat":99},{"version":"ded799031fe18a0bb5e78be38a6ae168458ff41b6c6542392b009d2abe6a6f32","impliedFormat":99},{"version":"ed48d467a7b25ee1a2769adebc198b647a820e242c96a5f96c1e6c27a40ab131","impliedFormat":99},{"version":"b914114df05f286897a1ae85d2df39cfd98ed8da68754d73cf830159e85ddd15","impliedFormat":99},{"version":"73881e647da3c226f21e0b80e216feaf14a5541a861494c744e9fbe1c3b3a6af","impliedFormat":99},{"version":"d79e1d31b939fa99694f2d6fbdd19870147401dbb3f42214e84c011e7ec359ab","impliedFormat":99},{"version":"4f71097eae7aa37941bab39beb2e53e624321fd341c12cc1d400eb7a805691ff","impliedFormat":99},{"version":"58ebb4f21f3a90dda31a01764462aa617849fdb1b592f3a8d875c85019956aff","impliedFormat":99},{"version":"a8e8d0e6efff70f3c28d3e384f9d64530c7a7596a201e4879a7fd75c7d55cbb5","impliedFormat":99},{"version":"df5cbb80d8353bf0511a4047cc7b8434b0be12e280b6cf3de919d5a3380912c0","impliedFormat":99},{"version":"256eb0520e822b56f720962edd7807ed36abdf7ea23bcadf4a25929a3317c8cf","impliedFormat":99},{"version":"9cf2cbc9ceb5f718c1705f37ce5454f14d3b89f690d9864394963567673c1b5c","impliedFormat":99},{"version":"07d3dd790cf1e66bb6fc9806d014dd40bb2055f8d6ca3811cf0e12f92ba4cb9a","impliedFormat":99},{"version":"1f99fd62e9cff9b50c36f368caf3b9fb79fc6f6c75ca5d3c2ec4afaea08d9109","impliedFormat":99},{"version":"6558faaacba5622ef7f1fdfb843cd967af2c105469b9ff5c18a81ce85178fca7","impliedFormat":99},{"version":"34e7f17ae9395b0269cd3f2f0af10709e6dc975c5b44a36b6b70442dc5e25a38","impliedFormat":99},{"version":"a4295111b54f84c02c27e46b0855b02fad3421ae1d2d7e67ecf16cb49538280a","impliedFormat":99},{"version":"ce9746b2ceae2388b7be9fe1f009dcecbc65f0bdbc16f40c0027fab0fb848c3b","impliedFormat":99},{"version":"35ce823a59f397f0e85295387778f51467cea137d787df385be57a2099752bfb","impliedFormat":99},{"version":"2e5acd3ec67bc309e4f679a70c894f809863c33b9572a8da0b78db403edfa106","impliedFormat":99},{"version":"1872f3fcea0643d5e03b19a19d777704320f857d1be0eb4ee372681357e20c88","impliedFormat":99},{"version":"9689628941205e40dcbb2706d1833bd00ce7510d333b2ef08be24ecbf3eb1a37","impliedFormat":99},{"version":"0317a72a0b63094781476cf1d2d27585d00eb2b0ca62b5287124735912f3d048","impliedFormat":99},{"version":"6ce4c0ab3450a4fff25d60a058a25039cffd03141549589689f5a17055ad0545","impliedFormat":99},{"version":"9153ec7b0577ae77349d2c5e8c5dd57163f41853b80c4fb5ce342c7a431cbe1e","impliedFormat":99},{"version":"f490dfa4619e48edd594a36079950c9fca1230efb3a82aaf325047262ba07379","impliedFormat":99},{"version":"674f00085caff46d2cbc76fc74740fd31f49d53396804558573421e138be0c12","impliedFormat":99},{"version":"41d029194c4811f09b350a1e858143c191073007a9ee836061090ed0143ad94f","impliedFormat":99},{"version":"44a6259ffd6febd8510b9a9b13a700e1d022530d8b33663f0735dbb3bee67b3d","impliedFormat":99},{"version":"6f4322500aff8676d9b8eef7711c7166708d4a0686b792aa4b158e276ed946a7","impliedFormat":99},{"version":"e829ff9ecffa3510d3a4d2c3e4e9b54d4a4ccfef004bacbb1d6919ce3ccca01f","impliedFormat":99},{"version":"62e6fec9dbd012460b47af7e727ec4cd34345b6e4311e781f040e6b640d7f93e","impliedFormat":99},{"version":"4d180dd4d0785f2cd140bc069d56285d0121d95b53e4348feb4f62db2d7035d3","impliedFormat":99},{"version":"f1142cbba31d7f492d2e7c91d82211a8334e6642efe52b71d9a82cb95ba4e8ae","impliedFormat":99},{"version":"279cac827be5d48c0f69fe319dc38c876fdd076b66995d9779c43558552d8a50","impliedFormat":99},{"version":"a70ff3c65dc0e7213bfe0d81c072951db9f5b1e640eb66c1eaed0737879c797b","impliedFormat":99},{"version":"f75d3303c1750f4fdacd23354657eca09aae16122c344e65b8c14c570ff67df5","impliedFormat":99},{"version":"3ebae6a418229d4b303f8e0fdb14de83f39fba9f57b39d5f213398bca72137c7","impliedFormat":99},{"version":"21ba07e33265f59d52dece5ac44f933b2b464059514587e64ad5182ddf34a9b0","impliedFormat":99},{"version":"2d3d96efba00493059c460fd55e6206b0667fc2e73215c4f1a9eb559b550021f","impliedFormat":99},{"version":"d23d4a57fff5cec5607521ba3b72f372e3d735d0f6b11a4681655b0bdd0505f4","impliedFormat":99},{"version":"395c1f3da7e9c87097c8095acbb361541480bf5fd7fa92523985019fef7761dd","impliedFormat":99},{"version":"d61f3d719293c2f92a04ba73d08536940805938ecab89ac35ceabc8a48ccb648","impliedFormat":99},{"version":"ca693235a1242bcd97254f43a17592aa84af66ccb7497333ccfea54842fde648","impliedFormat":99},{"version":"cd41cf040b2e368382f2382ec9145824777233730e3965e9a7ba4523a6a4698e","impliedFormat":99},{"version":"2e7a9dba6512b0310c037a28d27330520904cf5063ca19f034b74ad280dbfe71","impliedFormat":99},{"version":"9f2a38baf702e6cb98e0392fa39d25a64c41457a827b935b366c5e0980a6a667","impliedFormat":99},{"version":"c1dc37f0e7252928f73d03b0d6b46feb26dea3d8737a531ca4c0ec4105e33120","impliedFormat":99},{"version":"25126b80243fb499517e94fc5afe5c9c5df3a0105618e33581fb5b2f2622f342","impliedFormat":99},{"version":"d332c2ddcb64012290eb14753c1b49fe3eee9ca067204efba1cf31c1ce1ee020","impliedFormat":99},{"version":"1be8da453470021f6fe936ba19ee0bfebc7cfa2406953fa56e78940467c90769","impliedFormat":99},{"version":"7c9f2d62d83f1292a183a44fb7fb1f16eb9037deb05691d307d4017ac8af850a","impliedFormat":99},{"version":"d0163ab7b0de6e23b8562af8b5b4adea4182884ca7543488f7ac2a3478f3ae6e","impliedFormat":99},{"version":"05224e15c6e51c4c6cd08c65f0766723f6b39165534b67546076c226661db691","impliedFormat":99},{"version":"a5f7158823c7700dd9fc1843a94b9edc309180c969fbfa6d591aeb0b33d3b514","impliedFormat":99},{"version":"7d30937f8cf9bb0d4b2c2a8fb56a415d7ef393f6252b24e4863f3d7b84285724","impliedFormat":99},{"version":"e04d074584483dc9c59341f9f36c7220f16eed09f7af1fa3ef9c64c26095faec","impliedFormat":99},{"version":"619697e06cbc2c77edda949a83a62047e777efacde1433e895b904fe4877c650","impliedFormat":99},{"version":"88d9a8593d2e6aee67f7b15a25bda62652c77be72b79afbee52bea61d5ffb39e","impliedFormat":99},{"version":"044d7acfc9bd1af21951e32252cf8f3a11c8b35a704169115ddcbde9fd717de2","impliedFormat":99},{"version":"a4ca8f13a91bd80e6d7a4f013b8a9e156fbf579bbec981fe724dad38719cfe01","impliedFormat":99},{"version":"5a216426a68418e37e55c7a4366bc50efc99bda9dc361eae94d7e336da96c027","impliedFormat":99},{"version":"13b65b640306755096d304e76d4a237d21103de88b474634f7ae13a2fac722d5","impliedFormat":99},{"version":"7478bd43e449d3ce4e94f3ed1105c65007b21f078b3a791ea5d2c47b30ea6962","impliedFormat":99},{"version":"601d3e8e71b7d6a24fc003aca9989a6c25fa2b3755df196fd0aaee709d190303","impliedFormat":99},{"version":"168e0850fcc94011e4477e31eca81a8a8a71e1aed66d056b7b50196b877e86c8","impliedFormat":99},{"version":"37ba82d63f5f8c6b4fc9b756f24902e47f62ea66aae07e89ace445a54190a86e","impliedFormat":99},{"version":"f5b66b855f0496bc05f1cd9ba51a6a9de3d989b24aa36f6017257f01c8b65a9f","impliedFormat":99},{"version":"823b16d378e8456fcc5503d6253c8b13659be44435151c6b9f140c4a38ec98c1","impliedFormat":99},{"version":"b58b254bf1b586222844c04b3cdec396e16c811463bf187615bb0a1584beb100","impliedFormat":99},{"version":"a367c2ccfb2460e222c5d10d304e980bd172dd668bcc02f6c2ff626e71e90d75","impliedFormat":99},{"version":"0718623262ac94b016cb0cfd8d54e4d5b7b1d3941c01d85cf95c25ec1ba5ed8d","impliedFormat":99},{"version":"d4f3c9a0bd129e9c7cbfac02b6647e34718a2b81a414d914e8bd6b76341172e0","impliedFormat":99},{"version":"824306df6196f1e0222ff775c8023d399091ada2f10f2995ce53f5e3d4aff7a4","impliedFormat":99},{"version":"84ca07a8d57f1a6ba8c0cf264180d681f7afae995631c6ca9f2b85ec6ee06c0f","impliedFormat":99},{"version":"35755e61e9f4ec82d059efdbe3d1abcccc97a8a839f1dbf2e73ac1965f266847","impliedFormat":99},{"version":"64a918a5aa97a37400ec085ffeea12a14211aa799cd34e5dc828beb1806e95bb","impliedFormat":99},{"version":"0c8f5489ba6af02a4b1d5ba280e7badd58f30dc8eb716113b679e9d7c31185e5","impliedFormat":99},{"version":"7b574ca9ae0417203cdfa621ab1585de5b90c4bc6eea77a465b2eb8b92aa5380","impliedFormat":99},{"version":"3334c03c15102700973e3e334954ac1dffb7be7704c67cc272822d5895215c93","impliedFormat":99},{"version":"aabcb169451df7f78eb43567fab877a74d134a0a6d9850aa58b38321374ab7c0","impliedFormat":99},{"version":"1b5effdd8b4e8d9897fc34ab4cd708a446bf79db4cb9a3467e4a30d55b502e14","impliedFormat":99},{"version":"d772776a7aea246fd72c5818de72c3654f556b2cf0d73b90930c9c187cc055fc","impliedFormat":99},{"version":"dbd4bd62f433f14a419e4c6130075199eb15f2812d2d8e7c9e1f297f4daac788","impliedFormat":99},{"version":"427df949f5f10c73bcc77b2999893bc66c17579ad073ee5f5270a2b30651c873","impliedFormat":99},{"version":"c4c1a5565b9b85abfa1d663ca386d959d55361e801e8d49155a14dd6ca41abe1","impliedFormat":99},{"version":"7a45a45c277686aaff716db75a8157d0458a0d854bacf072c47fee3d499d7a99","impliedFormat":99},{"version":"57005b72bce2dc26293e8924f9c6be7ee3a2c1b71028a680f329762fa4439354","impliedFormat":99},{"version":"8f53b1f97c53c3573c16d0225ee3187d22f14f01421e3c6da1a26a1aace32356","impliedFormat":99},{"version":"810fdc0e554ed7315c723b91f6fa6ef3a6859b943b4cd82879641563b0e6c390","impliedFormat":99},{"version":"87a36b177b04d23214aa4502a0011cd65079e208cd60654aefc47d0d65da68ea","impliedFormat":99},{"version":"28a1c17fcbb9e66d7193caca68bbd12115518f186d90fc729a71869f96e2c07b","impliedFormat":99},{"version":"cc2d2abbb1cc7d6453c6fee760b04a516aa425187d65e296a8aacff66a49598a","impliedFormat":99},{"version":"d2413645bc4ab9c3f3688c5281232e6538684e84b49a57d8a1a8b2e5cf9f2041","impliedFormat":99},{"version":"4e6e21a0f9718282d342e66c83b2cd9aa7cd777dfcf2abd93552da694103b3dc","impliedFormat":99},{"version":"9006cc15c3a35e49508598a51664aa34ae59fc7ab32d6cc6ea2ec68d1c39448e","impliedFormat":99},{"version":"74467b184eadee6186a17cac579938d62eceb6d89c923ae67d058e2bcded254e","impliedFormat":99},{"version":"4169b96bb6309a2619f16d17307da341758da2917ff40c615568217b14357f5e","impliedFormat":99},{"version":"4a94d6146b38050de0830019a1c6a7820c2e2b90eba1a5ee4e4ab3bc30a72036","impliedFormat":99},{"version":"48a35ece156203abf19864daa984475055bbed4dc9049d07f4462100363f1e85","impliedFormat":99},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"472f5aab7edc498a0a761096e8e254c5bc3323d07a1e7f5f8b8ec0d6395b60a0","affectsGlobalScope":true,"impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1}],"root":[220],"options":{"allowSyntheticDefaultImports":true,"composite":true,"module":99,"skipLibCheck":true},"referencedMap":[[152,1],[154,2],[153,3],[150,1],[151,4],[221,1],[158,1],[222,1],[236,5],[237,5],[238,5],[239,5],[240,5],[241,5],[242,5],[243,5],[244,5],[245,5],[246,5],[247,5],[248,5],[249,5],[250,5],[251,5],[252,5],[253,5],[254,5],[255,5],[256,5],[257,5],[258,5],[259,5],[260,5],[261,5],[262,5],[263,5],[264,5],[265,5],[266,5],[267,5],[268,5],[269,5],[270,5],[271,5],[272,5],[273,5],[274,5],[275,5],[276,5],[277,5],[278,5],[279,5],[280,5],[281,5],[282,5],[283,5],[284,5],[285,5],[286,5],[287,5],[288,5],[289,5],[290,5],[291,5],[292,5],[293,5],[294,5],[295,5],[296,5],[297,5],[298,5],[299,5],[300,5],[301,5],[302,5],[303,5],[304,5],[305,5],[306,5],[307,5],[308,5],[309,5],[310,5],[311,5],[312,5],[313,5],[314,5],[315,5],[316,5],[317,5],[318,5],[319,5],[320,5],[321,5],[322,5],[323,5],[324,5],[325,5],[326,5],[327,5],[328,5],[329,5],[330,5],[331,5],[332,5],[540,6],[333,5],[334,5],[335,5],[336,5],[337,5],[338,5],[339,5],[340,5],[341,5],[342,5],[343,5],[344,5],[345,5],[346,5],[347,5],[348,5],[349,5],[350,5],[351,5],[352,5],[353,5],[354,5],[355,5],[356,5],[357,5],[358,5],[359,5],[360,5],[361,5],[362,5],[363,5],[364,5],[365,5],[366,5],[367,5],[368,5],[369,5],[370,5],[371,5],[372,5],[373,5],[374,5],[375,5],[376,5],[377,5],[378,5],[379,5],[380,5],[381,5],[382,5],[383,5],[384,5],[385,5],[386,5],[387,5],[388,5],[389,5],[390,5],[391,5],[392,5],[393,5],[394,5],[395,5],[396,5],[397,5],[398,5],[399,5],[400,5],[401,5],[402,5],[403,5],[404,5],[405,5],[406,5],[407,5],[408,5],[409,5],[410,5],[411,5],[412,5],[413,5],[414,5],[415,5],[416,5],[417,5],[418,5],[419,5],[420,5],[421,5],[422,5],[423,5],[424,5],[425,5],[426,5],[427,5],[428,5],[429,5],[430,5],[431,5],[432,5],[433,5],[434,5],[435,5],[436,5],[437,5],[438,5],[439,5],[440,5],[441,5],[442,5],[443,5],[444,5],[445,5],[446,5],[447,5],[448,5],[449,5],[450,5],[451,5],[452,5],[453,5],[454,5],[455,5],[456,5],[457,5],[458,5],[459,5],[460,5],[461,5],[462,5],[463,5],[464,5],[465,5],[466,5],[467,5],[468,5],[469,5],[470,5],[471,5],[472,5],[473,5],[474,5],[475,5],[476,5],[477,5],[478,5],[479,5],[480,5],[481,5],[482,5],[483,5],[484,5],[485,5],[486,5],[487,5],[488,5],[489,5],[490,5],[491,5],[492,5],[493,5],[494,5],[495,5],[496,5],[497,5],[498,5],[499,5],[500,5],[501,5],[502,5],[503,5],[504,5],[505,5],[506,5],[507,5],[508,5],[509,5],[510,5],[511,5],[512,5],[513,5],[514,5],[515,5],[516,5],[517,5],[518,5],[519,5],[520,5],[521,5],[522,5],[523,5],[524,5],[525,5],[526,5],[527,5],[528,5],[529,5],[530,5],[531,5],[532,5],[533,5],[534,5],[535,5],[536,5],[537,5],[538,5],[539,5],[224,7],[225,8],[223,9],[226,10],[227,11],[228,12],[229,13],[230,14],[231,15],[232,16],[233,17],[234,18],[235,19],[96,20],[97,20],[98,21],[54,22],[99,23],[100,24],[101,25],[52,1],[102,26],[103,27],[104,28],[105,29],[106,30],[107,31],[108,31],[110,1],[109,32],[111,33],[112,34],[113,35],[95,36],[53,1],[114,37],[115,38],[116,39],[149,40],[117,41],[118,42],[119,43],[120,44],[121,45],[122,46],[123,47],[124,48],[125,49],[126,50],[127,50],[128,51],[129,1],[130,1],[131,52],[133,53],[132,54],[134,55],[135,56],[136,57],[137,58],[138,59],[139,60],[140,61],[141,62],[142,63],[143,64],[144,65],[145,66],[146,67],[147,68],[148,69],[543,1],[545,70],[541,1],[544,71],[217,72],[219,73],[218,1],[542,1],[163,1],[191,1],[181,74],[179,75],[180,76],[168,77],[169,75],[176,78],[167,79],[172,80],[182,1],[173,81],[178,82],[184,83],[183,84],[166,85],[174,86],[175,87],[170,88],[177,74],[171,89],[160,90],[159,91],[204,92],[205,93],[187,94],[212,95],[206,1],[208,96],[209,96],[210,97],[207,1],[211,98],[190,99],[188,1],[189,100],[203,101],[186,1],[201,102],[192,103],[193,104],[194,103],[195,103],[202,105],[196,104],[197,102],[198,103],[199,104],[200,103],[165,1],[1,1],[50,1],[51,1],[9,1],[13,1],[12,1],[3,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[4,1],[22,1],[23,1],[5,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[6,1],[32,1],[33,1],[34,1],[35,1],[7,1],[39,1],[36,1],[37,1],[38,1],[40,1],[8,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[2,1],[48,1],[49,1],[11,1],[10,1],[72,106],[83,107],[70,108],[84,109],[93,110],[61,111],[62,112],[60,113],[92,114],[87,115],[91,116],[64,117],[80,118],[63,119],[90,120],[58,121],[59,115],[65,122],[66,1],[71,123],[69,122],[56,124],[94,125],[85,126],[75,127],[74,122],[76,128],[78,129],[73,130],[77,131],[88,114],[67,132],[68,133],[79,134],[57,109],[82,135],[81,122],[86,1],[55,1],[89,136],[216,137],[162,138],[156,139],[157,139],[155,1],[161,140],[214,1],[213,141],[185,1],[164,1],[215,142],[220,143]],"latestChangedDtsFile":"./vite.config.d.ts","version":"5.9.2"} \ No newline at end of file diff --git a/vite.config.d.ts b/vite.config.d.ts deleted file mode 100644 index 340562aff..000000000 --- a/vite.config.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _default: import("vite").UserConfig; -export default _default; diff --git a/vite.config.ts b/vite.config.ts deleted file mode 100644 index 9a6a76db0..000000000 --- a/vite.config.ts +++ /dev/null @@ -1,50 +0,0 @@ -import react from '@vitejs/plugin-react-swc'; -import autoprefixer from 'autoprefixer'; -import * as path from 'path'; -import { defineConfig } from 'vite'; - -const host = process.env.TAURI_DEV_HOST; - -// https://vitejs.dev/config/ -export default defineConfig(async ({ command }) => ({ - plugins: [react()], - clearScreen: false, - server: { - strictPort: true, - port: 5071, - host: host || false, - hmr: host - ? { - protocol: 'ws', - host, - port: 1421, - } - : undefined, - watch: { - // 3. tell Vite to ignore watching `src-tauri` - ignored: ['**/src-tauri/**'], - }, - }, - resolve: { - alias: { - '@scssutils': path.resolve('./src/shared/defguard-ui/scss/helpers'), - }, - }, - css: { - preprocessorOptions: { - scss: { - additionalData: `@use "@scssutils" as *;\n`, - }, - }, - postcss: { - plugins: [autoprefixer], - }, - }, - envPrefix: ['VITE_', 'TAURI_'], - base: command === 'build' ? '/old-ui/' : './', - build: { - chunkSizeWarningLimit: 10000000, - outDir: './dist/old-ui', - emptyOutDir: true, - }, -})); From b0d3cd84dc5720c377c20a9709f09b932db35968 Mon Sep 17 00:00:00 2001 From: Jacek Chmielewski Date: Wed, 29 Jul 2026 10:22:57 +0200 Subject: [PATCH 128/155] Linux posture ci (#1067) Use sysfs instead of lsblk command for disk-encryption signal gathering. --- .github/workflows/posture.yaml | 1 + .../enterprise/posture/src/inspector/linux.rs | 301 +++++++++--------- 2 files changed, 151 insertions(+), 151 deletions(-) diff --git a/.github/workflows/posture.yaml b/.github/workflows/posture.yaml index 52802208b..87347948e 100644 --- a/.github/workflows/posture.yaml +++ b/.github/workflows/posture.yaml @@ -18,6 +18,7 @@ env: jobs: test-linux-postures-unencrypted: + if: false name: Linux postures - unencrypted runs-on: - codebuild-defguard-posture-linux-runner-${{ github.run_id }}-${{ github.run_attempt }} diff --git a/src-tauri/enterprise/posture/src/inspector/linux.rs b/src-tauri/enterprise/posture/src/inspector/linux.rs index d5f1783d1..eabb86790 100644 --- a/src-tauri/enterprise/posture/src/inspector/linux.rs +++ b/src-tauri/enterprise/posture/src/inspector/linux.rs @@ -1,43 +1,19 @@ use std::{ + collections::HashSet, fs::read_to_string, path::{Path, PathBuf}, process::Command, }; use defguard_client_core::database::db_file_path; -use serde::Deserialize; use super::UnavailableReason; /// Path to the kernel's mount table for the current process. const MOUNTINFO_PATH: &str = "/proc/self/mountinfo"; -#[derive(Deserialize)] -struct LsblkDevice { - /// Kernel device name (e.g. `dm-0`, `nvme0n1p2`), stable across `lsblk` - /// versions and matching the basename of the canonicalized device path. - kname: Option, - #[serde(rename = "type")] - device_type: Option, - fstype: Option, - children: Option>, -} - -impl LsblkDevice { - /// Whether this device is itself an encryption layer that any data stacked - /// on top of it passes through: an opened dm-crypt mapping (`type == "crypt"`) - /// or a LUKS container partition (`fstype == "crypto_LUKS"`). - #[must_use] - fn is_encryption_layer(&self) -> bool { - self.device_type.as_deref() == Some("crypt") - || self.fstype.as_deref() == Some("crypto_LUKS") - } -} - -#[derive(Deserialize)] -struct LsblkOutput { - blockdevices: Vec, -} +/// sysfs directory exposing every block device by kernel name. +const SYS_BLOCK: &str = "/sys/class/block"; /// A single mount table entry: its mount point, filesystem type and backing /// device source. @@ -50,6 +26,43 @@ struct MountEntry { source: String, } +/// Reports whether the partition that stores the client's database file is +/// encrypted. +/// +/// It resolves the specific device backing the database file and inspects only +/// that device's stack, so unrelated encrypted loop/removable/test volumes do +/// not produce a false positive. Two encryption mechanisms are recognized: +/// - **LUKS/dm-crypt** for block-backed filesystems (ext4/xfs/btrfs/LVM/…), via +/// the sysfs device dependency chain (`/sys/class/block//slaves`); +/// - **native ZFS encryption**, via the dataset's `encryption` property. +/// +/// Other filesystem-internal encryption schemes that leave no block-layer trace +/// (bcachefs native encryption, fscrypt on ext4/f2fs, eCryptfs) are not detected +/// and resolve to `DetectionFailed` - fail-safe: a required posture rule fails +/// rather than falsely passing. +pub(super) fn disk_encryption_status() -> Result { + // Resolve the database file and the mount that backs it. + let db_path = db_file_path().ok_or(UnavailableReason::DetectionFailed)?; + let db_path = canonicalize_on_disk(&db_path).ok_or(UnavailableReason::DetectionFailed)?; + + let mountinfo = + read_to_string(MOUNTINFO_PATH).map_err(|_| UnavailableReason::DetectionFailed)?; + let mounts = parse_mountinfo(&mountinfo); + let backing = + find_backing_mount(&mounts, &db_path).ok_or(UnavailableReason::DetectionFailed)?; + + // ZFS encryption is a dataset property, not a block-layer device; the mount + // source is the dataset name rather than a `/dev` path. + if backing.fstype == "zfs" { + return zfs_dataset_encrypted(&backing.source); + } + + // Otherwise map the mount source to its kernel device name and inspect only + // that device's stack for a LUKS/dm-crypt layer. + let kname = source_kname(&backing.source).ok_or(UnavailableReason::DetectionFailed)?; + device_is_encrypted(&kname).ok_or(UnavailableReason::DetectionFailed) +} + /// Un-escapes the octal sequences (`\040` space, `\011` tab, `\012` newline, /// `\134` backslash) that the kernel uses for special characters in /// `mountinfo` fields. @@ -108,40 +121,75 @@ fn find_backing_mount<'a>(mounts: &'a [MountEntry], path: &Path) -> Option<&'a M .max_by_key(|entry| entry.mount_point.len()) } -/// Walks a single `lsblk` device subtree looking for the device with kernel -/// name `kname`. Returns `Some(true)`/`Some(false)` for whether that device (or -/// any ancestor it stacks on) is an encryption layer, or `None` when `kname` is -/// not found in this subtree. -fn walk_device(device: &LsblkDevice, kname: &str, encrypted_ancestor: bool) -> Option { - let encrypted = encrypted_ancestor || device.is_encryption_layer(); - if device.kname.as_deref() == Some(kname) { - return Some(encrypted); - } - if let Some(children) = &device.children { - for child in children { - if let Some(result) = walk_device(child, kname, encrypted) { - return Some(result); - } - } +/// Whether the device `kname` is an opened dm-crypt mapping, per its sysfs +/// `dm/uuid` (dm-crypt devices carry a `CRYPT-` prefix, e.g. `CRYPT-LUKS2-…`). +fn dm_uuid_is_crypt(kname: &str) -> bool { + read_to_string(Path::new(SYS_BLOCK).join(kname).join("dm/uuid")) + .is_ok_and(|uuid| uuid.trim_start().starts_with("CRYPT-")) +} + +/// Kernel names of the devices `kname` is stacked on top of (its sysfs +/// `slaves/`): e.g. an LVM LV's slave is its dm-crypt device, whose slave is the +/// LUKS partition. Empty when the device has no lower devices (e.g. a plain +/// partition) or the directory is absent. +fn slaves_of(kname: &str) -> Vec { + let slaves_dir = Path::new(SYS_BLOCK).join(kname).join("slaves"); + let Ok(entries) = std::fs::read_dir(slaves_dir) else { + return Vec::new(); + }; + entries + .flatten() + .map(|entry| entry.file_name().to_string_lossy().into_owned()) + .collect() +} + +/// Returns whether `kname`, or any device it stacks on, is a dm-crypt mapping, +/// walking the dependency chain via `slaves`. The `is_crypt` and `slaves` +/// readers are injected so the traversal is testable without real sysfs. +fn stack_has_crypt( + kname: &str, + is_crypt: &impl Fn(&str) -> bool, + slaves: &impl Fn(&str) -> Vec, + visited: &mut HashSet, +) -> bool { + if !visited.insert(kname.to_owned()) { + return false; } - None + is_crypt(kname) + || slaves(kname) + .iter() + .any(|slave| stack_has_crypt(slave, is_crypt, slaves, visited)) } -/// Returns whether the block device with kernel name `kname` is encrypted, or -/// `None` if it is not present in the tree (e.g. a non-block-backed filesystem -/// such as tmpfs/overlay/zfs that `lsblk` does not represent). -fn device_is_encrypted(devices: &[LsblkDevice], kname: &str) -> Option { - devices - .iter() - .find_map(|device| walk_device(device, kname, false)) +/// Returns whether the block device with kernel name `kname` is encrypted +/// (backed by dm-crypt/LUKS anywhere in its stack), or `None` if the device is +/// not present in sysfs (e.g. a non-block-backed filesystem such as +/// tmpfs/overlay/zfs). +fn device_is_encrypted(kname: &str) -> Option { + if !Path::new(SYS_BLOCK).join(kname).exists() { + return None; + } + Some(stack_has_crypt( + kname, + &dm_uuid_is_crypt, + &slaves_of, + &mut HashSet::new(), + )) } -/// Canonicalizes `path`, falling back to its parent directory when the file does -/// not exist yet (the parent lives on the same mount). +/// Canonicalizes `path`, or its nearest existing ancestor when the file/dirs do +/// not exist yet. The nearest existing ancestor lives on the same partition the +/// database will be created on (intermediate dirs are created there; mount +/// points must already exist), so it identifies the correct backing device. fn canonicalize_on_disk(path: &Path) -> Option { - path.canonicalize() - .ok() - .or_else(|| path.parent().and_then(|parent| parent.canonicalize().ok())) + let mut current = Some(path); + while let Some(p) = current { + if let Ok(canonical) = p.canonicalize() { + return Some(canonical); + } + current = p.parent(); + } + None } /// Resolves a mount source to the kernel device name of its block device, e.g. @@ -171,7 +219,7 @@ fn parse_zfs_encryption(value: &str) -> Option { /// /// ZFS encryption is a per-dataset filesystem property with no block-layer /// (dm-crypt) representation, so it is queried directly via the `zfs` CLI rather -/// than through `lsblk`. A mounted dataset implies its key is loaded, so the +/// than through sysfs. A mounted dataset implies its key is loaded, so the /// `encryption` property alone is sufficient (no separate `keystatus` check). fn zfs_dataset_encrypted(dataset: &str) -> Result { let output = Command::new("zfs") @@ -185,60 +233,11 @@ fn zfs_dataset_encrypted(dataset: &str) -> Result { parse_zfs_encryption(&value).ok_or(UnavailableReason::DetectionFailed) } -/// Runs `lsblk` and returns the parsed block device tree. -fn read_block_devices() -> Result, UnavailableReason> { - let output = Command::new("lsblk") - .args(["-J", "-o", "KNAME,TYPE,FSTYPE"]) - .output() - .map_err(|_| UnavailableReason::DetectionFailed)?; - if !output.status.success() { - return Err(UnavailableReason::DetectionFailed); - } - let parsed: LsblkOutput = - serde_json::from_slice(&output.stdout).map_err(|_| UnavailableReason::DetectionFailed)?; - Ok(parsed.blockdevices) -} - -/// Reports whether the partition that stores the client's database file is -/// encrypted. -/// -/// Two encryption mechanisms are recognized: -/// - **LUKS/dm-crypt** for block-backed filesystems (ext4/xfs/btrfs/LVM/…), via -/// the device stack reported by `lsblk`; -/// - **native ZFS encryption**, via the dataset's `encryption` property. -pub(super) fn disk_encryption_status() -> Result { - // Resolve the database file and the mount that backs it. - let db_path = db_file_path().ok_or(UnavailableReason::DetectionFailed)?; - let db_path = canonicalize_on_disk(&db_path).ok_or(UnavailableReason::DetectionFailed)?; - - let mountinfo = - read_to_string(MOUNTINFO_PATH).map_err(|_| UnavailableReason::DetectionFailed)?; - let mounts = parse_mountinfo(&mountinfo); - let backing = - find_backing_mount(&mounts, &db_path).ok_or(UnavailableReason::DetectionFailed)?; - - // ZFS encryption is a dataset property, not a block-layer device; the mount - // source is the dataset name rather than a `/dev` path. - if backing.fstype == "zfs" { - return zfs_dataset_encrypted(&backing.source); - } - - // Otherwise map the mount source to its kernel device name and inspect only - // that stack for a LUKS/dm-crypt layer. - let kname = source_kname(&backing.source).ok_or(UnavailableReason::DetectionFailed)?; - let devices = read_block_devices()?; - device_is_encrypted(&devices, &kname).ok_or(UnavailableReason::DetectionFailed) -} - #[cfg(test)] mod unit_tests { - use super::*; + use std::collections::HashMap; - fn devices(json: &str) -> Vec { - serde_json::from_str::(json) - .expect("invalid lsblk fixture") - .blockdevices - } + use super::*; #[test] fn unescape_handles_octal_sequences() { @@ -319,67 +318,67 @@ mod unit_tests { ); } + /// Runs `stack_has_crypt` over an in-memory device graph: `crypt` is the set + /// of dm-crypt kernel names, `slaves` maps each device to the devices it + /// stacks on (its lower devices). + fn stack_encrypted(start: &str, crypt: &[&str], slaves: &[(&str, &[&str])]) -> bool { + let crypt: HashSet<&str> = crypt.iter().copied().collect(); + let slaves: HashMap<&str, Vec> = slaves + .iter() + .map(|(k, v)| (*k, v.iter().map(|s| (*s).to_owned()).collect())) + .collect(); + let is_crypt = |k: &str| crypt.contains(k); + let slaves_of = |k: &str| slaves.get(k).cloned().unwrap_or_default(); + stack_has_crypt(start, &is_crypt, &slaves_of, &mut HashSet::new()) + } + #[test] fn plain_luks_device_is_encrypted() { // Mounted device is the opened crypt mapping itself. - let json = r#"{"blockdevices":[ - {"kname":"sda","type":"disk","fstype":null,"children":[ - {"kname":"sda2","type":"part","fstype":"crypto_LUKS","children":[ - {"kname":"dm-0","type":"crypt","fstype":"btrfs","children":null} - ]} - ]} - ]}"#; - assert_eq!(device_is_encrypted(&devices(json), "dm-0"), Some(true)); + let slaves = [("dm-0", &["sda2"][..]), ("sda2", &["sda"][..])]; + assert!(stack_encrypted("dm-0", &["dm-0"], &slaves)); } #[test] fn luks_under_lvm_device_is_encrypted() { - // Mounted LVM logical volume stacks on top of a crypt ancestor. - let json = r#"{"blockdevices":[ - {"kname":"sda","type":"disk","fstype":null,"children":[ - {"kname":"sda2","type":"part","fstype":"crypto_LUKS","children":[ - {"kname":"dm-0","type":"crypt","fstype":"LVM2_member","children":[ - {"kname":"dm-1","type":"lvm","fstype":"ext4","children":null} - ]} - ]} - ]} - ]}"#; - assert_eq!(device_is_encrypted(&devices(json), "dm-1"), Some(true)); + // Mounted LVM logical volume stacks on top of a crypt ancestor (dm-0). + // This is the layered case the previous flat-lsblk walk missed. + let slaves = [ + ("dm-1", &["dm-0"][..]), + ("dm-0", &["vda4"][..]), + ("vda4", &["vda"][..]), + ]; + assert!(stack_encrypted("dm-1", &["dm-0"], &slaves)); } #[test] fn plaintext_device_is_not_encrypted() { - let json = r#"{"blockdevices":[ - {"kname":"sda","type":"disk","fstype":null,"children":[ - {"kname":"sda2","type":"part","fstype":"ext4","children":null} - ]} - ]}"#; - assert_eq!(device_is_encrypted(&devices(json), "sda2"), Some(false)); + let slaves = [("sda2", &["sda"][..])]; + assert!(!stack_encrypted("sda2", &[], &slaves)); } #[test] fn unrelated_encrypted_device_does_not_leak() { - // An encrypted loop device must not make the plaintext root device report - // as encrypted (the regression this hardening targets). - let json = r#"{"blockdevices":[ - {"kname":"loop0","type":"loop","fstype":"crypto_LUKS","children":[ - {"kname":"dm-9","type":"crypt","fstype":"ext4","children":null} - ]}, - {"kname":"sda","type":"disk","fstype":null,"children":[ - {"kname":"sda2","type":"part","fstype":"ext4","children":null} - ]} - ]}"#; - assert_eq!(device_is_encrypted(&devices(json), "sda2"), Some(false)); - assert_eq!(device_is_encrypted(&devices(json), "dm-9"), Some(true)); + // Only the target device's own stack is inspected; an encrypted device in + // a separate stack must not leak (the regression this hardening targets). + let slaves = [("sda2", &["sda"][..]), ("dm-9", &["loop0"][..])]; + assert!(!stack_encrypted("sda2", &["dm-9"], &slaves)); + assert!(stack_encrypted("dm-9", &["dm-9"], &slaves)); + } + + #[test] + fn stack_walk_terminates_on_cycles() { + // A pathological slaves cycle must not loop forever. + let slaves = [("a", &["b"][..]), ("b", &["a"][..])]; + assert!(!stack_encrypted("a", &[], &slaves)); } #[test] - fn missing_device_returns_none() { - let json = r#"{"blockdevices":[ - {"kname":"sda","type":"disk","fstype":null,"children":[ - {"kname":"sda2","type":"part","fstype":"ext4","children":null} - ]} - ]}"#; - assert_eq!(device_is_encrypted(&devices(json), "dm-42"), None); + fn canonicalize_ascends_to_nearest_existing_ancestor() { + // A deep non-existent DB path resolves to its nearest existing ancestor + // (the default app dir does not exist before first run). + let base = std::env::temp_dir(); + let deep = base.join("defguard-posture-nonexistent-xyz/a/b/defguard.db"); + assert_eq!(canonicalize_on_disk(&deep), base.canonicalize().ok()); } } From a201cb307c6ca2948c3198bf4a1430a0096680d7 Mon Sep 17 00:00:00 2001 From: Jacek Chmielewski Date: Thu, 30 Jul 2026 09:05:05 +0200 Subject: [PATCH 129/155] Fix stats query (#1072) Fixes excessive disk writes caused by an inefficient stats query: - Adds upload_diff / download_diff columns to location_stats and tunnel_stats, computed once at insert time - Rewrites the stats queries to read those precomputed diffs, replacing the window-function CTE with a plain GROUP BY aggregate - no more large SQLite temp files - Drops stats retention from 30 days to 28 hours, since the UI only ever charts the last 24h - Adds covering indexes on (location_id, collected_at) and (tunnel_id, collected_at) so the aggregate queries resolve via an index search instead of a full table scan --- ...1e9b4bc7bef591e480ede9964743091422baf.json | 74 +++++++++++++++++++ ...7372ff389f8afc11d21baddc9aabe07692be.json} | 24 ++++-- ...0b2eded31017ac7c2a531a4917db5100bfda.json} | 6 +- ...a5a19ee3e5d2729c16b26c5c7ce9d73a5b5b.json} | 6 +- ...d03dc47fa9fdd542af8c85764628f92133040.json | 62 ---------------- ...ff1283fadfa9f50ac1de75fa283be52e970a1.json | 74 +++++++++++++++++++ ...4d8834ce46dacc032d2a900c36cd7c2b6a1e.json} | 24 ++++-- ...c6f87350d379fce3541ea43ed3519b5757d72.json | 62 ---------------- .../src/database/models/location_stats.rs | 50 ++++++++----- src-tauri/core/src/database/models/mod.rs | 2 +- src-tauri/core/src/database/models/tunnel.rs | 47 ++++++++---- .../20260729120000_add_stats_diffs.sql | 11 +++ src-tauri/src/utils.rs | 64 ++++++++++++++-- 13 files changed, 325 insertions(+), 181 deletions(-) create mode 100644 src-tauri/.sqlx/query-498b544eb893fa8b1ecd10984601e9b4bc7bef591e480ede9964743091422baf.json rename src-tauri/.sqlx/{query-7f97fe602e8d1c75f79d88abd2b20eca881e3d8682aaff17b2342f282e3916bf.json => query-5aafcc34860d0cb6412a0ae1d94f7372ff389f8afc11d21baddc9aabe07692be.json} (84%) rename src-tauri/.sqlx/{query-abded0999cc848a4baaad2e57a3247e9d7c7062bc43c84d3405a19c94006b8f8.json => query-7a39250f44f7415c09362f62efcc0b2eded31017ac7c2a531a4917db5100bfda.json} (51%) rename src-tauri/.sqlx/{query-17a3b10441e63bde5b97c861747617eadddbc843e42545860afdd8ad6951b4ee.json => query-996cf1bb9cab0f82963a519f0991a5a19ee3e5d2729c16b26c5c7ce9d73a5b5b.json} (52%) delete mode 100644 src-tauri/.sqlx/query-a694907453e48370dfc3f4de499d03dc47fa9fdd542af8c85764628f92133040.json create mode 100644 src-tauri/.sqlx/query-a87e237432cfd0bc54575c4b5f6ff1283fadfa9f50ac1de75fa283be52e970a1.json rename src-tauri/.sqlx/{query-8e5e1ade31ec88a0e75eb5d8aa86aa8f73e244f6d3128b255a367ad19f534721.json => query-ac0b93f9b64aa7f17824d4a55c714d8834ce46dacc032d2a900c36cd7c2b6a1e.json} (62%) delete mode 100644 src-tauri/.sqlx/query-db08146110d6df2759b34328c8ac6f87350d379fce3541ea43ed3519b5757d72.json create mode 100644 src-tauri/migrations/20260729120000_add_stats_diffs.sql diff --git a/src-tauri/.sqlx/query-498b544eb893fa8b1ecd10984601e9b4bc7bef591e480ede9964743091422baf.json b/src-tauri/.sqlx/query-498b544eb893fa8b1ecd10984601e9b4bc7bef591e480ede9964743091422baf.json new file mode 100644 index 000000000..f5ad6c655 --- /dev/null +++ b/src-tauri/.sqlx/query-498b544eb893fa8b1ecd10984601e9b4bc7bef591e480ede9964743091422baf.json @@ -0,0 +1,74 @@ +{ + "db_name": "SQLite", + "query": "SELECT id \"id!\", tunnel_id, SUM(MAX(upload_diff, 0)) \"upload!: i64\", SUM(MAX(download_diff, 0)) \"download!: i64\", 0 \"upload_diff!: i64\", 0 \"download_diff!: i64\", last_handshake \"last_handshake!: i64\", strftime($1, collected_at) \"collected_at!: NaiveDateTime\", listen_port \"listen_port!: u32\", persistent_keepalive_interval \"persistent_keepalive_interval!: u16\" FROM tunnel_stats WHERE tunnel_id = $2 AND collected_at >= datetime(strftime($1, $3)) GROUP BY strftime($1, collected_at) ORDER BY collected_at", + "describe": { + "columns": [ + { + "name": "id!", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "tunnel_id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "upload!: i64", + "ordinal": 2, + "type_info": "Null" + }, + { + "name": "download!: i64", + "ordinal": 3, + "type_info": "Null" + }, + { + "name": "upload_diff!: i64", + "ordinal": 4, + "type_info": "Null" + }, + { + "name": "download_diff!: i64", + "ordinal": 5, + "type_info": "Null" + }, + { + "name": "last_handshake!: i64", + "ordinal": 6, + "type_info": "Integer" + }, + { + "name": "collected_at!: NaiveDateTime", + "ordinal": 7, + "type_info": "Null" + }, + { + "name": "listen_port!: u32", + "ordinal": 8, + "type_info": "Integer" + }, + { + "name": "persistent_keepalive_interval!: u16", + "ordinal": 9, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 3 + }, + "nullable": [ + true, + false, + null, + null, + null, + null, + false, + null, + false, + false + ] + }, + "hash": "498b544eb893fa8b1ecd10984601e9b4bc7bef591e480ede9964743091422baf" +} diff --git a/src-tauri/.sqlx/query-7f97fe602e8d1c75f79d88abd2b20eca881e3d8682aaff17b2342f282e3916bf.json b/src-tauri/.sqlx/query-5aafcc34860d0cb6412a0ae1d94f7372ff389f8afc11d21baddc9aabe07692be.json similarity index 84% rename from src-tauri/.sqlx/query-7f97fe602e8d1c75f79d88abd2b20eca881e3d8682aaff17b2342f282e3916bf.json rename to src-tauri/.sqlx/query-5aafcc34860d0cb6412a0ae1d94f7372ff389f8afc11d21baddc9aabe07692be.json index f826464a4..50a1a21af 100644 --- a/src-tauri/.sqlx/query-7f97fe602e8d1c75f79d88abd2b20eca881e3d8682aaff17b2342f282e3916bf.json +++ b/src-tauri/.sqlx/query-5aafcc34860d0cb6412a0ae1d94f7372ff389f8afc11d21baddc9aabe07692be.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "WITH prev_download AS (\n SELECT download\n FROM location_stats\n WHERE location_id = $1\n ORDER BY collected_at DESC\n LIMIT 1 OFFSET 1\n )\n SELECT ls.id \"id!: i64\",\n ls.location_id,\n ls.upload \"upload!: i64\",\n ls.download \"download!: i64\",\n ls.last_handshake,\n ls.collected_at \"collected_at!: NaiveDateTime\",\n ls.listen_port \"listen_port!: u32\",\n ls.persistent_keepalive_interval \"persistent_keepalive_interval?: u16\"\n FROM location_stats ls\n LEFT JOIN prev_download pd\n WHERE ls.location_id = $1\n AND (pd.download IS NULL OR ls.download != pd.download)\n ORDER BY ls.collected_at DESC\n LIMIT 1", + "query": "WITH prev_download AS (\n SELECT download\n FROM location_stats\n WHERE location_id = $1\n ORDER BY collected_at DESC\n LIMIT 1 OFFSET 1\n )\n SELECT ls.id \"id!: i64\",\n ls.location_id,\n ls.upload \"upload!: i64\",\n ls.download \"download!: i64\",\n ls.upload_diff,\n ls.download_diff,\n ls.last_handshake,\n ls.collected_at \"collected_at!: NaiveDateTime\",\n ls.listen_port \"listen_port!: u32\",\n ls.persistent_keepalive_interval \"persistent_keepalive_interval?: u16\"\n FROM location_stats ls\n LEFT JOIN prev_download pd\n WHERE ls.location_id = $1\n AND (pd.download IS NULL OR ls.download != pd.download)\n ORDER BY ls.collected_at DESC\n LIMIT 1", "describe": { "columns": [ { @@ -24,23 +24,33 @@ "type_info": "Integer" }, { - "name": "last_handshake", + "name": "upload_diff", "ordinal": 4, "type_info": "Integer" }, { - "name": "collected_at!: NaiveDateTime", + "name": "download_diff", "ordinal": 5, + "type_info": "Integer" + }, + { + "name": "last_handshake", + "ordinal": 6, + "type_info": "Integer" + }, + { + "name": "collected_at!: NaiveDateTime", + "ordinal": 7, "type_info": "Datetime" }, { "name": "listen_port!: u32", - "ordinal": 6, + "ordinal": 8, "type_info": "Integer" }, { "name": "persistent_keepalive_interval?: u16", - "ordinal": 7, + "ordinal": 9, "type_info": "Integer" } ], @@ -55,8 +65,10 @@ false, false, false, + false, + false, true ] }, - "hash": "7f97fe602e8d1c75f79d88abd2b20eca881e3d8682aaff17b2342f282e3916bf" + "hash": "5aafcc34860d0cb6412a0ae1d94f7372ff389f8afc11d21baddc9aabe07692be" } diff --git a/src-tauri/.sqlx/query-abded0999cc848a4baaad2e57a3247e9d7c7062bc43c84d3405a19c94006b8f8.json b/src-tauri/.sqlx/query-7a39250f44f7415c09362f62efcc0b2eded31017ac7c2a531a4917db5100bfda.json similarity index 51% rename from src-tauri/.sqlx/query-abded0999cc848a4baaad2e57a3247e9d7c7062bc43c84d3405a19c94006b8f8.json rename to src-tauri/.sqlx/query-7a39250f44f7415c09362f62efcc0b2eded31017ac7c2a531a4917db5100bfda.json index 5a0b6593a..e0f1523f2 100644 --- a/src-tauri/.sqlx/query-abded0999cc848a4baaad2e57a3247e9d7c7062bc43c84d3405a19c94006b8f8.json +++ b/src-tauri/.sqlx/query-7a39250f44f7415c09362f62efcc0b2eded31017ac7c2a531a4917db5100bfda.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "INSERT INTO location_stats (location_id, upload, download, last_handshake, collected_at, listen_port, persistent_keepalive_interval) VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING id \"id!\"", + "query": "INSERT INTO location_stats (location_id, upload, download, upload_diff, download_diff, last_handshake, collected_at, listen_port, persistent_keepalive_interval) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING id \"id!\"", "describe": { "columns": [ { @@ -10,11 +10,11 @@ } ], "parameters": { - "Right": 7 + "Right": 9 }, "nullable": [ true ] }, - "hash": "abded0999cc848a4baaad2e57a3247e9d7c7062bc43c84d3405a19c94006b8f8" + "hash": "7a39250f44f7415c09362f62efcc0b2eded31017ac7c2a531a4917db5100bfda" } diff --git a/src-tauri/.sqlx/query-17a3b10441e63bde5b97c861747617eadddbc843e42545860afdd8ad6951b4ee.json b/src-tauri/.sqlx/query-996cf1bb9cab0f82963a519f0991a5a19ee3e5d2729c16b26c5c7ce9d73a5b5b.json similarity index 52% rename from src-tauri/.sqlx/query-17a3b10441e63bde5b97c861747617eadddbc843e42545860afdd8ad6951b4ee.json rename to src-tauri/.sqlx/query-996cf1bb9cab0f82963a519f0991a5a19ee3e5d2729c16b26c5c7ce9d73a5b5b.json index 4c0ace380..dc9f97715 100644 --- a/src-tauri/.sqlx/query-17a3b10441e63bde5b97c861747617eadddbc843e42545860afdd8ad6951b4ee.json +++ b/src-tauri/.sqlx/query-996cf1bb9cab0f82963a519f0991a5a19ee3e5d2729c16b26c5c7ce9d73a5b5b.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "INSERT INTO tunnel_stats (tunnel_id, upload, download, last_handshake, collected_at, listen_port, persistent_keepalive_interval) VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING id \"id!\"", + "query": "INSERT INTO tunnel_stats (tunnel_id, upload, download, upload_diff, download_diff, last_handshake, collected_at, listen_port, persistent_keepalive_interval) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING id \"id!\"", "describe": { "columns": [ { @@ -10,11 +10,11 @@ } ], "parameters": { - "Right": 7 + "Right": 9 }, "nullable": [ true ] }, - "hash": "17a3b10441e63bde5b97c861747617eadddbc843e42545860afdd8ad6951b4ee" + "hash": "996cf1bb9cab0f82963a519f0991a5a19ee3e5d2729c16b26c5c7ce9d73a5b5b" } diff --git a/src-tauri/.sqlx/query-a694907453e48370dfc3f4de499d03dc47fa9fdd542af8c85764628f92133040.json b/src-tauri/.sqlx/query-a694907453e48370dfc3f4de499d03dc47fa9fdd542af8c85764628f92133040.json deleted file mode 100644 index e3f28c60e..000000000 --- a/src-tauri/.sqlx/query-a694907453e48370dfc3f4de499d03dc47fa9fdd542af8c85764628f92133040.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "db_name": "SQLite", - "query": "WITH cte AS (SELECT id, location_id, COALESCE(upload - LAG(upload) OVER (PARTITION BY location_id ORDER BY collected_at), 0) upload, COALESCE(download - LAG(download) OVER (PARTITION BY location_id ORDER BY collected_at), 0) download, last_handshake, strftime($1, collected_at) collected_at, listen_port, persistent_keepalive_interval FROM location_stats ORDER BY collected_at LIMIT -1 OFFSET 1) SELECT id, location_id, SUM(MAX(upload, 0)) \"upload!: i64\", SUM(MAX(download, 0)) \"download!: i64\", last_handshake, collected_at \"collected_at!: NaiveDateTime\", listen_port \"listen_port!: u32\", persistent_keepalive_interval \"persistent_keepalive_interval?: u16\" FROM cte WHERE location_id = $2 AND collected_at >= $3 GROUP BY collected_at ORDER BY collected_at LIMIT $4", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Integer" - }, - { - "name": "location_id", - "ordinal": 1, - "type_info": "Integer" - }, - { - "name": "upload!: i64", - "ordinal": 2, - "type_info": "Null" - }, - { - "name": "download!: i64", - "ordinal": 3, - "type_info": "Null" - }, - { - "name": "last_handshake", - "ordinal": 4, - "type_info": "Integer" - }, - { - "name": "collected_at!: NaiveDateTime", - "ordinal": 5, - "type_info": "Text" - }, - { - "name": "listen_port!: u32", - "ordinal": 6, - "type_info": "Integer" - }, - { - "name": "persistent_keepalive_interval?: u16", - "ordinal": 7, - "type_info": "Integer" - } - ], - "parameters": { - "Right": 4 - }, - "nullable": [ - false, - false, - true, - true, - false, - true, - false, - true - ] - }, - "hash": "a694907453e48370dfc3f4de499d03dc47fa9fdd542af8c85764628f92133040" -} diff --git a/src-tauri/.sqlx/query-a87e237432cfd0bc54575c4b5f6ff1283fadfa9f50ac1de75fa283be52e970a1.json b/src-tauri/.sqlx/query-a87e237432cfd0bc54575c4b5f6ff1283fadfa9f50ac1de75fa283be52e970a1.json new file mode 100644 index 000000000..eee6229fe --- /dev/null +++ b/src-tauri/.sqlx/query-a87e237432cfd0bc54575c4b5f6ff1283fadfa9f50ac1de75fa283be52e970a1.json @@ -0,0 +1,74 @@ +{ + "db_name": "SQLite", + "query": "SELECT id \"id!\", location_id,\n SUM(MAX(upload_diff, 0)) \"upload!: i64\", SUM(MAX(download_diff, 0)) \"download!: i64\", 0 \"upload_diff!: i64\", 0 \"download_diff!: i64\", last_handshake \"last_handshake!: i64\", strftime($1, collected_at) \"collected_at!: NaiveDateTime\", listen_port \"listen_port!: u32\", persistent_keepalive_interval \"persistent_keepalive_interval?: u16\" FROM location_stats WHERE location_id = $2 AND collected_at >= datetime(strftime($1, $3)) GROUP BY strftime($1, collected_at) ORDER BY collected_at LIMIT $4", + "describe": { + "columns": [ + { + "name": "id!", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "location_id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "upload!: i64", + "ordinal": 2, + "type_info": "Null" + }, + { + "name": "download!: i64", + "ordinal": 3, + "type_info": "Null" + }, + { + "name": "upload_diff!: i64", + "ordinal": 4, + "type_info": "Null" + }, + { + "name": "download_diff!: i64", + "ordinal": 5, + "type_info": "Null" + }, + { + "name": "last_handshake!: i64", + "ordinal": 6, + "type_info": "Integer" + }, + { + "name": "collected_at!: NaiveDateTime", + "ordinal": 7, + "type_info": "Null" + }, + { + "name": "listen_port!: u32", + "ordinal": 8, + "type_info": "Integer" + }, + { + "name": "persistent_keepalive_interval?: u16", + "ordinal": 9, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 4 + }, + "nullable": [ + true, + false, + null, + null, + null, + null, + false, + null, + false, + true + ] + }, + "hash": "a87e237432cfd0bc54575c4b5f6ff1283fadfa9f50ac1de75fa283be52e970a1" +} diff --git a/src-tauri/.sqlx/query-8e5e1ade31ec88a0e75eb5d8aa86aa8f73e244f6d3128b255a367ad19f534721.json b/src-tauri/.sqlx/query-ac0b93f9b64aa7f17824d4a55c714d8834ce46dacc032d2a900c36cd7c2b6a1e.json similarity index 62% rename from src-tauri/.sqlx/query-8e5e1ade31ec88a0e75eb5d8aa86aa8f73e244f6d3128b255a367ad19f534721.json rename to src-tauri/.sqlx/query-ac0b93f9b64aa7f17824d4a55c714d8834ce46dacc032d2a900c36cd7c2b6a1e.json index 44220f462..b953e7983 100644 --- a/src-tauri/.sqlx/query-8e5e1ade31ec88a0e75eb5d8aa86aa8f73e244f6d3128b255a367ad19f534721.json +++ b/src-tauri/.sqlx/query-ac0b93f9b64aa7f17824d4a55c714d8834ce46dacc032d2a900c36cd7c2b6a1e.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "WITH prev_download AS (\n SELECT download\n FROM tunnel_stats\n WHERE tunnel_id = $1\n ORDER BY collected_at DESC\n LIMIT 1 OFFSET 1\n )\n SELECT ts.id \"id!: i64\",\n ts.tunnel_id,\n ts.upload \"upload!: i64\",\n ts.download \"download!: i64\",\n ts.last_handshake,\n ts.collected_at \"collected_at!: NaiveDateTime\",\n ts.listen_port \"listen_port!: u32\",\n ts.persistent_keepalive_interval \"persistent_keepalive_interval!: u16\"\n FROM tunnel_stats ts\n LEFT JOIN prev_download pd\n WHERE ts.tunnel_id = $1\n AND (pd.download IS NULL OR ts.download != pd.download)\n ORDER BY ts.collected_at DESC\n LIMIT 1", + "query": "WITH prev_download AS (\n SELECT download\n FROM tunnel_stats\n WHERE tunnel_id = $1\n ORDER BY collected_at DESC\n LIMIT 1 OFFSET 1\n )\n SELECT ts.id \"id!: i64\",\n ts.tunnel_id,\n ts.upload \"upload!: i64\",\n ts.download \"download!: i64\",\n ts.upload_diff,\n ts.download_diff,\n ts.last_handshake,\n ts.collected_at \"collected_at!: NaiveDateTime\",\n ts.listen_port \"listen_port!: u32\",\n ts.persistent_keepalive_interval \"persistent_keepalive_interval!: u16\"\n FROM tunnel_stats ts\n LEFT JOIN prev_download pd\n WHERE ts.tunnel_id = $1\n AND (pd.download IS NULL OR ts.download != pd.download)\n ORDER BY ts.collected_at DESC\n LIMIT 1", "describe": { "columns": [ { @@ -24,23 +24,33 @@ "type_info": "Integer" }, { - "name": "last_handshake", + "name": "upload_diff", "ordinal": 4, "type_info": "Integer" }, { - "name": "collected_at!: NaiveDateTime", + "name": "download_diff", "ordinal": 5, + "type_info": "Integer" + }, + { + "name": "last_handshake", + "ordinal": 6, + "type_info": "Integer" + }, + { + "name": "collected_at!: NaiveDateTime", + "ordinal": 7, "type_info": "Datetime" }, { "name": "listen_port!: u32", - "ordinal": 6, + "ordinal": 8, "type_info": "Integer" }, { "name": "persistent_keepalive_interval!: u16", - "ordinal": 7, + "ordinal": 9, "type_info": "Integer" } ], @@ -48,6 +58,8 @@ "Right": 1 }, "nullable": [ + true, + false, false, false, false, @@ -58,5 +70,5 @@ false ] }, - "hash": "8e5e1ade31ec88a0e75eb5d8aa86aa8f73e244f6d3128b255a367ad19f534721" + "hash": "ac0b93f9b64aa7f17824d4a55c714d8834ce46dacc032d2a900c36cd7c2b6a1e" } diff --git a/src-tauri/.sqlx/query-db08146110d6df2759b34328c8ac6f87350d379fce3541ea43ed3519b5757d72.json b/src-tauri/.sqlx/query-db08146110d6df2759b34328c8ac6f87350d379fce3541ea43ed3519b5757d72.json deleted file mode 100644 index 3bc260a50..000000000 --- a/src-tauri/.sqlx/query-db08146110d6df2759b34328c8ac6f87350d379fce3541ea43ed3519b5757d72.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "db_name": "SQLite", - "query": "WITH cte AS (SELECT id, tunnel_id, COALESCE(upload - LAG(upload) OVER (PARTITION BY tunnel_id ORDER BY collected_at), 0) upload, COALESCE(download - LAG(download) OVER (PARTITION BY tunnel_id ORDER BY collected_at), 0) download, last_handshake, strftime($1, collected_at) collected_at, listen_port, persistent_keepalive_interval FROM tunnel_stats ORDER BY collected_at LIMIT -1 OFFSET 1) SELECT id, tunnel_id, SUM(MAX(upload, 0)) \"upload!: i64\", SUM(MAX(download, 0)) \"download!: i64\", last_handshake, collected_at \"collected_at!: NaiveDateTime\", listen_port \"listen_port!: u32\", persistent_keepalive_interval \"persistent_keepalive_interval!: u16\" FROM cte WHERE tunnel_id = $2 AND collected_at >= $3 GROUP BY collected_at ORDER BY collected_at", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Integer" - }, - { - "name": "tunnel_id", - "ordinal": 1, - "type_info": "Integer" - }, - { - "name": "upload!: i64", - "ordinal": 2, - "type_info": "Null" - }, - { - "name": "download!: i64", - "ordinal": 3, - "type_info": "Null" - }, - { - "name": "last_handshake", - "ordinal": 4, - "type_info": "Integer" - }, - { - "name": "collected_at!: NaiveDateTime", - "ordinal": 5, - "type_info": "Text" - }, - { - "name": "listen_port!: u32", - "ordinal": 6, - "type_info": "Integer" - }, - { - "name": "persistent_keepalive_interval!: u16", - "ordinal": 7, - "type_info": "Integer" - } - ], - "parameters": { - "Right": 3 - }, - "nullable": [ - false, - false, - true, - true, - false, - true, - false, - false - ] - }, - "hash": "db08146110d6df2759b34328c8ac6f87350d379fce3541ea43ed3519b5757d72" -} diff --git a/src-tauri/core/src/database/models/location_stats.rs b/src-tauri/core/src/database/models/location_stats.rs index aad5f3255..36d57432b 100644 --- a/src-tauri/core/src/database/models/location_stats.rs +++ b/src-tauri/core/src/database/models/location_stats.rs @@ -14,6 +14,8 @@ pub struct LocationStats { pub location_id: Id, upload: i64, download: i64, + upload_diff: i64, + download_diff: i64, pub last_handshake: i64, pub collected_at: NaiveDateTime, listen_port: u32, @@ -86,6 +88,8 @@ impl LocationStats { location_id, upload, download, + upload_diff: 0, + download_diff: 0, last_handshake, collected_at: Utc::now().naive_utc(), listen_port, @@ -93,18 +97,27 @@ impl LocationStats { } } + #[must_use] + pub fn with_diffs(mut self, upload_diff: i64, download_diff: i64) -> Self { + self.upload_diff = upload_diff; + self.download_diff = download_diff; + self + } + pub async fn save<'e, E>(self, executor: E) -> sqlx::Result> where E: SqliteExecutor<'e>, { let id = query_scalar!( - "INSERT INTO location_stats (location_id, upload, download, last_handshake, \ - collected_at, listen_port, persistent_keepalive_interval) \ - VALUES ($1, $2, $3, $4, $5, $6, $7) \ + "INSERT INTO location_stats (location_id, upload, download, upload_diff, download_diff, \ + last_handshake, collected_at, listen_port, persistent_keepalive_interval) \ + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) \ RETURNING id \"id!\"", self.location_id, self.upload, self.download, + self.upload_diff, + self.download_diff, self.last_handshake, self.collected_at, self.listen_port, @@ -118,6 +131,8 @@ impl LocationStats { location_id: self.location_id, upload: self.upload, download: self.download, + upload_diff: self.upload_diff, + download_diff: self.download_diff, last_handshake: self.last_handshake, collected_at: self.collected_at, listen_port: self.listen_port, @@ -143,21 +158,18 @@ impl LocationStats { let query_limit = limit.unwrap_or(-1); let stats = query_as!( LocationStats, - "WITH cte AS (\ - SELECT id, location_id, \ - COALESCE(upload - LAG(upload) OVER (PARTITION BY location_id ORDER BY collected_at), 0) upload, \ - COALESCE(download - LAG(download) OVER (PARTITION BY location_id ORDER BY collected_at), 0) download, \ - last_handshake, strftime($1, collected_at) collected_at, listen_port, persistent_keepalive_interval \ - FROM location_stats ORDER BY collected_at LIMIT -1 OFFSET 1) \ - SELECT id, location_id, \ - SUM(MAX(upload, 0)) \"upload!: i64\", \ - SUM(MAX(download, 0)) \"download!: i64\", \ - last_handshake, \ - collected_at \"collected_at!: NaiveDateTime\", \ - listen_port \"listen_port!: u32\", \ - persistent_keepalive_interval \"persistent_keepalive_interval?: u16\" \ - FROM cte WHERE location_id = $2 AND collected_at >= $3 \ - GROUP BY collected_at ORDER BY collected_at LIMIT $4", + "SELECT id \"id!\", location_id, + SUM(MAX(upload_diff, 0)) \"upload!: i64\", \ + SUM(MAX(download_diff, 0)) \"download!: i64\", \ + 0 \"upload_diff!: i64\", \ + 0 \"download_diff!: i64\", \ + last_handshake \"last_handshake!: i64\", \ + strftime($1, collected_at) \"collected_at!: NaiveDateTime\", \ + listen_port \"listen_port!: u32\", \ + persistent_keepalive_interval \"persistent_keepalive_interval?: u16\" \ + FROM location_stats \ + WHERE location_id = $2 AND collected_at >= datetime(strftime($1, $3)) \ + GROUP BY strftime($1, collected_at) ORDER BY collected_at LIMIT $4", aggregation, location_id, from, @@ -188,6 +200,8 @@ impl LocationStats { ls.location_id, ls.upload \"upload!: i64\", ls.download \"download!: i64\", + ls.upload_diff, + ls.download_diff, ls.last_handshake, ls.collected_at \"collected_at!: NaiveDateTime\", ls.listen_port \"listen_port!: u32\", diff --git a/src-tauri/core/src/database/models/mod.rs b/src-tauri/core/src/database/models/mod.rs index 449de17a2..429c8434d 100644 --- a/src-tauri/core/src/database/models/mod.rs +++ b/src-tauri/core/src/database/models/mod.rs @@ -14,7 +14,7 @@ pub type Id = i64; #[derive(Debug, Default, Deserialize, Eq, Hash, PartialEq, Serialize)] pub struct NoId; -const PURGE_DURATION: chrono::Duration = chrono::Duration::days(30); +const PURGE_DURATION: chrono::Duration = chrono::Duration::hours(28); #[cfg(target_os = "macos")] use self::{location::Location, tunnel::Tunnel}; diff --git a/src-tauri/core/src/database/models/tunnel.rs b/src-tauri/core/src/database/models/tunnel.rs index fc0cc7dfd..03f47b0ba 100644 --- a/src-tauri/core/src/database/models/tunnel.rs +++ b/src-tauri/core/src/database/models/tunnel.rs @@ -281,6 +281,8 @@ pub struct TunnelStats { pub tunnel_id: Id, upload: i64, download: i64, + upload_diff: i64, + download_diff: i64, pub last_handshake: i64, pub collected_at: NaiveDateTime, listen_port: u32, @@ -314,6 +316,8 @@ impl TunnelStats { tunnel_id, upload, download, + upload_diff: 0, + download_diff: 0, last_handshake, collected_at, listen_port, @@ -321,17 +325,26 @@ impl TunnelStats { } } + #[must_use] + pub fn with_diffs(mut self, upload_diff: i64, download_diff: i64) -> Self { + self.upload_diff = upload_diff; + self.download_diff = download_diff; + self + } + pub async fn save<'e, E>(self, executor: E) -> sqlx::Result> where E: SqliteExecutor<'e>, { let id = query_scalar!( - "INSERT INTO tunnel_stats (tunnel_id, upload, download, last_handshake, collected_at, \ - listen_port, persistent_keepalive_interval) \ - VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING id \"id!\"", + "INSERT INTO tunnel_stats (tunnel_id, upload, download, upload_diff, download_diff, \ + last_handshake, collected_at, listen_port, persistent_keepalive_interval) \ + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING id \"id!\"", self.tunnel_id, self.upload, self.download, + self.upload_diff, + self.download_diff, self.last_handshake, self.collected_at, self.listen_port, @@ -345,6 +358,8 @@ impl TunnelStats { tunnel_id: self.tunnel_id, upload: self.upload, download: self.download, + upload_diff: self.upload_diff, + download_diff: self.download_diff, last_handshake: self.last_handshake, collected_at: self.collected_at, listen_port: self.listen_port, @@ -366,20 +381,18 @@ impl TunnelStats { let aggregation = aggregation.fstring(); let stats = query_as!( TunnelStats, - "WITH cte AS (\ - SELECT id, tunnel_id, \ - COALESCE(upload - LAG(upload) OVER (PARTITION BY tunnel_id ORDER BY collected_at), 0) upload, \ - COALESCE(download - LAG(download) OVER (PARTITION BY tunnel_id ORDER BY collected_at), 0) download, \ - last_handshake, strftime($1, collected_at) collected_at, listen_port, persistent_keepalive_interval \ - FROM tunnel_stats ORDER BY collected_at LIMIT -1 OFFSET 1) \ - SELECT id, tunnel_id, \ - SUM(MAX(upload, 0)) \"upload!: i64\", \ - SUM(MAX(download, 0)) \"download!: i64\", \ - last_handshake, collected_at \"collected_at!: NaiveDateTime\", \ + "SELECT id \"id!\", tunnel_id, \ + SUM(MAX(upload_diff, 0)) \"upload!: i64\", \ + SUM(MAX(download_diff, 0)) \"download!: i64\", \ + 0 \"upload_diff!: i64\", \ + 0 \"download_diff!: i64\", \ + last_handshake \"last_handshake!: i64\", \ + strftime($1, collected_at) \"collected_at!: NaiveDateTime\", \ listen_port \"listen_port!: u32\", \ persistent_keepalive_interval \"persistent_keepalive_interval!: u16\" \ - FROM cte WHERE tunnel_id = $2 AND collected_at >= $3 \ - GROUP BY collected_at ORDER BY collected_at", + FROM tunnel_stats \ + WHERE tunnel_id = $2 AND collected_at >= datetime(strftime($1, $3)) \ + GROUP BY strftime($1, collected_at) ORDER BY collected_at", aggregation, tunnel_id, from @@ -409,6 +422,8 @@ impl TunnelStats { ts.tunnel_id, ts.upload \"upload!: i64\", ts.download \"download!: i64\", + ts.upload_diff, + ts.download_diff, ts.last_handshake, ts.collected_at \"collected_at!: NaiveDateTime\", ts.listen_port \"listen_port!: u32\", @@ -456,6 +471,8 @@ where tunnel_id: tunnel.id, upload: peer.tx_bytes.cast_signed(), download: peer.rx_bytes.cast_signed(), + upload_diff: 0, + download_diff: 0, last_handshake: peer.last_handshake.map_or(0, |ts| { ts.duration_since(SystemTime::UNIX_EPOCH) .map_or(0, |duration| duration.as_secs().cast_signed()) diff --git a/src-tauri/migrations/20260729120000_add_stats_diffs.sql b/src-tauri/migrations/20260729120000_add_stats_diffs.sql new file mode 100644 index 000000000..8138563ef --- /dev/null +++ b/src-tauri/migrations/20260729120000_add_stats_diffs.sql @@ -0,0 +1,11 @@ +ALTER TABLE location_stats ADD COLUMN upload_diff INTEGER NOT NULL DEFAULT 0; +ALTER TABLE location_stats ADD COLUMN download_diff INTEGER NOT NULL DEFAULT 0; + +ALTER TABLE tunnel_stats ADD COLUMN upload_diff BIGINT NOT NULL DEFAULT 0; +ALTER TABLE tunnel_stats ADD COLUMN download_diff BIGINT NOT NULL DEFAULT 0; + +CREATE INDEX idx_location_stats_location_collected + ON location_stats (location_id, collected_at); + +CREATE INDEX idx_tunnel_stats_tunnel_collected + ON tunnel_stats (tunnel_id, collected_at); diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index 876ac00cc..fc1d58991 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -1,7 +1,7 @@ -#[cfg(not(target_os = "macos"))] -use std::str::FromStr; #[cfg(target_os = "macos")] use std::time::Duration; +#[cfg(not(target_os = "macos"))] +use std::{collections::HashMap, str::FromStr}; use std::{env, process::Command}; #[cfg(target_os = "linux")] use std::{fs, path::Path}; @@ -55,6 +55,15 @@ use crate::{ #[cfg(target_os = "macos")] static TUNNEL_START_DELAY: Duration = Duration::from_secs(1); +fn stats_diffs(previous_totals: Option<(i64, i64)>, current_totals: (i64, i64)) -> (i64, i64) { + previous_totals.map_or((0, 0), |(previous_upload, previous_download)| { + ( + current_totals.0.saturating_sub(previous_upload).max(0), + current_totals.1.saturating_sub(previous_download).max(0), + ) + }) +} + #[cfg(target_os = "linux")] const NVIDIA_EXPLICIT_SYNC_ENV: &str = "__NV_DISABLE_EXPLICIT_SYNC"; #[cfg(target_os = "linux")] @@ -126,6 +135,7 @@ pub(crate) async fn stats_handler(id: Id, connection_type: ConnectionType) { let mut interval = tokio::time::interval(CHECK_INTERVAL); let pool = DB_POOL.clone(); + let mut previous_totals = None; loop { debug!("Waiting for the next stats collection interval for ID {id} and connection type {connection_type:?}"); @@ -135,6 +145,8 @@ pub(crate) async fn stats_handler(id: Id, connection_type: ConnectionType) { let Some(stats) = stats else { continue; }; + let current_totals = (stats.tx_bytes.cast_signed(), stats.rx_bytes.cast_signed()); + let (upload_diff, download_diff) = stats_diffs(previous_totals, current_totals); let mut transaction = match pool.begin().await { Ok(transactions) => transactions, @@ -145,6 +157,7 @@ pub(crate) async fn stats_handler(id: Id, connection_type: ConnectionType) { continue; } }; + let mut saved = false; if connection_type == ConnectionType::Location { let location_stats = LocationStats::new( @@ -154,10 +167,12 @@ pub(crate) async fn stats_handler(id: Id, connection_type: ConnectionType) { stats.last_handshake.cast_signed(), 0, None, - ); + ) + .with_diffs(upload_diff, download_diff); match location_stats.save(&mut *transaction).await { Ok(_) => { debug!("Saved network usage stats for location ID {id}"); + saved = true; } Err(err) => { error!("Failed to save network usage stats for location ID {id}: {err}"); @@ -172,10 +187,12 @@ pub(crate) async fn stats_handler(id: Id, connection_type: ConnectionType) { chrono::Utc::now().naive_utc(), 0, 0, - ); + ) + .with_diffs(upload_diff, download_diff); match tunnel_stats.save(&mut *transaction).await { Ok(_) => { debug!("Saved network usage stats for tunnel ID {id}"); + saved = true; } Err(err) => { error!("Failed to save network usage stats for tunnel ID {id}: {err}"); @@ -185,6 +202,8 @@ pub(crate) async fn stats_handler(id: Id, connection_type: ConnectionType) { if let Err(err) = transaction.commit().await { error!("Failed to commit database transaction for saving location/tunnel stats: {err}"); + } else if saved { + previous_totals = Some(current_totals); } } } @@ -201,6 +220,7 @@ pub(crate) async fn stats_handler(interface_name: String, connection_type: Conne .await .expect("Failed to connect to interface stats stream for interface {interface_name}") .into_inner(); + let mut previous_totals = HashMap::new(); loop { match stream.message().await { @@ -223,8 +243,10 @@ pub(crate) async fn stats_handler(interface_name: String, connection_type: Conne .peers .into_iter() .map(Into::into) - .collect::>(); + .collect::>(); + let mut pending_totals = Vec::new(); for peer in peers { + let current_totals = (peer.tx_bytes.cast_signed(), peer.rx_bytes.cast_signed()); if connection_type.eq(&ConnectionType::Location) { let location_stats = match peer_to_location_stats( &peer, @@ -249,9 +271,14 @@ pub(crate) async fn stats_handler(interface_name: String, connection_type: Conne (interface {interface_name})." ); trace!("Stats: {location_stats:?}"); + let location_id = location_stats.location_id; + let (upload_diff, download_diff) = + stats_diffs(previous_totals.get(&location_id).copied(), current_totals); + let location_stats = location_stats.with_diffs(upload_diff, download_diff); match location_stats.save(&mut *transaction).await { Ok(_) => { debug!("Saved network usage stats for location {location_name}"); + pending_totals.push((location_id, current_totals)); } Err(err) => { error!( @@ -282,9 +309,14 @@ pub(crate) async fn stats_handler(interface_name: String, connection_type: Conne "Saving network usage stats related to tunnel {tunnel_name} \ (interface {interface_name}): {tunnel_stats:?}" ); + let tunnel_id = tunnel_stats.tunnel_id; + let (upload_diff, download_diff) = + stats_diffs(previous_totals.get(&tunnel_id).copied(), current_totals); + let tunnel_stats = tunnel_stats.with_diffs(upload_diff, download_diff); match tunnel_stats.save(&mut *transaction).await { Ok(_) => { debug!("Saved stats for tunnel {tunnel_name}"); + pending_totals.push((tunnel_id, current_totals)); } Err(err) => { error!("Failed to save stats for tunnel {tunnel_name}: {err}"); @@ -299,6 +331,8 @@ pub(crate) async fn stats_handler(interface_name: String, connection_type: Conne "Failed to commit database transaction for saving location/tunnel stats: \ {err}", ); + } else { + previous_totals.extend(pending_totals); } } Ok(None) => { @@ -924,3 +958,23 @@ pub async fn sync_connections(app_handle: &AppHandle) -> Result<(), Error> { Ok(()) } + +#[cfg(test)] +mod tests { + use super::stats_diffs; + + #[test] + fn stats_diffs_returns_zero_for_first_sample() { + assert_eq!(stats_diffs(None, (100, 200)), (0, 0)); + } + + #[test] + fn stats_diffs_returns_counter_increments() { + assert_eq!(stats_diffs(Some((100, 200)), (150, 275)), (50, 75)); + } + + #[test] + fn stats_diffs_clamps_counter_resets_to_zero() { + assert_eq!(stats_diffs(Some((100, 200)), (50, 125)), (0, 0)); + } +} From 9deeba9554b5ca21eb1751101bd166341e3cfd0c Mon Sep 17 00:00:00 2001 From: Maciek <19913370+wojcik91@users.noreply.github.com> Date: Thu, 30 Jul 2026 10:27:23 +0200 Subject: [PATCH 130/155] handle WireGuard tunnels being disabled in core settings (#1070) * update proto submodule * add migration * update model structs * update query data * add helper method to derive flag status * update query data * gate tunnel-related commands * update InstanceInfo * handle in instance update function * add override to persist flag immediately if a connection is active * add helper to disconnect all active tunnels * wire the helper in polling loop and enrollment process * update frontend types * add mirror event for re-enabling tunnels * add event listeners * add route guards * hide Add tunnel card * hide UI elements * don't trigger MFA for tunnels * update notification wording * formatting * gate CLI commands * add helper for error guards * extract duplicate logic * emit events when adding/removing instance * replace macros * update proto submodule * update flake inputs * fix fetcher version * use shared source for node & pnpm version in nix setup * align node version across the repo --- .github/workflows/build-macos.yaml | 2 +- .github/workflows/e2e.yaml | 4 +- .github/workflows/lint.yaml | 2 +- .github/workflows/release-macos.yaml | 2 +- .github/workflows/release.yaml | 4 +- .nvmrc | 1 - flake.lock | 20 +-- new-ui/.nvmrc | 2 +- .../components/InstanceSwitcher.tsx | 26 ++-- new-ui/src/pages/full/AddPage/AddPage.tsx | 30 ++-- .../pages/full/OverviewPage/OverviewPage.tsx | 12 +- .../src/routes/full/_default/add/tunnel.tsx | 12 +- new-ui/src/routes/full/tunnel-wizard.tsx | 9 +- .../components/LocationCardConnectButton.tsx | 4 +- .../OverviewLocationCard.tsx | 5 +- .../shared/providers/TauriEventProvider.tsx | 13 ++ new-ui/src/shared/rust-api/query.ts | 14 +- new-ui/src/shared/rust-api/types.ts | 8 + new-ui/src/shared/utils/mfa.ts | 18 ++- nix/package.nix | 6 +- nix/shell.nix | 4 + nix/versions.nix | 16 ++ ...7537a9ed4111c1401021fe3813cb3cafc6ee.json} | 12 +- ...1747a306bcd437b9adbad38b3627910a6185.json} | 6 +- ...c854f048ef3679e8d07964cd7acefd8709d0.json} | 12 +- ...2c182ff2958180096fc0c85425fe6279138d.json} | 6 +- ...b91fce670a426d535f10de9f308a7db95484.json} | 12 +- ...c6837e5029ca20131c35901be3e898dbefb1e.json | 20 +++ ...fbab71aaa4c42fe8d8cde418708077622408.json} | 12 +- src-tauri/client-cli/src/commands/connect.rs | 4 + src-tauri/client-cli/src/commands/instance.rs | 1 + src-tauri/client-cli/src/commands/list.rs | 7 +- src-tauri/client-cli/src/commands/tunnel.rs | 4 +- src-tauri/client-cli/src/resolve.rs | 1 + src-tauri/client-cli/src/tests_daemon.rs | 1 + .../core/src/database/models/connection.rs | 1 + .../core/src/database/models/instance.rs | 146 ++++++++++++++++-- .../core/src/database/models/location.rs | 1 + .../src/database/models/location_stats.rs | 1 + src-tauri/core/src/error.rs | 2 + src-tauri/core/src/events.rs | 4 + .../enterprise/config-sync/src/commands.rs | 1 + src-tauri/enterprise/config-sync/src/lib.rs | 15 ++ .../20260724000000_disable_tunnels.sql | 1 + src-tauri/proto | 2 +- src-tauri/src/commands.rs | 59 ++++++- src-tauri/src/events.rs | 36 +++++ src-tauri/src/periodic/config.rs | 21 +++ 48 files changed, 515 insertions(+), 87 deletions(-) delete mode 100644 .nvmrc create mode 100644 nix/versions.nix rename src-tauri/.sqlx/{query-2d9b3c0595f2d385336d0a86cfdae1a4c327622977707117bf88b6a43e9e8f96.json => query-76adc350233d50db611cc827bd0f7537a9ed4111c1401021fe3813cb3cafc6ee.json} (83%) rename src-tauri/.sqlx/{query-0b161da55e36df9d0a10a52474a8cd49d4659d2d6faafdd2de0c985679d0703d.json => query-8d99d5b737d20d54afb6e0708d7d1747a306bcd437b9adbad38b3627910a6185.json} (55%) rename src-tauri/.sqlx/{query-7b9e30e8f67a024fb1ad94f76d16a22e221bdffc8ee37b777f26d02988f69bb1.json => query-c598f6e45f80389d4ceaf24a1d2fc854f048ef3679e8d07964cd7acefd8709d0.json} (83%) rename src-tauri/.sqlx/{query-c4a6b8e1c94eefc619c768ff4aac9aa248baf9553cea4f47ca9b1f6499bedaa3.json => query-d72c4c19cf9ed8247137d760a64c2c182ff2958180096fc0c85425fe6279138d.json} (55%) rename src-tauri/.sqlx/{query-157a0344c45c1b0567e8815c3f7b3667b753fb0b4b4c10d9d497b8f403ccb89d.json => query-eaac354b13bef778b251addee9a8b91fce670a426d535f10de9f308a7db95484.json} (83%) create mode 100644 src-tauri/.sqlx/query-fa461f6de14068995ec4ed0bddcc6837e5029ca20131c35901be3e898dbefb1e.json rename src-tauri/.sqlx/{query-3a157b6bcdba07c456e924798f797cdbdd6290ef6fa0420ddc0682ab10e14727.json => query-fb2ca29fd032be5e176379bd4da7fbab71aaa4c42fe8d8cde418708077622408.json} (79%) create mode 100644 src-tauri/migrations/20260724000000_disable_tunnels.sql diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index 41cca4495..88d64f604 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -41,7 +41,7 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: 26 + node-version-file: new-ui/.nvmrc - uses: pnpm/action-setup@v6 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 01109ecd8..8c33f3a9f 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -47,7 +47,7 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: 26 + node-version-file: new-ui/.nvmrc - name: Install pnpm uses: pnpm/action-setup@v6 @@ -133,7 +133,7 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: 26 + node-version-file: new-ui/.nvmrc - name: Install pnpm uses: pnpm/action-setup@v6 diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 575c9e160..1fa1ea547 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -30,7 +30,7 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: 26 + node-version-file: new-ui/.nvmrc - uses: pnpm/action-setup@v6 with: diff --git a/.github/workflows/release-macos.yaml b/.github/workflows/release-macos.yaml index 16250016c..d45d53fad 100644 --- a/.github/workflows/release-macos.yaml +++ b/.github/workflows/release-macos.yaml @@ -34,7 +34,7 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: 26 + node-version-file: new-ui/.nvmrc - uses: pnpm/action-setup@v6 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 9c316c5e0..172bf229c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -64,7 +64,7 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: 26 + node-version-file: new-ui/.nvmrc - name: Install pnpm uses: pnpm/action-setup@v6 @@ -181,7 +181,7 @@ jobs: echo "DEFGUARD_CLIENT_BUILD_VERSION=${GITHUB_REF_NAME#v}" >> ${GITHUB_ENV} - uses: actions/setup-node@v6 with: - node-version: 26 + node-version-file: new-ui/.nvmrc - uses: pnpm/action-setup@v6 with: diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 2f5838ac5..000000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v20.5 diff --git a/flake.lock b/flake.lock index 5409c70de..35dd08b55 100644 --- a/flake.lock +++ b/flake.lock @@ -14,11 +14,11 @@ }, "crane": { "locked": { - "lastModified": 1781825982, - "narHash": "sha256-SlXKwIRIhrOSAcTjCB3ftPLzJWZStQIPS7J1FlZPnKk=", + "lastModified": 1785284101, + "narHash": "sha256-ghcXEpYEM4a7pbEkoqbn8c0ptJJqgGzuFiG3T6W5g4I=", "owner": "ipetkov", "repo": "crane", - "rev": "469fd08d0bcf6926321fa973c6777fbc87785dd7", + "rev": "756d6d07c3818ea95d1e2cdac63fa7d02fe3e61b", "type": "github" }, "original": { @@ -59,11 +59,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1782636521, - "narHash": "sha256-Yf2TcFLw0r574fP/5eUN6N8el70HbYNdbDeeHpnK2eQ=", - "rev": "e1c1b84752fb0897897380a3cae9dc7fcab91ca3", + "lastModified": 1785141334, + "narHash": "sha256-jIYqF10/p99GhQYHFnT7XgCRWavkL4Iie1DEyIIZSc0=", + "rev": "38a4887411571457d700c51c64a6e49ead2ed5ab", "type": "tarball", - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.11pre1023798.e1c1b84752fb/nixexprs.tar.xz" + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.11pre1042399.38a488741157/nixexprs.tar.xz" }, "original": { "id": "nixpkgs", @@ -114,11 +114,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1782703273, - "narHash": "sha256-WJPfr9EAWVIuTMyb/ilHKUYlg/RNa0xrNiWR+p1iHUg=", + "lastModified": 1785302874, + "narHash": "sha256-fpKEww3TJoo1ANHO2q918ei+ayOrp0YEQAO1DuBLOB4=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "5106a604b3d67cffe8eb51a8bd9f04e607f0d31d", + "rev": "b99d48435bc3e34309d2c7ae6f7d45e77a156c38", "type": "github" }, "original": { diff --git a/new-ui/.nvmrc b/new-ui/.nvmrc index a682cfb97..6f4247a62 100644 --- a/new-ui/.nvmrc +++ b/new-ui/.nvmrc @@ -1 +1 @@ -v25 +26 diff --git a/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx b/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx index 175abf6ea..c182bced3 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx +++ b/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx @@ -9,6 +9,7 @@ import { useAppData } from '../../../../shared/providers/AppDataContext'; import { getInstancesQueryOptions, getTunnelsQueryOptions, + tunnelsDisabled, } from '../../../../shared/rust-api/query'; import type { OverviewViewSelection } from '../../../../shared/rust-api/types'; import { isPresent } from '../../../../shared/utils/isPresent'; @@ -35,17 +36,22 @@ export const InstanceSwitcher = () => { })), }; - const tunnelGroup: SelectOptionGroup = { - key: 'tunnels', - label: 'Tunnels', - options: tunnels.map((tunnel) => ({ - key: `tunnel-${tunnel.id ?? tunnel.name}`, - label: tunnel.name, - value: { kind: 'tunnel', id: tunnel.id }, - })), - }; + const tunnelGroup: SelectOptionGroup | undefined = + !tunnelsDisabled(instances ?? []) && tunnels.length > 0 + ? { + key: 'tunnels', + label: 'Tunnels', + options: tunnels.map((tunnel) => ({ + key: `tunnel-${tunnel.id ?? tunnel.name}`, + label: tunnel.name, + value: { kind: 'tunnel', id: tunnel.id }, + })), + } + : undefined; - return [instanceGroup, tunnelGroup]; + const result: SelectOptionGroup[] = [instanceGroup]; + if (tunnelGroup) result.push(tunnelGroup); + return result; }, [instances, tunnels]); const totalOptions = useMemo( diff --git a/new-ui/src/pages/full/AddPage/AddPage.tsx b/new-ui/src/pages/full/AddPage/AddPage.tsx index f23fe7efc..e7e0baf00 100644 --- a/new-ui/src/pages/full/AddPage/AddPage.tsx +++ b/new-ui/src/pages/full/AddPage/AddPage.tsx @@ -1,12 +1,18 @@ import './style.scss'; +import { useQuery } from '@tanstack/react-query'; import { useNavigate } from '@tanstack/react-router'; import { FullPageTitle } from '../../../shared/components/FullPageTitle/FullPageTitle'; import { FullPage } from '../../../shared/layouts/FullPage/FullPage'; +import { + getInstancesQueryOptions, + tunnelsDisabled, +} from '../../../shared/rust-api/query'; import { ThemeSpacing } from '../../../shared/types'; import { AddCard } from './components/AddCard/AddCard'; export const AddPage = () => { const navigate = useNavigate(); + const { data: instances } = useQuery(getInstancesQueryOptions); return ( @@ -22,17 +28,19 @@ export const AddPage = () => { actionText="Add instance" description={`Establish a secure connection to your Defguard instance effortlessly by configuring it with a single token—no manual setup.`} /> - { - navigate({ - to: '/full/add/tunnel', - }); - }} - title="Add WireGuard Tunnel" - actionText="Add tunnel" - description={`Add and configure a WireGuard tunnel to securely route traffic through an encrypted connection using predefined configuration.`} - /> + {!tunnelsDisabled(instances ?? []) && ( + { + navigate({ + to: '/full/add/tunnel', + }); + }} + title="Add WireGuard Tunnel" + actionText="Add tunnel" + description={`Add and configure a WireGuard tunnel to securely route traffic through an encrypted connection using predefined configuration.`} + /> + )}
    - -
    - {displayedLocations.map((location) => { - const isOpen = - location.id === openLocation || displayedLocations.length === 1; - return ( - { - if (isOpen) { - useAppStore.setState({ expandedLocation: null }); - } else { - useAppStore.setState({ expandedLocation: location.id }); - } - }} - /> - ); - })} -
    + +
    + +
    + {displayedLocations.map((location) => { + const isOpen = + location.id === openLocation || displayedLocations.length === 1; + return ( + { + if (isOpen) { + useAppStore.setState({ expandedLocation: null }); + } else { + useAppStore.setState({ expandedLocation: location.id }); + } + }} + /> + ); + })}
    - - )} +
    +
    diff --git a/new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.scss b/new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.scss deleted file mode 100644 index 9389f841e..000000000 --- a/new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.scss +++ /dev/null @@ -1,20 +0,0 @@ -.tray-connection-error { - flex: 1 1 auto; - box-sizing: border-box; - border-radius: var(--radius-lg); - padding: var(--spacing-lg); - background-color: var(--bg-dark-blue-40); - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: var(--spacing-2xl); - - .description { - width: 296px; - font: var(--t-body-xs-400); - color: var(--fg-white-100); - text-align: center; - opacity: 0.7; - } -} diff --git a/new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.tsx b/new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.tsx deleted file mode 100644 index d624a4e11..000000000 --- a/new-ui/src/pages/compact/CompactLocationsPage/components/TrayConnectionError.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import './TrayConnectionError.scss'; -import { Button } from '../../../../shared/components/Button/Button'; -import { ButtonVariant } from '../../../../shared/components/Button/types'; -import { Icon, IconKind } from '../../../../shared/components/Icon'; -import { useTrayConnectionError } from '../../../../shared/store/useAppStore'; - -export const TrayConnectionError = () => { - const close = () => useTrayConnectionError.setState({ visible: false }); - - return ( -
    - -

    - One or more external services are unavailable or unreachable. This may be caused - by a network issue or a temporary service outage. Please try again later. -

    -
    - ); -}; diff --git a/new-ui/src/shared/components/LocationCard/LocationCard.tsx b/new-ui/src/shared/components/LocationCard/LocationCard.tsx index 5c204e120..35a08166e 100644 --- a/new-ui/src/shared/components/LocationCard/LocationCard.tsx +++ b/new-ui/src/shared/components/LocationCard/LocationCard.tsx @@ -12,6 +12,7 @@ import { LocationCardProvider, useLocationCardContext } from './context/context' import { LocationCardViews, type LocationCardViewsValue } from './context/types'; import { ConnectedView } from './views/ConnectedView/ConnectedView'; import { DefaultView } from './views/DefaultView/DefaultView'; +import { LocationCardConnectionErrorView } from './views/LocationCardConnectionErrorView/LocationCardConnectionErrorView'; import { LocationCardMfaEmailView } from './views/LocationCardMfaEmailView/LocationCardMfaEmailView'; import { LocationCardMfaMobileView } from './views/LocationCardMfaMobileView/LocationCardMfaMobileView'; import { LocationCardMfaOidcView } from './views/LocationCardMfaOidcView/LocationCardMfaOidcView'; @@ -37,6 +38,7 @@ const views: Record = { [LocationCardViews.Connecting]: null, [LocationCardViews.Connected]: , [LocationCardViews.PostureCheckFail]: , + [LocationCardViews.ConnectionError]: , }; interface InnerProps { diff --git a/new-ui/src/shared/components/LocationCard/context/types.ts b/new-ui/src/shared/components/LocationCard/context/types.ts index a17e666e3..007abfe48 100644 --- a/new-ui/src/shared/components/LocationCard/context/types.ts +++ b/new-ui/src/shared/components/LocationCard/context/types.ts @@ -8,6 +8,7 @@ export const LocationCardViews = { Connecting: 'connecting', Connected: 'connected', PostureCheckFail: 'posture-check-fail', + ConnectionError: 'connection-error', } as const; export type LocationCardViewsValue = diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts index 2cc7611cc..0abb7e1d2 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts @@ -4,7 +4,6 @@ import { error } from '@tauri-apps/plugin-log'; import { useCallback, useEffect, useRef, useState } from 'react'; import { api } from '../../../rust-api/api'; import { getInstancesQueryOptions } from '../../../rust-api/query'; -import { useTrayConnectionError } from '../../../store/useAppStore'; import { CLIENT_MFA_ENDPOINT, isEdgeUnavailable, @@ -147,7 +146,7 @@ export const useMfaOidcConnect = () => { return; } if (isEdgeUnavailable(e)) { - useTrayConnectionError.setState({ visible: true }); + setView(LocationCardViews.ConnectionError); return; } setStartError( diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardConnectionErrorView/LocationCardConnectionErrorView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardConnectionErrorView/LocationCardConnectionErrorView.tsx new file mode 100644 index 000000000..a19ddd1c6 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardConnectionErrorView/LocationCardConnectionErrorView.tsx @@ -0,0 +1,33 @@ +import './style.scss'; +import { ThemeSpacing } from '../../../../types'; +import { Button } from '../../../Button/Button'; +import { ButtonVariant } from '../../../Button/types'; +import { Divider } from '../../../Divider/Divider'; +import { Icon, IconKind } from '../../../Icon'; +import { SizedBox } from '../../../SizedBox/SizedBox'; +import { useLocationCardContext } from '../../context/context'; +import { LocationCardViews } from '../../context/types'; + +export const LocationCardConnectionErrorView = () => { + const { setView } = useLocationCardContext(); + + return ( +
    + + + + +

    + One or more external services are unavailable or unreachable. This may be caused + by a network issue or a temporary service outage. Please try again later. +

    + +
    + ); +}; diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardConnectionErrorView/style.scss b/new-ui/src/shared/components/LocationCard/views/LocationCardConnectionErrorView/style.scss new file mode 100644 index 000000000..076a82814 --- /dev/null +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardConnectionErrorView/style.scss @@ -0,0 +1,11 @@ +.location-card-connection-error-view { + display: flex; + flex-direction: column; + align-items: center; + + .description { + font: var(--t-body-xs-400); + color: var(--fg-white-70); + text-align: center; + } +} diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx index 6be641c3c..4b1387ba7 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx @@ -1,5 +1,4 @@ import { useCallback, useEffect, useState } from 'react'; -import { useTrayConnectionError } from '../../../../store/useAppStore'; import { ThemeSpacing } from '../../../../types'; import { isPresent } from '../../../../utils/isPresent'; import { Button } from '../../../Button/Button'; @@ -33,7 +32,7 @@ export const LocationCardMfaEmailView = () => { setPostureError(msg); setView(LocationCardViews.PostureCheckFail); }, - onServiceUnavailable: () => useTrayConnectionError.setState({ visible: true }), + onServiceUnavailable: () => setView(LocationCardViews.ConnectionError), }, ); diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx index 91fb81923..a3bb41f12 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaMobileView/LocationCardMfaMobileView.tsx @@ -1,6 +1,5 @@ import './style.scss'; import { useEffect, useRef, useState } from 'react'; -import { useTrayConnectionError } from '../../../../store/useAppStore'; import { ThemeSpacing } from '../../../../types'; import { Button } from '../../../Button/Button'; import { ButtonVariant } from '../../../Button/types'; @@ -22,7 +21,7 @@ export const LocationCardMfaMobileView = () => { const { start, startError, qrValue, connectionError } = useMfaMobileConnect(location, { onConnected: () => setView(LocationCardViews.Connected), onPostureError: (message) => setPostureError(message ?? null), - onServiceUnavailable: () => useTrayConnectionError.setState({ visible: true }), + onServiceUnavailable: () => setView(LocationCardViews.ConnectionError), }); const [screen, setScreen] = useState('loading'); const startedRef = useRef(false); diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx index 98e16f1bd..f6b0f3bcd 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx @@ -1,5 +1,4 @@ import { useCallback, useEffect, useState } from 'react'; -import { useTrayConnectionError } from '../../../../store/useAppStore'; import { ThemeSpacing } from '../../../../types'; import { isPresent } from '../../../../utils/isPresent'; import { Button } from '../../../Button/Button'; @@ -33,7 +32,7 @@ export const LocationCardMfaTotpView = () => { setPostureError(msg); setView(LocationCardViews.PostureCheckFail); }, - onServiceUnavailable: () => useTrayConnectionError.setState({ visible: true }), + onServiceUnavailable: () => setView(LocationCardViews.ConnectionError), }, ); diff --git a/new-ui/src/shared/store/useAppStore.tsx b/new-ui/src/shared/store/useAppStore.tsx index 47329fb92..d013881c3 100644 --- a/new-ui/src/shared/store/useAppStore.tsx +++ b/new-ui/src/shared/store/useAppStore.tsx @@ -20,11 +20,3 @@ export const useAppStore = create()( }, ), ); - -interface TrayConnectionErrorStore { - visible: boolean; -} - -export const useTrayConnectionError = create(() => ({ - visible: false, -})); From b76dd5cde65eceb75b7502658bf46cc246742a7a Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 15 Jul 2026 11:43:54 +0200 Subject: [PATCH 117/155] Connect from tray (#1047) --- new-ui/biome.json | 2 +- new-ui/package.json | 18 +- new-ui/pnpm-lock.yaml | 608 +++++++++--------- .../components/ConnectModal/hooks/types.ts | 17 + .../LocationCard/context/context.tsx | 17 +- .../OverviewLocationCard.tsx | 22 +- .../shared/providers/TauriEventProvider.tsx | 53 +- new-ui/src/shared/store/useAppStore.tsx | 4 + nix/package.nix | 4 +- package.json | 14 +- pnpm-lock.yaml | 268 ++++---- src-tauri/Cargo.lock | 501 +++++---------- src-tauri/src/apple.rs | 8 +- src-tauri/src/tray.rs | 27 +- src-tauri/src/window_manager/mod.rs | 37 +- src/pages/client/ClientPage.tsx | 19 +- .../client/components/MfaModalProvider.tsx | 11 +- 17 files changed, 742 insertions(+), 888 deletions(-) diff --git a/new-ui/biome.json b/new-ui/biome.json index 22d0e686f..cb2c99f92 100644 --- a/new-ui/biome.json +++ b/new-ui/biome.json @@ -1,6 +1,6 @@ { "root": true, - "$schema": "https://biomejs.dev/schemas/2.5.1/schema.json", + "$schema": "https://biomejs.dev/schemas/2.5.3/schema.json", "vcs": { "enabled": false, "clientKind": "git", diff --git a/new-ui/package.json b/new-ui/package.json index 71af3ebc3..faf7a279e 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -13,20 +13,20 @@ "preview": "vite preview" }, "dependencies": { - "@biomejs/biome": "2.5.1", - "@floating-ui/react": "^0.27.19", + "@biomejs/biome": "2.5.3", + "@floating-ui/react": "^0.27.20", "@stablelib/base64": "^2.0.1", "@stablelib/x25519": "^2.0.1", - "@tanstack/react-form": "^1.33.0", + "@tanstack/react-form": "^1.33.2", "@tanstack/react-query": "^5.101.2", - "@tanstack/react-router": "^1.170.17", - "@tanstack/router-plugin": "^1.168.19", + "@tanstack/react-router": "^1.170.18", + "@tanstack/router-plugin": "^1.168.20", "@tauri-apps/api": "^2.11.1", "@tauri-apps/plugin-clipboard-manager": "^2.3.2", "@tauri-apps/plugin-dialog": "^2.7.1", "@tauri-apps/plugin-fs": "^2.5.1", "@tauri-apps/plugin-http": "^2.5.9", - "@tauri-apps/plugin-log": "^2.8.0", + "@tauri-apps/plugin-log": "^2.9.0", "@tauri-apps/plugin-opener": "^2.5.4", "@tauri-apps/plugin-os": "^2.3.2", "@uidotdev/usehooks": "^2.4.1", @@ -36,7 +36,7 @@ "dayjs": "^1.11.21", "motion": "^12.42.2", "p-timeout": "^7.0.1", - "prettier": "^3.9.4", + "prettier": "^3.9.5", "qrcode.react": "^4.2.0", "radashi": "^12.9.1", "react": "^19.2.7", @@ -55,7 +55,7 @@ "devDependencies": { "@tanstack/devtools-vite": "^0.8.1", "@types/byte-size": "^8.1.2", - "@types/node": "^26.1.0", + "@types/node": "^26.1.1", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.3", @@ -65,6 +65,6 @@ "stylelint-config-standard-scss": "^17.0.0", "stylelint-scss": "^7.2.0", "typescript": "~6.0.3", - "vite": "^8.1.3" + "vite": "^8.1.4" } } diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index 198aa1a0a..7913b5ed2 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -9,11 +9,11 @@ importers: .: dependencies: '@biomejs/biome': - specifier: 2.5.1 - version: 2.5.1 + specifier: 2.5.3 + version: 2.5.3 '@floating-ui/react': - specifier: ^0.27.19 - version: 0.27.19(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + specifier: ^0.27.20 + version: 0.27.20(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@stablelib/base64': specifier: ^2.0.1 version: 2.0.1 @@ -21,17 +21,17 @@ importers: specifier: ^2.0.1 version: 2.0.1 '@tanstack/react-form': - specifier: ^1.33.0 - version: 1.33.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + specifier: ^1.33.2 + version: 1.33.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/react-query': specifier: ^5.101.2 version: 5.101.2(react@19.2.7) '@tanstack/react-router': - specifier: ^1.170.17 - version: 1.170.17(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + specifier: ^1.170.18 + version: 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/router-plugin': - specifier: ^1.168.19 - version: 1.168.19(@tanstack/react-router@1.170.17(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(rolldown@1.1.4)(vite@8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0)) + specifier: ^1.168.20 + version: 1.168.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(rolldown@1.1.5)(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) '@tauri-apps/api': specifier: ^2.11.1 version: 2.11.1 @@ -48,8 +48,8 @@ importers: specifier: ^2.5.9 version: 2.5.9 '@tauri-apps/plugin-log': - specifier: ^2.8.0 - version: 2.8.0 + specifier: ^2.9.0 + version: 2.9.0 '@tauri-apps/plugin-opener': specifier: ^2.5.4 version: 2.5.4 @@ -78,8 +78,8 @@ importers: specifier: ^7.0.1 version: 7.0.1 prettier: - specifier: ^3.9.4 - version: 3.9.4 + specifier: ^3.9.5 + version: 3.9.5 qrcode.react: specifier: ^4.2.0 version: 4.2.0(react@19.2.7) @@ -125,13 +125,13 @@ importers: devDependencies: '@tanstack/devtools-vite': specifier: ^0.8.1 - version: 0.8.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(vite@8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0)) + version: 0.8.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) '@types/byte-size': specifier: ^8.1.2 version: 8.1.2 '@types/node': - specifier: ^26.1.0 - version: 26.1.0 + specifier: ^26.1.1 + version: 26.1.1 '@types/react': specifier: ^19.2.17 version: 19.2.17 @@ -140,10 +140,10 @@ importers: version: 19.2.3(@types/react@19.2.17) '@vitejs/plugin-react': specifier: ^6.0.3 - version: 6.0.3(vite@8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0)) + version: 6.0.3(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) autoprefixer: specifier: ^10.5.2 - version: 10.5.2(postcss@8.5.16) + version: 10.5.2(postcss@8.5.19) globals: specifier: ^17.7.0 version: 17.7.0 @@ -152,7 +152,7 @@ importers: version: 17.14.0(typescript@6.0.3) stylelint-config-standard-scss: specifier: ^17.0.0 - version: 17.0.0(postcss@8.5.16)(stylelint@17.14.0(typescript@6.0.3)) + version: 17.0.0(postcss@8.5.19)(stylelint@17.14.0(typescript@6.0.3)) stylelint-scss: specifier: ^7.2.0 version: 7.2.0(stylelint@17.14.0(typescript@6.0.3)) @@ -160,8 +160,8 @@ importers: specifier: ~6.0.3 version: 6.0.3 vite: - specifier: ^8.1.3 - version: 8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0) + specifier: ^8.1.4 + version: 8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) packages: @@ -232,59 +232,59 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@biomejs/biome@2.5.1': - resolution: {integrity: sha512-IXWLCxKmae+rI7LOHS1B3EbVisQ6GRAWbhN9msa6KjNCyFWrvKZWR4oUdinaNssrV852OrSHuSPa95h1GPJc7Q==} + '@biomejs/biome@2.5.3': + resolution: {integrity: sha512-MrJswFdei9EfDwwUy2tQrPDpK0AO+RmMFvBoaaJ6ayBc3sUbHdCE+XG5N8vp+5So41ZupZJQm0roHFFhMGVD7A==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.5.1': - resolution: {integrity: sha512-npqDzvqv7vFaWRiNN1Te71siRgPaqS9MpqgYCdP/CrUbkJ7ApezaeaKjueKHRN/JH/6lRjJQAHi8acQDCAz22w==} + '@biomejs/cli-darwin-arm64@2.5.3': + resolution: {integrity: sha512-QhYP9muVQ0nUO5zztFuPbEwi4+94sJWVjaZds9aMi1l/KNZBiUjdiSUrGHsTaMGDXrYl+r4AS2sUKfgH3w+V3g==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.5.1': - resolution: {integrity: sha512-RgwTqPAM8g2tn1j+b5oRjF/DbSBX8a4gwojtuG9XuhfK7GgomvZ9+T+tqjXiVbjLEeGJOoL6VEk8mvRTVeSybw==} + '@biomejs/cli-darwin-x64@2.5.3': + resolution: {integrity: sha512-NC1Ss13UaW7QZX+y8j44bF7AP0jSJdBl6iRhe0MAkvaSqZy+mWg3GaXsrb+eSoHoGDBtaXWEbMVV0iVN2cZ7cQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.5.1': - resolution: {integrity: sha512-WMcvMLgByyTqVxGlq918NBBYliq9FRR9GAQVETHb+VjGVqXCZFfHlZHC1FX4ibuYY/Hg6TJE3rHU0xVrdJXNRw==} + '@biomejs/cli-linux-arm64-musl@2.5.3': + resolution: {integrity: sha512-fccix0w6xp6csCXgxeC0dU/3ecgRQal0y+cv2SP9ajNlhe7Yrk2Ug7UDe2j9AT9ZDYitkXpvUKgZjjuoYeP4Vg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.5.1': - resolution: {integrity: sha512-yhV35CzZh38VyMvTEXi3JTjxZBs++oCKK9KG8vB6VI5+uvQvZNR3BFWEKKzuOmx9DJJj7sQpZ4LQJcmbGTs3+Q==} + '@biomejs/cli-linux-arm64@2.5.3': + resolution: {integrity: sha512-ksx1KWeyYW18ILL04msF/J4ZBtBDN33znYK8Z/aNv/vlBVxL9/g3mGP+omgHJKy4+KWbK87vcmmpmurfNjSgiA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.5.1': - resolution: {integrity: sha512-ANTowtlLmPYm5yeMckWY8Xzb9Ix+JJP3tgHR/n6xRj1VWyIzzWtfRfih9hv9VmClwadpBvZduISZIbBsIlYG3A==} + '@biomejs/cli-linux-x64-musl@2.5.3': + resolution: {integrity: sha512-O/yU9YKRUiHhmcjF2f38PSjseVk3G4VLWYc0G2HWpzdBVREV6G8IGWIVEFf7MFPfWIzNUIvPsEjeAZQIOgnLcQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.5.1': - resolution: {integrity: sha512-J/7uHSX7NfoYDI7HijAkd8lnQIOrRb2W7j3X+tw4R+N5ExvXGsyXFiGdQcfcxfOmNQmZVSQOCDk757fwpzqQcg==} + '@biomejs/cli-linux-x64@2.5.3': + resolution: {integrity: sha512-yMkJtilsgvILDcVkh187aVLTb64xYsrxYajx5kym+r1ULkO5HUOfu9AYKLGQbOVLwJtT2utNw7hhFNg+17mUYA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.5.1': - resolution: {integrity: sha512-zgXnKNgWPC4iPF7Y1lR3STUeCUuZRpD6IiOrC7TZTlh0Lx6FiVUT05myuMQHQ9D+1cc7uyMldi4forE6lp0ivQ==} + '@biomejs/cli-win32-arm64@2.5.3': + resolution: {integrity: sha512-cX5z+GYwRcqEok0AH3KSfQGgqYd0Nomfp6Fbe1uiTtELE38hdH2k842wQ9wLNaF/JJ7r4rjJQ4VR+ce+fRmQbw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.5.1': - resolution: {integrity: sha512-6uxpR9hvaglANkZemeSiN/FhYgkGasrEGn267eXIWvjrjJ2LhDlk251IhjVJq6MXzkV2/bcXwLwSroLyPtqRZg==} + '@biomejs/cli-win32-x64@2.5.3': + resolution: {integrity: sha512-ExSaJWi4/u6+GXCszlSKpWSjKNbDseAYqqkCznsCsZ/4uidZ/BEqsCc5/3ctlq6dfIubdIIRSVLC/PG9xPl70Q==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -348,26 +348,26 @@ packages: '@emnapi/wasi-threads@1.2.2': resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} - '@floating-ui/core@1.7.5': - resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} - '@floating-ui/dom@1.7.6': - resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} - '@floating-ui/react-dom@2.1.8': - resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} + '@floating-ui/react-dom@2.1.9': + resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/react@0.27.19': - resolution: {integrity: sha512-31B8h5mm8YxotlE7/AU/PhNAl8eWxAmjL/v2QOxroDNkTFLk3Uu82u63N3b6TXa4EGJeeZLVcd/9AlNlVqzeog==} + '@floating-ui/react@0.27.20': + resolution: {integrity: sha512-CMqMy7OaXl9W0eq1Uy7L7i2Y/anPvHmFmESd2CEw0t5YvZhcVCeo4MBevAmswRllX7Y2dEidA4ozGPunLSTQpw==} peerDependencies: react: '>=17.0.0' react-dom: '>=17.0.0' - '@floating-ui/utils@0.2.11': - resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -545,8 +545,8 @@ packages: '@oxc-project/types@0.120.0': resolution: {integrity: sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==} - '@oxc-project/types@0.138.0': - resolution: {integrity: sha512-1a7ZKmrRTCoN1XMZ4L0PyyqrMnrNlLyPuOkdSX2MZg7IiIGRUyurNhAm73ptDOraoBcIordsIGKNPKUzy3ZmfA==} + '@oxc-project/types@0.139.0': + resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} @@ -636,97 +636,97 @@ packages: resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} - '@rolldown/binding-android-arm64@1.1.4': - resolution: {integrity: sha512-EZLpf/8y7GXkkra90ML47kzik/GMP3EMcE9bPyHmRfxLC6z9+aW5A8poCsoxjrT5GfEcNAAvWwUHjvP1pUQkfw==} + '@rolldown/binding-android-arm64@1.1.5': + resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.1.4': - resolution: {integrity: sha512-aUi+HBvmYb7j8krl1+qJgkG8C17fO79gk3c+jPw4S8glRFc1DTija9S3EyaTSQUm5GJXYKDAsugBEhFHH2vYiQ==} + '@rolldown/binding-darwin-arm64@1.1.5': + resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.1.4': - resolution: {integrity: sha512-F7hHC3gwY11+vByKPRWqwGbeXWVgKmL+pTGCinaEhdihzBV2aQ0fvZOch9cXYUOKuKKq429HeYXOqQLc7wFCEg==} + '@rolldown/binding-darwin-x64@1.1.5': + resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.1.4': - resolution: {integrity: sha512-sI5yw+7s92SK6odiEhD5lKCBlWcpjHS5qyqpVQbZAJ0fIzEUXrmbl3DH2ybR3PZogulNJF+COLtmA8hUfvkCCQ==} + '@rolldown/binding-freebsd-x64@1.1.5': + resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.1.4': - resolution: {integrity: sha512-mCi0OKgEieFircrtVYmQAFGszRtMnZ6fpZAXrxanXAu7lqZcsK1E1RAaZNG0uKAnxox3B1f4EyQNnoyMfN1vAA==} + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.1.4': - resolution: {integrity: sha512-B9Ial3Kv5sh0SHnB1g/QWcUQCEvCF6QKGAl4zXypYj65mVI+B4AhFBwPtSN7pDrJeIx8Z7zdy4ntx+wQABom7w==} + '@rolldown/binding-linux-arm64-gnu@1.1.5': + resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.1.4': - resolution: {integrity: sha512-lZVym0PuHE1KZ22gmFTC15lAkrg9iTszR617oYRB/iPY1A56ywoJzVKOJBKaot5RiikCObmur6pogpse3gRcng==} + '@rolldown/binding-linux-arm64-musl@1.1.5': + resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.1.4': - resolution: {integrity: sha512-t2DNiLJWNTbnEHyUzTumldML6ET4/g16467LZoDDJ3tSxGvguL5/NyC2lCsNKuyRycg9XeDQF5SSv+TNOhQEXg==} + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.1.4': - resolution: {integrity: sha512-0WIRnL1Uw4BvTZRLQt+PVgo6ZKTJadlC2btP+/EOXv2f/DWbY0rEgl+y834mIVwP1FkTlWVTrGGJXf12lru7EQ==} + '@rolldown/binding-linux-s390x-gnu@1.1.5': + resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.1.4': - resolution: {integrity: sha512-JWtGshGfX+oENAKonoNkqEJX+7hC8yfhi9GUyPX1VX4mdh1y5r+ZiJLR5XzAB0aoP6s/PcILsGjKq8O0mm24bw==} + '@rolldown/binding-linux-x64-gnu@1.1.5': + resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.1.4': - resolution: {integrity: sha512-rT6yQcxUuXs4CnbofqwHRRV0iem349rLMYpTjkgQGLjrY4ado/eDzwPZPTCgTOlF6Nkp8NEv70yLMTn6qkWxsQ==} + '@rolldown/binding-linux-x64-musl@1.1.5': + resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.1.4': - resolution: {integrity: sha512-KXMGoboq5cyaCQjDA4GLuRiOwBQ0EyFnJoVViLeZ45/3rFItRODEr+NdsBcVpll40hhNArlm/speWGRvj08LzA==} + '@rolldown/binding-openharmony-arm64@1.1.5': + resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.1.4': - resolution: {integrity: sha512-5K83rb36oJiY7BCyE9zLZtGcPV4g5wvq+xwdO0XPIwDVZI8cyB/AUjkNXGb92/rnmezEkjMOpgY61rtwjQtFwg==} + '@rolldown/binding-wasm32-wasi@1.1.5': + resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.1.4': - resolution: {integrity: sha512-PnWBtw3TV5KOg69HQQDR0mnQuyCmSGR2pAB4DC1rPF808fgKeTUMj2EOEyKATpgiuxuR5APQmiDO7PDgEjTFSA==} + '@rolldown/binding-win32-arm64-msvc@1.1.5': + resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.1.4': - resolution: {integrity: sha512-M1lpniBePobTfsa7Ks9a199e1akxsXn+GYBUKsEzv3YFzOm1HJAMNwKI3qr0Zq+mxwx9gOZoTdP1yXRYsZUocQ==} + '@rolldown/binding-win32-x64-msvc@1.1.5': + resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -787,8 +787,8 @@ packages: peerDependencies: vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@tanstack/form-core@1.33.0': - resolution: {integrity: sha512-AV4Pw9Dk4orFsuPBcDssfWMJFs+yMYBae7zZ4oTqrCf4ftNGQKxvrQRZeqKHG6A4TkiLeSvf2kzIjcVkrW7E6w==} + '@tanstack/form-core@1.33.2': + resolution: {integrity: sha512-F60zJd15bGrXKonc1kpRYnNRNfiES7F+hgvrPMrsZznPLqZtO2DIg76OU6R25kCYkqYQY5xvuKteuWcUsc587A==} '@tanstack/history@1.162.0': resolution: {integrity: sha512-79pf/RkhteYZTRgcR4F9kbk84P2N8rugQJswxfIqovlbRiT3yI7eBE+5QorIrZaOKktsgzRlXh1l/du/xpl4iA==} @@ -801,8 +801,8 @@ packages: '@tanstack/query-core@5.101.2': resolution: {integrity: sha512-hH5MLoJhF7KaIGd7q3xTXGXvslI+GYlM1Z/35aSHHWaCJWB7XvTSHYuV3eM7tw+aE0mT/xMro4M4Q9rCGHT0lw==} - '@tanstack/react-form@1.33.0': - resolution: {integrity: sha512-unaee+VS4MvKo+s1dmgGUXI4902VeAhuaUbKsQbhFe3MceOpB3JpAUGCDpyzjQPXVFkFY0COKfLrUNX2XZYW4g==} + '@tanstack/react-form@1.33.2': + resolution: {integrity: sha512-nEfayOu+27q5cZ5E0G5dmnddqLcLjdFCatbL/LCs/iLD469a1o1yYJlr8RISV3GfnqsBpm0hf+8kM4okh5fPCw==} peerDependencies: '@tanstack/react-start': '*' react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -815,8 +815,8 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-router@1.170.17': - resolution: {integrity: sha512-ppLkjCfSMaeug9rmFRYzOd4TIqWV+yTE7tzIny7alJsSnM7w4lzEZm6eqCehG0SPetpZ0R3K+UnanSmBgOAVcQ==} + '@tanstack/react-router@1.170.18': + resolution: {integrity: sha512-wpbGYZEp/fmz1q4bn7BD8VZ+/VZ7GBqSJv5V969pU+chP8y7dquWDmKTFMohvUegb9lg12m1uPVvD6kB2wORvQ==} engines: {node: '>=20.19'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -834,20 +834,20 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.171.14': - resolution: {integrity: sha512-Mo3hwx0qB0cJsVYGDjG0+Ouf7VV74h/vsoDMGztdlyzDanp4gBA2s7IVvm6hFrmQM6GpD9F0Z7SqD7OldfLE7g==} + '@tanstack/router-core@1.171.15': + resolution: {integrity: sha512-IILCDcLaItMZQ2jEmCABHY1Nhjjn5XUvwpQp3e4Nmu+vfg0BgYFuu/QASz2SwE2ZNbVMrvt8X/wxa+Gg5aErxA==} engines: {node: '>=20.19'} - '@tanstack/router-generator@1.167.18': - resolution: {integrity: sha512-kFvM4caRds9Q3EXg64bZubJ6rbDxyV0YDSBSGvOGzmKspQPdz5Xrh0uj5T1Ov8avUUg+c761u04VQAaEzSBXRw==} + '@tanstack/router-generator@1.167.19': + resolution: {integrity: sha512-db3AQGLinf8ZQ8AKMyxLVWwHIFZxtx+zLktvPXv/nFH/B793/Z7lKLl4dUWM3JpAluynDSVVKaTWQVTAgTYmVA==} engines: {node: '>=20.19'} - '@tanstack/router-plugin@1.168.19': - resolution: {integrity: sha512-aFglwLc+bbPTgZlkXn3PvOwpjJAfgUyPGSuql4MP3XrqTTh6WkBiy2RYb6oaG5h0s7EKwivEuq85K3Y4V0Mt1g==} + '@tanstack/router-plugin@1.168.20': + resolution: {integrity: sha512-G5S63xDr2AxADtWP+0tQtJsduijT/Mk85hDh3Od4ct8UV0PHr2f/H1CGl72lYWLgcWRMn6bKJoQhz27QFIgLRQ==} engines: {node: '>=20.19'} peerDependencies: '@rsbuild/core': '>=1.0.2 || ^2.0.0' - '@tanstack/react-router': ^1.170.17 + '@tanstack/react-router': ^1.170.18 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0' vite-plugin-solid: ^2.11.10 || ^3.0.0-0 webpack: '>=5.92.0' @@ -892,8 +892,8 @@ packages: '@tauri-apps/plugin-http@2.5.9': resolution: {integrity: sha512-lCiY0+vs4HvIUSvZrBs8TC3TiCB0MOPRmiUjTq4prW7SlcJE2jdLeT6KBsJrT9Tlplufl7W1pY6SFAO3gCWxDA==} - '@tauri-apps/plugin-log@2.8.0': - resolution: {integrity: sha512-a+7rOq3MJwpTOLLKbL8d0qGZ85hgHw5pNOWusA9o3cf7cEgtYHiGY/+O8fj8MvywQIGqFv0da2bYQDlrqLE7rw==} + '@tauri-apps/plugin-log@2.9.0': + resolution: {integrity: sha512-Ql8okrnsguk0eDq1GvRfttFV5KaeW/7vcao6bdbkXCRJ1+2sWE15ZJvJVEKVANrOKy1mRngqC3IFIAP+wP5qSw==} '@tauri-apps/plugin-opener@2.5.4': resolution: {integrity: sha512-1HnPkb+AmgO29HBazm4uPLKB+r7zzcTBW1d0fyYp1uP+jwtpoiNDGKMMzz58SFp49nOIrxdE3aUJtT57lfO9CQ==} @@ -916,8 +916,8 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -925,8 +925,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@26.1.0': - resolution: {integrity: sha512-O0A1G3xPGy4w7AgQdAQYUlQ+BKk2Oovw8eRpofyp5KdBZULnbe+WqaOVNrm705SHphCiG4XHsACrSmPu1f+Kgw==} + '@types/node@26.1.1': + resolution: {integrity: sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==} '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} @@ -949,8 +949,8 @@ packages: react: '>=18.0.0' react-dom: '>=18.0.0' - '@ungap/structured-clone@1.3.2': - resolution: {integrity: sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==} + '@ungap/structured-clone@1.3.3': + resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==} '@vitejs/plugin-react@6.0.3': resolution: {integrity: sha512-vmFvco5/QuC2f9Oj+wTk0+9XeDFkHxSamwZKYc7MxYwKICfvUvlMhqKI0VuICPltGqh1neqBKDvO4kes1ya8vg==} @@ -1004,8 +1004,8 @@ packages: bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - baseline-browser-mapping@2.10.40: - resolution: {integrity: sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==} + baseline-browser-mapping@2.10.43: + resolution: {integrity: sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -1013,8 +1013,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.28.4: - resolution: {integrity: sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==} + browserslist@4.28.6: + resolution: {integrity: sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1034,8 +1034,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001800: - resolution: {integrity: sha512-MMHtuAz9Ys840zAY5F4k6fV5GaivZ9sPk+nz0mY+GYVzRBnYkN0mpqkSR92oWRQ19yQWo4HvBV/FnC16AJX8MA==} + caniuse-lite@1.0.30001805: + resolution: {integrity: sha512-52noaS3DubycKSXaU30TwPGIp+POyQSUVa5jBEq3vkRkY0kjyb3LQgvhU6WGyCcyXqVLWO0Cw0Q6BSdD0kUfVA==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1142,8 +1142,8 @@ packages: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} - electron-to-chromium@1.5.384: - resolution: {integrity: sha512-g6KAKY1vkYsADvSPWvdJsuYT0ixdcu6lUtD9P/wJKGBEDlZVXh2AX42j1mPqqaQPDluWjara9ziQ7xqAeXCt5A==} + electron-to-chromium@1.5.389: + resolution: {integrity: sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1258,8 +1258,8 @@ packages: resolution: {integrity: sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==} engines: {node: '>=18'} - globby@16.2.0: - resolution: {integrity: sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==} + globby@16.2.1: + resolution: {integrity: sha512-JmsqJalahxxgW8V2ecSQ2G7UjPlI9cpKdrkG9KoNiXhd/YslXOTEB0cViENWUznuovIuNT+FkMbraDGjr4FCUg==} engines: {node: '>=20'} globjoin@0.1.4: @@ -1313,8 +1313,8 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + ignore@7.0.6: + resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==} engines: {node: '>= 4'} immutable@5.1.9: @@ -1376,8 +1376,8 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - isbot@5.1.44: - resolution: {integrity: sha512-PGEHtwMnKbZpeSEXW2Utx+/JWed7dp6DiH0WWg33vGSDA7RUvpUeJSVlLrVkQ1RCpvDOUc/eH9ql7VsdbBZ8pA==} + isbot@5.2.0: + resolution: {integrity: sha512-gbZiGCb4B5xaoxg9mS7koAyRdvJnArk10VLSHOgz6rtBG93/pi1xOFaVvXMKZ7JXgyZ8zAbNRK5uIBdIUTFSqw==} engines: {node: '>=18'} isexe@2.0.0: @@ -1693,8 +1693,8 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-releases@2.0.50: - resolution: {integrity: sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==} + node-releases@2.0.51: + resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} engines: {node: '>=18'} normalize-path@3.0.0: @@ -1733,8 +1733,8 @@ packages: resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} postcss-media-query-parser@0.2.3: @@ -1762,12 +1762,12 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.16: - resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} + postcss@8.5.19: + resolution: {integrity: sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==} engines: {node: ^10 || ^12 || >=14} - prettier@3.9.4: - resolution: {integrity: sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg==} + prettier@3.9.5: + resolution: {integrity: sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==} engines: {node: '>=14'} hasBin: true @@ -1850,8 +1850,8 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown@1.1.4: - resolution: {integrity: sha512-IjZYiLxZwpnhwhdBH2ugdTGVSdhCQUmLxLoqyjiL0JxYjyRst+5a0P3xfrTxJ5F638j4Mvvw5FAX5XE6eHpXbA==} + rolldown@1.1.5: + resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -1873,18 +1873,18 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - seroval-plugins@1.5.4: - resolution: {integrity: sha512-S0xQPhUTefAhNvNWFg0c1J8qJArHt5KdtJ/cFAofo06KD1MVSeFWyl4iiu+ApDIuw0WhjpOfCdgConOfAnLgkw==} + seroval-plugins@1.5.5: + resolution: {integrity: sha512-+BDhqYM6CEn3x09v44dpa9p6974FuUB2dxk+Ctn04k0cO1Zt6QODTXfmEZK0eBaTe/fJBvP4NMGuNJ+R8T+QMg==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 - seroval@1.5.4: - resolution: {integrity: sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==} + seroval@1.5.5: + resolution: {integrity: sha512-bSjOuPcwPKLSJNhr9+bZxA20nQxVle5J5MNsYRVE6cIg7KpRLXGupymePavu0jrxlPiPsr4xGZSB8yUY2sH2sw==} engines: {node: '>=10'} - shell-quote@1.9.0: - resolution: {integrity: sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==} + shell-quote@1.10.0: + resolution: {integrity: sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==} engines: {node: '>= 0.4'} signal-exit@4.1.0: @@ -1910,8 +1910,8 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@8.2.1: - resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} + string-width@8.2.2: + resolution: {integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==} engines: {node: '>=20'} stringify-entities@4.0.4: @@ -2095,8 +2095,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@8.1.3: - resolution: {integrity: sha512-Ds+gBRbj0lwRO2Y5hwnUBdxSwlAve9LeRyU4sNnAr0ewW0gWF0n5bgXgUzbgZ49MV9BVUAQUFYVcDUcilUExMA==} + vite@8.1.4: + resolution: {integrity: sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -2233,7 +2233,7 @@ snapshots: dependencies: '@babel/compat-data': 7.29.7 '@babel/helper-validator-option': 7.29.7 - browserslist: 4.28.4 + browserslist: 4.28.6 lru-cache: 5.1.1 semver: 6.3.1 @@ -2293,39 +2293,39 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@biomejs/biome@2.5.1': + '@biomejs/biome@2.5.3': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.5.1 - '@biomejs/cli-darwin-x64': 2.5.1 - '@biomejs/cli-linux-arm64': 2.5.1 - '@biomejs/cli-linux-arm64-musl': 2.5.1 - '@biomejs/cli-linux-x64': 2.5.1 - '@biomejs/cli-linux-x64-musl': 2.5.1 - '@biomejs/cli-win32-arm64': 2.5.1 - '@biomejs/cli-win32-x64': 2.5.1 - - '@biomejs/cli-darwin-arm64@2.5.1': + '@biomejs/cli-darwin-arm64': 2.5.3 + '@biomejs/cli-darwin-x64': 2.5.3 + '@biomejs/cli-linux-arm64': 2.5.3 + '@biomejs/cli-linux-arm64-musl': 2.5.3 + '@biomejs/cli-linux-x64': 2.5.3 + '@biomejs/cli-linux-x64-musl': 2.5.3 + '@biomejs/cli-win32-arm64': 2.5.3 + '@biomejs/cli-win32-x64': 2.5.3 + + '@biomejs/cli-darwin-arm64@2.5.3': optional: true - '@biomejs/cli-darwin-x64@2.5.1': + '@biomejs/cli-darwin-x64@2.5.3': optional: true - '@biomejs/cli-linux-arm64-musl@2.5.1': + '@biomejs/cli-linux-arm64-musl@2.5.3': optional: true - '@biomejs/cli-linux-arm64@2.5.1': + '@biomejs/cli-linux-arm64@2.5.3': optional: true - '@biomejs/cli-linux-x64-musl@2.5.1': + '@biomejs/cli-linux-x64-musl@2.5.3': optional: true - '@biomejs/cli-linux-x64@2.5.1': + '@biomejs/cli-linux-x64@2.5.3': optional: true - '@biomejs/cli-win32-arm64@2.5.1': + '@biomejs/cli-win32-arm64@2.5.3': optional: true - '@biomejs/cli-win32-x64@2.5.1': + '@biomejs/cli-win32-x64@2.5.3': optional: true '@cacheable/memory@2.2.0': @@ -2384,30 +2384,30 @@ snapshots: tslib: 2.8.1 optional: true - '@floating-ui/core@1.7.5': + '@floating-ui/core@1.8.0': dependencies: - '@floating-ui/utils': 0.2.11 + '@floating-ui/utils': 0.2.12 - '@floating-ui/dom@1.7.6': + '@floating-ui/dom@1.8.0': dependencies: - '@floating-ui/core': 1.7.5 - '@floating-ui/utils': 0.2.11 + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 - '@floating-ui/react-dom@2.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@floating-ui/react-dom@2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@floating-ui/dom': 1.7.6 + '@floating-ui/dom': 1.8.0 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - '@floating-ui/react@0.27.19(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@floating-ui/react@0.27.20(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@floating-ui/react-dom': 2.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@floating-ui/utils': 0.2.11 + '@floating-ui/react-dom': 2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@floating-ui/utils': 0.2.12 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) tabbable: 6.5.0 - '@floating-ui/utils@0.2.11': {} + '@floating-ui/utils@0.2.12': {} '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -2524,7 +2524,7 @@ snapshots: '@oxc-project/types@0.120.0': {} - '@oxc-project/types@0.138.0': {} + '@oxc-project/types@0.139.0': {} '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -2570,7 +2570,7 @@ snapshots: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 - picomatch: 4.0.4 + picomatch: 4.0.5 optionalDependencies: '@parcel/watcher-android-arm64': 2.5.6 '@parcel/watcher-darwin-arm64': 2.5.6 @@ -2587,53 +2587,53 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.6 optional: true - '@rolldown/binding-android-arm64@1.1.4': + '@rolldown/binding-android-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-arm64@1.1.4': + '@rolldown/binding-darwin-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-x64@1.1.4': + '@rolldown/binding-darwin-x64@1.1.5': optional: true - '@rolldown/binding-freebsd-x64@1.1.4': + '@rolldown/binding-freebsd-x64@1.1.5': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.1.4': + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': optional: true - '@rolldown/binding-linux-arm64-gnu@1.1.4': + '@rolldown/binding-linux-arm64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-arm64-musl@1.1.4': + '@rolldown/binding-linux-arm64-musl@1.1.5': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.1.4': + '@rolldown/binding-linux-ppc64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-s390x-gnu@1.1.4': + '@rolldown/binding-linux-s390x-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-gnu@1.1.4': + '@rolldown/binding-linux-x64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-musl@1.1.4': + '@rolldown/binding-linux-x64-musl@1.1.5': optional: true - '@rolldown/binding-openharmony-arm64@1.1.4': + '@rolldown/binding-openharmony-arm64@1.1.5': optional: true - '@rolldown/binding-wasm32-wasi@1.1.4': + '@rolldown/binding-wasm32-wasi@1.1.5': dependencies: '@emnapi/core': 1.11.1 '@emnapi/runtime': 1.11.1 '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true - '@rolldown/binding-win32-arm64-msvc@1.1.4': + '@rolldown/binding-win32-arm64-msvc@1.1.5': optional: true - '@rolldown/binding-win32-x64-msvc@1.1.4': + '@rolldown/binding-win32-x64-msvc@1.1.5': optional: true '@rolldown/pluginutils@1.0.1': {} @@ -2682,7 +2682,7 @@ snapshots: '@tanstack/devtools-event-client@0.5.0': {} - '@tanstack/devtools-vite@0.8.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(vite@8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0))': + '@tanstack/devtools-vite@0.8.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0))': dependencies: '@tanstack/devtools-client': 0.0.8 '@tanstack/devtools-event-bus': 0.4.2 @@ -2690,15 +2690,15 @@ snapshots: launch-editor: 2.14.1 magic-string: 0.30.21 oxc-parser: 0.120.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) - picomatch: 4.0.4 - vite: 8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0) + picomatch: 4.0.5 + vite: 8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' - bufferutil - utf-8-validate - '@tanstack/form-core@1.33.0': + '@tanstack/form-core@1.33.2': dependencies: '@tanstack/devtools-event-client': 0.4.4 '@tanstack/pacer-lite': 0.1.1 @@ -2710,9 +2710,9 @@ snapshots: '@tanstack/query-core@5.101.2': {} - '@tanstack/react-form@1.33.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@tanstack/react-form@1.33.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@tanstack/form-core': 1.33.0 + '@tanstack/form-core': 1.33.2 '@tanstack/react-store': 0.11.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 transitivePeerDependencies: @@ -2723,12 +2723,12 @@ snapshots: '@tanstack/query-core': 5.101.2 react: 19.2.7 - '@tanstack/react-router@1.170.17(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@tanstack/history': 1.162.0 '@tanstack/react-store': 0.9.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@tanstack/router-core': 1.171.14 - isbot: 5.1.44 + '@tanstack/router-core': 1.171.15 + isbot: 5.2.0 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) @@ -2746,40 +2746,40 @@ snapshots: react-dom: 19.2.7(react@19.2.7) use-sync-external-store: 1.6.0(react@19.2.7) - '@tanstack/router-core@1.171.14': + '@tanstack/router-core@1.171.15': dependencies: '@tanstack/history': 1.162.0 cookie-es: 3.1.1 - seroval: 1.5.4 - seroval-plugins: 1.5.4(seroval@1.5.4) + seroval: 1.5.5 + seroval-plugins: 1.5.5(seroval@1.5.5) - '@tanstack/router-generator@1.167.18': + '@tanstack/router-generator@1.167.19': dependencies: '@babel/types': 7.29.7 - '@tanstack/router-core': 1.171.14 + '@tanstack/router-core': 1.171.15 '@tanstack/router-utils': 1.162.2 '@tanstack/virtual-file-routes': 1.162.0 jiti: 2.7.0 magic-string: 0.30.21 - prettier: 3.9.4 + prettier: 3.9.5 zod: 4.4.3 transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.168.19(@tanstack/react-router@1.170.17(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(rolldown@1.1.4)(vite@8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0))': + '@tanstack/router-plugin@1.168.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(rolldown@1.1.5)(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0))': dependencies: '@babel/core': 7.29.7 '@babel/template': 7.29.7 '@babel/types': 7.29.7 - '@tanstack/router-core': 1.171.14 - '@tanstack/router-generator': 1.167.18 + '@tanstack/router-core': 1.171.15 + '@tanstack/router-generator': 1.167.19 '@tanstack/router-utils': 1.162.2 chokidar: 5.0.0 - unplugin: 3.3.0(rolldown@1.1.4)(vite@8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0)) + unplugin: 3.3.0(rolldown@1.1.5)(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) zod: 4.4.3 optionalDependencies: - '@tanstack/react-router': 1.170.17(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - vite: 8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0) + '@tanstack/react-router': 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + vite: 8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -2827,7 +2827,7 @@ snapshots: dependencies: '@tauri-apps/api': 2.11.1 - '@tauri-apps/plugin-log@2.8.0': + '@tauri-apps/plugin-log@2.9.0': dependencies: '@tauri-apps/api': 2.11.1 @@ -2856,7 +2856,7 @@ snapshots: '@types/estree@1.0.9': {} - '@types/hast@3.0.4': + '@types/hast@3.0.5': dependencies: '@types/unist': 3.0.3 @@ -2866,7 +2866,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@26.1.0': + '@types/node@26.1.1': dependencies: undici-types: 8.3.0 @@ -2887,12 +2887,12 @@ snapshots: react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - '@ungap/structured-clone@1.3.2': {} + '@ungap/structured-clone@1.3.3': {} - '@vitejs/plugin-react@6.0.3(vite@8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0))': + '@vitejs/plugin-react@6.0.3(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0) + vite: 8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) ajv@8.20.0: dependencies: @@ -2915,13 +2915,13 @@ snapshots: astral-regex@2.0.0: {} - autoprefixer@10.5.2(postcss@8.5.16): + autoprefixer@10.5.2(postcss@8.5.19): dependencies: - browserslist: 4.28.4 - caniuse-lite: 1.0.30001800 + browserslist: 4.28.6 + caniuse-lite: 1.0.30001805 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.16 + postcss: 8.5.19 postcss-value-parser: 4.2.0 babel-dead-code-elimination@1.0.12: @@ -2935,19 +2935,19 @@ snapshots: bail@2.0.2: {} - baseline-browser-mapping@2.10.40: {} + baseline-browser-mapping@2.10.43: {} braces@3.0.3: dependencies: fill-range: 7.1.1 - browserslist@4.28.4: + browserslist@4.28.6: dependencies: - baseline-browser-mapping: 2.10.40 - caniuse-lite: 1.0.30001800 - electron-to-chromium: 1.5.384 - node-releases: 2.0.50 - update-browserslist-db: 1.2.3(browserslist@4.28.4) + baseline-browser-mapping: 2.10.43 + caniuse-lite: 1.0.30001805 + electron-to-chromium: 1.5.389 + node-releases: 2.0.51 + update-browserslist-db: 1.2.3(browserslist@4.28.6) byte-size@9.0.1: {} @@ -2961,7 +2961,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001800: {} + caniuse-lite@1.0.30001805: {} ccount@2.0.1: {} @@ -3039,7 +3039,7 @@ snapshots: diff@8.0.4: {} - electron-to-chromium@1.5.384: {} + electron-to-chromium@1.5.389: {} emoji-regex@8.0.0: {} @@ -3077,9 +3077,9 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.5.0(picomatch@4.0.4): + fdir@6.5.0(picomatch@4.0.5): optionalDependencies: - picomatch: 4.0.4 + picomatch: 4.0.5 file-entry-cache@11.1.5: dependencies: @@ -3131,11 +3131,11 @@ snapshots: globals@17.7.0: {} - globby@16.2.0: + globby@16.2.1: dependencies: '@sindresorhus/merge-streams': 4.0.0 fast-glob: 3.3.3 - ignore: 7.0.5 + ignore: 7.0.6 is-path-inside: 4.0.0 slash: 5.1.0 unicorn-magic: 0.4.0 @@ -3150,7 +3150,7 @@ snapshots: hast-util-from-parse5@8.0.3: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 9.0.1 @@ -3161,13 +3161,13 @@ snapshots: hast-util-parse-selector@4.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-raw@9.1.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 - '@ungap/structured-clone': 1.3.2 + '@ungap/structured-clone': 1.3.3 hast-util-from-parse5: 8.0.3 hast-util-to-parse5: 8.0.1 html-void-elements: 3.0.0 @@ -3181,14 +3181,14 @@ snapshots: hast-util-sanitize@5.0.2: dependencies: - '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.3.2 + '@types/hast': 3.0.5 + '@ungap/structured-clone': 1.3.3 unist-util-position: 5.0.0 hast-util-to-jsx-runtime@2.3.6: dependencies: '@types/estree': 1.0.9 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 devlop: 1.1.0 @@ -3207,7 +3207,7 @@ snapshots: hast-util-to-parse5@8.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 comma-separated-tokens: 2.0.3 devlop: 1.1.0 property-information: 7.2.0 @@ -3217,11 +3217,11 @@ snapshots: hast-util-whitespace@3.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hastscript@9.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 property-information: 7.2.0 @@ -3237,7 +3237,7 @@ snapshots: html-void-elements@3.0.0: {} - ignore@7.0.5: {} + ignore@7.0.6: {} immutable@5.1.9: {} @@ -3281,7 +3281,7 @@ snapshots: is-plain-object@5.0.0: {} - isbot@5.1.44: {} + isbot@5.2.0: {} isexe@2.0.0: {} @@ -3312,7 +3312,7 @@ snapshots: launch-editor@2.14.1: dependencies: picocolors: 1.1.1 - shell-quote: 1.9.0 + shell-quote: 1.10.0 lightningcss-android-arm64@1.32.0: optional: true @@ -3465,7 +3465,7 @@ snapshots: mdast-util-mdx-expression@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.0.3 @@ -3476,7 +3476,7 @@ snapshots: mdast-util-mdx-jsx@3.2.0: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/unist': 3.0.3 ccount: 2.0.1 @@ -3493,7 +3493,7 @@ snapshots: mdast-util-mdxjs-esm@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.0.3 @@ -3508,9 +3508,9 @@ snapshots: mdast-util-to-hast@13.2.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.2 + '@ungap/structured-clone': 1.3.3 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 @@ -3757,7 +3757,7 @@ snapshots: node-addon-api@7.1.1: optional: true - node-releases@2.0.50: {} + node-releases@2.0.51: {} normalize-path@3.0.0: {} @@ -3822,19 +3822,19 @@ snapshots: picomatch@2.3.2: {} - picomatch@4.0.4: {} + picomatch@4.0.5: {} postcss-media-query-parser@0.2.3: {} postcss-resolve-nested-selector@0.1.6: {} - postcss-safe-parser@7.0.1(postcss@8.5.16): + postcss-safe-parser@7.0.1(postcss@8.5.19): dependencies: - postcss: 8.5.16 + postcss: 8.5.19 - postcss-scss@4.0.9(postcss@8.5.16): + postcss-scss@4.0.9(postcss@8.5.19): dependencies: - postcss: 8.5.16 + postcss: 8.5.19 postcss-selector-parser@7.1.4: dependencies: @@ -3843,13 +3843,13 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.16: + postcss@8.5.19: dependencies: nanoid: 3.3.15 picocolors: 1.1.1 source-map-js: 1.2.1 - prettier@3.9.4: {} + prettier@3.9.5: {} property-information@7.2.0: {} @@ -3881,7 +3881,7 @@ snapshots: react-markdown@10.1.0(@types/react@19.2.17)(react@19.2.7): dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/react': 19.2.17 devlop: 1.1.0 @@ -3903,13 +3903,13 @@ snapshots: rehype-raw@7.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-raw: 9.1.0 vfile: 6.0.3 rehype-sanitize@6.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-sanitize: 5.0.2 remark-gfm@4.0.1: @@ -3934,7 +3934,7 @@ snapshots: remark-rehype@11.1.2: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 mdast-util-to-hast: 13.2.1 unified: 11.0.5 @@ -3952,26 +3952,26 @@ snapshots: reusify@1.1.0: {} - rolldown@1.1.4: + rolldown@1.1.5: dependencies: - '@oxc-project/types': 0.138.0 + '@oxc-project/types': 0.139.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.1.4 - '@rolldown/binding-darwin-arm64': 1.1.4 - '@rolldown/binding-darwin-x64': 1.1.4 - '@rolldown/binding-freebsd-x64': 1.1.4 - '@rolldown/binding-linux-arm-gnueabihf': 1.1.4 - '@rolldown/binding-linux-arm64-gnu': 1.1.4 - '@rolldown/binding-linux-arm64-musl': 1.1.4 - '@rolldown/binding-linux-ppc64-gnu': 1.1.4 - '@rolldown/binding-linux-s390x-gnu': 1.1.4 - '@rolldown/binding-linux-x64-gnu': 1.1.4 - '@rolldown/binding-linux-x64-musl': 1.1.4 - '@rolldown/binding-openharmony-arm64': 1.1.4 - '@rolldown/binding-wasm32-wasi': 1.1.4 - '@rolldown/binding-win32-arm64-msvc': 1.1.4 - '@rolldown/binding-win32-x64-msvc': 1.1.4 + '@rolldown/binding-android-arm64': 1.1.5 + '@rolldown/binding-darwin-arm64': 1.1.5 + '@rolldown/binding-darwin-x64': 1.1.5 + '@rolldown/binding-freebsd-x64': 1.1.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 + '@rolldown/binding-linux-arm64-gnu': 1.1.5 + '@rolldown/binding-linux-arm64-musl': 1.1.5 + '@rolldown/binding-linux-ppc64-gnu': 1.1.5 + '@rolldown/binding-linux-s390x-gnu': 1.1.5 + '@rolldown/binding-linux-x64-gnu': 1.1.5 + '@rolldown/binding-linux-x64-musl': 1.1.5 + '@rolldown/binding-openharmony-arm64': 1.1.5 + '@rolldown/binding-wasm32-wasi': 1.1.5 + '@rolldown/binding-win32-arm64-msvc': 1.1.5 + '@rolldown/binding-win32-x64-msvc': 1.1.5 run-parallel@1.2.0: dependencies: @@ -3993,13 +3993,13 @@ snapshots: semver@6.3.1: {} - seroval-plugins@1.5.4(seroval@1.5.4): + seroval-plugins@1.5.5(seroval@1.5.5): dependencies: - seroval: 1.5.4 + seroval: 1.5.5 - seroval@1.5.4: {} + seroval@1.5.5: {} - shell-quote@1.9.0: {} + shell-quote@1.10.0: {} signal-exit@4.1.0: {} @@ -4021,7 +4021,7 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@8.2.1: + string-width@8.2.2: dependencies: get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 @@ -4047,26 +4047,26 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - stylelint-config-recommended-scss@17.0.1(postcss@8.5.16)(stylelint@17.14.0(typescript@6.0.3)): + stylelint-config-recommended-scss@17.0.1(postcss@8.5.19)(stylelint@17.14.0(typescript@6.0.3)): dependencies: - postcss-scss: 4.0.9(postcss@8.5.16) + postcss-scss: 4.0.9(postcss@8.5.19) stylelint: 17.14.0(typescript@6.0.3) stylelint-config-recommended: 18.0.0(stylelint@17.14.0(typescript@6.0.3)) stylelint-scss: 7.2.0(stylelint@17.14.0(typescript@6.0.3)) optionalDependencies: - postcss: 8.5.16 + postcss: 8.5.19 stylelint-config-recommended@18.0.0(stylelint@17.14.0(typescript@6.0.3)): dependencies: stylelint: 17.14.0(typescript@6.0.3) - stylelint-config-standard-scss@17.0.0(postcss@8.5.16)(stylelint@17.14.0(typescript@6.0.3)): + stylelint-config-standard-scss@17.0.0(postcss@8.5.19)(stylelint@17.14.0(typescript@6.0.3)): dependencies: stylelint: 17.14.0(typescript@6.0.3) - stylelint-config-recommended-scss: 17.0.1(postcss@8.5.16)(stylelint@17.14.0(typescript@6.0.3)) + stylelint-config-recommended-scss: 17.0.1(postcss@8.5.19)(stylelint@17.14.0(typescript@6.0.3)) stylelint-config-standard: 40.0.0(stylelint@17.14.0(typescript@6.0.3)) optionalDependencies: - postcss: 8.5.16 + postcss: 8.5.19 stylelint-config-standard@40.0.0(stylelint@17.14.0(typescript@6.0.3)): dependencies: @@ -4106,21 +4106,21 @@ snapshots: fastest-levenshtein: 1.0.16 file-entry-cache: 11.1.5 global-modules: 2.0.0 - globby: 16.2.0 + globby: 16.2.1 globjoin: 0.1.4 html-tags: 5.1.0 - ignore: 7.0.5 + ignore: 7.0.6 import-meta-resolve: 4.2.0 mathml-tag-names: 4.0.0 meow: 14.1.0 micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.16 - postcss-safe-parser: 7.0.1(postcss@8.5.16) + postcss: 8.5.19 + postcss-safe-parser: 7.0.1(postcss@8.5.19) postcss-selector-parser: 7.1.4 postcss-value-parser: 4.2.0 - string-width: 8.2.1 + string-width: 8.2.2 supports-hyperlinks: 4.5.0 svg-tags: 1.0.0 table: 6.9.0 @@ -4150,8 +4150,8 @@ snapshots: tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 to-regex-range@5.0.1: dependencies: @@ -4202,18 +4202,18 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - unplugin@3.3.0(rolldown@1.1.4)(vite@8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0)): + unplugin@3.3.0(rolldown@1.1.5)(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)): dependencies: '@jridgewell/remapping': 2.3.5 - picomatch: 4.0.4 + picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 optionalDependencies: - rolldown: 1.1.4 - vite: 8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0) + rolldown: 1.1.5 + vite: 8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) - update-browserslist-db@1.2.3(browserslist@4.28.4): + update-browserslist-db@1.2.3(browserslist@4.28.6): dependencies: - browserslist: 4.28.4 + browserslist: 4.28.6 escalade: 3.2.0 picocolors: 1.1.1 @@ -4238,15 +4238,15 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@8.1.3(@types/node@26.1.0)(jiti@2.7.0)(sass@1.101.0): + vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0): dependencies: lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.16 - rolldown: 1.1.4 + picomatch: 4.0.5 + postcss: 8.5.19 + rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 26.1.0 + '@types/node': 26.1.1 fsevents: 2.3.3 jiti: 2.7.0 sass: 1.101.0 diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/types.ts b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/types.ts index 13f779827..1d80ff041 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/types.ts +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/types.ts @@ -1,3 +1,5 @@ +import { MfaMethod, type MfaMethodValue } from '../../../../../../shared/rust-api/types'; + export const ConnectModalView = { MfaTotp: 'mfa-totp', MfaEmail: 'mfa-email', @@ -8,6 +10,21 @@ export const ConnectModalView = { ConnectionError: 'connection-error', } as const; +export const mfaMethodToConnectModalView = ( + method: MfaMethodValue, +): ConnectModalViewValue => { + switch (method) { + case MfaMethod.Email: + return ConnectModalView.MfaEmail; + case MfaMethod.Oidc: + return ConnectModalView.MfaOidc; + case MfaMethod.MobileApprove: + return ConnectModalView.MfaMobile; + default: + return ConnectModalView.MfaTotp; + } +}; + export const ConnectModalTitle: Record = { [ConnectModalView.MfaTotp]: 'Two-factor authentication', [ConnectModalView.MfaEmail]: 'Two-factor authentication', diff --git a/new-ui/src/shared/components/LocationCard/context/context.tsx b/new-ui/src/shared/components/LocationCard/context/context.tsx index 538bd6bf6..a0b199c52 100644 --- a/new-ui/src/shared/components/LocationCard/context/context.tsx +++ b/new-ui/src/shared/components/LocationCard/context/context.tsx @@ -10,7 +10,8 @@ import { import { useAppData } from '../../../providers/AppDataContext'; import { api } from '../../../rust-api/api'; import type { InstanceInfo, LocationInfo } from '../../../rust-api/types'; -import { MfaMethod, type MfaMethodValue } from '../../../rust-api/types'; +import { ConnectionType, MfaMethod, type MfaMethodValue } from '../../../rust-api/types'; +import { useAppStore } from '../../../store/useAppStore'; import { LocationCardViews, type LocationCardViewsValue } from './types'; interface LocationCardContextValue { @@ -87,6 +88,20 @@ export const LocationCardProvider = ({ } }, [setView, mfaMethod]); + const mfaAutoStartRequested = useAppStore( + (s) => s.mfaAutoStartLocationId === location.id, + ); + useEffect(() => { + if ( + mfaAutoStartRequested && + location.connection_type === ConnectionType.Location && + !location.active + ) { + useAppStore.setState({ mfaAutoStartLocationId: null }); + void startMfa(); + } + }, [mfaAutoStartRequested, location.connection_type, location.active, startMfa]); + // biome-ignore lint/correctness/useExhaustiveDependencies: side-effect on location.active useEffect(() => { if (location.active && !conTypeSetOnce.current) { diff --git a/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx index 961efa256..a3aa5cf59 100644 --- a/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx +++ b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx @@ -4,7 +4,10 @@ import { useMutation, useQuery } from '@tanstack/react-query'; import { useNavigate } from '@tanstack/react-router'; import clsx from 'clsx'; import { Fragment, useMemo } from 'react'; -import { ConnectModalView } from '../../../pages/full/OverviewPage/components/ConnectModal/hooks/types'; +import { + ConnectModalView, + mfaMethodToConnectModalView, +} from '../../../pages/full/OverviewPage/components/ConnectModal/hooks/types'; import { useConnectModal } from '../../../pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModal'; import { api } from '../../rust-api/api'; import { getAppConfigQueryOptions } from '../../rust-api/query'; @@ -76,23 +79,8 @@ export const OverviewLocationCard = ({ location, instance }: Props) => { } if (location.location_mfa_mode !== LocationMfaMode.Disabled) { - const mfaMethod = location.mfa_method ?? MfaMethod.Totp; - let view: (typeof ConnectModalView)[keyof typeof ConnectModalView]; - switch (mfaMethod) { - case MfaMethod.Email: - view = ConnectModalView.MfaEmail; - break; - case MfaMethod.Oidc: - view = ConnectModalView.MfaOidc; - break; - case MfaMethod.MobileApprove: - view = ConnectModalView.MfaMobile; - break; - default: - view = ConnectModalView.MfaTotp; - } useConnectModal.getState().open({ - view, + view: mfaMethodToConnectModalView(location.mfa_method ?? MfaMethod.Totp), location, autoStartOpenId: appConfig.auto_start_openid_mfa, mfaMethod: location.mfa_method, diff --git a/new-ui/src/shared/providers/TauriEventProvider.tsx b/new-ui/src/shared/providers/TauriEventProvider.tsx index 23c0e9b1c..1ba84d8bb 100644 --- a/new-ui/src/shared/providers/TauriEventProvider.tsx +++ b/new-ui/src/shared/providers/TauriEventProvider.tsx @@ -4,17 +4,27 @@ import { listen } from '@tauri-apps/api/event'; import { getCurrentWindow } from '@tauri-apps/api/window'; import { debug } from '@tauri-apps/plugin-log'; import { Fragment, type PropsWithChildren, useEffect } from 'react'; +import { mfaMethodToConnectModalView } from '../../pages/full/OverviewPage/components/ConnectModal/hooks/types'; +import { useConnectModal } from '../../pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModal'; import { WindowId } from '../consts'; +import { useAppData } from '../providers/AppDataContext'; +import { api } from '../rust-api/api'; import { type AddInstanceEventPayload, + ConnectionType, type DeadConnectionDroppedPayload, type DeadConnectionReconnectedPayload, + type LocationInfo, + MfaMethod, TauriEvent, } from '../rust-api/types'; +import { useAppStore } from '../store/useAppStore'; +import { decideLocationMfaMethod } from '../utils/decideLocationMfaMethod'; export const TauriEventProvider = ({ children }: PropsWithChildren) => { const navigate = useNavigate(); const queryClient = useQueryClient(); + const { setViewSelection } = useAppData(); useEffect(() => { const unlisteners = Promise.all([ @@ -32,6 +42,47 @@ export const TauriEventProvider = ({ children }: PropsWithChildren) => { }); } }), + // Backend requests the MFA flow (e.g. connecting to an MFA location from the + // tray or system settings). The location is emitted as the payload directly. + listen>( + TauriEvent.MfaTrigger, + (event) => { + void debug(`UI Received event MfaTrigger: ${JSON.stringify(event.payload)}`); + const windowLabel = getCurrentWindow().label; + + if (windowLabel === WindowId.CompactView) { + const { id: locationId, instance_id: instanceId } = event.payload; + setViewSelection({ kind: 'instance', id: instanceId }); + useAppStore.setState({ + expandedLocation: locationId, + mfaAutoStartLocationId: locationId, + }); + return; + } + + if (windowLabel === WindowId.FullView) { + const location: LocationInfo = { + ...event.payload, + connection_type: ConnectionType.Location, + active: false, + }; + void (async () => { + const appConfig = await api.getAppConfig(); + const mfaMethod = + decideLocationMfaMethod(location, location.mfa_method) ?? MfaMethod.Totp; + + await navigate({ to: '/full/overview' }); + useConnectModal.getState().open({ + view: mfaMethodToConnectModalView(mfaMethod), + location, + autoStartOpenId: appConfig.auto_start_openid_mfa, + mfaMethod, + }); + })(); + } + }, + ), + listen(TauriEvent.ConnectionChanged, (event) => { void debug( `UI Received event ConnectionChanged: ${JSON.stringify(event.payload)}`, @@ -116,7 +167,7 @@ export const TauriEventProvider = ({ children }: PropsWithChildren) => { return () => { void unlisteners.then((fns) => fns.forEach((fn) => void fn())); }; - }, [queryClient, navigate]); + }, [queryClient, navigate, setViewSelection]); return {children}; }; diff --git a/new-ui/src/shared/store/useAppStore.tsx b/new-ui/src/shared/store/useAppStore.tsx index d013881c3..b161e33ae 100644 --- a/new-ui/src/shared/store/useAppStore.tsx +++ b/new-ui/src/shared/store/useAppStore.tsx @@ -4,6 +4,8 @@ import { createJSONStorage, persist } from 'zustand/middleware'; interface StoreValues { // only used in compact mode expandedLocation: number | null; + // Location ID whose MFA flow should auto-start (e.g. triggered from the tray). + mfaAutoStartLocationId: number | null; } interface Store extends StoreValues {} @@ -12,11 +14,13 @@ export const useAppStore = create()( persist( (_) => ({ expandedLocation: null, + mfaAutoStartLocationId: null, }), { name: 'app-store', storage: createJSONStorage(() => localStorage), version: 4, + partialize: (state) => ({ expandedLocation: state.expandedLocation }), }, ), ); diff --git a/nix/package.nix b/nix/package.nix index 62e730a7c..3da474cd7 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -90,7 +90,7 @@ inherit pname version pnpm; src = ../.; fetcherVersion = 3; - hash = "sha256-iE5IgvW375eIblAJj60+tc5mKYKvpht8USYlJC9/wkg="; + hash = "sha256-wbU1i78mLQPm215uHlyDVfSDeOS/E/7M3mp9Vu3WKgg="; }; # Prefetch pnpm dependencies for the new UI (separate pnpm project). @@ -99,7 +99,7 @@ inherit version pnpm; src = ../new-ui; fetcherVersion = 3; - hash = "sha256-ZH0POBb7RMY7y/+5YHi+yhkoNfOZNQDeOilBs17Yd7s="; + hash = "sha256-xJ+zv/jEkc59DfDOJeVU8wRpQz3Ik4EZzRJtBgUOxjo="; }; # Pre-build the new UI frontend so Tauri can serve it as WebviewUrl::App("compact/") and "full/". diff --git a/package.json b/package.json index 5f6aa5490..885941c2d 100644 --- a/package.json +++ b/package.json @@ -36,20 +36,20 @@ ] }, "dependencies": { - "@floating-ui/react": "^0.27.19", + "@floating-ui/react": "^0.27.20", "@hookform/resolvers": "^3.10.0", "@react-hook/resize-observer": "^2.0.2", "@stablelib/base64": "^2.0.1", "@stablelib/x25519": "^2.0.1", "@tanstack/query-core": "^5.101.2", - "@tanstack/react-virtual": "^3.14.5", + "@tanstack/react-virtual": "^3.14.6", "@tauri-apps/api": "^2.11.1", "@tauri-apps/plugin-clipboard-manager": "^2.3.2", "@tauri-apps/plugin-deep-link": "^2.4.9", "@tauri-apps/plugin-dialog": "^2.7.1", "@tauri-apps/plugin-fs": "^2.5.1", "@tauri-apps/plugin-http": "^2.5.9", - "@tauri-apps/plugin-log": "^2.8.0", + "@tauri-apps/plugin-log": "^2.9.0", "@tauri-apps/plugin-notification": "^2.3.3", "@tauri-apps/plugin-opener": "^2.5.4", "@tauri-apps/plugin-os": "^2.3.2", @@ -69,7 +69,7 @@ "get-text-width": "^1.0.3", "html-react-parser": "^6.1.4", "itertools": "^2.7.1", - "js-base64": "^3.8.0", + "js-base64": "^3.8.1", "lodash-es": "^4.18.1", "merge-refs": "^2.0.0", "millify": "^6.1.0", @@ -105,15 +105,15 @@ "@tauri-apps/cli": "^2.11.4", "@types/file-saver": "^2.0.7", "@types/lodash-es": "^4.17.12", - "@types/node": "^26.1.0", + "@types/node": "^26.1.1", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.2.0", "@vitejs/plugin-react-swc": "^4.3.1", "autoprefixer": "^10.5.2", "npm-run-all": "^4.1.5", - "postcss": "^8.5.16", - "prettier": "^3.9.4", + "postcss": "^8.5.18", + "prettier": "^3.9.5", "sass": "~1.92.1", "typedoc": "^0.28.20", "typesafe-i18n": "^5.27.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d355096d..76f19cbf0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@floating-ui/react': - specifier: ^0.27.19 - version: 0.27.19(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + specifier: ^0.27.20 + version: 0.27.20(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@hookform/resolvers': specifier: ^3.10.0 version: 3.10.0(react-hook-form@7.81.0(react@19.2.7)) @@ -27,8 +27,8 @@ importers: specifier: ^5.101.2 version: 5.101.2 '@tanstack/react-virtual': - specifier: ^3.14.5 - version: 3.14.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + specifier: ^3.14.6 + version: 3.14.6(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tauri-apps/api': specifier: ^2.11.1 version: 2.11.1 @@ -48,8 +48,8 @@ importers: specifier: ^2.5.9 version: 2.5.9 '@tauri-apps/plugin-log': - specifier: ^2.8.0 - version: 2.8.0 + specifier: ^2.9.0 + version: 2.9.0 '@tauri-apps/plugin-notification': specifier: ^2.3.3 version: 2.3.3 @@ -108,8 +108,8 @@ importers: specifier: ^2.7.1 version: 2.7.1 js-base64: - specifier: ^3.8.0 - version: 3.8.0 + specifier: ^3.8.1 + version: 3.8.1 lodash-es: specifier: ^4.18.1 version: 4.18.1 @@ -211,8 +211,8 @@ importers: specifier: ^4.17.12 version: 4.17.12 '@types/node': - specifier: ^26.1.0 - version: 26.1.0 + specifier: ^26.1.1 + version: 26.1.1 '@types/react': specifier: ^19.2.17 version: 19.2.17 @@ -221,22 +221,22 @@ importers: version: 19.2.3(@types/react@19.2.17) '@vitejs/plugin-react': specifier: ^5.2.0 - version: 5.2.0(vite@7.3.6(@types/node@26.1.0)(sass@1.92.1)(yaml@2.9.0)) + version: 5.2.0(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0)) '@vitejs/plugin-react-swc': specifier: ^4.3.1 - version: 4.3.1(vite@7.3.6(@types/node@26.1.0)(sass@1.92.1)(yaml@2.9.0)) + version: 4.3.1(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0)) autoprefixer: specifier: ^10.5.2 - version: 10.5.2(postcss@8.5.16) + version: 10.5.2(postcss@8.5.19) npm-run-all: specifier: ^4.1.5 version: 4.1.5 postcss: - specifier: ^8.5.16 - version: 8.5.16 + specifier: ^8.5.18 + version: 8.5.19 prettier: - specifier: ^3.9.4 - version: 3.9.4 + specifier: ^3.9.5 + version: 3.9.5 sass: specifier: ~1.92.1 version: 1.92.1 @@ -251,7 +251,7 @@ importers: version: 6.0.3 vite: specifier: ^7.3.6 - version: 7.3.6(@types/node@26.1.0)(sass@1.92.1)(yaml@2.9.0) + version: 7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0) packages: @@ -609,26 +609,26 @@ packages: cpu: [x64] os: [win32] - '@floating-ui/core@1.7.5': - resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} - '@floating-ui/dom@1.7.6': - resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} - '@floating-ui/react-dom@2.1.8': - resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} + '@floating-ui/react-dom@2.1.9': + resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/react@0.27.19': - resolution: {integrity: sha512-31B8h5mm8YxotlE7/AU/PhNAl8eWxAmjL/v2QOxroDNkTFLk3Uu82u63N3b6TXa4EGJeeZLVcd/9AlNlVqzeog==} + '@floating-ui/react@0.27.20': + resolution: {integrity: sha512-CMqMy7OaXl9W0eq1Uy7L7i2Y/anPvHmFmESd2CEw0t5YvZhcVCeo4MBevAmswRllX7Y2dEidA4ozGPunLSTQpw==} peerDependencies: react: '>=17.0.0' react-dom: '>=17.0.0' - '@floating-ui/utils@0.2.11': - resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} '@gerrit0/mini-shiki@3.23.0': resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==} @@ -1162,14 +1162,14 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-virtual@3.14.5': - resolution: {integrity: sha512-4EKRXh7zBLkbKbFmG3AUVkircuHd+7OdT1pocJSepxtfBd3qnrJgJ5rtPkRYyo9fmyVb2+pI2xPy5oYvMLQy6A==} + '@tanstack/react-virtual@3.14.6': + resolution: {integrity: sha512-4+Uq8m0/gzO4kMCHUEpTtGX1RnONK0C+g88b2ltwPMWUBiaVarBuWKoPJaz7gj1cKCVRAdyu+U8GcKhwCc2beA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/virtual-core@3.17.3': - resolution: {integrity: sha512-8Np/TFELpI0ySuJoVmjvOrQYXH/8sTX0Biv9szhFhY39xOdAAY+smrMxjxOum/ux3eM8MUJQsEJ0/R0UpvC8dw==} + '@tanstack/virtual-core@3.17.4': + resolution: {integrity: sha512-nGm5KteqxasUdThLc2izl6dHUqLv0LQj7Nuyo5gYalTPf/U8a9ermvsl7reT+6ioBW1l8WfpP/mcU338nLXpqw==} '@tauri-apps/api@2.11.1': resolution: {integrity: sha512-M2FPuYND2m+wh5hfW9ZpSdxMPdEJovPBWwoHJmwUpysTYNHaOkVFN419m/K0LIgjb/7KU2vBgsUepJWugQCvAA==} @@ -1265,8 +1265,8 @@ packages: '@tauri-apps/plugin-http@2.5.9': resolution: {integrity: sha512-lCiY0+vs4HvIUSvZrBs8TC3TiCB0MOPRmiUjTq4prW7SlcJE2jdLeT6KBsJrT9Tlplufl7W1pY6SFAO3gCWxDA==} - '@tauri-apps/plugin-log@2.8.0': - resolution: {integrity: sha512-a+7rOq3MJwpTOLLKbL8d0qGZ85hgHw5pNOWusA9o3cf7cEgtYHiGY/+O8fj8MvywQIGqFv0da2bYQDlrqLE7rw==} + '@tauri-apps/plugin-log@2.9.0': + resolution: {integrity: sha512-Ql8okrnsguk0eDq1GvRfttFV5KaeW/7vcao6bdbkXCRJ1+2sWE15ZJvJVEKVANrOKy1mRngqC3IFIAP+wP5qSw==} '@tauri-apps/plugin-notification@2.3.3': resolution: {integrity: sha512-Zw+ZH18RJb41G4NrfHgIuofJiymusqN+q8fGUIIV7vyCH+5sSn5coqRv/MWB9qETsUs97vmU045q7OyseCV3Qg==} @@ -1337,8 +1337,8 @@ packages: '@types/file-saver@2.0.7': resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==} - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} '@types/lodash-es@4.17.12': resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} @@ -1352,8 +1352,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@26.1.0': - resolution: {integrity: sha512-O0A1G3xPGy4w7AgQdAQYUlQ+BKk2Oovw8eRpofyp5KdBZULnbe+WqaOVNrm705SHphCiG4XHsACrSmPu1f+Kgw==} + '@types/node@26.1.1': + resolution: {integrity: sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -1375,8 +1375,8 @@ packages: '@types/use-sync-external-store@0.0.6': resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - '@ungap/structured-clone@1.3.2': - resolution: {integrity: sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==} + '@ungap/structured-clone@1.3.3': + resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==} '@use-gesture/core@10.3.1': resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==} @@ -1450,26 +1450,26 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.42: - resolution: {integrity: sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==} + baseline-browser-mapping@2.10.43: + resolution: {integrity: sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==} engines: {node: '>=6.0.0'} hasBin: true boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.15: - resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} + brace-expansion@1.1.16: + resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} - brace-expansion@2.1.1: - resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + brace-expansion@2.1.2: + resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==} brace-expansion@5.0.7: resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} engines: {node: 18 || 20 || >=22} - browserslist@4.28.4: - resolution: {integrity: sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==} + browserslist@4.28.6: + resolution: {integrity: sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1502,8 +1502,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001800: - resolution: {integrity: sha512-MMHtuAz9Ys840zAY5F4k6fV5GaivZ9sPk+nz0mY+GYVzRBnYkN0mpqkSR92oWRQ19yQWo4HvBV/FnC16AJX8MA==} + caniuse-lite@1.0.30001805: + resolution: {integrity: sha512-52noaS3DubycKSXaU30TwPGIp+POyQSUVa5jBEq3vkRkY0kjyb3LQgvhU6WGyCcyXqVLWO0Cw0Q6BSdD0kUfVA==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1762,8 +1762,8 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - electron-to-chromium@1.5.387: - resolution: {integrity: sha512-TaxwufTFDufvPEoXdhwVrA3UdFWBeWGkYoJ1K8ldF1xe6gKfth6iRNS5lTQ5JPNOHdGQm8PT1QYKUqFLCiUefQ==} + electron-to-chromium@1.5.389: + resolution: {integrity: sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2162,8 +2162,8 @@ packages: resolution: {integrity: sha512-xrbTDDdUfkJhM4EzYOwwzEf2ksPT5WLgQ5i2X9X5yUpcmXJPEjeAnpMl1tIrYDzuCD19/AEH+cbLunQHGn8v7w==} engines: {node: '>=22'} - js-base64@3.8.0: - resolution: {integrity: sha512-65kvbemyZhj+ExQt1PEFyBEjL5vAHysu1lJdW1AwhhChkO8ZBPizYk/m9GVrpbS2Je1hF+UYZ+6KywqtZV8mHw==} + js-base64@3.8.1: + resolution: {integrity: sha512-5xVjhUZlHHeuO2W7w2rDFj/Kl1xLX+HjZxdOQwCsUOifl6UaoH1o1wsbsTMz+r0aeC7gCijvru02j6TfKZWzKg==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2379,8 +2379,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.15: - resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -2393,8 +2393,8 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-releases@2.0.50: - resolution: {integrity: sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==} + node-releases@2.0.51: + resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} engines: {node: '>=18'} normalize-package-data@2.5.0: @@ -2488,8 +2488,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.16: - resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} + postcss@8.5.19: + resolution: {integrity: sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==} engines: {node: ^10 || ^12 || >=14} prettier@2.8.8: @@ -2497,8 +2497,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.9.4: - resolution: {integrity: sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg==} + prettier@3.9.5: + resolution: {integrity: sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==} engines: {node: '>=14'} hasBin: true @@ -2735,8 +2735,8 @@ packages: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} - shell-quote@1.9.0: - resolution: {integrity: sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==} + shell-quote@1.10.0: + resolution: {integrity: sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==} engines: {node: '>= 0.4'} side-channel-list@1.0.1: @@ -2846,8 +2846,8 @@ packages: svg-parser@2.0.4: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - svgo@3.3.3: - resolution: {integrity: sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==} + svgo@3.3.4: + resolution: {integrity: sha512-GsNRis4e8jxn2Y9ENz/8lbJ93CstG8svtMnuRaHbiF2LTJ5tK0/q3t/URPq9Zc7zVWBJnNnJMIp6bevK7bSmNg==} engines: {node: '>=14.0.0'} hasBin: true @@ -3130,7 +3130,7 @@ snapshots: dependencies: '@babel/compat-data': 7.29.7 '@babel/helper-validator-option': 7.29.7 - browserslist: 4.28.4 + browserslist: 4.28.6 lru-cache: 5.1.1 semver: 6.3.1 @@ -3400,30 +3400,30 @@ snapshots: '@esbuild/win32-x64@0.28.1': optional: true - '@floating-ui/core@1.7.5': + '@floating-ui/core@1.8.0': dependencies: - '@floating-ui/utils': 0.2.11 + '@floating-ui/utils': 0.2.12 - '@floating-ui/dom@1.7.6': + '@floating-ui/dom@1.8.0': dependencies: - '@floating-ui/core': 1.7.5 - '@floating-ui/utils': 0.2.11 + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 - '@floating-ui/react-dom@2.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@floating-ui/react-dom@2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@floating-ui/dom': 1.7.6 + '@floating-ui/dom': 1.8.0 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - '@floating-ui/react@0.27.19(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@floating-ui/react@0.27.20(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@floating-ui/react-dom': 2.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@floating-ui/utils': 0.2.11 + '@floating-ui/react-dom': 2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@floating-ui/utils': 0.2.12 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) tabbable: 6.5.0 - '@floating-ui/utils@0.2.11': {} + '@floating-ui/utils@0.2.12': {} '@gerrit0/mini-shiki@3.23.0': dependencies: @@ -3656,7 +3656,7 @@ snapshots: '@shikijs/types@3.23.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@shikijs/vscode-textmate@10.0.2': {} @@ -3788,7 +3788,7 @@ snapshots: '@svgr/core': 8.1.0(typescript@6.0.3) cosmiconfig: 8.3.6(typescript@6.0.3) deepmerge: 4.3.1 - svgo: 3.3.3 + svgo: 3.3.4 transitivePeerDependencies: - typescript @@ -3867,13 +3867,13 @@ snapshots: '@tanstack/query-core': 5.101.2 react: 19.2.7 - '@tanstack/react-virtual@3.14.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@tanstack/react-virtual@3.14.6(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@tanstack/virtual-core': 3.17.3 + '@tanstack/virtual-core': 3.17.4 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - '@tanstack/virtual-core@3.17.3': {} + '@tanstack/virtual-core@3.17.4': {} '@tauri-apps/api@2.11.1': {} @@ -3944,7 +3944,7 @@ snapshots: dependencies: '@tauri-apps/api': 2.11.1 - '@tauri-apps/plugin-log@2.8.0': + '@tauri-apps/plugin-log@2.9.0': dependencies: '@tauri-apps/api': 2.11.1 @@ -4027,7 +4027,7 @@ snapshots: '@types/file-saver@2.0.7': {} - '@types/hast@3.0.4': + '@types/hast@3.0.5': dependencies: '@types/unist': 3.0.3 @@ -4043,7 +4043,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@26.1.0': + '@types/node@26.1.1': dependencies: undici-types: 8.3.0 @@ -4063,7 +4063,7 @@ snapshots: '@types/use-sync-external-store@0.0.6': {} - '@ungap/structured-clone@1.3.2': {} + '@ungap/structured-clone@1.3.3': {} '@use-gesture/core@10.3.1': {} @@ -4072,15 +4072,15 @@ snapshots: '@use-gesture/core': 10.3.1 react: 19.2.7 - '@vitejs/plugin-react-swc@4.3.1(vite@7.3.6(@types/node@26.1.0)(sass@1.92.1)(yaml@2.9.0))': + '@vitejs/plugin-react-swc@4.3.1(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0))': dependencies: '@rolldown/pluginutils': 1.0.1 '@swc/core': 1.15.43 - vite: 7.3.6(@types/node@26.1.0)(sass@1.92.1)(yaml@2.9.0) + vite: 7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@5.2.0(vite@7.3.6(@types/node@26.1.0)(sass@1.92.1)(yaml@2.9.0))': + '@vitejs/plugin-react@5.2.0(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) @@ -4088,7 +4088,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.6(@types/node@26.1.0)(sass@1.92.1)(yaml@2.9.0) + vite: 7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -4121,13 +4121,13 @@ snapshots: async-function@1.0.0: {} - autoprefixer@10.5.2(postcss@8.5.16): + autoprefixer@10.5.2(postcss@8.5.19): dependencies: - browserslist: 4.28.4 - caniuse-lite: 1.0.30001800 + browserslist: 4.28.6 + caniuse-lite: 1.0.30001805 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.16 + postcss: 8.5.19 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -4146,16 +4146,16 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.10.42: {} + baseline-browser-mapping@2.10.43: {} boolbase@1.0.0: {} - brace-expansion@1.1.15: + brace-expansion@1.1.16: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.1.1: + brace-expansion@2.1.2: dependencies: balanced-match: 1.0.2 @@ -4163,13 +4163,13 @@ snapshots: dependencies: balanced-match: 4.0.4 - browserslist@4.28.4: + browserslist@4.28.6: dependencies: - baseline-browser-mapping: 2.10.42 - caniuse-lite: 1.0.30001800 - electron-to-chromium: 1.5.387 - node-releases: 2.0.50 - update-browserslist-db: 1.2.3(browserslist@4.28.4) + baseline-browser-mapping: 2.10.43 + caniuse-lite: 1.0.30001805 + electron-to-chromium: 1.5.389 + node-releases: 2.0.51 + update-browserslist-db: 1.2.3(browserslist@4.28.6) byte-size@9.0.1: {} @@ -4194,7 +4194,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001800: {} + caniuse-lite@1.0.30001805: {} ccount@2.0.1: {} @@ -4452,7 +4452,7 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - electron-to-chromium@1.5.387: {} + electron-to-chromium@1.5.389: {} emoji-regex@8.0.0: {} @@ -4717,14 +4717,14 @@ snapshots: hast-util-sanitize@5.0.2: dependencies: - '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.3.2 + '@types/hast': 3.0.5 + '@ungap/structured-clone': 1.3.3 unist-util-position: 5.0.0 hast-util-to-jsx-runtime@2.3.6: dependencies: '@types/estree': 1.0.9 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 devlop: 1.1.0 @@ -4743,7 +4743,7 @@ snapshots: hast-util-whitespace@3.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hoist-non-react-statics@3.3.2: dependencies: @@ -4936,7 +4936,7 @@ snapshots: itertools@2.7.1: {} - js-base64@3.8.0: {} + js-base64@3.8.1: {} js-tokens@4.0.0: {} @@ -5020,7 +5020,7 @@ snapshots: mdast-util-mdx-expression@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.0.3 @@ -5031,7 +5031,7 @@ snapshots: mdast-util-mdx-jsx@3.2.0: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/unist': 3.0.3 ccount: 2.0.1 @@ -5048,7 +5048,7 @@ snapshots: mdast-util-mdxjs-esm@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.0.3 @@ -5063,9 +5063,9 @@ snapshots: mdast-util-to-hast@13.2.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.2 + '@ungap/structured-clone': 1.3.3 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 @@ -5244,11 +5244,11 @@ snapshots: minimatch@3.1.5: dependencies: - brace-expansion: 1.1.15 + brace-expansion: 1.1.16 minimatch@5.1.9: dependencies: - brace-expansion: 2.1.1 + brace-expansion: 2.1.2 motion-dom@12.42.2: dependencies: @@ -5267,7 +5267,7 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.15: {} + nanoid@3.3.16: {} nice-try@1.0.5: {} @@ -5279,7 +5279,7 @@ snapshots: node-addon-api@7.1.1: optional: true - node-releases@2.0.50: {} + node-releases@2.0.51: {} normalize-package-data@2.5.0: dependencies: @@ -5297,7 +5297,7 @@ snapshots: minimatch: 3.1.5 pidtree: 0.3.1 read-pkg: 3.0.0 - shell-quote: 1.9.0 + shell-quote: 1.10.0 string.prototype.padend: 3.1.6 nth-check@2.1.1: @@ -5379,15 +5379,15 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.16: + postcss@8.5.19: dependencies: - nanoid: 3.3.15 + nanoid: 3.3.16 picocolors: 1.1.1 source-map-js: 1.2.1 prettier@2.8.8: {} - prettier@3.9.4: {} + prettier@3.9.5: {} prop-types@15.8.1: dependencies: @@ -5434,7 +5434,7 @@ snapshots: react-markdown@10.1.0(@types/react@19.2.17)(react@19.2.7): dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/react': 19.2.17 devlop: 1.1.0 @@ -5550,7 +5550,7 @@ snapshots: rehype-sanitize@6.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-sanitize: 5.0.2 remark-parse@11.0.0: @@ -5564,7 +5564,7 @@ snapshots: remark-rehype@11.1.2: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 mdast-util-to-hast: 13.2.1 unified: 11.0.5 @@ -5681,7 +5681,7 @@ snapshots: shebang-regex@1.0.0: {} - shell-quote@1.9.0: {} + shell-quote@1.10.0: {} side-channel-list@1.0.1: dependencies: @@ -5819,7 +5819,7 @@ snapshots: svg-parser@2.0.4: {} - svgo@3.3.3: + svgo@3.3.4: dependencies: commander: 7.2.0 css-select: 5.2.2 @@ -5936,9 +5936,9 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - update-browserslist-db@1.2.3(browserslist@4.28.4): + update-browserslist-db@1.2.3(browserslist@4.28.6): dependencies: - browserslist: 4.28.4 + browserslist: 4.28.6 escalade: 3.2.0 picocolors: 1.1.1 @@ -5991,16 +5991,16 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite@7.3.6(@types/node@26.1.0)(sass@1.92.1)(yaml@2.9.0): + vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0): dependencies: esbuild: 0.28.1 fdir: 6.5.0(picomatch@4.0.5) picomatch: 4.0.5 - postcss: 8.5.16 + postcss: 8.5.19 rollup: 4.62.2 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 26.1.0 + '@types/node': 26.1.1 fsevents: 2.3.3 sass: 1.92.1 yaml: 2.9.0 diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index c95350497..970af5e41 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -18,17 +18,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom 0.2.17", - "once_cell", - "version_check", -] - [[package]] name = "aho-corasick" version = "1.1.4" @@ -194,7 +183,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -223,7 +212,7 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.8.6", + "rand 0.8.7", "serde", "serde_repr", "url", @@ -257,7 +246,7 @@ dependencies = [ "rustc-hash", "serde", "serde_derive", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -413,7 +402,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -479,7 +468,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -496,7 +485,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -724,18 +713,6 @@ dependencies = [ "no_std_io2", ] -[[package]] -name = "bitvec" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - [[package]] name = "blake2" version = "0.10.6" @@ -794,30 +771,6 @@ dependencies = [ "piper", ] -[[package]] -name = "borsh" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f3f6da4992df95bbcd9af42a6c7dcb994498fc9048230405f3b36ff7cd3f145" -dependencies = [ - "borsh-derive", - "bytes", - "cfg_aliases", -] - -[[package]] -name = "borsh-derive" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae8fb4fb5740e4b2c4884ff95f5f32f5e8479db1e8fd8eb49ddbe09eb09bb7c" -dependencies = [ - "once_cell", - "proc-macro-crate 3.5.0", - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "brotli" version = "8.0.4" @@ -860,45 +813,11 @@ version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" -[[package]] -name = "byte-unit" -version = "5.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a813de7f2bbedb7dce265b64f1cf5908ebe4d56281ece8d847e98113788b9b0" -dependencies = [ - "rust_decimal", - "schemars 1.2.1", - "serde", - "utf8-width", -] - -[[package]] -name = "bytecheck" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" -dependencies = [ - "bytecheck_derive", - "ptr_meta", - "simdutf8", -] - -[[package]] -name = "bytecheck_derive" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "bytemuck" -version = "1.25.0" +version = "1.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +checksum = "d6aedf8ae72766347502cf3cb4f41cf5e9cc37d28bee90f1fdaaae15f9cf9424" [[package]] name = "byteorder" @@ -990,9 +909,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.66" +version = "1.2.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d6cac793997bd970000024b2934968efe83b382de4fdcf4fcb46b6ee4ad996" +checksum = "e17dd265a7d0f31ef544e1b20e03add05d3b45b491b633b10d67145d2acc1a38" dependencies = [ "find-msvc-tools", "jobserver", @@ -1130,7 +1049,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1430,7 +1349,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1473,7 +1392,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1521,7 +1440,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1534,7 +1453,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1545,7 +1464,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1556,7 +1475,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core 0.23.0", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1963,7 +1882,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1973,7 +1892,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1994,7 +1913,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2082,7 +2001,7 @@ checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2105,7 +2024,7 @@ checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2222,7 +2141,7 @@ dependencies = [ "cc", "memchr", "rustc_version", - "toml 1.1.2+spec-1.1.0", + "toml 1.1.3+spec-1.1.0", "vswhom", "winreg 0.55.0", ] @@ -2266,7 +2185,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2296,7 +2215,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2372,9 +2291,9 @@ dependencies = [ [[package]] name = "exr" -version = "1.74.1" +version = "1.74.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6be87932f10230a4339ab394edd8e4611fcb72553d8295b4d52ea55249b3daa5" +checksum = "711fe42c9964295e01ee3fba3f9fe0e1d24b98886950d68efe81b1c76e21adf3" dependencies = [ "bit_field", "half", @@ -2511,7 +2430,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2550,12 +2469,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - [[package]] name = "futures" version = "0.3.32" @@ -2636,7 +2549,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2915,7 +2828,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -3017,7 +2930,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -3055,9 +2968,6 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash", -] [[package]] name = "hashbrown" @@ -3164,9 +3074,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", "http", @@ -3174,9 +3084,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" dependencies = [ "bytes", "futures-core", @@ -3530,7 +3440,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -3684,7 +3594,7 @@ dependencies = [ "quote", "rustc_version", "simd_cesu8", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -3712,7 +3622,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -4075,9 +3985,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "wasi", @@ -4339,7 +4249,7 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand 0.8.6", + "rand 0.8.7", "smallvec", "zeroize", ] @@ -4368,7 +4278,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -4430,7 +4340,7 @@ dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -4754,9 +4664,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "open" -version = "5.3.6" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8d3b65c44123a56e0133d2cd06ce4361bd3ca99d41198b2f25e3c3db9b8b4a" +checksum = "a0b3d059e795d52b8a72fef45658620edd4d9c359b338564aa14391ffa511ed5" dependencies = [ "dunce", "is-wsl", @@ -4785,7 +4695,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -5011,7 +4921,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -5040,7 +4950,7 @@ checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -5200,7 +5110,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -5229,7 +5139,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.12+spec-1.1.0", + "toml_edit 0.25.13+spec-1.1.0", ] [[package]] @@ -5281,7 +5191,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4488a4a36b9a4ba6b9334a32a39971f77c1436ec82c38707bce707699cc3bbcb" dependencies = [ "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -5311,7 +5221,7 @@ dependencies = [ "pulldown-cmark", "pulldown-cmark-to-cmark", "regex", - "syn 2.0.118", + "syn 2.0.119", "tempfile", ] @@ -5325,7 +5235,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -5343,26 +5253,6 @@ version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" -[[package]] -name = "ptr_meta" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" -dependencies = [ - "ptr_meta_derive", -] - -[[package]] -name = "ptr_meta_derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "publicsuffix" version = "2.3.0" @@ -5542,17 +5432,11 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - [[package]] name = "rand" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" dependencies = [ "libc", "rand_chacha 0.3.1", @@ -5561,9 +5445,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.5", @@ -5660,7 +5544,7 @@ dependencies = [ "num-traits", "paste", "profiling", - "rand 0.9.4", + "rand 0.9.5", "rand_chacha 0.9.0", "simd_helpers", "thiserror 2.0.18", @@ -5781,7 +5665,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -5813,15 +5697,6 @@ version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" -[[package]] -name = "rend" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" -dependencies = [ - "bytecheck", -] - [[package]] name = "reqwest" version = "0.12.28" @@ -5960,35 +5835,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rkyv" -version = "0.7.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2297bf9c81a3f0dc96bc9521370b88f054168c29826a75e89c55ff196e7ed6a1" -dependencies = [ - "bitvec", - "bytecheck", - "bytes", - "hashbrown 0.12.3", - "ptr_meta", - "rend", - "rkyv_derive", - "seahash", - "tinyvec", - "uuid", -] - -[[package]] -name = "rkyv_derive" -version = "0.7.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d7b42d4b8d06048d3ac8db0eb31bcb942cbeb709f0b5f2b2ebde398d3038f5" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "rsa" version = "0.9.10" @@ -6019,23 +5865,6 @@ dependencies = [ "ordered-multimap", ] -[[package]] -name = "rust_decimal" -version = "1.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be2a24f50780bc85f09cc6ac299bdf1424302742d77221106859c9d8b102126a" -dependencies = [ - "arrayvec", - "borsh", - "bytes", - "num-traits", - "rand 0.8.6", - "rkyv", - "serde", - "serde_json", - "wasm-bindgen", -] - [[package]] name = "rustc-hash" version = "2.1.3" @@ -6066,9 +5895,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.41" +version = "0.23.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" dependencies = [ "aws-lc-rs", "log", @@ -6219,7 +6048,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6245,15 +6074,9 @@ checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - [[package]] name = "secrecy" version = "0.10.3" @@ -6354,7 +6177,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6365,7 +6188,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6389,7 +6212,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6451,7 +6274,7 @@ dependencies = [ "darling 0.23.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6473,7 +6296,7 @@ checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6487,9 +6310,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" dependencies = [ "cfg-if", "cpufeatures 0.2.17", @@ -6555,15 +6378,15 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" [[package]] name = "simd_cesu8" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" dependencies = [ "rustc_version", "simdutf8", @@ -6613,9 +6436,9 @@ checksum = "e8e2fb0f499abb4d162f2bedad68f5ef91a1682b5a03596ddb67efd37768d100" [[package]] name = "socket2" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -6671,9 +6494,9 @@ dependencies = [ [[package]] name = "spin" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" dependencies = [ "lock_api", ] @@ -6747,7 +6570,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6770,7 +6593,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.118", + "syn 2.0.119", "tokio", "url", ] @@ -6805,10 +6628,10 @@ dependencies = [ "memchr", "once_cell", "percent-encoding", - "rand 0.8.6", + "rand 0.8.7", "rsa", "serde", - "sha1 0.10.6", + "sha1 0.10.7", "sha2", "smallvec", "sqlx-core", @@ -6845,7 +6668,7 @@ dependencies = [ "md-5", "memchr", "once_cell", - "rand 0.8.6", + "rand 0.8.7", "serde", "serde_json", "sha2", @@ -6939,22 +6762,22 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "struct-patch" -version = "0.12.5" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16653188c79fd54e2aee455daa0d14e4975292a4a935500bddee6684ad9ead47" +checksum = "9c33b1be720fec2481ed6f1d2b95fefa464500cc55ce0ba5938aba77718da5f2" dependencies = [ "struct-patch-derive", ] [[package]] name = "struct-patch-derive" -version = "0.12.5" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48a28cbfd427a1b2e4d441ce9dd2f59763a25a36f3d51c34ee439f08c758df0c" +checksum = "d4bfb88f9c30c62693f33814de38c84fd833c7a5b92238655d158deb3ac62d9f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6975,7 +6798,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -7027,15 +6850,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", - "quote", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.118" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" dependencies = [ "proc-macro2", "quote", @@ -7059,7 +6881,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -7167,15 +6989,9 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - [[package]] name = "target-lexicon" version = "0.12.16" @@ -7273,7 +7089,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "syn 2.0.118", + "syn 2.0.119", "tauri-utils", "thiserror 2.0.18", "time", @@ -7291,7 +7107,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "tauri-codegen", "tauri-utils", ] @@ -7386,7 +7202,7 @@ dependencies = [ "tauri-plugin", "tauri-utils", "thiserror 2.0.18", - "toml 1.1.2+spec-1.1.0", + "toml 1.1.3+spec-1.1.0", "url", ] @@ -7416,12 +7232,11 @@ dependencies = [ [[package]] name = "tauri-plugin-log" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7545bd67f070a4500432c826e2e0682146a1d6712aee22a2786490156b574d93" +checksum = "6792296e6f389268016c77db21ebae1fc0568f2fccf88b1ec7e2ea71330afb4c" dependencies = [ "android_logger", - "byte-unit", "fern", "log", "objc2 0.6.4", @@ -7444,7 +7259,7 @@ checksum = "01fc2c5ff41105bd1f7242d8201fdf3efd70749b82fa013a17f2126357d194cc" dependencies = [ "log", "notify-rust", - "rand 0.9.4", + "rand 0.9.5", "serde", "serde_json", "serde_repr", @@ -7507,15 +7322,16 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" -version = "2.4.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8f29386f5e9fdc699182388a33ee80a56de436d91b67459e86afef426282af" +checksum = "b3214becf9ef5783c0ae99a3bb25adf5353a7a16ebf53e74b909e29205735c6c" dependencies = [ "serde", "serde_json", "tauri", "tauri-plugin-deep-link", "thiserror 2.0.18", + "tokio", "tracing", "windows-sys 0.60.2", "zbus", @@ -7618,7 +7434,7 @@ dependencies = [ "serde_with", "swift-rs", "thiserror 2.0.18", - "toml 1.1.2+spec-1.1.0", + "toml 1.1.3+spec-1.1.0", "url", "urlpattern", "uuid", @@ -7633,7 +7449,7 @@ checksum = "cc65d45c68858bfe420dd29e834b5d15dbecf8a07a8a16cf4d532c7b1f69d4b6" dependencies = [ "dunce", "embed-resource", - "toml 1.1.2+spec-1.1.0", + "toml 1.1.3+spec-1.1.0", ] [[package]] @@ -7704,7 +7520,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -7715,14 +7531,14 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] @@ -7794,9 +7610,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" dependencies = [ "tinyvec_macros", ] @@ -7832,7 +7648,7 @@ checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -7922,9 +7738,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "53c96ecdfa941c8fc4fcaed14f99ada8ebed502eef533015095a07e3301d4c3c" dependencies = [ "indexmap 2.14.0", "serde_core", @@ -7932,7 +7748,7 @@ dependencies = [ "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] @@ -7988,14 +7804,14 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.12+spec-1.1.0" +version = "0.25.13+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" dependencies = [ "indexmap 2.14.0", "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] @@ -8004,14 +7820,14 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] name = "toml_writer" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tonic" @@ -8054,7 +7870,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -8079,7 +7895,7 @@ dependencies = [ "prost-build", "prost-types", "quote", - "syn 2.0.118", + "syn 2.0.119", "tempfile", "tonic-build", ] @@ -8166,7 +7982,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -8272,8 +8088,8 @@ dependencies = [ "httparse", "log", "native-tls", - "rand 0.9.4", - "sha1 0.10.6", + "rand 0.9.5", + "sha1 0.10.7", "thiserror 2.0.18", ] @@ -8456,7 +8272,7 @@ dependencies = [ "indexmap 2.14.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -8471,7 +8287,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.118", + "syn 2.0.119", "toml 0.9.12+spec-1.1.0", "uniffi_meta", ] @@ -8554,12 +8370,6 @@ dependencies = [ "url", ] -[[package]] -name = "utf8-width" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "159a7cadce548703edd50d24069bc294c5415ecab0a480e0cd1ca06d112dc94a" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -8574,9 +8384,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.4" +version = "1.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" +checksum = "ea5fab0d6c3c01ae70085a09cb03d4c7a1d6314e2b3e075392783396d724ca0a" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -8603,9 +8413,9 @@ checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "value-bag" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ba6f5989077681266825251a52748b8c1d8a4ad098cc37e440103d0ea717fc0" +checksum = "5dd4ec1eb1d240636e354a30110a1dfcb37047169a4d9bd6d9d3469df574b5c4" [[package]] name = "vcpkg" @@ -8766,7 +8576,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "wasm-bindgen-shared", ] @@ -8994,7 +8804,7 @@ checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -9202,7 +9012,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -9213,7 +9023,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -9661,9 +9471,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] @@ -9792,15 +9602,6 @@ dependencies = [ "x11-dl", ] -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - [[package]] name = "x11" version = "2.21.0" @@ -9876,7 +9677,7 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "synstructure", ] @@ -9909,7 +9710,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow 1.0.3", + "winnow 1.0.4", "zbus_macros", "zbus_names", "zvariant", @@ -9924,7 +9725,7 @@ dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "zbus_names", "zvariant", "zvariant_utils", @@ -9937,7 +9738,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1039ca249fee9559680f3a9f05b55e0761fee51af4f6c1e7d8c1f31e549721d2" dependencies = [ "serde", - "winnow 1.0.3", + "winnow 1.0.4", "zvariant", ] @@ -9958,7 +9759,7 @@ checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -9978,7 +9779,7 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "synstructure", ] @@ -9999,7 +9800,7 @@ checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -10032,14 +9833,14 @@ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zune-core" @@ -10075,7 +9876,7 @@ dependencies = [ "enumflags2", "serde", "url", - "winnow 1.0.3", + "winnow 1.0.4", "zvariant_derive", "zvariant_utils", ] @@ -10089,7 +9890,7 @@ dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "zvariant_utils", ] @@ -10102,6 +9903,6 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.118", - "winnow 1.0.3", + "syn 2.0.119", + "winnow 1.0.4", ] diff --git a/src-tauri/src/apple.rs b/src-tauri/src/apple.rs index ac1dde28f..37ff8a576 100644 --- a/src-tauri/src/apple.rs +++ b/src-tauri/src/apple.rs @@ -17,7 +17,8 @@ use crate::{ database::models::{get_all_tunnels_locations, location::Location, tunnel::Tunnel, Id}, events::EventKey, log_watcher::service_log_watcher::spawn_log_watcher_task, - tray::{configure_tray_icon, reload_tray_menu, show_main_window}, + tray::{configure_tray_icon, reload_tray_menu}, + window_manager::trigger_mfa, ConnectionType, }; @@ -81,12 +82,11 @@ async fn sync_connections_with_system(app_handle: &AppHandle) { if location.mfa_enabled() { info!( "Location {} requires MFA but was started from system settings, \ - canceling system connection and triggering MFA flow", + canceling system connection and triggering MFA flow", location.name ); let _ = location.stop_vpn_tunnel(); - show_main_window(app_handle); - let _ = app_handle.emit(EventKey::MfaTrigger.into(), &location); + trigger_mfa(app_handle, &location); continue; } diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index f7d3f4591..6ac9bb393 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -6,7 +6,7 @@ use tauri::{ menu::{Menu, MenuBuilder, MenuEvent, MenuItem, SubmenuBuilder}, path::BaseDirectory, tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, - AppHandle, Emitter, Manager, Runtime, + AppHandle, Manager, Runtime, }; use crate::{ @@ -14,8 +14,7 @@ use crate::{ commands::{all_instances, all_locations, connect, disconnect}, database::{models::location::Location, DB_POOL}, error::Error, - events::EventKey, - window_manager::{show_tray_or_full_view, COMPACT_WINDOW_ID, FULL_VIEW_WINDOW_ID}, + window_manager::{show_tray_or_full_view, trigger_mfa, COMPACT_WINDOW_ID}, ConnectionType, }; @@ -216,25 +215,6 @@ fn hide_visible_windows(app: &AppHandle) { } } -pub fn show_main_window(app: &AppHandle) { - if let Some(window) = app - .get_webview_window(COMPACT_WINDOW_ID) - .or_else(|| app.get_webview_window(FULL_VIEW_WINDOW_ID)) - { - if let Err(err) = window.unminimize() { - warn!("Failed to unminimize main window: {err}"); - } - #[cfg(target_os = "macos")] - if let Err(err) = app.show() { - warn!("Failed to show application: {err}"); - } - if let Err(err) = window.show() { - warn!("Failed to show main window: {err}"); - } - let _ = window.set_focus(); - } -} - /// Handle tray actions. pub fn handle_tray_menu_event(app: &AppHandle, event: MenuEvent) { let handle = app.clone(); @@ -325,8 +305,7 @@ async fn handle_location_tray_menu(id: String, app: &AppHandle) { // Check if MFA is enabled. If so, trigger modal on frontend. if location.mfa_enabled() { info!("MFA enabled for location with ID {id}, trigger MFA modal"); - show_main_window(app); - let _ = app.emit(EventKey::MfaTrigger.into(), &location); + trigger_mfa(app, &location); } else if let Err(err) = connect(location_id, ConnectionType::Location, None, app.clone()).await { diff --git a/src-tauri/src/window_manager/mod.rs b/src-tauri/src/window_manager/mod.rs index c4d1ce755..59cf9d619 100644 --- a/src-tauri/src/window_manager/mod.rs +++ b/src-tauri/src/window_manager/mod.rs @@ -5,7 +5,7 @@ use tauri::{ use crate::{ database::{ - models::{location::Location, tunnel::Tunnel}, + models::{location::Location, tunnel::Tunnel, Id}, DB_POOL, }, events::EventKey, @@ -150,11 +150,12 @@ impl WindowManager { Self::build_tray_window(app)? }; #[cfg(target_os = "macos")] - macos::position_window_near_tray(app, &window); - #[cfg(target_os = "macos")] - let _ = app.set_dock_visibility(false); - #[cfg(target_os = "macos")] - let _ = app.show(); + { + macos::position_window_near_tray(app, &window); + let _ = app.set_activation_policy(tauri::ActivationPolicy::Accessory); + let _ = app.set_dock_visibility(false); + let _ = app.show(); + } let _ = window.show(); let _ = window.set_focus(); Ok(window) @@ -168,9 +169,11 @@ impl WindowManager { Self::build_full_view_window(app)? }; #[cfg(target_os = "macos")] - let _ = app.set_dock_visibility(true); - #[cfg(target_os = "macos")] - let _ = app.show(); + { + let _ = app.set_activation_policy(tauri::ActivationPolicy::Regular); + let _ = app.set_dock_visibility(true); + let _ = app.show(); + } let _ = window.show(); let _ = window.set_focus(); Ok(window) @@ -223,6 +226,22 @@ pub fn show_tray_or_full_view(app: &AppHandle) { } } +/// Surface the window that should host the MFA flow, and emit `MfaTrigger` targeted at that window. +pub fn trigger_mfa(app: &AppHandle, location: &Location) { + let target = if let Some(window) = app + .get_webview_window(FULL_VIEW_WINDOW_ID) + .filter(|w| w.is_visible().unwrap_or(false)) + { + let _ = window.unminimize(); + let _ = window.set_focus(); + FULL_VIEW_WINDOW_ID + } else { + show_tray_window(app); + COMPACT_WINDOW_ID + }; + let _ = app.emit_to(target, EventKey::MfaTrigger.into(), location); +} + #[tauri::command] pub fn open_tray_window(app: AppHandle) { show_tray_window(&app); diff --git a/src/pages/client/ClientPage.tsx b/src/pages/client/ClientPage.tsx index 9358bf446..5f0a97e2c 100644 --- a/src/pages/client/ClientPage.tsx +++ b/src/pages/client/ClientPage.tsx @@ -17,14 +17,8 @@ import { DeadConDroppedModal } from './components/modals/DeadConDroppedModal/Dea import { useDeadConDroppedModal } from './components/modals/DeadConDroppedModal/store'; import { useClientFlags } from './hooks/useClientFlags'; import { useClientStore } from './hooks/useClientStore'; -import { useMFAModal } from './pages/ClientInstancePage/components/LocationsList/modals/MFAModal/useMFAModal'; import { clientQueryKeys } from './query'; -import { - ClientConnectionType, - type CommonWireguardFields, - type DeadConDroppedPayload, - TauriEventKey, -} from './types'; +import { type DeadConDroppedPayload, TauriEventKey } from './types'; const { getInstances, getTunnels, getAppConfig } = clientApi; @@ -43,7 +37,6 @@ export const ClientPage = () => { const location = useLocation(); const toaster = useToaster(); const openDeadConDroppedModal = useDeadConDroppedModal((s) => s.open); - const openMFAModal = useMFAModal((state) => state.open); const { LL } = useI18nContext(); const { data: instances } = useQuery({ @@ -177,15 +170,6 @@ export const ClientPage = () => { }, ); - const mfaTrigger = listen( - TauriEventKey.MFA_TRIGGER, - (data) => { - // Set connection type, as it is not transferred from Rust and MFA is only for locations. - data.payload.connection_type = ClientConnectionType.LOCATION; - openMFAModal(data.payload); - }, - ); - return () => { deadConnectionDropped.then((cleanup) => cleanup()); deadConnectionReconnected.then((cleanup) => cleanup()); @@ -194,7 +178,6 @@ export const ClientPage = () => { instanceUpdate.then((cleanup) => cleanup()); locationUpdate.then((cleanup) => cleanup()); appConfigChanged.then((cleanup) => cleanup()); - mfaTrigger.then((cleanup) => cleanup()); verionMismatch.then((cleanup) => cleanup()); uuidMismatch.then((cleanup) => cleanup()); }; diff --git a/src/pages/client/components/MfaModalProvider.tsx b/src/pages/client/components/MfaModalProvider.tsx index 50447b692..624f535f0 100644 --- a/src/pages/client/components/MfaModalProvider.tsx +++ b/src/pages/client/components/MfaModalProvider.tsx @@ -3,14 +3,10 @@ import { type PropsWithChildren, useEffect } from 'react'; import { isPresent } from '../../../shared/defguard-ui/utils/isPresent'; import { MFAModal } from '../pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal'; import { useMFAModal } from '../pages/ClientInstancePage/components/LocationsList/modals/MFAModal/useMFAModal'; -import { type CommonWireguardFields, TauriEventKey } from '../types'; +import { ClientConnectionType, type CommonWireguardFields, TauriEventKey } from '../types'; type Props = PropsWithChildren; -type Payload = { - location?: CommonWireguardFields; -}; - export const MfaModalProvider = ({ children }: Props) => { const openMFAModal = useMFAModal((state) => state.open); // listen for Rust backend requesting MFA @@ -19,10 +15,11 @@ export const MfaModalProvider = ({ children }: Props) => { let unlisten: UnlistenFn; (async () => { - unlisten = await listen( + unlisten = await listen( TauriEventKey.MFA_TRIGGER, - ({ payload: { location } }) => { + ({ payload: location }) => { if (isPresent(location)) { + location.connection_type = ClientConnectionType.LOCATION; openMFAModal(location); } }, From f74d3d80a3b1cd7e4be2b932c151b210f85a9a91 Mon Sep 17 00:00:00 2001 From: Jacek Chmielewski Date: Fri, 17 Jul 2026 13:06:34 +0200 Subject: [PATCH 118/155] Service log rotation (#1049) Introduce log rotation to background service to avoid high disk space consumption. --- src-tauri/Cargo.lock | 1 - src-tauri/Cargo.toml | 1 - src-tauri/daemon/src/bin/defguard-service.rs | 2 +- src-tauri/daemon/src/config.rs | 4 ++ src-tauri/daemon/src/daemon.rs | 3 ++ src-tauri/daemon/src/utils.rs | 23 +++++++++-- src-tauri/daemon/src/windows.rs | 2 +- src-tauri/src/bin/defguard-client.rs | 12 +++--- src-tauri/src/lib.rs | 1 - .../src/log_watcher/global_log_watcher.rs | 4 +- .../src/log_watcher/service_log_watcher.rs | 4 +- src-tauri/src/service/config.rs | 23 ----------- src-tauri/src/service/mod.rs | 2 - src-tauri/src/service/utils.rs | 39 ------------------- src-tauri/src/utils.rs | 20 ++++------ 15 files changed, 46 insertions(+), 95 deletions(-) delete mode 100644 src-tauri/src/service/config.rs delete mode 100644 src-tauri/src/service/mod.rs delete mode 100644 src-tauri/src/service/utils.rs diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 970af5e41..b99e1c7bb 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1544,7 +1544,6 @@ dependencies = [ "base64 0.22.1", "block2 0.6.2", "chrono", - "clap", "dark-light", "defguard-client-common", "defguard-client-config-sync", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index beb94b9cc..dfc6a3950 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -76,7 +76,6 @@ redundant_closure = "warn" [dependencies] anyhow = "1.0" base64.workspace = true -clap.workspace = true chrono.workspace = true defguard-client-proto = { path = "client-proto" } defguard-client-core = { path = "core" } diff --git a/src-tauri/daemon/src/bin/defguard-service.rs b/src-tauri/daemon/src/bin/defguard-service.rs index c97b534c7..8980d63c0 100644 --- a/src-tauri/daemon/src/bin/defguard-service.rs +++ b/src-tauri/daemon/src/bin/defguard-service.rs @@ -14,7 +14,7 @@ async fn main() -> anyhow::Result<()> { // parse config let config: Config = Config::parse(); - let _guard = logging_setup(&config.log_dir, &config.log_level); + let _guard = logging_setup(&config.log_dir, &config.log_level, config.log_max_files)?; // run gRPC server run_server(config).await?; diff --git a/src-tauri/daemon/src/config.rs b/src-tauri/daemon/src/config.rs index 69ecc10fe..427eb7f8f 100644 --- a/src-tauri/daemon/src/config.rs +++ b/src-tauri/daemon/src/config.rs @@ -17,6 +17,10 @@ pub struct Config { #[arg(long, env = "DEFGUARD_LOG_DIR", default_value = DEFAULT_LOG_DIR, hide = true)] pub log_dir: String, + /// Configures maximum number of service log files to keep. Set to 0 to disable cleanup. + #[arg(long, env = "DEFGUARD_LOG_MAX_FILES", default_value_t = 8)] + pub log_max_files: usize, + /// Defines how often (in seconds) interface statistics are sent to defguard client #[arg(long, short = 'p', env = "DEFGUARD_STATS_PERIOD", default_value = "10")] pub stats_period: u64, diff --git a/src-tauri/daemon/src/daemon.rs b/src-tauri/daemon/src/daemon.rs index 328c430bb..5d3fa7753 100644 --- a/src-tauri/daemon/src/daemon.rs +++ b/src-tauri/daemon/src/daemon.rs @@ -75,6 +75,9 @@ pub enum DaemonError { #[cfg(windows)] #[error(transparent)] WindowsServiceError(#[from] windows_service::Error), + #[cfg(windows)] + #[error(transparent)] + LogAppenderInitError(#[from] tracing_appender::rolling::InitError), } type IfName = String; diff --git a/src-tauri/daemon/src/utils.rs b/src-tauri/daemon/src/utils.rs index 7796cf56d..e666a9d84 100644 --- a/src-tauri/daemon/src/utils.rs +++ b/src-tauri/daemon/src/utils.rs @@ -1,15 +1,30 @@ use std::io::stdout; use tracing::Level; -use tracing_appender::non_blocking::WorkerGuard; +use tracing_appender::{ + non_blocking::WorkerGuard, + rolling::{InitError, RollingFileAppender, Rotation}, +}; use tracing_subscriber::{ fmt, fmt::writer::MakeWriterExt, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Layer, }; -pub fn logging_setup(log_dir: &str, log_level: &str) -> WorkerGuard { +static SERVICE_LOG_PREFIX: &str = "defguard-service.log"; + +pub fn logging_setup( + log_dir: &str, + log_level: &str, + log_max_files: usize, +) -> Result { // prepare log file appender - let file_appender = tracing_appender::rolling::daily(log_dir, "defguard-service.log"); + let mut appender_builder = RollingFileAppender::builder() + .rotation(Rotation::DAILY) + .filename_prefix(SERVICE_LOG_PREFIX); + if log_max_files > 0 { + appender_builder = appender_builder.max_log_files(log_max_files); + } + let file_appender = appender_builder.build(log_dir)?; let (non_blocking, guard) = tracing_appender::non_blocking(file_appender); // prepare log level filter for stdout @@ -35,5 +50,5 @@ pub fn logging_setup(log_dir: &str, log_level: &str) -> WorkerGuard { .with(json_file_layer) .init(); - guard + Ok(guard) } diff --git a/src-tauri/daemon/src/windows.rs b/src-tauri/daemon/src/windows.rs index a453253b7..17e7aad65 100644 --- a/src-tauri/daemon/src/windows.rs +++ b/src-tauri/daemon/src/windows.rs @@ -90,7 +90,7 @@ fn run_service() -> Result<(), DaemonError> { })?; let config: Config = Config::parse(); - let _guard = logging_setup(&config.log_dir, &config.log_level); + let _guard = logging_setup(&config.log_dir, &config.log_level, config.log_max_files)?; let default_panic = std::panic::take_hook(); std::panic::set_hook(Box::new(move |info| { diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 87a840dcd..8b67ed491 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -27,9 +27,9 @@ use defguard_client::{ events::handle_deep_link, periodic::run_periodic_tasks, provisioning::handle_client_initialization, - service, session_state, + session_state, tray::{configure_tray_icon, setup_tray}, - utils::load_log_targets, + utils::{load_log_targets, DEFAULT_SERVICE_LOG_DIR}, window_manager::*, LOG_FILENAME, VERSION, }; @@ -43,10 +43,12 @@ use defguard_client::{ use defguard_client::{ connection::apple::PLUGIN_BUNDLE_ID, system_extension::activate_system_extension, }; -use defguard_client_core::connection::active_connections::close_all_connections; #[cfg(target_os = "macos")] use defguard_client_core::connection::sync_locations_and_tunnels; -use defguard_client_core::version::{check_app_version, VersionCheckResult}; +use defguard_client_core::{ + connection::active_connections::close_all_connections, + version::{check_app_version, VersionCheckResult}, +}; use log::{Level, LevelFilter}; use tauri::{async_runtime, AppHandle, Builder, Manager, RunEvent, WindowEvent}; use tauri_plugin_deep_link::DeepLinkExt; @@ -476,7 +478,7 @@ fn main() { connections at the network level will be stored in: {}.", data_dir.display(), log_dir.display(), - service::config::DEFAULT_LOG_DIR + DEFAULT_SERVICE_LOG_DIR ); async_runtime::block_on(startup(app_handle)); diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index d8e0a064f..30761f88e 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -9,7 +9,6 @@ pub mod events; pub mod log_watcher; pub mod periodic; pub mod provisioning; -pub mod service; pub mod session_state; #[cfg(all(target_os = "macos", feature = "macos_installer"))] pub mod system_extension; diff --git a/src-tauri/src/log_watcher/global_log_watcher.rs b/src-tauri/src/log_watcher/global_log_watcher.rs index 86a92d710..873eaf533 100644 --- a/src-tauri/src/log_watcher/global_log_watcher.rs +++ b/src-tauri/src/log_watcher/global_log_watcher.rs @@ -30,7 +30,7 @@ use crate::{ LOG_FILENAME, }; #[cfg(not(target_os = "macos"))] -use crate::{log_watcher::extract_timestamp, utils::get_service_log_dir}; +use crate::{log_watcher::extract_timestamp, utils::DEFAULT_SERVICE_LOG_DIR}; #[cfg(target_os = "macos")] pub(crate) const VPN_EXTENSION_LOG_FILENAME: &str = "vpn-extension.log"; @@ -56,7 +56,7 @@ impl LogDirs { pub fn new(handle: &AppHandle) -> Result { debug!("Getting log directories for service and client to watch."); #[cfg(not(target_os = "macos"))] - let service_log_dir = get_service_log_dir().to_path_buf(); + let service_log_dir = std::path::Path::new(DEFAULT_SERVICE_LOG_DIR).to_path_buf(); let client_log_dir = handle.path().app_log_dir().map_err(|_| { LogWatcherError::LogPathError("Path to client logs directory is empty.".to_string()) })?; diff --git a/src-tauri/src/log_watcher/service_log_watcher.rs b/src-tauri/src/log_watcher/service_log_watcher.rs index 175fe696f..ede8e65b5 100644 --- a/src-tauri/src/log_watcher/service_log_watcher.rs +++ b/src-tauri/src/log_watcher/service_log_watcher.rs @@ -27,7 +27,7 @@ use tracing::Level; use super::LogLineFields; use super::{LogLine, LogWatcherError}; #[cfg(not(target_os = "macos"))] -use crate::utils::get_service_log_dir; +use crate::utils::DEFAULT_SERVICE_LOG_DIR; use crate::{ appstate::AppState, database::models::Id, error::Error, log_watcher::extract_timestamp, utils::get_tunnel_or_location_name, ConnectionType, @@ -428,7 +428,7 @@ pub async fn spawn_log_watcher_task( // prepare cancellation token let token = CancellationToken::new(); - let log_dir = get_service_log_dir(); // get log file directory + let log_dir = Path::new(DEFAULT_SERVICE_LOG_DIR); let mut log_watcher = ServiceLogWatcher::new( handle.clone(), token.clone(), diff --git a/src-tauri/src/service/config.rs b/src-tauri/src/service/config.rs deleted file mode 100644 index e2f8528b1..000000000 --- a/src-tauri/src/service/config.rs +++ /dev/null @@ -1,23 +0,0 @@ -use clap::Parser; - -#[cfg(windows)] -pub const DEFAULT_LOG_DIR: &str = "/Logs/defguard-service"; -#[cfg(not(windows))] -pub const DEFAULT_LOG_DIR: &str = "/var/log/defguard-service"; - -#[derive(Debug, Parser, Clone)] -#[clap(about = "Defguard VPN client interface management service")] -#[command(version)] -pub struct Config { - /// Configures log level of defguard service logs - #[arg(long, env = "DEFGUARD_LOG_LEVEL", default_value = "info")] - pub log_level: String, - - /// Configures logging directory; it is meant for debugging only, so hide it. - #[arg(long, env = "DEFGUARD_LOG_DIR", default_value = DEFAULT_LOG_DIR, hide = true)] - pub log_dir: String, - - /// Defines how often (in seconds) interface statistics are sent to defguard client - #[arg(long, short = 'p', env = "DEFGUARD_STATS_PERIOD", default_value = "10")] - pub stats_period: u64, -} diff --git a/src-tauri/src/service/mod.rs b/src-tauri/src/service/mod.rs deleted file mode 100644 index 472f7fce9..000000000 --- a/src-tauri/src/service/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod config; -pub mod utils; diff --git a/src-tauri/src/service/utils.rs b/src-tauri/src/service/utils.rs deleted file mode 100644 index 7796cf56d..000000000 --- a/src-tauri/src/service/utils.rs +++ /dev/null @@ -1,39 +0,0 @@ -use std::io::stdout; - -use tracing::Level; -use tracing_appender::non_blocking::WorkerGuard; -use tracing_subscriber::{ - fmt, fmt::writer::MakeWriterExt, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, - Layer, -}; - -pub fn logging_setup(log_dir: &str, log_level: &str) -> WorkerGuard { - // prepare log file appender - let file_appender = tracing_appender::rolling::daily(log_dir, "defguard-service.log"); - let (non_blocking, guard) = tracing_appender::non_blocking(file_appender); - - // prepare log level filter for stdout - let stdout_filter = EnvFilter::try_from_default_env() - .unwrap_or_else(|_| format!("{log_level},hyper=info,h2=info").into()); - - // prepare log level filter for JSON file - let json_filter = EnvFilter::new("DEBUG,hyper=info,h2=info"); - - // prepare tracing layers - let stdout_layer = fmt::layer() - .pretty() - .with_writer(stdout.with_max_level(Level::DEBUG)) - .with_filter(stdout_filter); - let json_file_layer = fmt::layer() - .json() - .with_writer(non_blocking.with_max_level(Level::DEBUG)) - .with_filter(json_filter); - - // initialize tracing subscriber - tracing_subscriber::registry() - .with(stdout_layer) - .with(json_file_layer) - .init(); - - guard -} diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index 0d3a118f1..74c5bd3ce 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -1,8 +1,8 @@ +#[cfg(not(target_os = "macos"))] +use std::str::FromStr; #[cfg(target_os = "macos")] use std::time::Duration; use std::{env, process::Command}; -#[cfg(not(target_os = "macos"))] -use std::{path::Path, str::FromStr}; #[cfg(not(target_os = "macos"))] use defguard_client_common::{find_free_tcp_port, get_interface_name}; @@ -266,18 +266,12 @@ pub fn load_log_targets() -> Vec { Vec::new() } -/// Helper function to get log file directory for `defguard-service` daemon. -#[cfg(not(target_os = "macos"))] -#[must_use] -pub fn get_service_log_dir() -> &'static Path { - #[cfg(windows)] - let path = "/Logs/defguard-service"; - - #[cfg(not(windows))] - let path = "/var/log/defguard-service"; +/// Default log file directory for `defguard-service` daemon. +#[cfg(windows)] +pub const DEFAULT_SERVICE_LOG_DIR: &str = "/Logs/defguard-service"; - Path::new(path) -} +#[cfg(not(windows))] +pub const DEFAULT_SERVICE_LOG_DIR: &str = "/var/log/defguard-service"; /// Setup client interface #[cfg(not(target_os = "macos"))] From a2137c7798cb13a1379f633c19fb770d89a5270c Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 20 Jul 2026 09:35:21 +0200 Subject: [PATCH 119/155] Update wireguard-rs (#1050) * Update wireguard-rs * Include BoringTun/KeepAlive fix --- .github/workflows/cross-platform-check.yml | 2 +- .github/workflows/e2e.yaml | 7 +- .github/workflows/lint.yaml | 2 +- .github/workflows/release.yaml | 8 +- .github/workflows/sbom.yml | 2 +- .github/workflows/test.yml | 2 +- .github/workflows/update-pnpm-hash.yaml | 2 +- .github/workflows/update-repositories.yml | 2 +- new-ui/biome.json | 2 +- new-ui/package.json | 4 +- new-ui/pnpm-lock.yaml | 86 +-- nix/package.nix | 4 +- package.json | 6 +- pnpm-lock.yaml | 40 +- src-tauri/Cargo.lock | 612 +++++------------- src-tauri/Cargo.toml | 17 +- src-tauri/build.rs | 4 +- src-tauri/client-proto/Cargo.toml | 2 +- src-tauri/common/build.rs | 4 +- src-tauri/core/Cargo.toml | 4 +- src-tauri/daemon/Cargo.toml | 8 +- src-tauri/enterprise/config-sync/Cargo.toml | 2 +- .../enterprise/service-locations/Cargo.toml | 8 +- swift/boringtun | 2 +- swift/build.sh | 6 +- swift/extension/VPNExtension/Adapter.swift | 4 +- 26 files changed, 273 insertions(+), 569 deletions(-) diff --git a/.github/workflows/cross-platform-check.yml b/.github/workflows/cross-platform-check.yml index f12293b56..583033878 100644 --- a/.github/workflows/cross-platform-check.yml +++ b/.github/workflows/cross-platform-check.yml @@ -43,7 +43,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: submodules: recursive diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 25533cfa3..ee052bb47 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -28,6 +28,9 @@ jobs: RUSTC_WRAPPER: sccache SCCACHE_GHA_ENABLED: 'true' DEFGUARD_CLIENT_WELCOME_SKIP: '1' + # Fix for: repository path is not owned by current user. + VERGEN_GIT_SHA: 'e2e' + VERGEN_IDEMPOTENT: '1' steps: - name: Install system dependencies run: | @@ -38,7 +41,7 @@ jobs: libprotobuf-dev webkit2gtk-driver xvfb wireguard-tools iproute2 \ iputils-ping procps xclip desktop-file-utils xdg-utils - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: submodules: recursive @@ -109,7 +112,7 @@ jobs: runs-on: - codebuild-defguard-client-runner-${{ github.run_id }}-${{ github.run_attempt }} steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - uses: actions/setup-node@v6 with: diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index c7dba3f9b..4dbaa3ef8 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -24,7 +24,7 @@ jobs: - codebuild-defguard-client-runner-${{ github.run_id }}-${{ github.run_attempt }} steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: submodules: recursive diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 3d076b5a6..9c41a238b 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -58,7 +58,7 @@ jobs: apt-get update apt-get install -y git curl ca-certificates libatomic1 git config --global --add safe.directory '*' - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: submodules: recursive @@ -162,7 +162,7 @@ jobs: deb_arch: amd64 binary_arch: x86_64 steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: submodules: recursive - name: Write release version @@ -357,7 +357,7 @@ jobs: run: | dnf -y install git gcc gcc-c++ make openssl-devel perl pkgconfig unzip git config --global --add safe.directory '*' - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: submodules: recursive - name: Write release version @@ -418,7 +418,7 @@ jobs: # cpu: arm64 # runs-on: ${{ matrix.windows_runner }} # steps: - # - uses: actions/checkout@v6 + # - uses: actions/checkout@v7 # with: # submodules: recursive # - name: Write release version diff --git a/.github/workflows/sbom.yml b/.github/workflows/sbom.yml index 1fae9ef4b..c0279f2cc 100644 --- a/.github/workflows/sbom.yml +++ b/.github/workflows/sbom.yml @@ -27,7 +27,7 @@ jobs: echo "VERSION=$VERSION" >> $GITHUB_OUTPUT - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: submodules: recursive diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 420d90616..ad792cf64 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -40,7 +40,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: submodules: recursive diff --git a/.github/workflows/update-pnpm-hash.yaml b/.github/workflows/update-pnpm-hash.yaml index 739bec7f1..261e52f16 100644 --- a/.github/workflows/update-pnpm-hash.yaml +++ b/.github/workflows/update-pnpm-hash.yaml @@ -19,7 +19,7 @@ jobs: - codebuild-defguard-client-runner-${{ github.run_id }}-${{ github.run_attempt }} steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: ref: ${{ github.event.pull_request.head.sha }} submodules: recursive diff --git a/.github/workflows/update-repositories.yml b/.github/workflows/update-repositories.yml index 8ba67a24d..6d9483084 100644 --- a/.github/workflows/update-repositories.yml +++ b/.github/workflows/update-repositories.yml @@ -14,7 +14,7 @@ jobs: amd64_sha: ${{ steps.get_sha.outputs.AMD64_SHA }} steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: submodules: recursive diff --git a/new-ui/biome.json b/new-ui/biome.json index cb2c99f92..ee12da4ae 100644 --- a/new-ui/biome.json +++ b/new-ui/biome.json @@ -1,6 +1,6 @@ { "root": true, - "$schema": "https://biomejs.dev/schemas/2.5.3/schema.json", + "$schema": "https://biomejs.dev/schemas/2.5.4/schema.json", "vcs": { "enabled": false, "clientKind": "git", diff --git a/new-ui/package.json b/new-ui/package.json index faf7a279e..ab70334cc 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -59,12 +59,12 @@ "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.3", - "autoprefixer": "^10.5.2", + "autoprefixer": "^10.5.3", "globals": "^17.7.0", "stylelint": "^17.14.0", "stylelint-config-standard-scss": "^17.0.0", "stylelint-scss": "^7.2.0", "typescript": "~6.0.3", - "vite": "^8.1.4" + "vite": "^8.1.5" } } diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index 7913b5ed2..05b25e098 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -31,7 +31,7 @@ importers: version: 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/router-plugin': specifier: ^1.168.20 - version: 1.168.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(rolldown@1.1.5)(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) + version: 1.168.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(rolldown@1.1.5)(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) '@tauri-apps/api': specifier: ^2.11.1 version: 2.11.1 @@ -125,7 +125,7 @@ importers: devDependencies: '@tanstack/devtools-vite': specifier: ^0.8.1 - version: 0.8.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) + version: 0.8.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) '@types/byte-size': specifier: ^8.1.2 version: 8.1.2 @@ -140,10 +140,10 @@ importers: version: 19.2.3(@types/react@19.2.17) '@vitejs/plugin-react': specifier: ^6.0.3 - version: 6.0.3(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) + version: 6.0.3(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) autoprefixer: - specifier: ^10.5.2 - version: 10.5.2(postcss@8.5.19) + specifier: ^10.5.3 + version: 10.5.3(postcss@8.5.19) globals: specifier: ^17.7.0 version: 17.7.0 @@ -160,8 +160,8 @@ importers: specifier: ~6.0.3 version: 6.0.3 vite: - specifier: ^8.1.4 - version: 8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) + specifier: ^8.1.5 + version: 8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) packages: @@ -991,8 +991,8 @@ packages: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} - autoprefixer@10.5.2: - resolution: {integrity: sha512-rD5t5DwOjJdmSORcTq64j8MawTC+tbQ+HHqjR4NDumamy/ambn1UJrlKL+KdwujWxMkFjPM3pPHOEA9tl4767Q==} + autoprefixer@10.5.3: + resolution: {integrity: sha512-bJRzflk8GgE4JX+iZNEwz9f9p460NCHnU7bd+CZ9vIjIlZuTkt6F3WSl2oNO8StZBFx17nLEsiQ6H2wcZiY7nA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -1034,8 +1034,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001805: - resolution: {integrity: sha512-52noaS3DubycKSXaU30TwPGIp+POyQSUVa5jBEq3vkRkY0kjyb3LQgvhU6WGyCcyXqVLWO0Cw0Q6BSdD0kUfVA==} + caniuse-lite@1.0.30001806: + resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1142,8 +1142,8 @@ packages: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} - electron-to-chromium@1.5.389: - resolution: {integrity: sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==} + electron-to-chromium@1.5.392: + resolution: {integrity: sha512-1yQq3VQCZRwsnYc67Oc+1fge6Lwtn0hzi6zmEVkB61Zx21kTbwJAW4dFLadl5Rc1tKhG/kSpYXnfiAhu0f0a1g==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1258,8 +1258,8 @@ packages: resolution: {integrity: sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==} engines: {node: '>=18'} - globby@16.2.1: - resolution: {integrity: sha512-JmsqJalahxxgW8V2ecSQ2G7UjPlI9cpKdrkG9KoNiXhd/YslXOTEB0cViENWUznuovIuNT+FkMbraDGjr4FCUg==} + globby@16.2.2: + resolution: {integrity: sha512-NLvV9ubZ6NDsJaOpKPy3cQeJpKi9DcWiyCiFUpJPA0YihRqiE6RWaLUmgNNPr8MgPpLZjnBjSmou7uZBRJv9wA==} engines: {node: '>=20'} globjoin@0.1.4: @@ -1376,8 +1376,8 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - isbot@5.2.0: - resolution: {integrity: sha512-gbZiGCb4B5xaoxg9mS7koAyRdvJnArk10VLSHOgz6rtBG93/pi1xOFaVvXMKZ7JXgyZ8zAbNRK5uIBdIUTFSqw==} + isbot@5.2.1: + resolution: {integrity: sha512-dJ+LpKyClQZ7NG+j3OensC/mAZkGpukE9YUrgPYvAZj2doVL0edfDgywTUh5CXa0o+nW9a1V9e5+CJTX8+SxRw==} engines: {node: '>=18'} isexe@2.0.0: @@ -2095,8 +2095,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@8.1.4: - resolution: {integrity: sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==} + vite@8.1.5: + resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -2152,8 +2152,8 @@ packages: resolution: {integrity: sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==} engines: {node: ^20.17.0 || >=22.9.0} - ws@8.21.0: - resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + ws@8.21.1: + resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -2673,7 +2673,7 @@ snapshots: '@tanstack/devtools-event-bus@0.4.2': dependencies: - ws: 8.21.0 + ws: 8.21.1 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -2682,7 +2682,7 @@ snapshots: '@tanstack/devtools-event-client@0.5.0': {} - '@tanstack/devtools-vite@0.8.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0))': + '@tanstack/devtools-vite@0.8.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0))': dependencies: '@tanstack/devtools-client': 0.0.8 '@tanstack/devtools-event-bus': 0.4.2 @@ -2691,7 +2691,7 @@ snapshots: magic-string: 0.30.21 oxc-parser: 0.120.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) picomatch: 4.0.5 - vite: 8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) + vite: 8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -2728,7 +2728,7 @@ snapshots: '@tanstack/history': 1.162.0 '@tanstack/react-store': 0.9.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/router-core': 1.171.15 - isbot: 5.2.0 + isbot: 5.2.1 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) @@ -2766,7 +2766,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.168.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(rolldown@1.1.5)(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0))': + '@tanstack/router-plugin@1.168.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(rolldown@1.1.5)(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0))': dependencies: '@babel/core': 7.29.7 '@babel/template': 7.29.7 @@ -2775,11 +2775,11 @@ snapshots: '@tanstack/router-generator': 1.167.19 '@tanstack/router-utils': 1.162.2 chokidar: 5.0.0 - unplugin: 3.3.0(rolldown@1.1.5)(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) + unplugin: 3.3.0(rolldown@1.1.5)(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) zod: 4.4.3 optionalDependencies: '@tanstack/react-router': 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - vite: 8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) + vite: 8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -2889,10 +2889,10 @@ snapshots: '@ungap/structured-clone@1.3.3': {} - '@vitejs/plugin-react@6.0.3(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0))': + '@vitejs/plugin-react@6.0.3(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) + vite: 8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) ajv@8.20.0: dependencies: @@ -2915,10 +2915,10 @@ snapshots: astral-regex@2.0.0: {} - autoprefixer@10.5.2(postcss@8.5.19): + autoprefixer@10.5.3(postcss@8.5.19): dependencies: browserslist: 4.28.6 - caniuse-lite: 1.0.30001805 + caniuse-lite: 1.0.30001806 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.19 @@ -2944,8 +2944,8 @@ snapshots: browserslist@4.28.6: dependencies: baseline-browser-mapping: 2.10.43 - caniuse-lite: 1.0.30001805 - electron-to-chromium: 1.5.389 + caniuse-lite: 1.0.30001806 + electron-to-chromium: 1.5.392 node-releases: 2.0.51 update-browserslist-db: 1.2.3(browserslist@4.28.6) @@ -2961,7 +2961,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001805: {} + caniuse-lite@1.0.30001806: {} ccount@2.0.1: {} @@ -3039,7 +3039,7 @@ snapshots: diff@8.0.4: {} - electron-to-chromium@1.5.389: {} + electron-to-chromium@1.5.392: {} emoji-regex@8.0.0: {} @@ -3131,7 +3131,7 @@ snapshots: globals@17.7.0: {} - globby@16.2.1: + globby@16.2.2: dependencies: '@sindresorhus/merge-streams': 4.0.0 fast-glob: 3.3.3 @@ -3281,7 +3281,7 @@ snapshots: is-plain-object@5.0.0: {} - isbot@5.2.0: {} + isbot@5.2.1: {} isexe@2.0.0: {} @@ -4106,7 +4106,7 @@ snapshots: fastest-levenshtein: 1.0.16 file-entry-cache: 11.1.5 global-modules: 2.0.0 - globby: 16.2.1 + globby: 16.2.2 globjoin: 0.1.4 html-tags: 5.1.0 ignore: 7.0.6 @@ -4202,14 +4202,14 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - unplugin@3.3.0(rolldown@1.1.5)(vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)): + unplugin@3.3.0(rolldown@1.1.5)(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)): dependencies: '@jridgewell/remapping': 2.3.5 picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 optionalDependencies: rolldown: 1.1.5 - vite: 8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) + vite: 8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0) update-browserslist-db@1.2.3(browserslist@4.28.6): dependencies: @@ -4238,7 +4238,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@8.1.4(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0): + vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.5 @@ -4263,7 +4263,7 @@ snapshots: dependencies: signal-exit: 4.1.0 - ws@8.21.0: {} + ws@8.21.1: {} yallist@3.1.1: {} diff --git a/nix/package.nix b/nix/package.nix index 3da474cd7..b2ae60221 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -90,7 +90,7 @@ inherit pname version pnpm; src = ../.; fetcherVersion = 3; - hash = "sha256-wbU1i78mLQPm215uHlyDVfSDeOS/E/7M3mp9Vu3WKgg="; + hash = "sha256-aW+79nfdATunGtxhyHHOE3RqkOX19PH97cWxw+5QlS0="; }; # Prefetch pnpm dependencies for the new UI (separate pnpm project). @@ -99,7 +99,7 @@ inherit version pnpm; src = ../new-ui; fetcherVersion = 3; - hash = "sha256-xJ+zv/jEkc59DfDOJeVU8wRpQz3Ik4EZzRJtBgUOxjo="; + hash = "sha256-1ChpZFG8gJ1ciwfNB1ynOuwRWsMiOs7Ol3BU5rcuaN8="; }; # Pre-build the new UI frontend so Tauri can serve it as WebviewUrl::App("compact/") and "full/". diff --git a/package.json b/package.json index 885941c2d..3914c027e 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "get-text-width": "^1.0.3", "html-react-parser": "^6.1.4", "itertools": "^2.7.1", - "js-base64": "^3.8.1", + "js-base64": "^3.9.1", "lodash-es": "^4.18.1", "merge-refs": "^2.0.0", "millify": "^6.1.0", @@ -110,9 +110,9 @@ "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.2.0", "@vitejs/plugin-react-swc": "^4.3.1", - "autoprefixer": "^10.5.2", + "autoprefixer": "^10.5.3", "npm-run-all": "^4.1.5", - "postcss": "^8.5.18", + "postcss": "^8.5.19", "prettier": "^3.9.5", "sass": "~1.92.1", "typedoc": "^0.28.20", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 76f19cbf0..a87978b58 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -108,8 +108,8 @@ importers: specifier: ^2.7.1 version: 2.7.1 js-base64: - specifier: ^3.8.1 - version: 3.8.1 + specifier: ^3.9.1 + version: 3.9.1 lodash-es: specifier: ^4.18.1 version: 4.18.1 @@ -226,13 +226,13 @@ importers: specifier: ^4.3.1 version: 4.3.1(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0)) autoprefixer: - specifier: ^10.5.2 - version: 10.5.2(postcss@8.5.19) + specifier: ^10.5.3 + version: 10.5.3(postcss@8.5.19) npm-run-all: specifier: ^4.1.5 version: 4.1.5 postcss: - specifier: ^8.5.18 + specifier: ^8.5.19 version: 8.5.19 prettier: specifier: ^3.9.5 @@ -1425,8 +1425,8 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} - autoprefixer@10.5.2: - resolution: {integrity: sha512-rD5t5DwOjJdmSORcTq64j8MawTC+tbQ+HHqjR4NDumamy/ambn1UJrlKL+KdwujWxMkFjPM3pPHOEA9tl4767Q==} + autoprefixer@10.5.3: + resolution: {integrity: sha512-bJRzflk8GgE4JX+iZNEwz9f9p460NCHnU7bd+CZ9vIjIlZuTkt6F3WSl2oNO8StZBFx17nLEsiQ6H2wcZiY7nA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -1502,8 +1502,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001805: - resolution: {integrity: sha512-52noaS3DubycKSXaU30TwPGIp+POyQSUVa5jBEq3vkRkY0kjyb3LQgvhU6WGyCcyXqVLWO0Cw0Q6BSdD0kUfVA==} + caniuse-lite@1.0.30001806: + resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1762,8 +1762,8 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - electron-to-chromium@1.5.389: - resolution: {integrity: sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==} + electron-to-chromium@1.5.392: + resolution: {integrity: sha512-1yQq3VQCZRwsnYc67Oc+1fge6Lwtn0hzi6zmEVkB61Zx21kTbwJAW4dFLadl5Rc1tKhG/kSpYXnfiAhu0f0a1g==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2162,8 +2162,8 @@ packages: resolution: {integrity: sha512-xrbTDDdUfkJhM4EzYOwwzEf2ksPT5WLgQ5i2X9X5yUpcmXJPEjeAnpMl1tIrYDzuCD19/AEH+cbLunQHGn8v7w==} engines: {node: '>=22'} - js-base64@3.8.1: - resolution: {integrity: sha512-5xVjhUZlHHeuO2W7w2rDFj/Kl1xLX+HjZxdOQwCsUOifl6UaoH1o1wsbsTMz+r0aeC7gCijvru02j6TfKZWzKg==} + js-base64@3.9.1: + resolution: {integrity: sha512-U73qptcvf/HIOauFOmqT3a0mDUp0MYlfd15oqoe9kqZt5XhiXVb+HG09sLvI9PQ9tZIBFS4nlErai8zbWazP0g==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -4121,10 +4121,10 @@ snapshots: async-function@1.0.0: {} - autoprefixer@10.5.2(postcss@8.5.19): + autoprefixer@10.5.3(postcss@8.5.19): dependencies: browserslist: 4.28.6 - caniuse-lite: 1.0.30001805 + caniuse-lite: 1.0.30001806 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.19 @@ -4166,8 +4166,8 @@ snapshots: browserslist@4.28.6: dependencies: baseline-browser-mapping: 2.10.43 - caniuse-lite: 1.0.30001805 - electron-to-chromium: 1.5.389 + caniuse-lite: 1.0.30001806 + electron-to-chromium: 1.5.392 node-releases: 2.0.51 update-browserslist-db: 1.2.3(browserslist@4.28.6) @@ -4194,7 +4194,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001805: {} + caniuse-lite@1.0.30001806: {} ccount@2.0.1: {} @@ -4452,7 +4452,7 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - electron-to-chromium@1.5.389: {} + electron-to-chromium@1.5.392: {} emoji-regex@8.0.0: {} @@ -4936,7 +4936,7 @@ snapshots: itertools@2.7.1: {} - js-base64@3.8.1: {} + js-base64@3.9.1: {} js-tokens@4.0.0: {} diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index b99e1c7bb..6942c59c1 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -219,48 +219,6 @@ dependencies = [ "zbus", ] -[[package]] -name = "askama" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f75363874b771be265f4ffe307ca705ef6f3baa19011c149da8674a87f1b75c4" -dependencies = [ - "askama_derive", - "itoa", - "percent-encoding", - "serde", - "serde_json", -] - -[[package]] -name = "askama_derive" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "129397200fe83088e8a68407a8e2b1f826cf0086b21ccdb866a722c8bcd3a94f" -dependencies = [ - "askama_parser", - "basic-toml", - "memchr", - "proc-macro2", - "quote", - "rustc-hash", - "serde", - "serde_derive", - "syn 2.0.119", -] - -[[package]] -name = "askama_parser" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6ab5630b3d5eaf232620167977f95eb51f3432fc76852328774afbd242d4358" -dependencies = [ - "memchr", - "serde", - "serde_derive", - "winnow 0.7.15", -] - [[package]] name = "async-broadcast" version = "0.7.2" @@ -561,7 +519,7 @@ dependencies = [ "anyhow", "arrayvec", "log", - "nom 8.0.0", + "nom", "num-rational", "v_frame", ] @@ -659,15 +617,6 @@ version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" -[[package]] -name = "basic-toml" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" -dependencies = [ - "serde", -] - [[package]] name = "bit-set" version = "0.8.0" @@ -697,9 +646,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" dependencies = [ "serde_core", ] @@ -771,6 +720,31 @@ dependencies = [ "piper", ] +[[package]] +name = "bon" +version = "3.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a602c73c7b0148ec6d12af6fd5cc7a46e2eacc8878271a999abac56eed12f561" +dependencies = [ + "bon-macros", + "rustversion", +] + +[[package]] +name = "bon-macros" +version = "3.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dee98b0db6a962de883bf5d20362dee4d7ca0d12fe39a7c6c73c844e1cd7c1f" +dependencies = [ + "darling", + "ident_case", + "prettyplease", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.119", +] + [[package]] name = "brotli" version = "8.0.4" @@ -846,7 +820,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cairo-sys-rs", "glib", "libc", @@ -954,9 +928,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "chacha20" @@ -1020,9 +994,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "dd059f9da4f5c36b3787f65d38ccaab1cc315f07b01f89abc8359ee6a8205011" dependencies = [ "clap_builder", "clap_derive", @@ -1030,9 +1004,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b" dependencies = [ "anstream", "anstyle", @@ -1200,7 +1174,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.10.1", "core-graphics-types", "foreign-types 0.5.0", @@ -1213,7 +1187,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.10.1", "libc", ] @@ -1377,7 +1351,21 @@ dependencies = [ "cfg-if", "cpufeatures 0.2.17", "curve25519-dalek-derive", - "fiat-crypto", + "fiat-crypto 0.2.9", + "rustc_version", + "subtle", +] + +[[package]] +name = "curve25519-dalek" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "curve25519-dalek-derive", + "fiat-crypto 0.3.0", "rustc_version", "serde", "subtle", @@ -1409,38 +1397,14 @@ dependencies = [ "winreg 0.52.0", ] -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" -dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - [[package]] name = "darling" version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ - "darling_core 0.23.0", - "darling_macro 0.23.0", -] - -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.119", + "darling_core", + "darling_macro", ] [[package]] @@ -1456,24 +1420,13 @@ dependencies = [ "syn 2.0.119", ] -[[package]] -name = "darling_macro" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" -dependencies = [ - "darling_core 0.20.11", - "quote", - "syn 2.0.119", -] - [[package]] name = "darling_macro" version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ - "darling_core 0.23.0", + "darling_core", "quote", "syn 2.0.119", ] @@ -1610,7 +1563,7 @@ dependencies = [ "windows-service", "windows-sys 0.61.2", "wmi", - "x25519-dalek", + "x25519-dalek 3.0.0", ] [[package]] @@ -1676,7 +1629,7 @@ dependencies = [ "tower", "tracing", "windows-sys 0.61.2", - "x25519-dalek", + "x25519-dalek 3.0.0", ] [[package]] @@ -1707,7 +1660,7 @@ dependencies = [ "tonic-prost", "tonic-prost-build", "wmi", - "x25519-dalek", + "x25519-dalek 3.0.0", ] [[package]] @@ -1794,9 +1747,9 @@ dependencies = [ [[package]] name = "defguard_boringtun" -version = "0.6.5" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b7c7f465dde186f958a0a0e4ae823af623451ba26817b8b366b9968286df7a1" +checksum = "a265bf3af32d0a0e19d5a22cb2c46b685afa6b7e00fcdade90546fbb7d5eca4f" dependencies = [ "aead", "base64 0.22.1", @@ -1813,16 +1766,14 @@ dependencies = [ "socket2", "thiserror 2.0.18", "tracing", - "uniffi", - "untrusted", - "x25519-dalek", + "x25519-dalek 2.0.1", ] [[package]] name = "defguard_wireguard_rs" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f4188d2edddeff6c87f01746ddd869a34ea4a5b0005909b9f8b89c806bfdd0d" +checksum = "965cc85008b140f6919a25ed789b88b45dc9300ddd41b6744859df1cb1646042" dependencies = [ "base64 0.22.1", "defguard_boringtun", @@ -1840,7 +1791,7 @@ dependencies = [ "thiserror 2.0.18", "windows 0.62.2", "wireguard-nt", - "x25519-dalek", + "x25519-dalek 3.0.0", ] [[package]] @@ -1863,37 +1814,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "derive_builder" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" -dependencies = [ - "darling 0.20.11", - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "derive_builder_macro" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" -dependencies = [ - "derive_builder_core", - "syn 2.0.119", -] - [[package]] name = "derive_more" version = "2.1.1" @@ -1986,7 +1906,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -2341,6 +2261,12 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +[[package]] +name = "fiat-crypto" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" + [[package]] name = "field-offset" version = "0.3.6" @@ -2453,15 +2379,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fs-err" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" -dependencies = [ - "autocfg", -] - [[package]] name = "fs_extra" version = "1.3.0" @@ -2782,15 +2699,14 @@ dependencies = [ [[package]] name = "git2" -version = "0.20.4" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" +checksum = "ddddbf932745a6be37109b6112d3ee09696106f848449069d3a57bba937ab82e" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "libc", "libgit2-sys", "log", - "url", ] [[package]] @@ -2799,7 +2715,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "futures-channel", "futures-core", "futures-executor", @@ -2869,17 +2785,6 @@ dependencies = [ "system-deps", ] -[[package]] -name = "goblin" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" -dependencies = [ - "log", - "plain", - "scroll", -] - [[package]] name = "gtk" version = "0.18.2" @@ -3673,7 +3578,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "serde", "unicode-segmentation", ] @@ -3804,7 +3709,7 @@ version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "libc", "plain", "redox_syscall 0.9.0", @@ -3966,12 +3871,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.8.9" @@ -4053,7 +3952,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "jni-sys 0.3.1", "log", "ndk-sys", @@ -4097,11 +3996,11 @@ dependencies = [ [[package]] name = "netlink-packet-route" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be8919612f6028ab4eacbbfe1234a9a43e3722c6e0915e7ff519066991905092" +checksum = "e2288fcb784eb3defd5fb16f4c4160d5f477de192eac730f43e1d11c24d9a007" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "libc", "log", "netlink-packet-core", @@ -4124,7 +4023,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb217ca08c02978c3ea5ef0f013d20c602f2a17a9f00d9e4b1518a3500c2f332" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "libc", "log", "netlink-packet-core", @@ -4154,7 +4053,7 @@ version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "libc", @@ -4170,16 +4069,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "nom" version = "8.0.0" @@ -4383,7 +4272,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -4404,7 +4293,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -4415,7 +4304,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -4426,7 +4315,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "dispatch2", "objc2 0.6.4", ] @@ -4437,7 +4326,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "dispatch2", "objc2 0.6.4", "objc2-core-foundation", @@ -4470,7 +4359,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -4482,7 +4371,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -4510,7 +4399,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -4522,7 +4411,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -4545,7 +4434,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", ] @@ -4570,7 +4459,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -4582,7 +4471,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", ] @@ -4604,7 +4493,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "objc2 0.6.4", "objc2-cloud-kit", @@ -4635,7 +4524,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "objc2 0.6.4", "objc2-app-kit", @@ -4678,7 +4567,7 @@ version = "0.10.81" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "foreign-types 0.3.2", "libc", @@ -5040,7 +4929,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "crc32fast", "fdeflate", "flate2", @@ -5268,7 +5157,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "memchr", "unicase", ] @@ -5572,7 +5461,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -5613,7 +5502,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -5622,7 +5511,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5102a6aaa05aa011a238e178e6bca86d2cb56fc9f586d37cb80f5bca6e07759" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -5669,9 +5558,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -5681,9 +5570,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.15" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" dependencies = [ "aho-corasick", "memchr", @@ -5885,7 +5774,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys", @@ -6056,26 +5945,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scroll" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" -dependencies = [ - "scroll_derive", -] - -[[package]] -name = "scroll_derive" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "secrecy" version = "0.10.3" @@ -6091,7 +5960,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -6114,7 +5983,7 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cssparser", "derive_more", "log", @@ -6270,7 +6139,7 @@ version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" dependencies = [ - "darling 0.23.0", + "darling", "proc-macro2", "quote", "syn 2.0.119", @@ -6427,12 +6296,6 @@ dependencies = [ "serde", ] -[[package]] -name = "smawk" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8e2fb0f499abb4d162f2bedad68f5ef91a1682b5a03596ddb67efd37768d100" - [[package]] name = "socket2" version = "0.6.5" @@ -6605,7 +6468,7 @@ checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.13.0", + "bitflags 2.13.1", "byteorder", "bytes", "chrono", @@ -6649,7 +6512,7 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.13.0", + "bitflags 2.13.1", "byteorder", "chrono", "crc", @@ -6712,12 +6575,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - [[package]] name = "string_cache" version = "0.9.0" @@ -6912,7 +6769,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -6946,7 +6803,7 @@ version = "0.35.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1c93047acf68669466a34690ac58cca7010bd1b201e1ec86f1fd0a75d3dd4a9" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "core-foundation 0.10.1", "core-graphics", @@ -7342,7 +7199,7 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73736611e14142408d15353e21e3cca2f12a3cfb523ad0ce85999b6d2ef1a704" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "log", "serde", "serde_json", @@ -7484,15 +7341,6 @@ dependencies = [ "new_debug_unreachable", ] -[[package]] -name = "textwrap" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" -dependencies = [ - "smawk", -] - [[package]] name = "thiserror" version = "1.0.69" @@ -7624,9 +7472,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "d988bcd52dbe076d3d46903332f58c912b87a2c49b1428419a5845154762ffee" dependencies = [ "bytes", "libc", @@ -7641,9 +7489,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "6328af13490e73a9b4694030fafd93f8c8c6a9dede33e821c3fc63eddf8042ba" dependencies = [ "proc-macro2", "quote", @@ -7683,9 +7531,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c" +checksum = "17a073bfed563fa236697a068031408a93cd9522e08abf9933ead3e73411bd71" dependencies = [ "futures-util", "log", @@ -7924,7 +7772,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytes", "futures-util", "http", @@ -8065,7 +7913,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6" dependencies = [ "memchr", - "nom 8.0.0", + "nom", "petgraph", ] @@ -8077,9 +7925,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8" +checksum = "e48ac77174b19c110a50ab2128b24215ac9cb40e0e12e093fb602d175c569d22" dependencies = [ "bytes", "data-encoding", @@ -8087,8 +7935,8 @@ dependencies = [ "httparse", "log", "native-tls", - "rand 0.9.5", - "sha1 0.10.7", + "rand 0.10.2", + "sha1 0.11.0", "thiserror 2.0.18", ] @@ -8195,139 +8043,6 @@ version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" -[[package]] -name = "uniffi" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46eefd5468602930da46b1f49d3448c6dfc2e81295f93120f23f8174fd70267f" -dependencies = [ - "anyhow", - "camino", - "cargo_metadata", - "clap", - "uniffi_bindgen", - "uniffi_build", - "uniffi_core", - "uniffi_macros", - "uniffi_pipeline", -] - -[[package]] -name = "uniffi_bindgen" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a0c9b375d32e1365cdb2bdd7cb495eecf6fac851ddbad077412b4ee1888514" -dependencies = [ - "anyhow", - "askama", - "camino", - "cargo_metadata", - "fs-err", - "glob", - "goblin", - "heck 0.5.0", - "indexmap 2.14.0", - "once_cell", - "serde", - "tempfile", - "textwrap", - "toml 0.9.12+spec-1.1.0", - "uniffi_internal_macros", - "uniffi_meta", - "uniffi_pipeline", - "uniffi_udl", -] - -[[package]] -name = "uniffi_build" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744fe15bcd3e2b1712a4573a45ce749af19cf28d69027ca5789619014955668c" -dependencies = [ - "anyhow", - "camino", - "uniffi_bindgen", -] - -[[package]] -name = "uniffi_core" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eec017b112701681f6fbbe5d92014b5c468eb0b177a94389de03ceec40665095" -dependencies = [ - "anyhow", - "bytes", - "once_cell", - "static_assertions", -] - -[[package]] -name = "uniffi_internal_macros" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4641669b48fefbc5e80ff08c5004d9c7617fb91232131a6734ab6712779cb04c" -dependencies = [ - "anyhow", - "indexmap 2.14.0", - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "uniffi_macros" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeb8617ee814de22caf7417bf514715ba0b3f46bd9d5a5d794413fd8282cb737" -dependencies = [ - "camino", - "fs-err", - "once_cell", - "proc-macro2", - "quote", - "serde", - "syn 2.0.119", - "toml 0.9.12+spec-1.1.0", - "uniffi_meta", -] - -[[package]] -name = "uniffi_meta" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58d5b94fc92803d21b2928bd15c6f06e57609b95caf98ea561c99cda1b6d2a25" -dependencies = [ - "anyhow", - "siphasher", - "uniffi_internal_macros", - "uniffi_pipeline", -] - -[[package]] -name = "uniffi_pipeline" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "032739b3ec725576914c15899dedaf080163ced86b6934566c20ec2b20ce90ca" -dependencies = [ - "anyhow", - "heck 0.5.0", - "indexmap 2.14.0", - "tempfile", - "uniffi_internal_macros", -] - -[[package]] -name = "uniffi_udl" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a1d0a0252ce1af9e8ce78ba67ac0d8937fb2bedaf10cbddd43d3614d06ec6" -dependencies = [ - "anyhow", - "textwrap", - "uniffi_meta", - "weedle2", -] - [[package]] name = "universal-hash" version = "0.5.1" @@ -8383,9 +8098,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.5" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea5fab0d6c3c01ae70085a09cb03d4c7a1d6314e2b3e075392783396d724ca0a" +checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -8424,12 +8139,12 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vergen" -version = "9.1.0" +version = "10.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b849a1f6d8639e8de261e81ee0fc881e3e3620db1af9f2e0da015d4382ceaf75" +checksum = "b5574dd2f922b1a46a06a4b1dc11193a4012108fd54cf725e1816cb8183d8778" dependencies = [ "anyhow", - "derive_builder", + "bon", "rustversion", "time", "vergen-lib", @@ -8437,12 +8152,12 @@ dependencies = [ [[package]] name = "vergen-git2" -version = "9.1.0" +version = "10.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51ab55ddf1188c8d679f349775362b0fa9e90bd7a4ac69838b2a087623f0d57" +checksum = "410e2f72acce10471037150cd9c585ee7b54560f348bf70cd5fc8e87d3433e45" dependencies = [ "anyhow", - "derive_builder", + "bon", "git2", "rustversion", "time", @@ -8452,12 +8167,12 @@ dependencies = [ [[package]] name = "vergen-lib" -version = "9.1.0" +version = "10.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b34a29ba7e9c59e62f229ae1932fb1b8fb8a6fdcc99215a641913f5f5a59a569" +checksum = "8cd42fd155c2c2971f6d00face12ec245fbb604fce011ccaf2306d014c2e97ca" dependencies = [ "anyhow", - "derive_builder", + "bon", "rustversion", ] @@ -8620,7 +8335,7 @@ version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "rustix", "wayland-backend", "wayland-scanner", @@ -8632,7 +8347,7 @@ version = "0.32.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-scanner", @@ -8644,7 +8359,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8817,15 +8532,6 @@ dependencies = [ "windows-core 0.61.2", ] -[[package]] -name = "weedle2" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "998d2c24ec099a87daf9467808859f9d82b61f1d9c9701251aea037f514eae0e" -dependencies = [ - "nom 7.1.3", -] - [[package]] name = "weezl" version = "0.1.12" @@ -9103,7 +8809,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "857224b3b211c6f3616921f081ee54721ee3ad2ace2fac6a6337e032f7b4dcf2" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "widestring 1.2.1", "windows-sys 0.61.2", ] @@ -9464,9 +9170,6 @@ name = "winnow" version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" -dependencies = [ - "memchr", -] [[package]] name = "winnow" @@ -9503,7 +9206,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22b4dbcc6c93786cf22e420ef96e8976bfb92a455070282302b74de5848191f4" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "getrandom 0.2.17", "ipnet", "libloading 0.8.9", @@ -9645,8 +9348,19 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ - "curve25519-dalek", + "curve25519-dalek 4.1.3", "rand_core 0.6.4", +] + +[[package]] +name = "x25519-dalek" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e8131a03190127fb2263afc72b322ecadae46b6ff8c6f399ff5d02f5559af6" +dependencies = [ + "curve25519-dalek 5.0.0", + "getrandom 0.4.3", + "rand_core 0.10.1", "serde", "zeroize", ] @@ -9787,20 +9501,6 @@ name = "zeroize" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] [[package]] name = "zerotrie" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index dfc6a3950..ec0e3f001 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -6,7 +6,7 @@ default-members = ["cli", "client-cli", "daemon", "."] base64 = "0.22" chrono = { version = "0.4", features = ["serde"] } clap = { version = "4.5", features = ["cargo", "derive", "env"] } -defguard_wireguard_rs = "0.10" +defguard_wireguard_rs = "0.11" dirs-next = "2.0" log = { version = "0.4", features = ["serde"] } prost = "0.14" @@ -37,8 +37,13 @@ futures-util = "0.3" http = "1" image = "0.25" qrcode = { version = "0.14", features = ["image"] } -tokio-tungstenite = { version = "0.29", features = ["native-tls"] } -vergen-git2 = { version = "9.1", features = ["build"] } +tokio-tungstenite = { version = "0.30", features = ["native-tls"] } +vergen-git2 = { version = "10.0", features = ["build"] } +x25519-dalek = { version = "3.0", features = [ + "getrandom", + "serde", + "static_secrets", +] } [workspace.package] authors = ["Defguard"] @@ -131,11 +136,7 @@ tracing.workspace = true tracing-appender = "0.2" tracing-subscriber.workspace = true webbrowser.workspace = true -x25519-dalek = { version = "2", features = [ - "getrandom", - "serde", - "static_secrets", -] } +x25519-dalek.workspace = true [target.'cfg(target_os = "macos")'.dependencies] block2 = "0.6" diff --git a/src-tauri/build.rs b/src-tauri/build.rs index 02c6245a7..8c57c088d 100644 --- a/src-tauri/build.rs +++ b/src-tauri/build.rs @@ -1,4 +1,4 @@ -use vergen_git2::{Emitter, Git2Builder}; +use vergen_git2::{Emitter, Git2}; fn main() -> Result<(), Box> { println!("cargo:rerun-if-env-changed=DEFGUARD_CLIENT_BUILD_VERSION"); @@ -10,7 +10,7 @@ fn main() -> Result<(), Box> { } // set VERGEN_GIT_SHA env variable based on git commit hash - let git2 = Git2Builder::default().branch(true).sha(true).build()?; + let git2 = Git2::builder().branch(true).sha(true).build(); Emitter::default().add_instructions(&git2)?.emit()?; if std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default() == "macos" diff --git a/src-tauri/client-proto/Cargo.toml b/src-tauri/client-proto/Cargo.toml index 8e4ae4b21..30932eb3d 100644 --- a/src-tauri/client-proto/Cargo.toml +++ b/src-tauri/client-proto/Cargo.toml @@ -24,4 +24,4 @@ defguard_wireguard_rs.workspace = true wmi = { version = "0.18", default-features = false } [dev-dependencies] -x25519-dalek = { version = "2", features = ["getrandom", "static_secrets"] } +x25519-dalek = { workspace = true, features = ["getrandom", "static_secrets"] } diff --git a/src-tauri/common/build.rs b/src-tauri/common/build.rs index e0c6a3c1e..1a5094db2 100644 --- a/src-tauri/common/build.rs +++ b/src-tauri/common/build.rs @@ -1,7 +1,7 @@ -use vergen_git2::{Emitter, Git2Builder}; +use vergen_git2::{Emitter, Git2}; fn main() -> Result<(), Box> { - let git2 = Git2Builder::default().sha(true).build()?; + let git2 = Git2::builder().sha(true).build(); Emitter::default().add_instructions(&git2)?.emit()?; Ok(()) } diff --git a/src-tauri/core/Cargo.toml b/src-tauri/core/Cargo.toml index 8b98cf965..ee9d98202 100644 --- a/src-tauri/core/Cargo.toml +++ b/src-tauri/core/Cargo.toml @@ -33,8 +33,8 @@ thiserror.workspace = true tokio.workspace = true tonic.workspace = true tower = "0.5" -tracing = { workspace = true } -x25519-dalek = { version = "2", features = ["getrandom", "serde", "static_secrets"] } +tracing.workspace = true +x25519-dalek.workspace = true [dev-dependencies] tempfile.workspace = true diff --git a/src-tauri/daemon/Cargo.toml b/src-tauri/daemon/Cargo.toml index feace7837..20bd6f5d7 100644 --- a/src-tauri/daemon/Cargo.toml +++ b/src-tauri/daemon/Cargo.toml @@ -10,7 +10,7 @@ version.workspace = true [dependencies] anyhow = "1.0" -clap = { workspace = true } +clap.workspace = true defguard-client-common = { path = "../common" } defguard-client-proto = { path = "../client-proto" } defguard-client-posture = { path = "../enterprise/posture" } @@ -18,11 +18,11 @@ defguard-client-service-locations = { path = "../enterprise/service-locations" } defguard_wireguard_rs.workspace = true log.workspace = true serde.workspace = true -thiserror = { workspace = true } +thiserror.workspace = true tokio = { version = "1", features = ["net", "rt-multi-thread", "signal", "sync", "time"] } tokio-stream = { version = "0.1", features = ["net"] } -tonic = { workspace = true } -tracing = { workspace = true } +tonic.workspace = true +tracing.workspace = true tracing-appender = "0.2" tracing-subscriber = { workspace = true } diff --git a/src-tauri/enterprise/config-sync/Cargo.toml b/src-tauri/enterprise/config-sync/Cargo.toml index e6f051b33..4892b40a2 100644 --- a/src-tauri/enterprise/config-sync/Cargo.toml +++ b/src-tauri/enterprise/config-sync/Cargo.toml @@ -24,4 +24,4 @@ tokio = { version = "1", features = ["time"] } http.workspace = true [target.'cfg(not(target_os = "macos"))'.dependencies] -tonic = { workspace = true } +tonic.workspace = true diff --git a/src-tauri/enterprise/service-locations/Cargo.toml b/src-tauri/enterprise/service-locations/Cargo.toml index 9d231fe89..39af6b739 100644 --- a/src-tauri/enterprise/service-locations/Cargo.toml +++ b/src-tauri/enterprise/service-locations/Cargo.toml @@ -15,10 +15,10 @@ defguard-client-proto = { path = "../../client-proto" } defguard_wireguard_rs.workspace = true base64.workspace = true log.workspace = true -prost = { workspace = true } -serde = { workspace = true } -serde_json = { workspace = true } -thiserror = { workspace = true } +prost.workspace = true +serde.workspace = true +serde_json.workspace = true +thiserror.workspace = true tokio = { workspace = true, features = ["time"] } [target.'cfg(windows)'.dependencies] diff --git a/swift/boringtun b/swift/boringtun index b7c29222f..bb1011289 160000 --- a/swift/boringtun +++ b/swift/boringtun @@ -1 +1 @@ -Subproject commit b7c29222f9881165e514088cc8f6c6463e0aa452 +Subproject commit bb1011289f31ad7544f6dfb1fcaac74e608f7911 diff --git a/swift/build.sh b/swift/build.sh index 2b62e593f..fade1c230 100755 --- a/swift/build.sh +++ b/swift/build.sh @@ -13,7 +13,7 @@ pushd boringtun for TARGET in aarch64-apple-darwin x86_64-apple-darwin; do ${RUSTUP} target add "${TARGET}" - ${CARGO} build --lib --locked --release --target ${TARGET} + ${CARGO} build --features=bindgen --lib --locked --release --target ${TARGET} done # Create universal library. @@ -23,8 +23,8 @@ lipo -create \ ${TARGET_DIR}/x86_64-apple-darwin/release/libdefguard_boringtun.a \ -output ${TARGET_DIR}/universal/release/libdefguard_boringtun.a -rm -f -r target/uniffi -${CARGO} run --release --bin uniffi-bindgen -- \ +rm -f -r ${TARGET_DIR}/uniffi +${CARGO} run --features=bindgen --release --bin uniffi-bindgen -- \ --xcframework --headers --modulemap --swift-sources \ ${TARGET_DIR}/aarch64-apple-darwin/release/libdefguard_boringtun.a ${TARGET_DIR}/uniffi diff --git a/swift/extension/VPNExtension/Adapter.swift b/swift/extension/VPNExtension/Adapter.swift index bd3650034..103c16355 100644 --- a/swift/extension/VPNExtension/Adapter.swift +++ b/swift/extension/VPNExtension/Adapter.swift @@ -231,8 +231,8 @@ enum State { log.info("Creating keep-alive timer") let timer = DispatchSource.makeTimerSource(queue: ioQueue) timer.schedule( - deadline: .now() + .milliseconds(250), - repeating: .milliseconds(250), + deadline: .now() + .seconds(1), + repeating: .seconds(1), leeway: .milliseconds(25) ) timer.setEventHandler { [weak self] in From 27413a5e8888260758534907442ae34d4450849d Mon Sep 17 00:00:00 2001 From: Maciek <19913370+wojcik91@users.noreply.github.com> Date: Mon, 20 Jul 2026 12:45:42 +0200 Subject: [PATCH 120/155] migrate connection-related logic to backend (#1040) * formatting * add wiremock dependency * add mock WebSocket helpers * setup enrollment flow base * add methods for other enrollment endpoints * test enrollment helpers * add helpers for MFA flow requests * add helpers for polling MFA results * add MFA helpers tests * add enrollment sessions & MFA polling tasks to AppState * add MFA-related tauri events * add tauri commands for calling new mfa & enrollment helpers * refactor AddInstance and Enrollment workflows to use new commands * remove unused types * formatting * fix derive order * refactor basic MFA code flow * add missing posture data * refactor OIDC flow * refactor mobile auth flow * remove redundant helpers * use new helpers in CLI * remove legacy CLI tests * make powershell setting windows-only * cleanup * avoid sending PSK to frontend * extract more shared helpers * use different approach to setting windows shell in justfile * fix the location ID used for connection * fix proxy API typing * add missing css file import * restore relevant comments * cleanup sessions * restore pre-existing 404 fallback * make error type naming consistent * fix invalid code error * fix user-facing errors * remove duplicate frontend timeout * add more tests * fix posture errors * formatting * fix snake_case * simplify method selection approach * lint fix * remove legacy edge-api module * make response typing stricter --- justfile | 2 +- .../full/AddInstancePage/AddInstancePage.tsx | 21 +- .../full/EnrollmentPage/hooks/activateUser.ts | 15 +- .../hooks/useEnrollmentStore.tsx | 24 +- .../steps/FinishStep/FinishStep.tsx | 8 + .../steps/MfaChoiceStep/MfaChoiceStep.tsx | 15 +- .../MfaConfigurationStep.tsx | 60 +- .../steps/PasswordStep/PasswordStep.tsx | 39 +- .../hooks/useConnectModalMfaOidc.ts | 182 ++-- .../ConnectModalMfaEmail.tsx | 5 +- .../ConnectModalMfaTotp.tsx | 5 +- .../UpdateInstanceModal.tsx | 4 +- .../UpdateTunnelModal/UpdateTunnelModal.tsx | 4 +- .../LocationCard/api/startClientMfaSession.ts | 123 --- .../LocationCard/hooks/handleMfaStartError.ts | 26 - .../LocationCard/hooks/useMfaConnect.ts | 113 +-- .../LocationCard/hooks/useMfaMobileConnect.ts | 211 +++-- .../LocationCard/hooks/useMfaOidcConnect.ts | 182 ++-- .../LocationCardMfaEmailView.tsx | 4 +- .../LocationCardMfaTotpView.tsx | 4 +- new-ui/src/shared/edge-api/api.ts | 308 ------- new-ui/src/shared/edge-api/types.ts | 86 -- new-ui/src/shared/rust-api/api.ts | 108 +++ new-ui/src/shared/rust-api/enrollment.ts | 169 ++++ new-ui/src/shared/rust-api/mfaError.ts | 56 ++ new-ui/src/shared/rust-api/types.ts | 121 ++- src-tauri/Cargo.lock | 319 ++++--- src-tauri/Cargo.toml | 4 + src-tauri/client-cli/Cargo.toml | 2 + src-tauri/client-cli/src/main.rs | 2 - src-tauri/client-cli/src/mfa.rs | 616 +++---------- src-tauri/client-cli/src/mfa_qr.rs | 3 +- src-tauri/client-cli/src/tests_proxy.rs | 563 ------------ src-tauri/client-proto/build.rs | 16 + src-tauri/core/Cargo.toml | 6 + src-tauri/core/src/enrollment.rs | 649 ++++++++++++++ src-tauri/core/src/events.rs | 8 + src-tauri/core/src/lib.rs | 4 + src-tauri/core/src/mfa.rs | 836 ++++++++++++++++++ src-tauri/core/src/test_helpers.rs | 77 ++ src-tauri/core/src/version.rs | 3 +- src-tauri/permissions/default.toml | 12 + src-tauri/src/appstate.rs | 11 +- src-tauri/src/bin/defguard-client.rs | 12 + src-tauri/src/commands.rs | 469 +++++++++- src-tauri/src/periodic/config.rs | 7 +- src-tauri/src/periodic/connection.rs | 2 +- src-tauri/src/session_state.rs | 3 +- src-tauri/src/tray.rs | 2 +- src-tauri/src/utils.rs | 4 +- 50 files changed, 3283 insertions(+), 2242 deletions(-) delete mode 100644 new-ui/src/shared/components/LocationCard/api/startClientMfaSession.ts delete mode 100644 new-ui/src/shared/components/LocationCard/hooks/handleMfaStartError.ts delete mode 100644 new-ui/src/shared/edge-api/api.ts delete mode 100644 new-ui/src/shared/edge-api/types.ts create mode 100644 new-ui/src/shared/rust-api/enrollment.ts create mode 100644 new-ui/src/shared/rust-api/mfaError.ts delete mode 100644 src-tauri/client-cli/src/tests_proxy.rs create mode 100644 src-tauri/core/src/enrollment.rs create mode 100644 src-tauri/core/src/mfa.rs create mode 100644 src-tauri/core/src/test_helpers.rs diff --git a/justfile b/justfile index 9e53b3e33..daabed537 100644 --- a/justfile +++ b/justfile @@ -1,4 +1,4 @@ -set shell := ["powershell.exe", "-c"] +set windows-shell := ["powershell.exe", "-c"] dev: npx concurrently \ diff --git a/new-ui/src/pages/full/AddInstancePage/AddInstancePage.tsx b/new-ui/src/pages/full/AddInstancePage/AddInstancePage.tsx index 2ee2f08b4..b63cd1ecd 100644 --- a/new-ui/src/pages/full/AddInstancePage/AddInstancePage.tsx +++ b/new-ui/src/pages/full/AddInstancePage/AddInstancePage.tsx @@ -1,6 +1,7 @@ import './style.scss'; import { useLoaderData, useNavigate, useSearch } from '@tanstack/react-router'; +import { error } from '@tauri-apps/plugin-log'; import { Fragment, useMemo } from 'react'; import z from 'zod'; import { Button } from '../../../shared/components/Button/Button'; @@ -8,11 +9,14 @@ import { ButtonVariant } from '../../../shared/components/Button/types'; import { Controls } from '../../../shared/components/Controls/Controls'; import { FullPageTitle } from '../../../shared/components/FullPageTitle/FullPageTitle'; import { SizedBox } from '../../../shared/components/SizedBox/SizedBox'; -import { edgeApi } from '../../../shared/edge-api/api'; import { useAppForm } from '../../../shared/form'; import { formChangeLogic } from '../../../shared/formLogic'; import { FullPage } from '../../../shared/layouts/FullPage/FullPage'; import { Snackbar } from '../../../shared/providers/snackbar/snackbar'; +import { + enrollmentAddInstance, + enrollmentCreateDevice, +} from '../../../shared/rust-api/enrollment'; import { ThemeSpacing } from '../../../shared/types'; import { isPresent } from '../../../shared/utils/isPresent'; import { useEnrollmentStore } from '../EnrollmentPage/hooks/useEnrollmentStore'; @@ -48,7 +52,7 @@ export const AddInstancePage = () => { onChange: formSchema, }, onSubmit: async ({ value, formApi }) => { - const result = await edgeApi.addInstance(value); + const result = await enrollmentAddInstance(value); if (result.error ?? result.errorKind) { if (result.errorKind === 'network') { formApi.setErrorMap({ @@ -68,16 +72,21 @@ export const AddInstancePage = () => { }); return; } + void error(`Failed to add instance: ${result.error ?? 'unknown error'}`); Snackbar.error('Communication error, contact administrator.'); return; } - if (result.cookie) { - await edgeApi.createDevice(value.url, result.cookie, value.name.trim()); + if (result.session_id) { + await enrollmentCreateDevice(result.session_id, value.name.trim()); } - if (result.startResponse && !result.startResponse.user.enrolled && result.cookie) { + if ( + result.startResponse && + !result.startResponse.user.enrolled && + result.session_id + ) { useEnrollmentStore .getState() - .start(result.startResponse, value.url, result.cookie, undefined); + .start(result.startResponse, result.session_id, undefined); navigate({ to: '/full/enrollment', replace: true, diff --git a/new-ui/src/pages/full/EnrollmentPage/hooks/activateUser.ts b/new-ui/src/pages/full/EnrollmentPage/hooks/activateUser.ts index 78b6f06a7..df5412422 100644 --- a/new-ui/src/pages/full/EnrollmentPage/hooks/activateUser.ts +++ b/new-ui/src/pages/full/EnrollmentPage/hooks/activateUser.ts @@ -1,10 +1,10 @@ -import { edgeApi } from '../../../../shared/edge-api/api'; +import { api } from '../../../../shared/rust-api/api'; import { useEnrollmentStore } from './useEnrollmentStore'; /** - * Activate the enrolling user by calling the proxy activation API. + * Activate the enrolling user by calling the enrollment Tauri command. * - * Reads proxy URL, cookie, skipPassword, and userPassword from the store via + * Reads sessionId, skipPassword, and userPassword from the store via * {@linkcode useEnrollmentStore.getState} so every invocation uses the latest * values (no stale-closure risk after in-flight {@linkcode setState} updates). * @@ -12,9 +12,8 @@ import { useEnrollmentStore } from './useEnrollmentStore'; * body instead of sending `null` or an empty string. */ export const activateUser = async () => { - const { proxyUrl, sessionCookie, skipPassword, userPassword } = - useEnrollmentStore.getState(); - const body = skipPassword ? {} : { password: userPassword ?? '' }; - // biome-ignore lint/style/noNonNullAssertion: proxy and cookie are set in start() - return edgeApi.activateUser(proxyUrl!, sessionCookie!, body); + const { sessionId, skipPassword, userPassword } = useEnrollmentStore.getState(); + const password = skipPassword ? null : (userPassword ?? ''); + // biome-ignore lint/style/noNonNullAssertion: sessionId is set in start(), called before this + return api.enrollmentActivateUser(sessionId!, password, null); }; diff --git a/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentStore.tsx b/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentStore.tsx index 0f3cb0869..60b3bf8da 100644 --- a/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentStore.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentStore.tsx @@ -1,14 +1,16 @@ import dayjs from 'dayjs'; import { create } from 'zustand'; import { createJSONStorage, persist } from 'zustand/middleware'; -import type { EnrollmentStartResponse } from '../../../../shared/edge-api/types'; -import type { MfaMethodValue } from '../../../../shared/rust-api/types'; +import type { + EnrollmentStartResult, + MfaMethodValue, +} from '../../../../shared/rust-api/types'; import { EnrollmentStep, type EnrollmentStepValue } from '../types'; type StoreValues = { activeStep: EnrollmentStepValue; - startResponse: EnrollmentStartResponse | null; - proxyUrl: string | null; + startResponse: EnrollmentStartResult | null; + sessionId: string | null; skipMfa: boolean; skipPassword: boolean; skipMfaChoice: boolean; @@ -17,13 +19,11 @@ type StoreValues = { userTotpSecret: string | null; userRecoveryCodes: string[] | null; userMfaChoice: MfaMethodValue; - sessionCookie: string | null; }; const defaults: StoreValues = { activeStep: EnrollmentStep.Welcome, - sessionCookie: null, - proxyUrl: null, + sessionId: null, userRecoveryCodes: null, startResponse: null, skipMfa: false, @@ -37,9 +37,8 @@ const defaults: StoreValues = { interface Store extends StoreValues { start: ( - response: EnrollmentStartResponse, - url: string, - cookie: string, + response: EnrollmentStartResult, + sessionId: string, totpSecret?: string, ) => void; next: () => void; @@ -50,13 +49,12 @@ export const useEnrollmentStore = create()( persist( (set, get) => ({ ...defaults, - start: (response, url, cookie, secret) => { + start: (response, sessionId, secret) => { set({ ...defaults, - proxyUrl: url, + sessionId, activeStep: EnrollmentStep.Welcome, startResponse: response, - sessionCookie: cookie, // if smtp is not present then it's not possible to choose. skipMfaChoice: !response.settings.smtp_configured || !response.settings.mfa_required, diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx index f1a453d14..7ca28f94f 100644 --- a/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx @@ -4,6 +4,7 @@ import { Button } from '../../../../../shared/components/Button/Button'; import { ButtonVariant } from '../../../../../shared/components/Button/types'; import { Controls } from '../../../../../shared/components/Controls/Controls'; import { RenderMarkdown } from '../../../../../shared/components/RenderMarkdown/RenderMarkdown'; +import { api } from '../../../../../shared/rust-api/api'; import { isPresent } from '../../../../../shared/utils/isPresent'; import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; import bannerSrc from './assets/banner.png'; @@ -11,6 +12,7 @@ import bannerSrc from './assets/banner.png'; export const FinishStep = () => { const navigate = useNavigate(); const response = useEnrollmentStore((s) => s.startResponse); + const sessionId = useEnrollmentStore((s) => s.sessionId); const markdownContent = response?.final_page_content; const showMarkdown = isPresent(markdownContent) && markdownContent.length > 0; @@ -32,6 +34,12 @@ export const FinishStep = () => { variant={ButtonVariant.Primary} text="Got it" onClick={() => { + // Release the enrollment session now that the wizard is done. + // Best-effort: enrollment_finish errors if the session is already + // gone, so swallow failures and leave the wizard regardless. + if (isPresent(sessionId)) { + void api.enrollmentFinish(sessionId).catch(() => {}); + } navigate({ to: '/full/overview', replace: true }); }} /> diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx index c4a2bb124..47952f297 100644 --- a/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx @@ -1,8 +1,8 @@ -/** biome-ignore-all lint/style/noNonNullAssertion: this cannot be shown without those store values */ +/** biome-ignore-all lint/style/noNonNullAssertion: sessionId is set in start(), called before */ import { useMutation } from '@tanstack/react-query'; +import './style.scss'; import clsx from 'clsx'; import { useState } from 'react'; -import { useShallow } from 'zustand/shallow'; import { Icon, IconKind, @@ -10,28 +10,25 @@ import { } from '../../../../../shared/components/Icon'; import { RadioIndicator } from '../../../../../shared/components/RadioIndicator/RadioIndicator'; import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; -import { edgeApi } from '../../../../../shared/edge-api/api'; +import { api } from '../../../../../shared/rust-api/api'; import { MfaMethod, type MfaMethodValue } from '../../../../../shared/rust-api/types'; import { ThemeSpacing } from '../../../../../shared/types'; import { EnrollmentControls } from '../../components/EnrollmentControls/EnrollmentControls'; import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; export const MfaChoiceStep = () => { - const [proxyUrl, cookie] = useEnrollmentStore( - useShallow((s) => [s.proxyUrl!, s.sessionCookie!]), - ); + const sessionId = useEnrollmentStore((s) => s.sessionId); const [mfa, setMfa] = useState( useEnrollmentStore.getState().userMfaChoice, ); const { mutate, isPending } = useMutation({ - mutationFn: () => edgeApi.startMfaSetup(proxyUrl, cookie, mfa), + mutationFn: () => api.enrollmentRegisterMfaStart(sessionId!, mfa), onSuccess: (resp) => { if (mfa === MfaMethod.Totp) { - const secret = resp.result?.totp_secret; useEnrollmentStore.setState({ userMfaChoice: mfa, - userTotpSecret: secret, + userTotpSecret: resp.totp_secret, }); } else { useEnrollmentStore.setState({ userMfaChoice: mfa }); diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/MfaConfigurationStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/MfaConfigurationStep.tsx index e349378a0..d6061246f 100644 --- a/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/MfaConfigurationStep.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/MfaConfigurationStep.tsx @@ -1,13 +1,13 @@ import { Fragment, useCallback, useEffect, useMemo, useState } from 'react'; import './style.scss'; import { useMutation } from '@tanstack/react-query'; -import { useShallow } from 'zustand/shallow'; +import { error as logError } from '@tauri-apps/plugin-log'; import { CodeInput } from '../../../../../shared/components/CodeInput/CodeInput'; import { CopyField } from '../../../../../shared/components/CopyField/CopyField'; import { Divider } from '../../../../../shared/components/Divider/Divider'; import { QrCard } from '../../../../../shared/components/QrCard/QrCard'; import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; -import { edgeApi } from '../../../../../shared/edge-api/api'; +import { api } from '../../../../../shared/rust-api/api'; import { MfaMethod } from '../../../../../shared/rust-api/types'; import { ThemeSpacing } from '../../../../../shared/types'; import { isPresent } from '../../../../../shared/utils/isPresent'; @@ -15,43 +15,57 @@ import { EnrollmentControls } from '../../components/EnrollmentControls/Enrollme import { activateUser } from '../../hooks/activateUser'; import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; +/** + * Map a register-mfa-finish error to a user-facing message. The proxy rejects + * a wrong code with a `proxy_error` (HTTP 400) whose message contains "invalid" + * (core returns "Code invalid" / "Email code invalid"); anything else is + * unexpected and gets a generic message. + */ +const mfaFinishErrorMessage = (err: unknown): string => { + try { + const parsed = JSON.parse(String(err)) as { type?: string; message?: string }; + if ( + parsed.type === 'proxy_error' && + parsed.message?.toLowerCase().includes('invalid') + ) { + return 'Invalid code'; + } + } catch { + // Non-JSON error: fall through to the generic message. + } + return 'MFA setup failed. Please try again.'; +}; + export const MfaConfigurationStep = () => { + const sessionId = useEnrollmentStore((s) => s.sessionId); const method = useEnrollmentStore((s) => s.userMfaChoice); const [code, setCode] = useState(null); const [error, setError] = useState(null); - const [proxyUrl, cookie] = useEnrollmentStore( - // biome-ignore lint/style/noNonNullAssertion: safe - useShallow((s) => [s.proxyUrl!, s.sessionCookie!]), - ); const { mutate, isPending } = useMutation({ mutationFn: async () => { - const resp = await edgeApi.finishMfaSetup(proxyUrl, cookie, { - // biome-ignore lint/style/noNonNullAssertion: checked in handleSubmit - code: code!, - method, - }); + // biome-ignore lint/style/noNonNullAssertion: checked in handleSubmit + const resp = await api.enrollmentRegisterMfaFinish(sessionId!, code!, method); await activateUser(); return resp; }, - onError: () => {}, + onError: (err) => { + void logError(`MFA configuration failed: ${err}`); + setError(mfaFinishErrorMessage(err)); + }, onSuccess: (resp) => { - if (resp.result) { - useEnrollmentStore.setState({ - userRecoveryCodes: resp.result.recovery_codes, - deadline: null, - }); - useEnrollmentStore.getState().next(); - } - if (resp.error) { - setError('Enter a valid code'); - } + useEnrollmentStore.setState({ + userRecoveryCodes: resp.recovery_codes, + deadline: null, + }); + useEnrollmentStore.getState().next(); }, }); const handleSubmit = useCallback(() => { if (code?.trim().length !== 6) { - setError(''); + setError('Enter a valid code'); + return; } mutate(); }, [code, mutate]); diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/PasswordStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/PasswordStep.tsx index f1af01e37..a6f590b4f 100644 --- a/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/PasswordStep.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/PasswordStep.tsx @@ -1,16 +1,16 @@ /** biome-ignore-all lint/style/noNonNullAssertion: ensured by wizard page */ +import { error } from '@tauri-apps/plugin-log'; import './style.scss'; import { useStore } from '@tanstack/react-form'; import { useMutation } from '@tanstack/react-query'; import clsx from 'clsx'; import { useCallback } from 'react'; import z from 'zod'; -import { useShallow } from 'zustand/shallow'; import { Icon, type IconKindValue } from '../../../../../shared/components/Icon'; import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; -import { edgeApi } from '../../../../../shared/edge-api/api'; import { useAppForm, withForm } from '../../../../../shared/form'; import { formChangeLogic } from '../../../../../shared/formLogic'; +import { api } from '../../../../../shared/rust-api/api'; import { MfaMethod } from '../../../../../shared/rust-api/types'; import { ThemeSpacing } from '../../../../../shared/types'; import { EnrollmentControls } from '../../components/EnrollmentControls/EnrollmentControls'; @@ -59,11 +59,9 @@ const defaultValues: FormFields = { }; export const PasswordStep = () => { - const [proxyUrl, cookie] = useEnrollmentStore( - useShallow((s) => [s.proxyUrl!, s.sessionCookie!]), - ); + const sessionId = useEnrollmentStore((s) => s.sessionId); const { mutateAsync: startMfa } = useMutation({ - mutationFn: () => edgeApi.startMfaSetup(proxyUrl, cookie, MfaMethod.Totp), + mutationFn: () => api.enrollmentRegisterMfaStart(sessionId!, MfaMethod.Totp), }); const form = useAppForm({ @@ -74,25 +72,24 @@ export const PasswordStep = () => { onChange: formSchema, }, onSubmit: async ({ value }) => { - const { skipMfaChoice, skipMfa } = useEnrollmentStore.getState(); - if (skipMfaChoice) { - const mfaResponse = await startMfa(); - if (mfaResponse.result) { + try { + const { skipMfaChoice, skipMfa } = useEnrollmentStore.getState(); + if (skipMfaChoice) { + const mfaResponse = await startMfa(); useEnrollmentStore.setState({ - userTotpSecret: mfaResponse.result.totp_secret ?? null, + userTotpSecret: mfaResponse.totp_secret, }); - } else { - console.error(mfaResponse); - return; } + useEnrollmentStore.setState({ + userPassword: value.password.trim(), + }); + if (skipMfa) { + await activateUser(); + } + useEnrollmentStore.getState().next(); + } catch (err) { + void error(`Password step failed: ${err}`); } - useEnrollmentStore.setState({ - userPassword: value.password.trim(), - }); - if (skipMfa) { - await activateUser(); - } - useEnrollmentStore.getState().next(); }, }); diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModalMfaOidc.ts b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModalMfaOidc.ts index 4974a3e13..27a4dc194 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModalMfaOidc.ts +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/hooks/useConnectModalMfaOidc.ts @@ -1,25 +1,23 @@ -import { useMutation, useQuery } from '@tanstack/react-query'; -import { fetch } from '@tauri-apps/plugin-http'; +import { useQuery } from '@tanstack/react-query'; +import type { UnlistenFn } from '@tauri-apps/api/event'; +import { listen } from '@tauri-apps/api/event'; import { error } from '@tauri-apps/plugin-log'; import { useCallback, useEffect, useRef, useState } from 'react'; import { useShallow } from 'zustand/shallow'; -import { - CLIENT_MFA_ENDPOINT, - isEdgeUnavailable, - MfaStartMethod, - shouldShowPostureError, - startClientMfaSession, -} from '../../../../../../shared/components/LocationCard/api/startClientMfaSession'; import { api } from '../../../../../../shared/rust-api/api'; +import { + isConnectFailure, + isMfaPostureError, + isServiceUnavailable, + isSessionExpired, + isTimeout, + mfaErrorMessage, +} from '../../../../../../shared/rust-api/mfaError'; import { getInstancesQueryOptions } from '../../../../../../shared/rust-api/query'; +import type { MfaErrorPayload } from '../../../../../../shared/rust-api/types'; +import { MfaMethod, TauriEvent } from '../../../../../../shared/rust-api/types'; import { useConnectModal } from './useConnectModal'; -const POLL_INTERVAL_MS = 5_000; -const POLL_TIMEOUT_MS = 5 * 60 * 1_000; - -type MfaFinishResponse = { preshared_key: string }; -type MfaErrorResponse = { error: string }; - type Options = { onPostureError?: (msg: string) => void; onSessionExpired?: () => void; @@ -41,92 +39,25 @@ export const useConnectModalMfaOidc = ({ const { data: instances } = useQuery(getInstancesQueryOptions); const instance = instances?.find((i) => i.id === location?.instance_id); - const intervalRef = useRef | null>(null); - const timeoutRef = useRef | null>(null); - - const { mutate: connectMutate } = useMutation({ - mutationFn: api.connect, - onError: (err) => { - error(`Connect command failed after successful OIDC MFA\n${err}`); - setPollError('Failed to establish VPN connection'); - }, - }); - - const stopPolling = useCallback(() => { - if (intervalRef.current !== null) { - clearInterval(intervalRef.current); - intervalRef.current = null; - } - if (timeoutRef.current !== null) { - clearTimeout(timeoutRef.current); - timeoutRef.current = null; + const taskIdRef = useRef(null); + const unlistenRef = useRef(null); + + const cleanup = useCallback(() => { + if (unlistenRef.current !== null) { + unlistenRef.current(); + unlistenRef.current = null; } }, []); useEffect(() => { return () => { - stopPolling(); + cleanup(); + const taskId = taskIdRef.current; + if (taskId) { + void api.cancelMfa(taskId).catch(() => {}); + } }; - }, [stopPolling]); - - const startPolling = useCallback( - (token: string, proxyUrl: string, headers: Record) => { - if (!location) return; - - setIsPolling(true); - setPollError(null); - - const poll = async () => { - try { - const res = await fetch(`${proxyUrl}${CLIENT_MFA_ENDPOINT}/finish`, { - method: 'POST', - headers: { 'Content-Type': 'application/json', ...headers }, - body: JSON.stringify({ token }), - }); - - if (res.ok) { - stopPolling(); - setIsPolling(false); - const data = (await res.json()) as MfaFinishResponse; - connectMutate({ - locationId: location.id, - connectionType: location.connection_type, - presharedKey: data.preshared_key, - }); - return; - } - - if (res.status === 428) return; - - stopPolling(); - setIsPolling(false); - const data = (await res.json()) as MfaErrorResponse; - const msg = data.error; - if (msg === 'invalid token' || msg === 'login session not found') { - onSessionExpired?.(); - } else { - setPollError('Authentication failed. Please try again.'); - } - error(`OIDC MFA poll failed for location ${location.id}: ${msg}`); - } catch (e) { - stopPolling(); - setIsPolling(false); - setPollError('Failed to reach server. Please try again.'); - error(`OIDC MFA poll network error for location ${location.id}: ${e}`); - } - }; - - intervalRef.current = setInterval(poll, POLL_INTERVAL_MS); - - timeoutRef.current = setTimeout(() => { - stopPolling(); - setIsPolling(false); - setPollError('Authentication timed out. Please try again.'); - error(`OIDC MFA timed out for location ${location.id}`); - }, POLL_TIMEOUT_MS); - }, - [location, connectMutate, stopPolling, onSessionExpired], - ); + }, [cleanup]); const start = useCallback(async () => { if (!instance || !location) { @@ -137,38 +68,67 @@ export const useConnectModalMfaOidc = ({ setIsStarting(true); setStartError(null); setPollError(null); - stopPolling(); + cleanup(); try { - const { response, headers } = await startClientMfaSession({ - instance, - location, - method: MfaStartMethod.Oidc, + const info = await api.mfaStart(instance.id, location.id, MfaMethod.Oidc); + await api.openLink(`${instance.proxy_url}openid/mfa?token=${info.token}`); + + setIsStarting(false); + setIsPolling(true); + + const taskId = await api.mfaPollOpenId(instance.id, location.id, info.token); + taskIdRef.current = taskId; + + // The backend brings up the connection itself; completion means connected. + const completeUnlisten = await listen(TauriEvent.MfaOpenIdComplete, () => { + cleanup(); + setIsPolling(false); }); - await api.openLink(`${instance.proxy_url}openid/mfa?token=${response.token}`); - startPolling(response.token, instance.proxy_url, headers); + + const errorUnlisten = await listen( + TauriEvent.MfaOpenIdError, + (event) => { + cleanup(); + setIsPolling(false); + error(`OIDC MFA failed for location ${location.id}: ${event.payload.error}`); + const message = mfaErrorMessage(event.payload.error); + if (isTimeout(event.payload.error)) { + setPollError('Authentication timed out. Please try again.'); + } else if (isConnectFailure(message)) { + setPollError('Failed to establish VPN connection'); + } else if (isSessionExpired(message)) { + onSessionExpired?.(); + } else { + setPollError('Authentication failed. Please try again.'); + } + }, + ); + + unlistenRef.current = () => { + completeUnlisten(); + errorUnlisten(); + }; } catch (e) { - if (shouldShowPostureError(e, location)) { - onPostureError?.(e.message); + void error(`OIDC MFA start failed for location ${location.id}: ${e}`); + if (isMfaPostureError(e, location)) { + onPostureError?.(mfaErrorMessage(e)); return; } - if (isEdgeUnavailable(e)) { + if (isServiceUnavailable(e)) { onServiceUnavailable?.(); return; } - setStartError( - e instanceof Error ? e.message : 'Failed to start OIDC authentication', - ); - error(`OIDC MFA start network error for location ${location.id}: ${e}`); + setStartError(mfaErrorMessage(e)); } finally { setIsStarting(false); } }, [ instance, location, - startPolling, - stopPolling, + cleanup, onPostureError, + onSessionExpired, onServiceUnavailable, ]); diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx index 762ad639b..65973f13f 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaEmail/ConnectModalMfaEmail.tsx @@ -4,9 +4,8 @@ import { Button } from '../../../../../../../shared/components/Button/Button'; import { ButtonVariant } from '../../../../../../../shared/components/Button/types'; import { CodeInput } from '../../../../../../../shared/components/CodeInput/CodeInput'; import { Controls } from '../../../../../../../shared/components/Controls/Controls'; -import { MfaStartMethod } from '../../../../../../../shared/components/LocationCard/api/startClientMfaSession'; import { useMfaConnect } from '../../../../../../../shared/components/LocationCard/hooks/useMfaConnect'; -import type { LocationInfo } from '../../../../../../../shared/rust-api/types'; +import { type LocationInfo, MfaMethod } from '../../../../../../../shared/rust-api/types'; import { isPresent } from '../../../../../../../shared/utils/isPresent'; import { ConnectModalPostureCheckLoading } from '../../components/ConnectModalPostureCheckLoading/ConnectModalPostureCheckLoading'; import { ConnectModalView } from '../../hooks/types'; @@ -21,7 +20,7 @@ export const ConnectModalMfaEmail = () => { const { verifyCode, isVerifying, verifyError, isStarting, startError } = useMfaConnect( location as LocationInfo, - MfaStartMethod.Email, + MfaMethod.Email, { debounceMs: location?.posture_check_required ? MIN_POSTURE_LOADER_MS : 0, onSessionExpired: () => diff --git a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx index 3479bdec5..6c6d3618a 100644 --- a/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/ConnectModal/views/ConnectModalMfaTotp/ConnectModalMfaTotp.tsx @@ -4,9 +4,8 @@ import { Button } from '../../../../../../../shared/components/Button/Button'; import { ButtonVariant } from '../../../../../../../shared/components/Button/types'; import { CodeInput } from '../../../../../../../shared/components/CodeInput/CodeInput'; import { Controls } from '../../../../../../../shared/components/Controls/Controls'; -import { MfaStartMethod } from '../../../../../../../shared/components/LocationCard/api/startClientMfaSession'; import { useMfaConnect } from '../../../../../../../shared/components/LocationCard/hooks/useMfaConnect'; -import type { LocationInfo } from '../../../../../../../shared/rust-api/types'; +import { type LocationInfo, MfaMethod } from '../../../../../../../shared/rust-api/types'; import { isPresent } from '../../../../../../../shared/utils/isPresent'; import { ConnectModalPostureCheckLoading } from '../../components/ConnectModalPostureCheckLoading/ConnectModalPostureCheckLoading'; import { ConnectModalView } from '../../hooks/types'; @@ -21,7 +20,7 @@ export const ConnectModalMfaTotp = () => { const { verifyCode, isVerifying, verifyError, isStarting, startError } = useMfaConnect( location as LocationInfo, - MfaStartMethod.Totp, + MfaMethod.Totp, { debounceMs: location?.posture_check_required ? MIN_POSTURE_LOADER_MS : 0, onSessionExpired: () => diff --git a/new-ui/src/pages/full/OverviewPage/components/UpdateInstanceModal/UpdateInstanceModal.tsx b/new-ui/src/pages/full/OverviewPage/components/UpdateInstanceModal/UpdateInstanceModal.tsx index 598035fec..8bc17511e 100644 --- a/new-ui/src/pages/full/OverviewPage/components/UpdateInstanceModal/UpdateInstanceModal.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/UpdateInstanceModal/UpdateInstanceModal.tsx @@ -5,7 +5,6 @@ import { ButtonVariant } from '../../../../../shared/components/Button/types'; import { Controls } from '../../../../../shared/components/Controls/Controls'; import { Modal } from '../../../../../shared/components/Modal/Modal'; import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; -import { edgeApi } from '../../../../../shared/edge-api/api'; import { useAppForm } from '../../../../../shared/form'; import { formChangeLogic } from '../../../../../shared/formLogic'; import { @@ -16,6 +15,7 @@ import { import { ModalName } from '../../../../../shared/hooks/modalControls/modalTypes'; import type { OpenUpdateInstanceModalData } from '../../../../../shared/hooks/modalControls/types'; import { Snackbar } from '../../../../../shared/providers/snackbar/snackbar'; +import { enrollmentUpdateInstance } from '../../../../../shared/rust-api/enrollment'; import { ThemeSpacing } from '../../../../../shared/types'; import { isPresent } from '../../../../../shared/utils/isPresent'; @@ -75,7 +75,7 @@ const ModalContent = ({ data }: { data: OpenUpdateInstanceModalData }) => { onChange: formSchema, }, onSubmit: async ({ value, formApi }) => { - const result = await edgeApi.updateInstance({ + const result = await enrollmentUpdateInstance({ instanceId: data.instanceId, url: value.url, token: value.token, diff --git a/new-ui/src/pages/full/OverviewPage/components/UpdateTunnelModal/UpdateTunnelModal.tsx b/new-ui/src/pages/full/OverviewPage/components/UpdateTunnelModal/UpdateTunnelModal.tsx index 44b3ac98f..9aaa6950a 100644 --- a/new-ui/src/pages/full/OverviewPage/components/UpdateTunnelModal/UpdateTunnelModal.tsx +++ b/new-ui/src/pages/full/OverviewPage/components/UpdateTunnelModal/UpdateTunnelModal.tsx @@ -1,4 +1,5 @@ import { useMutation } from '@tanstack/react-query'; +import { error as logError } from '@tauri-apps/plugin-log'; import { useEffect, useMemo, useState } from 'react'; import z from 'zod'; import { Button } from '../../../../../shared/components/Button/Button'; @@ -133,7 +134,8 @@ const ModalContent = ({ data }: { data: OpenUpdateTunnelModalData }) => { Snackbar.default('Tunnel updated.'); closeModal(modalNameKey); } catch (e) { - Snackbar.error(String(e)); + void logError(`Tunnel update failed: ${e}`); + Snackbar.error('Failed to update tunnel.'); } }, }); diff --git a/new-ui/src/shared/components/LocationCard/api/startClientMfaSession.ts b/new-ui/src/shared/components/LocationCard/api/startClientMfaSession.ts deleted file mode 100644 index 57803c889..000000000 --- a/new-ui/src/shared/components/LocationCard/api/startClientMfaSession.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { fetch } from '@tauri-apps/plugin-http'; -import { edgeApi } from '../../../edge-api/api'; -import type { EdgeRequestHeaders } from '../../../edge-api/types'; -import { api } from '../../../rust-api/api'; -import type { InstanceInfo, LocationInfo } from '../../../rust-api/types'; - -export const CLIENT_MFA_ENDPOINT = 'api/v1/client-mfa'; - -/** Error raised when the MFA start request or its prerequisites fail. */ -export class MfaStartError extends Error { - public readonly status?: number; - - constructor(message: string, status?: number) { - super(message); - this.name = 'MfaStartError'; - this.status = status; - } -} - -/** MFA method identifiers expected by the desktop-client MFA API */ -export const MfaStartMethod = { - Totp: 0, - Email: 1, - Oidc: 2, - MobileApprove: 4, -} as const; - -export type MfaStartMethod = (typeof MfaStartMethod)[keyof typeof MfaStartMethod]; - -/** Successful MFA start response returned by the proxy. */ -export type MfaStartResponse = { - token: string; - challenge?: string; -}; - -/** Error response shape returned by the proxy for MFA start failures. */ -type MfaStartErrorResponse = { - error?: string; -}; - -/** Narrows MFA start errors that should open the posture failure view. */ -export const shouldShowPostureError = ( - err: unknown, - location: LocationInfo, -): err is MfaStartError => - err instanceof MfaStartError && err.status === 403 && location.posture_check_required; - -/** Narrows MFA start errors where the Edge responded with a 5xx */ -export const isEdgeUnavailable = (err: unknown): err is MfaStartError => - err instanceof MfaStartError && (err.status ?? 0) >= 500; - -/** Input required to start a desktop-client MFA session. */ -type StartClientMfaSessionParams = { - instance: InstanceInfo; - location: LocationInfo; - method: MfaStartMethod; -}; - -/** MFA start response plus request headers required by later MFA calls. */ -type StartClientMfaSessionResult = { - response: MfaStartResponse; - headers: EdgeRequestHeaders; -}; - -/** Starts an MFA session, including posture data when the location requires it. */ -export const startClientMfaSession = async ({ - instance, - location, - method, -}: StartClientMfaSessionParams): Promise => { - let headers: EdgeRequestHeaders; - try { - headers = await edgeApi.getEdgeRequestHeaders(); - } catch { - throw new MfaStartError('Failed to load request headers'); - } - - let posture_data: unknown; - try { - posture_data = location.posture_check_required - ? await api.getPostureData() - : undefined; - } catch { - throw new MfaStartError('Failed to load posture data'); - } - - try { - const response = await fetch(`${instance.proxy_url}${CLIENT_MFA_ENDPOINT}/start`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - ...headers, - }, - body: JSON.stringify({ - method, - pubkey: instance.pubkey, - location_id: location.network_id, - posture_data, - }), - }); - - if (!response.ok) { - let message = 'Failed to start MFA'; - try { - const data = (await response.json()) as MfaStartErrorResponse; - message = data.error ?? message; - } catch { - // Keep the response status even if the proxy sends a malformed error body. - } - throw new MfaStartError(message, response.status); - } - - return { - response: (await response.json()) as MfaStartResponse, - headers, - }; - } catch (err) { - if (err instanceof MfaStartError) { - throw err; - } - throw new MfaStartError('Failed to reach server'); - } -}; diff --git a/new-ui/src/shared/components/LocationCard/hooks/handleMfaStartError.ts b/new-ui/src/shared/components/LocationCard/hooks/handleMfaStartError.ts deleted file mode 100644 index fbc929dbf..000000000 --- a/new-ui/src/shared/components/LocationCard/hooks/handleMfaStartError.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { LocationInfo } from '../../../rust-api/types'; -import { shouldShowPostureError } from '../api/startClientMfaSession'; -import { LocationCardViews, type LocationCardViewsValue } from '../context/types'; - -type HandleMfaStartErrorParams = { - err: unknown; - location: LocationInfo; - setPostureError: (error: string | null) => void; - setView: (view: LocationCardViewsValue) => void; -}; - -/** Handles MFA start posture failures and reports whether the error was consumed. */ -export const handleMfaStartError = ({ - err, - location, - setPostureError, - setView, -}: HandleMfaStartErrorParams): boolean => { - if (!shouldShowPostureError(err, location)) { - return false; - } - - setPostureError(err.message); - setView(LocationCardViews.PostureCheckFail); - return true; -}; diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts index 843ab0be2..699ff946e 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaConnect.ts @@ -1,28 +1,19 @@ -import { useMutation, useQuery } from '@tanstack/react-query'; -import { fetch } from '@tauri-apps/plugin-http'; +import { useQuery } from '@tanstack/react-query'; import { error } from '@tauri-apps/plugin-log'; import { useCallback, useEffect, useRef, useState } from 'react'; -import type { EdgeRequestHeaders } from '../../../edge-api/types'; import { api } from '../../../rust-api/api'; -import { getInstancesQueryOptions } from '../../../rust-api/query'; -import type { LocationInfo } from '../../../rust-api/types'; import { - CLIENT_MFA_ENDPOINT, - isEdgeUnavailable, - type MfaStartMethod, - shouldShowPostureError, - startClientMfaSession, -} from '../api/startClientMfaSession'; - -type MfaFinishResponse = { - preshared_key: string; -}; - -type MfaErrorResponse = { - error: string; -}; + isConnectFailure, + isInvalidCode, + isMfaPostureError, + isServiceUnavailable, + isSessionExpired, + mfaErrorMessage, +} from '../../../rust-api/mfaError'; +import { getInstancesQueryOptions } from '../../../rust-api/query'; +import type { LocationInfo, MfaMethod } from '../../../rust-api/types'; -type CodeMfaStartMethod = Extract; +type CodeMfaMethod = typeof MfaMethod.Totp | typeof MfaMethod.Email; type UseMfaConnectOptions = { debounceMs?: number; @@ -41,7 +32,7 @@ const waitForMinimumDuration = async (startedAt: number, minimumMs: number) => { export const useMfaConnect = ( location: LocationInfo, - method: CodeMfaStartMethod, + method: CodeMfaMethod, { debounceMs = 0, onConnected, @@ -55,23 +46,11 @@ export const useMfaConnect = ( const [startError, setStartError] = useState(null); const [isVerifying, setIsVerifying] = useState(false); const [verifyError, setVerifyError] = useState(null); - const [requestHeaders, setRequestHeaders] = useState(null); const { data: instances } = useQuery(getInstancesQueryOptions); const instance = instances?.find((i) => i.id === location.instance_id); - const { mutate: connectMutate } = useMutation({ - mutationFn: api.connect, - meta: { invalidate: ['locations'] }, - onSuccess: () => { - onConnected?.(); - }, - onError: (err) => { - error(`Connect command failed after successful code verification\n${err}`); - }, - }); - // Fire the /start request exactly once when instance data is ready. const startCalled = useRef(false); @@ -86,25 +65,21 @@ export const useMfaConnect = ( (async () => { try { - const { response, headers } = await startClientMfaSession({ - instance, - location, - method, - }); + const info = await api.mfaStart(instance.id, location.id, method); await waitForMinimumDuration(startedAt, debounceMs); - setRequestHeaders(headers); - setToken(response.token); + setToken(info.token); } catch (err) { + void error(`MFA start failed: ${err}`); await waitForMinimumDuration(startedAt, debounceMs); - if (shouldShowPostureError(err, location)) { - onPostureError?.(err.message); + if (isMfaPostureError(err, location)) { + onPostureError?.(mfaErrorMessage(err)); return; } - if (isEdgeUnavailable(err)) { + if (isServiceUnavailable(err)) { onServiceUnavailable?.(); return; } - setStartError(err instanceof Error ? err.message : 'Failed to start MFA'); + setStartError(mfaErrorMessage(err)); } finally { setIsStarting(false); } @@ -113,51 +88,33 @@ export const useMfaConnect = ( const verifyCode = useCallback( async (code: string) => { - if (!token || !instance || !requestHeaders) return; + if (!token || !instance) return; setIsVerifying(true); setVerifyError(null); - const body = JSON.stringify({ token, code }); - try { - const res = await fetch(`${instance.proxy_url}${CLIENT_MFA_ENDPOINT}/finish`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - ...requestHeaders, - }, - body, - }); - - if (res.ok) { - const data = (await res.json()) as MfaFinishResponse; - connectMutate({ - locationId: location.id, - connectionType: location.connection_type, - presharedKey: data.preshared_key, - }); + // mfaFinishCode completes MFA and brings up the connection in the + // backend; the preshared key never reaches the frontend. + await api.mfaFinishCode(instance.id, location.id, token, code); + onConnected?.(); + } catch (err) { + void error(`MFA verification failed: ${err}`); + const message = mfaErrorMessage(err); + if (isConnectFailure(message)) { + setVerifyError('Failed to establish VPN connection'); + } else if (isInvalidCode(message)) { + setVerifyError('Invalid code'); + } else if (isSessionExpired(message)) { + onSessionExpired?.(); } else { - const data = (await res.json()) as MfaErrorResponse; - const { error: errorMessage } = data; - if (errorMessage === 'Unauthorized') { - setVerifyError('Invalid code'); - } else if ( - errorMessage === 'invalid token' || - errorMessage === 'login session not found' - ) { - onSessionExpired?.(); - } else { - setVerifyError('Verification failed'); - } + setVerifyError('Verification failed'); } - } catch { - setVerifyError('Failed to reach server'); } finally { setIsVerifying(false); } }, - [token, instance, requestHeaders, location, connectMutate, onSessionExpired], + [token, instance, location, onConnected, onSessionExpired], ); return { token, isStarting, startError, verifyCode, isVerifying, verifyError }; diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts index 1df656a5e..e1a5f72b6 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaMobileConnect.ts @@ -1,17 +1,19 @@ import { encode } from '@stablelib/base64'; -import { useMutation, useQuery } from '@tanstack/react-query'; +import { useQuery } from '@tanstack/react-query'; +import type { UnlistenFn } from '@tauri-apps/api/event'; +import { listen } from '@tauri-apps/api/event'; import { error } from '@tauri-apps/plugin-log'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { api } from '../../../rust-api/api'; -import { getInstancesQueryOptions } from '../../../rust-api/query'; -import type { LocationInfo } from '../../../rust-api/types'; import { - CLIENT_MFA_ENDPOINT, - isEdgeUnavailable, - MfaStartMethod, - shouldShowPostureError, - startClientMfaSession, -} from '../api/startClientMfaSession'; + isConnectFailure, + isMfaPostureError, + isServiceUnavailable, + mfaErrorMessage, +} from '../../../rust-api/mfaError'; +import { getInstancesQueryOptions } from '../../../rust-api/query'; +import type { LocationInfo, MfaErrorPayload } from '../../../rust-api/types'; +import { MfaMethod, TauriEvent } from '../../../rust-api/types'; type TokenData = { token: string; @@ -36,100 +38,92 @@ export const useMfaMobileConnect = (location: LocationInfo, options?: Options) = const [isConnecting, setIsConnecting] = useState(false); const [connectionError, setConnectionError] = useState(null); - const wsRef = useRef(null); - const expectedCloseRef = useRef(false); - - const { mutate: connectMutate } = useMutation({ - mutationFn: api.connect, - onSuccess: () => { - onConnected?.(); - }, - onError: (err) => { - error(`Connect command failed after successful mobile MFA\n${err}`); - setConnectionError('Failed to establish VPN connection'); - }, - }); - - // Open WebSocket when tokenData is available - useEffect(() => { - if (!tokenData || !instance) return; - - const wsUrl = `${instance.proxy_url - .replace(/^http:/, 'ws:') - .replace( - /^https:/, - 'wss:', - )}${CLIENT_MFA_ENDPOINT}/remote?token=${encodeURIComponent(tokenData.token)}`; + const taskIdRef = useRef(null); + const unlistenRef = useRef(null); - expectedCloseRef.current = false; - const ws = new WebSocket(wsUrl); - wsRef.current = ws; + const cleanupListeners = useCallback(() => { + if (unlistenRef.current !== null) { + unlistenRef.current(); + unlistenRef.current = null; + } + }, []); - ws.onopen = () => { - setIsConnecting(true); - setConnectionError(null); + // Clean up on unmount + useEffect(() => { + return () => { + cleanupListeners(); + const taskId = taskIdRef.current; + if (taskId) { + void api.cancelMfa(taskId).catch(() => {}); + } }; + }, [cleanupListeners]); + + // Connect WebSocket via Rust when tokenData is available + useEffect(() => { + if (!tokenData || !instance) return; + + let cancelled = false; + cleanupListeners(); + setIsConnecting(true); + setConnectionError(null); - ws.onmessage = (event: MessageEvent) => { + (async () => { try { - const parsed = JSON.parse(event.data as string) as unknown; - if ( - typeof parsed === 'object' && - parsed !== null && - 'preshared_key' in parsed && - typeof (parsed as Record).preshared_key === 'string' - ) { - const presharedKey = (parsed as { preshared_key: string }).preshared_key; - expectedCloseRef.current = true; - connectMutate({ - locationId: location.id, - connectionType: location.connection_type, - presharedKey, - }); - } else { - error( - `Unexpected mobile MFA WS message for location ${location.id}: ${event.data}`, - ); + const taskId = await api.mfaConnectMobileApprove( + instance.id, + location.id, + tokenData.token, + ); + if (cancelled) { + void api.cancelMfa(taskId).catch(() => {}); + return; } + taskIdRef.current = taskId; + + // The backend brings up the connection itself; completion means connected. + const completeUnlisten = await listen(TauriEvent.MfaMobileComplete, () => { + cleanupListeners(); + setIsConnecting(false); + onConnected?.(); + }); + + const errorUnlisten = await listen( + TauriEvent.MfaMobileError, + (event) => { + cleanupListeners(); + setIsConnecting(false); + error( + `Mobile MFA failed for location ${location.id}: ${event.payload.error}`, + ); + const message = mfaErrorMessage(event.payload.error); + setConnectionError( + isConnectFailure(message) + ? 'Failed to establish VPN connection' + : 'Connection error. Please try again.', + ); + }, + ); + + unlistenRef.current = () => { + completeUnlisten(); + errorUnlisten(); + }; } catch (e) { - error(`Failed to parse mobile MFA WS message for location ${location.id}: ${e}`); - } - }; - - ws.onerror = () => { - if (!expectedCloseRef.current) { - setIsConnecting(false); - setConnectionError('Connection error. Please try again.'); - error(`Mobile MFA WebSocket error for location ${location.id}`); - } - }; - - ws.onclose = () => { - if (!expectedCloseRef.current) { - setIsConnecting(false); - setConnectionError('Connection closed unexpectedly. Please try again.'); - error(`Mobile MFA WebSocket closed unexpectedly for location ${location.id}`); + if (!cancelled) { + setIsConnecting(false); + setConnectionError('Failed to start mobile approval. Please try again.'); + error(`Mobile MFA connect failed for location ${location.id}: ${e}`); + } } - }; + })(); return () => { - expectedCloseRef.current = true; - ws.close(); - wsRef.current = null; + cancelled = true; + cleanupListeners(); setIsConnecting(false); }; - }, [tokenData, instance, connectMutate, location]); - - // Clean up WebSocket on unmount - useEffect(() => { - return () => { - if (wsRef.current) { - expectedCloseRef.current = true; - wsRef.current.close(); - wsRef.current = null; - } - }; - }, []); + }, [tokenData, instance, location, onConnected, cleanupListeners]); const qrValue = useMemo(() => { if (!tokenData || !instance) return null; @@ -150,51 +144,46 @@ export const useMfaMobileConnect = (location: LocationInfo, options?: Options) = setIsStarting(true); setStartError(null); setConnectionError(null); - // Clear previous token → triggers WS cleanup via effect + // Clear previous task via effect setTokenData(null); try { - const { response } = await startClientMfaSession({ - instance, - location, - method: MfaStartMethod.MobileApprove, - }); - if (!response.challenge) { + const info = await api.mfaStart(instance.id, location.id, MfaMethod.MobileApprove); + if (!info.challenge) { setStartError('Unsupported response from proxy'); return; } - setTokenData({ token: response.token, challenge: response.challenge }); + setTokenData({ token: info.token, challenge: info.challenge }); } catch (e) { - if (shouldShowPostureError(e, location)) { - onPostureError?.(e instanceof Error ? e.message : undefined); + void error(`Mobile MFA start failed for location ${location.id}: ${e}`); + if (isMfaPostureError(e, location)) { + onPostureError?.(mfaErrorMessage(e)); return; } - if (isEdgeUnavailable(e)) { + if (isServiceUnavailable(e)) { onServiceUnavailable?.(); return; } - setStartError( - e instanceof Error ? e.message : 'Failed to start mobile authentication', - ); - error(`Mobile MFA start network error for location ${location.id}: ${e}`); + setStartError(mfaErrorMessage(e)); } finally { setIsStarting(false); } }, [instance, location, onPostureError, onServiceUnavailable]); const reset = useCallback(() => { - if (wsRef.current) { - expectedCloseRef.current = true; - wsRef.current.close(); - wsRef.current = null; + cleanupListeners(); + const taskId = taskIdRef.current; + if (taskId) { + void api.cancelMfa(taskId).catch(() => {}); + taskIdRef.current = null; } setTokenData(null); setIsStarting(false); setStartError(null); setIsConnecting(false); setConnectionError(null); - }, []); + }, [cleanupListeners]); return { start, isStarting, startError, qrValue, isConnecting, connectionError, reset }; }; diff --git a/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts b/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts index 0abb7e1d2..7e28f80f7 100644 --- a/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts +++ b/new-ui/src/shared/components/LocationCard/hooks/useMfaOidcConnect.ts @@ -1,24 +1,22 @@ -import { useMutation, useQuery } from '@tanstack/react-query'; -import { fetch } from '@tauri-apps/plugin-http'; +import { useQuery } from '@tanstack/react-query'; +import type { UnlistenFn } from '@tauri-apps/api/event'; +import { listen } from '@tauri-apps/api/event'; import { error } from '@tauri-apps/plugin-log'; import { useCallback, useEffect, useRef, useState } from 'react'; import { api } from '../../../rust-api/api'; -import { getInstancesQueryOptions } from '../../../rust-api/query'; import { - CLIENT_MFA_ENDPOINT, - isEdgeUnavailable, - MfaStartMethod, - startClientMfaSession, -} from '../api/startClientMfaSession'; + isConnectFailure, + isMfaPostureError, + isServiceUnavailable, + isSessionExpired, + isTimeout, + mfaErrorMessage, +} from '../../../rust-api/mfaError'; +import { getInstancesQueryOptions } from '../../../rust-api/query'; +import type { MfaErrorPayload } from '../../../rust-api/types'; +import { MfaMethod, TauriEvent } from '../../../rust-api/types'; import { useLocationCardContext } from '../context/context'; import { LocationCardViews } from '../context/types'; -import { handleMfaStartError } from './handleMfaStartError'; - -const POLL_INTERVAL_MS = 5_000; -const POLL_TIMEOUT_MS = 5 * 60 * 1_000; // 5 minutes - -type MfaFinishResponse = { preshared_key: string }; -type MfaErrorResponse = { error: string }; export const useMfaOidcConnect = () => { const { location, setPostureError, setView } = useLocationCardContext(); @@ -31,96 +29,26 @@ export const useMfaOidcConnect = () => { const { data: instances } = useQuery(getInstancesQueryOptions); const instance = instances?.find((i) => i.id === location.instance_id); - const intervalRef = useRef | null>(null); - const timeoutRef = useRef | null>(null); - - const { mutate: connectMutate } = useMutation({ - mutationFn: api.connect, - onSuccess: () => { - setView(LocationCardViews.Connected); - }, - onError: (err) => { - error(`Connect command failed after successful OIDC MFA\n${err}`); - setPollError('Failed to establish VPN connection'); - }, - }); + const taskIdRef = useRef(null); + const unlistenRef = useRef(null); - const stopPolling = useCallback(() => { - if (intervalRef.current !== null) { - clearInterval(intervalRef.current); - intervalRef.current = null; - } - if (timeoutRef.current !== null) { - clearTimeout(timeoutRef.current); - timeoutRef.current = null; + const cleanup = useCallback(() => { + if (unlistenRef.current !== null) { + unlistenRef.current(); + unlistenRef.current = null; } }, []); // Clean up on unmount useEffect(() => { return () => { - stopPolling(); + cleanup(); + const taskId = taskIdRef.current; + if (taskId) { + void api.cancelMfa(taskId).catch(() => {}); + } }; - }, [stopPolling]); - - const startPolling = useCallback( - (token: string, proxyUrl: string, headers: Record) => { - setIsPolling(true); - setPollError(null); - - const poll = async () => { - try { - const res = await fetch(`${proxyUrl}${CLIENT_MFA_ENDPOINT}/finish`, { - method: 'POST', - headers: { 'Content-Type': 'application/json', ...headers }, - body: JSON.stringify({ token }), - }); - - if (res.ok) { - stopPolling(); - setIsPolling(false); - const data = (await res.json()) as MfaFinishResponse; - connectMutate({ - locationId: location.id, - connectionType: location.connection_type, - presharedKey: data.preshared_key, - }); - return; - } - - // 428 Precondition Required: user hasn't completed browser auth yet, keep polling - if (res.status === 428) return; - - // Any other error: stop polling and surface the error - stopPolling(); - setIsPolling(false); - const data = (await res.json()) as MfaErrorResponse; - const msg = data.error; - if (msg === 'invalid token' || msg === 'login session not found') { - setPollError('Session expired. Please try again.'); - } else { - setPollError('Authentication failed. Please try again.'); - } - error(`OIDC MFA poll failed for location ${location.id}: ${msg}`); - } catch (e) { - stopPolling(); - setIsPolling(false); - setPollError('Failed to reach server. Please try again.'); - error(`OIDC MFA poll network error for location ${location.id}: ${e}`); - } - }; - - intervalRef.current = setInterval(poll, POLL_INTERVAL_MS); - - timeoutRef.current = setTimeout(() => { - stopPolling(); - setIsPolling(false); - setPollError('Authentication timed out. Please try again.'); - error(`OIDC MFA timed out for location ${location.id}`); - }, POLL_TIMEOUT_MS); - }, - [location, connectMutate, stopPolling], - ); + }, [cleanup]); const start = useCallback(async () => { if (!instance) { @@ -131,32 +59,64 @@ export const useMfaOidcConnect = () => { setIsStarting(true); setStartError(null); setPollError(null); - stopPolling(); + cleanup(); try { - const { response, headers } = await startClientMfaSession({ - instance, - location, - method: MfaStartMethod.Oidc, + const info = await api.mfaStart(instance.id, location.id, MfaMethod.Oidc); + await api.openLink(`${instance.proxy_url}openid/mfa?token=${info.token}`); + + setIsStarting(false); + setIsPolling(true); + + const taskId = await api.mfaPollOpenId(instance.id, location.id, info.token); + taskIdRef.current = taskId; + + // The backend brings up the connection itself; completion means connected. + const completeUnlisten = await listen(TauriEvent.MfaOpenIdComplete, () => { + cleanup(); + setIsPolling(false); + setView(LocationCardViews.Connected); }); - await api.openLink(`${instance.proxy_url}openid/mfa?token=${response.token}`); - startPolling(response.token, instance.proxy_url, headers); + + const errorUnlisten = await listen( + TauriEvent.MfaOpenIdError, + (event) => { + cleanup(); + setIsPolling(false); + error(`OIDC MFA failed for location ${location.id}: ${event.payload.error}`); + const message = mfaErrorMessage(event.payload.error); + if (isTimeout(event.payload.error)) { + setPollError('Authentication timed out. Please try again.'); + } else if (isConnectFailure(message)) { + setPollError('Failed to establish VPN connection'); + } else if (isSessionExpired(message)) { + setPollError('Session expired. Please try again.'); + } else { + setPollError('Authentication failed. Please try again.'); + } + }, + ); + + unlistenRef.current = () => { + completeUnlisten(); + errorUnlisten(); + }; } catch (e) { - if (handleMfaStartError({ err: e, location, setPostureError, setView })) { + void error(`OIDC MFA start failed for location ${location.id}: ${e}`); + if (isMfaPostureError(e, location)) { + setPostureError(mfaErrorMessage(e)); + setView(LocationCardViews.PostureCheckFail); return; } - if (isEdgeUnavailable(e)) { + if (isServiceUnavailable(e)) { setView(LocationCardViews.ConnectionError); return; } - setStartError( - e instanceof Error ? e.message : 'Failed to start OIDC authentication', - ); - error(`OIDC MFA start network error for location ${location.id}: ${e}`); + setStartError(mfaErrorMessage(e)); } finally { setIsStarting(false); } - }, [instance, location, setPostureError, setView, startPolling, stopPolling]); + }, [instance, location, setPostureError, setView, cleanup]); return { start, isStarting, startError, isPolling, pollError }; }; diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx index 4b1387ba7..4d56aa240 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaEmailView/LocationCardMfaEmailView.tsx @@ -1,4 +1,5 @@ import { useCallback, useEffect, useState } from 'react'; +import { MfaMethod } from '../../../../rust-api/types'; import { ThemeSpacing } from '../../../../types'; import { isPresent } from '../../../../utils/isPresent'; import { Button } from '../../../Button/Button'; @@ -10,7 +11,6 @@ import { IconKind } from '../../../Icon'; import { IconButton } from '../../../IconButton/IconButton'; import { IconButtonVariant } from '../../../IconButton/types'; import { SizedBox } from '../../../SizedBox/SizedBox'; -import { MfaStartMethod } from '../../api/startClientMfaSession'; import { LocationViewHeader } from '../../components/LocationViewHeader/LocationViewHeader'; import { useLocationCardContext } from '../../context/context'; import { LocationCardViews } from '../../context/types'; @@ -23,7 +23,7 @@ export const LocationCardMfaEmailView = () => { const { setView, location, setPostureError } = useLocationCardContext(); const { verifyCode, isVerifying, verifyError, isStarting, startError } = useMfaConnect( location, - MfaStartMethod.Email, + MfaMethod.Email, { debounceMs: location.posture_check_required ? MIN_POSTURE_LOADER_MS : 0, onConnected: () => setView(LocationCardViews.Connected), diff --git a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx index f6b0f3bcd..5cf19f233 100644 --- a/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/LocationCardMfaTotpView/LocationCardMfaTotpView.tsx @@ -1,4 +1,5 @@ import { useCallback, useEffect, useState } from 'react'; +import { MfaMethod } from '../../../../rust-api/types'; import { ThemeSpacing } from '../../../../types'; import { isPresent } from '../../../../utils/isPresent'; import { Button } from '../../../Button/Button'; @@ -10,7 +11,6 @@ import { IconKind } from '../../../Icon'; import { IconButton } from '../../../IconButton/IconButton'; import { IconButtonVariant } from '../../../IconButton/types'; import { SizedBox } from '../../../SizedBox/SizedBox'; -import { MfaStartMethod } from '../../api/startClientMfaSession'; import { LocationViewHeader } from '../../components/LocationViewHeader/LocationViewHeader'; import { useLocationCardContext } from '../../context/context'; import { LocationCardViews } from '../../context/types'; @@ -23,7 +23,7 @@ export const LocationCardMfaTotpView = () => { const { setView, location, setPostureError } = useLocationCardContext(); const { verifyCode, isVerifying, verifyError, isStarting, startError } = useMfaConnect( location, - MfaStartMethod.Totp, + MfaMethod.Totp, { debounceMs: location.posture_check_required ? MIN_POSTURE_LOADER_MS : 0, onConnected: () => setView(LocationCardViews.Connected), diff --git a/new-ui/src/shared/edge-api/api.ts b/new-ui/src/shared/edge-api/api.ts deleted file mode 100644 index b9d4769d9..000000000 --- a/new-ui/src/shared/edge-api/api.ts +++ /dev/null @@ -1,308 +0,0 @@ -import { getVersion } from '@tauri-apps/api/app'; -import { invoke } from '@tauri-apps/api/core'; -import { fetch } from '@tauri-apps/plugin-http'; -import type { - CreateDeviceResponse, - InstanceInfo, - MfaMethodValue, - SaveDeviceConfigResponse, -} from '../rust-api/types'; -import { TauriCommand } from '../rust-api/types'; -import { generateWGKeys } from '../utils/generateWGKeys'; -import { mfaToApi } from '../utils/mfa'; -import type { - ActivateUserRequest, - ActivateUserResponse, - AddInstanceRequest, - AddInstanceResult, - EdgeRequestHeaders, - EnrollmentErrorKind, - EnrollmentStartResponse, - MfaSetupFinishRequest, - MfaSetupFinishResponse, - MfaSetupStartResponse, - UpdateInstanceRequest, - UpdateInstanceResult, -} from './types'; - -const getPlatformHeader = (): Promise => invoke(TauriCommand.GetPlatformHeader); -const getInstances = (): Promise => invoke(TauriCommand.AllInstances); -const deleteInstance = (instanceId: number): Promise => - invoke(TauriCommand.DeleteInstance, { instanceId }); -const updateInstanceRecord = (args: { - instanceId: number; - response: CreateDeviceResponse; -}): Promise => invoke(TauriCommand.UpdateInstance, args); -const saveDeviceConfig = (args: { - privateKey: string; - response: CreateDeviceResponse; -}): Promise => invoke(TauriCommand.SaveDeviceConfig, args); - -const buildProxyUrl = (url: string): string => { - const base = url.endsWith('/') ? url.slice(0, -1) : url; - return `${base}/api/v1`; -}; - -const getEdgeRequestHeaders = async (): Promise => { - const platform = await getPlatformHeader(); - const version = await getVersion().catch(() => 'unknown'); - return { - 'defguard-client-platform': platform, - 'defguard-client-version': version, - }; -}; - -const createDevice = async ( - proxyUrl: string, - cookie: string, - name: string, -): Promise<{ error?: string }> => { - const edgeHeaders = await getEdgeRequestHeaders(); - const { publicKey, privateKey } = generateWGKeys(); - const url = buildProxyUrl(proxyUrl); - const deviceRes = await fetch(`${url}/enrollment/create_device`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Cookie: cookie, - ...edgeHeaders, - }, - body: JSON.stringify({ name, pubkey: publicKey }), - }); - - if (!deviceRes.ok) { - const body = (await deviceRes.json()) as { error?: string }; - return { error: body.error ?? `create_device failed (${deviceRes.status})` }; - } - - await saveDeviceConfig({ privateKey, response: await deviceRes.json() }); - return {}; -}; - -type EnrollmentStartOutcome = - | { ok: true; response: Response } - | { ok: false; error?: string; errorKind: EnrollmentErrorKind }; - -const startEnrollment = async ( - proxyUrl: string, - token: string, - edgeHeaders: EdgeRequestHeaders, -): Promise => { - let res: Response; - try { - res = await fetch(`${proxyUrl}/enrollment/start`, { - method: 'POST', - headers: { 'Content-Type': 'application/json', ...edgeHeaders }, - body: JSON.stringify({ token }), - }); - } catch { - return { ok: false, errorKind: 'network' }; - } - - if (!res.ok) { - if (res.status === 401) { - return { ok: false, errorKind: 'unauthorized' }; - } - const body = (await res.json().catch(() => ({}))) as { error?: string }; - return { - ok: false, - error: body.error ?? `Enrollment start failed (${res.status})`, - errorKind: 'server', - }; - } - - return { ok: true, response: res }; -}; - -const addInstance = async (values: AddInstanceRequest): Promise => { - try { - const proxyUrl = buildProxyUrl(values.url); - - const edgeHeaders = await getEdgeRequestHeaders(); - - const startResult = await startEnrollment(proxyUrl, values.token, edgeHeaders); - if (!startResult.ok) { - return { error: startResult.error, errorKind: startResult.errorKind }; - } - const startRes = startResult.response; - - const cookie = startRes.headers - .getSetCookie() - .find((c) => c.startsWith('defguard_proxy=')); - if (!cookie) return { error: 'Auth cookie missing from enrollment response' }; - - const resp = (await startRes.json()) as EnrollmentStartResponse; - - const instances = await getInstances(); - const existing = instances.find((i) => i.uuid === resp.instance.id); - if (existing) { - const netRes = await fetch(`${proxyUrl}/enrollment/network_info`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Cookie: cookie, - ...edgeHeaders, - }, - body: JSON.stringify({ pubkey: existing.pubkey }), - }); - // device no longer exists core side, clean it up - if (netRes.status === 404) { - await deleteInstance(existing.id); - } else { - if (!netRes.ok) return { error: `network_info failed (${netRes.status})` }; - await updateInstanceRecord({ - instanceId: existing.id, - response: await netRes.json(), - }); - return {}; - } - } - - const normalizedName = values.name.trim().toLowerCase(); - if (resp.user.device_names.some((n) => n.trim().toLowerCase() === normalizedName)) { - return { error: `Device name '${values.name}' is already in use` }; - } - - return { startResponse: resp, proxyUrl, cookie }; - } catch (e) { - return { error: e instanceof Error ? e.message : String(e) }; - } -}; - -const updateExistingInstance = async ( - values: UpdateInstanceRequest, -): Promise => { - try { - const proxyUrl = buildProxyUrl(values.url); - const edgeHeaders = await getEdgeRequestHeaders(); - - const instances = await getInstances(); - const existing = instances.find((i) => i.id === values.instanceId); - if (!existing) return { error: 'Instance no longer exists.' }; - - const startResult = await startEnrollment(proxyUrl, values.token, edgeHeaders); - if (!startResult.ok) { - return { error: startResult.error, errorKind: startResult.errorKind }; - } - const startRes = startResult.response; - - const cookie = startRes.headers - .getSetCookie() - .find((c) => c.startsWith('defguard_proxy=')); - if (!cookie) return { error: 'Auth cookie missing from enrollment response' }; - - const resp = (await startRes.json()) as EnrollmentStartResponse; - - if (resp.instance.id !== existing.uuid) { - return { - error: 'Provided token belongs to a different instance.', - errorKind: 'unauthorized', - }; - } - - const netRes = await fetch(`${proxyUrl}/enrollment/network_info`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Cookie: cookie, - ...edgeHeaders, - }, - body: JSON.stringify({ pubkey: existing.pubkey }), - }); - - if (!netRes.ok) { - const body = (await netRes.json()) as { error?: string }; - return { error: body.error ?? `network_info failed (${netRes.status})` }; - } - - await updateInstanceRecord({ - instanceId: existing.id, - response: await netRes.json(), - }); - return {}; - } catch (e) { - return { error: e instanceof Error ? e.message : String(e) }; - } -}; - -const startMfaSetup = async ( - proxyUrl: string, - cookie: string, - method: MfaMethodValue, -): Promise<{ result?: MfaSetupStartResponse; error?: string }> => { - try { - const base = buildProxyUrl(proxyUrl); - const edgeHeaders = await getEdgeRequestHeaders(); - const res = await fetch(`${base}/enrollment/register-mfa/code/start`, { - method: 'POST', - headers: { 'Content-Type': 'application/json', Cookie: cookie, ...edgeHeaders }, - body: JSON.stringify({ method: mfaToApi(method) }), - }); - if (!res.ok) { - const body = (await res.json()) as { error?: string }; - return { error: body.error ?? `MFA setup start failed (${res.status})` }; - } - return { result: (await res.json()) as MfaSetupStartResponse }; - } catch (e) { - return { error: e instanceof Error ? e.message : String(e) }; - } -}; - -const activateUser = async ( - proxyUrl: string, - cookie: string, - request: Omit, -): Promise<{ result?: ActivateUserResponse; error?: string }> => { - try { - const base = buildProxyUrl(proxyUrl); - const edgeHeaders = await getEdgeRequestHeaders(); - const res = await fetch(`${base}/enrollment/activate_user`, { - method: 'POST', - headers: { 'Content-Type': 'application/json', Cookie: cookie, ...edgeHeaders }, - body: JSON.stringify({ ...request }), - }); - if (!res.ok) { - const body = (await res.json()) as { error?: string }; - return { error: body.error ?? `activate_user failed (${res.status})` }; - } - return { result: (await res.json()) as ActivateUserResponse }; - } catch (e) { - return { error: e instanceof Error ? e.message : String(e) }; - } -}; - -const finishMfaSetup = async ( - proxyUrl: string, - cookie: string, - request: MfaSetupFinishRequest, -): Promise<{ result?: MfaSetupFinishResponse; error?: string }> => { - try { - const base = buildProxyUrl(proxyUrl); - const edgeHeaders = await getEdgeRequestHeaders(); - const res = await fetch(`${base}/enrollment/register-mfa/code/finish`, { - method: 'POST', - headers: { 'Content-Type': 'application/json', Cookie: cookie, ...edgeHeaders }, - body: JSON.stringify({ - code: request.code, - method: mfaToApi(request.method), - }), - }); - if (!res.ok) { - const body = (await res.json()) as { error?: string }; - return { error: body.error ?? `MFA setup finish failed (${res.status})` }; - } - return { result: (await res.json()) as MfaSetupFinishResponse }; - } catch (e) { - return { error: e instanceof Error ? e.message : String(e) }; - } -}; - -export const edgeApi = { - getEdgeRequestHeaders, - createDevice, - addInstance, - updateInstance: updateExistingInstance, - startMfaSetup, - activateUser, - finishMfaSetup, -}; diff --git a/new-ui/src/shared/edge-api/types.ts b/new-ui/src/shared/edge-api/types.ts deleted file mode 100644 index a4e050941..000000000 --- a/new-ui/src/shared/edge-api/types.ts +++ /dev/null @@ -1,86 +0,0 @@ -import type { MfaMethodValue } from '../rust-api/types'; - -export type EnrollmentInstanceInfo = { - id: string; - name: string; - url: string; - proxy_url?: string; - username: string; - openid_display_name?: string; -}; - -export type AdminInfo = { - name: string; - email: string; - phone_number?: string; -}; - -export type UserInfo = { - first_name: string; - last_name: string; - login: string; - email: string; - is_active: boolean; - phone_number: string; - device_names: string[]; - enrolled: boolean; - password_management_disabled: boolean; -}; - -export type EnrollmentSettings = { - admin_device_management: boolean; - mfa_required: boolean; - only_client_activation: boolean; - smtp_configured: boolean; - vpn_setup_optional: boolean; -}; - -export type EnrollmentStartResponse = { - admin: AdminInfo; - user: UserInfo; - instance: EnrollmentInstanceInfo; - deadline_timestamp: number; - final_page_content: string; - vpn_setup_optional: boolean; - settings: EnrollmentSettings; -}; - -export type EdgeRequestHeaders = { - 'defguard-client-version': string; - 'defguard-client-platform': string; -}; - -/** `network`: the request could not be sent, most likely a bad URL. - * `unauthorized`: the server responded 401, the token is invalid. - * `server`: any other failure response. */ -export type EnrollmentErrorKind = 'network' | 'unauthorized' | 'server'; - -export type AddInstanceRequest = { url: string; token: string; name: string }; -export type AddInstanceResult = { - startResponse?: EnrollmentStartResponse; - proxyUrl?: string; - cookie?: string; - error?: string; - errorKind?: EnrollmentErrorKind; -}; - -export type UpdateInstanceRequest = { instanceId: number; url: string; token: string }; -export type UpdateInstanceResult = { - error?: string; - errorKind?: EnrollmentErrorKind; -}; - -export type MfaSetupStartRequest = { method: MfaMethodValue }; -export type MfaSetupStartResponse = { totp_secret?: string }; - -export type MfaSetupFinishRequest = { code: string; method: MfaMethodValue }; -export type MfaSetupFinishResponse = { recovery_codes: string[] }; - -export type ActivateUserRequest = { - password?: string; - phone_number: string; -}; - -export type ActivateUserResponse = { - token: string; -}; diff --git a/new-ui/src/shared/rust-api/api.ts b/new-ui/src/shared/rust-api/api.ts index d467d6350..98c23ff6f 100644 --- a/new-ui/src/shared/rust-api/api.ts +++ b/new-ui/src/shared/rust-api/api.ts @@ -1,15 +1,22 @@ import { invoke } from '@tauri-apps/api/core'; +import { mfaToApi } from '../utils/mfa'; import type { ActiveConnectionSummary, AppConfig, AppConfigPatch, Connection, ConnectionArgs, + CreateDeviceResponse, + EnrollmentMfaFinishResult, + EnrollmentMfaStartResult, + EnrollmentStartResult, InstanceInfo, LocationDetails, LocationDetailsArgs, LocationInfo, LocationStats, + MfaMethodValue, + MfaStartResult, NewAppVersionInfo, ProvisioningConfig, RoutingArgs, @@ -133,6 +140,93 @@ const getSessionState = (): Promise => invoke(TauriCommand.GetSess const patchSessionState = (patch: SessionStatePatch): Promise => invoke(TauriCommand.PatchSessionState, { patch }); +// Enrollment + +const enrollmentStart = ( + proxyUrl: string, + token: string, +): Promise => + invoke(TauriCommand.EnrollmentStart, { proxyUrl, token }); + +const enrollmentCreateDevice = ( + sessionId: string, + name: string, + pubkey: string, +): Promise => + invoke(TauriCommand.EnrollmentCreateDevice, { sessionId, name, pubkey }); + +const enrollmentActivateUser = ( + sessionId: string, + password?: string | null, + phoneNumber?: string | null, +): Promise => + invoke(TauriCommand.EnrollmentActivateUser, { sessionId, password, phoneNumber }); + +const enrollmentRegisterMfaStart = ( + sessionId: string, + method: MfaMethodValue, +): Promise => + invoke(TauriCommand.EnrollmentRegisterMfaStart, { + sessionId, + method: mfaToApi(method), + }); + +const enrollmentRegisterMfaFinish = ( + sessionId: string, + code: string, + method: MfaMethodValue, +): Promise => + invoke(TauriCommand.EnrollmentRegisterMfaFinish, { + sessionId, + code, + method: mfaToApi(method), + }); + +const enrollmentNetworkInfo = ( + sessionId: string, + pubkey: string, +): Promise => + invoke(TauriCommand.EnrollmentNetworkInfo, { sessionId, pubkey }); + +const enrollmentFinish = (sessionId: string): Promise => + invoke(TauriCommand.EnrollmentFinish, { sessionId }); + +// MFA (connect-time) + +const mfaStart = ( + instanceId: number, + locationId: number, + method: string, +): Promise => + invoke(TauriCommand.MfaStart, { instanceId, locationId, method }); + +// Completes MFA and brings up the connection in the backend; the preshared key +// never crosses back to the frontend. +const mfaFinishCode = ( + instanceId: number, + locationId: number, + token: string, + code: string, +): Promise => + invoke(TauriCommand.MfaFinishCode, { instanceId, locationId, token, code }); + +const mfaPollOpenId = ( + instanceId: number, + locationId: number, + token: string, +): Promise => + invoke(TauriCommand.MfaPollOpenId, { instanceId, locationId, token }); + +const mfaConnectMobileApprove = ( + instanceId: number, + locationId: number, + token: string, +): Promise => + invoke(TauriCommand.MfaConnectMobileApprove, { instanceId, locationId, token }); + +const cancelMfa = (taskId: string): Promise => + invoke(TauriCommand.CancelMfa, { taskId }); + export const api = { closeWelcomeWindow, // Instances @@ -180,4 +274,18 @@ export const api = { // Session state getSessionState, patchSessionState, + // Enrollment + enrollmentStart, + enrollmentCreateDevice, + enrollmentActivateUser, + enrollmentRegisterMfaStart, + enrollmentRegisterMfaFinish, + enrollmentNetworkInfo, + enrollmentFinish, + // MFA + mfaStart, + mfaFinishCode, + mfaPollOpenId, + mfaConnectMobileApprove, + cancelMfa, }; diff --git a/new-ui/src/shared/rust-api/enrollment.ts b/new-ui/src/shared/rust-api/enrollment.ts new file mode 100644 index 000000000..187739160 --- /dev/null +++ b/new-ui/src/shared/rust-api/enrollment.ts @@ -0,0 +1,169 @@ +import { invoke } from '@tauri-apps/api/core'; +import { generateWGKeys } from '../utils/generateWGKeys'; +import { api } from './api'; +import type { + AddInstanceRequest, + AddInstanceResult, + CreateDeviceResponse, + EnrollmentErrorKind, + InstanceInfo, + SaveDeviceConfigResponse, + UpdateInstanceRequest, + UpdateInstanceResult, +} from './types'; +import { TauriCommand } from './types'; + +const getInstances = (): Promise => invoke(TauriCommand.AllInstances); +const updateInstanceRecord = (args: { + instanceId: number; + response: CreateDeviceResponse; +}): Promise => invoke(TauriCommand.UpdateInstance, args); +const saveDeviceConfig = (args: { + privateKey: string; + response: CreateDeviceResponse; +}): Promise => invoke(TauriCommand.SaveDeviceConfig, args); + +/** Extract the raw Rust error string from a Tauri command rejection. */ +const rustErrorMessage = (err: unknown): string => + typeof err === 'object' && err !== null && 'message' in err + ? String((err as Record).message) + : String(err); + +/** Parse a Tauri command error that contains a serialized `EnrollmentError` + * JSON string into an `EnrollmentErrorKind` and human-readable message. */ +export const parseEnrollmentError = ( + err: unknown, +): { error?: string; errorKind: EnrollmentErrorKind } => { + const raw = rustErrorMessage(err); + try { + const parsed = JSON.parse(raw) as { type: string; message?: string; status?: number }; + switch (parsed.type) { + case 'token_expired': + return { errorKind: 'unauthorized' }; + case 'network_error': + return { errorKind: 'network' }; + case 'proxy_error': + return { error: parsed.message, errorKind: 'server' }; + default: + return { error: parsed.message ?? raw, errorKind: 'server' }; + } + } catch { + return { error: raw, errorKind: 'server' }; + } +}; + +/** True when a command error is a proxy 404 — the device was deleted + * server-side while a stale local record survived. */ +const isDeviceNotFound = (err: unknown): boolean => { + try { + const parsed = JSON.parse(rustErrorMessage(err)) as { + type?: string; + status?: number; + }; + return parsed.type === 'proxy_error' && parsed.status === 404; + } catch { + return false; + } +}; + +export const enrollmentCreateDevice = async ( + sessionId: string, + name: string, +): Promise<{ error?: string }> => { + try { + const { publicKey, privateKey } = generateWGKeys(); + const deviceResponse = await api.enrollmentCreateDevice(sessionId, name, publicKey); + await saveDeviceConfig({ + privateKey, + response: deviceResponse, + }); + return {}; + } catch (e) { + return { error: e instanceof Error ? e.message : String(e) }; + } +}; + +export const enrollmentAddInstance = async ( + values: AddInstanceRequest, +): Promise => { + let sessionId: string | undefined; + let handOffSession = false; + try { + const startResult = await api.enrollmentStart(values.url.trim(), values.token.trim()); + sessionId = startResult.session_id; + + const instances = await getInstances(); + const existing = instances.find((i) => i.uuid === startResult.instance.id); + if (existing) { + try { + const netInfo = await api.enrollmentNetworkInfo( + startResult.session_id, + existing.pubkey, + ); + await updateInstanceRecord({ + instanceId: existing.id, + response: netInfo, + }); + return {}; + } catch (e) { + if (!isDeviceNotFound(e)) throw e; + await api.deleteInstance(existing.id); + } + } + + const normalizedName = values.name.trim().toLowerCase(); + if ( + startResult.user.device_names.some((n) => n.trim().toLowerCase() === normalizedName) + ) { + return { error: `Device name '${values.name}' is already in use` }; + } + + handOffSession = true; + return { startResponse: startResult, session_id: startResult.session_id }; + } catch (e) { + const parsed = parseEnrollmentError(e); + return { error: parsed.error, errorKind: parsed.errorKind }; + } finally { + if (sessionId && !handOffSession) { + await api.enrollmentFinish(sessionId).catch(() => {}); + } + } +}; + +export const enrollmentUpdateInstance = async ( + values: UpdateInstanceRequest, +): Promise => { + let sessionId: string | undefined; + try { + const instances = await getInstances(); + const existing = instances.find((i) => i.id === values.instanceId); + if (!existing) return { error: 'Instance no longer exists.' }; + + const startResult = await api.enrollmentStart(values.url, values.token); + sessionId = startResult.session_id; + + if (startResult.instance.id !== existing.uuid) { + return { + error: 'Provided token belongs to a different instance.', + errorKind: 'unauthorized', + }; + } + + const netInfo = await api.enrollmentNetworkInfo( + startResult.session_id, + existing.pubkey, + ); + await updateInstanceRecord({ + instanceId: existing.id, + response: netInfo, + }); + return {}; + } catch (e) { + const parsed = parseEnrollmentError(e); + return { error: parsed.error, errorKind: parsed.errorKind }; + } finally { + if (sessionId) { + await api.enrollmentFinish(sessionId).catch(() => {}); + } + } +}; diff --git a/new-ui/src/shared/rust-api/mfaError.ts b/new-ui/src/shared/rust-api/mfaError.ts new file mode 100644 index 000000000..7abf47846 --- /dev/null +++ b/new-ui/src/shared/rust-api/mfaError.ts @@ -0,0 +1,56 @@ +import type { LocationInfo } from './types'; + +/** Shape of the tagged `MfaError` the Rust backend serializes to JSON. */ +export type ParsedMfaError = { + type: string; + message?: string; + status?: number; +}; + +/** Parse a structured `MfaError` (JSON) thrown by a command or carried on an + * event payload. Returns null for plain-string errors. */ +export const parseMfaError = (err: unknown): ParsedMfaError | null => { + try { + const parsed = JSON.parse(String(err)) as ParsedMfaError; + return parsed && typeof parsed.type === 'string' ? parsed : null; + } catch { + return null; + } +}; + +/** Best-effort human-readable message: the structured `message` when present, + * otherwise the raw error string. */ +export const mfaErrorMessage = (err: unknown): string => + parseMfaError(err)?.message ?? String(err); + +/** True when the error is a posture rejection for a posture-gated location. + * The backend maps only HTTP 403 (a failed device posture check) to + * `posture_rejected`; ordinary MFA rejections stay `mfa_rejected`. */ +export const isMfaPostureError = (err: unknown, location: LocationInfo): boolean => + location.posture_check_required && parseMfaError(err)?.type === 'posture_rejected'; + +/** The proxy session/token is no longer valid. */ +export const isSessionExpired = (message: string): boolean => + message.includes('invalid token') || message.includes('login session not found'); + +/** The MFA operation timed out (the backend poll deadline was reached). */ +export const isTimeout = (err: unknown): boolean => + parseMfaError(err)?.type === 'timeout'; + +/** A submitted one-time code was rejected. */ +export const isInvalidCode = (message: string): boolean => + message.includes('Unauthorized'); + +/** The proxy/edge service is unavailable (network error or 5xx response). + * Maps to `MfaError::NetworkError` (type: "network_error") and + * `MfaError::ProxyError` (type: "proxy_error") from the Rust backend. */ +export const isServiceUnavailable = (err: unknown): boolean => { + const parsed = parseMfaError(err); + if (!parsed) return false; + return parsed.type === 'network_error' || parsed.type === 'proxy_error'; +}; + +/** MFA succeeded but bringing up the VPN connection afterwards failed + * (see `connect_after_mfa` in the Rust backend). */ +export const isConnectFailure = (message: string): boolean => + message.includes('VPN connection failed'); diff --git a/new-ui/src/shared/rust-api/types.ts b/new-ui/src/shared/rust-api/types.ts index 25b01b774..dd3dd49f5 100644 --- a/new-ui/src/shared/rust-api/types.ts +++ b/new-ui/src/shared/rust-api/types.ts @@ -81,6 +81,20 @@ export type ConnectionType = (typeof ConnectionType)[keyof typeof ConnectionType /** Typed enum for every Tauri command available on the backend. */ export const TauriCommand = { + // Enrollment + EnrollmentStart: 'enrollment_start', + EnrollmentCreateDevice: 'enrollment_create_device', + EnrollmentActivateUser: 'enrollment_activate_user', + EnrollmentRegisterMfaStart: 'enrollment_register_mfa_start', + EnrollmentRegisterMfaFinish: 'enrollment_register_mfa_finish', + EnrollmentNetworkInfo: 'enrollment_network_info', + EnrollmentFinish: 'enrollment_finish', + // MFA + MfaStart: 'mfa_start', + MfaFinishCode: 'mfa_finish_code', + MfaPollOpenId: 'mfa_poll_openid', + MfaConnectMobileApprove: 'mfa_connect_mobile_approve', + CancelMfa: 'cancel_mfa', // Instances AllInstances: 'all_instances', DeleteInstance: 'delete_instance', @@ -148,6 +162,10 @@ export const TauriEvent = { GlobalLogUpdate: 'log-update-global', WindowSwapped: 'window-swapped', SessionStateChanged: 'session-state-changed', + MfaOpenIdComplete: 'mfa-openid-complete', + MfaOpenIdError: 'mfa-openid-error', + MfaMobileComplete: 'mfa-mobile-complete', + MfaMobileError: 'mfa-mobile-error', } as const; export type TauriEventValue = (typeof TauriEvent)[keyof typeof TauriEvent]; @@ -320,7 +338,6 @@ export type SaveDeviceConfigResponse = { export type ConnectionArgs = { locationId: number; connectionType: ConnectionType; - presharedKey?: string; }; export type RoutingArgs = { @@ -390,3 +407,105 @@ export type SessionState = { }; export type SessionStatePatch = Partial; + +/** User information returned by enrollment_start. + * + * Mirrors `InitialUserInfo` from `client_types.proto`. */ +export type EnrollmentUserInfo = { + first_name: string; + last_name: string; + login: string; + email: string; + phone_number: string | null; + is_active: boolean; + device_names: string[]; + enrolled: boolean; + is_admin: boolean; + password_management_disabled: boolean; +}; + +/** Administrator information returned by enrollment_start. + * + * Mirrors `AdminInfo` from `client_types.proto`. */ +export type EnrollmentAdminInfo = { + name: string; + phone_number: string | null; + email: string; +}; + +/** Enrollment settings returned by enrollment_start. + * + * Mirrors `EnrollmentSettings` from `client_types.proto`. */ +export type EnrollmentSettings = { + vpn_setup_optional: boolean; + only_client_activation: boolean; + admin_device_management: boolean; + smtp_configured: boolean; + mfa_required: boolean; +}; + +/** Instance info returned by enrollment_start. + * + * Mirrors `InstanceInfo` from `client_types.proto`. */ +export type EnrollmentInstanceInfo = { + id: string; + name: string; + url: string; + proxy_url: string; + username: string; + enterprise_enabled: boolean; + openid_display_name: string | null; +}; + +/** Full result from the enrollment_start Tauri command. */ +export type EnrollmentStartResult = { + session_id: string; + user: EnrollmentUserInfo; + admin: EnrollmentAdminInfo; + settings: EnrollmentSettings; + instance: EnrollmentInstanceInfo; + deadline_timestamp: number; + final_page_content: string; +}; + +/** Result from enrollment_register_mfa_start. */ +export type EnrollmentMfaStartResult = { + totp_secret: string | null; +}; + +/** Result from enrollment_register_mfa_finish. */ +export type EnrollmentMfaFinishResult = { + recovery_codes: string[]; +}; + +/** Result from mfa_start Tauri command. */ +export type MfaStartResult = { + token: string; + challenge: string | null; +}; + +/** Payload for mfa-openid-error / mfa-mobile-error events. */ +export type MfaErrorPayload = { + error: string; +}; + +/** `network`: the request could not be sent, most likely a bad URL. + * `unauthorized`: the server responded 401, the token is invalid. + * `server`: any other failure response. */ +export type EnrollmentErrorKind = 'network' | 'unauthorized' | 'server'; + +export type AddInstanceRequest = { url: string; token: string; name: string }; + +export type AddInstanceResult = { + startResponse?: EnrollmentStartResult; + session_id?: string; + error?: string; + errorKind?: EnrollmentErrorKind; +}; + +export type UpdateInstanceRequest = { instanceId: number; url: string; token: string }; + +export type UpdateInstanceResult = { + error?: string; + errorKind?: EnrollmentErrorKind; +}; diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 6942c59c1..7c1dc7e8e 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -144,9 +144,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arbitrary" @@ -219,6 +219,16 @@ dependencies = [ "zbus", ] +[[package]] +name = "assert-json-diff" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "async-broadcast" version = "0.7.2" @@ -437,13 +447,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.2", ] [[package]] @@ -505,7 +515,7 @@ dependencies = [ "num-traits", "pastey", "rayon", - "thiserror 2.0.18", + "thiserror 2.0.19", "v_frame", "y4m", ] @@ -535,9 +545,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.17.1" +version = "1.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4342d8937fc7e5dd9b1c60292261c0670c882a2cd1719cfc11b1af41731e32ad" +checksum = "00bdb5da18dac48ca2cc7cd4a98e533e8635a58e2361d13a1a4ee3888e0d72f1" dependencies = [ "aws-lc-sys", "zeroize", @@ -545,9 +555,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.42.0" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9ceb1da931507a12f4fccea479dccd00da1943e1b4ae72d8e502d707361444" +checksum = "43103168cc76fe62678a375e722fc9cb3a0146159ac5828bc4f0dfd755c2224c" dependencies = [ "cc", "cmake", @@ -789,9 +799,9 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytemuck" -version = "1.25.1" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6aedf8ae72766347502cf3cb4f41cf5e9cc37d28bee90f1fdaaae15f9cf9424" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" [[package]] name = "byteorder" @@ -868,7 +878,7 @@ dependencies = [ "semver", "serde", "serde_json", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -883,9 +893,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.67" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17dd265a7d0f31ef544e1b20e03add05d3b45b491b633b10d67145d2acc1a38" +checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8" dependencies = [ "find-msvc-tools", "jobserver", @@ -1454,6 +1464,24 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "deadpool" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" +dependencies = [ + "deadpool-runtime", + "lazy_static", + "num_cpus", + "tokio", +] + +[[package]] +name = "deadpool-runtime" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" + [[package]] name = "defguard-cli" version = "2.1.0" @@ -1478,13 +1506,15 @@ dependencies = [ "sha1 0.11.0", "sqlx", "tempfile", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tokio-stream", "tokio-tungstenite", + "tokio-util", "tonic", "tracing", "tracing-subscriber", + "url", "webbrowser", ] @@ -1545,7 +1575,7 @@ dependencies = [ "tauri-plugin-process", "tauri-plugin-single-instance", "tauri-plugin-window-state", - "thiserror 2.0.18", + "thiserror 2.0.19", "time", "tokio", "tokio-stream", @@ -1556,6 +1586,7 @@ dependencies = [ "tracing", "tracing-appender", "tracing-subscriber", + "uuid", "vergen-git2", "webbrowser", "windows 0.62.2", @@ -1603,6 +1634,7 @@ dependencies = [ "defguard-client-proto", "defguard_wireguard_rs", "dirs-next", + "futures-util", "hex", "hyper-util", "log", @@ -1623,12 +1655,15 @@ dependencies = [ "struct-patch", "strum", "tempfile", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", + "tokio-tungstenite", + "tokio-util", "tonic", "tower", "tracing", "windows-sys 0.61.2", + "wiremock", "x25519-dalek 3.0.0", ] @@ -1690,7 +1725,7 @@ dependencies = [ "log", "nix", "serde", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tokio-stream", "tonic", @@ -1716,7 +1751,7 @@ dependencies = [ "prost", "serde", "serde_json", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "windows 0.62.2", "windows-acl", @@ -1736,7 +1771,7 @@ dependencies = [ "reqwest 0.13.4", "serde", "serde_json", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tonic", "tonic-prost", @@ -1764,7 +1799,7 @@ dependencies = [ "parking_lot", "ring", "socket2", - "thiserror 2.0.18", + "thiserror 2.0.19", "tracing", "x25519-dalek 2.0.1", ] @@ -1788,7 +1823,7 @@ dependencies = [ "netlink-sys", "regex", "serde", - "thiserror 2.0.18", + "thiserror 2.0.19", "windows 0.62.2", "wireguard-nt", "x25519-dalek 3.0.0", @@ -2227,9 +2262,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "fax" @@ -2387,9 +2422,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218" dependencies = [ "futures-channel", "futures-core", @@ -2402,9 +2437,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" dependencies = [ "futures-core", "futures-sink", @@ -2412,15 +2447,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" dependencies = [ "futures-core", "futures-task", @@ -2440,9 +2475,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" [[package]] name = "futures-lite" @@ -2459,9 +2494,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" dependencies = [ "proc-macro2", "quote", @@ -2470,21 +2505,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" dependencies = [ "futures-channel", "futures-core", @@ -3483,7 +3518,7 @@ dependencies = [ "jni-sys 0.4.1", "log", "simd_cesu8", - "thiserror 2.0.18", + "thiserror 2.0.19", "walkdir", "windows-link 0.2.1", ] @@ -3919,7 +3954,7 @@ dependencies = [ "once_cell", "png 0.18.1", "serde", - "thiserror 2.0.18", + "thiserror 2.0.19", "windows-sys 0.61.2", ] @@ -4014,7 +4049,7 @@ checksum = "3176f18d11a1ae46053e59ec89d46ba318ae1343615bd3f8c908bfc84edae35c" dependencies = [ "byteorder", "pastey", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -4209,6 +4244,16 @@ dependencies = [ "libm", ] +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + [[package]] name = "num_enum" version = "0.7.6" @@ -5056,9 +5101,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -5256,7 +5301,7 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tracing", "web-time", @@ -5279,7 +5324,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.18", + "thiserror 2.0.19", "tinyvec", "tracing", "web-time", @@ -5301,9 +5346,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.46" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -5435,7 +5480,7 @@ dependencies = [ "rand 0.9.5", "rand_chacha 0.9.0", "simd_helpers", - "thiserror 2.0.18", + "thiserror 2.0.19", "v_frame", "wasm-bindgen", ] @@ -5533,27 +5578,27 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.17", "libredox", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] name = "ref-cast" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.2", ] [[package]] @@ -6008,9 +6053,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -6030,22 +6075,22 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.2", ] [[package]] @@ -6061,9 +6106,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -6074,13 +6119,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.2", ] [[package]] @@ -6414,7 +6459,7 @@ dependencies = [ "serde_json", "sha2", "smallvec", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tokio-stream", "tracing", @@ -6498,7 +6543,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 2.0.18", + "thiserror 2.0.19", "tracing", "uuid", "whoami", @@ -6537,7 +6582,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 2.0.18", + "thiserror 2.0.19", "tracing", "uuid", "whoami", @@ -6563,7 +6608,7 @@ dependencies = [ "serde", "serde_urlencoded", "sqlx-core", - "thiserror 2.0.18", + "thiserror 2.0.19", "tracing", "url", "uuid", @@ -6720,6 +6765,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a207d6d6a2b7fc470b80443726053f18a2481b7e1eee970597051596567987a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "sync_wrapper" version = "1.0.2" @@ -6896,7 +6952,7 @@ dependencies = [ "tauri-runtime", "tauri-runtime-wry", "tauri-utils", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tray-icon", "url", @@ -6947,7 +7003,7 @@ dependencies = [ "sha2", "syn 2.0.119", "tauri-utils", - "thiserror 2.0.18", + "thiserror 2.0.19", "time", "url", "uuid", @@ -6996,7 +7052,7 @@ dependencies = [ "serde_json", "tauri", "tauri-plugin", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -7013,7 +7069,7 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-utils", - "thiserror 2.0.18", + "thiserror 2.0.19", "tracing", "url", "windows-registry 0.5.3", @@ -7022,9 +7078,9 @@ dependencies = [ [[package]] name = "tauri-plugin-dialog" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65981abb771e74e571a38196c3baa11c459379164791eba0e67abc1a5fac9884" +checksum = "b2d3c1dbe38037e7f590cdf2492594d5ceebe031e7bc7e827509b22a999d2940" dependencies = [ "log", "raw-window-handle", @@ -7034,7 +7090,7 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-plugin-fs", - "thiserror 2.0.18", + "thiserror 2.0.19", "url", ] @@ -7057,7 +7113,7 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-utils", - "thiserror 2.0.18", + "thiserror 2.0.19", "toml 1.1.3+spec-1.1.0", "url", ] @@ -7080,7 +7136,7 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-plugin-fs", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "url", "urlpattern", @@ -7103,7 +7159,7 @@ dependencies = [ "swift-rs", "tauri", "tauri-plugin", - "thiserror 2.0.18", + "thiserror 2.0.19", "time", ] @@ -7121,7 +7177,7 @@ dependencies = [ "serde_repr", "tauri", "tauri-plugin", - "thiserror 2.0.18", + "thiserror 2.0.19", "time", "url", ] @@ -7142,7 +7198,7 @@ dependencies = [ "serde_json", "tauri", "tauri-plugin", - "thiserror 2.0.18", + "thiserror 2.0.19", "url", "windows 0.61.3", "zbus", @@ -7163,7 +7219,7 @@ dependencies = [ "sys-locale", "tauri", "tauri-plugin", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -7186,7 +7242,7 @@ dependencies = [ "serde_json", "tauri", "tauri-plugin-deep-link", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tracing", "windows-sys 0.60.2", @@ -7205,7 +7261,7 @@ dependencies = [ "serde_json", "tauri", "tauri-plugin", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -7226,7 +7282,7 @@ dependencies = [ "serde", "serde_json", "tauri-utils", - "thiserror 2.0.18", + "thiserror 2.0.19", "url", "webkit2gtk", "webview2-com", @@ -7289,7 +7345,7 @@ dependencies = [ "serde_json", "serde_with", "swift-rs", - "thiserror 2.0.18", + "thiserror 2.0.19", "toml 1.1.3+spec-1.1.0", "url", "urlpattern", @@ -7314,7 +7370,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed071c670382e85fc2f48ae706492d8c338f4f89bf72520d32f8abfe880aade" dependencies = [ - "thiserror 2.0.18", + "thiserror 2.0.19", "windows 0.61.3", "windows-version", ] @@ -7352,11 +7408,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" dependencies = [ - "thiserror-impl 2.0.18", + "thiserror-impl 2.0.19", ] [[package]] @@ -7372,13 +7428,13 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.2", ] [[package]] @@ -7816,7 +7872,7 @@ checksum = "050686193eb999b4bb3bc2acfa891a13da00f79734704c4b8b4ef1a10b368a3c" dependencies = [ "crossbeam-channel", "symlink", - "thiserror 2.0.18", + "thiserror 2.0.19", "time", "tracing-subscriber", ] @@ -7902,7 +7958,7 @@ dependencies = [ "once_cell", "png 0.18.1", "serde", - "thiserror 2.0.18", + "thiserror 2.0.19", "windows-sys 0.61.2", ] @@ -7937,7 +7993,7 @@ dependencies = [ "native-tls", "rand 0.10.2", "sha1 0.11.0", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -8480,18 +8536,18 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d46a5a140e6f7afeccd8eae97eff335163939eac8b929834875168b29b3d267" +checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" dependencies = [ "rustls-pki-types", ] [[package]] name = "webpki-roots" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf85cb06032201fa7c6f829d7db5a7e5aa45bcc0655327713065f6f0576731bf" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" dependencies = [ "rustls-pki-types", ] @@ -8527,7 +8583,7 @@ version = "0.38.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" dependencies = [ - "thiserror 2.0.18", + "thiserror 2.0.19", "windows 0.61.3", "windows-core 0.61.2", ] @@ -9216,6 +9272,29 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "wiremock" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08db1edfb05d9b3c1542e521aea074442088292f00b5f28e435c714a98f85031" +dependencies = [ + "assert-json-diff", + "base64 0.22.1", + "deadpool", + "futures", + "http", + "http-body-util", + "hyper", + "hyper-util", + "log", + "once_cell", + "regex", + "serde", + "serde_json", + "tokio", + "url", +] + [[package]] name = "wit-bindgen" version = "0.57.1" @@ -9232,7 +9311,7 @@ dependencies = [ "log", "os_pipe", "rustix", - "thiserror 2.0.18", + "thiserror 2.0.19", "tree_magic_mini", "wayland-backend", "wayland-client", @@ -9249,7 +9328,7 @@ dependencies = [ "futures", "log", "serde", - "thiserror 2.0.18", + "thiserror 2.0.19", "windows 0.62.2", "windows-core 0.62.2", ] @@ -9293,7 +9372,7 @@ dependencies = [ "sha2", "soup3", "tao-macros", - "thiserror 2.0.18", + "thiserror 2.0.19", "url", "webkit2gtk", "webkit2gtk-sys", @@ -9396,9 +9475,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.17.0" +version = "5.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28b97f866896a4be7aefd2b5a8e01bb6773d19a775d54ab28b4d094b9a4480e" +checksum = "fe18fb60dc696039e738717b76eaea21e7a4489bbb1885020b43c94236d7e98a" dependencies = [ "async-broadcast", "async-executor", @@ -9431,9 +9510,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.17.0" +version = "5.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e05ad887425eecf5e8384dc2406a4a9313eb73468712fc1cdea362eb4fe0469" +checksum = "fe96480bed92df2b442a1a30df364e12d08eed03aeb061f2b8dc6afb2be91119" dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", @@ -9446,9 +9525,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.3" +version = "4.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039ca249fee9559680f3a9f05b55e0761fee51af4f6c1e7d8c1f31e549721d2" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" dependencies = [ "serde", "winnow 1.0.4", @@ -9567,9 +9646,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.13.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf057bb00bf5c9ad77abb6147b0ca4818236a1858416e9d988e40d6322fefa7" +checksum = "bee2a0bcd2a907786a456fff45aaaaf54c9ba5f50b71ae9ec1a4edd200c94911" dependencies = [ "endi", "enumflags2", @@ -9582,9 +9661,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.13.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8118ca6bda77bfc0ab51d660db0c955f2505eef854c9a449435bccb616933b31" +checksum = "38a708216a18780796770bfe3f4739c7c83a3e8f789b755534bbbc06e4e23e12" dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index ec0e3f001..f69237a82 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -38,7 +38,10 @@ http = "1" image = "0.25" qrcode = { version = "0.14", features = ["image"] } tokio-tungstenite = { version = "0.30", features = ["native-tls"] } +tokio-util = "0.7" +url = "2" vergen-git2 = { version = "10.0", features = ["build"] } +wiremock = "0.6" x25519-dalek = { version = "3.0", features = [ "getrandom", "serde", @@ -130,6 +133,7 @@ time = { version = "0.3", features = ["formatting", "macros"] } tokio.workspace = true tokio-util = "0.7" tonic.workspace = true +uuid = { version = "1", features = ["v4"] } tonic-prost.workspace = true tower = "0.5" tracing.workspace = true diff --git a/src-tauri/client-cli/Cargo.toml b/src-tauri/client-cli/Cargo.toml index 6b5a46cc6..660c38179 100644 --- a/src-tauri/client-cli/Cargo.toml +++ b/src-tauri/client-cli/Cargo.toml @@ -29,8 +29,10 @@ serde_json.workspace = true sqlx.workspace = true thiserror.workspace = true tokio.workspace = true +tokio-util.workspace = true tracing.workspace = true tracing-subscriber = { workspace = true, features = ["env-filter"] } +url.workspace = true webbrowser.workspace = true http.workspace = true qrcode.workspace = true diff --git a/src-tauri/client-cli/src/main.rs b/src-tauri/client-cli/src/main.rs index edf34dd80..5b4eab6c3 100644 --- a/src-tauri/client-cli/src/main.rs +++ b/src-tauri/client-cli/src/main.rs @@ -18,8 +18,6 @@ mod resolve; mod state; #[cfg(all(test, target_os = "linux"))] mod tests_daemon; -#[cfg(test)] -mod tests_proxy; use cli::{Cli, InstanceCommand, LocationCommand, TunnelCommand}; diff --git a/src-tauri/client-cli/src/mfa.rs b/src-tauri/client-cli/src/mfa.rs index dcc8d638f..9efb7ab8b 100644 --- a/src-tauri/client-cli/src/mfa.rs +++ b/src-tauri/client-cli/src/mfa.rs @@ -1,15 +1,13 @@ -//! Connect-time VPN MFA over `core::proxy` (HTTP). +//! Connect-time VPN MFA thin wrapper over `defguard_core::mfa`. //! //! Supports TOTP, email, OIDC, and mobile-approve methods. - -use std::time::Duration; +//! +//! CLI-specific code (method resolution from flags, browser-open, QR +//! rendering, TTY prompting) stays here; all HTTP, WebSocket, and poll +//! logic delegates to `defguard_core::mfa`. use defguard_client_proto::defguard::{ - client_types::{ - ClientMfaFinishRequest, ClientMfaFinishResponse, ClientMfaStartRequest, - ClientMfaStartResponse, MfaMethod, - }, - enterprise::posture::v2::DevicePostureData, + client_types::MfaMethod, enterprise::posture::v2::DevicePostureData, }; use defguard_core::{ database::{ @@ -21,21 +19,12 @@ use defguard_core::{ }, DbPool, }, - proxy::post_with_headers, + mfa, + proto::client_types::{ClientMfaFinishRequest, ClientMfaStartRequest}, }; -use futures_util::StreamExt; -use reqwest::{StatusCode, Url}; use secrecy::{ExposeSecret, SecretString}; -use serde::Deserialize; -use serde_json::Value; -use tokio::{ - net::TcpStream, - select, - signal::ctrl_c, - time::{sleep, Instant}, -}; -use tokio_tungstenite::{connect_async, tungstenite::Message, MaybeTlsStream, WebSocketStream}; use tracing::{debug, info, warn}; +use url::Url; use crate::{ mfa_code::{obtain_code, CodeSource, MfaContext}, @@ -43,6 +32,20 @@ use crate::{ state::CliError, }; +/// Convert a `defguard_core::mfa::MfaError` into a [`CliError`]. +fn into_cli(err: mfa::MfaError) -> CliError { + let msg = err.to_string(); + match err { + mfa::MfaError::NetworkError { .. } => CliError::Other(msg), + mfa::MfaError::ProxyError { .. } => CliError::Other(msg), + mfa::MfaError::MfaRejected { .. } => CliError::MfaFailed(msg), + mfa::MfaError::PostureRejected { .. } => CliError::MfaFailed(msg), + mfa::MfaError::Timeout => CliError::MfaFailed(msg), + mfa::MfaError::Cancelled => CliError::Cancelled(msg), + mfa::MfaError::Other { .. } => CliError::Other(msg), + } +} + /// Resolve the effective MFA method for a location. /// /// When `method_override` is `Some`, parses it into [`MfaMethod`]; otherwise @@ -57,7 +60,7 @@ pub(crate) fn resolve_method( let method = if let Some(raw) = method_override { let method = parse_method(raw)?; // OIDC override on an Internal-mode location will be rejected by the - // server. Fail early to give the user a clear error before I/O. + // server. Fail early to give the user a clear error before I/O. if method == MfaMethod::Oidc && location.location_mfa_mode == LocationMfaMode::Internal { return Err(CliError::InvalidInput( "--mfa-method oidc is only valid for locations that use external (OIDC) MFA." @@ -101,19 +104,11 @@ pub(crate) fn validate_mfa_flags( Ok(()) } -/// Run the VPN MFA handshake for a location. +/// Run the VPN MFA handshake for a location (TOTP or email). /// -/// * `location` - the target location. -/// * `source` - how to obtain the code. -/// * `instance` - the instance this location belongs to (for proxy URL + pubkey). -/// * `method` - the resolved [`MfaMethod`] (use [`resolve_method`] to obtain it). -/// **Must not be [`MfaMethod::Oidc`]**; OIDC uses [`authorize_oidc`] instead. -/// * `posture_data` - device posture data; must be provided when the location also -/// requires posture checks. -/// -/// Returns the WireGuard preshared key (as a [`SecretString`]) that must -/// be passed to `bring_up`. -pub async fn authorize( +/// The HTTP calls are handled by `defguard_core::mfa`; this function +/// handles CLI-specific code sourcing (TTY / --code / --code-command). +pub(crate) async fn authorize( location: &Location, source: &CodeSource, instance: &Instance, @@ -122,10 +117,9 @@ pub async fn authorize( pool: &DbPool, ) -> Result { // Reject methods not yet supported by the CLI before doing any I/O. - // OIDC is not rejected as "not yet supported" because it IS supported - - // but it has its own dedicated code path (authorize_oidc). If callers - // accidentally invoke authorize() with OIDC, this catch-all is a - // defense-in-depth barrier that emits a clear error. + // OIDC/MobileApprove are not "unsupported" - they have dedicated code + // paths (authorize_oidc / authorize_mobile_approve). This catch-all is a + // defense-in-depth barrier that emits a clear error if they land here. match method { MfaMethod::Biometric => { return Err(CliError::MfaFailed(format!( @@ -156,194 +150,44 @@ pub async fn authorize( )) })?; - // Parse the proxy URL once and reuse it for both MFA requests. let proxy_url = Url::parse(&instance.proxy_url) .map_err(|e| CliError::Other(format!("Invalid proxy URL: {e}")))?; - - // The one-time MFA code and the returned preshared key are sensitive; warn (but do - // not block) if the proxy is not using HTTPS, since they would travel in cleartext. check_proxy_scheme(&proxy_url); - // Step 1: Start the MFA session. - let start_req = ClientMfaStartRequest { + debug!("Starting MFA session for location {}", location.name); + let request = ClientMfaStartRequest { location_id: location.network_id, pubkey: wireguard_keys.pubkey, method: method as i32, posture_data, }; - - let start_url = proxy_url - .join("api/v1/client-mfa/start") - .map_err(|e| CliError::Other(format!("Failed to build MFA start URL: {e}")))?; - - debug!("Starting MFA session at {start_url}"); - let response = post_with_headers(start_url, &start_req) + let info = mfa::mfa_start(proxy_url.clone(), request) .await - .map_err(|e| CliError::Other(format!("Failed to reach proxy: {e}")))?; - - if !response.status().is_success() { - return Err(handle_mfa_error(response).await); - } + .map_err(into_cli)?; - let start_resp: ClientMfaStartResponse = response - .json() - .await - .map_err(|e| CliError::Other(format!("Invalid MFA start response: {e}")))?; - - let token = start_resp.token; - debug!("MFA session started, token obtained"); - - // Step 2: Obtain the code. let ctx = MfaContext { instance: instance.name.clone(), location: location.name.clone(), }; let code = obtain_code(source, &ctx)?; - // Step 3: Finish the MFA session. let finish_req = ClientMfaFinishRequest { - token, + token: info.token, code: Some(code.expose_secret().to_string()), auth_pub_key: None, }; - - let finish_url = proxy_url - .join("api/v1/client-mfa/finish") - .map_err(|e| CliError::Other(format!("Failed to build MFA finish URL: {e}")))?; - - debug!("Finishing MFA session at {finish_url}"); - let response = post_with_headers(finish_url, &finish_req) - .await - .map_err(|e| CliError::Other(format!("Failed to reach proxy: {e}")))?; - - if !response.status().is_success() { - return Err(handle_mfa_error(response).await); - } - - let finish_resp: ClientMfaFinishResponse = response - .json() + let psk = mfa::mfa_finish_code(proxy_url, finish_req) .await - .map_err(|e| CliError::Other(format!("Invalid MFA finish response: {e}")))?; + .map_err(into_cli)?; info!("MFA session completed, preshared key obtained"); - Ok(SecretString::from(finish_resp.preshared_key)) -} - -#[derive(Deserialize)] -struct ErrorBody { - error: Option, -} - -/// Map a non-2xx MFA response to a `CliError`. -async fn handle_mfa_error(response: reqwest::Response) -> CliError { - let status = response.status(); - - let message = response - .json::() - .await - .ok() - .and_then(|b| b.error) - .unwrap_or_else(|| format!("HTTP {status}")); - - match status { - StatusCode::FORBIDDEN | StatusCode::UNAUTHORIZED => { - CliError::MfaFailed(format!("MFA rejected: {message}")) - } - _ if status.is_client_error() => CliError::MfaFailed(format!("MFA error: {message}")), - _ => CliError::Other(format!("Proxy error (HTTP {status}): {message}")), - } + Ok(SecretString::from(psk.preshared_key)) } -/// Parse a `--mfa-method` flag string into the proto [`MfaMethod`] enum. -fn parse_method(raw: &str) -> Result { - match raw.to_lowercase().as_str() { - "totp" => Ok(MfaMethod::Totp), - "email" => Ok(MfaMethod::Email), - "oidc" => Ok(MfaMethod::Oidc), - "biometric" => Ok(MfaMethod::Biometric), - "mobile" | "mobile_approve" => Ok(MfaMethod::MobileApprove), - _ => Err(CliError::Usage(format!( - "Invalid --mfa-method '{raw}'. Valid: totp, email, oidc, biometric, mobile." - ))), - } -} - -/// Determine the MFA method to use for a location. -/// -/// Delegates to the core's [`infer_mfa_method`] so that -/// [`LocationMfaMode`] is respected - an External-mode location always -/// uses OIDC, while an Internal-mode location respects the stored -/// preference (defaulting to TOTP when unset). -fn infer_method(location: &Location) -> MfaMethod { - let method = infer_mfa_method(location.location_mfa_mode, location.mfa_method); - match method { - Some(LocationMfaMethod::Totp) => MfaMethod::Totp, - Some(LocationMfaMethod::Email) => MfaMethod::Email, - Some(LocationMfaMethod::Oidc) => MfaMethod::Oidc, - Some(LocationMfaMethod::Biometric) => MfaMethod::Biometric, - Some(LocationMfaMethod::MobileApprove) => MfaMethod::MobileApprove, - None => { - // `infer_mfa_method` only returns None for Disabled mode, but - // this function is only called when `mfa_enabled()` is true. - // Default to TOTP as a safe fallback. - MfaMethod::Totp - } - } -} - -/// Warn if the proxy is not using HTTPS. -/// -/// The one-time MFA code and the returned preshared key are sensitive and would -/// travel in cleartext over plain HTTP. -fn check_proxy_scheme(proxy_base: &Url) { - if proxy_base.scheme() != "https" { - warn!( - "Proxy URL '{}' is not HTTPS; secrets will be sent in cleartext.", - proxy_base.as_str() - ); - } -} - -/// Open a URL in the system browser. -/// -/// Production: calls [`webbrowser::open`]; prints a hint to stderr on failure. -/// When `json_mode` is true, the fallback message includes the URL itself since -/// it wasn't already printed above. -/// Tests: no-op (never spawn a browser). -#[cfg(not(test))] -fn open_url(url: &str, json_mode: bool) { - if webbrowser::open(url).is_err() { - if json_mode { - eprintln!("Could not open browser. Open this URL manually: {url}"); - } else { - eprintln!("Could not open browser. Open the URL above manually."); - } - } -} - -#[cfg(test)] -fn open_url(_url: &str, _json_mode: bool) { - // no-op: tests must not spawn a browser -} - -/// Fixed interval between OIDC MFA finish polls (shortened for tests). -#[cfg(not(test))] -const OIDC_POLL_INTERVAL: Duration = Duration::from_secs(5); -#[cfg(test)] -const OIDC_POLL_INTERVAL: Duration = Duration::from_millis(5); - -/// Total time the CLI will wait for the user to complete OIDC authentication -/// before giving up (shortened for tests). -#[cfg(not(test))] -const OIDC_POLL_TIMEOUT: Duration = Duration::from_mins(5); -#[cfg(test)] -const OIDC_POLL_TIMEOUT: Duration = Duration::from_millis(200); - /// Run the OIDC MFA flow for an external-IdP location. /// -/// Opens the system browser to `{proxy_url}openid/mfa?token=...` and polls -/// the proxy until the user completes authentication with the external -/// identity provider. Returns the WireGuard preshared key. +/// Opens the system browser and delegates the HTTP poll to +/// `defguard_core::mfa::poll_openid_mfa`. /// /// When `json_mode` is true, progress messages on stderr are suppressed so /// that `--json` output consumers only see the final result/error. @@ -364,44 +208,27 @@ pub(crate) async fn authorize_oidc( )) })?; - let proxy_base = Url::parse(&instance.proxy_url) + let proxy_url = Url::parse(&instance.proxy_url) .map_err(|e| CliError::Other(format!("Invalid proxy URL: {e}")))?; - check_proxy_scheme(&proxy_base); + check_proxy_scheme(&proxy_url); - // Step 1: Start the OIDC MFA session. - let start_req = ClientMfaStartRequest { + debug!("Starting OIDC MFA session for location {}", location.name); + let request = ClientMfaStartRequest { location_id: location.network_id, pubkey: wireguard_keys.pubkey, method: MfaMethod::Oidc as i32, posture_data, }; - - let start_url = proxy_base - .join("api/v1/client-mfa/start") - .map_err(|e| CliError::Other(format!("Failed to build MFA start URL: {e}")))?; - - debug!("Starting OIDC MFA session at {start_url}"); - let response = post_with_headers(start_url, &start_req) + let info = mfa::mfa_start(proxy_url.clone(), request) .await - .map_err(|e| CliError::Other(format!("Failed to reach proxy: {e}")))?; - - if !response.status().is_success() { - return Err(handle_mfa_error(response).await); - } + .map_err(into_cli)?; - let start_resp: ClientMfaStartResponse = response - .json() - .await - .map_err(|e| CliError::Other(format!("Invalid MFA start response: {e}")))?; - - // Step 2: Open the browser for the user to authenticate. - // Never log the token-bearing URL via tracing. - let mut browser_url = proxy_base + let mut browser_url = proxy_url .join("openid/mfa") .map_err(|e| CliError::Other(format!("Failed to build OIDC MFA URL: {e}")))?; browser_url .query_pairs_mut() - .append_pair("token", &start_resp.token); + .append_pair("token", &info.token); if !json_mode { eprintln!("Open this URL to authenticate:"); @@ -410,99 +237,25 @@ pub(crate) async fn authorize_oidc( } open_url(browser_url.as_ref(), json_mode); - // Step 3: Poll until the user completes authentication or the deadline expires. - poll_finish(&proxy_base, &start_resp.token, json_mode).await -} + let cancel = tokio_util::sync::CancellationToken::new(); + let cancel_clone = cancel.clone(); + let ctrlc_handle = tokio::spawn(async move { + tokio::signal::ctrl_c().await.ok(); + cancel_clone.cancel(); + }); -/// Poll [`client-mfa/finish`] until the OIDC session is completed or the -/// deadline expires. -/// -/// Returns the preshared key on success. -async fn poll_finish( - proxy_base: &Url, - token: &str, - json_mode: bool, -) -> Result { - let finish_url = proxy_base - .join("api/v1/client-mfa/finish") - .map_err(|e| CliError::Other(format!("Failed to build MFA finish URL: {e}")))?; + let result = mfa::poll_openid_mfa(proxy_url, info.token, cancel).await; + ctrlc_handle.abort(); - let finish_req = ClientMfaFinishRequest { - token: token.to_string(), - code: None, - auth_pub_key: None, - }; - - let deadline = Instant::now() + OIDC_POLL_TIMEOUT; - - loop { - // Check if we've exceeded the overall deadline. - let remaining = deadline - .checked_duration_since(Instant::now()) - .unwrap_or_default(); - if remaining.is_zero() { - if !json_mode { - eprintln!("MFA login timed out."); - } - return Err(CliError::MfaFailed("MFA login timed out".into())); - } - - // Poll the proxy (first iteration is immediate, subsequent ones wait - // the poll interval at the end of each loop body). - let (status, body) = select! { - _ = ctrl_c() => { - if !json_mode { - eprintln!("MFA login cancelled."); - } - return Err(CliError::Cancelled("MFA login cancelled.".into())); - } - result = post_with_headers(finish_url.clone(), &finish_req) => { - let response = result - .map_err(|e| CliError::Other(format!("Failed to reach proxy: {e}")))?; - let status = response.status(); - if status == StatusCode::OK { - let finish_resp: ClientMfaFinishResponse = response - .json() - .await - .map_err(|e| CliError::Other(format!("Invalid MFA finish response: {e}")))?; - info!("OIDC MFA session completed, preshared key obtained"); - return Ok(SecretString::from(finish_resp.preshared_key)); - } - (status, response) - } - }; - - // Non-OK, non-428: report the error. - if status != StatusCode::PRECONDITION_REQUIRED { - return Err(handle_mfa_error(body).await); - } - - // 428: OIDC not complete yet. Wait the poll interval, yielding to - // Ctrl-C, then loop around for another check. - select! { - _ = ctrl_c() => { - if !json_mode { - eprintln!("MFA login cancelled."); - } - return Err(CliError::Cancelled("MFA login cancelled.".into())); - } - () = sleep(OIDC_POLL_INTERVAL) => {} - } - } + let psk = result.map_err(into_cli)?; + info!("OIDC MFA session completed, preshared key obtained"); + Ok(SecretString::from(psk.preshared_key)) } -/// How long the CLI waits for the user to approve MFA on their mobile device. -#[cfg(not(test))] -const MOBILE_APPROVE_TIMEOUT: Duration = Duration::from_mins(2); -#[cfg(test)] -const MOBILE_APPROVE_TIMEOUT: Duration = Duration::from_secs(5); - /// Run the mobile-approve MFA flow. /// -/// Displays a QR code (terminal and/or `--qr-file` PNG), opens a WebSocket -/// to the proxy, and waits for the mobile app to approve the authentication. -/// The CLI performs no cryptography; the mobile device signs the challenge -/// and the proxy pushes the resulting preshared key back over the WebSocket. +/// Displays a QR code (terminal and/or `--qr-file` PNG) and delegates the +/// WebSocket connection to `defguard_core::mfa::connect_mobile_approve`. /// /// When `json_mode` is true, progress messages on stderr are suppressed so /// that `--json` output consumers only see the final result/error. @@ -524,204 +277,121 @@ pub(crate) async fn authorize_mobile_approve( )) })?; - let proxy_base = Url::parse(&instance.proxy_url) + let proxy_url = Url::parse(&instance.proxy_url) .map_err(|e| CliError::Other(format!("Invalid proxy URL: {e}")))?; - check_proxy_scheme(&proxy_base); + check_proxy_scheme(&proxy_url); - // Step 1: Start the MFA session. - let start_req = ClientMfaStartRequest { + debug!( + "Starting mobile-approve MFA session for location {}", + location.name + ); + let request = ClientMfaStartRequest { location_id: location.network_id, pubkey: wireguard_keys.pubkey, method: MfaMethod::MobileApprove as i32, posture_data, }; - - let start_url = proxy_base - .join("api/v1/client-mfa/start") - .map_err(|e| CliError::Other(format!("Failed to build MFA start URL: {e}")))?; - - debug!("Starting mobile-approve MFA session at {start_url}"); - let response = post_with_headers(start_url, &start_req) - .await - .map_err(|e| CliError::Other(format!("Failed to reach proxy: {e}")))?; - - if !response.status().is_success() { - return Err(handle_mobile_approve_start_error(response).await); - } - - let start_resp: ClientMfaStartResponse = response - .json() + let info = mfa::mfa_start(proxy_url.clone(), request) .await - .map_err(|e| CliError::Other(format!("Invalid MFA start response: {e}")))?; + .map_err(into_cli)?; - // The challenge is always present for MobileApprove (core always generates - // a BiometricChallenge for this method). - let challenge = start_resp.challenge.ok_or_else(|| { + let challenge = info.challenge.ok_or_else(|| { CliError::Other("Proxy did not return a challenge for mobile-approve MFA".into()) })?; - // Step 2: Build and render the QR code. - let payload = mfa_qr::build_qr_payload(&start_resp.token, &challenge, &instance.uuid); + let payload = mfa_qr::build_qr_payload(&info.token, &challenge, &instance.uuid); mfa_qr::render_qr(&payload, qr_file, json_mode)?; if !json_mode { eprintln!("Waiting for mobile approval... (Ctrl-C to cancel)"); } - // Step 3: Open a WebSocket and wait for the preshared key. - let ws_url = derive_ws_url(&proxy_base, &start_resp.token)?; - let (ws_stream, _response) = connect_async(&ws_url) - .await - .map_err(|e| CliError::Other(format!("Failed to connect to proxy: {e}")))?; + let ws_url = mfa::derive_ws_url(&proxy_url, &info.token).map_err(into_cli)?; + + let cancel = tokio_util::sync::CancellationToken::new(); + let cancel_clone = cancel.clone(); + let ctrlc_handle = tokio::spawn(async move { + tokio::signal::ctrl_c().await.ok(); + cancel_clone.cancel(); + }); - let psk = wait_for_mfa_success(ws_stream, MOBILE_APPROVE_TIMEOUT, json_mode).await?; + let result = mfa::connect_mobile_approve(&ws_url, cancel).await; + ctrlc_handle.abort(); + let psk = result.map_err(into_cli)?; info!("Mobile-approve MFA completed, preshared key obtained"); - Ok(SecretString::from(psk)) + Ok(SecretString::from(psk.preshared_key)) } -/// Handle a non-2xx response from /start during mobile-approve MFA. -/// -/// Rewraps the cryptic server error "selected MFA method is not available" -/// into actionable guidance telling the user to register a mobile authenticator. -async fn handle_mobile_approve_start_error(response: reqwest::Response) -> CliError { - let status = response.status(); - let error_body: Option = response.json().await.ok(); - let message = error_body - .and_then(|b| b.error) - .unwrap_or_else(|| format!("HTTP {status}")); - - if message.contains("selected MFA method is not available") { - return CliError::MfaFailed( - "No mobile authenticator is registered for your account. \ - Register one in the Defguard mobile app, then retry." - .into(), - ); - } - - if status.is_client_error() { - CliError::MfaFailed(format!("MFA error: {message}")) - } else { - CliError::Other(format!("Proxy error (HTTP {status}): {message}")) +/// Parse a `--mfa-method` flag string into the proto [`MfaMethod`] enum. +fn parse_method(raw: &str) -> Result { + match raw.to_lowercase().as_str() { + "totp" => Ok(MfaMethod::Totp), + "email" => Ok(MfaMethod::Email), + "oidc" => Ok(MfaMethod::Oidc), + "biometric" => Ok(MfaMethod::Biometric), + "mobile" | "mobile_approve" => Ok(MfaMethod::MobileApprove), + _ => Err(CliError::Usage(format!( + "Invalid --mfa-method '{raw}'. Valid: totp, email, oidc, biometric, mobile." + ))), } } -/// Derive the WebSocket URL from the proxy's base URL and the MFA token. +/// Determine the MFA method to use for a location. /// -/// Uses [`Url::join`] so that any path prefix is preserved. -fn derive_ws_url(proxy_base: &Url, token: &str) -> Result { - let mut ws_url = proxy_base - .join("api/v1/client-mfa/remote") - .map_err(|e| CliError::Other(format!("Failed to build WebSocket URL: {e}")))?; - - let ws_scheme = match proxy_base.scheme() { - "https" => "wss", - "http" => "ws", - other => { - return Err(CliError::Other(format!( - "Invalid proxy URL scheme '{other}'; expected http or https" - ))); +/// Delegates to the core's [`infer_mfa_method`] so that [`LocationMfaMode`] +/// is respected - an External-mode location always uses OIDC, while an +/// Internal-mode location respects the stored preference (defaulting to TOTP). +fn infer_method(location: &Location) -> MfaMethod { + let method = infer_mfa_method(location.location_mfa_mode, location.mfa_method); + match method { + Some(LocationMfaMethod::Totp) => MfaMethod::Totp, + Some(LocationMfaMethod::Email) => MfaMethod::Email, + Some(LocationMfaMethod::Oidc) => MfaMethod::Oidc, + Some(LocationMfaMethod::Biometric) => MfaMethod::Biometric, + Some(LocationMfaMethod::MobileApprove) => MfaMethod::MobileApprove, + None => { + // infer_mfa_method only returns None for Disabled mode, but this is + // only called when MFA is enabled. Default to TOTP as a safe fallback. + MfaMethod::Totp } - }; - - ws_url - .set_scheme(ws_scheme) - .map_err(|()| CliError::Other("Failed to set WebSocket URL scheme".into()))?; - ws_url.query_pairs_mut().append_pair("token", token); - - Ok(ws_url.to_string()) + } } -/// Wait on the WebSocket for a single `{"type":"mfa_success","preshared_key":"..."}` -/// text frame, or fail if the deadline expires or the user cancels. +/// Warn if the proxy is not using HTTPS. /// -/// Uses an absolute deadline (not a per-frame-gap timeout) so that stray -/// ping/pong traffic does not silently extend the wait. -async fn wait_for_mfa_success( - ws_stream: WebSocketStream>, - timeout: Duration, - json_mode: bool, -) -> Result { - let (_write, mut read) = ws_stream.split(); - - let deadline = Instant::now() + timeout; - - loop { - let remaining = deadline - .checked_duration_since(Instant::now()) - .unwrap_or_default(); - if remaining.is_zero() { - if !json_mode { - eprintln!("Mobile approval timed out."); - } - return Err(CliError::MfaFailed( - "mobile approval timed out; re-run to get a fresh QR".into(), - )); - } +/// The one-time MFA code and the returned preshared key are sensitive and +/// would travel in cleartext over plain HTTP. +fn check_proxy_scheme(proxy_base: &Url) { + if proxy_base.scheme() != "https" { + warn!( + "Proxy URL '{}' is not HTTPS; secrets will be sent in cleartext.", + proxy_base.as_str() + ); + } +} - let msg = select! { - () = sleep(remaining) => { - if !json_mode { - eprintln!("Mobile approval timed out."); - } - return Err(CliError::MfaFailed( - "mobile approval timed out; re-run to get a fresh QR".into(), - )); - } - _ = ctrl_c() => { - if !json_mode { - eprintln!("MFA cancelled."); - } - return Err(CliError::Cancelled("MFA cancelled.".into())); - } - msg = read.next() => { - match msg { - Some(Ok(msg)) => msg, - Some(Err(_)) => { - // Server closed or errored without sending mfa_success. - if !json_mode { - eprintln!("Mobile approval failed: connection closed by proxy."); - } - return Err(CliError::MfaFailed( - "mobile approval failed: connection closed by proxy".into(), - )); - } - None => { - // Server closed the connection without sending mfa_success. - if !json_mode { - eprintln!("Mobile approval failed: connection closed by proxy."); - } - return Err(CliError::MfaFailed( - "mobile approval failed: connection closed by proxy".into(), - )); - } - } - } - }; - - match msg { - Message::Text(text) => { - if let Ok(parsed) = serde_json::from_str::(&text) { - if parsed.get("type").and_then(|v| v.as_str()) == Some("mfa_success") { - if let Some(key) = parsed["preshared_key"].as_str() { - return Ok(key.to_string()); - } - } - } - // Ignore unrecognised text frames (non-JSON, wrong type, or missing preshared_key). - } - Message::Close(_) => { - if !json_mode { - eprintln!("Mobile approval failed: connection closed by proxy."); - } - return Err(CliError::MfaFailed( - "mobile approval failed: connection closed by proxy".into(), - )); - } - _ => {} // Ignore ping, pong, binary. +/// Open a URL in the system browser. +/// +/// Production: calls [`webbrowser::open`]; prints a hint to stderr on failure. +/// When `json_mode` is true, the fallback message includes the URL itself since +/// it wasn't already printed above. +/// Tests: no-op (never spawn a browser). +#[cfg(not(test))] +fn open_url(url: &str, json_mode: bool) { + if webbrowser::open(url).is_err() { + if json_mode { + eprintln!("Could not open browser. Open this URL manually: {url}"); + } else { + eprintln!("Could not open browser. Open the URL above manually."); } } } +#[cfg(test)] +fn open_url(_url: &str, _json_mode: bool) { + // no-op: tests must not spawn a browser +} + #[cfg(test)] mod tests { use defguard_core::database::models::location::ServiceLocationMode; @@ -808,7 +478,6 @@ mod tests { #[test] fn test_validate_flags_qr_file_only_for_mobile_approve() { - // qr-file on TOTP let err = validate_mfa_flags(MfaMethod::Totp, "office", None, None, Some("qr.png")).unwrap_err(); assert!(matches!(err, CliError::InvalidInput(_))); @@ -829,7 +498,6 @@ mod tests { #[test] fn test_validate_flags_pass_through_totp() { - // TOTP with --code should pass validation. validate_mfa_flags(MfaMethod::Totp, "office", Some("123456"), None, None).unwrap(); } diff --git a/src-tauri/client-cli/src/mfa_qr.rs b/src-tauri/client-cli/src/mfa_qr.rs index 569218525..31e3cfa83 100644 --- a/src-tauri/client-cli/src/mfa_qr.rs +++ b/src-tauri/client-cli/src/mfa_qr.rs @@ -11,6 +11,7 @@ use image::Luma; #[cfg(not(test))] use qrcode::render::unicode::Dense1x2; use qrcode::QrCode; +use serde_json::json; use crate::state::CliError; @@ -23,7 +24,7 @@ const QR_PNG_MIN_SIZE: u32 = 300; /// QR payload format: /// Base64(JSON{token, challenge, instance_id}) pub(crate) fn build_qr_payload(token: &str, challenge: &str, instance_id: &str) -> String { - let json = serde_json::json!({ + let json = json!({ "token": token, "challenge": challenge, "instance_id": instance_id, diff --git a/src-tauri/client-cli/src/tests_proxy.rs b/src-tauri/client-cli/src/tests_proxy.rs deleted file mode 100644 index 071d5ada5..000000000 --- a/src-tauri/client-cli/src/tests_proxy.rs +++ /dev/null @@ -1,563 +0,0 @@ -//! Integration tests: mock MFA proxy (HTTP). -//! -//! Each test spawns a tiny tokio-based HTTP server on a random port so -//! `mfa::authorize` can make real HTTP calls against it. The database is -//! seeded via `#[sqlx::test]`. - -use std::{ - io::{ErrorKind, Read, Write}, - net::{SocketAddr, TcpListener, TcpStream}, - sync::{ - atomic::{AtomicBool, AtomicU32, Ordering}, - Arc, - }, - thread::{sleep, spawn, JoinHandle}, - time::Duration, -}; - -use base64::{prelude::BASE64_STANDARD, Engine as _}; -use defguard_client_proto::defguard::client_types::MfaMethod; -use defguard_core::database::{ - models::{ - instance::{ClientTrafficPolicy, Instance}, - location::{Location, LocationMfaMode, ServiceLocationMode}, - Id, NoId, - }, - DbPool, -}; -use secrecy::ExposeSecret; -use serde_json::json; -use sha1::{Digest, Sha1}; - -use crate::{mfa, mfa_code::CodeSource, state::CliError}; - -const READ_TIMEOUT: Duration = Duration::from_secs(5); -const CONNECT_TIMEOUT: Duration = Duration::from_millis(50); -const WAIT_TIMEOUT: Duration = Duration::from_millis(10); - -/// Response template for the mock proxy. -#[derive(Clone)] -struct MockResponse { - status: u16, - body: String, -} - -/// A tiny HTTP server that responds to MFA start/finish/remote requests. -struct MockProxy { - addr: SocketAddr, - shutdown: Arc, - handle: Option>, -} - -impl MockProxy { - /// Mobile-approve MFA: /start returns a token+challenge, /remote upgrades to - /// WebSocket and sends the given preshared key (if `Some`). When `None`, the - /// server closes the connection right after the handshake (used for timeout tests). - fn with_mobile_approve(start_response: MockResponse, preshared_key: Option<&str>) -> Self { - let psk = preshared_key.map(|s| s.to_string()); - let listener = TcpListener::bind("127.0.0.1:0").unwrap(); - listener.set_nonblocking(true).unwrap(); - let addr = listener.local_addr().unwrap(); - let shutdown = Arc::new(AtomicBool::new(false)); - let shutdown_thread = shutdown.clone(); - let handle = spawn(move || { - while !shutdown_thread.load(Ordering::Relaxed) { - let mut stream = match listener.accept() { - Ok((stream, _)) => stream, - Err(ref e) if e.kind() == ErrorKind::WouldBlock => { - sleep(WAIT_TIMEOUT); - continue; - } - Err(_) => break, - }; - stream.set_nonblocking(false).ok(); - stream.set_read_timeout(Some(READ_TIMEOUT)).ok(); - - // Read the full request head. - let mut data = Vec::new(); - let mut buf = [0u8; 4096]; - loop { - match stream.read(&mut buf) { - Ok(0) => break, - Ok(n) => { - data.extend_from_slice(&buf[..n]); - if data.windows(4).any(|w| w == b"\r\n\r\n") { - break; - } - } - Err(_) => break, - } - } - - let request = String::from_utf8_lossy(&data); - - if request.contains("/api/v1/client-mfa/remote") { - // WebSocket upgrade. - if let Some(key) = extract_header(&request, "Sec-WebSocket-Key") { - let accept = compute_ws_accept(&key); - let resp = format!( - "HTTP/1.1 101 Switching Protocols\r\n\ - Upgrade: websocket\r\n\ - Connection: Upgrade\r\n\ - Sec-WebSocket-Accept: {accept}\r\n\ - \r\n" - ); - let _ = stream.write_all(resp.as_bytes()); - - // Send the mfa_success text frame if we have a PSK. - if let Some(ref key) = psk { - let payload = json!({ - "type": "mfa_success", - "preshared_key": key, - }); - let payload_str = serde_json::to_string(&payload).unwrap(); - let frame = build_ws_text_frame(&payload_str); - let _ = stream.write_all(&frame); - } - // When psk is None, just close (no frame) to simulate timeout. - } - } else if request.contains("/api/v1/client-mfa/start") { - let body = format!( - "HTTP/1.1 {} OK\r\nContent-Type: application/json\r\n\ - Content-Length: {}\r\nConnection: close\r\n\r\n{}", - start_response.status, - start_response.body.len(), - start_response.body, - ); - let _ = stream.write_all(body.as_bytes()); - } - // Unknown paths: no response, just close. - } - }); - MockProxy { - addr, - shutdown, - handle: Some(handle), - } - } - - /// Single-shot finish: each finish request gets the same response. - fn new(start_response: MockResponse, finish_response: MockResponse) -> Self { - Self::with_counter(start_response, finish_response, None) - } - - /// OIDC polling: the first `fail_count` calls to `finish` return HTTP 428; - /// subsequent calls return `finish_response` (HTTP 200). - fn with_poll( - start_response: MockResponse, - finish_response: MockResponse, - fail_count: u32, - ) -> Self { - Self::with_counter(start_response, finish_response, Some(fail_count)) - } - - fn with_counter( - start_response: MockResponse, - finish_response: MockResponse, - fail_count: Option, - ) -> Self { - let listener = TcpListener::bind("127.0.0.1:0").unwrap(); - // Non-blocking accept so the loop can observe the shutdown flag and exit cleanly. - listener.set_nonblocking(true).unwrap(); - let addr = listener.local_addr().unwrap(); - let shutdown = Arc::new(AtomicBool::new(false)); - let shutdown_thread = shutdown.clone(); - let finish_hits = Arc::new(AtomicU32::new(0)); - let finish_hits_thread = finish_hits.clone(); - let handle = spawn(move || { - while !shutdown_thread.load(Ordering::Relaxed) { - let mut stream = match listener.accept() { - Ok((stream, _)) => stream, - Err(ref e) if e.kind() == ErrorKind::WouldBlock => { - sleep(WAIT_TIMEOUT); - continue; - } - Err(_) => break, - }; - stream.set_nonblocking(false).ok(); - stream.set_read_timeout(Some(READ_TIMEOUT)).ok(); - - // Read the full request head rather than assuming one read captures it. - let mut data = Vec::new(); - let mut buf = [0u8; 4096]; - loop { - match stream.read(&mut buf) { - Ok(0) => break, - Ok(n) => { - data.extend_from_slice(&buf[..n]); - if data.windows(4).any(|w| w == b"\r\n\r\n") { - break; - } - } - Err(_) => break, - } - } - - let request = String::from_utf8_lossy(&data); - let response = if request.contains("/api/v1/client-mfa/start") { - &start_response - } else if let Some(max) = fail_count { - let current = finish_hits_thread.fetch_add(1, Ordering::Relaxed); - if current < max { - // 428: not yet authenticated - &MockResponse { - status: 428, - body: r#"{"error":"OIDC authentication not completed yet"}"#.into(), - } - } else { - &finish_response - } - } else { - &finish_response - }; - let body = format!( - "HTTP/1.1 {} OK\r\nContent-Type: application/json\r\nContent-Length: {}\r\nConnection: close\r\n\r\n{}", - response.status, - response.body.len(), - response.body, - ); - let _ = stream.write_all(body.as_bytes()); - } - }); - MockProxy { - addr, - shutdown, - handle: Some(handle), - } - } - - fn url(&self) -> String { - format!("http://{}/", self.addr) - } - - /// Wait until the proxy is accepting connections. - fn wait_ready(&self) { - for _ in 0..50 { - if TcpStream::connect_timeout(&self.addr, CONNECT_TIMEOUT).is_ok() { - return; - } - sleep(WAIT_TIMEOUT); - } - panic!("MockProxy not ready after 500 ms"); - } -} - -impl Drop for MockProxy { - fn drop(&mut self) { - self.shutdown.store(true, Ordering::Relaxed); - if let Some(handle) = self.handle.take() { - let _ = handle.join(); - } - } -} - -/// Extract a header value from an HTTP request string. -fn extract_header(request: &str, name: &str) -> Option { - let prefix = format!("{name}: "); - request - .lines() - .find(|l| l.to_lowercase().starts_with(&prefix.to_lowercase())) - .and_then(|l| l.split_once(": ").map(|(_, v)| v.trim().to_string())) -} - -/// Compute the Sec-WebSocket-Accept value per RFC 6455 §4.2.2. -fn compute_ws_accept(key: &str) -> String { - let mut hasher = Sha1::new(); - hasher.update(key.as_bytes()); - hasher.update(b"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); - BASE64_STANDARD.encode(hasher.finalize()) -} - -/// Build a WebSocket text frame (unmasked, for server→client). -fn build_ws_text_frame(payload: &str) -> Vec { - let len = payload.len(); - let mut frame = vec![0x81]; // FIN + text opcode - if len < 126 { - frame.push(len as u8); - } else { - // Our test payloads are small; 16-bit length is sufficient. - frame.push(126); - frame.extend_from_slice(&(len as u16).to_be_bytes()); - } - frame.extend_from_slice(payload.as_bytes()); - frame -} - -fn mfa_enabled_location(name: &str, instance_id: Id) -> Location { - Location { - id: NoId, - instance_id, - network_id: 1, - name: name.into(), - address: "10.0.0.2/24".into(), - pubkey: "pk-loc".into(), - endpoint: "1.2.3.4:51820".into(), - allowed_ips: "0.0.0.0/0".into(), - dns: None, - route_all_traffic: false, - keepalive_interval: 25, - location_mfa_mode: LocationMfaMode::Internal, - service_location_mode: ServiceLocationMode::Disabled, - mfa_method: None, - posture_check_required: false, - } -} - -/// Build a location that requires **external** (OIDC) MFA. -fn oidc_location(name: &str, instance_id: Id) -> Location { - Location { - location_mfa_mode: LocationMfaMode::External, - ..mfa_enabled_location(name, instance_id) - } -} - -async fn seed_db(pool: &DbPool) -> (Instance, Location) { - let inst = Instance { - id: NoId, - name: "acme".into(), - uuid: "uuid-1".into(), - url: "https://core.example".into(), - proxy_url: String::new(), // filled later - username: "alice".into(), - token: None, - client_traffic_policy: ClientTrafficPolicy::None, - enterprise_enabled: false, - openid_display_name: None, - } - .save(pool) - .await - .unwrap(); - - // Insert wireguard keys (required by mfa::authorize). - sqlx::query("INSERT INTO wireguard_keys (instance_id, pubkey, prvkey) VALUES ($1, $2, $3)") - .bind(inst.id) - .bind("wg-pubkey") - .bind("wg-prvkey") - .execute(pool) - .await - .unwrap(); - - let loc = mfa_enabled_location("office", inst.id) - .save(pool) - .await - .unwrap(); - - (inst, loc) -} - -#[sqlx::test(migrations = "../migrations")] -async fn test_mfa_success_returns_psk(pool: DbPool) { - let (mut instance, location) = seed_db(&pool).await; - let mock = MockProxy::new( - MockResponse { - status: 200, - body: r#"{"token":"tok-123"}"#.into(), - }, - MockResponse { - status: 200, - body: r#"{"preshared_key":"secret-psk"}"#.into(), - }, - ); - mock.wait_ready(); - instance.proxy_url = mock.url(); - - let source = CodeSource::Literal("123456".into()); - let psk = mfa::authorize(&location, &source, &instance, MfaMethod::Totp, None, &pool) - .await - .unwrap(); - assert_eq!(psk.expose_secret(), "secret-psk"); -} - -#[sqlx::test(migrations = "../migrations")] -async fn test_mfa_rejection_returns_mfa_failed(pool: DbPool) { - let (mut instance, location) = seed_db(&pool).await; - let mock = MockProxy::new( - MockResponse { - status: 200, - body: r#"{"token":"tok-456"}"#.into(), - }, - MockResponse { - status: 403, - body: r#"{"error":"invalid TOTP code"}"#.into(), - }, - ); - mock.wait_ready(); - instance.proxy_url = mock.url(); - - let source = CodeSource::Literal("000000".into()); - let err = mfa::authorize(&location, &source, &instance, MfaMethod::Totp, None, &pool) - .await - .unwrap_err(); - - assert!(matches!(err, CliError::MfaFailed(_))); - assert!(err.to_string().contains("invalid TOTP code")); -} - -#[sqlx::test(migrations = "../migrations")] -async fn test_mfa_proxy_unreachable(pool: DbPool) { - let (mut instance, location) = seed_db(&pool).await; - // Point at a port where nothing is listening. - instance.proxy_url = "http://127.0.0.1:19999/".into(); - - let source = CodeSource::Literal("123456".into()); - let err = mfa::authorize(&location, &source, &instance, MfaMethod::Totp, None, &pool) - .await - .unwrap_err(); - - assert!( - matches!(err, CliError::Other(_)), - "expected CliError::Other, got {err:?}" - ); - assert!(err.to_string().contains("Failed to reach proxy")); -} - -#[sqlx::test(migrations = "../migrations")] -async fn test_oidc_mfa_success_returns_psk(pool: DbPool) { - let (mut instance, _location) = seed_db(&pool).await; - let oidc_location = oidc_location("office-oidc", instance.id) - .save(&pool) - .await - .unwrap(); - - let mock = MockProxy::with_poll( - MockResponse { - status: 200, - body: r#"{"token":"tok-oidc"}"#.into(), - }, - MockResponse { - status: 200, - body: r#"{"preshared_key":"secret-oidc-psk"}"#.into(), - }, - 2, // first two finish calls return 428, third returns 200 - ); - mock.wait_ready(); - instance.proxy_url = mock.url(); - - let psk = mfa::authorize_oidc(&oidc_location, &instance, None, &pool, false) - .await - .unwrap(); - assert_eq!(psk.expose_secret(), "secret-oidc-psk"); -} - -#[sqlx::test(migrations = "../migrations")] -async fn test_oidc_mfa_times_out_when_never_completed(pool: DbPool) { - let (mut instance, _location) = seed_db(&pool).await; - let oidc_location = oidc_location("office-oidc", instance.id) - .save(&pool) - .await - .unwrap(); - - // Proxy always returns 428 for finish: never authenticates. - let mock = MockProxy::with_poll( - MockResponse { - status: 200, - body: r#"{"token":"tok-timeout"}"#.into(), - }, - MockResponse { - status: 200, - body: r#"{"preshared_key":"unreachable"}"#.into(), - }, - u32::MAX, // never returns 200 - ); - mock.wait_ready(); - instance.proxy_url = mock.url(); - - let err = mfa::authorize_oidc(&oidc_location, &instance, None, &pool, false) - .await - .unwrap_err(); - - assert!(matches!(err, CliError::MfaFailed(_))); - assert!(err.to_string().contains("timed out")); -} - -#[sqlx::test(migrations = "../migrations")] -async fn test_mobile_approve_success_returns_psk(pool: DbPool) { - let (mut instance, location) = seed_db(&pool).await; - - // /start must return a challenge — mobile-approve requires it. - let mock = MockProxy::with_mobile_approve( - MockResponse { - status: 200, - body: r#"{"token":"tok-mob","challenge":"chal-xyz"}"#.into(), - }, - Some("secret-mobile-psk"), - ); - mock.wait_ready(); - instance.proxy_url = mock.url(); - - let psk = mfa::authorize_mobile_approve( - &location, &instance, None, // no posture data - None, // no qr-file (test render_qr is a no-op) - &pool, false, // not json mode - ) - .await - .unwrap(); - assert_eq!(psk.expose_secret(), "secret-mobile-psk"); -} - -#[sqlx::test(migrations = "../migrations")] -async fn test_mobile_approve_no_device_returns_guidance(pool: DbPool) { - let (mut instance, location) = seed_db(&pool).await; - - let mock = MockProxy::with_mobile_approve( - MockResponse { - status: 400, - body: r#"{"error":"selected MFA method is not available"}"#.into(), - }, - Some("unused"), - ); - mock.wait_ready(); - instance.proxy_url = mock.url(); - - let err = mfa::authorize_mobile_approve(&location, &instance, None, None, &pool, false) - .await - .unwrap_err(); - - assert!(matches!(err, CliError::MfaFailed(_))); - assert!(err.to_string().contains("No mobile authenticator")); -} - -#[sqlx::test(migrations = "../migrations")] -async fn test_mobile_approve_unrelated_error_passes_through(pool: DbPool) { - let (mut instance, location) = seed_db(&pool).await; - - let mock = MockProxy::with_mobile_approve( - MockResponse { - status: 500, - body: r#"{"error":"internal server error"}"#.into(), - }, - Some("unused"), - ); - mock.wait_ready(); - instance.proxy_url = mock.url(); - - let err = mfa::authorize_mobile_approve(&location, &instance, None, None, &pool, false) - .await - .unwrap_err(); - - assert!(matches!(err, CliError::Other(_))); - assert!(err.to_string().contains("internal server error")); -} - -#[sqlx::test(migrations = "../migrations")] -async fn test_mobile_approve_server_close_without_frame_times_out(pool: DbPool) { - let (mut instance, location) = seed_db(&pool).await; - - // psk=None: the mock accepts the WS upgrade but closes without sending a frame. - let mock = MockProxy::with_mobile_approve( - MockResponse { - status: 200, - body: r#"{"token":"tok-close","challenge":"chal-xyz"}"#.into(), - }, - None, - ); - mock.wait_ready(); - instance.proxy_url = mock.url(); - - let err = mfa::authorize_mobile_approve(&location, &instance, None, None, &pool, false) - .await - .unwrap_err(); - - assert!(matches!(err, CliError::MfaFailed(_))); - assert!(err.to_string().contains("connection closed by proxy")); -} diff --git a/src-tauri/client-proto/build.rs b/src-tauri/client-proto/build.rs index 95f41e21f..8d982665f 100644 --- a/src-tauri/client-proto/build.rs +++ b/src-tauri/client-proto/build.rs @@ -12,6 +12,22 @@ fn main() -> Result<(), Box> { ) // Make all messages serde-serializable. .type_attribute(".", "#[derive(serde::Serialize,serde::Deserialize)]") + // Use proto defaults for missing fields in enrollment types that + // may differ across proxy versions. + .type_attribute(".defguard.client_types.AdminInfo", "#[serde(default)]") + .type_attribute( + ".defguard.client_types.InitialUserInfo", + "#[serde(default)]", + ) + .type_attribute( + ".defguard.client_types.EnrollmentSettings", + "#[serde(default)]", + ) + .type_attribute(".defguard.client_types.InstanceInfo", "#[serde(default)]") + .type_attribute( + ".defguard.client_types.EnrollmentStartResponse", + "#[serde(default)]", + ) .compile_protos( &[ "../proto/v1/client/client.proto", diff --git a/src-tauri/core/Cargo.toml b/src-tauri/core/Cargo.toml index ee9d98202..4da9bbab6 100644 --- a/src-tauri/core/Cargo.toml +++ b/src-tauri/core/Cargo.toml @@ -16,6 +16,7 @@ defguard-client-common = { path = "../common" } defguard-client-proto = { path = "../client-proto" } defguard_wireguard_rs.workspace = true dirs-next.workspace = true +futures-util.workspace = true hyper-util = "0.1" log.workspace = true os_info = { version = "3.14", default-features = false } @@ -31,13 +32,18 @@ strum = { version = "0.28", features = ["derive"] } struct-patch = "0.12" thiserror.workspace = true tokio.workspace = true +tokio-tungstenite.workspace = true +tokio-util = "0.7" tonic.workspace = true tower = "0.5" tracing.workspace = true x25519-dalek.workspace = true [dev-dependencies] +futures-util.workspace = true tempfile.workspace = true +tokio-tungstenite.workspace = true +wiremock.workspace = true [target.'cfg(unix)'.dependencies] nix = { version = "0.31", features = ["user", "fs"] } diff --git a/src-tauri/core/src/enrollment.rs b/src-tauri/core/src/enrollment.rs new file mode 100644 index 000000000..cfda7f467 --- /dev/null +++ b/src-tauri/core/src/enrollment.rs @@ -0,0 +1,649 @@ +//! Enrollment flow for adding a new Defguard instance. +//! +//! Handles the client-side enrollment protocol against the Edge proxy: +//! starting enrollment, creating a device, activating the user, registering +//! MFA, and finishing the enrollment. + +use defguard_client_proto::defguard::client_types::{ + DeviceConfigResponse, EnrollmentStartResponse, +}; +use reqwest::{Client, Response, StatusCode, Url}; +use serde::{Deserialize, Serialize}; +use serde_json::json; +use thiserror::Error; + +use crate::{ + proxy::construct_platform_header, + version::{CLIENT_PLATFORM_HEADER, CLIENT_VERSION_HEADER, PKG_VERSION}, +}; + +/// Error type returned by enrollment operations. +/// +/// Serialized as a tagged JSON union so the TypeScript frontend can +/// match on the `type` field to show context-specific messages. +#[derive(Debug, Error, Serialize)] +#[serde(tag = "type", rename_all = "snake_case")] +pub enum EnrollmentError { + #[error("Enrollment token has expired or is invalid")] + TokenExpired, + + #[error("Session cookie not found in enrollment response")] + MissingCookie, + + #[error("{message}")] + NetworkError { message: String }, + + #[error("Proxy error (HTTP {status}): {message}")] + ProxyError { status: u16, message: String }, + + #[error("{message}")] + Other { message: String }, +} + +/// Holds the enrollment session state. +#[derive(Clone, Debug)] +pub struct EnrollmentSession { + pub cookie: String, + pub proxy_url: Url, + pub client: Client, +} + +/// Response from `POST /api/v1/enrollment/register-mfa/code/start`. +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct MfaStartResponse { + pub totp_secret: Option, +} + +/// Response from `POST /api/v1/enrollment/register-mfa/code/finish`. +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct MfaFinishResponse { + pub recovery_codes: Vec, +} + +/// Send a JSON POST request to an enrollment endpoint with the session +/// cookie and standard client headers. +async fn enrollment_post( + session: &EnrollmentSession, + path: &str, + body: serde_json::Value, +) -> Result { + let url = session + .proxy_url + .join(path) + .map_err(|e| EnrollmentError::Other { + message: format!("Failed to build URL '{path}': {e}"), + })?; + let response = session + .client + .post(url) + .json(&body) + .header("Cookie", &session.cookie) + .header(CLIENT_VERSION_HEADER, PKG_VERSION) + .header(CLIENT_PLATFORM_HEADER, construct_platform_header()) + .send() + .await + .map_err(|e| EnrollmentError::NetworkError { + message: format!("Failed to reach proxy: {e}"), + })?; + + check_enrollment_response(response).await +} + +/// Check an enrollment response status and map it to `EnrollmentError`. +async fn check_enrollment_response(response: Response) -> Result { + let status = response.status(); + if status == StatusCode::UNAUTHORIZED || status == StatusCode::FORBIDDEN { + return Err(EnrollmentError::TokenExpired); + } + if !status.is_success() { + let message = read_error_body(response).await; + return Err(EnrollmentError::ProxyError { + status: status.as_u16(), + message, + }); + } + Ok(response) +} + +/// Extract the `defguard_proxy` session cookie from a response's `Set-Cookie` +/// headers. +fn extract_defguard_cookie(response: &Response) -> Result { + for value in response.headers().get_all(reqwest::header::SET_COOKIE) { + let raw = value.to_str().unwrap_or_default(); + if raw.starts_with("defguard_proxy=") { + // Take everything up to the first `;`. + return Ok(raw.split(';').next().unwrap_or(raw).to_string()); + } + } + Err(EnrollmentError::MissingCookie) +} + +/// Read an error body from a non-2xx response. +async fn read_error_body(response: Response) -> String { + let status = response.status(); + response + .json::() + .await + .ok() + .and_then(|v| v.get("error").and_then(|e| e.as_str()).map(String::from)) + .unwrap_or_else(|| format!("HTTP {status}")) +} + +/// Start the enrollment process. +/// +/// POSTs `{ "token": "" }` to `/api/v1/enrollment/start`, extracts +/// the `defguard_proxy` session cookie from the `Set-Cookie` response +/// header, and returns the session together with the full enrollment +/// start response (admin, user, settings, instance, deadline). +pub async fn enrollment_start( + proxy_url: Url, + token: String, +) -> Result<(EnrollmentSession, EnrollmentStartResponse), EnrollmentError> { + let client = Client::new(); + + let url = proxy_url + .join("api/v1/enrollment/start") + .map_err(|e| EnrollmentError::Other { + message: format!("Failed to build enrollment start URL: {e}"), + })?; + + let response = client + .post(url) + .json(&json!({ "token": token })) + .header(CLIENT_VERSION_HEADER, PKG_VERSION) + .header(CLIENT_PLATFORM_HEADER, construct_platform_header()) + .send() + .await + .map_err(|e| EnrollmentError::NetworkError { + message: format!("Failed to reach proxy: {e}"), + })?; + + let status = response.status(); + + if status == StatusCode::UNAUTHORIZED || status == StatusCode::FORBIDDEN { + return Err(EnrollmentError::TokenExpired); + } + + if !status.is_success() { + let message = read_error_body(response).await; + return Err(EnrollmentError::ProxyError { + status: status.as_u16(), + message, + }); + } + + let cookie = extract_defguard_cookie(&response)?; + + let body: EnrollmentStartResponse = + response.json().await.map_err(|e| EnrollmentError::Other { + message: format!("Failed to parse enrollment response: {e}"), + })?; + + let session = EnrollmentSession { + cookie, + proxy_url, + client, + }; + + Ok((session, body)) +} + +/// Create a device during enrollment. +/// +/// POSTs `{ "name": "...", "pubkey": "..." }` to +/// `/api/v1/enrollment/create_device` and returns the full device +/// configuration response as a JSON value. +pub async fn enrollment_create_device( + session: EnrollmentSession, + name: String, + pubkey: String, +) -> Result { + let response = enrollment_post( + &session, + "api/v1/enrollment/create_device", + json!({ "name": name, "pubkey": pubkey }), + ) + .await?; + + response.json().await.map_err(|e| EnrollmentError::Other { + message: format!("Failed to parse create_device response: {e}"), + }) +} + +/// Activate the user account during enrollment. +/// +/// POSTs `{ "password": "...", "phone_number": "..." }` to +/// `/api/v1/enrollment/activate_user`. Either field may be omitted when +/// the server does not require it (externally managed users skip password; +/// most users skip phone). +pub async fn enrollment_activate_user( + session: EnrollmentSession, + password: Option, + phone_number: Option, +) -> Result<(), EnrollmentError> { + enrollment_post( + &session, + "api/v1/enrollment/activate_user", + json!({ + "password": password, + "phone_number": phone_number, + }), + ) + .await?; + + Ok(()) +} + +/// Start MFA registration during enrollment. +/// +/// POSTs `{ "method": "..." }` to +/// `/api/v1/enrollment/register-mfa/code/start`. Returns the TOTP secret +/// (for TOTP method) or an empty response (for email method). +pub async fn enrollment_register_mfa_start( + session: EnrollmentSession, + method: String, +) -> Result { + let response = enrollment_post( + &session, + "api/v1/enrollment/register-mfa/code/start", + json!({ "method": method }), + ) + .await?; + + response.json().await.map_err(|e| EnrollmentError::Other { + message: format!("Failed to parse MFA start response: {e}"), + }) +} + +/// Finish MFA registration during enrollment. +/// +/// POSTs `{ "code": "...", "method": "..." }` to +/// `/api/v1/enrollment/register-mfa/code/finish`. Returns the recovery +/// codes that the user should save. +pub async fn enrollment_register_mfa_finish( + session: EnrollmentSession, + code: String, + method: String, +) -> Result { + let response = enrollment_post( + &session, + "api/v1/enrollment/register-mfa/code/finish", + json!({ "code": code, "method": method }), + ) + .await?; + + response.json().await.map_err(|e| EnrollmentError::Other { + message: format!("Failed to parse MFA finish response: {e}"), + }) +} + +/// Fetch network configuration for an existing device during enrollment. +/// +/// POSTs `{ "pubkey": "..." }` to `/api/v1/enrollment/network_info`. +/// This is the fast path for re-enrolling a device whose WireGuard keys +/// already exist on the server. +pub async fn enrollment_network_info( + session: EnrollmentSession, + pubkey: String, +) -> Result { + let response = enrollment_post( + &session, + "api/v1/enrollment/network_info", + json!({ "pubkey": pubkey }), + ) + .await?; + + response.json().await.map_err(|e| EnrollmentError::Other { + message: format!("Failed to parse network_info response: {e}"), + }) +} + +/// Mark the enrollment session as finished. +/// +/// There is no HTTP call for this step -- the session cookie is already +/// cleared by the `activate_user` call on the server side. This function +/// exists as an explicit anchor point for the Tauri command so the +/// implementation mirrors the UI flow. It simply drops the session. +pub fn enrollment_finish(_session: EnrollmentSession) { + // Session dropped; cookie is no longer needed. +} + +#[cfg(test)] +mod tests { + use reqwest::Url; + use serde_json::json; + use wiremock::{ + matchers::{method, path}, + Mock, MockServer, ResponseTemplate, + }; + + use super::*; + + fn mock_url(server: &MockServer) -> Url { + Url::parse(&server.uri()).expect("MockServer URI should be valid") + } + + fn user_json() -> serde_json::Value { + json!({ + "first_name": "John", + "last_name": "Doe", + "login": "jdoe", + "email": "john@example.com", + "phone_number": null, + "is_active": true, + "device_names": [], + "enrolled": false, + "is_admin": false, + "password_management_disabled": false, + }) + } + + fn full_start_json() -> serde_json::Value { + json!({ + "admin": { + "name": "Admin", + "phone_number": null, + "email": "admin@example.com", + }, + "user": user_json(), + "settings": { + "vpn_setup_optional": false, + "only_client_activation": false, + "admin_device_management": false, + "smtp_configured": true, + "mfa_required": true, + }, + "instance": { + "id": "inst-1", + "name": "Test Instance", + "url": "https://test.defguard.net", + "proxy_url": "https://proxy.defguard.net", + "username": "jdoe", + "enterprise_enabled": false, + "disable_all_traffic": false, + "openid_display_name": null, + }, + "deadline_timestamp": 1734567890, + "final_page_content": "Welcome!", + }) + } + + #[tokio::test] + async fn test_start_success() { + let server = MockServer::start().await; + let response_body = full_start_json(); + + Mock::given(method("POST")) + .and(path("/api/v1/enrollment/start")) + .respond_with( + ResponseTemplate::new(200) + .set_body_json(&response_body) + .insert_header( + "Set-Cookie", + "defguard_proxy=test-session-cookie; Path=/api/v1/enrollment", + ), + ) + .mount(&server) + .await; + + let url = mock_url(&server); + let (session, response) = enrollment_start(url, "valid-token".into()).await.unwrap(); + let user = response.user.expect("user must be present"); + let admin = response.admin.expect("admin must be present"); + let settings = response.settings.expect("settings must be present"); + let instance = response.instance.expect("instance must be present"); + + assert_eq!(session.cookie, "defguard_proxy=test-session-cookie"); + assert_eq!(user.first_name, "John"); + assert_eq!(user.login, "jdoe"); + assert_eq!(admin.name, "Admin"); + assert!(settings.mfa_required); + assert_eq!(instance.id, "inst-1"); + assert_eq!(response.deadline_timestamp, 1734567890); + assert_eq!(response.final_page_content, "Welcome!"); + } + + #[tokio::test] + async fn test_start_token_expired_401() { + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/enrollment/start")) + .respond_with(ResponseTemplate::new(401)) + .mount(&server) + .await; + + let url = mock_url(&server); + let err = enrollment_start(url, "bad-token".into()).await.unwrap_err(); + + assert!(matches!(err, EnrollmentError::TokenExpired)); + } + + #[tokio::test] + async fn test_start_token_expired_403() { + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/enrollment/start")) + .respond_with(ResponseTemplate::new(403)) + .mount(&server) + .await; + + let url = mock_url(&server); + let err = enrollment_start(url, "bad-token".into()).await.unwrap_err(); + + assert!(matches!(err, EnrollmentError::TokenExpired)); + } + + #[tokio::test] + async fn test_start_missing_cookie() { + let server = MockServer::start().await; + let response_body = json!({ "user": user_json() }); + + Mock::given(method("POST")) + .and(path("/api/v1/enrollment/start")) + .respond_with(ResponseTemplate::new(200).set_body_json(&response_body)) + .mount(&server) + .await; + + let url = mock_url(&server); + let err = enrollment_start(url, "token".into()).await.unwrap_err(); + + assert!(matches!(err, EnrollmentError::MissingCookie)); + } + + #[tokio::test] + async fn test_start_proxy_error() { + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/enrollment/start")) + .respond_with( + ResponseTemplate::new(500).set_body_json(json!({ "error": "internal boom" })), + ) + .mount(&server) + .await; + + let url = mock_url(&server); + let err = enrollment_start(url, "token".into()).await.unwrap_err(); + + match err { + EnrollmentError::ProxyError { status, message } => { + assert_eq!(status, 500); + assert!(message.contains("internal boom")); + } + other => panic!("expected ProxyError, got {other:?}"), + } + } + + #[tokio::test] + async fn test_start_network_error() { + // Use an address where nothing is listening. + let url = "http://127.0.0.1:1".parse().unwrap(); + let err = enrollment_start(url, "token".into()).await.unwrap_err(); + + assert!(matches!(err, EnrollmentError::NetworkError { .. })); + } + + fn make_session(server: &MockServer) -> EnrollmentSession { + EnrollmentSession { + cookie: "defguard_proxy=test-session-cookie".into(), + proxy_url: mock_url(server), + client: Client::new(), + } + } + + fn device_config_json(assigned_ip: &str) -> serde_json::Value { + json!({ + "device": { + "id": 1, + "name": "my-device", + "pubkey": "pk", + "user_id": 1, + "created_at": 1734567890, + }, + "configs": [{ + "network_id": 1, + "network_name": "main", + "config": "wg0", + "endpoint": "1.2.3.4:51820", + "assigned_ip": assigned_ip, + "pubkey": "nw-pk", + "allowed_ips": "0.0.0.0/0", + "keepalive_interval": 25, + "mfa_enabled": false, + }], + "instance": { + "id": "inst-1", + "name": "Test Instance", + "url": "https://test.defguard.net", + "proxy_url": "https://proxy.defguard.net", + "username": "jdoe", + "enterprise_enabled": false, + "disable_all_traffic": false, + }, + }) + } + + #[tokio::test] + async fn test_create_device_success() { + let server = MockServer::start().await; + let response_body = device_config_json("10.0.0.1"); + + Mock::given(method("POST")) + .and(path("/api/v1/enrollment/create_device")) + .respond_with(ResponseTemplate::new(200).set_body_json(&response_body)) + .mount(&server) + .await; + + let session = make_session(&server); + let result = enrollment_create_device(session, "my-device".into(), "pk".into()) + .await + .unwrap(); + + assert_eq!(result.configs[0].config, "wg0"); + } + + #[tokio::test] + async fn test_activate_user_success() { + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/enrollment/activate_user")) + .respond_with(ResponseTemplate::new(200)) + .mount(&server) + .await; + + let session = make_session(&server); + enrollment_activate_user(session, Some("p4ssw0rd".into()), None) + .await + .unwrap(); + } + + // enrollment_register_mfa_start + + #[tokio::test] + async fn test_register_mfa_start_success() { + let server = MockServer::start().await; + let response_body = json!({ "totp_secret": "SECRET123" }); + + Mock::given(method("POST")) + .and(path("/api/v1/enrollment/register-mfa/code/start")) + .respond_with(ResponseTemplate::new(200).set_body_json(&response_body)) + .mount(&server) + .await; + + let session = make_session(&server); + let result = enrollment_register_mfa_start(session, "totp".into()) + .await + .unwrap(); + + assert_eq!(result.totp_secret.as_deref(), Some("SECRET123")); + } + + // enrollment_register_mfa_finish + + #[tokio::test] + async fn test_register_mfa_finish_success() { + let server = MockServer::start().await; + let response_body = json!({ "recovery_codes": ["rc1", "rc2", "rc3"] }); + + Mock::given(method("POST")) + .and(path("/api/v1/enrollment/register-mfa/code/finish")) + .respond_with(ResponseTemplate::new(200).set_body_json(&response_body)) + .mount(&server) + .await; + + let session = make_session(&server); + let result = enrollment_register_mfa_finish(session, "123456".into(), "totp".into()) + .await + .unwrap(); + + assert_eq!(result.recovery_codes, vec!["rc1", "rc2", "rc3"]); + } + + // enrollment_network_info + + #[tokio::test] + async fn test_network_info_success() { + let server = MockServer::start().await; + let response_body = device_config_json("10.0.0.2"); + + Mock::given(method("POST")) + .and(path("/api/v1/enrollment/network_info")) + .respond_with(ResponseTemplate::new(200).set_body_json(&response_body)) + .mount(&server) + .await; + + let session = make_session(&server); + let result = enrollment_network_info(session, "pk".into()).await.unwrap(); + + assert_eq!(result.configs[0].assigned_ip, "10.0.0.2"); + } + + #[tokio::test] + async fn test_network_info_not_found() { + // A 404 means the device was deleted server-side. The status must be + // preserved as ProxyError { status: 404 } so the client can detect it + // and re-enroll (see the addInstance recovery path in the frontend). + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/enrollment/network_info")) + .respond_with( + ResponseTemplate::new(404).set_body_json(json!({ "error": "device not found" })), + ) + .mount(&server) + .await; + + let session = make_session(&server); + let err = enrollment_network_info(session, "pk".into()) + .await + .unwrap_err(); + + assert!(matches!( + err, + EnrollmentError::ProxyError { status: 404, .. } + )); + } +} diff --git a/src-tauri/core/src/events.rs b/src-tauri/core/src/events.rs index 71f859e31..2d3e1a69e 100644 --- a/src-tauri/core/src/events.rs +++ b/src-tauri/core/src/events.rs @@ -17,6 +17,10 @@ pub enum EventKey { WindowSwapped, SessionStateChanged, InstanceUpdated, + MfaOpenIdComplete, + MfaOpenIdError, + MfaMobileComplete, + MfaMobileError, } impl From for &'static str { @@ -37,6 +41,10 @@ impl From for &'static str { EventKey::WindowSwapped => "window-swapped", EventKey::SessionStateChanged => "session-state-changed", EventKey::InstanceUpdated => "instance-updated", + EventKey::MfaOpenIdComplete => "mfa-openid-complete", + EventKey::MfaOpenIdError => "mfa-openid-error", + EventKey::MfaMobileComplete => "mfa-mobile-complete", + EventKey::MfaMobileError => "mfa-mobile-error", } } } diff --git a/src-tauri/core/src/lib.rs b/src-tauri/core/src/lib.rs index e29ea56ad..c9a0ea2ce 100644 --- a/src-tauri/core/src/lib.rs +++ b/src-tauri/core/src/lib.rs @@ -16,9 +16,13 @@ use serde::{Deserialize, Serialize}; pub mod app_config; pub mod connection; pub mod database; +pub mod enrollment; pub mod error; pub mod events; +pub mod mfa; pub mod proxy; +#[cfg(test)] +mod test_helpers; pub mod version; pub mod wg_config; diff --git a/src-tauri/core/src/mfa.rs b/src-tauri/core/src/mfa.rs new file mode 100644 index 000000000..b72c3f36b --- /dev/null +++ b/src-tauri/core/src/mfa.rs @@ -0,0 +1,836 @@ +//! Connect-time VPN MFA over HTTP. +//! +//! Synchronous (request/response) MFA functions for TOTP and email methods, +//! plus long-running flows for OpenID (poll loop) and mobile approve (WebSocket). + +use std::time::Duration; + +use defguard_client_proto::defguard::client_types::{ + ClientMfaFinishRequest, ClientMfaFinishResponse, ClientMfaStartRequest, ClientMfaStartResponse, + MfaMethod, +}; +use futures_util::StreamExt; +use reqwest::{Client, Response, StatusCode, Url}; +use serde::Serialize; +use thiserror::Error; +use tokio::{ + net::TcpStream, + select, + time::{sleep, Instant}, +}; +use tokio_tungstenite::{ + connect_async, + tungstenite::{Error as WsError, Message}, + MaybeTlsStream, WebSocketStream, +}; +use tokio_util::sync::CancellationToken; + +use crate::{ + proxy::construct_platform_header, + version::{CLIENT_PLATFORM_HEADER, CLIENT_VERSION_HEADER, PKG_VERSION}, +}; + +/// Error type returned by MFA operations. +/// +/// Serialized as a tagged JSON union so the TypeScript frontend can +/// match on the `type` field to show context-specific messages. +#[derive(Debug, Error, Serialize)] +#[serde(tag = "type", rename_all = "snake_case")] +pub enum MfaError { + #[error("{message}")] + NetworkError { message: String }, + + #[error("Proxy error (HTTP {status}): {message}")] + ProxyError { status: u16, message: String }, + + #[error("MFA rejected: {message}")] + MfaRejected { message: String }, + + #[error("Posture check failed: {message}")] + PostureRejected { message: String }, + + #[error("MFA operation timed out")] + Timeout, + + #[error("MFA operation cancelled")] + Cancelled, + + #[error("{message}")] + Other { message: String }, +} + +fn build_client() -> Client { + Client::new() +} + +fn standard_headers() -> Vec<(&'static str, String)> { + vec![ + (CLIENT_VERSION_HEADER, PKG_VERSION.to_string()), + (CLIENT_PLATFORM_HEADER, construct_platform_header()), + ] +} + +/// Check an MFA response status and map it to `MfaError`. +async fn check_mfa_response(response: Response) -> Result { + let status = response.status(); + if status.is_success() { + return Ok(response); + } + + let message = response + .json::() + .await + .ok() + .and_then(|v| v.get("error").and_then(|e| e.as_str()).map(String::from)) + .unwrap_or_else(|| format!("HTTP {status}")); + + match status { + // The proxy returns 403 only for a failed device posture check + // (ApiError::PostureRejected); 401 and other 4xx are ordinary MFA + // rejections. Keeping them distinct lets the frontend route posture + // failures to the dedicated posture-check-failed view. + StatusCode::FORBIDDEN => Err(MfaError::PostureRejected { message }), + StatusCode::UNAUTHORIZED => Err(MfaError::MfaRejected { message }), + _ if status.is_client_error() => Err(MfaError::MfaRejected { message }), + _ => Err(MfaError::ProxyError { + status: status.as_u16(), + message, + }), + } +} + +/// Start an MFA handshake for a VPN location. +/// +/// POSTs a `ClientMfaStartRequest` (proto JSON) to +/// `/api/v1/client-mfa/start` and returns the session token (and +/// optionally the biometric challenge). +pub async fn mfa_start( + proxy_url: Url, + request: ClientMfaStartRequest, +) -> Result { + let client = build_client(); + + let url = proxy_url + .join("api/v1/client-mfa/start") + .map_err(|e| MfaError::Other { + message: format!("Failed to build MFA start URL: {e}"), + })?; + + let mut req = client.post(url).json(&request); + + for (k, v) in standard_headers() { + req = req.header(k, v); + } + + let response = req.send().await.map_err(|e| MfaError::NetworkError { + message: format!("Failed to reach proxy: {e}"), + })?; + + let response = match check_mfa_response(response).await { + Ok(response) => response, + Err(err) => return Err(rewrap_mobile_start_error(request.method, err)), + }; + response.json().await.map_err(|e| MfaError::Other { + message: format!("Invalid MFA start response: {e}"), + }) +} + +/// Turn the proxy's generic "selected MFA method is not available" rejection +/// into actionable guidance for mobile-approve MFA (the user has no registered +/// mobile authenticator). Restores the CLI behavior that was lost when this +/// logic moved into core; benefits the desktop client too. Non-mobile methods +/// keep the original message. +fn rewrap_mobile_start_error(method: i32, err: MfaError) -> MfaError { + if method == MfaMethod::MobileApprove as i32 { + if let MfaError::MfaRejected { message } = &err { + if message.contains("selected MFA method is not available") { + return MfaError::MfaRejected { + message: "No mobile authenticator is registered for your account. \ + Register one in the Defguard mobile app, then retry." + .into(), + }; + } + } + } + err +} + +/// Finish an MFA handshake using a one-time code (TOTP or email). +/// +/// POSTs a `ClientMfaFinishRequest` to `/api/v1/client-mfa/finish` +/// and returns the preshared key. +pub async fn mfa_finish_code( + proxy_url: Url, + request: ClientMfaFinishRequest, +) -> Result { + let client = build_client(); + + let url = proxy_url + .join("api/v1/client-mfa/finish") + .map_err(|e| MfaError::Other { + message: format!("Failed to build MFA finish URL: {e}"), + })?; + + let mut req = client.post(url).json(&request); + + for (k, v) in standard_headers() { + req = req.header(k, v); + } + + let response = req.send().await.map_err(|e| MfaError::NetworkError { + message: format!("Failed to reach proxy: {e}"), + })?; + + let response = check_mfa_response(response).await?; + response.json().await.map_err(|e| MfaError::Other { + message: format!("Invalid MFA finish response: {e}"), + }) +} + +#[cfg(not(test))] +const OIDC_POLL_INTERVAL: Duration = Duration::from_secs(5); +#[cfg(test)] +const OIDC_POLL_INTERVAL: Duration = Duration::from_millis(5); + +#[cfg(not(test))] +const OIDC_POLL_TIMEOUT: Duration = Duration::from_secs(300); +#[cfg(test)] +const OIDC_POLL_TIMEOUT: Duration = Duration::from_millis(200); + +#[cfg(not(test))] +const MOBILE_APPROVE_TIMEOUT: Duration = Duration::from_secs(120); +#[cfg(test)] +const MOBILE_APPROVE_TIMEOUT: Duration = Duration::from_secs(5); + +/// Poll the proxy for OpenID MFA completion. +/// +/// The caller must already have opened the browser to the OIDC provider +/// URL (the token from `mfa_start` encodes the redirect). This function +/// POSTs a `ClientMfaFinishRequest` to `/api/v1/client-mfa/finish` every +/// [`OIDC_POLL_INTERVAL`] until the server returns a 200 (success), +/// the deadline expires, or the [`CancellationToken`] is fired. +pub async fn poll_openid_mfa( + proxy_url: Url, + token: String, + cancel: CancellationToken, +) -> Result { + let client = build_client(); + let url = proxy_url + .join("api/v1/client-mfa/finish") + .map_err(|e| MfaError::Other { + message: format!("Failed to build MFA finish URL: {e}"), + })?; + + let deadline = Instant::now() + OIDC_POLL_TIMEOUT; + + let request = ClientMfaFinishRequest { + token, + code: None, + auth_pub_key: None, + }; + + loop { + let remaining = deadline + .checked_duration_since(Instant::now()) + .unwrap_or_default(); + if remaining.is_zero() { + return Err(MfaError::Timeout); + } + + let mut req = client.post(url.clone()).json(&request); + for (k, v) in standard_headers() { + req = req.header(k, v); + } + + select! { + () = cancel.cancelled() => { + return Err(MfaError::Cancelled); + } + result = req.send() => { + let response = result.map_err(|e| MfaError::NetworkError { + message: format!("Failed to reach proxy: {e}"), + })?; + + let status = response.status(); + if status == StatusCode::OK { + return response.json().await.map_err(|e| MfaError::Other { + message: format!("Invalid MFA finish response: {e}"), + }); + } + if status != StatusCode::PRECONDITION_REQUIRED { + return Err(check_mfa_response(response).await.err().unwrap_or( + MfaError::Other { + message: format!("Unexpected status: {status}"), + }, + )); + } + // 428: not complete yet — fall through to sleep. + } + } + + select! { + () = cancel.cancelled() => { + return Err(MfaError::Cancelled); + } + () = sleep(OIDC_POLL_INTERVAL) => {} + } + } +} + +/// Connect to a WebSocket endpoint and wait for mobile-approve MFA +/// completion. +/// +/// The caller must have already displayed the QR code to the user +/// (the token from `mfa_start` encodes the challenge). This function +/// opens a WebSocket to `ws_url` and waits for a +/// `{"type":"mfa_success","preshared_key":"..."}` text frame. +/// Returns [`MfaError::Cancelled`] if the token fires or +/// [`MfaError::Timeout`] if the deadline expires. +pub async fn connect_mobile_approve( + ws_url: &str, + cancel: CancellationToken, +) -> Result { + let (ws_stream, _response) = + connect_async(ws_url) + .await + .map_err(|e| MfaError::NetworkError { + // Never interpolate the raw error: `ws_url` carries the MFA + // token as a query parameter and can appear in the error's + // Display, which is surfaced to the frontend and logs. + message: match &e { + WsError::Io(io_err) => { + format!("Failed to connect to proxy ({})", io_err.kind()) + } + _ => "Failed to connect to proxy".to_string(), + }, + })?; + + wait_for_mfa_success(ws_stream, cancel).await +} + +/// Derive the WebSocket URL from the proxy's base URL and MFA token. +pub fn derive_ws_url(proxy_base: &Url, token: &str) -> Result { + let mut ws_url = proxy_base + .join("api/v1/client-mfa/remote") + .map_err(|e| MfaError::Other { + message: format!("Failed to build WebSocket URL: {e}"), + })?; + + let ws_scheme = match proxy_base.scheme() { + "https" => "wss", + "http" => "ws", + other => { + return Err(MfaError::Other { + message: format!("Invalid proxy URL scheme '{other}'; expected http or https"), + }); + } + }; + + ws_url.set_scheme(ws_scheme).map_err(|()| MfaError::Other { + message: "Failed to set WebSocket URL scheme".into(), + })?; + ws_url.query_pairs_mut().append_pair("token", token); + + Ok(ws_url.to_string()) +} + +/// Wait on the WebSocket for an `mfa_success` frame. +async fn wait_for_mfa_success( + ws_stream: WebSocketStream>, + cancel: CancellationToken, +) -> Result { + let (_write, mut read) = ws_stream.split(); + let deadline = Instant::now() + MOBILE_APPROVE_TIMEOUT; + + loop { + let remaining = deadline + .checked_duration_since(Instant::now()) + .unwrap_or_default(); + if remaining.is_zero() { + return Err(MfaError::Timeout); + } + + let msg = select! { + () = sleep(remaining) => { + return Err(MfaError::Timeout); + } + () = cancel.cancelled() => { + return Err(MfaError::Cancelled); + } + msg = read.next() => { + match msg { + Some(Ok(msg)) => msg, + Some(Err(_)) | None => { + return Err(MfaError::MfaRejected { + message: "mobile approval failed: connection closed by proxy" + .into(), + }); + } + } + } + }; + + if let Message::Text(text) = msg { + if let Ok(parsed) = serde_json::from_str::(&text) { + if parsed.get("type").and_then(|v| v.as_str()) == Some("mfa_success") { + if let Some(key) = parsed["preshared_key"].as_str() { + return Ok(ClientMfaFinishResponse { + preshared_key: key.to_string(), + token: None, + }); + } + } + } + } + } +} + +#[cfg(test)] +mod tests { + use reqwest::Url; + use serde_json::json; + use tokio_util::sync::CancellationToken; + use wiremock::{ + matchers::{body_partial_json, method, path}, + Mock, MockServer, ResponseTemplate, + }; + + use super::*; + use crate::test_helpers::{start_ws_stub, WsStubCommand}; + + fn mock_url(server: &MockServer) -> Url { + Url::parse(&server.uri()).expect("MockServer URI should be valid") + } + + fn start_request() -> ClientMfaStartRequest { + ClientMfaStartRequest { + location_id: 1, + pubkey: "pk".into(), + method: 0, // TOTP + posture_data: None, + } + } + + fn start_response_json(token: &str) -> serde_json::Value { + json!({ + "token": token, + "challenge": null, + }) + } + + fn finish_response_json(key: &str) -> serde_json::Value { + json!({ + "preshared_key": key, + }) + } + + #[tokio::test] + async fn test_mfa_start_success() { + let server = MockServer::start().await; + let body = start_response_json("mfa-token-1"); + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/start")) + .respond_with(ResponseTemplate::new(200).set_body_json(&body)) + .mount(&server) + .await; + + let url = mock_url(&server); + let info = mfa_start(url, start_request()).await.unwrap(); + assert_eq!(info.token, "mfa-token-1"); + assert!(info.challenge.is_none()); + } + + #[tokio::test] + async fn test_mfa_start_rejected() { + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/start")) + .respond_with( + ResponseTemplate::new(401).set_body_json(json!({ "error": "unauthorized" })), + ) + .mount(&server) + .await; + + let url = mock_url(&server); + let err = mfa_start(url, start_request()).await.unwrap_err(); + assert!(matches!(err, MfaError::MfaRejected { .. })); + } + + #[tokio::test] + async fn test_mfa_start_posture_rejected_on_403() { + // 403 is the proxy's posture-check-failure status; it must map to the + // dedicated PostureRejected variant, not the generic MfaRejected. + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/start")) + .respond_with( + ResponseTemplate::new(403).set_body_json(json!({ "error": "firewall enabled" })), + ) + .mount(&server) + .await; + + let url = mock_url(&server); + let err = mfa_start(url, start_request()).await.unwrap_err(); + assert!(matches!(err, MfaError::PostureRejected { .. })); + } + + #[tokio::test] + async fn test_mfa_start_sends_snake_case_numeric_body() { + // Guards the wire contract: the proxy expects snake_case fields and a + // *numeric* `method`. If serde ever serialized camelCase or a string + // enum, the body matcher fails, the mock returns nothing, and the call + // errors instead of silently sending a malformed request. + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/start")) + .and(body_partial_json( + json!({ "location_id": 1, "pubkey": "pk", "method": 0 }), + )) + .respond_with(ResponseTemplate::new(200).set_body_json(start_response_json("t"))) + .mount(&server) + .await; + + let url = mock_url(&server); + mfa_start(url, start_request()) + .await + .expect("request body did not match the expected wire contract"); + } + + #[tokio::test] + async fn test_mfa_start_network_error() { + // Nothing listening on this port. + let url = "http://127.0.0.1:1".parse().unwrap(); + let err = mfa_start(url, start_request()).await.unwrap_err(); + assert!(matches!(err, MfaError::NetworkError { .. })); + } + + #[tokio::test] + async fn test_mfa_start_proxy_error_on_5xx() { + // 5xx is a server fault (ProxyError), distinct from a 4xx rejection. + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/start")) + .respond_with(ResponseTemplate::new(500).set_body_json(json!({ "error": "boom" }))) + .mount(&server) + .await; + + let url = mock_url(&server); + let err = mfa_start(url, start_request()).await.unwrap_err(); + assert!(matches!(err, MfaError::ProxyError { status: 500, .. })); + } + + #[tokio::test] + async fn test_mfa_start_mobile_no_authenticator_guidance() { + // Mobile-approve start rejected because no authenticator is registered: + // the generic proxy message becomes actionable guidance. + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/start")) + .respond_with( + ResponseTemplate::new(400) + .set_body_json(json!({ "error": "selected MFA method is not available" })), + ) + .mount(&server) + .await; + + let url = mock_url(&server); + let request = ClientMfaStartRequest { + location_id: 1, + pubkey: "pk".into(), + method: MfaMethod::MobileApprove as i32, + posture_data: None, + }; + match mfa_start(url, request).await.unwrap_err() { + MfaError::MfaRejected { message } => { + assert!( + message.contains("mobile app"), + "unexpected message: {message}" + ); + } + other => panic!("expected MfaRejected, got {other:?}"), + } + } + + #[tokio::test] + async fn test_mfa_start_non_mobile_not_rewrapped() { + // The mobile guidance must not leak into other methods. + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/start")) + .respond_with( + ResponseTemplate::new(400) + .set_body_json(json!({ "error": "selected MFA method is not available" })), + ) + .mount(&server) + .await; + + let url = mock_url(&server); + // start_request() uses method 0 (TOTP). + match mfa_start(url, start_request()).await.unwrap_err() { + MfaError::MfaRejected { message } => { + assert!( + !message.contains("mobile app"), + "TOTP got mobile guidance: {message}" + ); + } + other => panic!("expected MfaRejected, got {other:?}"), + } + } + + #[tokio::test] + async fn test_mfa_finish_code_success() { + let server = MockServer::start().await; + let body = finish_response_json("psk-123"); + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/finish")) + .respond_with(ResponseTemplate::new(200).set_body_json(&body)) + .mount(&server) + .await; + + let url = mock_url(&server); + let psk = mfa_finish_code( + url, + ClientMfaFinishRequest { + token: "token".into(), + code: Some("123456".into()), + auth_pub_key: None, + }, + ) + .await + .unwrap(); + assert_eq!(psk.preshared_key, "psk-123"); + } + + #[tokio::test] + async fn test_mfa_finish_code_rejected() { + // A wrong code is a 4xx rejection. + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/finish")) + .respond_with( + ResponseTemplate::new(401).set_body_json(json!({ "error": "Unauthorized" })), + ) + .mount(&server) + .await; + + let url = mock_url(&server); + let err = mfa_finish_code( + url, + ClientMfaFinishRequest { + token: "token".into(), + code: Some("000000".into()), + auth_pub_key: None, + }, + ) + .await + .unwrap_err(); + assert!(matches!(err, MfaError::MfaRejected { .. })); + } + + #[tokio::test] + async fn test_poll_openid_success() { + let server = MockServer::start().await; + let body = finish_response_json("oidc-psk"); + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/finish")) + .respond_with(ResponseTemplate::new(200).set_body_json(&body)) + .mount(&server) + .await; + + let url = mock_url(&server); + let cancel = CancellationToken::new(); + let psk = poll_openid_mfa(url, "token".into(), cancel).await.unwrap(); + assert_eq!(psk.preshared_key, "oidc-psk"); + } + + #[tokio::test] + async fn test_poll_openid_428_then_success() { + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/finish")) + .respond_with(ResponseTemplate::new(428)) + .up_to_n_times(2) + .mount(&server) + .await; + + let success_body = finish_response_json("oidc-psk"); + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/finish")) + .respond_with(ResponseTemplate::new(200).set_body_json(&success_body)) + .mount(&server) + .await; + + let url = mock_url(&server); + let cancel = CancellationToken::new(); + let psk = poll_openid_mfa(url, "token".into(), cancel).await.unwrap(); + assert_eq!(psk.preshared_key, "oidc-psk"); + } + + #[tokio::test] + async fn test_poll_openid_stops_on_error() { + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/finish")) + .respond_with(ResponseTemplate::new(500).set_body_json(json!({ "error": "boom" }))) + .mount(&server) + .await; + + let url = mock_url(&server); + let cancel = CancellationToken::new(); + let err = poll_openid_mfa(url, "token".into(), cancel) + .await + .unwrap_err(); + match err { + MfaError::ProxyError { status, message } => { + assert_eq!(status, 500); + assert!(message.contains("boom")); + } + other => panic!("expected ProxyError, got {other:?}"), + } + } + + #[tokio::test] + async fn test_poll_openid_timeout() { + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/finish")) + .respond_with(ResponseTemplate::new(428)) + .mount(&server) + .await; + + let url = mock_url(&server); + let cancel = CancellationToken::new(); + let err = poll_openid_mfa(url, "token".into(), cancel) + .await + .unwrap_err(); + assert!(matches!(err, MfaError::Timeout)); + } + + #[tokio::test] + async fn test_poll_openid_cancelled() { + let server = MockServer::start().await; + + Mock::given(method("POST")) + .and(path("/api/v1/client-mfa/finish")) + .respond_with(ResponseTemplate::new(428)) + .mount(&server) + .await; + + let url = mock_url(&server); + let cancel = CancellationToken::new(); + cancel.cancel(); + let err = poll_openid_mfa(url, "token".into(), cancel) + .await + .unwrap_err(); + assert!(matches!(err, MfaError::Cancelled)); + } + + #[tokio::test] + async fn test_mobile_approve_success() { + let stub = start_ws_stub().await; + let addr = stub.addr; + let tx = stub.tx; + let ws_url = format!("ws://{addr}/test"); + + let cancel = CancellationToken::new(); + let handle = tokio::spawn(async move { connect_mobile_approve(&ws_url, cancel).await }); + + tx.send(WsStubCommand::SendMessage( + r#"{"type":"mfa_success","preshared_key":"mobile-psk"}"#.into(), + )) + .unwrap(); + tx.send(WsStubCommand::Close).unwrap(); + + let psk = handle.await.unwrap().unwrap(); + assert_eq!(psk.preshared_key, "mobile-psk"); + } + + #[tokio::test] + async fn test_mobile_approve_close_without_success() { + let stub = start_ws_stub().await; + let addr = stub.addr; + let tx = stub.tx; + let ws_url = format!("ws://{addr}/test"); + + let cancel = CancellationToken::new(); + let handle = tokio::spawn(async move { connect_mobile_approve(&ws_url, cancel).await }); + + tx.send(WsStubCommand::Close).unwrap(); + + let err = handle.await.unwrap().unwrap_err(); + assert!(matches!(err, MfaError::MfaRejected { .. })); + } + + #[tokio::test] + async fn test_mobile_approve_cancelled() { + let stub = start_ws_stub().await; + let addr = stub.addr; + let ws_url = format!("ws://{addr}/test"); + + let cancel = CancellationToken::new(); + cancel.cancel(); + let err = connect_mobile_approve(&ws_url, cancel).await.unwrap_err(); + assert!(matches!(err, MfaError::Cancelled)); + } + + #[tokio::test] + async fn test_mobile_approve_connect_error_does_not_leak_token() { + // Nothing is listening, so the WebSocket connect fails. The error must + // be a NetworkError whose message never contains the MFA token (the + // token rides in the ws_url query string). + let base: Url = "http://127.0.0.1:1".parse().unwrap(); + let token = "super-secret-mfa-token"; + let ws_url = derive_ws_url(&base, token).unwrap(); + + let cancel = CancellationToken::new(); + let err = connect_mobile_approve(&ws_url, cancel).await.unwrap_err(); + + assert!(matches!(err, MfaError::NetworkError { .. })); + assert!( + !err.to_string().contains(token), + "error leaked the MFA token: {err}" + ); + } + + #[test] + fn test_derive_ws_url_http_to_ws() { + let base = Url::parse("http://proxy.example.com/").unwrap(); + let ws = derive_ws_url(&base, "tok").unwrap(); + assert!(ws.starts_with("ws://proxy.example.com/api/v1/client-mfa/remote")); + assert!(ws.contains("token=tok")); + } + + #[test] + fn test_derive_ws_url_https_to_wss() { + let base = Url::parse("https://proxy.example.com/").unwrap(); + let ws = derive_ws_url(&base, "tok").unwrap(); + assert!(ws.starts_with("wss://proxy.example.com/api/v1/client-mfa/remote")); + } + + #[test] + fn test_derive_ws_url_preserves_path_prefix() { + let base = Url::parse("https://proxy.example.com/defguard/").unwrap(); + let ws = derive_ws_url(&base, "tok").unwrap(); + assert!(ws.starts_with("wss://proxy.example.com/defguard/api/v1/client-mfa/remote")); + } + + #[test] + fn test_derive_ws_url_rejects_non_http_scheme() { + let base = Url::parse("ftp://proxy.example.com/").unwrap(); + let err = derive_ws_url(&base, "tok").unwrap_err(); + assert!(matches!(err, MfaError::Other { .. })); + } +} diff --git a/src-tauri/core/src/test_helpers.rs b/src-tauri/core/src/test_helpers.rs new file mode 100644 index 000000000..bf7061dd8 --- /dev/null +++ b/src-tauri/core/src/test_helpers.rs @@ -0,0 +1,77 @@ +//! Shared test helpers for defguard-client-core tests. +//! +//! Provides a controllable WebSocket stub for MFA mobile-approve tests, +//! eliminating the need for Docker or external services. + +use std::net::SocketAddr; + +use futures_util::{SinkExt, StreamExt}; +use tokio::{ + net::TcpListener, + sync::mpsc::{unbounded_channel, UnboundedSender}, +}; +use tokio_tungstenite::{accept_async, tungstenite::Message}; + +/// Command to control the WebSocket stub's behavior after a client connects. +pub enum WsStubCommand { + /// Send a text frame to the connected client. + SendMessage(String), + /// Close the WebSocket connection gracefully. + Close, +} + +/// A controllable WebSocket stub for testing MFA mobile-approve flows. +/// +/// Binds to a random port on localhost. The test connects to [`WebSocketStub::addr`], +/// then sends [`WsStubCommand`] values through [`WebSocketStub::tx`] to control +/// what frames the stub emits. +pub struct WebSocketStub { + pub addr: SocketAddr, + pub tx: UnboundedSender, +} + +/// Start a controllable WebSocket stub on a random localhost port. +/// +/// The returned [`WebSocketStub`] spawns a Tokio task that accepts exactly one +/// TCP connection and upgrades it to a WebSocket. After the upgrade, the task +/// waits for commands on the returned `tx` sender. +/// +/// # Panics +/// +/// Panics if the Tokio runtime is not available. +pub async fn start_ws_stub() -> WebSocketStub { + let listener = TcpListener::bind("127.0.0.1:0") + .await + .expect("Failed to bind WebSocket stub"); + let addr = listener.local_addr().expect("Failed to get local address"); + let (tx, mut rx) = unbounded_channel::(); + + tokio::spawn(async move { + // Accept a single connection. + let (stream, _peer) = match listener.accept().await { + Ok(conn) => conn, + Err(_) => return, + }; + + let ws_stream = match accept_async(stream).await { + Ok(ws) => ws, + Err(_) => return, + }; + + let (mut write, mut _read) = ws_stream.split(); + + while let Some(cmd) = rx.recv().await { + match cmd { + WsStubCommand::SendMessage(text) => { + let _ = write.send(Message::Text(text.into())).await; + } + WsStubCommand::Close => { + let _ = write.close().await; + return; + } + } + } + }); + + WebSocketStub { addr, tx } +} diff --git a/src-tauri/core/src/version.rs b/src-tauri/core/src/version.rs index 59a154bdc..3e34178af 100644 --- a/src-tauri/core/src/version.rs +++ b/src-tauri/core/src/version.rs @@ -3,9 +3,8 @@ use std::{ path::{Path, PathBuf}, }; -use serde::{Deserialize, Serialize}; - pub use semver::Version; +use serde::{Deserialize, Serialize}; #[cfg(unix)] use crate::set_perms; diff --git a/src-tauri/permissions/default.toml b/src-tauri/permissions/default.toml index eb2987f67..46e1e3699 100644 --- a/src-tauri/permissions/default.toml +++ b/src-tauri/permissions/default.toml @@ -2,6 +2,18 @@ identifier = "allow-app-commands" description = "Allow all application commands for both UI windows (old-ui and new-ui)." commands.allow = [ + "enrollment_start", + "enrollment_create_device", + "enrollment_activate_user", + "enrollment_register_mfa_start", + "enrollment_register_mfa_finish", + "enrollment_network_info", + "enrollment_finish", + "mfa_start", + "mfa_finish_code", + "mfa_poll_openid", + "mfa_connect_mobile_approve", + "cancel_mfa", "all_locations", "has_any_visible_locations", "save_device_config", diff --git a/src-tauri/src/appstate.rs b/src-tauri/src/appstate.rs index ec013e1cb..4e0416cc8 100644 --- a/src-tauri/src/appstate.rs +++ b/src-tauri/src/appstate.rs @@ -1,11 +1,15 @@ use std::{collections::HashMap, sync::Mutex}; -use defguard_client_core::connection::active_connections::ACTIVE_CONNECTIONS; +use defguard_client_core::{ + connection::active_connections::ACTIVE_CONNECTIONS, enrollment::EnrollmentSession, +}; +use defguard_client_provisioning::ProvisioningConfig; use tauri::{ async_runtime::{spawn, JoinHandle}, PhysicalPosition, }; use tokio_util::sync::CancellationToken; +use uuid::Uuid; use crate::{ app_config::AppConfig, @@ -14,10 +18,11 @@ use crate::{ utils::stats_handler, ConnectionType, }; -use defguard_client_provisioning::ProvisioningConfig; pub struct AppState { + pub enrollment_sessions: Mutex>, pub log_watchers: Mutex>, + pub mfa_tasks: Mutex>, pub app_config: Mutex, pub tray_click_position: Mutex>>, stat_threads: Mutex>>, // location ID is the key @@ -29,7 +34,9 @@ impl AppState { #[must_use] pub fn new(config: AppConfig, provisioning_config: Option) -> Self { Self { + enrollment_sessions: Mutex::new(HashMap::new()), log_watchers: Mutex::new(HashMap::new()), + mfa_tasks: Mutex::new(HashMap::new()), app_config: Mutex::new(config), tray_click_position: Mutex::new(None), stat_threads: Mutex::new(HashMap::new()), diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 8b67ed491..5893235c0 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -213,6 +213,18 @@ fn main() { close_welcome_window, all_active_connections, disconnect_locations, + enrollment_start, + enrollment_create_device, + enrollment_activate_user, + enrollment_register_mfa_start, + enrollment_register_mfa_finish, + enrollment_network_info, + enrollment_finish, + mfa_start, + mfa_finish_code, + mfa_poll_openid, + mfa_connect_mobile_approve, + cancel_mfa, session_state::get_session_state, session_state::patch_session_state, ]) diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 36847b72c..df35b0123 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -4,9 +4,13 @@ use std::{collections::HashMap, env, str::FromStr}; use chrono::{DateTime, Duration, Utc}; #[cfg(not(target_os = "macos"))] use defguard_client_core::connection::daemon_client::DAEMON_CLIENT; -use defguard_client_core::connection::{ - active_connections::{find_connection, get_connection_id_by_type, ACTIVE_CONNECTIONS}, - disconnect_interface, +use defguard_client_core::{ + connection::{ + active_connections::{find_connection, get_connection_id_by_type, ACTIVE_CONNECTIONS}, + disconnect_interface, + }, + enrollment::{self, MfaFinishResponse, MfaStartResponse}, + mfa, }; use defguard_client_posture::authorize_posture_session; #[cfg(not(target_os = "macos"))] @@ -14,14 +18,22 @@ use defguard_client_proto::defguard::client::v1::{ DeleteServiceLocationsRequest, RemoveInterfaceRequest, SaveServiceLocationsRequest, }; use defguard_client_proto::defguard::{ - client_types::DeviceConfigResponse, enterprise::posture::v2::DevicePostureData, + client_types::{ + AdminInfo, ClientMfaFinishRequest, ClientMfaFinishResponse, ClientMfaStartRequest, + DeviceConfigResponse, EnrollmentSettings, InitialUserInfo, + InstanceInfo as ProtoInstanceInfo, MfaMethod, + }, + enterprise::posture::v2::DevicePostureData, }; use defguard_client_provisioning::ProvisioningConfig; #[cfg(not(target_os = "macos"))] use defguard_client_service_locations::to_service_location; +use reqwest::Url; use serde::{Deserialize, Serialize}; use struct_patch::Patch; use tauri::{AppHandle, Emitter, Manager, State}; +use tokio_util::sync::CancellationToken; +use uuid::Uuid; const UPDATE_URL: &str = "https://pkgs.defguard.net/api/update/check"; @@ -85,12 +97,49 @@ impl From for ConnectError { } } +/// Serialize a structured error (e.g. `MfaError`, `EnrollmentError`) to JSON so +/// the frontend can match on its tagged `type`, falling back to the Display +/// string if serialization somehow fails. +fn err_to_json(e: E) -> String { + serde_json::to_string(&e).unwrap_or_else(|_| e.to_string()) +} + +/// Look up a cloned enrollment session by its opaque string id. Used by the +/// enrollment commands that need read access to the in-memory session. +fn get_enrollment_session( + state: &AppState, + session_id: &str, +) -> Result { + let uid = Uuid::parse_str(session_id).map_err(|e| format!("Invalid session ID: {e}"))?; + state + .enrollment_sessions + .lock() + .expect("enrollment_sessions mutex poisoned") + .get(&uid) + .cloned() + .ok_or_else(|| "Enrollment session not found".to_string()) +} + +/// Bring up a location connection with an already-obtained preshared key and +/// refresh the tray. Shared by `connect` and the MFA finish flows so the +/// preshared key never has to cross back into the frontend. +async fn connect_location_with_psk( + location: Location, + preshared_key: Option, + handle: &AppHandle, +) -> Result<(), Error> { + handle_connection_for_location(location.clone(), preshared_key, handle).await?; + reload_tray_menu(handle).await; + info!("Connected to location {location}"); + configure_tray_icon(handle).await?; + Ok(()) +} + /// Open new WireGuard connection. #[tauri::command(async)] pub async fn connect( location_id: Id, connection_type: ConnectionType, - preshared_key: Option, handle: AppHandle, ) -> Result<(), ConnectError> { debug!("Received a command to connect to a {connection_type} with ID {location_id}"); @@ -100,14 +149,15 @@ pub async fn connect( "Identified location with ID {location_id} as \"{}\", handling connection.", location.name ); - let preshared_key = if location.posture_check_required && preshared_key.is_none() { + // Connect-time MFA brings the tunnel up itself (keeping the preshared + // key backend-side), so the only preshared key resolved here is for + // posture-only locations. + let preshared_key = if location.posture_check_required { Some(authorize_posture_session(&location).await?) } else { - preshared_key + None }; - handle_connection_for_location(location.clone(), preshared_key, &handle).await?; - reload_tray_menu(&handle).await; - info!("Connected to location {location}"); + connect_location_with_psk(location, preshared_key, &handle).await?; } else { error!( "Location with ID {location_id} not found in the database, aborting connection \ @@ -122,14 +172,13 @@ pub async fn connect( ); handle_connection_for_tunnel(tunnel.clone(), &handle).await?; info!("Successfully connected to tunnel {tunnel}"); + // Update tray icon to reflect connection state. + configure_tray_icon(&handle).await?; } else { error!("Tunnel {location_id} not found"); return Err(Error::NotFound.into()); } - // Update tray icon to reflect connection state. - configure_tray_icon(&handle).await?; - Ok(()) } @@ -350,9 +399,9 @@ pub async fn save_device_config( debug!("Saving device configuration: {response:#?}."); let mut transaction = DB_POOL.begin().await?; - let instance_info = response - .instance - .expect("Missing instance info in device config response"); + let instance_info = response.instance.ok_or_else(|| { + Error::ResourceNotFound("instance info in device config response".to_string()) + })?; let mut instance = Instance::from(instance_info); if response.token.is_some() { debug!( @@ -372,9 +421,9 @@ pub async fn save_device_config( let instance = instance.save(&mut *transaction).await?; debug!("Saved instance {}", instance.name); - let device = response - .device - .expect("Missing device info in device config response"); + let device = response.device.ok_or_else(|| { + Error::ResourceNotFound("device info in device config response".to_string()) + })?; let keys = WireguardKeys::new(instance.id, device.pubkey, private_key); debug!( "Saving wireguard key {} for instance {}({})", @@ -1326,3 +1375,385 @@ pub async fn all_active_connections() -> Result, Er debug!("Returning {} active connections.", result.len()); Ok(result) } + +/// Returned by the `enrollment_start` Tauri command. +#[derive(Clone, Debug, Serialize)] +pub struct EnrollmentStartResult { + pub session_id: String, + pub user: InitialUserInfo, + pub admin: AdminInfo, + pub settings: EnrollmentSettings, + pub instance: ProtoInstanceInfo, + pub deadline_timestamp: i64, + pub final_page_content: String, +} + +#[tauri::command(async)] +pub async fn enrollment_start( + proxy_url: String, + token: String, + state: State<'_, AppState>, +) -> Result { + debug!("Starting enrollment at {proxy_url}"); + let url = Url::parse(&proxy_url).map_err(|e| format!("Invalid proxy URL: {e}"))?; + let (session, response) = enrollment::enrollment_start(url, token) + .await + .map_err(err_to_json)?; + let session_uuid = Uuid::new_v4(); + let session_id = session_uuid.to_string(); + state + .enrollment_sessions + .lock() + .expect("enrollment_sessions mutex poisoned") + .insert(session_uuid, session); + let login = response + .user + .as_ref() + .map(|u| u.login.as_str()) + .unwrap_or(""); + info!("Enrollment started for user {login}, session {session_id}"); + Ok(EnrollmentStartResult { + session_id, + user: response + .user + .ok_or_else(|| "Proxy did not return user info".to_string())?, + admin: response + .admin + .ok_or_else(|| "Proxy did not return admin info".to_string())?, + settings: response + .settings + .ok_or_else(|| "Proxy did not return enrollment settings".to_string())?, + instance: response + .instance + .ok_or_else(|| "Proxy did not return instance info".to_string())?, + deadline_timestamp: response.deadline_timestamp, + final_page_content: response.final_page_content, + }) +} + +#[tauri::command(async)] +pub async fn enrollment_create_device( + session_id: String, + name: String, + pubkey: String, + state: State<'_, AppState>, +) -> Result { + debug!("Creating device \"{name}\""); + let session = get_enrollment_session(&state, &session_id)?; + let result = enrollment::enrollment_create_device(session, name, pubkey) + .await + .map_err(err_to_json)?; + info!("Device created"); + Ok(result) +} + +#[tauri::command(async)] +pub async fn enrollment_activate_user( + session_id: String, + password: Option, + phone_number: Option, + state: State<'_, AppState>, +) -> Result<(), String> { + debug!("Activating user"); + let session = get_enrollment_session(&state, &session_id)?; + enrollment::enrollment_activate_user(session, password, phone_number) + .await + .map_err(err_to_json)?; + info!("User activated"); + Ok(()) +} + +#[tauri::command(async)] +pub async fn enrollment_register_mfa_start( + session_id: String, + method: String, + state: State<'_, AppState>, +) -> Result { + debug!("Starting MFA setup"); + let session = get_enrollment_session(&state, &session_id)?; + enrollment::enrollment_register_mfa_start(session, method) + .await + .map_err(err_to_json) +} + +#[tauri::command(async)] +pub async fn enrollment_register_mfa_finish( + session_id: String, + code: String, + method: String, + state: State<'_, AppState>, +) -> Result { + debug!("Finishing MFA setup"); + let session = get_enrollment_session(&state, &session_id)?; + enrollment::enrollment_register_mfa_finish(session, code, method) + .await + .map_err(err_to_json) +} + +#[tauri::command(async)] +pub async fn enrollment_network_info( + session_id: String, + pubkey: String, + state: State<'_, AppState>, +) -> Result { + debug!("Fetching network info"); + let session = get_enrollment_session(&state, &session_id)?; + enrollment::enrollment_network_info(session, pubkey) + .await + .map_err(err_to_json) +} + +#[tauri::command(async)] +pub async fn enrollment_finish( + session_id: String, + state: State<'_, AppState>, +) -> Result<(), String> { + debug!("Finishing enrollment"); + let session = { + let uid = Uuid::parse_str(&session_id).map_err(|e| format!("Invalid session ID: {e}"))?; + let mut sessions = state + .enrollment_sessions + .lock() + .expect("enrollment_sessions mutex poisoned"); + sessions + .remove(&uid) + .ok_or_else(|| "Enrollment session not found".to_string())? + }; + enrollment::enrollment_finish(session); + info!("Enrollment finished, session {session_id} removed"); + Ok(()) +} + +#[derive(Clone, Serialize)] +pub struct MfaErrorPayload { + pub error: String, +} + +/// Bring up a location connection with a preshared key obtained from a +/// completed MFA handshake. Keeps the preshared key inside the backend - it is +/// never returned to or emitted at the frontend. +async fn connect_after_mfa( + location_id: Id, + preshared_key: String, + handle: &AppHandle, +) -> Result<(), String> { + let location = Location::find_by_id(&*DB_POOL, location_id) + .await + .map_err(|e| e.to_string())? + .ok_or_else(|| "Location not found".to_string())?; + connect_location_with_psk(location, Some(preshared_key), handle) + .await + // Distinct prefix so the frontend can tell a post-MFA connection + // failure apart from an MFA/auth failure. + .map_err(|e| format!("VPN connection failed: {e}")) +} + +/// Map the frontend MFA method string to the proto `MfaMethod` enum the proxy +/// expects on the wire (a numeric enum, not a string). +fn parse_mfa_method(method: &str) -> Result { + match method { + "totp" => Ok(MfaMethod::Totp), + "email" => Ok(MfaMethod::Email), + "oidc" => Ok(MfaMethod::Oidc), + "biometric" => Ok(MfaMethod::Biometric), + "mobileapprove" => Ok(MfaMethod::MobileApprove), + other => Err(format!("Unsupported MFA method: {other}")), + } +} + +#[tauri::command(async)] +pub async fn mfa_start( + instance_id: Id, + location_id: Id, + method: String, +) -> Result { + debug!("Starting MFA session for location {location_id}"); + let method = parse_mfa_method(&method)?; + let instance = Instance::find_by_id(&*DB_POOL, instance_id) + .await + .map_err(|e| e.to_string())? + .ok_or_else(|| "Instance not found".to_string())?; + let keys = WireguardKeys::find_by_instance_id(&*DB_POOL, instance_id) + .await + .map_err(|e| e.to_string())? + .ok_or_else(|| "WireGuard keys not found".to_string())?; + let proxy_url = + Url::parse(&instance.proxy_url).map_err(|e| format!("Invalid proxy URL: {e}"))?; + let location = Location::find_by_id(&*DB_POOL, location_id) + .await + .map_err(|e| e.to_string())? + .ok_or_else(|| "Location not found".to_string())?; + let posture_data = if location.posture_check_required { + Some( + defguard_client_posture::get_posture_data() + .await + .map_err(|e| format!("Failed to collect posture data: {e}"))?, + ) + } else { + None + }; + let request = ClientMfaStartRequest { + location_id: location.network_id, + pubkey: keys.pubkey, + method: method as i32, + posture_data, + }; + mfa::mfa_start(proxy_url, request) + .await + .map_err(err_to_json) +} + +#[tauri::command(async)] +pub async fn mfa_finish_code( + instance_id: Id, + location_id: Id, + token: String, + code: String, + handle: AppHandle, +) -> Result<(), String> { + debug!("Finishing MFA with code for instance {instance_id}"); + let instance = Instance::find_by_id(&*DB_POOL, instance_id) + .await + .map_err(|e| e.to_string())? + .ok_or_else(|| "Instance not found".to_string())?; + let proxy_url = + Url::parse(&instance.proxy_url).map_err(|e| format!("Invalid proxy URL: {e}"))?; + let request = ClientMfaFinishRequest { + token, + code: Some(code), + auth_pub_key: None, + }; + let response = mfa::mfa_finish_code(proxy_url, request) + .await + .map_err(err_to_json)?; + connect_after_mfa(location_id, response.preshared_key, &handle).await +} + +/// Register a long-running MFA task, run its future in the background, and on +/// success bring up the connection Rust-side before emitting a payload-free +/// completion event (or an error event). Shared by the OpenID poll and mobile +/// approve flows so the preshared key never leaves the backend. Returns the +/// task id the frontend uses to cancel. +fn spawn_mfa_task( + handle: &AppHandle, + location_id: Id, + complete_event: EventKey, + error_event: EventKey, + run: R, +) -> String +where + R: FnOnce(CancellationToken) -> F + Send + 'static, + F: std::future::Future> + + Send + + 'static, +{ + let cancel = CancellationToken::new(); + let task_id = Uuid::new_v4().to_string(); + handle + .state::() + .mfa_tasks + .lock() + .expect("mfa_tasks mutex poisoned") + .insert(task_id.clone(), cancel.clone()); + + let task_id_for_task = task_id.clone(); + let listen_handle = handle.clone(); + tokio::spawn(async move { + let result = run(cancel).await; + listen_handle + .state::() + .mfa_tasks + .lock() + .expect("mfa_tasks mutex poisoned") + .remove(&task_id_for_task); + match result { + Ok(response) => { + info!("MFA completed for task {task_id_for_task}"); + match connect_after_mfa(location_id, response.preshared_key, &listen_handle).await { + Ok(()) => { + let _ = listen_handle.emit(complete_event.into(), ()); + } + Err(err) => { + warn!("Connect after MFA failed for task {task_id_for_task}: {err}"); + let _ = + listen_handle.emit(error_event.into(), MfaErrorPayload { error: err }); + } + } + } + Err(err) => { + warn!("MFA task {task_id_for_task} failed: {err}"); + // Emit the structured error as JSON so the frontend classifies + // it the same way as command errors. + let _ = listen_handle.emit( + error_event.into(), + MfaErrorPayload { + error: err_to_json(err), + }, + ); + } + } + }); + + task_id +} + +#[tauri::command(async)] +pub async fn mfa_poll_openid( + instance_id: Id, + location_id: Id, + token: String, + handle: AppHandle, +) -> Result { + debug!("Starting OpenID MFA poll for instance {instance_id}"); + let instance = Instance::find_by_id(&*DB_POOL, instance_id) + .await + .map_err(|e| e.to_string())? + .ok_or_else(|| "Instance not found".to_string())?; + let proxy_url = + Url::parse(&instance.proxy_url).map_err(|e| format!("Invalid proxy URL: {e}"))?; + Ok(spawn_mfa_task( + &handle, + location_id, + EventKey::MfaOpenIdComplete, + EventKey::MfaOpenIdError, + move |cancel| mfa::poll_openid_mfa(proxy_url, token, cancel), + )) +} + +#[tauri::command(async)] +pub async fn mfa_connect_mobile_approve( + instance_id: Id, + location_id: Id, + token: String, + handle: AppHandle, +) -> Result { + debug!("Starting mobile approve MFA for instance {instance_id}"); + let instance = Instance::find_by_id(&*DB_POOL, instance_id) + .await + .map_err(|e| e.to_string())? + .ok_or_else(|| "Instance not found".to_string())?; + let proxy_url = + Url::parse(&instance.proxy_url).map_err(|e| format!("Invalid proxy URL: {e}"))?; + let ws_url = mfa::derive_ws_url(&proxy_url, &token).map_err(|e| e.to_string())?; + Ok(spawn_mfa_task( + &handle, + location_id, + EventKey::MfaMobileComplete, + EventKey::MfaMobileError, + move |cancel| async move { mfa::connect_mobile_approve(&ws_url, cancel).await }, + )) +} + +#[tauri::command(async)] +pub async fn cancel_mfa(task_id: String, state: State<'_, AppState>) -> Result<(), String> { + debug!("Cancelling MFA task {task_id}"); + let cancel = { + let tasks = state.mfa_tasks.lock().expect("mfa_tasks mutex poisoned"); + tasks + .get(&task_id) + .cloned() + .ok_or_else(|| "MFA task not found".to_string())? + }; + cancel.cancel(); + Ok(()) +} diff --git a/src-tauri/src/periodic/config.rs b/src-tauri/src/periodic/config.rs index fd9134df1..30672e6c2 100644 --- a/src-tauri/src/periodic/config.rs +++ b/src-tauri/src/periodic/config.rs @@ -4,6 +4,9 @@ use std::{ time::Duration, }; +pub use defguard_client_config_sync::commands::{ + disable_enterprise_features, do_update_instance, locations_changed, +}; use defguard_client_config_sync::{ poll_instance, poll_instances, PollInstanceResult, VersionMismatchPayload, }; @@ -22,10 +25,6 @@ use sqlx::{Sqlite, Transaction}; use tauri::{AppHandle, Emitter}; use tokio::time::sleep; -pub use defguard_client_config_sync::commands::{ - disable_enterprise_features, do_update_instance, locations_changed, -}; - const INTERVAL_SECONDS: Duration = Duration::from_secs(30); /// Tracks instance IDs for which we already sent a version-mismatch notification, diff --git a/src-tauri/src/periodic/connection.rs b/src-tauri/src/periodic/connection.rs index a9f4c102d..96ebd4418 100644 --- a/src-tauri/src/periodic/connection.rs +++ b/src-tauri/src/periodic/connection.rs @@ -49,7 +49,7 @@ async fn reconnect( peer_alive_period: peer_alive_period.num_seconds(), }; payload.emit(app_handle); - match connect(con_id, con_type, None, app_handle.clone()).await { + match connect(con_id, con_type, app_handle.clone()).await { Ok(()) => { info!("Reconnect for {con_type} {con_interface_name} ({con_id}) succeeded."); } diff --git a/src-tauri/src/session_state.rs b/src-tauri/src/session_state.rs index ab9d2d6eb..09cc04385 100644 --- a/src-tauri/src/session_state.rs +++ b/src-tauri/src/session_state.rs @@ -1,11 +1,10 @@ use std::collections::HashMap; +use defguard_client_core::events::EventKey; use serde::{Deserialize, Serialize}; use struct_patch::Patch; use tauri::{AppHandle, Emitter, Manager, State}; -use defguard_client_core::events::EventKey; - use crate::appstate::AppState; #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index 6ac9bb393..976ca8130 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -307,7 +307,7 @@ async fn handle_location_tray_menu(id: String, app: &AppHandle) { info!("MFA enabled for location with ID {id}, trigger MFA modal"); trigger_mfa(app, &location); } else if let Err(err) = - connect(location_id, ConnectionType::Location, None, app.clone()).await + connect(location_id, ConnectionType::Location, app.clone()).await { info!("Unable to connect location with ID {id}, error: {err:?}"); } diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index 74c5bd3ce..2ab5668d9 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -8,6 +8,8 @@ use std::{env, process::Command}; use defguard_client_common::{find_free_tcp_port, get_interface_name}; #[cfg(windows)] use defguard_client_core::connection::active_connections::find_connection; +#[cfg(target_os = "macos")] +use defguard_client_core::connection::apple::tunnel_stats; use defguard_client_core::connection::{bring_up, ConnectionTarget}; #[cfg(not(target_os = "macos"))] use defguard_client_core::{ @@ -46,8 +48,6 @@ use crate::{ log_watcher::service_log_watcher::spawn_log_watcher_task, ConnectionType, }; -#[cfg(target_os = "macos")] -use defguard_client_core::connection::apple::tunnel_stats; // Work-around MFA propagation delay. FIXME: remove once Core API is corrected. #[cfg(target_os = "macos")] From c46fa8661dd463bb04dd0b5341118e73b0362668 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Tue, 21 Jul 2026 11:35:42 +0200 Subject: [PATCH 121/155] style fixes (#1057) --- .../full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx | 2 +- new-ui/src/shared/components/Modal/style.scss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx index 47952f297..3e8315829 100644 --- a/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx @@ -38,7 +38,7 @@ export const MfaChoiceStep = () => { }); return ( -
    +

    Enable Multi-Factor Authentication

    diff --git a/new-ui/src/shared/components/Modal/style.scss b/new-ui/src/shared/components/Modal/style.scss index c697ab888..df3ed6360 100644 --- a/new-ui/src/shared/components/Modal/style.scss +++ b/new-ui/src/shared/components/Modal/style.scss @@ -28,7 +28,7 @@ align-items: center; .title { - font: var(--t-body-sm-500); + font: var(--t-body-primary-500); color: var(--fg-white-100); } } From 41038511ea0b89df00b4914099e39bd21bd50638 Mon Sep 17 00:00:00 2001 From: Jacek Chmielewski Date: Tue, 21 Jul 2026 13:30:14 +0200 Subject: [PATCH 122/155] Workaround for nvidia and wayland webkitgtk issues (#1060) Set appropriate environment variables when nvidia and wayland are detected. --- README.md | 11 ++++- src-tauri/src/bin/defguard-client.rs | 5 +++ src-tauri/src/utils.rs | 63 ++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fa1e4a5f6..ba112373d 100644 --- a/README.md +++ b/README.md @@ -126,12 +126,21 @@ NO_STRIP=1 pnpm tauri build ## Blank screen -The app launches but the window is blank. Set the `WEBKIT_DISABLE_DMABUF_RENDERER` environment variable: +On Linux NVIDIA setups, the app automatically applies the WebKitGTK DMA-BUF workaround +`WEBKIT_DISABLE_DMABUF_RENDERER=1` before the webview starts. On NVIDIA + Wayland setups, +it also applies `__NV_DISABLE_EXPLICIT_SYNC=1`. If the app still launches with a blank window, +set the DMA-BUF workaround manually: ``` WEBKIT_DISABLE_DMABUF_RENDERER=1 defguard-client ``` +As a last resort for resize crashes or persistent rendering issues, disable accelerated compositing: + +``` +WEBKIT_DISABLE_COMPOSITING_MODE=1 defguard-client +``` + ## Failed to run `pnpm tauri dev` `pnpm tauri dev` command may result in the following error: diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 5893235c0..825cbb156 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -12,6 +12,8 @@ use std::{env, str::FromStr, sync::LazyLock}; #[cfg(unix)] use defguard_client::set_perms; +#[cfg(target_os = "linux")] +use defguard_client::utils::set_webkitgtk_variables; #[cfg(windows)] use defguard_client::utils::sync_connections; use defguard_client::{ @@ -173,6 +175,9 @@ fn main() { // Handle --version / -V before starting the GUI. check_version_flag("defguard-client"); + #[cfg(target_os = "linux")] + set_webkitgtk_variables(); + let app = Builder::default() .invoke_handler(tauri::generate_handler![ all_locations, diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index 2ab5668d9..876ac00cc 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -3,6 +3,8 @@ use std::str::FromStr; #[cfg(target_os = "macos")] use std::time::Duration; use std::{env, process::Command}; +#[cfg(target_os = "linux")] +use std::{fs, path::Path}; #[cfg(not(target_os = "macos"))] use defguard_client_common::{find_free_tcp_port, get_interface_name}; @@ -53,6 +55,67 @@ use crate::{ #[cfg(target_os = "macos")] static TUNNEL_START_DELAY: Duration = Duration::from_secs(1); +#[cfg(target_os = "linux")] +const NVIDIA_EXPLICIT_SYNC_ENV: &str = "__NV_DISABLE_EXPLICIT_SYNC"; +#[cfg(target_os = "linux")] +const WEBKIT_DMABUF_ENV: &str = "WEBKIT_DISABLE_DMABUF_RENDERER"; + +/// Sets relevant environment variables to workaround webkitgtk on nvidia and wayland issues. +/// https://v2.tauri.app/develop/debug/linux-graphics +#[cfg(target_os = "linux")] +pub fn set_webkitgtk_variables() { + let (should_set_dmabuf, should_set_explicit_sync) = should_set_webkit_variables(); + if should_set_dmabuf { + env::set_var(WEBKIT_DMABUF_ENV, "1"); + eprintln!( + "Applied Linux WebKitGTK NVIDIA environment variable: \ + {WEBKIT_DMABUF_ENV}=1" + ); + } + if should_set_explicit_sync { + env::set_var(NVIDIA_EXPLICIT_SYNC_ENV, "1"); + eprintln!( + "Applied Linux WebKitGTK NVIDIA on Wayland environment variable: \ + {NVIDIA_EXPLICIT_SYNC_ENV}=1" + ); + } +} + +/// Encodes the decision on which webkitgtk-related variables should be set. +/// Returns (should_set_dmabuf, should_set_explicit_sync) bool pair. +#[cfg(target_os = "linux")] +fn should_set_webkit_variables() -> (bool, bool) { + let nvidia_driver = has_nvidia_driver(); + ( + nvidia_driver && env::var_os(WEBKIT_DMABUF_ENV).is_none(), + nvidia_driver && is_wayland_session() && env::var_os(NVIDIA_EXPLICIT_SYNC_ENV).is_none(), + ) +} + +#[cfg(target_os = "linux")] +fn is_wayland_session() -> bool { + env::var("XDG_SESSION_TYPE") + .is_ok_and(|session_type| session_type.eq_ignore_ascii_case("wayland")) + || env::var_os("WAYLAND_DISPLAY").is_some() +} + +#[cfg(target_os = "linux")] +fn has_nvidia_driver() -> bool { + Path::new("/sys/module/nvidia").exists() + || Path::new("/proc/driver/nvidia/version").exists() + || fs::read_to_string("/proc/modules") + .is_ok_and(|modules| proc_modules_has_nvidia(&modules)) +} + +#[cfg(target_os = "linux")] +fn proc_modules_has_nvidia(modules: &str) -> bool { + modules.lines().any(|line| { + line.split_whitespace() + .next() + .is_some_and(|name| name == "nvidia" || name.starts_with("nvidia_")) + }) +} + #[cfg(target_os = "macos")] pub(crate) async fn stats_handler(id: Id, connection_type: ConnectionType) { use crate::database::models::{location_stats::LocationStats, tunnel::TunnelStats}; From 6cf39d9fbad845205deb06e357f1d7d7cfeecc99 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 22 Jul 2026 11:43:16 +0200 Subject: [PATCH 123/155] Integrate command line with main app (#1058) --- .github/workflows/test.yml | 2 +- flake.nix | 7 - nix/package.nix | 2 +- package.json | 10 +- pnpm-lock.yaml | 519 ++++++++-------- src-tauri/Cargo.lock | 66 +- src-tauri/Cargo.toml | 15 +- src-tauri/client-cli/Cargo.toml | 3 - src-tauri/client-cli/src/brand.rs | 4 +- src-tauri/client-cli/src/commands/connect.rs | 22 - .../client-cli/src/commands/disconnect.rs | 40 +- src-tauri/client-cli/src/{main.rs => lib.rs} | 28 +- src-tauri/client-cli/src/mfa.rs | 12 +- src-tauri/client-cli/src/monitor.rs | 42 +- src-tauri/common/src/lib.rs | 30 +- src-tauri/core/src/connection/apple.rs | 1 - .../core/src/database/models/connection.rs | 4 +- src-tauri/core/src/database/models/tunnel.rs | 4 +- src-tauri/core/src/lib.rs | 4 +- src-tauri/core/src/mfa.rs | 4 +- src-tauri/core/src/version.rs | 26 +- src-tauri/deny.toml | 22 +- src-tauri/src/bin/defguard-client.rs | 585 +----------------- src-tauri/src/commands.rs | 3 +- src-tauri/src/gui.rs | 555 +++++++++++++++++ src-tauri/src/lib.rs | 1 + src-tauri/src/tray.rs | 17 +- src-tauri/tauri.conf.json | 2 - swift/build.sh | 6 +- 29 files changed, 979 insertions(+), 1057 deletions(-) rename src-tauri/client-cli/src/{main.rs => lib.rs} (84%) create mode 100644 src-tauri/src/gui.rs diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ad792cf64..f65c31ee3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -83,7 +83,7 @@ jobs: - name: Run cargo deny working-directory: ./src-tauri - run: cargo deny check + run: cargo deny check --hide-inclusion-graph - name: Run tests run: cargo nextest run --workspace --locked --no-fail-fast diff --git a/flake.nix b/flake.nix index 3bae665d0..8da372235 100644 --- a/flake.nix +++ b/flake.nix @@ -68,13 +68,6 @@ mkdir -p $out/bin cp ${defguard-client}/bin/dg $out/bin/ ''; - defguard-cli = - pkgs.runCommand "defguard-cli" { - nativeBuildInputs = [pkgs.makeWrapper]; - } '' - mkdir -p $out/bin - cp ${defguard-client}/bin/defguard-cli $out/bin/ - ''; }; checks.default = defguard-client; diff --git a/nix/package.nix b/nix/package.nix index b2ae60221..8c519b919 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -90,7 +90,7 @@ inherit pname version pnpm; src = ../.; fetcherVersion = 3; - hash = "sha256-aW+79nfdATunGtxhyHHOE3RqkOX19PH97cWxw+5QlS0="; + hash = "sha256-wHUC14/bATR1HZ1SN+XJKZ64wFirXnSHL2aHblddOes="; }; # Prefetch pnpm dependencies for the new UI (separate pnpm project). diff --git a/package.json b/package.json index 3914c027e..e1738bcf7 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@tauri-apps/api": "^2.11.1", "@tauri-apps/plugin-clipboard-manager": "^2.3.2", "@tauri-apps/plugin-deep-link": "^2.4.9", - "@tauri-apps/plugin-dialog": "^2.7.1", + "@tauri-apps/plugin-dialog": "^2.7.2", "@tauri-apps/plugin-fs": "^2.5.1", "@tauri-apps/plugin-http": "^2.5.9", "@tauri-apps/plugin-log": "^2.9.0", @@ -67,7 +67,7 @@ "fast-deep-equal": "^3.1.3", "file-saver": "^2.0.5", "get-text-width": "^1.0.3", - "html-react-parser": "^6.1.4", + "html-react-parser": "^6.1.5", "itertools": "^2.7.1", "js-base64": "^3.9.1", "lodash-es": "^4.18.1", @@ -81,7 +81,7 @@ "react-auth-code-input": "^3.2.1", "react-click-away-listener": "^2.4.2", "react-dom": "^19.2.7", - "react-hook-form": "^7.81.0", + "react-hook-form": "^7.82.0", "react-hotkeys-hook": "^5.3.3", "react-loading-skeleton": "^3.5.0", "react-markdown": "^10.1.0", @@ -110,9 +110,9 @@ "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.2.0", "@vitejs/plugin-react-swc": "^4.3.1", - "autoprefixer": "^10.5.3", + "autoprefixer": "^10.5.4", "npm-run-all": "^4.1.5", - "postcss": "^8.5.19", + "postcss": "^8.5.20", "prettier": "^3.9.5", "sass": "~1.92.1", "typedoc": "^0.28.20", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a87978b58..7d9422668 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: version: 0.27.20(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@hookform/resolvers': specifier: ^3.10.0 - version: 3.10.0(react-hook-form@7.81.0(react@19.2.7)) + version: 3.10.0(react-hook-form@7.82.0(react@19.2.7)) '@react-hook/resize-observer': specifier: ^2.0.2 version: 2.0.2(react@19.2.7) @@ -39,8 +39,8 @@ importers: specifier: ^2.4.9 version: 2.4.9 '@tauri-apps/plugin-dialog': - specifier: ^2.7.1 - version: 2.7.1 + specifier: ^2.7.2 + version: 2.7.2 '@tauri-apps/plugin-fs': specifier: ^2.5.1 version: 2.5.1 @@ -102,8 +102,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 html-react-parser: - specifier: ^6.1.4 - version: 6.1.4(@types/react@19.2.17)(react@19.2.7) + specifier: ^6.1.5 + version: 6.1.5(@types/react@19.2.17)(react@19.2.7) itertools: specifier: ^2.7.1 version: 2.7.1 @@ -144,8 +144,8 @@ importers: specifier: ^19.2.7 version: 19.2.7(react@19.2.7) react-hook-form: - specifier: ^7.81.0 - version: 7.81.0(react@19.2.7) + specifier: ^7.82.0 + version: 7.82.0(react@19.2.7) react-hotkeys-hook: specifier: ^5.3.3 version: 5.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -154,7 +154,7 @@ importers: version: 3.5.0(react@19.2.7) react-markdown: specifier: ^10.1.0 - version: 10.1.0(@types/react@19.2.17)(react@19.2.7) + version: 10.1.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0) react-qr-code: specifier: ^2.2.0 version: 2.2.0(react@19.2.7) @@ -184,17 +184,17 @@ importers: version: 3.25.76 zustand: specifier: ^5.0.14 - version: 5.0.14(@types/react@19.2.17)(immer@11.1.11)(react@19.2.7)(use-sync-external-store@1.6.0(react@19.2.7)) + version: 5.0.14(@types/react@19.2.17)(immer@11.1.15)(react@19.2.7)(use-sync-external-store@1.6.0(react@19.2.7)) devDependencies: '@biomejs/biome': specifier: 2.4.16 version: 2.4.16 '@hookform/devtools': specifier: ^4.4.0 - version: 4.4.0(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + version: 4.4.0(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@7.2.0) '@svgr/cli': specifier: ^8.1.0 - version: 8.1.0(typescript@6.0.3) + version: 8.1.0(supports-color@7.2.0)(typescript@6.0.3) '@tanstack/react-query': specifier: ^5.101.2 version: 5.101.2(react@19.2.7) @@ -221,19 +221,19 @@ importers: version: 19.2.3(@types/react@19.2.17) '@vitejs/plugin-react': specifier: ^5.2.0 - version: 5.2.0(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0)) + version: 5.2.0(supports-color@7.2.0)(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0)) '@vitejs/plugin-react-swc': specifier: ^4.3.1 version: 4.3.1(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0)) autoprefixer: - specifier: ^10.5.3 - version: 10.5.3(postcss@8.5.19) + specifier: ^10.5.4 + version: 10.5.4(postcss@8.5.20) npm-run-all: specifier: ^4.1.5 version: 4.1.5 postcss: - specifier: ^8.5.19 - version: 8.5.19 + specifier: ^8.5.20 + version: 8.5.20 prettier: specifier: ^3.9.5 version: 3.9.5 @@ -660,92 +660,86 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@parcel/watcher-android-arm64@2.5.6': - resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + '@parcel/watcher-android-arm64@2.6.0': + resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] - '@parcel/watcher-darwin-arm64@2.5.6': - resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + '@parcel/watcher-darwin-arm64@2.6.0': + resolution: {integrity: sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.5.6': - resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + '@parcel/watcher-darwin-x64@2.6.0': + resolution: {integrity: sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.5.6': - resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + '@parcel/watcher-freebsd-x64@2.6.0': + resolution: {integrity: sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] - '@parcel/watcher-linux-arm-glibc@2.5.6': - resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + '@parcel/watcher-linux-arm-glibc@2.6.0': + resolution: {integrity: sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] libc: [glibc] - '@parcel/watcher-linux-arm-musl@2.5.6': - resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + '@parcel/watcher-linux-arm-musl@2.6.0': + resolution: {integrity: sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] libc: [musl] - '@parcel/watcher-linux-arm64-glibc@2.5.6': - resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + '@parcel/watcher-linux-arm64-glibc@2.6.0': + resolution: {integrity: sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@parcel/watcher-linux-arm64-musl@2.5.6': - resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + '@parcel/watcher-linux-arm64-musl@2.6.0': + resolution: {integrity: sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] libc: [musl] - '@parcel/watcher-linux-x64-glibc@2.5.6': - resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + '@parcel/watcher-linux-x64-glibc@2.6.0': + resolution: {integrity: sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] libc: [glibc] - '@parcel/watcher-linux-x64-musl@2.5.6': - resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + '@parcel/watcher-linux-x64-musl@2.6.0': + resolution: {integrity: sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] libc: [musl] - '@parcel/watcher-win32-arm64@2.5.6': - resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + '@parcel/watcher-win32-arm64@2.6.0': + resolution: {integrity: sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] - '@parcel/watcher-win32-ia32@2.5.6': - resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} - engines: {node: '>= 10.0.0'} - cpu: [ia32] - os: [win32] - - '@parcel/watcher-win32-x64@2.5.6': - resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + '@parcel/watcher-win32-x64@2.6.0': + resolution: {integrity: sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] - '@parcel/watcher@2.5.6': - resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + '@parcel/watcher@2.6.0': + resolution: {integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==} engines: {node: '>= 10.0.0'} '@react-hook/latest@1.0.3': @@ -1052,86 +1046,86 @@ packages: peerDependencies: '@svgr/core': '*' - '@swc/core-darwin-arm64@1.15.43': - resolution: {integrity: sha512-v1aVuvXdo/BHxJzco9V2xpHrvwWmhfS8t6gziY5wJxd+Z2h8AeJRnAwPD8itCDaGXVBwJ/CaKfxEzTkG0Va0OA==} + '@swc/core-darwin-arm64@1.15.46': + resolution: {integrity: sha512-IsISIT22EfktVJrlvIpnAxG2u/A9aob9l99HMlx80x72WlFmFPk1V3UhkEzx86eJP8hw049KTFv/RISho2cq2Q==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.15.43': - resolution: {integrity: sha512-lp3d4Lamc8dt5huYdGLSR+9hLxmfr1jb0l+4XXG2zPqZwYWRN9R0U2qYoTrggiU2RWW0oV9VbWM3kBnqIc2kdQ==} + '@swc/core-darwin-x64@1.15.46': + resolution: {integrity: sha512-4Tj4ppVIPCmUMpmGFiGtyEriwLyJ+yi/US4WfBrP/ok8COGddDZXLEzQETnKyK46mjvr1v0jevrS23zjoff7vA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.15.43': - resolution: {integrity: sha512-JWTQQELtsG5GgphDrr/XqqmM2pDN3cZqbMS0Mrg+iTiXL3F74sn/S2IyYE/5u4h2KLkTf9qQ7dXyxsbx7YzkeA==} + '@swc/core-linux-arm-gnueabihf@1.15.46': + resolution: {integrity: sha512-i8tUGnNjyOgMmfmgFSg4aeJLQoFyfpIHK5FjpQAwpRyQIqEUB2w1e8zIDQzY1WhOxx8NoS1S5iUL813Un4Sf5A==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.15.43': - resolution: {integrity: sha512-B4otJRdPWIsmiSBf0uG7Z/+vMWmkufjz5MmYxubwKuZazDW14Zd3symga1N62QR4RT+kEFeHEgsXfZGyn/w0hw==} + '@swc/core-linux-arm64-gnu@1.15.46': + resolution: {integrity: sha512-c0OnhqzdhfOvv6qhNCcByepB+sNYOGZyhtr2Qa6ZCHvAWTYhSRw4j/u92Stue9PbZ/6q74b9nHzi76+kVzqQHQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] libc: [glibc] - '@swc/core-linux-arm64-musl@1.15.43': - resolution: {integrity: sha512-6zB6OnpViBxYy4tgY3v2i6AZY9fwkcHZ032UOwtwUuW1d19sdT07qF0kZe6/3UR1tUaK6jjg2rmVcUIBCEYVjQ==} + '@swc/core-linux-arm64-musl@1.15.46': + resolution: {integrity: sha512-imyRpNEcUzFQFV2LE4jL68ErvmKEuZCbvZru77iQREunJ+bR4i658cupTgtG1mLYM3F1Tzy3Sb9xYb02KghWTg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] libc: [musl] - '@swc/core-linux-ppc64-gnu@1.15.43': - resolution: {integrity: sha512-coxE1ZWdB3uSDVNoEtYNrRi/1epvckZx9cTJ8ICUxTMTxGk+yvQ/Twacp3ruZSaMPGCriUjP86C37VhaT6nyRg==} + '@swc/core-linux-ppc64-gnu@1.15.46': + resolution: {integrity: sha512-ctEfcl/HcUeomK33cbySiHZm98GEDIxTm1EkpBsYCiHxElYBzvTXVeuQT2YwbUXn9XCrjiw4ipyUNk33k26qRg==} engines: {node: '>=10'} cpu: [ppc64] os: [linux] libc: [glibc] - '@swc/core-linux-s390x-gnu@1.15.43': - resolution: {integrity: sha512-lXfLhs+LpBsD5inuYx+YDH5WsPPBQ95KPUiy8P5wq9ob9xKDZFqwNfU2QW6bGO8NqRO/H9JQomTSt5Yyh+FGfA==} + '@swc/core-linux-s390x-gnu@1.15.46': + resolution: {integrity: sha512-DxlMdnt84TtRVTv7WL/thWyz9+QU8QZNNoAP9rrk0P68LziuhfePp8MjQ44zIprpTHTsEwyziIuGUUN5iSC1bQ==} engines: {node: '>=10'} cpu: [s390x] os: [linux] libc: [glibc] - '@swc/core-linux-x64-gnu@1.15.43': - resolution: {integrity: sha512-07XnKwTmKy8TGOZG3D9fRnLWGynxPjwQnZLVmBFbo6F+7vHYzBIOuwXEhemrChBWb6yDNZsVCcMWCPX6FDD2xg==} + '@swc/core-linux-x64-gnu@1.15.46': + resolution: {integrity: sha512-SKxI7J6t90XPl8hRUqtJi9NfGdunN/E/vZMc7Bc0figeRdOPDBT+Tm8g7cx9xM0T0mewh2l+8dewa3Am27/P+A==} engines: {node: '>=10'} cpu: [x64] os: [linux] libc: [glibc] - '@swc/core-linux-x64-musl@1.15.43': - resolution: {integrity: sha512-TJc+bsSIaBh+hZvZ5GRtW/K1bw66TJ9vsUwvVIsZdiWxU5ObLwZvfcnZ3UpgVfMnFibRes9uriJrQNBHEEogRQ==} + '@swc/core-linux-x64-musl@1.15.46': + resolution: {integrity: sha512-qj9T6B7bosI0VEsrWOVXZN1OXxS8Tp63ywyrLxNdOycnUtLdkgYcoBsN5y8ImnDDsnwrEWZOy1e+J4xSe7mA3Q==} engines: {node: '>=10'} cpu: [x64] os: [linux] libc: [musl] - '@swc/core-win32-arm64-msvc@1.15.43': - resolution: {integrity: sha512-jfd7s2/bUQYkOHLs+LWQNKZdmDa8+sufKLllhpWAhVQ2GDCwsHe3vR/j+OSiItZNtkzFuaawa3+SAKz9y5gYfw==} + '@swc/core-win32-arm64-msvc@1.15.46': + resolution: {integrity: sha512-8p7l4c3LU+eA5g9Et1JPhNeMC1oQwXTGU+uah8DPIBX7YXzqswvaBtyKVmXefVGi/DJU1x3YJsc3mbAp9aWzSQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.15.43': - resolution: {integrity: sha512-rLAE8JvucqEW1ZGohxPQrQWPBQeJG4+ypKbWfdlU/qmKScvCkxf9/Jxnzki1dkUQCQ7P5Enp13RlvqOlvx/32g==} + '@swc/core-win32-ia32-msvc@1.15.46': + resolution: {integrity: sha512-tUEnfr3Bn9u6FOjUb3PN9p+09qZC2j+wNDLKHzXXZn22rqGcUqR/ohCRSS+nG9B9+X+U+3FewNEHJkTmdIvMjQ==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.15.43': - resolution: {integrity: sha512-h8MLDHZcfIukwQWj03rIJZx1I0E81AYj2X7J/nGErG4nz+QAv6G1Z+peotvinL3lqpbo32tLYSMFo32/ySzxKg==} + '@swc/core-win32-x64-msvc@1.15.46': + resolution: {integrity: sha512-Vux7UDzBJYQggSuPfcl2w9iu+IJpgpRCxHzgCaVkELnAXAE4XZMOTX9HNcaNiwfeIDqdu2rkr69RuDm6wY8neA==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.15.43': - resolution: {integrity: sha512-1CuKjFkPxIgGdeHVuNbkxmBxkcbdc08u0aiI43pFq6yY1tTVKmXT9hFEooyyKs/sJ3xf1GPHyEwTtk9Xl8dvQw==} + '@swc/core@1.15.46': + resolution: {integrity: sha512-Ri3em2mBpq3h2zSPliCYl63otDGqek8PPEfv2nWgRQEbZ/VBCNyypVTVQ6cEbTCXBhy+WE2T3fQb08moIyuYaw==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -1256,8 +1250,8 @@ packages: '@tauri-apps/plugin-deep-link@2.4.9': resolution: {integrity: sha512-u0SKOUHnJ1wqeqXsDFq2+kASCBj9xxbG0g9XZWPy9SOmU4wXtp6b/wiYpm6oH6/5fBTQsLqnLhIvqLBRpgHJlA==} - '@tauri-apps/plugin-dialog@2.7.1': - resolution: {integrity: sha512-OK1UBXYt+ojcmxMktzzuyonYIFta8CmAASpX+CA+DTGK24KlHjhYI6x2iOJ/TjZF4N7/ACK1oFmEOjIY9IhzOQ==} + '@tauri-apps/plugin-dialog@2.7.2': + resolution: {integrity: sha512-pX0IGm1I3I6wc+zeKYcq1GSqogK6okCNX5fOdaNU5ab1AjGS6l1E5wFNjEb7meg7ZFSp0JUs+0jQGQNyOvLrsg==} '@tauri-apps/plugin-fs@2.5.1': resolution: {integrity: sha512-9Lz+Jopp6QyeEWhlpkMx4R/+P9HgR+AVAI4vOZhlT8Xaymtz8iVI/Ov984/XTqgJz/5gz5NretqPB/XEMS3NhQ==} @@ -1425,8 +1419,8 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} - autoprefixer@10.5.3: - resolution: {integrity: sha512-bJRzflk8GgE4JX+iZNEwz9f9p460NCHnU7bd+CZ9vIjIlZuTkt6F3WSl2oNO8StZBFx17nLEsiQ6H2wcZiY7nA==} + autoprefixer@10.5.4: + resolution: {integrity: sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -1762,8 +1756,8 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - electron-to-chromium@1.5.392: - resolution: {integrity: sha512-1yQq3VQCZRwsnYc67Oc+1fge6Lwtn0hzi6zmEVkB61Zx21kTbwJAW4dFLadl5Rc1tKhG/kSpYXnfiAhu0f0a1g==} + electron-to-chromium@1.5.393: + resolution: {integrity: sha512-kiDJdIUawuEIcp9XoICKp1iTYDEbgguIPq526N1Q7jIQDeQ3CqoMx71025PI/7E48Ddtw2HuWsVjY7afEgNxmg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1985,8 +1979,8 @@ packages: html-dom-parser@8.0.0: resolution: {integrity: sha512-cWLJ8mt930VceOzVfY/J+T1ou9v3ENT0BgWqy5aEZjdFp37TYLXULjX8u0vD2rBpFAkK5IofOPl0y4Gq0QLIyA==} - html-react-parser@6.1.4: - resolution: {integrity: sha512-oNZVIuYir7XOFuQZ7mtvcIC5cTYBVqCDOhJ1rSH4V1nVDs71bHZXFlKdpSuOm5TZT7V2uxCxA7HqTkCNHW32KQ==} + html-react-parser@6.1.5: + resolution: {integrity: sha512-jhdRR0fSkdkVlAmDIk5lS+IMSjCgFSfe+nI69DUwaxkWOgid2mk7RhoYxsQ7B6hzCghAI5YPz2B1jbskHhbaLg==} peerDependencies: '@types/react': 0.14 || 15 || 16 || 17 || 18 || 19 react: 0.14 || 15 || 16 || 17 || 18 || 19 @@ -2001,8 +1995,8 @@ packages: resolution: {integrity: sha512-Tz7u1i95/g2x2jz81+x0FBVhBhY5aRTvD3tXXdFaljuNdzDLJ8UGNRrTcj2cgQvAg3iW/h77Fz15nLW0L0CrZw==} engines: {node: '>=20.19.0'} - immer@11.1.11: - resolution: {integrity: sha512-qzXuyXAkPySAGYkfsAwodDPWT8Zm7/Uo5BNt4BjhMhG5WlWyZZ4wQqnWwdS8kjlQ1Cwu6gjw3A6+0gTQwlyYtw==} + immer@11.1.15: + resolution: {integrity: sha512-VrNANlmnWQnh5COXIIOQXM9oOJw7naGKlBT74ZOOR6lpVXc3gFEu9FJLDFcpCJ2j+NWr8TIwtWD//T6ZX6TKiQ==} immutable@5.1.9: resolution: {integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==} @@ -2021,6 +2015,9 @@ packages: inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + inline-style-parser@0.2.9: + resolution: {integrity: sha512-IttN8BqKLxzUrnTqHI+/hwAJQItBAUjdoHERCDv+oOuX48VP6bzW8+QjOXSfoevzq3YrYAwX1uLHp8TqO9yIeg==} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -2488,8 +2485,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.19: - resolution: {integrity: sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==} + postcss@8.5.20: + resolution: {integrity: sha512-lW616l85ucIQL+FocMmL7pQFPqBmwejrCMg+iPxyImlrANNJG9NHq/RkyCZopDhd8C3LA03PHRJDjkbGu8vvug==} engines: {node: ^10 || ^12 || >=14} prettier@2.8.8: @@ -2537,8 +2534,8 @@ packages: peerDependencies: react: ^19.2.7 - react-hook-form@7.81.0: - resolution: {integrity: sha512-ocbmr2p5KBMoAfj4WCUvped33lVi1Kd5DuDUvQDnB6VEAacOjPI/jMbtDdbhco4y9ct4xUuCmMY0b/C9L0QHjw==} + react-hook-form@7.82.0: + resolution: {integrity: sha512-Zw/uFZ2dO+02GHlBn7JFGn8kZJ7LdM33B/0BXOovzFay+CMhf94JMw5BVu+F1tVkUKjNvBuaE3fz5BJhga10Tg==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 @@ -2819,14 +2816,14 @@ packages: style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} - style-to-js@2.0.1: - resolution: {integrity: sha512-j5whjFV29FyWf+/gWc/Fax7DQqojc5CzZ2kxOCuSMoZDGdciF+Ki1HyZ/GPOxdbfIw0suKUBmG1I3qa7JZKRTA==} + style-to-js@2.0.2: + resolution: {integrity: sha512-ctgbFvvi406Jvhi/s6TJtX6XYYCCTg6POgsL+SLmrl2RHFgwulepqtYPrtKuEmT8kmyk/+fxfNzuhRLO4zsASg==} style-to-object@1.0.14: resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} - style-to-object@2.0.0: - resolution: {integrity: sha512-3zaRtBpwCy9AnYQYfgZ8tIMPn/PlQpW3wtRMB+w0xVtBzo8/m7KKGi7cR56yQ6udLz5MPzwRqfKOZ3O+Oc6VpA==} + style-to-object@2.0.2: + resolution: {integrity: sha512-QmbXPUylqU80HAgTOJeEOdbA40W9KtxmjMhQy+tq+b8F2aoh3aQLuy82hh2jm2qsC9hR9eI0+eQidTMydKcqRA==} stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} @@ -3098,20 +3095,20 @@ snapshots: '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.7': + '@babel/core@7.29.7(supports-color@7.2.0)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) '@babel/helpers': 7.29.7 '@babel/parser': 7.29.7 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@7.2.0) '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3136,19 +3133,19 @@ snapshots: '@babel/helper-globals@7.29.7': {} - '@babel/helper-module-imports@7.29.7': + '@babel/helper-module-imports@7.29.7(supports-color@7.2.0)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@7.2.0) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -3169,14 +3166,14 @@ snapshots: dependencies: '@babel/types': 7.29.7 - '@babel/plugin-transform-react-jsx-self@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-transform-react-jsx-self@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-react-jsx-source@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-transform-react-jsx-source@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/helper-plugin-utils': 7.29.7 '@babel/runtime@7.29.7': {} @@ -3187,7 +3184,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/types': 7.29.7 - '@babel/traverse@7.29.7': + '@babel/traverse@7.29.7(supports-color@7.2.0)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 @@ -3195,7 +3192,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/template': 7.29.7 '@babel/types': 7.29.7 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -3239,9 +3236,9 @@ snapshots: '@biomejs/cli-win32-x64@2.4.16': optional: true - '@emotion/babel-plugin@11.13.5': + '@emotion/babel-plugin@11.13.5(supports-color@7.2.0)': dependencies: - '@babel/helper-module-imports': 7.29.7 + '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) '@babel/runtime': 7.29.7 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 @@ -3271,10 +3268,10 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.2.17)(react@19.2.7)': + '@emotion/react@11.14.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0)': dependencies: '@babel/runtime': 7.29.7 - '@emotion/babel-plugin': 11.13.5 + '@emotion/babel-plugin': 11.13.5(supports-color@7.2.0) '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.7) @@ -3297,12 +3294,12 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.17)(react@19.2.7))(@types/react@19.2.17)(react@19.2.7)': + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0))(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0)': dependencies: '@babel/runtime': 7.29.7 - '@emotion/babel-plugin': 11.13.5 + '@emotion/babel-plugin': 11.13.5(supports-color@7.2.0) '@emotion/is-prop-valid': 1.4.0 - '@emotion/react': 11.14.0(@types/react@19.2.17)(react@19.2.7) + '@emotion/react': 11.14.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.7) '@emotion/utils': 1.4.2 @@ -3433,10 +3430,10 @@ snapshots: '@shikijs/types': 3.23.0 '@shikijs/vscode-textmate': 10.0.2 - '@hookform/devtools@4.4.0(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@hookform/devtools@4.4.0(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@7.2.0)': dependencies: - '@emotion/react': 11.14.0(@types/react@19.2.17)(react@19.2.7) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.17)(react@19.2.7))(@types/react@19.2.17)(react@19.2.7) + '@emotion/react': 11.14.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0))(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0) '@types/lodash': 4.17.24 little-state-machine: 4.8.1(react@19.2.7) lodash: 4.18.1 @@ -3449,9 +3446,9 @@ snapshots: - '@types/react' - supports-color - '@hookform/resolvers@3.10.0(react-hook-form@7.81.0(react@19.2.7))': + '@hookform/resolvers@3.10.0(react-hook-form@7.82.0(react@19.2.7))': dependencies: - react-hook-form: 7.81.0(react@19.2.7) + react-hook-form: 7.82.0(react@19.2.7) '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -3472,65 +3469,61 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@parcel/watcher-android-arm64@2.5.6': - optional: true - - '@parcel/watcher-darwin-arm64@2.5.6': + '@parcel/watcher-android-arm64@2.6.0': optional: true - '@parcel/watcher-darwin-x64@2.5.6': + '@parcel/watcher-darwin-arm64@2.6.0': optional: true - '@parcel/watcher-freebsd-x64@2.5.6': + '@parcel/watcher-darwin-x64@2.6.0': optional: true - '@parcel/watcher-linux-arm-glibc@2.5.6': + '@parcel/watcher-freebsd-x64@2.6.0': optional: true - '@parcel/watcher-linux-arm-musl@2.5.6': + '@parcel/watcher-linux-arm-glibc@2.6.0': optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.6': + '@parcel/watcher-linux-arm-musl@2.6.0': optional: true - '@parcel/watcher-linux-arm64-musl@2.5.6': + '@parcel/watcher-linux-arm64-glibc@2.6.0': optional: true - '@parcel/watcher-linux-x64-glibc@2.5.6': + '@parcel/watcher-linux-arm64-musl@2.6.0': optional: true - '@parcel/watcher-linux-x64-musl@2.5.6': + '@parcel/watcher-linux-x64-glibc@2.6.0': optional: true - '@parcel/watcher-win32-arm64@2.5.6': + '@parcel/watcher-linux-x64-musl@2.6.0': optional: true - '@parcel/watcher-win32-ia32@2.5.6': + '@parcel/watcher-win32-arm64@2.6.0': optional: true - '@parcel/watcher-win32-x64@2.5.6': + '@parcel/watcher-win32-x64@2.6.0': optional: true - '@parcel/watcher@2.5.6': + '@parcel/watcher@2.6.0': dependencies: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 picomatch: 4.0.5 optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.6 - '@parcel/watcher-darwin-arm64': 2.5.6 - '@parcel/watcher-darwin-x64': 2.5.6 - '@parcel/watcher-freebsd-x64': 2.5.6 - '@parcel/watcher-linux-arm-glibc': 2.5.6 - '@parcel/watcher-linux-arm-musl': 2.5.6 - '@parcel/watcher-linux-arm64-glibc': 2.5.6 - '@parcel/watcher-linux-arm64-musl': 2.5.6 - '@parcel/watcher-linux-x64-glibc': 2.5.6 - '@parcel/watcher-linux-x64-musl': 2.5.6 - '@parcel/watcher-win32-arm64': 2.5.6 - '@parcel/watcher-win32-ia32': 2.5.6 - '@parcel/watcher-win32-x64': 2.5.6 + '@parcel/watcher-android-arm64': 2.6.0 + '@parcel/watcher-darwin-arm64': 2.6.0 + '@parcel/watcher-darwin-x64': 2.6.0 + '@parcel/watcher-freebsd-x64': 2.6.0 + '@parcel/watcher-linux-arm-glibc': 2.6.0 + '@parcel/watcher-linux-arm-musl': 2.6.0 + '@parcel/watcher-linux-arm64-glibc': 2.6.0 + '@parcel/watcher-linux-arm64-musl': 2.6.0 + '@parcel/watcher-linux-x64-glibc': 2.6.0 + '@parcel/watcher-linux-x64-musl': 2.6.0 + '@parcel/watcher-win32-arm64': 2.6.0 + '@parcel/watcher-win32-x64': 2.6.0 optional: true '@react-hook/latest@1.0.3(react@19.2.7)': @@ -3551,7 +3544,7 @@ snapshots: dependencies: '@standard-schema/spec': 1.1.0 '@standard-schema/utils': 0.3.0 - immer: 11.1.11 + immer: 11.1.15 redux: 5.0.1 redux-thunk: 3.1.0(redux@5.0.1) reselect: 5.2.0 @@ -3691,56 +3684,56 @@ snapshots: '@standard-schema/utils@0.3.0': {} - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.7)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.7)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.7)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.7)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.7)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.7)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.7)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.7)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-preset@8.1.0(@babel/core@7.29.7)': + '@svgr/babel-preset@8.1.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.7 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.7) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.7) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.7) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.7) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.7) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.7) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.7) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.7) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) - '@svgr/cli@8.1.0(typescript@6.0.3)': + '@svgr/cli@8.1.0(supports-color@7.2.0)(typescript@6.0.3)': dependencies: - '@svgr/core': 8.1.0(typescript@6.0.3) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3)) - '@svgr/plugin-prettier': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3))(typescript@6.0.3) + '@svgr/core': 8.1.0(supports-color@7.2.0)(typescript@6.0.3) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3))(supports-color@7.2.0) + '@svgr/plugin-prettier': 8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3))(typescript@6.0.3) camelcase: 6.3.0 chalk: 4.1.2 commander: 9.5.0 @@ -3751,10 +3744,10 @@ snapshots: - supports-color - typescript - '@svgr/core@8.1.0(typescript@6.0.3)': + '@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3)': dependencies: - '@babel/core': 7.29.7 - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7(supports-color@7.2.0)) camelcase: 6.3.0 cosmiconfig: 8.3.6(typescript@6.0.3) snake-case: 3.0.4 @@ -3767,84 +3760,84 @@ snapshots: '@babel/types': 7.29.7 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.7 - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7) - '@svgr/core': 8.1.0(typescript@6.0.3) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/core': 8.1.0(supports-color@7.2.0)(typescript@6.0.3) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@svgr/plugin-prettier@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))': + '@svgr/plugin-prettier@8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3))': dependencies: - '@svgr/core': 8.1.0(typescript@6.0.3) + '@svgr/core': 8.1.0(supports-color@7.2.0)(typescript@6.0.3) deepmerge: 4.3.1 prettier: 2.8.8 - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))(typescript@6.0.3)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3))(typescript@6.0.3)': dependencies: - '@svgr/core': 8.1.0(typescript@6.0.3) + '@svgr/core': 8.1.0(supports-color@7.2.0)(typescript@6.0.3) cosmiconfig: 8.3.6(typescript@6.0.3) deepmerge: 4.3.1 svgo: 3.3.4 transitivePeerDependencies: - typescript - '@swc/core-darwin-arm64@1.15.43': + '@swc/core-darwin-arm64@1.15.46': optional: true - '@swc/core-darwin-x64@1.15.43': + '@swc/core-darwin-x64@1.15.46': optional: true - '@swc/core-linux-arm-gnueabihf@1.15.43': + '@swc/core-linux-arm-gnueabihf@1.15.46': optional: true - '@swc/core-linux-arm64-gnu@1.15.43': + '@swc/core-linux-arm64-gnu@1.15.46': optional: true - '@swc/core-linux-arm64-musl@1.15.43': + '@swc/core-linux-arm64-musl@1.15.46': optional: true - '@swc/core-linux-ppc64-gnu@1.15.43': + '@swc/core-linux-ppc64-gnu@1.15.46': optional: true - '@swc/core-linux-s390x-gnu@1.15.43': + '@swc/core-linux-s390x-gnu@1.15.46': optional: true - '@swc/core-linux-x64-gnu@1.15.43': + '@swc/core-linux-x64-gnu@1.15.46': optional: true - '@swc/core-linux-x64-musl@1.15.43': + '@swc/core-linux-x64-musl@1.15.46': optional: true - '@swc/core-win32-arm64-msvc@1.15.43': + '@swc/core-win32-arm64-msvc@1.15.46': optional: true - '@swc/core-win32-ia32-msvc@1.15.43': + '@swc/core-win32-ia32-msvc@1.15.46': optional: true - '@swc/core-win32-x64-msvc@1.15.43': + '@swc/core-win32-x64-msvc@1.15.46': optional: true - '@swc/core@1.15.43': + '@swc/core@1.15.46': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.27 optionalDependencies: - '@swc/core-darwin-arm64': 1.15.43 - '@swc/core-darwin-x64': 1.15.43 - '@swc/core-linux-arm-gnueabihf': 1.15.43 - '@swc/core-linux-arm64-gnu': 1.15.43 - '@swc/core-linux-arm64-musl': 1.15.43 - '@swc/core-linux-ppc64-gnu': 1.15.43 - '@swc/core-linux-s390x-gnu': 1.15.43 - '@swc/core-linux-x64-gnu': 1.15.43 - '@swc/core-linux-x64-musl': 1.15.43 - '@swc/core-win32-arm64-msvc': 1.15.43 - '@swc/core-win32-ia32-msvc': 1.15.43 - '@swc/core-win32-x64-msvc': 1.15.43 + '@swc/core-darwin-arm64': 1.15.46 + '@swc/core-darwin-x64': 1.15.46 + '@swc/core-linux-arm-gnueabihf': 1.15.46 + '@swc/core-linux-arm64-gnu': 1.15.46 + '@swc/core-linux-arm64-musl': 1.15.46 + '@swc/core-linux-ppc64-gnu': 1.15.46 + '@swc/core-linux-s390x-gnu': 1.15.46 + '@swc/core-linux-x64-gnu': 1.15.46 + '@swc/core-linux-x64-musl': 1.15.46 + '@swc/core-win32-arm64-msvc': 1.15.46 + '@swc/core-win32-ia32-msvc': 1.15.46 + '@swc/core-win32-x64-msvc': 1.15.46 '@swc/counter@0.1.3': {} @@ -3932,7 +3925,7 @@ snapshots: dependencies: '@tauri-apps/api': 2.11.1 - '@tauri-apps/plugin-dialog@2.7.1': + '@tauri-apps/plugin-dialog@2.7.2': dependencies: '@tauri-apps/api': 2.11.1 @@ -4075,16 +4068,16 @@ snapshots: '@vitejs/plugin-react-swc@4.3.1(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - '@swc/core': 1.15.43 + '@swc/core': 1.15.46 vite: 7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@5.2.0(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0))': + '@vitejs/plugin-react@5.2.0(supports-color@7.2.0)(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0))': dependencies: - '@babel/core': 7.29.7 - '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 @@ -4121,13 +4114,13 @@ snapshots: async-function@1.0.0: {} - autoprefixer@10.5.3(postcss@8.5.19): + autoprefixer@10.5.4(postcss@8.5.20): dependencies: browserslist: 4.28.6 caniuse-lite: 1.0.30001806 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.19 + postcss: 8.5.20 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -4167,7 +4160,7 @@ snapshots: dependencies: baseline-browser-mapping: 2.10.43 caniuse-lite: 1.0.30001806 - electron-to-chromium: 1.5.392 + electron-to-chromium: 1.5.393 node-releases: 2.0.51 update-browserslist-db: 1.2.3(browserslist@4.28.6) @@ -4368,9 +4361,11 @@ snapshots: dayjs@1.11.21: {} - debug@4.4.3: + debug@4.4.3(supports-color@7.2.0): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 7.2.0 decimal.js-light@2.5.1: {} @@ -4452,7 +4447,7 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - electron-to-chromium@1.5.392: {} + electron-to-chromium@1.5.393: {} emoji-regex@8.0.0: {} @@ -4721,7 +4716,7 @@ snapshots: '@ungap/structured-clone': 1.3.3 unist-util-position: 5.0.0 - hast-util-to-jsx-runtime@2.3.6: + hast-util-to-jsx-runtime@2.3.6(supports-color@7.2.0): dependencies: '@types/estree': 1.0.9 '@types/hast': 3.0.5 @@ -4730,9 +4725,9 @@ snapshots: devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) + mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) + mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) property-information: 7.2.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.21 @@ -4756,13 +4751,13 @@ snapshots: domhandler: 6.0.1 htmlparser2: 12.0.0 - html-react-parser@6.1.4(@types/react@19.2.17)(react@19.2.7): + html-react-parser@6.1.5(@types/react@19.2.17)(react@19.2.7): dependencies: domhandler: 6.0.1 html-dom-parser: 8.0.0 react: 19.2.7 react-property: 2.0.2 - style-to-js: 2.0.1 + style-to-js: 2.0.2 optionalDependencies: '@types/react': 19.2.17 @@ -4775,7 +4770,7 @@ snapshots: domutils: 4.0.2 entities: 8.0.0 - immer@11.1.11: {} + immer@11.1.15: {} immutable@5.1.9: {} @@ -4793,6 +4788,8 @@ snapshots: inline-style-parser@0.2.7: {} + inline-style-parser@0.2.9: {} + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -5000,14 +4997,14 @@ snapshots: math-intrinsics@1.1.0: {} - mdast-util-from-markdown@2.0.3: + mdast-util-from-markdown@2.0.3(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.2 + micromark: 4.0.2(supports-color@7.2.0) micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.1 @@ -5017,18 +5014,18 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdx-expression@2.0.1: + mdast-util-mdx-expression@2.0.1(supports-color@7.2.0): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.2.0: + mdast-util-mdx-jsx@3.2.0(supports-color@7.2.0): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 @@ -5036,7 +5033,7 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -5045,13 +5042,13 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdxjs-esm@2.0.1: + mdast-util-mdxjs-esm@2.0.1(supports-color@7.2.0): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -5212,10 +5209,10 @@ snapshots: micromark-util-types@2.0.2: {} - micromark@4.0.2: + micromark@4.0.2(supports-color@7.2.0): dependencies: '@types/debug': 4.1.13 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -5379,7 +5376,7 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.19: + postcss@8.5.20: dependencies: nanoid: 3.3.16 picocolors: 1.1.1 @@ -5417,7 +5414,7 @@ snapshots: react: 19.2.7 scheduler: 0.27.0 - react-hook-form@7.81.0(react@19.2.7): + react-hook-form@7.82.0(react@19.2.7): dependencies: react: 19.2.7 @@ -5432,17 +5429,17 @@ snapshots: dependencies: react: 19.2.7 - react-markdown@10.1.0(@types/react@19.2.17)(react@19.2.7): + react-markdown@10.1.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0): dependencies: '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/react': 19.2.17 devlop: 1.1.0 - hast-util-to-jsx-runtime: 2.3.6 + hast-util-to-jsx-runtime: 2.3.6(supports-color@7.2.0) html-url-attributes: 3.0.1 mdast-util-to-hast: 13.2.1 react: 19.2.7 - remark-parse: 11.0.0 + remark-parse: 11.0.0(supports-color@7.2.0) remark-rehype: 11.1.2 unified: 11.0.5 unist-util-visit: 5.1.0 @@ -5509,7 +5506,7 @@ snapshots: decimal.js-light: 2.5.1 es-toolkit: 1.49.0 eventemitter3: 5.0.4 - immer: 11.1.11 + immer: 11.1.15 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) react-is: 16.13.1 @@ -5553,10 +5550,10 @@ snapshots: '@types/hast': 3.0.5 hast-util-sanitize: 5.0.2 - remark-parse@11.0.0: + remark-parse@11.0.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) micromark-util-types: 2.0.2 unified: 11.0.5 transitivePeerDependencies: @@ -5643,7 +5640,7 @@ snapshots: immutable: 5.1.9 source-map-js: 1.2.1 optionalDependencies: - '@parcel/watcher': 2.5.6 + '@parcel/watcher': 2.6.0 sax@1.6.0: {} @@ -5793,17 +5790,17 @@ snapshots: dependencies: style-to-object: 1.0.14 - style-to-js@2.0.1: + style-to-js@2.0.2: dependencies: - style-to-object: 2.0.0 + style-to-object: 2.0.2 style-to-object@1.0.14: dependencies: inline-style-parser: 0.2.7 - style-to-object@2.0.0: + style-to-object@2.0.2: dependencies: - inline-style-parser: 0.2.7 + inline-style-parser: 0.2.9 stylis@4.2.0: {} @@ -5996,7 +5993,7 @@ snapshots: esbuild: 0.28.1 fdir: 6.5.0(picomatch@4.0.5) picomatch: 4.0.5 - postcss: 8.5.19 + postcss: 8.5.20 rollup: 4.62.2 tinyglobby: 0.2.17 optionalDependencies: @@ -6080,10 +6077,10 @@ snapshots: zod@3.25.76: {} - zustand@5.0.14(@types/react@19.2.17)(immer@11.1.11)(react@19.2.7)(use-sync-external-store@1.6.0(react@19.2.7)): + zustand@5.0.14(@types/react@19.2.17)(immer@11.1.15)(react@19.2.7)(use-sync-external-store@1.6.0(react@19.2.7)): optionalDependencies: '@types/react': 19.2.17 - immer: 11.1.11 + immer: 11.1.15 react: 19.2.7 use-sync-external-store: 1.6.0(react@19.2.7) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 7c1dc7e8e..554e6d83b 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -453,7 +453,7 @@ checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" dependencies = [ "proc-macro2", "quote", - "syn 3.0.2", + "syn 3.0.3", ] [[package]] @@ -1004,9 +1004,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.2" +version = "4.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd059f9da4f5c36b3787f65d38ccaab1cc315f07b01f89abc8359ee6a8205011" +checksum = "d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7" dependencies = [ "clap_builder", "clap_derive", @@ -1026,14 +1026,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.1" +version = "4.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -1528,6 +1528,7 @@ dependencies = [ "block2 0.6.2", "chrono", "dark-light", + "defguard-cli", "defguard-client-common", "defguard-client-config-sync", "defguard-client-core", @@ -2793,9 +2794,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "gloo-timers" @@ -3057,9 +3058,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" dependencies = [ "atomic-waker", "bytes", @@ -3677,9 +3678,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libdbus-sys" @@ -5598,7 +5599,7 @@ checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" dependencies = [ "proc-macro2", "quote", - "syn 3.0.2", + "syn 3.0.3", ] [[package]] @@ -6090,7 +6091,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.2", + "syn 3.0.3", ] [[package]] @@ -6125,7 +6126,7 @@ checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn 3.0.2", + "syn 3.0.3", ] [[package]] @@ -6767,9 +6768,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a207d6d6a2b7fc470b80443726053f18a2481b7e1eee970597051596567987a3" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", "quote", @@ -7434,7 +7435,7 @@ checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" dependencies = [ "proc-macro2", "quote", - "syn 3.0.2", + "syn 3.0.3", ] [[package]] @@ -7462,9 +7463,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.53" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" +checksum = "3e1d5e639ff6bab73cb6885cc7e7b1de96c3f32c68ec55f3952614bec1092244" dependencies = [ "deranged", "libc", @@ -7484,9 +7485,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", @@ -7528,9 +7529,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.53.0" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d988bcd52dbe076d3d46903332f58c912b87a2c49b1428419a5845154762ffee" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", @@ -7601,13 +7602,14 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" dependencies = [ "bytes", "futures-core", "futures-sink", + "libc", "pin-project-lite", "tokio", ] @@ -8183,9 +8185,9 @@ checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "value-bag" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd4ec1eb1d240636e354a30110a1dfcb37047169a4d9bd6d9d3469df574b5c4" +checksum = "ef73bfbaf3216cb59c205d7176bee1194e0d84348979da31f4a71fefe3c2054e" [[package]] name = "vcpkg" @@ -9536,18 +9538,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.54" +version = "0.8.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" +checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.54" +version = "0.8.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" +checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" dependencies = [ "proc-macro2", "quote", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index f69237a82..cc25a2a98 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -85,13 +85,14 @@ redundant_closure = "warn" anyhow = "1.0" base64.workspace = true chrono.workspace = true -defguard-client-proto = { path = "client-proto" } -defguard-client-core = { path = "core" } -defguard-client-posture = { path = "enterprise/posture" } -defguard-client-config-sync = { path = "enterprise/config-sync" } -defguard-client-service-locations = { path = "enterprise/service-locations" } -defguard-client-provisioning = { path = "enterprise/provisioning" } -defguard-client-common = { path = "common" } +defguard-cli.path = "client-cli" +defguard-client-proto.path = "client-proto" +defguard-client-core.path = "core" +defguard-client-posture.path = "enterprise/posture" +defguard-client-config-sync.path = "enterprise/config-sync" +defguard-client-service-locations.path = "enterprise/service-locations" +defguard-client-provisioning.path = "enterprise/provisioning" +defguard-client-common.path = "common" dark-light = "2.0" defguard_wireguard_rs = { workspace = true, features = ["check_dependencies"] } dirs-next.workspace = true diff --git a/src-tauri/client-cli/Cargo.toml b/src-tauri/client-cli/Cargo.toml index 660c38179..52a0e0c2a 100644 --- a/src-tauri/client-cli/Cargo.toml +++ b/src-tauri/client-cli/Cargo.toml @@ -8,9 +8,6 @@ license-file = "../../LICENSE.md" rust-version.workspace = true version.workspace = true -[[bin]] -name = "defguard-cli" - [dependencies] chrono.workspace = true clap = { workspace = true, features = ["cargo", "derive", "env"] } diff --git a/src-tauri/client-cli/src/brand.rs b/src-tauri/client-cli/src/brand.rs index 29a0dbfbd..b8d34cb49 100644 --- a/src-tauri/client-cli/src/brand.rs +++ b/src-tauri/client-cli/src/brand.rs @@ -45,7 +45,7 @@ pub fn print_banner() { let logo = if use_color { LOGO_COLOR } else { LOGO_MONO }; println!("{logo}"); - let project = common::version_string("defguard-cli"); + let project = common::version_string("defguard-client"); if use_color { println!(" {}", project.bright_yellow().bold()); println!(" {}", COPYRIGHT.dimmed()); @@ -61,7 +61,7 @@ pub fn print_banner() { /// console fonts can't render, and the console may not interpret ANSI. #[cfg(windows)] pub fn print_banner() { - let project = common::version_string("defguard-cli"); + let project = common::version_string("defguard-client"); println!(); println!(" {project}"); println!(" {COPYRIGHT}"); diff --git a/src-tauri/client-cli/src/commands/connect.rs b/src-tauri/client-cli/src/commands/connect.rs index edd5c4adc..8bc847662 100644 --- a/src-tauri/client-cli/src/commands/connect.rs +++ b/src-tauri/client-cli/src/commands/connect.rs @@ -173,30 +173,8 @@ pub async fn handle( ResolvedTarget::Tunnel(tun) => ConnectionTarget::Tunnel(tun), }; - #[cfg(not(target_os = "macos"))] bring_up(conn_target, psk, mtu, &state.pool, routing_override).await?; - #[cfg(target_os = "macos")] - { - use std::sync::{atomic::AtomicBool, Arc}; - - use defguard_core::connection::apple::spawn_runloop_and_wait_for; - - let semaphore = Arc::new(AtomicBool::new(false)); - let semaphore_clone = Arc::clone(&semaphore); - let pool = state.pool.clone(); - let handle = tokio::spawn(async move { - use std::sync::atomic::Ordering; - - let result = bring_up(conn_target, psk, mtu, &pool, routing_override).await; - semaphore_clone.store(true, Ordering::Release); - - result - }); - spawn_runloop_and_wait_for(&semaphore); - let _ = handle.await.unwrap()?; - } - Ok(ConnectResult::Connected { name: target_name }) } diff --git a/src-tauri/client-cli/src/commands/disconnect.rs b/src-tauri/client-cli/src/commands/disconnect.rs index 11c91a04b..d323caccd 100644 --- a/src-tauri/client-cli/src/commands/disconnect.rs +++ b/src-tauri/client-cli/src/commands/disconnect.rs @@ -1,13 +1,3 @@ -#[cfg(target_os = "macos")] -use std::sync::{ - atomic::{AtomicBool, Ordering}, - Arc, -}; - -#[cfg(target_os = "macos")] -use defguard_core::connection::{ - active_state::ActiveConnectionInfo, apple::spawn_runloop_and_wait_for, -}; use defguard_core::{ connection::{active_state::active_state, tear_down}, ConnectionType, @@ -21,20 +11,6 @@ use crate::{ state::{CliError, State}, }; -/// Wrap `tear_down` in RunLoop. -#[cfg(target_os = "macos")] -async fn macos_tear_down(conn: ActiveConnectionInfo) -> Result<(), defguard_core::error::Error> { - let semaphore = Arc::new(AtomicBool::new(false)); - let semaphore_clone = Arc::clone(&semaphore); - let handle = tokio::spawn(async move { - let result = tear_down(&conn).await; - semaphore_clone.store(true, Ordering::Release); - result - }); - spawn_runloop_and_wait_for(&semaphore); - handle.await.unwrap() -} - pub async fn handle( state: &State, name: Option<&str>, @@ -60,15 +36,7 @@ pub async fn handle( "Disconnecting {name} on interface {}...", connection.interface_name ); - let result; - #[cfg(not(target_os = "macos"))] - { - result = tear_down(connection).await; - } - #[cfg(target_os = "macos")] - { - result = macos_tear_down(connection.clone()).await; - } + let result = tear_down(connection).await; match result { Ok(()) => { info!("Disconnected {name} ({})", connection.interface_name); @@ -101,10 +69,7 @@ pub async fn handle( let name = connection.name.clone(); info!("Disconnecting sole active connection {name} on interface {ifname}..."); - #[cfg(not(target_os = "macos"))] tear_down(connection).await?; - #[cfg(target_os = "macos")] - macos_tear_down(connection.clone()).await?; return Ok(DisconnectResult::Single { name, @@ -150,10 +115,7 @@ pub async fn handle( info!("Disconnecting {target_name} on interface {ifname}..."); - #[cfg(not(target_os = "macos"))] tear_down(connection).await?; - #[cfg(target_os = "macos")] - macos_tear_down(connection.clone()).await?; Ok(DisconnectResult::Single { name: target_name, diff --git a/src-tauri/client-cli/src/main.rs b/src-tauri/client-cli/src/lib.rs similarity index 84% rename from src-tauri/client-cli/src/main.rs rename to src-tauri/client-cli/src/lib.rs index 5b4eab6c3..8325349dc 100644 --- a/src-tauri/client-cli/src/main.rs +++ b/src-tauri/client-cli/src/lib.rs @@ -1,7 +1,6 @@ -use std::process::ExitCode; +use std::{env, process::ExitCode}; use clap::Parser; -use common::check_version_flag; mod brand; mod cli; @@ -27,11 +26,7 @@ use crate::{ state::State, }; -#[tokio::main] -async fn main() -> ExitCode { - // Handle --version / -V before any other work. - check_version_flag("defguard-cli"); - +pub async fn cli_main() -> ExitCode { // Brand banner: shown before clap's --help, and when invoked with // zero arguments. NOT shown for --version (must stay grep-friendly). show_banner_if_appropriate(); @@ -145,22 +140,15 @@ async fn main() -> ExitCode { } } -/// Show the brand banner (logo + copyright + project version) on -/// the two surfaces that need branding: `defguard-cli` with no args -/// (clap prints help; we banner first), and `defguard-cli --help` / -/// `-h`. Suppressed for `--version` / `-V` -- that surface must stay -/// grep-friendly (`defguard-cli --version | head -1`). +/// Show the brand banner (logo + copyright + project version) on the two surfaces that need +/// branding: `defguard-client` with no args (clap prints help; we banner first), and +/// `defguard-client --help` / `-h`. Don't check for `--version` / `-V` – that is handled in +/// `check_version_flag`, which should be called before calling this function. fn show_banner_if_appropriate() { - let args = std::env::args().collect::>(); // Skip argv[0]. If user supplied any subcommand or flag other // than --help / -h, do not print the banner. - let user_args = &args[1..]; - let no_args = user_args.is_empty(); - let asked_help = user_args.iter().any(|a| a == "--help" || a == "-h"); - let asked_version = user_args.iter().any(|a| a == "--version" || a == "-V"); - if asked_version { - return; - } + let no_args = env::args().count() <= 1; + let asked_help = env::args().skip(1).any(|a| a == "--help" || a == "-h"); if no_args || asked_help { brand::print_banner(); } diff --git a/src-tauri/client-cli/src/mfa.rs b/src-tauri/client-cli/src/mfa.rs index 9efb7ab8b..f61ddb0f7 100644 --- a/src-tauri/client-cli/src/mfa.rs +++ b/src-tauri/client-cli/src/mfa.rs @@ -36,13 +36,13 @@ use crate::{ fn into_cli(err: mfa::MfaError) -> CliError { let msg = err.to_string(); match err { - mfa::MfaError::NetworkError { .. } => CliError::Other(msg), - mfa::MfaError::ProxyError { .. } => CliError::Other(msg), - mfa::MfaError::MfaRejected { .. } => CliError::MfaFailed(msg), - mfa::MfaError::PostureRejected { .. } => CliError::MfaFailed(msg), - mfa::MfaError::Timeout => CliError::MfaFailed(msg), + mfa::MfaError::NetworkError { .. } + | mfa::MfaError::ProxyError { .. } + | mfa::MfaError::Other { .. } => CliError::Other(msg), + mfa::MfaError::MfaRejected { .. } + | mfa::MfaError::PostureRejected { .. } + | mfa::MfaError::Timeout => CliError::MfaFailed(msg), mfa::MfaError::Cancelled => CliError::Cancelled(msg), - mfa::MfaError::Other { .. } => CliError::Other(msg), } } diff --git a/src-tauri/client-cli/src/monitor.rs b/src-tauri/client-cli/src/monitor.rs index d11fec626..ae776b976 100644 --- a/src-tauri/client-cli/src/monitor.rs +++ b/src-tauri/client-cli/src/monitor.rs @@ -41,42 +41,12 @@ pub async fn tear_down_stale_connections(state: &State) { let peer_alive_period = state.app_config.peer_alive_period; - #[cfg(target_os = "macos")] - { - use std::sync::{ - atomic::{AtomicBool, Ordering}, - Arc, - }; - - use defguard_core::connection::apple::spawn_runloop_and_wait_for; - - let semaphore = Arc::new(AtomicBool::new(false)); - let semaphore_clone = Arc::clone(&semaphore); - let handle = tokio::spawn(async move { - for connection in connections { - if is_stale(&connection, peer_alive_period) { - eprintln!("Removing stale connection {}", connection.name); - let result = tear_down(&connection).await; - if let Err(err) = result { - error!("Error removing stale connection {}: {err}", connection.name); - } - } - } - semaphore_clone.store(true, Ordering::Release); - }); - spawn_runloop_and_wait_for(&semaphore); - let () = handle.await.unwrap(); - } - - #[cfg(not(target_os = "macos"))] - { - for connection in connections { - if is_stale(&connection, peer_alive_period) { - eprintln!("Removing stale connection {}", connection.name); - let result = tear_down(&connection).await; - if let Err(err) = result { - error!("Error removing stale connection {}: {err}", connection.name); - } + for connection in connections { + if is_stale(&connection, peer_alive_period) { + eprintln!("Removing stale connection {}", connection.name); + let result = tear_down(&connection).await; + if let Err(err) = result { + error!("Error removing stale connection {}: {err}", connection.name); } } } diff --git a/src-tauri/common/src/lib.rs b/src-tauri/common/src/lib.rs index 48b1bf9f8..8a74889d0 100644 --- a/src-tauri/common/src/lib.rs +++ b/src-tauri/common/src/lib.rs @@ -1,4 +1,8 @@ -use std::net::{IpAddr, Ipv4Addr, SocketAddr, TcpListener}; +use std::{ + env, + net::{IpAddr, Ipv4Addr, SocketAddr, TcpListener}, + process, +}; /// Package version from the workspace (shared across all binaries). pub const VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -29,9 +33,9 @@ pub fn version_string(binary_name: &str) -> String { /// Check for `--version` / `-V` in command-line arguments and exit with the version /// string if found. Call this early in `main()` before argument parsing. pub fn check_version_flag(binary_name: &str) { - if std::env::args().any(|a| a == "--version" || a == "-V") { + if env::args().any(|a| a == "--version" || a == "-V") { println!("{}", version_string(binary_name)); - std::process::exit(0); + process::exit(0); } } @@ -132,14 +136,14 @@ mod tests { #[test] fn test_dns_owned_none_and_empty() { - assert_eq!(dns_owned(&None), (vec![], vec![])); - assert_eq!(dns_owned(&Some(String::new())), (vec![], vec![])); + assert_eq!(dns_owned(&None), (Vec::new(), Vec::new())); + assert_eq!(dns_owned(&Some(String::new())), (Vec::new(), Vec::new())); } #[test] fn test_dns_owned_ipv4_only() { let (ips, domains) = dns_owned(&Some("10.0.0.2".to_string())); - assert_eq!(ips, vec![ip("10.0.0.2")]); + assert_eq!(ips, [ip("10.0.0.2")]); assert!(domains.is_empty()); } @@ -154,31 +158,31 @@ mod tests { fn test_dns_owned_domains_only() { let (ips, domains) = dns_owned(&Some("tnt,teonite.net".to_string())); assert!(ips.is_empty()); - assert_eq!(domains, vec!["tnt".to_string(), "teonite.net".to_string()]); + assert_eq!(domains, ["tnt".to_string(), "teonite.net".to_string()]); } #[test] fn test_dns_owned_mixed_with_whitespace() { // Entries are trimmed; parseable ones become resolver IPs, the rest search domains. let (ips, domains) = dns_owned(&Some("10.0.0.2, tnt , teonite.net".to_string())); - assert_eq!(ips, vec![ip("10.0.0.2")]); - assert_eq!(domains, vec!["tnt".to_string(), "teonite.net".to_string()]); + assert_eq!(ips, [ip("10.0.0.2")]); + assert_eq!(domains, ["tnt".to_string(), "teonite.net".to_string()]); } #[test] fn test_dns_owned_trailing_comma_yields_empty_domains() { // Pins current behavior: empty entries between commas are treated as (empty) domains. let (ips, domains) = dns_owned(&Some("10.0.0.2,,".to_string())); - assert_eq!(ips, vec![ip("10.0.0.2")]); - assert_eq!(domains, vec![String::new(), String::new()]); + assert_eq!(ips, [ip("10.0.0.2")]); + assert_eq!(domains, [String::new(), String::new()]); } #[test] fn test_dns_borrow_mixed_with_whitespace() { let config = Some("10.0.0.2, tnt , teonite.net".to_string()); let (ips, domains) = dns_borrow(&config); - assert_eq!(ips, vec![ip("10.0.0.2")]); - assert_eq!(domains, vec!["tnt", "teonite.net"]); + assert_eq!(ips, [ip("10.0.0.2")]); + assert_eq!(domains, ["tnt", "teonite.net"]); } #[test] diff --git a/src-tauri/core/src/connection/apple.rs b/src-tauri/core/src/connection/apple.rs index ae9420ebf..83d0570fa 100644 --- a/src-tauri/core/src/connection/apple.rs +++ b/src-tauri/core/src/connection/apple.rs @@ -136,7 +136,6 @@ pub fn observer_thread( debug!("Exiting VPN connection observer thread"); } -/// Tunnel statistics shared with VPNExtension (written in Swift). /// Run [`NSRunLoop`] until semaphore becomes `true`. pub fn spawn_runloop_and_wait_for(semaphore: &Arc) { const ONE_SECOND: f64 = 1.; diff --git a/src-tauri/core/src/database/models/connection.rs b/src-tauri/core/src/database/models/connection.rs index 56a5b9b15..4ea2d0076 100644 --- a/src-tauri/core/src/database/models/connection.rs +++ b/src-tauri/core/src/database/models/connection.rs @@ -63,8 +63,8 @@ pub struct ConnectionInfo { pub location_id: Id, pub start: NaiveDateTime, pub end: NaiveDateTime, - pub upload: Option, - pub download: Option, + pub upload: Option, + pub download: Option, } impl From for CommonConnectionInfo { diff --git a/src-tauri/core/src/database/models/tunnel.rs b/src-tauri/core/src/database/models/tunnel.rs index 452c81ad0..fc0cc7dfd 100644 --- a/src-tauri/core/src/database/models/tunnel.rs +++ b/src-tauri/core/src/database/models/tunnel.rs @@ -557,8 +557,8 @@ pub struct TunnelConnectionInfo { pub tunnel_id: Id, pub start: NaiveDateTime, pub end: NaiveDateTime, - pub upload: Option, - pub download: Option, + pub upload: Option, + pub download: Option, } impl TunnelConnectionInfo { diff --git a/src-tauri/core/src/lib.rs b/src-tauri/core/src/lib.rs index c9a0ea2ce..b9c00fef2 100644 --- a/src-tauri/core/src/lib.rs +++ b/src-tauri/core/src/lib.rs @@ -117,8 +117,8 @@ pub struct CommonConnectionInfo { pub location_id: Id, pub start: NaiveDateTime, pub end: NaiveDateTime, - pub upload: Option, - pub download: Option, + pub upload: Option, + pub download: Option, } pub const DEFAULT_ROUTE_IPV4: &str = "0.0.0.0/0"; diff --git a/src-tauri/core/src/mfa.rs b/src-tauri/core/src/mfa.rs index b72c3f36b..c10f02194 100644 --- a/src-tauri/core/src/mfa.rs +++ b/src-tauri/core/src/mfa.rs @@ -193,12 +193,12 @@ const OIDC_POLL_INTERVAL: Duration = Duration::from_secs(5); const OIDC_POLL_INTERVAL: Duration = Duration::from_millis(5); #[cfg(not(test))] -const OIDC_POLL_TIMEOUT: Duration = Duration::from_secs(300); +const OIDC_POLL_TIMEOUT: Duration = Duration::from_mins(5); #[cfg(test)] const OIDC_POLL_TIMEOUT: Duration = Duration::from_millis(200); #[cfg(not(test))] -const MOBILE_APPROVE_TIMEOUT: Duration = Duration::from_secs(120); +const MOBILE_APPROVE_TIMEOUT: Duration = Duration::from_mins(2); #[cfg(test)] const MOBILE_APPROVE_TIMEOUT: Duration = Duration::from_secs(5); diff --git a/src-tauri/core/src/version.rs b/src-tauri/core/src/version.rs index 3e34178af..810755e30 100644 --- a/src-tauri/core/src/version.rs +++ b/src-tauri/core/src/version.rs @@ -1,4 +1,6 @@ use std::{ + cmp::Ordering, + env, fs::{create_dir_all, File, OpenOptions}, path::{Path, PathBuf}, }; @@ -86,15 +88,11 @@ pub enum VersionCheckResult { } fn welcome_force_enabled() -> bool { - std::env::var(WELCOME_FORCE_ENV_VAR) - .map(|v| v == "1" || v.eq_ignore_ascii_case("true")) - .unwrap_or(false) + env::var(WELCOME_FORCE_ENV_VAR).is_ok_and(|v| v == "1" || v.eq_ignore_ascii_case("true")) } fn welcome_skip_enabled() -> bool { - std::env::var(WELCOME_SKIP_ENV_VAR) - .map(|v| v == "1" || v.eq_ignore_ascii_case("true")) - .unwrap_or(false) + env::var(WELCOME_SKIP_ENV_VAR).is_ok_and(|v| v == "1" || v.eq_ignore_ascii_case("true")) } /// Checks the last known app version (persisted in `config_dir`) against `current_version`, @@ -126,10 +124,8 @@ pub fn check_app_version(config_dir: &Path, current_version: &Version) -> Versio let file = get_version_state_file(config_dir, false); match serde_json::from_reader::<_, VersionState>(file) { Ok(state) => match state.version.cmp(current_version) { - std::cmp::Ordering::Equal | std::cmp::Ordering::Greater => { - VersionCheckResult::Unchanged - } - std::cmp::Ordering::Less => { + Ordering::Equal | Ordering::Greater => VersionCheckResult::Unchanged, + Ordering::Less => { let previous = state.version; VersionState { version: current_version.clone(), @@ -154,7 +150,7 @@ pub fn check_app_version(config_dir: &Path, current_version: &Version) -> Versio #[cfg(test)] mod tests { - use std::fs; + use std::{env, fs}; use tempfile::tempdir; @@ -263,9 +259,9 @@ mod tests { let _ = check_app_version(dir.path(), ¤t); for value in ["1", "true", "TRUE"] { - std::env::set_var(WELCOME_FORCE_ENV_VAR, value); + env::set_var(WELCOME_FORCE_ENV_VAR, value); let result = check_app_version(dir.path(), ¤t); - std::env::remove_var(WELCOME_FORCE_ENV_VAR); + env::remove_var(WELCOME_FORCE_ENV_VAR); assert_eq!( result, @@ -289,9 +285,9 @@ mod tests { let current = Version::new(1, 3, 0); for value in ["1", "true", "TRUE"] { - std::env::set_var(WELCOME_SKIP_ENV_VAR, value); + env::set_var(WELCOME_SKIP_ENV_VAR, value); let result = check_app_version(dir.path(), ¤t); - std::env::remove_var(WELCOME_SKIP_ENV_VAR); + env::remove_var(WELCOME_SKIP_ENV_VAR); assert_eq!(result, VersionCheckResult::Unchanged); } diff --git a/src-tauri/deny.toml b/src-tauri/deny.toml index 0e41c6ee3..4dea52818 100644 --- a/src-tauri/deny.toml +++ b/src-tauri/deny.toml @@ -109,21 +109,22 @@ ignore = [ # See https://spdx.org/licenses/ for list of possible licenses # [possible values: any SPDX 3.11 short identifier (+ optional exception)]. allow = [ - "MIT", - "Apache-2.0", + "0BSD", "Apache-2.0 WITH LLVM-exception", - "MPL-2.0", + "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", - "Unicode-3.0", - "Unicode-DFS-2016", # unicode-ident - "Zlib", - "ISC", "BSL-1.0", - "0BSD", "CC0-1.0", - "OpenSSL", "CDLA-Permissive-2.0", + "ISC", + "MIT", + "MPL-2.0", + "NCSA", + "OpenSSL", + "Unicode-3.0", + "Unicode-DFS-2016", # unicode-ident + "Zlib", ] # The confidence threshold for detecting a license from license text. # The higher the value, the more closely the license text must be to the @@ -133,6 +134,9 @@ confidence-threshold = 0.8 # Allow 1 or more licenses on a per-crate basis, so that particular licenses # aren't accepted for every possible crate as with the normal allow list exceptions = [ + { allow = [ + "AGPL-3.0-or-later", + ], crate = "defguard-cli" }, { allow = [ "AGPL-3.0-or-later", ], crate = "defguard-client-common" }, diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 825cbb156..6a9e00af5 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -3,568 +3,47 @@ // Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] +use std::env; #[cfg(target_os = "macos")] -use std::sync::{ - atomic::{AtomicBool, Ordering}, - Arc, +use std::{ + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, + thread::spawn, }; -use std::{env, str::FromStr, sync::LazyLock}; -#[cfg(unix)] -use defguard_client::set_perms; +#[cfg(target_os = "macos")] +use defguard_client::connection::apple::spawn_runloop_and_wait_for; #[cfg(target_os = "linux")] use defguard_client::utils::set_webkitgtk_variables; -#[cfg(windows)] -use defguard_client::utils::sync_connections; -use defguard_client::{ - app_config::AppConfig, - appstate::AppState, - check_version_flag, - commands::*, - database::{ - handle_db_migrations, - models::{location_stats::LocationStats, tunnel::TunnelStats}, - DB_POOL, - }, - events::handle_deep_link, - periodic::run_periodic_tasks, - provisioning::handle_client_initialization, - session_state, - tray::{configure_tray_icon, setup_tray}, - utils::{load_log_targets, DEFAULT_SERVICE_LOG_DIR}, - window_manager::*, - LOG_FILENAME, VERSION, -}; -#[cfg(target_os = "macos")] -use defguard_client::{ - apple::{connection_state_update_thread, get_managers_for_tunnels_and_locations}, - connection::apple::{observer_thread, spawn_runloop_and_wait_for}, - database::models::get_all_tunnels_locations, -}; -#[cfg(all(target_os = "macos", feature = "macos_installer"))] -use defguard_client::{ - connection::apple::PLUGIN_BUNDLE_ID, system_extension::activate_system_extension, -}; -#[cfg(target_os = "macos")] -use defguard_client_core::connection::sync_locations_and_tunnels; -use defguard_client_core::{ - connection::active_connections::close_all_connections, - version::{check_app_version, VersionCheckResult}, -}; -use log::{Level, LevelFilter}; -use tauri::{async_runtime, AppHandle, Builder, Manager, RunEvent, WindowEvent}; -use tauri_plugin_deep_link::DeepLinkExt; -use tauri_plugin_log::{Target, TargetKind}; - -#[macro_use] -extern crate log; - -const ENABLE_WELCOME_SCREEN: bool = false; - -// For tauri logging plugin: -// if found in metadata target name it will ignore the log if it was below info level. -const LOGGING_TARGET_IGNORE_LIST: [&str; 5] = ["tauri", "sqlx", "hyper", "h2", "tower"]; - -static LOG_INCLUDES: LazyLock> = LazyLock::new(load_log_targets); - -async fn startup(app_handle: &AppHandle) { - debug!("Purging old stats from the database."); - if let Err(err) = LocationStats::purge(&*DB_POOL).await { - error!("Failed to purge location stats: {err}"); - } else { - debug!("Old location stats have been purged successfully."); - } - if let Err(err) = TunnelStats::purge(&*DB_POOL).await { - error!("Failed to purge tunnel stats: {err}"); - } else { - debug!("Old tunnel stats have been purged successfully."); - } - - // Sync already active connections on windows. - // When windows is restarted, the app doesn't close the active connections - // and they are still running after the restart. We sync them here to - // reflect the real system's state. - // TODO: Find a way to intercept the shutdown event and close all connections - #[cfg(windows)] - { - match sync_connections(app_handle).await { - Ok(()) => { - info!( - "Synchronized application's active connections with the connections \ - already open on the system, if there were any." - ); - } - Err(err) => { - warn!( - "Failed to synchronize application's active connections with the connections \ - already open on the system. \ - The connections' state in the application may not reflect system's state. \ - Reconnect manually to reset them. Error: {err}" - ); - } - }; - } - #[cfg(all(target_os = "macos", feature = "macos_installer"))] - activate_system_extension(PLUGIN_BUNDLE_ID); - - #[cfg(target_os = "macos")] - { - let semaphore = Arc::new(AtomicBool::new(false)); - let semaphore_clone = Arc::clone(&semaphore); - - // Retrieve MTU from `AppConfig`. - let app_state = app_handle.state::(); - let mtu = app_state - .app_config - .lock() - .expect("failed to lock app state") - .mtu(); - let handle = async_runtime::spawn(async move { - if let Err(err) = sync_locations_and_tunnels(mtu).await { - error!("Failed to sync locations and tunnels: {err}"); - } - semaphore_clone.store(true, Ordering::Release); - }); - spawn_runloop_and_wait_for(&semaphore); - let _ = handle.await; - - let (tunnels, locations) = get_all_tunnels_locations().await; - let handle = app_handle.clone(); - // Observer thread is blocking, so its better not to mess with the tauri runtime, - // hence std::thread::spawn. - std::thread::spawn(move || { - observer_thread(get_managers_for_tunnels_and_locations(&tunnels, &locations)); - error!("VPN observer thread has exited unexpectedly, quitting the app."); - handle.exit(0); - }); - - let handle = app_handle.clone(); - async_runtime::spawn(async move { - connection_state_update_thread(&handle).await; - error!("Connection state update thread has exited unexpectedly, quitting the app."); - handle.exit(0); - }); - } - - // Run periodic tasks. - let periodic_tasks_handle = app_handle.clone(); - async_runtime::spawn(async move { - run_periodic_tasks(&periodic_tasks_handle).await; - // One of the tasks exited, so something went wrong, quit the app - error!("One of the periodic tasks has stopped unexpectedly. Exiting the application."); - periodic_tasks_handle.exit(0); - }); - debug!("Periodic tasks have been started."); - - // Load tray menu after database initialization, so all instance and locations can be shown. - debug!( - "Re-generating tray menu to show all available instances and locations as we have \ - connected to the database." - ); - if let Err(err) = setup_tray(app_handle).await { - error!("Failed to setup system tray: {err}"); - } - match configure_tray_icon(app_handle).await { - Ok(()) => info!("System tray configured."), - Err(err) => error!("Failed to configure system tray: {err}"), - } - debug!("Tray menu has been re-generated successfully."); -} +use defguard_client::{check_version_flag, gui::run_app}; +use tauri::async_runtime::block_on; fn main() { - // Handle --version / -V before starting the GUI. + // Handle --version / -V before starting the client. check_version_flag("defguard-client"); - #[cfg(target_os = "linux")] - set_webkitgtk_variables(); - - let app = Builder::default() - .invoke_handler(tauri::generate_handler![ - all_locations, - has_any_visible_locations, - save_device_config, - all_instances, - connect, - disconnect, - update_instance, - location_stats, - location_interface_details, - all_connections, - last_connection, - active_connection, - update_location_routing, - delete_instance, - parse_tunnel_config, - save_tunnel, - all_tunnels, - open_link, - tunnel_details, - update_tunnel, - delete_tunnel, - get_latest_app_version, - start_global_logwatcher, - stop_global_logwatcher, - command_get_app_config, - command_set_app_config, - get_provisioning_config, - get_platform_header, - get_posture_data, - set_location_mfa_method, - open_tray_window, - open_full_view_window, - swap_to_tray, - swap_to_full_view, - close_tray_window, - close_welcome_window, - all_active_connections, - disconnect_locations, - enrollment_start, - enrollment_create_device, - enrollment_activate_user, - enrollment_register_mfa_start, - enrollment_register_mfa_finish, - enrollment_network_info, - enrollment_finish, - mfa_start, - mfa_finish_code, - mfa_poll_openid, - mfa_connect_mobile_approve, - cancel_mfa, - session_state::get_session_state, - session_state::patch_session_state, - ]) - .on_window_event(|window, event| { - if let WindowEvent::ThemeChanged(_theme) = event { - let app = window.app_handle().clone(); - tauri::async_runtime::spawn(async move { - if let Err(err) = configure_tray_icon(&app).await { - error!("Failed to reconfigure tray icon on theme change: {err}"); - } - }); - } - if let WindowEvent::CloseRequested { api, .. } = event { - let label = window.label(); - if label == COMPACT_WINDOW_ID || label == FULL_VIEW_WINDOW_ID { - let _ = window.hide(); - api.prevent_close(); - } - } - }) - // Initialize plugins here, except for `tauri_plugin_log` which is handled in `setup()`. - // Single instance plugin should always be the first to register. - .plugin(tauri_plugin_single_instance::init(|app, argv, _cwd| { - let is_deep_link = argv.iter().any(|a| a.starts_with("defguard://")); - // User tried to spawn second instance, mirror tray left click path. - if !is_deep_link { - show_tray_or_full_view(app); - } - })) - .plugin(tauri_plugin_deep_link::init()) - .plugin(tauri_plugin_dialog::init()) - .plugin(tauri_plugin_clipboard_manager::init()) - .plugin(tauri_plugin_fs::init()) - .plugin(tauri_plugin_http::init()) - .plugin(tauri_plugin_notification::init()) - .plugin(tauri_plugin_opener::init()) - .plugin(tauri_plugin_os::init()) - .plugin(tauri_plugin_process::init()) - .setup(|app| { - // Create Help menu on macOS. - // https://github.com/tauri-apps/tauri/issues/9371 - #[cfg(target_os = "macos")] - { - use tauri_plugin_opener::OpenerExt; - - const DOC_ITEM_ID: &str = "doc"; - const REPORT_ITEM_ID: &str = "issue"; - const DOC_URL: &str = "https://docs.defguard.net/using-defguard-for-end-users/desktop-client"; - const REPORT_URL: &str = "https://github.com/DefGuard/client/issues/new?labels=bug&template=bug_report.md"; - if let Some(menu) = app.menu() { - if let Some(help_submenu) = menu.get(tauri::menu::HELP_SUBMENU_ID) { - let report_item = tauri::menu::MenuItem::with_id( - app, - REPORT_ITEM_ID, - "Report an issue", - true, - None::<&str>, - )?; - let _ = help_submenu.as_submenu_unchecked().append(&report_item); - let doc_item = tauri::menu::MenuItem::with_id( - app, - DOC_ITEM_ID, - "Defguard Desktop Client Help", - true, - None::<&str>, - )?; - let _ = help_submenu.as_submenu_unchecked().append(&doc_item); - } - } - app.on_menu_event(move |app, event| { - let id = event.id(); - if id == DOC_ITEM_ID { - let _ = app.opener().open_url(DOC_URL, None::<&str>); - } else if id == REPORT_ITEM_ID { - let _ = app.opener().open_url(REPORT_URL, None::<&str>); - } - }); - - app.set_dock_visibility(false); - } - - // Register for Linux and debug Windows builds. - #[cfg(any(target_os = "linux", windows))] - { - use tauri_plugin_deep_link::DeepLinkExt; - app.deep_link().register_all()?; - } - - let app_handle = app.app_handle(); - - // Single Rust-side entry point for all deep link events (runtime). - { - let handle = app_handle.clone(); - app.deep_link().on_open_url(move |event| { - handle_deep_link(&handle, &event.urls()); - }); - } - - // Prepare `AppConfig`. - let config_dir = app_handle - .path() - .app_data_dir() - .expect("Failed to access app data"); - let config = AppConfig::new(&config_dir); - let current_version = app_handle.package_info().version.clone(); - let mut open_welcome_view = match check_app_version(&config_dir, ¤t_version) { - VersionCheckResult::Init => { - debug!("No previous version recorded; initializing at {current_version}."); - true - } - VersionCheckResult::Unchanged => { - debug!("Application version unchanged ({current_version})."); - false - } - VersionCheckResult::Upgraded { previous, current } => { - info!("Application upgraded from {previous} to {current}."); - true - } - }; - if !ENABLE_WELCOME_SCREEN { - open_welcome_view = false; - } - - // Setup logging. - - // If deriving from env value fails, use config default (env overrides config file). - let config_log_level = config.log_level; - let log_level = match &env::var("DEFGUARD_CLIENT_LOG_LEVEL") { - Ok(env_value) => LevelFilter::from_str(env_value).unwrap_or(config_log_level), - Err(_) => config_log_level, - }; - app_handle.plugin( - tauri_plugin_log::Builder::new() - .format(move |out, message, record| { - out.finish(format_args!( - "{}[{}][{}] {}", - tauri_plugin_log::TimezoneStrategy::UseUtc - .get_now() - // Sets the time format. Service's logs have a subsecond part, so we - // also need to include it here, otherwise the logs couldn't be sorted - // correctly when displayed together in the UI. - .format(&time::macros::format_description!( - "[[[year]-[month]-[day]][[[hour]:[minute]:[second].[subsecond]]" - )) - .unwrap(), - record.level(), - record.target(), - message - )); - }) - .targets([ - Target::new(TargetKind::Stdout), - Target::new(TargetKind::LogDir { file_name: Some(LOG_FILENAME.to_string()) }), - ]) - .level(log_level) - .filter(|metadata| { - if metadata.level() == Level::Error { - return true; - } - if !LOG_INCLUDES.is_empty() { - for target in &*LOG_INCLUDES { - if metadata.target().contains(target) { - return true; - } - } - return false; - } - true - }) - .filter(|metadata| { - // Log all errors, warnings and infos. - let level = metadata.level(); - if level == LevelFilter::Error - || level == LevelFilter::Warn - || level == LevelFilter::Info - { - return true; - } - // Otherwise do not log these targets. - for target in &LOGGING_TARGET_IGNORE_LIST { - if metadata.target().contains(target) { - return false; - } - } - true - }) - .build(), - )?; - - // run DB migrations - async_runtime::block_on(handle_db_migrations()); - - // Check if client needs to be initialized - // and try to load provisioning config if necessary - let provisioning_config = - async_runtime::block_on(handle_client_initialization(app_handle)); - - let state = AppState::new(config, provisioning_config); - app.manage(state); - - // Pre-build windows hidden so they can be shown/hidden without recreation. - if let Err(e) = WindowManager::build_tray_window(app_handle) { - warn!("Failed to pre-build tray window: {e}"); - } - if let Err(e) = WindowManager::build_full_view_window(app_handle) { - warn!("Failed to pre-build full window: {e}"); - } - if let Err(e) = WindowManager::build_welcome_window(app_handle) { - warn!("Failed to pre-build welcome window: {e}"); - } - - // Decide which window to show based on available locations. - // If the app was cold-launched by a deep-link, the full view must open, not the - // tray. - let launched_by_deep_link = app_handle - .deep_link() - .get_current() - .ok() - .flatten() - .is_some(); - if launched_by_deep_link { - info!("App launched via deep link, opening full view directly."); - let _ = WindowManager::open_full_view(app_handle); - } else if open_welcome_view { - info!("Opening welcome view."); - let _ = WindowManager::open_welcome_view(app_handle); - } else { - show_tray_or_full_view(app_handle); - } - - info!("App setup completed, log level: {log_level}"); - Ok(()) - }) - .build(tauri::generate_context!()) - .expect("Failed to build Tauri application"); - - info!("Starting Defguard client version {VERSION}"); - - // Run application. - debug!("Starting the main application event loop."); - app.run(|app_handle, event| match event { - // Startup tasks - RunEvent::Ready => { - let data_dir = app_handle - .path() - .app_data_dir() - .unwrap_or_else(|_| "UNDEFINED DATA DIRECTORY".into()); - let log_dir = app_handle - .path() - .app_log_dir() - .unwrap_or_else(|_| "UNDEFINED LOG DIRECTORY".into()); - - // Ensure directories have appropriate permissions (dg25-28). - #[cfg(unix)] - { - set_perms(&data_dir); - set_perms(&log_dir); - } - - info!( - "Application data (database file) will be stored in: {} and application logs in: \ - {}. Logs of the background Defguard service responsible for managing VPN \ - connections at the network level will be stored in: {}.", - data_dir.display(), - log_dir.display(), - DEFAULT_SERVICE_LOG_DIR - ); - async_runtime::block_on(startup(app_handle)); - - // Handle a deep link that launched the app (startup case). - if let Ok(Some(urls)) = app_handle.deep_link().get_current() { - handle_deep_link(app_handle, &urls); - } - - // Handle Ctrl-C. - debug!("Setting up Ctrl-C handler."); - let app_handle_clone = app_handle.clone(); - async_runtime::spawn(async move { - tokio::signal::ctrl_c() - .await - .expect("Signal handler failure"); - debug!("Ctrl-C handler: quitting the app"); - app_handle_clone.exit(0); - }); - debug!("Ctrl-C handler has been set up successfully"); - } - RunEvent::ExitRequested { code, api, .. } => { - debug!("Received exit request"); - // `code` is `None` when the exit is requested by user interaction. - if code.is_none() { - // Prevent shutdown on window close. - api.prevent_exit(); - } - } - // Handle shutdown. - RunEvent::Exit => { - debug!("Exiting the application's main event loop."); - #[cfg(target_os = "macos")] - { - let semaphore = Arc::new(AtomicBool::new(false)); - let semaphore_clone = Arc::clone(&semaphore); - - let handle = async_runtime::spawn(async move { - let _ = close_all_connections().await; - // This will clean the database file, pruning write-ahead log. - DB_POOL.close().await; - semaphore_clone.store(true, Ordering::Release); - }); - // Obj-C API needs a runtime, but at this point Tauri has closed its runtime, so - // create a temporary one. - spawn_runloop_and_wait_for(&semaphore); - async_runtime::block_on(async move { - let _ = handle.await; - }); - } - #[cfg(not(target_os = "macos"))] - { - async_runtime::block_on(async move { - let _ = close_all_connections().await; - // This will clean the database file, pruning write-ahead log. - DB_POOL.close().await; - }); - } - } + // Without any arguments, launch the user interface. + if env::args().count() <= 1 { + #[cfg(target_os = "linux")] + set_webkitgtk_variables(); + run_app(); + } else { #[cfg(target_os = "macos")] - RunEvent::Reopen { - has_visible_windows, - .. - } => { - if !has_visible_windows { - show_tray_or_full_view(app_handle); - } - } - _ => { - trace!("Received event: {event:?}"); + { + // NetworkExtension completion handlers are delivered on the main queue, which is + // only serviced while a run loop is running on the main thread. + let done = Arc::new(AtomicBool::new(false)); + let done_clone = Arc::clone(&done); + let worker = spawn(move || { + let _code = block_on(defguard_cli::cli_main()); + done_clone.store(true, Ordering::Release); + }); + spawn_runloop_and_wait_for(&done); + let _ = worker.join(); } - }); + #[cfg(not(target_os = "macos"))] + block_on(defguard_cli::cli_main()); + } } diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index df35b0123..d51861a32 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -1409,8 +1409,7 @@ pub async fn enrollment_start( let login = response .user .as_ref() - .map(|u| u.login.as_str()) - .unwrap_or(""); + .map_or("", |u| u.login.as_str()); info!("Enrollment started for user {login}, session {session_id}"); Ok(EnrollmentStartResult { session_id, diff --git a/src-tauri/src/gui.rs b/src-tauri/src/gui.rs new file mode 100644 index 000000000..9551ca1b6 --- /dev/null +++ b/src-tauri/src/gui.rs @@ -0,0 +1,555 @@ +use std::{env, str::FromStr, sync::LazyLock}; +#[cfg(target_os = "macos")] +use std::{ + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, + thread::spawn, +}; + +#[cfg(unix)] +use crate::set_perms; +#[cfg(windows)] +use crate::utils::sync_connections; +use crate::{ + app_config::AppConfig, + appstate::AppState, + commands::*, + database::{ + handle_db_migrations, + models::{location_stats::LocationStats, tunnel::TunnelStats}, + DB_POOL, + }, + events::handle_deep_link, + periodic::run_periodic_tasks, + provisioning::handle_client_initialization, + session_state, + tray::{configure_tray_icon, setup_tray}, + utils::{load_log_targets, DEFAULT_SERVICE_LOG_DIR}, + window_manager::*, + LOG_FILENAME, VERSION, +}; +#[cfg(target_os = "macos")] +use crate::{ + apple::{connection_state_update_thread, get_managers_for_tunnels_and_locations}, + connection::apple::{observer_thread, spawn_runloop_and_wait_for}, + database::models::get_all_tunnels_locations, +}; +#[cfg(all(target_os = "macos", feature = "macos_installer"))] +use crate::{connection::apple::PLUGIN_BUNDLE_ID, system_extension::activate_system_extension}; +#[cfg(target_os = "macos")] +use defguard_client_core::connection::sync_locations_and_tunnels; +use defguard_client_core::{ + connection::active_connections::close_all_connections, + version::{check_app_version, VersionCheckResult}, +}; +use log::{Level, LevelFilter}; +use tauri::{async_runtime, AppHandle, Builder, Manager, RunEvent, WindowEvent}; +use tauri_plugin_deep_link::DeepLinkExt; +use tauri_plugin_log::{Target, TargetKind}; + +const ENABLE_WELCOME_SCREEN: bool = false; + +// For tauri logging plugin: +// if found in metadata target name it will ignore the log if it was below info level. +const LOGGING_TARGET_IGNORE_LIST: [&str; 5] = ["tauri", "sqlx", "hyper", "h2", "tower"]; + +static LOG_INCLUDES: LazyLock> = LazyLock::new(load_log_targets); + +async fn startup(app_handle: &AppHandle) { + debug!("Purging old stats from the database."); + if let Err(err) = LocationStats::purge(&*DB_POOL).await { + error!("Failed to purge location stats: {err}"); + } else { + debug!("Old location stats have been purged successfully."); + } + if let Err(err) = TunnelStats::purge(&*DB_POOL).await { + error!("Failed to purge tunnel stats: {err}"); + } else { + debug!("Old tunnel stats have been purged successfully."); + } + + // Sync already active connections on windows. + // When windows is restarted, the app doesn't close the active connections + // and they are still running after the restart. We sync them here to + // reflect the real system's state. + // TODO: Find a way to intercept the shutdown event and close all connections + #[cfg(windows)] + { + match sync_connections(app_handle).await { + Ok(()) => { + info!( + "Synchronized application's active connections with the connections \ + already open on the system, if there were any." + ); + } + Err(err) => { + warn!( + "Failed to synchronize application's active connections with the connections \ + already open on the system. \ + The connections' state in the application may not reflect system's state. \ + Reconnect manually to reset them. Error: {err}" + ); + } + }; + } + #[cfg(all(target_os = "macos", feature = "macos_installer"))] + activate_system_extension(PLUGIN_BUNDLE_ID); + + #[cfg(target_os = "macos")] + { + let semaphore = Arc::new(AtomicBool::new(false)); + let semaphore_clone = Arc::clone(&semaphore); + + // Retrieve MTU from `AppConfig`. + let app_state = app_handle.state::(); + let mtu = app_state + .app_config + .lock() + .expect("failed to lock app state") + .mtu(); + let handle = async_runtime::spawn(async move { + if let Err(err) = sync_locations_and_tunnels(mtu).await { + error!("Failed to sync locations and tunnels: {err}"); + } + semaphore_clone.store(true, Ordering::Release); + }); + spawn_runloop_and_wait_for(&semaphore); + let _ = handle.await; + + let (tunnels, locations) = get_all_tunnels_locations().await; + let handle = app_handle.clone(); + // Observer thread is blocking, so its better not to mess with the tauri runtime. + spawn(move || { + observer_thread(get_managers_for_tunnels_and_locations(&tunnels, &locations)); + error!("VPN observer thread has exited unexpectedly, quitting the app."); + handle.exit(0); + }); + + let handle = app_handle.clone(); + async_runtime::spawn(async move { + connection_state_update_thread(&handle).await; + error!("Connection state update thread has exited unexpectedly, quitting the app."); + handle.exit(0); + }); + } + + // Run periodic tasks. + let periodic_tasks_handle = app_handle.clone(); + async_runtime::spawn(async move { + run_periodic_tasks(&periodic_tasks_handle).await; + // One of the tasks exited, so something went wrong, quit the app + error!("One of the periodic tasks has stopped unexpectedly. Exiting the application."); + periodic_tasks_handle.exit(0); + }); + debug!("Periodic tasks have been started."); + + // Load tray menu after database initialization, so all instance and locations can be shown. + debug!( + "Re-generating tray menu to show all available instances and locations as we have \ + connected to the database." + ); + if let Err(err) = setup_tray(app_handle).await { + error!("Failed to setup system tray: {err}"); + } + match configure_tray_icon(app_handle).await { + Ok(()) => info!("System tray configured."), + Err(err) => error!("Failed to configure system tray: {err}"), + } + debug!("Tray menu has been re-generated successfully."); +} + +pub fn run_app() { + info!("Starting Defguard client version {VERSION}"); + + let app = Builder::default() + .invoke_handler(tauri::generate_handler![ + all_locations, + has_any_visible_locations, + save_device_config, + all_instances, + connect, + disconnect, + update_instance, + location_stats, + location_interface_details, + all_connections, + last_connection, + active_connection, + update_location_routing, + delete_instance, + parse_tunnel_config, + save_tunnel, + all_tunnels, + open_link, + tunnel_details, + update_tunnel, + delete_tunnel, + get_latest_app_version, + start_global_logwatcher, + stop_global_logwatcher, + command_get_app_config, + command_set_app_config, + get_provisioning_config, + get_platform_header, + get_posture_data, + set_location_mfa_method, + open_tray_window, + open_full_view_window, + swap_to_tray, + swap_to_full_view, + close_tray_window, + close_welcome_window, + all_active_connections, + disconnect_locations, + enrollment_start, + enrollment_create_device, + enrollment_activate_user, + enrollment_register_mfa_start, + enrollment_register_mfa_finish, + enrollment_network_info, + enrollment_finish, + mfa_start, + mfa_finish_code, + mfa_poll_openid, + mfa_connect_mobile_approve, + cancel_mfa, + session_state::get_session_state, + session_state::patch_session_state, + ]) + .on_window_event(|window, event| { + if let WindowEvent::ThemeChanged(_theme) = event { + let app = window.app_handle().clone(); + async_runtime::spawn(async move { + if let Err(err) = configure_tray_icon(&app).await { + error!("Failed to reconfigure tray icon on theme change: {err}"); + } + }); + } + if let WindowEvent::CloseRequested { api, .. } = event { + let label = window.label(); + if label == COMPACT_WINDOW_ID || label == FULL_VIEW_WINDOW_ID { + let _ = window.hide(); + api.prevent_close(); + } + } + }) + // Initialize plugins here, except for `tauri_plugin_log` which is handled in `setup()`. + // Single instance plugin should always be the first to register. + .plugin(tauri_plugin_single_instance::init(|app, argv, _cwd| { + let is_deep_link = argv.iter().any(|a| a.starts_with("defguard://")); + // User tried to spawn second instance, mirror tray left click path. + if !is_deep_link { + show_tray_or_full_view(app); + } + })) + .plugin(tauri_plugin_deep_link::init()) + .plugin(tauri_plugin_dialog::init()) + .plugin(tauri_plugin_clipboard_manager::init()) + .plugin(tauri_plugin_fs::init()) + .plugin(tauri_plugin_http::init()) + .plugin(tauri_plugin_notification::init()) + .plugin(tauri_plugin_opener::init()) + .plugin(tauri_plugin_os::init()) + .plugin(tauri_plugin_process::init()) + .setup(|app| { + // Create Help menu on macOS. + // https://github.com/tauri-apps/tauri/issues/9371 + #[cfg(target_os = "macos")] + { + use tauri_plugin_opener::OpenerExt; + + const DOC_ITEM_ID: &str = "doc"; + const REPORT_ITEM_ID: &str = "issue"; + const DOC_URL: &str = "https://docs.defguard.net/using-defguard-for-end-users/desktop-client"; + const REPORT_URL: &str = "https://github.com/DefGuard/client/issues/new?labels=bug&template=bug_report.md"; + if let Some(menu) = app.menu() { + if let Some(help_submenu) = menu.get(tauri::menu::HELP_SUBMENU_ID) { + let report_item = tauri::menu::MenuItem::with_id( + app, + REPORT_ITEM_ID, + "Report an issue", + true, + None::<&str>, + )?; + let _ = help_submenu.as_submenu_unchecked().append(&report_item); + let doc_item = tauri::menu::MenuItem::with_id( + app, + DOC_ITEM_ID, + "Defguard Desktop Client Help", + true, + None::<&str>, + )?; + let _ = help_submenu.as_submenu_unchecked().append(&doc_item); + } + } + app.on_menu_event(move |app, event| { + let id = event.id(); + if id == DOC_ITEM_ID { + let _ = app.opener().open_url(DOC_URL, None::<&str>); + } else if id == REPORT_ITEM_ID { + let _ = app.opener().open_url(REPORT_URL, None::<&str>); + } + }); + + app.set_dock_visibility(false); + } + + // Register for Linux and debug Windows builds. + #[cfg(any(target_os = "linux", windows))] + { + use tauri_plugin_deep_link::DeepLinkExt; + app.deep_link().register_all()?; + } + + let app_handle = app.app_handle(); + + // Single Rust-side entry point for all deep link events (runtime). + { + let handle = app_handle.clone(); + app.deep_link().on_open_url(move |event| { + handle_deep_link(&handle, &event.urls()); + }); + } + + // Prepare `AppConfig`. + let config_dir = app_handle + .path() + .app_data_dir() + .expect("Failed to access app data"); + let config = AppConfig::new(&config_dir); + let current_version = app_handle.package_info().version.clone(); + let mut open_welcome_view = match check_app_version(&config_dir, ¤t_version) { + VersionCheckResult::Init => { + debug!("No previous version recorded; initializing at {current_version}."); + true + } + VersionCheckResult::Unchanged => { + debug!("Application version unchanged ({current_version})."); + false + } + VersionCheckResult::Upgraded { previous, current } => { + info!("Application upgraded from {previous} to {current}."); + true + } + }; + if !ENABLE_WELCOME_SCREEN { + open_welcome_view = false; + } + + // Setup logging. + + // If deriving from env value fails, use config default (env overrides config file). + let config_log_level = config.log_level; + let log_level = match &env::var("DEFGUARD_CLIENT_LOG_LEVEL") { + Ok(env_value) => LevelFilter::from_str(env_value).unwrap_or(config_log_level), + Err(_) => config_log_level, + }; + app_handle.plugin( + tauri_plugin_log::Builder::new() + .format(move |out, message, record| { + out.finish(format_args!( + "{}[{}][{}] {}", + tauri_plugin_log::TimezoneStrategy::UseUtc + .get_now() + // Sets the time format. Service's logs have a subsecond part, so we + // also need to include it here, otherwise the logs couldn't be sorted + // correctly when displayed together in the UI. + .format(&time::macros::format_description!( + "[[[year]-[month]-[day]][[[hour]:[minute]:[second].[subsecond]]" + )) + .unwrap(), + record.level(), + record.target(), + message + )); + }) + .targets([ + Target::new(TargetKind::Stdout), + Target::new(TargetKind::LogDir { file_name: Some(LOG_FILENAME.to_string()) }), + ]) + .level(log_level) + .filter(|metadata| { + if metadata.level() == Level::Error { + return true; + } + if !LOG_INCLUDES.is_empty() { + for target in &*LOG_INCLUDES { + if metadata.target().contains(target) { + return true; + } + } + return false; + } + true + }) + .filter(|metadata| { + // Log all errors, warnings and infos. + let level = metadata.level(); + if level == LevelFilter::Error + || level == LevelFilter::Warn + || level == LevelFilter::Info + { + return true; + } + // Otherwise do not log these targets. + for target in &LOGGING_TARGET_IGNORE_LIST { + if metadata.target().contains(target) { + return false; + } + } + true + }) + .build(), + )?; + + // run DB migrations + async_runtime::block_on(handle_db_migrations()); + + // Check if client needs to be initialized + // and try to load provisioning config if necessary + let provisioning_config = + async_runtime::block_on(handle_client_initialization(app_handle)); + + let state = AppState::new(config, provisioning_config); + app.manage(state); + + // Pre-build windows hidden so they can be shown/hidden without recreation. + if let Err(e) = WindowManager::build_tray_window(app_handle) { + warn!("Failed to pre-build tray window: {e}"); + } + if let Err(e) = WindowManager::build_full_view_window(app_handle) { + warn!("Failed to pre-build full window: {e}"); + } + if let Err(e) = WindowManager::build_welcome_window(app_handle) { + warn!("Failed to pre-build welcome window: {e}"); + } + + // Decide which window to show based on available locations. + // If the app was cold-launched by a deep-link, the full view must open, not the + // tray. + let launched_by_deep_link = app_handle + .deep_link() + .get_current() + .ok() + .flatten() + .is_some(); + if launched_by_deep_link { + info!("App launched via deep link, opening full view directly."); + let _ = WindowManager::open_full_view(app_handle); + } else if open_welcome_view { + info!("Opening welcome view."); + let _ = WindowManager::open_welcome_view(app_handle); + } else { + show_tray_or_full_view(app_handle); + } + + info!("App setup completed, log level: {log_level}"); + Ok(()) + }) + .build(tauri::generate_context!()) + .expect("Failed to build Tauri application"); + + info!("Starting Defguard client version {VERSION}"); + + // Run application. + debug!("Starting the main application event loop."); + app.run(|app_handle, event| match event { + // Startup tasks + RunEvent::Ready => { + let data_dir = app_handle + .path() + .app_data_dir() + .unwrap_or_else(|_| "UNDEFINED DATA DIRECTORY".into()); + let log_dir = app_handle + .path() + .app_log_dir() + .unwrap_or_else(|_| "UNDEFINED LOG DIRECTORY".into()); + + // Ensure directories have appropriate permissions (dg25-28). + #[cfg(unix)] + { + set_perms(&data_dir); + set_perms(&log_dir); + } + + info!( + "Application data (database file) will be stored in: {} and application logs in: \ + {}. Logs of the background Defguard service responsible for managing VPN \ + connections at the network level will be stored in: {}.", + data_dir.display(), + log_dir.display(), + DEFAULT_SERVICE_LOG_DIR + ); + async_runtime::block_on(startup(app_handle)); + + // Handle a deep link that launched the app (startup case). + if let Ok(Some(urls)) = app_handle.deep_link().get_current() { + handle_deep_link(app_handle, &urls); + } + + // Handle Ctrl-C. + debug!("Setting up Ctrl-C handler."); + let app_handle_clone = app_handle.clone(); + async_runtime::spawn(async move { + tokio::signal::ctrl_c() + .await + .expect("Signal handler failure"); + debug!("Ctrl-C handler: quitting the app"); + app_handle_clone.exit(0); + }); + debug!("Ctrl-C handler has been set up successfully"); + } + RunEvent::ExitRequested { code, api, .. } => { + debug!("Received exit request"); + // `code` is `None` when the exit is requested by user interaction. + if code.is_none() { + // Prevent shutdown on window close. + api.prevent_exit(); + } + } + // Handle shutdown. + RunEvent::Exit => { + debug!("Exiting the application's main event loop."); + #[cfg(target_os = "macos")] + { + let semaphore = Arc::new(AtomicBool::new(false)); + let semaphore_clone = Arc::clone(&semaphore); + + let handle = async_runtime::spawn(async move { + let _ = close_all_connections().await; + // This will clean the database file, pruning write-ahead log. + DB_POOL.close().await; + semaphore_clone.store(true, Ordering::Release); + }); + // Obj-C API needs a runtime, but at this point Tauri has closed its runtime, so + // create a temporary one. + spawn_runloop_and_wait_for(&semaphore); + async_runtime::block_on(async move { + let _ = handle.await; + }); + } + #[cfg(not(target_os = "macos"))] + { + async_runtime::block_on(async move { + let _ = close_all_connections().await; + // This will clean the database file, pruning write-ahead log. + DB_POOL.close().await; + }); + } + } + #[cfg(target_os = "macos")] + RunEvent::Reopen { + has_visible_windows, + .. + } => { + if !has_visible_windows { + show_tray_or_full_view(app_handle); + } + } + _ => { + trace!("Received event: {event:?}"); + } + }); +} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 30761f88e..d55adeacc 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -6,6 +6,7 @@ pub mod apple; pub mod appstate; pub mod commands; pub mod events; +pub mod gui; pub mod log_watcher; pub mod periodic; pub mod provisioning; diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index 976ca8130..48722362d 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -255,16 +255,13 @@ pub async fn configure_tray_icon(app_handle: &AppHandle) -> Result<(), Error> { resource_str.push_str("blue"); #[cfg(not(windows))] { - use tauri::Theme; - let theme = app_handle - .webview_windows() - .into_values() - .next() - .and_then(|w| w.theme().ok()); - resource_str.push_str(match theme { - Some(Theme::Dark) => "white", - _ => "white", - }); + // TODO: `use tauri::Theme;` + // let theme = app_handle + // .webview_windows() + // .into_values() + // .next() + // .and_then(|w| w.theme().ok()); + resource_str.push_str("white"); } let active_connections = ACTIVE_CONNECTIONS.lock().await; if !active_connections.is_empty() { diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 33c10ec9b..2035458c7 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -43,7 +43,6 @@ "linux": { "deb": { "files": { - "/usr/bin/defguard-cli": "target/release/defguard-cli", "/usr/bin/dg": "target/release/dg", "/usr/sbin/defguard-service": "target/release/defguard-service", "/usr/lib/systemd/system/defguard-service.service": "../resources-linux/defguard-service.service", @@ -56,7 +55,6 @@ }, "rpm": { "files": { - "/usr/bin/defguard-cli": "target/release/defguard-cli", "/usr/bin/dg": "target/release/dg", "/usr/sbin/defguard-service": "target/release/defguard-service", "/lib/systemd/system/defguard-service.service": "../resources-linux/defguard-service.service" diff --git a/swift/build.sh b/swift/build.sh index fade1c230..4dfd53e51 100755 --- a/swift/build.sh +++ b/swift/build.sh @@ -2,7 +2,7 @@ set -e DST="${PWD}/extension/BoringTun" -CARGO="${HOME}/.cargo/bin/cargo" +CARGO="${CARGO:-${HOME}/.cargo/bin/cargo}" RUSTUP="${HOME}/.cargo/bin/rustup" TARGET_DIR="${CARGO_TARGET_DIR:-./target}" @@ -12,7 +12,9 @@ export MACOSX_DEPLOYMENT_TARGET=13.5 pushd boringtun for TARGET in aarch64-apple-darwin x86_64-apple-darwin; do - ${RUSTUP} target add "${TARGET}" + if [ -x "${RUSTUP}" ]; then + ${RUSTUP} target add "${TARGET}" + fi ${CARGO} build --features=bindgen --lib --locked --release --target ${TARGET} done From 02faa016ea8e7f32301d107d3e024ddda039ac03 Mon Sep 17 00:00:00 2001 From: Jacek Chmielewski Date: Wed, 22 Jul 2026 15:01:00 +0200 Subject: [PATCH 124/155] Implement hardened linux disk encryption posture signal (#1061) Verify if Defguard client db lives on an encrypted device. --- src-tauri/core/src/database/mod.rs | 26 ++ .../enterprise/posture/src/inspector/linux.rs | 384 ++++++++++++++++-- .../posture/src/inspector/tests/ci/linux.rs | 2 +- 3 files changed, 377 insertions(+), 35 deletions(-) diff --git a/src-tauri/core/src/database/mod.rs b/src-tauri/core/src/database/mod.rs index 3df67ec07..7b82e3176 100644 --- a/src-tauri/core/src/database/mod.rs +++ b/src-tauri/core/src/database/mod.rs @@ -1,6 +1,7 @@ use std::{ env, fs::{create_dir_all, File}, + path::PathBuf, str::FromStr, sync::LazyLock, time::Duration, @@ -30,6 +31,31 @@ pub static DB_POOL: LazyLock = LazyLock::new(|| { SqlitePool::connect_lazy_with(opts) }); +/// Extracts a filesystem path from a SQLite connection URL, returning `None` for +/// non-file databases (e.g. `:memory:`) or empty paths. +fn sqlite_url_to_path(url: &str) -> Option { + let path = url + .strip_prefix("sqlite://") + .or_else(|| url.strip_prefix("sqlite:")) + .unwrap_or(url); + let path = path.split('?').next().unwrap_or(path); + if path.is_empty() || path == ":memory:" { + return None; + } + Some(PathBuf::from(path)) +} + +/// Returns the filesystem path of the client's SQLite database file. +/// Mirrors the resolution used by [`prepare_db_url`]. +#[must_use] +pub fn db_file_path() -> Option { + if let Ok(url) = env::var("DATABASE_URL") { + sqlite_url_to_path(&url) + } else { + Some(app_data_dir()?.join(DB_NAME)) + } +} + /// Returns database URL. Checks for custom URL in `DATABASE_URL` environment variable. /// Handles creating appropriate directories if they don't exist. fn prepare_db_url() -> Result { diff --git a/src-tauri/enterprise/posture/src/inspector/linux.rs b/src-tauri/enterprise/posture/src/inspector/linux.rs index bce09a524..d5f1783d1 100644 --- a/src-tauri/enterprise/posture/src/inspector/linux.rs +++ b/src-tauri/enterprise/posture/src/inspector/linux.rs @@ -1,28 +1,36 @@ -use std::process::Command; +use std::{ + fs::read_to_string, + path::{Path, PathBuf}, + process::Command, +}; +use defguard_client_core::database::db_file_path; use serde::Deserialize; use super::UnavailableReason; +/// Path to the kernel's mount table for the current process. +const MOUNTINFO_PATH: &str = "/proc/self/mountinfo"; + #[derive(Deserialize)] struct LsblkDevice { - fstype: Option, + /// Kernel device name (e.g. `dm-0`, `nvme0n1p2`), stable across `lsblk` + /// versions and matching the basename of the canonicalized device path. + kname: Option, #[serde(rename = "type")] device_type: Option, + fstype: Option, children: Option>, } impl LsblkDevice { - // Check if device is encrypted. + /// Whether this device is itself an encryption layer that any data stacked + /// on top of it passes through: an opened dm-crypt mapping (`type == "crypt"`) + /// or a LUKS container partition (`fstype == "crypto_LUKS"`). #[must_use] - fn is_crypto(&self) -> bool { - if let Some(fstype) = &self.fstype { - fstype == "crypto_LUKS" - } else if let Some(device_type) = &self.device_type { - device_type == "crypt" - } else { - false - } + fn is_encryption_layer(&self) -> bool { + self.device_type.as_deref() == Some("crypt") + || self.fstype.as_deref() == Some("crypto_LUKS") } } @@ -31,39 +39,347 @@ struct LsblkOutput { blockdevices: Vec, } -/// Determine if any block device has "crypto_LUKS" type. -fn check_luks() -> Result { - let output = Command::new("lsblk") - .args(["-Jo", "NAME,FSTYPE,TYPE"]) +/// A single mount table entry: its mount point, filesystem type and backing +/// device source. +struct MountEntry { + mount_point: String, + /// Filesystem type, e.g. `ext4`, `btrfs`, `zfs`. + fstype: String, + /// The mount source as reported by the kernel, e.g. `/dev/mapper/cryptroot` + /// for a block device or a dataset name like `rpool/USERDATA/x` for ZFS. + source: String, +} + +/// Un-escapes the octal sequences (`\040` space, `\011` tab, `\012` newline, +/// `\134` backslash) that the kernel uses for special characters in +/// `mountinfo` fields. +fn unescape_mountinfo(field: &str) -> String { + let mut out = String::with_capacity(field.len()); + let mut chars = field.chars(); + while let Some(c) = chars.next() { + if c == '\\' { + let octal: String = chars.clone().take(3).collect(); + if octal.len() == 3 { + if let Ok(code) = u8::from_str_radix(&octal, 8) { + out.push(code as char); + // Consume the three octal digits we just parsed. + chars.nth(2); + continue; + } + } + } + out.push(c); + } + out +} + +/// Parses `/proc/self/mountinfo` content into a list of mount entries. +/// +/// Each line has the form +/// ` - `. +/// The mount point is field index 4 (before the `-` separator); the filesystem +/// type and backing device source are the first two fields after ` - `. +fn parse_mountinfo(content: &str) -> Vec { + content + .lines() + .filter_map(|line| { + let (fields, rest) = line.split_once(" - ")?; + let mount_point = fields.split(' ').nth(4)?; + let mut post = rest.split(' '); + let fstype = post.next()?; + let source = post.next()?; + Some(MountEntry { + mount_point: unescape_mountinfo(mount_point), + fstype: fstype.to_owned(), + source: unescape_mountinfo(source), + }) + }) + .collect() +} + +/// Returns the mount entry that backs `path`: the one whose mount point is the +/// longest path-prefix of `path`. Matching is component-aware, so `/var` does +/// not match `/vart`. Among entries sharing the longest mount point (overmounts) +/// the last one wins, matching the kernel's effective mount. +fn find_backing_mount<'a>(mounts: &'a [MountEntry], path: &Path) -> Option<&'a MountEntry> { + mounts + .iter() + .filter(|entry| path.starts_with(&entry.mount_point)) + .max_by_key(|entry| entry.mount_point.len()) +} + +/// Walks a single `lsblk` device subtree looking for the device with kernel +/// name `kname`. Returns `Some(true)`/`Some(false)` for whether that device (or +/// any ancestor it stacks on) is an encryption layer, or `None` when `kname` is +/// not found in this subtree. +fn walk_device(device: &LsblkDevice, kname: &str, encrypted_ancestor: bool) -> Option { + let encrypted = encrypted_ancestor || device.is_encryption_layer(); + if device.kname.as_deref() == Some(kname) { + return Some(encrypted); + } + if let Some(children) = &device.children { + for child in children { + if let Some(result) = walk_device(child, kname, encrypted) { + return Some(result); + } + } + } + None +} + +/// Returns whether the block device with kernel name `kname` is encrypted, or +/// `None` if it is not present in the tree (e.g. a non-block-backed filesystem +/// such as tmpfs/overlay/zfs that `lsblk` does not represent). +fn device_is_encrypted(devices: &[LsblkDevice], kname: &str) -> Option { + devices + .iter() + .find_map(|device| walk_device(device, kname, false)) +} + +/// Canonicalizes `path`, falling back to its parent directory when the file does +/// not exist yet (the parent lives on the same mount). +fn canonicalize_on_disk(path: &Path) -> Option { + path.canonicalize() + .ok() + .or_else(|| path.parent().and_then(|parent| parent.canonicalize().ok())) +} + +/// Resolves a mount source to the kernel device name of its block device, e.g. +/// `/dev/mapper/cryptroot` -> `dm-0`. Returns `None` when the source is not a +/// resolvable block device path (e.g. `tmpfs`, a ZFS dataset name). +fn source_kname(source: &str) -> Option { + Path::new(source) + .canonicalize() + .ok()? + .file_name() + .map(|name| name.to_string_lossy().into_owned()) +} + +/// Interprets the value of a ZFS `encryption` property. +/// +/// `off` -> not encrypted; a cipher name (e.g. `aes-256-gcm`) or `on` -> +/// encrypted; an empty or `-` value (unknown/unsupported) -> `None`. +fn parse_zfs_encryption(value: &str) -> Option { + match value.trim() { + "" | "-" => None, + "off" => Some(false), + _ => Some(true), + } +} + +/// Reports whether a ZFS dataset uses native encryption. +/// +/// ZFS encryption is a per-dataset filesystem property with no block-layer +/// (dm-crypt) representation, so it is queried directly via the `zfs` CLI rather +/// than through `lsblk`. A mounted dataset implies its key is loaded, so the +/// `encryption` property alone is sufficient (no separate `keystatus` check). +fn zfs_dataset_encrypted(dataset: &str) -> Result { + let output = Command::new("zfs") + .args(["get", "-H", "-o", "value", "encryption", dataset]) .output() .map_err(|_| UnavailableReason::DetectionFailed)?; if !output.status.success() { return Err(UnavailableReason::DetectionFailed); } + let value = String::from_utf8_lossy(&output.stdout); + parse_zfs_encryption(&value).ok_or(UnavailableReason::DetectionFailed) +} - let output: LsblkOutput = +/// Runs `lsblk` and returns the parsed block device tree. +fn read_block_devices() -> Result, UnavailableReason> { + let output = Command::new("lsblk") + .args(["-J", "-o", "KNAME,TYPE,FSTYPE"]) + .output() + .map_err(|_| UnavailableReason::DetectionFailed)?; + if !output.status.success() { + return Err(UnavailableReason::DetectionFailed); + } + let parsed: LsblkOutput = serde_json::from_slice(&output.stdout).map_err(|_| UnavailableReason::DetectionFailed)?; + Ok(parsed.blockdevices) +} - // Check for LUKS. - for device in output.blockdevices { - if device.is_crypto() { - return Ok(true); - } - if let Some(children) = &device.children { - for child in children { - if child.is_crypto() { - return Ok(true); - } - } - } +/// Reports whether the partition that stores the client's database file is +/// encrypted. +/// +/// Two encryption mechanisms are recognized: +/// - **LUKS/dm-crypt** for block-backed filesystems (ext4/xfs/btrfs/LVM/…), via +/// the device stack reported by `lsblk`; +/// - **native ZFS encryption**, via the dataset's `encryption` property. +pub(super) fn disk_encryption_status() -> Result { + // Resolve the database file and the mount that backs it. + let db_path = db_file_path().ok_or(UnavailableReason::DetectionFailed)?; + let db_path = canonicalize_on_disk(&db_path).ok_or(UnavailableReason::DetectionFailed)?; + + let mountinfo = + read_to_string(MOUNTINFO_PATH).map_err(|_| UnavailableReason::DetectionFailed)?; + let mounts = parse_mountinfo(&mountinfo); + let backing = + find_backing_mount(&mounts, &db_path).ok_or(UnavailableReason::DetectionFailed)?; + + // ZFS encryption is a dataset property, not a block-layer device; the mount + // source is the dataset name rather than a `/dev` path. + if backing.fstype == "zfs" { + return zfs_dataset_encrypted(&backing.source); } - Ok(false) + // Otherwise map the mount source to its kernel device name and inspect only + // that stack for a LUKS/dm-crypt layer. + let kname = source_kname(&backing.source).ok_or(UnavailableReason::DetectionFailed)?; + let devices = read_block_devices()?; + device_is_encrypted(&devices, &kname).ok_or(UnavailableReason::DetectionFailed) } -// https://labex.io/tutorials/linux-how-to-check-if-disk-encryption-is-enabled-in-linux-558786 -// FIXME: This will check all available disks, so if any is encrypted, it will succeed. -pub(super) fn disk_encryption_status() -> Result { - // TODO: `zfs list -jo name,encryption,mountpoint` and check for `/` and `on`. - check_luks() +#[cfg(test)] +mod unit_tests { + use super::*; + + fn devices(json: &str) -> Vec { + serde_json::from_str::(json) + .expect("invalid lsblk fixture") + .blockdevices + } + + #[test] + fn unescape_handles_octal_sequences() { + assert_eq!(unescape_mountinfo("/mnt/my\\040disk"), "/mnt/my disk"); + assert_eq!(unescape_mountinfo("/plain/path"), "/plain/path"); + // A lone backslash that is not a valid escape is preserved. + assert_eq!(unescape_mountinfo("/a\\b"), "/a\\b"); + } + + #[test] + fn parse_mountinfo_extracts_mount_point_fstype_and_source() { + let content = "\ +36 35 0:30 / / rw,noatime shared:1 - btrfs /dev/mapper/cryptroot rw,subvol=/ +38 36 0:32 / /mnt/my\\040disk rw shared:3 - ext4 /dev/sdb1 rw +39 36 0:33 / /data rw shared:4 - zfs rpool/USERDATA/x rw"; + let mounts = parse_mountinfo(content); + let rows: Vec<(&str, &str, &str)> = mounts + .iter() + .map(|m| (m.mount_point.as_str(), m.fstype.as_str(), m.source.as_str())) + .collect(); + assert_eq!( + rows, + vec![ + ("/", "btrfs", "/dev/mapper/cryptroot"), + ("/mnt/my disk", "ext4", "/dev/sdb1"), + ("/data", "zfs", "rpool/USERDATA/x"), + ] + ); + } + + fn mount(mount_point: &str, source: &str) -> MountEntry { + MountEntry { + mount_point: mount_point.to_owned(), + fstype: "ext4".to_owned(), + source: source.to_owned(), + } + } + + #[test] + fn parse_zfs_encryption_interprets_property() { + assert_eq!(parse_zfs_encryption("off"), Some(false)); + assert_eq!(parse_zfs_encryption("on"), Some(true)); + assert_eq!(parse_zfs_encryption("aes-256-gcm"), Some(true)); + assert_eq!(parse_zfs_encryption("aes-256-gcm\n"), Some(true)); + assert_eq!(parse_zfs_encryption("-"), None); + assert_eq!(parse_zfs_encryption(""), None); + } + + #[test] + fn find_backing_mount_picks_longest_prefix() { + let mounts = vec![ + mount("/", "/dev/sda1"), + mount("/var", "/dev/sda2"), + mount("/var/lib", "/dev/sda3"), + ]; + assert_eq!( + find_backing_mount(&mounts, Path::new("/var/lib/defguard/db")) + .map(|m| m.source.as_str()), + Some("/dev/sda3") + ); + assert_eq!( + find_backing_mount(&mounts, Path::new("/var/log/x")).map(|m| m.source.as_str()), + Some("/dev/sda2") + ); + assert_eq!( + find_backing_mount(&mounts, Path::new("/home/x")).map(|m| m.source.as_str()), + Some("/dev/sda1") + ); + } + + #[test] + fn find_backing_mount_is_component_aware() { + let mounts = vec![mount("/", "/dev/sda1"), mount("/var", "/dev/sda2")]; + // "/vart" must not match the "/var" mount. + assert_eq!( + find_backing_mount(&mounts, Path::new("/vart/x")).map(|m| m.source.as_str()), + Some("/dev/sda1") + ); + } + + #[test] + fn plain_luks_device_is_encrypted() { + // Mounted device is the opened crypt mapping itself. + let json = r#"{"blockdevices":[ + {"kname":"sda","type":"disk","fstype":null,"children":[ + {"kname":"sda2","type":"part","fstype":"crypto_LUKS","children":[ + {"kname":"dm-0","type":"crypt","fstype":"btrfs","children":null} + ]} + ]} + ]}"#; + assert_eq!(device_is_encrypted(&devices(json), "dm-0"), Some(true)); + } + + #[test] + fn luks_under_lvm_device_is_encrypted() { + // Mounted LVM logical volume stacks on top of a crypt ancestor. + let json = r#"{"blockdevices":[ + {"kname":"sda","type":"disk","fstype":null,"children":[ + {"kname":"sda2","type":"part","fstype":"crypto_LUKS","children":[ + {"kname":"dm-0","type":"crypt","fstype":"LVM2_member","children":[ + {"kname":"dm-1","type":"lvm","fstype":"ext4","children":null} + ]} + ]} + ]} + ]}"#; + assert_eq!(device_is_encrypted(&devices(json), "dm-1"), Some(true)); + } + + #[test] + fn plaintext_device_is_not_encrypted() { + let json = r#"{"blockdevices":[ + {"kname":"sda","type":"disk","fstype":null,"children":[ + {"kname":"sda2","type":"part","fstype":"ext4","children":null} + ]} + ]}"#; + assert_eq!(device_is_encrypted(&devices(json), "sda2"), Some(false)); + } + + #[test] + fn unrelated_encrypted_device_does_not_leak() { + // An encrypted loop device must not make the plaintext root device report + // as encrypted (the regression this hardening targets). + let json = r#"{"blockdevices":[ + {"kname":"loop0","type":"loop","fstype":"crypto_LUKS","children":[ + {"kname":"dm-9","type":"crypt","fstype":"ext4","children":null} + ]}, + {"kname":"sda","type":"disk","fstype":null,"children":[ + {"kname":"sda2","type":"part","fstype":"ext4","children":null} + ]} + ]}"#; + assert_eq!(device_is_encrypted(&devices(json), "sda2"), Some(false)); + assert_eq!(device_is_encrypted(&devices(json), "dm-9"), Some(true)); + } + + #[test] + fn missing_device_returns_none() { + let json = r#"{"blockdevices":[ + {"kname":"sda","type":"disk","fstype":null,"children":[ + {"kname":"sda2","type":"part","fstype":"ext4","children":null} + ]} + ]}"#; + assert_eq!(device_is_encrypted(&devices(json), "dm-42"), None); + } } diff --git a/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs b/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs index 4d97a9af0..712c2083e 100644 --- a/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs +++ b/src-tauri/enterprise/posture/src/inspector/tests/ci/linux.rs @@ -100,7 +100,7 @@ mod setup2 { #[test] #[ignore = "CI posture testing only"] - fn test_disk_encryption_status_unencrypted() { + fn test_disk_encryption_status_encrypted() { assert!(disk_encryption_status().unwrap()); } } From dabd080a9573674c0544b849937e428becf935ac Mon Sep 17 00:00:00 2001 From: Maciek <19913370+wojcik91@users.noreply.github.com> Date: Tue, 28 Jul 2026 09:58:45 +0200 Subject: [PATCH 125/155] show errors during enrollment wizard (#1063) * remove unused structs * use proto-generated structs * log proxy errors in enrollment wizard * setup enrollment error modal component * display enrollment errors using the modal * cleanup * fix nix/nixos setup after removing separate CLI binary * add temporary trivyignore entries * also ignore in pnpm audit * update nix package to pnpm 11 * update ignore config --- .trivyignore.yaml | 9 ++++ .../full/EnrollmentPage/EnrollmentPage.tsx | 2 + .../EnrollmentErrorModal.tsx | 53 +++++++++++++++++++ .../EnrollmentErrorModal/style.scss | 6 +++ .../pages/full/EnrollmentPage/errorCopy.ts | 16 ++++++ .../hooks/useEnrollmentErrorHandler.ts | 27 ++++++++++ .../hooks/useEnrollmentErrorModal.tsx | 33 ++++++++++++ .../steps/FinishStep/FinishStep.tsx | 7 ++- .../steps/MfaChoiceStep/MfaChoiceStep.tsx | 8 +++ .../MfaConfigurationStep.tsx | 36 ++++++------- .../steps/PasswordStep/PasswordStep.tsx | 4 ++ .../steps/WelcomeStep/WelcomeStep.tsx | 13 ++++- nix/nixos-module.nix | 20 ++----- nix/package.nix | 7 ++- pnpm-workspace.yaml | 6 +++ src-tauri/core/src/enrollment.rs | 21 ++------ src-tauri/src/commands.rs | 27 ++-------- 17 files changed, 216 insertions(+), 79 deletions(-) create mode 100644 new-ui/src/pages/full/EnrollmentPage/components/EnrollmentErrorModal/EnrollmentErrorModal.tsx create mode 100644 new-ui/src/pages/full/EnrollmentPage/components/EnrollmentErrorModal/style.scss create mode 100644 new-ui/src/pages/full/EnrollmentPage/errorCopy.ts create mode 100644 new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentErrorHandler.ts create mode 100644 new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentErrorModal.tsx diff --git a/.trivyignore.yaml b/.trivyignore.yaml index 0f163d54b..b33a42431 100644 --- a/.trivyignore.yaml +++ b/.trivyignore.yaml @@ -2,3 +2,12 @@ vulnerabilities: - id: GHSA-wrw7-89jp-8q8g expired_at: 2026-09-30 statement: "glib is a transitive dependency of Tauri which we cannot update ourselves. Waiting for tauri to finish migration to gtk4-rs: https://github.com/tauri-apps/tauri/issues/12563" + - id: CVE-2026-53666 + expired_at: 2026-08-01 + statement: "CVE in legacy UI. To be removed before 2.1 release." + - id: CVE-2026-53669 + expired_at: 2026-08-01 + statement: "CVE in legacy UI. To be removed before 2.1 release." + - id: CVE-2026-53668 + expired_at: 2026-08-01 + statement: "CVE in legacy UI. To be removed before 2.1 release." diff --git a/new-ui/src/pages/full/EnrollmentPage/EnrollmentPage.tsx b/new-ui/src/pages/full/EnrollmentPage/EnrollmentPage.tsx index 6c0f551a5..9bf40c5cd 100644 --- a/new-ui/src/pages/full/EnrollmentPage/EnrollmentPage.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/EnrollmentPage.tsx @@ -1,6 +1,7 @@ import { type ReactNode, useMemo } from 'react'; import type { WizardPageStep } from '../../../shared/components/wizard/types'; import { WizardPage } from '../../../shared/components/wizard/WizardPage/WizardPage'; +import { EnrollmentErrorModal } from './components/EnrollmentErrorModal/EnrollmentErrorModal'; import { EnrollmentTimeoutProvider } from './components/EnrollmentTimeoutProvider'; import { useEnrollmentStore } from './hooks/useEnrollmentStore'; import { FinishStep } from './steps/FinishStep/FinishStep'; @@ -68,6 +69,7 @@ export const EnrollmentPage = () => { {stepComponents[activeStep]} + ); }; diff --git a/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentErrorModal/EnrollmentErrorModal.tsx b/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentErrorModal/EnrollmentErrorModal.tsx new file mode 100644 index 000000000..d32136add --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentErrorModal/EnrollmentErrorModal.tsx @@ -0,0 +1,53 @@ +import './style.scss'; + +import { useShallow } from 'zustand/shallow'; + +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../shared/components/Controls/Controls'; +import { Modal } from '../../../../../shared/components/Modal/Modal'; +import { useEnrollmentErrorModal } from '../../hooks/useEnrollmentErrorModal'; + +export const EnrollmentErrorModal = () => { + const [isOpen, title] = useEnrollmentErrorModal( + useShallow((s) => [s.visible, s.title]), + ); + + return ( + { + useEnrollmentErrorModal.getState().close(); + }} + afterClose={() => { + useEnrollmentErrorModal.getState().reset(); + }} + > + + + ); +}; + +const ModalContent = () => { + const message = useEnrollmentErrorModal((s) => s.message); + + return ( + <> +

    {message}

    + +
    +
    +
    + + ); +}; diff --git a/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentErrorModal/style.scss b/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentErrorModal/style.scss new file mode 100644 index 000000000..81aeef42c --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/components/EnrollmentErrorModal/style.scss @@ -0,0 +1,6 @@ +#enrollment-error-modal { + .message { + font: var(--t-body-sm-400); + color: var(--fg-white-100); + } +} diff --git a/new-ui/src/pages/full/EnrollmentPage/errorCopy.ts b/new-ui/src/pages/full/EnrollmentPage/errorCopy.ts new file mode 100644 index 000000000..e3fefed0a --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/errorCopy.ts @@ -0,0 +1,16 @@ +export type EnrollmentErrorCopyEntry = { title: string; message: string }; + +export const EnrollmentErrorCopy = { + mfa: { + title: 'Verification Failed', + message: + 'Something went wrong while verifying your identity with this authentication method. ' + + 'Please try again or choose a different MFA method.', + }, + generic: { + title: 'Something went wrong', + message: + "We couldn't reach an external service to complete this step. " + + 'This may be a network issue or a temporary service outage. Please try again.', + }, +} as const; diff --git a/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentErrorHandler.ts b/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentErrorHandler.ts new file mode 100644 index 000000000..5dd065540 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentErrorHandler.ts @@ -0,0 +1,27 @@ +import { useNavigate } from '@tanstack/react-router'; +import { useCallback } from 'react'; +import { parseEnrollmentError } from '../../../../shared/rust-api/enrollment'; +import { EnrollmentErrorCopy, type EnrollmentErrorCopyEntry } from '../errorCopy'; +import { useEnrollmentErrorModal } from './useEnrollmentErrorModal'; + +export const useEnrollmentErrorHandler = () => { + const navigate = useNavigate(); + + const handleError = useCallback( + (err: unknown, copy: EnrollmentErrorCopyEntry) => { + const parsed = parseEnrollmentError(err); + if (parsed.errorKind === 'unauthorized') { + void navigate({ to: '/full/session-timeout' }); + return; + } + if (parsed.errorKind === 'network') { + useEnrollmentErrorModal.getState().open(EnrollmentErrorCopy.generic); + return; + } + useEnrollmentErrorModal.getState().open(copy); + }, + [navigate], + ); + + return handleError; +}; diff --git a/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentErrorModal.tsx b/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentErrorModal.tsx new file mode 100644 index 000000000..7b65087d9 --- /dev/null +++ b/new-ui/src/pages/full/EnrollmentPage/hooks/useEnrollmentErrorModal.tsx @@ -0,0 +1,33 @@ +import { create } from 'zustand'; +import type { EnrollmentErrorCopyEntry } from '../errorCopy'; + +type StoreValues = { + visible: boolean; + title: string; + message: string; +}; + +const defaults: StoreValues = { + visible: false, + title: '', + message: '', +}; + +interface Store extends StoreValues { + open: (values: EnrollmentErrorCopyEntry) => void; + close: () => void; + reset: () => void; +} + +export const useEnrollmentErrorModal = create()((set) => ({ + ...defaults, + open: (values) => { + set({ title: values.title, message: values.message, visible: true }); + }, + close: () => { + set({ visible: false }); + }, + reset: () => { + set(defaults); + }, +})); diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx index 7ca28f94f..de7bec80c 100644 --- a/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/steps/FinishStep/FinishStep.tsx @@ -1,5 +1,6 @@ import './style.scss'; import { useNavigate } from '@tanstack/react-router'; +import { error } from '@tauri-apps/plugin-log'; import { Button } from '../../../../../shared/components/Button/Button'; import { ButtonVariant } from '../../../../../shared/components/Button/types'; import { Controls } from '../../../../../shared/components/Controls/Controls'; @@ -36,9 +37,11 @@ export const FinishStep = () => { onClick={() => { // Release the enrollment session now that the wizard is done. // Best-effort: enrollment_finish errors if the session is already - // gone, so swallow failures and leave the wizard regardless. + // gone, so we log and exit the wizard regardless. if (isPresent(sessionId)) { - void api.enrollmentFinish(sessionId).catch(() => {}); + void api.enrollmentFinish(sessionId).catch((err) => { + void error(`enrollmentFinish failed: ${err}`); + }); } navigate({ to: '/full/overview', replace: true }); }} diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx index 3e8315829..521fd04f7 100644 --- a/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/steps/MfaChoiceStep/MfaChoiceStep.tsx @@ -1,6 +1,7 @@ /** biome-ignore-all lint/style/noNonNullAssertion: sessionId is set in start(), called before */ import { useMutation } from '@tanstack/react-query'; import './style.scss'; +import { error as logError } from '@tauri-apps/plugin-log'; import clsx from 'clsx'; import { useState } from 'react'; import { @@ -14,10 +15,13 @@ import { api } from '../../../../../shared/rust-api/api'; import { MfaMethod, type MfaMethodValue } from '../../../../../shared/rust-api/types'; import { ThemeSpacing } from '../../../../../shared/types'; import { EnrollmentControls } from '../../components/EnrollmentControls/EnrollmentControls'; +import { EnrollmentErrorCopy } from '../../errorCopy'; +import { useEnrollmentErrorHandler } from '../../hooks/useEnrollmentErrorHandler'; import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; export const MfaChoiceStep = () => { const sessionId = useEnrollmentStore((s) => s.sessionId); + const handleError = useEnrollmentErrorHandler(); const [mfa, setMfa] = useState( useEnrollmentStore.getState().userMfaChoice, ); @@ -35,6 +39,10 @@ export const MfaChoiceStep = () => { } useEnrollmentStore.getState().next(); }, + onError: (err) => { + void logError(`MFA start failed: ${err}`); + handleError(err, EnrollmentErrorCopy.mfa); + }, }); return ( diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/MfaConfigurationStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/MfaConfigurationStep.tsx index d6061246f..f9621fd86 100644 --- a/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/MfaConfigurationStep.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/steps/MfaConfigurationStep/MfaConfigurationStep.tsx @@ -8,32 +8,27 @@ import { Divider } from '../../../../../shared/components/Divider/Divider'; import { QrCard } from '../../../../../shared/components/QrCard/QrCard'; import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; import { api } from '../../../../../shared/rust-api/api'; +import { parseEnrollmentError } from '../../../../../shared/rust-api/enrollment'; import { MfaMethod } from '../../../../../shared/rust-api/types'; import { ThemeSpacing } from '../../../../../shared/types'; import { isPresent } from '../../../../../shared/utils/isPresent'; import { EnrollmentControls } from '../../components/EnrollmentControls/EnrollmentControls'; +import { EnrollmentErrorCopy } from '../../errorCopy'; import { activateUser } from '../../hooks/activateUser'; +import { useEnrollmentErrorHandler } from '../../hooks/useEnrollmentErrorHandler'; import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; /** - * Map a register-mfa-finish error to a user-facing message. The proxy rejects - * a wrong code with a `proxy_error` (HTTP 400) whose message contains "invalid" - * (core returns "Code invalid" / "Email code invalid"); anything else is - * unexpected and gets a generic message. + * True when the error is a proxy rejecting an invalid MFA code (HTTP 400 + * with "invalid" in the message), which should show the inline CodeInput + * error rather than the error modal. */ -const mfaFinishErrorMessage = (err: unknown): string => { - try { - const parsed = JSON.parse(String(err)) as { type?: string; message?: string }; - if ( - parsed.type === 'proxy_error' && - parsed.message?.toLowerCase().includes('invalid') - ) { - return 'Invalid code'; - } - } catch { - // Non-JSON error: fall through to the generic message. - } - return 'MFA setup failed. Please try again.'; +const isInvalidMfaCode = (err: unknown): boolean => { + const parsed = parseEnrollmentError(err); + return ( + parsed.errorKind === 'server' && + parsed.error?.toLowerCase().includes('invalid') === true + ); }; export const MfaConfigurationStep = () => { @@ -41,6 +36,7 @@ export const MfaConfigurationStep = () => { const method = useEnrollmentStore((s) => s.userMfaChoice); const [code, setCode] = useState(null); const [error, setError] = useState(null); + const handleError = useEnrollmentErrorHandler(); const { mutate, isPending } = useMutation({ mutationFn: async () => { @@ -51,7 +47,11 @@ export const MfaConfigurationStep = () => { }, onError: (err) => { void logError(`MFA configuration failed: ${err}`); - setError(mfaFinishErrorMessage(err)); + if (isInvalidMfaCode(err)) { + setError('Invalid code'); + return; + } + handleError(err, EnrollmentErrorCopy.mfa); }, onSuccess: (resp) => { useEnrollmentStore.setState({ diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/PasswordStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/PasswordStep.tsx index a6f590b4f..fc4be3e95 100644 --- a/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/PasswordStep.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/steps/PasswordStep/PasswordStep.tsx @@ -14,7 +14,9 @@ import { api } from '../../../../../shared/rust-api/api'; import { MfaMethod } from '../../../../../shared/rust-api/types'; import { ThemeSpacing } from '../../../../../shared/types'; import { EnrollmentControls } from '../../components/EnrollmentControls/EnrollmentControls'; +import { EnrollmentErrorCopy } from '../../errorCopy'; import { activateUser } from '../../hooks/activateUser'; +import { useEnrollmentErrorHandler } from '../../hooks/useEnrollmentErrorHandler'; import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; import { type PasswordErrorCodeValue, @@ -60,6 +62,7 @@ const defaultValues: FormFields = { export const PasswordStep = () => { const sessionId = useEnrollmentStore((s) => s.sessionId); + const handleError = useEnrollmentErrorHandler(); const { mutateAsync: startMfa } = useMutation({ mutationFn: () => api.enrollmentRegisterMfaStart(sessionId!, MfaMethod.Totp), }); @@ -89,6 +92,7 @@ export const PasswordStep = () => { useEnrollmentStore.getState().next(); } catch (err) { void error(`Password step failed: ${err}`); + handleError(err, EnrollmentErrorCopy.generic); } }, }); diff --git a/new-ui/src/pages/full/EnrollmentPage/steps/WelcomeStep/WelcomeStep.tsx b/new-ui/src/pages/full/EnrollmentPage/steps/WelcomeStep/WelcomeStep.tsx index 858f9017e..cf35b8623 100644 --- a/new-ui/src/pages/full/EnrollmentPage/steps/WelcomeStep/WelcomeStep.tsx +++ b/new-ui/src/pages/full/EnrollmentPage/steps/WelcomeStep/WelcomeStep.tsx @@ -1,4 +1,5 @@ import './style.scss'; +import { error } from '@tauri-apps/plugin-log'; import dayjs from 'dayjs'; import { useMemo, useState } from 'react'; import { InfoBanner } from '../../../../../shared/components/InfoBanner/InfoBanner'; @@ -6,7 +7,9 @@ import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; import { ThemeSpacing } from '../../../../../shared/types'; import { formatDuration } from '../../../../../shared/utils/formatDuration'; import { EnrollmentControls } from '../../components/EnrollmentControls/EnrollmentControls'; +import { EnrollmentErrorCopy } from '../../errorCopy'; import { activateUser } from '../../hooks/activateUser'; +import { useEnrollmentErrorHandler } from '../../hooks/useEnrollmentErrorHandler'; import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; export const WelcomeStep = () => { @@ -14,6 +17,7 @@ export const WelcomeStep = () => { const [activating, setActivating] = useState(false); const skipPassword = useEnrollmentStore((s) => s.skipPassword); const skipMfa = useEnrollmentStore((s) => s.skipMfa); + const handleError = useEnrollmentErrorHandler(); const timeLeft = useMemo(() => { const deadline = enrollData?.deadline_timestamp; @@ -52,7 +56,14 @@ export const WelcomeStep = () => { onNext={async () => { if (skipPassword && skipMfa) { setActivating(true); - await activateUser(); + try { + await activateUser(); + } catch (err) { + void error(`Welcome step activation failed: ${err}`); + handleError(err, EnrollmentErrorCopy.generic); + setActivating(false); + return; + } } useEnrollmentStore.getState().next(); }} diff --git a/nix/nixos-module.nix b/nix/nixos-module.nix index ddcc1c038..0c62d7ba3 100644 --- a/nix/nixos-module.nix +++ b/nix/nixos-module.nix @@ -11,7 +11,6 @@ svcCfg = config.services.defguard-client-daemon; clientCfg = config.programs.defguard-client; - cliCfg = config.programs.defguard-cli; in { options.services.defguard-client-daemon = { enable = mkEnableOption "Defguard VPN client background service (required by both the desktop client and CLI)"; @@ -51,30 +50,19 @@ in { }; }; - options.programs.defguard-cli = { - enable = mkEnableOption "Defguard VPN CLI client (headless)"; - - package = mkOption { - type = types.package; - default = defguard-client; - description = "Package that provides the defguard-cli binary."; - }; - }; - config = mkMerge [ - # Auto-enable the daemon when the desktop client or CLI is enabled. + # Auto-enable the daemon when the desktop client is enabled. # Users can override with services.defguard-client-daemon.enable = false. { - services.defguard-client-daemon.enable = mkDefault (clientCfg.enable || cliCfg.enable); + services.defguard-client-daemon.enable = mkDefault clientCfg.enable; } # Add the relevant packages to the system PATH. - (mkIf (svcCfg.enable || clientCfg.enable || cliCfg.enable) { + (mkIf (svcCfg.enable || clientCfg.enable) { environment.systemPackages = [] ++ optional svcCfg.enable svcCfg.package - ++ optional clientCfg.enable clientCfg.package - ++ optional cliCfg.enable cliCfg.package; + ++ optional clientCfg.enable clientCfg.package; }) # Daemon-only configuration: systemd service and dedicated group. diff --git a/nix/package.nix b/nix/package.nix index 8c519b919..3b9c6cec4 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -20,7 +20,7 @@ categories = ["Network" "Security"]; }; - pnpm = pkgs.pnpm_10; + pnpm = pkgs.pnpm_11; buildInputs = with pkgs; [ at-spi2-atk @@ -90,7 +90,7 @@ inherit pname version pnpm; src = ../.; fetcherVersion = 3; - hash = "sha256-wHUC14/bATR1HZ1SN+XJKZ64wFirXnSHL2aHblddOes="; + hash = "sha256-CqWUwzsTw6NlM96kPobXFuyS2kIM1oHVbun/F7SqgK8="; }; # Prefetch pnpm dependencies for the new UI (separate pnpm project). @@ -99,7 +99,7 @@ inherit version pnpm; src = ../new-ui; fetcherVersion = 3; - hash = "sha256-1ChpZFG8gJ1ciwfNB1ynOuwRWsMiOs7Ol3BU5rcuaN8="; + hash = "sha256-MGwjt5tV4Uhn0VvEouAij6ldgLR7Qj47TzbUVOTtlx8="; }; # Pre-build the new UI frontend so Tauri can serve it as WebviewUrl::App("compact/") and "full/". @@ -190,7 +190,6 @@ in mkdir -p $out/bin install -Dm755 "$targetDir/${pname}" $out/bin/${pname} install -Dm755 "$targetDir/defguard-service" $out/bin/defguard-service - install -Dm755 "$targetDir/defguard-cli" $out/bin/defguard-cli install -Dm755 "$targetDir/dg" $out/bin/dg mkdir -p $out/lib/${pname} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8e865a77d..b1179a202 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,3 +3,9 @@ allowBuilds: '@swc/core': true esbuild: true itertools: false + +auditConfig: + ignoreGhsas: + - GHSA-wrjc-x8rr-h8h6 + - GHSA-jjmj-jmhj-qwj2 + - GHSA-337j-9hxr-rhxg diff --git a/src-tauri/core/src/enrollment.rs b/src-tauri/core/src/enrollment.rs index cfda7f467..a37d78235 100644 --- a/src-tauri/core/src/enrollment.rs +++ b/src-tauri/core/src/enrollment.rs @@ -5,10 +5,11 @@ //! MFA, and finishing the enrollment. use defguard_client_proto::defguard::client_types::{ - DeviceConfigResponse, EnrollmentStartResponse, + CodeMfaSetupFinishResponse, CodeMfaSetupStartResponse, DeviceConfigResponse, + EnrollmentStartResponse, }; use reqwest::{Client, Response, StatusCode, Url}; -use serde::{Deserialize, Serialize}; +use serde::Serialize; use serde_json::json; use thiserror::Error; @@ -48,18 +49,6 @@ pub struct EnrollmentSession { pub client: Client, } -/// Response from `POST /api/v1/enrollment/register-mfa/code/start`. -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct MfaStartResponse { - pub totp_secret: Option, -} - -/// Response from `POST /api/v1/enrollment/register-mfa/code/finish`. -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct MfaFinishResponse { - pub recovery_codes: Vec, -} - /// Send a JSON POST request to an enrollment endpoint with the session /// cookie and standard client headers. async fn enrollment_post( @@ -242,7 +231,7 @@ pub async fn enrollment_activate_user( pub async fn enrollment_register_mfa_start( session: EnrollmentSession, method: String, -) -> Result { +) -> Result { let response = enrollment_post( &session, "api/v1/enrollment/register-mfa/code/start", @@ -264,7 +253,7 @@ pub async fn enrollment_register_mfa_finish( session: EnrollmentSession, code: String, method: String, -) -> Result { +) -> Result { let response = enrollment_post( &session, "api/v1/enrollment/register-mfa/code/finish", diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index d51861a32..e95355f91 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -9,7 +9,7 @@ use defguard_client_core::{ active_connections::{find_connection, get_connection_id_by_type, ACTIVE_CONNECTIONS}, disconnect_interface, }, - enrollment::{self, MfaFinishResponse, MfaStartResponse}, + enrollment::{self}, mfa, }; use defguard_client_posture::authorize_posture_session; @@ -20,8 +20,8 @@ use defguard_client_proto::defguard::client::v1::{ use defguard_client_proto::defguard::{ client_types::{ AdminInfo, ClientMfaFinishRequest, ClientMfaFinishResponse, ClientMfaStartRequest, - DeviceConfigResponse, EnrollmentSettings, InitialUserInfo, - InstanceInfo as ProtoInstanceInfo, MfaMethod, + CodeMfaSetupFinishResponse, CodeMfaSetupStartResponse, DeviceConfigResponse, + EnrollmentSettings, InitialUserInfo, InstanceInfo as ProtoInstanceInfo, MfaMethod, }, enterprise::posture::v2::DevicePostureData, }; @@ -367,23 +367,6 @@ async fn maybe_update_instance_config(location_id: Id, handle: &AppHandle) -> Re Ok(()) } -#[derive(Deserialize, Serialize)] -pub struct Device { - pub id: Id, - pub name: String, - pub pubkey: String, - pub user_id: Id, - pub created_at: i64, -} - -#[derive(Deserialize, Serialize)] -pub struct InstanceResponse { - // uuid - pub id: String, - pub name: String, - pub url: String, -} - #[derive(Serialize)] pub struct SaveDeviceConfigResponse { locations: Vec>, @@ -1467,7 +1450,7 @@ pub async fn enrollment_register_mfa_start( session_id: String, method: String, state: State<'_, AppState>, -) -> Result { +) -> Result { debug!("Starting MFA setup"); let session = get_enrollment_session(&state, &session_id)?; enrollment::enrollment_register_mfa_start(session, method) @@ -1481,7 +1464,7 @@ pub async fn enrollment_register_mfa_finish( code: String, method: String, state: State<'_, AppState>, -) -> Result { +) -> Result { debug!("Finishing MFA setup"); let session = get_enrollment_session(&state, &session_id)?; enrollment::enrollment_register_mfa_finish(session, code, method) From 6dc55e001a09b43c1a75dddb696540da2b4256d2 Mon Sep 17 00:00:00 2001 From: Jacek Chmielewski Date: Wed, 29 Jul 2026 09:13:54 +0200 Subject: [PATCH 126/155] Fix service logs file extension (#1065) Fix service logs file extension. --- src-tauri/daemon/src/daemon.rs | 2 +- src-tauri/daemon/src/utils.rs | 73 ++++++++++++++++++- .../src/log_watcher/global_log_watcher.rs | 3 +- src-tauri/src/log_watcher/mod.rs | 10 ++- .../src/log_watcher/service_log_watcher.rs | 3 +- 5 files changed, 78 insertions(+), 13 deletions(-) diff --git a/src-tauri/daemon/src/daemon.rs b/src-tauri/daemon/src/daemon.rs index 5d3fa7753..254e3160f 100644 --- a/src-tauri/daemon/src/daemon.rs +++ b/src-tauri/daemon/src/daemon.rs @@ -77,7 +77,7 @@ pub enum DaemonError { WindowsServiceError(#[from] windows_service::Error), #[cfg(windows)] #[error(transparent)] - LogAppenderInitError(#[from] tracing_appender::rolling::InitError), + LogSetupError(#[from] crate::utils::LoggingSetupError), } type IfName = String; diff --git a/src-tauri/daemon/src/utils.rs b/src-tauri/daemon/src/utils.rs index e666a9d84..4e8d8075e 100644 --- a/src-tauri/daemon/src/utils.rs +++ b/src-tauri/daemon/src/utils.rs @@ -1,4 +1,8 @@ -use std::io::stdout; +use std::{ + fs, + io::{self, stdout}, + path::Path, +}; use tracing::Level; use tracing_appender::{ @@ -10,17 +14,29 @@ use tracing_subscriber::{ Layer, }; -static SERVICE_LOG_PREFIX: &str = "defguard-service.log"; +const SERVICE_LOG_PREFIX: &str = "defguard-service"; +const OLD_SERVICE_LOG_PREFIX: &str = "defguard-service.log."; + +#[derive(Debug, thiserror::Error)] +pub enum LoggingSetupError { + #[error("failed to migrate service log files: {0}")] + Migration(#[source] io::Error), + #[error("failed to initialize service log appender: {0}")] + Appender(#[from] InitError), +} pub fn logging_setup( log_dir: &str, log_level: &str, log_max_files: usize, -) -> Result { +) -> Result { + migrate_service_log_files(Path::new(log_dir)).map_err(LoggingSetupError::Migration)?; + // prepare log file appender let mut appender_builder = RollingFileAppender::builder() .rotation(Rotation::DAILY) - .filename_prefix(SERVICE_LOG_PREFIX); + .filename_prefix(SERVICE_LOG_PREFIX) + .filename_suffix("log"); if log_max_files > 0 { appender_builder = appender_builder.max_log_files(log_max_files); } @@ -52,3 +68,52 @@ pub fn logging_setup( Ok(guard) } + +fn migrate_service_log_files(log_dir: &Path) -> io::Result<()> { + let entries = match fs::read_dir(log_dir) { + Ok(entries) => entries, + Err(err) if err.kind() == io::ErrorKind::NotFound => return Ok(()), + Err(err) => return Err(err), + }; + + for entry in entries { + let entry = entry?; + if !entry.file_type()?.is_file() { + continue; + } + + let filename = entry.file_name(); + let Some(filename) = filename.to_str() else { + continue; + }; + let Some(date) = filename.strip_prefix(OLD_SERVICE_LOG_PREFIX) else { + continue; + }; + if !is_log_date(date) { + continue; + } + + let new_path = log_dir.join(format!("{SERVICE_LOG_PREFIX}.{date}.log")); + if new_path.exists() { + eprintln!( + "Skipping service log migration because destination already exists: {}", + new_path.display() + ); + continue; + } + + fs::rename(entry.path(), new_path)?; + } + + Ok(()) +} + +fn is_log_date(value: &str) -> bool { + value.len() == 10 + && value.as_bytes()[4] == b'-' + && value.as_bytes()[7] == b'-' + && value + .bytes() + .enumerate() + .all(|(index, byte)| matches!(index, 4 | 7) || byte.is_ascii_digit()) +} diff --git a/src-tauri/src/log_watcher/global_log_watcher.rs b/src-tauri/src/log_watcher/global_log_watcher.rs index 873eaf533..423b397cb 100644 --- a/src-tauri/src/log_watcher/global_log_watcher.rs +++ b/src-tauri/src/log_watcher/global_log_watcher.rs @@ -91,8 +91,7 @@ impl LogDirs { /// Find the latest log file in directory for the service /// - /// Log files are rotated daily and have a known naming format, - /// with the last 10 characters specifying a date (e.g. `2023-12-15`). + /// Log files are rotated daily and include the date in their filename. #[cfg(not(target_os = "macos"))] fn get_latest_log_file(&self) -> Result, LogWatcherError> { debug!( diff --git a/src-tauri/src/log_watcher/mod.rs b/src-tauri/src/log_watcher/mod.rs index b2c5bb8d3..9dc23e356 100644 --- a/src-tauri/src/log_watcher/mod.rs +++ b/src-tauri/src/log_watcher/mod.rs @@ -9,6 +9,9 @@ use serde_with::{serde_as, DisplayFromStr}; use thiserror::Error; use tracing::Level; +const SERVICE_LOG_PREFIX: &str = "defguard-service."; +const SERVICE_LOG_SUFFIX: &str = ".log"; + pub mod global_log_watcher; pub mod service_log_watcher; @@ -68,10 +71,9 @@ struct LogLineFields { fn extract_timestamp(filename: &str) -> Option { trace!("Extracting timestamp from log file name: {filename}"); - // we know that the date is always in the last 10 characters - let split_pos = filename.char_indices().nth_back(9)?.0; - let timestamp = &filename[split_pos..]; - // parse and convert to `NaiveDate` + let timestamp = filename + .strip_prefix(SERVICE_LOG_PREFIX)? + .strip_suffix(SERVICE_LOG_SUFFIX)?; NaiveDate::parse_from_str(timestamp, "%Y-%m-%d").ok() } diff --git a/src-tauri/src/log_watcher/service_log_watcher.rs b/src-tauri/src/log_watcher/service_log_watcher.rs index ede8e65b5..280576796 100644 --- a/src-tauri/src/log_watcher/service_log_watcher.rs +++ b/src-tauri/src/log_watcher/service_log_watcher.rs @@ -183,8 +183,7 @@ impl<'a> ServiceLogWatcher<'a> { /// Find the latest log file in directory /// - /// Log files are rotated daily and have a knows naming format, - /// with the last 10 characters specifying a date (e.g. `2023-12-15`). + /// Log files are rotated daily and include the date in their filename. fn get_latest_log_file(&self) -> Result, LogWatcherError> { trace!( "Getting latest log file from directory: {}", From 66c8f37b6e72222472ba3fb6944dee01533a45ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Wed, 29 Jul 2026 09:49:41 +0200 Subject: [PATCH 127/155] old ui project removed (#1068) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * old ui project removed * fix lint e2e, update trivy ignore * update workflows cache logic * fix cache storage path * add missing page to nix package * bump wdio versions, fixes broken tests on node 26 * use action cache v5 --------- Co-authored-by: Maciej Wójcik --- .eslintignore | 3 - .eslintrc.cjs | 82 - .github/workflows/build-macos.yaml | 20 +- .github/workflows/e2e.yaml | 25 +- .github/workflows/lint.yaml | 22 +- .github/workflows/release-macos.yaml | 19 +- .github/workflows/release.yaml | 42 +- .github/workflows/update-pnpm-hash.yaml | 21 +- .prettierignore | 2 - .prettierrc | 7 - .trivyignore.yaml | 9 - .typesafe-i18n.json | 4 - README.md | 22 +- biome.json | 105 - e2e/biome.json | 90 +- e2e/helpers/client.ts | 30 +- e2e/helpers/clipboard.ts | 12 +- e2e/helpers/connection.ts | 62 +- e2e/helpers/coreApi.ts | 355 +- e2e/helpers/enrollment.ts | 85 +- e2e/helpers/mfa.ts | 46 +- e2e/helpers/totp.ts | 12 +- e2e/helpers/tunnel.ts | 22 +- e2e/helpers/windows.ts | 32 +- e2e/helpers/wireguard.ts | 85 +- e2e/package.json | 46 +- e2e/pnpm-lock.yaml | 893 ++- e2e/scripts/provision.mjs | 166 +- e2e/tests/enrollment.spec.ts | 116 +- e2e/tests/logs.spec.ts | 66 +- e2e/tests/wireguard_tunnel.spec.ts | 104 +- e2e/tsconfig.json | 22 +- e2e/wdio.conf.ts | 187 +- index.html | 16 - justfile | 4 +- nix/package.nix | 35 +- package.json | 126 - pnpm-lock.yaml | 6087 ----------------- pnpm-workspace.yaml | 11 - postcss.config.js | 5 - src-tauri/capabilities/default.json | 2 +- src-tauri/permissions/default.toml | 2 +- src/components/App/App.tsx | 229 - .../ApplicationUpdateManager.tsx | 96 - .../useApplicationUpdateStore.tsx | 28 - .../useNewAppVersionAvailable.tsx | 15 - src/components/AutoProvisioningManager.tsx | 48 - .../LogoContainer/LogoContainer.tsx | 16 - src/components/LogoContainer/style.scss | 25 - src/i18n/en/index.ts | 790 --- src/i18n/formatters.ts | 12 - src/i18n/fr/index.ts | 749 -- src/i18n/i18n-react.tsx | 16 - src/i18n/i18n-types.ts | 3432 ---------- src/i18n/i18n-util.async.ts | 27 - src/i18n/i18n-util.sync.ts | 26 - src/i18n/i18n-util.ts | 38 - src/main.tsx | 29 - src/pages/client/ClientPage.tsx | 232 - src/pages/client/clientAPI/clientApi.ts | 191 - src/pages/client/clientAPI/types.ts | 154 - .../ClientSideBar/ClientSideBar.tsx | 209 - .../ClientBarItem/ClientBarItem.tsx | 77 - .../NewApplicationVersionAvailableInfo.tsx | 81 - .../style.scss | 84 - .../components/ClientSideBar/style.scss | 296 - .../client/components/MfaModalProvider.tsx | 40 - .../DeadConDroppedModal.tsx | 84 - .../modals/DeadConDroppedModal/store.tsx | 31 - .../modals/DeadConDroppedModal/style.scss | 32 - src/pages/client/hooks/useClientFlags.tsx | 33 - src/pages/client/hooks/useClientStore.tsx | 127 - .../pages/CarouselPage/CarouselPage.tsx | 52 - .../CarouselPage/cards/CarouselCards.tsx | 236 - .../CarouselPage/cards/assets/slide_2fa.png | Bin 33514 -> 0 bytes .../cards/assets/slide_instances.png | Bin 50806 -> 0 bytes .../cards/assets/slide_security.png | Bin 85292 -> 0 bytes .../pages/CarouselPage/cards/style.scss | 0 .../components/CardCarousel/CardCarousel.tsx | 104 - .../CarouselControl/CarouselControl.tsx | 34 - .../components/CarouselControl/style.scss | 45 - .../components/CardCarousel/style.scss | 28 - .../components/CardCarousel/types.ts | 6 - .../client/pages/CarouselPage/style.scss | 222 - .../ClientAddInstnacePage.tsx | 20 - .../AddInstanceFormCard.tsx | 15 - .../AddInstanceDeviceForm.tsx | 204 - .../AddInstanceDeviceForm/style.scss | 4 - .../AddInstanceInitForm.tsx | 290 - .../components/AddInstanceInitForm/style.scss | 0 .../components/AddInstanceFormCard/types.ts | 5 - .../AddInstanceGuide/AddInstanceGuide.tsx | 25 - .../components/AddInstanceGuide/style.scss | 43 - .../ClientAddInstancePage/hooks/types.ts | 4 - .../hooks/useAddInstanceStore.tsx | 26 - .../pages/ClientAddInstancePage/style.scss | 80 - .../AddTunnelGuide/AddTunnelGuide.tsx | 25 - .../AddTunnelGuide/style.scss | 55 - .../ClientAddTunnelPage.tsx | 20 - .../AddTunnelFormCard/AddTunnelFormCard.tsx | 358 - .../components/AddTunnelFormCard/style.scss | 32 - .../pages/ClientAddTunnelPage/style.scss | 125 - .../pages/ClientAddedPage/ClientAddedPage.tsx | 48 - .../client/pages/ClientAddedPage/style.scss | 47 - .../ClientEditTunnelPage.tsx | 86 - .../components/EditTunnelFormCard.tsx | 322 - .../DeleteTunnelModal/DeleteTunnelModal.tsx | 88 - .../DeleteTunnelModal/useDeleteTunnelModal.ts | 31 - .../pages/ClientEditTunnelPage/style.scss | 119 - .../ClientInstancePage/ClientInstancePage.tsx | 129 - .../LocationUsageChart/LocationUsageChart.tsx | 193 - .../components/LocationUsageChart/style.scss | 23 - .../components/LocationUsageChart/types.ts | 4 - .../LocationsList/LocationsList.tsx | 89 - .../LocationCardConnectButton.tsx | 91 - .../LocationCardConnectButton/style.scss | 18 - .../LocationCardInfo/LocationCardInfo.tsx | 66 - .../components/LocationCardInfo/style.scss | 54 - .../LocationCardNeverConnected.tsx | 14 - .../LocationCardNeverConnected/style.scss | 25 - .../LocationCardNoStats.tsx | 14 - .../components/LocationCardNoStats/style.scss | 25 - .../LocationCardRoute/LocationCardRoute.tsx | 96 - .../components/LocationCardRoute/style.scss | 12 - .../LocationCardTitle/LocationCardTitle.tsx | 62 - .../components/LocationCardTitle/style.scss | 63 - .../LocationsDetailView.tsx | 145 - .../LocationConnectionHistory.tsx | 58 - .../LocationHistoryTable.tsx | 150 - .../LocationConnectionHistory/style.scss | 64 - .../LocationDetailCard/LocationDetailCard.tsx | 171 - .../components/LocationDetailCard/style.scss | 130 - .../LocationDetails/LocationDetails.tsx | 126 - .../components/LocationDetails/style.scss | 61 - .../components/LocationLogs/LocationLogs.tsx | 161 - .../LocationLogs/LocationLogsSelect.tsx | 76 - .../components/LocationLogs/style.scss | 37 - .../components/LocationsDetailView/style.scss | 37 - .../LocationsGridView/LocationsGridView.tsx | 152 - .../components/LocationsGridView/style.scss | 95 - .../LocationsList/modals/MFAModal/Icons.tsx | 212 - .../modals/MFAModal/MFAModal.tsx | 719 -- .../MfaMobileApprove/MfaMobileApprove.tsx | 217 - .../components/MfaMobileApprove/style.scss | 29 - .../LocationsList/modals/MFAModal/style.scss | 93 - .../modals/MFAModal/useMFAModal.ts | 31 - .../components/LocationsList/style.scss | 12 - .../StatsFilterSelect/StatsFilterSelect.tsx | 80 - .../StatsLayoutSelect/StatsLayoutSelect.tsx | 73 - .../DeleteInstanceModal.tsx | 96 - .../modals/DeleteInstanceModal/style.scss | 6 - .../useDeleteInstanceModal.ts | 31 - .../UpdateInstanceModal.tsx | 45 - .../components/UpdateInstanceModalForm.tsx | 268 - .../modals/UpdateInstanceModal/style.scss | 0 .../useUpdateInstanceModal.ts | 31 - .../pages/ClientInstancePage/style.scss | 38 - .../ClientSettingsPage/ClientSettingsPage.tsx | 29 - .../components/GlobalLogs/GlobalLogs.tsx | 200 - .../GlobalLogs/GlobalLogsSelect.tsx | 71 - .../GlobalLogs/GlobalLogsSourceSelect.tsx | 71 - .../components/GlobalLogs/style.scss | 60 - .../GlobalSettingsTab/GlobalSettingsTab.tsx | 279 - .../components/GlobalSettingsTab/style.scss | 69 - .../components/InfoCard/InfoCard.tsx | 87 - .../components/InfoCard/assets/hero.png | Bin 139296 -> 0 bytes .../pages/ClientSettingsPage/style.scss | 148 - src/pages/client/query.ts | 13 - src/pages/client/style.scss | 28 - src/pages/client/types.ts | 120 - src/pages/enrollment/EnrollmentPage.tsx | 110 - .../components/AdminInfo/AdminInfo.tsx | 20 - .../components/AdminInfo/style.scss | 9 - .../EnrollmentSideBar/EnrollmentSideBar.tsx | 165 - .../components/EnrollmentSideBar/style.scss | 169 - .../EnrollmentStepControls.tsx | 26 - .../EnrollmentStepControls/style.scss | 100 - .../EnrollmentStepIndicator.tsx | 24 - .../EnrollmentStepIndicator/style.scss | 15 - .../components/TimeLeft/TimeLeft.tsx | 68 - .../enrollment/components/TimeLeft/style.scss | 19 - src/pages/enrollment/components/types.ts | 5 - src/pages/enrollment/const.tsx | 119 - .../hooks/store/useEnrollmentStore.tsx | 121 - src/pages/enrollment/hooks/types.ts | 4 - .../enrollment/hooks/useEnrollmentApi.tsx | 138 - .../steps/ChooseMfaStep/ChooseMfaStep.tsx | 94 - .../enrollment/steps/ChooseMfaStep/style.scss | 30 - .../DataVerificationStep.tsx | 110 - .../steps/DataVerificationStep/style.scss | 59 - .../steps/DeviceStep/DeviceStep.tsx | 51 - .../components/DesktopSetup/DesktopSetup.tsx | 125 - .../components/DesktopSetup/style.scss | 15 - .../enrollment/steps/DeviceStep/style.scss | 48 - .../steps/FinishStep/FinishStep.tsx | 41 - .../enrollment/steps/FinishStep/style.scss | 71 - .../MfaRecoveryCodesStep.tsx | 66 - .../steps/MfaRecoveryCodesStep/style.scss | 27 - .../steps/MfaSetupStep/MfaSetupEmail.tsx | 71 - .../steps/MfaSetupStep/MfaSetupStep.tsx | 164 - .../steps/MfaSetupStep/MfaSetupTotp.tsx | 49 - .../enrollment/steps/MfaSetupStep/style.scss | 72 - .../steps/PasswordStep/PasswordStep.tsx | 130 - .../enrollment/steps/PasswordStep/style.scss | 20 - .../steps/SendFinishStep/SendFinishStep.tsx | 130 - .../steps/SendFinishStep/style.scss | 9 - .../steps/WelcomeStep/WelcomeStep.tsx | 62 - .../enrollment/steps/WelcomeStep/style.scss | 45 - src/pages/enrollment/style.scss | 38 - .../sessionTimeout/SessionTimeoutPage.tsx | 65 - src/pages/sessionTimeout/style.scss | 66 - .../icons/IconDefguard/IconDeguard.tsx | 35 - .../IconDefguardFull/IconDefguardFull.tsx | 72 - .../layout/PageContainer/PageContainer.tsx | 17 - .../layout/PageContainer/style.scss | 17 - .../components/providers/DeepLinkProvider.tsx | 30 - .../components/svg/DefguardLogoCollapsed.tsx | 25 - .../components/svg/DefguardLogoDarkmode.tsx | 29 - .../components/svg/DefguardLogoIcon.tsx | 25 - .../components/svg/DefguardLogoText.tsx | 18 - src/shared/components/svg/GithubIcon.tsx | 19 - .../components/svg/IconCheckmarkSmall.tsx | 18 - .../components/svg/IconNavConnections.tsx | 18 - src/shared/components/svg/IconNavVpn.tsx | 22 - src/shared/components/svg/TeoniteLogo.tsx | 18 - src/shared/components/svg/VpnLocation.tsx | 65 - src/shared/constants.ts | 19 - src/shared/hooks/api/types.ts | 153 - src/shared/hooks/api/utils.ts | 7 - src/shared/hooks/useAddInstance.ts | 146 - src/shared/hooks/useClipboard.ts | 35 - src/shared/images/png/logo_256-256.png | Bin 27413 -> 0 bytes .../images/svg/defguard-logo-collapsed.svg | 12 - .../images/svg/defguard-logo-darkmode.svg | 36 - src/shared/images/svg/defguard-logo-icon.svg | 12 - src/shared/images/svg/defguard-logo-text.svg | 25 - .../images/svg/icon-checkmark-small.svg | 9 - .../images/svg/icon-nav-connections.svg | 3 - src/shared/images/svg/icon-nav-vpn.svg | 4 - src/shared/images/svg/teonite-logo.svg | 10 - src/shared/images/svg/vpn-location.svg | 54 - src/shared/links.ts | 3 - src/shared/patterns.ts | 85 - .../providers/ThemeProvider/ThemeProvider.tsx | 22 - src/shared/routes.ts | 18 - src/shared/scss/_base.scss | 83 - src/shared/scss/_fonts.scss | 111 - src/shared/scss/index.scss | 2 - src/shared/types.ts | 7 - src/shared/utils/detectClickOutside.ts | 22 - src/shared/utils/downloadWGConfig.ts | 8 - src/shared/utils/errorDetail.ts | 9 - src/shared/utils/generateWGKeys.ts | 9 - src/shared/utils/getStatsFilterValue.ts | 7 - src/shared/utils/isComparable.ts | 10 - src/shared/validators/password.ts | 21 - src/shared/validators/tunnel.ts | 44 - src/vite-env.d.ts | 1 - svgo.config.json | 13 - tsconfig.app.json | 42 - tsconfig.json | 48 - tsconfig.node.json | 10 - tsconfig.node.tsbuildinfo | 1 - vite.config.d.ts | 2 - vite.config.ts | 50 - 265 files changed, 1547 insertions(+), 27549 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.cjs delete mode 100644 .prettierignore delete mode 100644 .prettierrc delete mode 100644 .typesafe-i18n.json delete mode 100644 biome.json delete mode 100644 index.html delete mode 100644 package.json delete mode 100644 pnpm-lock.yaml delete mode 100644 pnpm-workspace.yaml delete mode 100644 postcss.config.js delete mode 100644 src/components/App/App.tsx delete mode 100644 src/components/ApplicationUpdateManager/ApplicationUpdateManager.tsx delete mode 100644 src/components/ApplicationUpdateManager/useApplicationUpdateStore.tsx delete mode 100644 src/components/ApplicationUpdateManager/useNewAppVersionAvailable.tsx delete mode 100644 src/components/AutoProvisioningManager.tsx delete mode 100644 src/components/LogoContainer/LogoContainer.tsx delete mode 100644 src/components/LogoContainer/style.scss delete mode 100644 src/i18n/en/index.ts delete mode 100644 src/i18n/formatters.ts delete mode 100644 src/i18n/fr/index.ts delete mode 100644 src/i18n/i18n-react.tsx delete mode 100644 src/i18n/i18n-types.ts delete mode 100644 src/i18n/i18n-util.async.ts delete mode 100644 src/i18n/i18n-util.sync.ts delete mode 100644 src/i18n/i18n-util.ts delete mode 100644 src/main.tsx delete mode 100644 src/pages/client/ClientPage.tsx delete mode 100644 src/pages/client/clientAPI/clientApi.ts delete mode 100644 src/pages/client/clientAPI/types.ts delete mode 100644 src/pages/client/components/ClientSideBar/ClientSideBar.tsx delete mode 100644 src/pages/client/components/ClientSideBar/components/ClientBarItem/ClientBarItem.tsx delete mode 100644 src/pages/client/components/ClientSideBar/components/NewApplicationVersionAvailableInfo/NewApplicationVersionAvailableInfo.tsx delete mode 100644 src/pages/client/components/ClientSideBar/components/NewApplicationVersionAvailableInfo/style.scss delete mode 100644 src/pages/client/components/ClientSideBar/style.scss delete mode 100644 src/pages/client/components/MfaModalProvider.tsx delete mode 100644 src/pages/client/components/modals/DeadConDroppedModal/DeadConDroppedModal.tsx delete mode 100644 src/pages/client/components/modals/DeadConDroppedModal/store.tsx delete mode 100644 src/pages/client/components/modals/DeadConDroppedModal/style.scss delete mode 100644 src/pages/client/hooks/useClientFlags.tsx delete mode 100644 src/pages/client/hooks/useClientStore.tsx delete mode 100644 src/pages/client/pages/CarouselPage/CarouselPage.tsx delete mode 100644 src/pages/client/pages/CarouselPage/cards/CarouselCards.tsx delete mode 100644 src/pages/client/pages/CarouselPage/cards/assets/slide_2fa.png delete mode 100644 src/pages/client/pages/CarouselPage/cards/assets/slide_instances.png delete mode 100644 src/pages/client/pages/CarouselPage/cards/assets/slide_security.png delete mode 100644 src/pages/client/pages/CarouselPage/cards/style.scss delete mode 100644 src/pages/client/pages/CarouselPage/components/CardCarousel/CardCarousel.tsx delete mode 100644 src/pages/client/pages/CarouselPage/components/CardCarousel/components/CarouselControl/CarouselControl.tsx delete mode 100644 src/pages/client/pages/CarouselPage/components/CardCarousel/components/CarouselControl/style.scss delete mode 100644 src/pages/client/pages/CarouselPage/components/CardCarousel/style.scss delete mode 100644 src/pages/client/pages/CarouselPage/components/CardCarousel/types.ts delete mode 100644 src/pages/client/pages/CarouselPage/style.scss delete mode 100644 src/pages/client/pages/ClientAddInstancePage/ClientAddInstnacePage.tsx delete mode 100644 src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/AddInstanceFormCard.tsx delete mode 100644 src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceDeviceForm/AddInstanceDeviceForm.tsx delete mode 100644 src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceDeviceForm/style.scss delete mode 100644 src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceInitForm/AddInstanceInitForm.tsx delete mode 100644 src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceInitForm/style.scss delete mode 100644 src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/types.ts delete mode 100644 src/pages/client/pages/ClientAddInstancePage/components/AddInstanceGuide/AddInstanceGuide.tsx delete mode 100644 src/pages/client/pages/ClientAddInstancePage/components/AddInstanceGuide/style.scss delete mode 100644 src/pages/client/pages/ClientAddInstancePage/hooks/types.ts delete mode 100644 src/pages/client/pages/ClientAddInstancePage/hooks/useAddInstanceStore.tsx delete mode 100644 src/pages/client/pages/ClientAddInstancePage/style.scss delete mode 100644 src/pages/client/pages/ClientAddTunnelPage/AddTunnelGuide/AddTunnelGuide.tsx delete mode 100644 src/pages/client/pages/ClientAddTunnelPage/AddTunnelGuide/style.scss delete mode 100644 src/pages/client/pages/ClientAddTunnelPage/ClientAddTunnelPage.tsx delete mode 100644 src/pages/client/pages/ClientAddTunnelPage/components/AddTunnelFormCard/AddTunnelFormCard.tsx delete mode 100644 src/pages/client/pages/ClientAddTunnelPage/components/AddTunnelFormCard/style.scss delete mode 100644 src/pages/client/pages/ClientAddTunnelPage/style.scss delete mode 100644 src/pages/client/pages/ClientAddedPage/ClientAddedPage.tsx delete mode 100644 src/pages/client/pages/ClientAddedPage/style.scss delete mode 100644 src/pages/client/pages/ClientEditTunnelPage/ClientEditTunnelPage.tsx delete mode 100644 src/pages/client/pages/ClientEditTunnelPage/components/EditTunnelFormCard.tsx delete mode 100644 src/pages/client/pages/ClientEditTunnelPage/modals/DeleteTunnelModal/DeleteTunnelModal.tsx delete mode 100644 src/pages/client/pages/ClientEditTunnelPage/modals/DeleteTunnelModal/useDeleteTunnelModal.ts delete mode 100644 src/pages/client/pages/ClientEditTunnelPage/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/ClientInstancePage.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationUsageChart/LocationUsageChart.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationUsageChart/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationUsageChart/types.ts delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/LocationsList.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardConnectButton/LocationCardConnectButton.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardConnectButton/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardInfo/LocationCardInfo.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardInfo/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardNeverConnected/LocationCardNeverConnected.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardNeverConnected/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardNoStats/LocationCardNoStats.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardNoStats/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardRoute/LocationCardRoute.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardRoute/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardTitle/LocationCardTitle.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardTitle/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsDetailView/LocationsDetailView.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsDetailView/components/LocationConnectionHistory/LocationConnectionHistory.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsDetailView/components/LocationConnectionHistory/LocationHistoryTable/LocationHistoryTable.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsDetailView/components/LocationConnectionHistory/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsDetailView/components/LocationDetailCard/LocationDetailCard.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsDetailView/components/LocationDetailCard/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsDetailView/components/LocationDetails/LocationDetails.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsDetailView/components/LocationDetails/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsDetailView/components/LocationLogs/LocationLogs.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsDetailView/components/LocationLogs/LocationLogsSelect.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsDetailView/components/LocationLogs/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsDetailView/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsGridView/LocationsGridView.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationsGridView/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/Icons.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/components/MfaMobileApprove/MfaMobileApprove.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/components/MfaMobileApprove/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/modals/MFAModal/useMFAModal.ts delete mode 100644 src/pages/client/pages/ClientInstancePage/components/LocationsList/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/components/StatsFilterSelect/StatsFilterSelect.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/components/StatsLayoutSelect/StatsLayoutSelect.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/modals/DeleteInstanceModal/DeleteInstanceModal.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/modals/DeleteInstanceModal/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/modals/DeleteInstanceModal/useDeleteInstanceModal.ts delete mode 100644 src/pages/client/pages/ClientInstancePage/modals/UpdateInstanceModal/UpdateInstanceModal.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/modals/UpdateInstanceModal/components/UpdateInstanceModalForm.tsx delete mode 100644 src/pages/client/pages/ClientInstancePage/modals/UpdateInstanceModal/style.scss delete mode 100644 src/pages/client/pages/ClientInstancePage/modals/UpdateInstanceModal/useUpdateInstanceModal.ts delete mode 100644 src/pages/client/pages/ClientInstancePage/style.scss delete mode 100644 src/pages/client/pages/ClientSettingsPage/ClientSettingsPage.tsx delete mode 100644 src/pages/client/pages/ClientSettingsPage/components/GlobalLogs/GlobalLogs.tsx delete mode 100644 src/pages/client/pages/ClientSettingsPage/components/GlobalLogs/GlobalLogsSelect.tsx delete mode 100644 src/pages/client/pages/ClientSettingsPage/components/GlobalLogs/GlobalLogsSourceSelect.tsx delete mode 100644 src/pages/client/pages/ClientSettingsPage/components/GlobalLogs/style.scss delete mode 100644 src/pages/client/pages/ClientSettingsPage/components/GlobalSettingsTab/GlobalSettingsTab.tsx delete mode 100644 src/pages/client/pages/ClientSettingsPage/components/GlobalSettingsTab/style.scss delete mode 100644 src/pages/client/pages/ClientSettingsPage/components/InfoCard/InfoCard.tsx delete mode 100644 src/pages/client/pages/ClientSettingsPage/components/InfoCard/assets/hero.png delete mode 100644 src/pages/client/pages/ClientSettingsPage/style.scss delete mode 100644 src/pages/client/query.ts delete mode 100644 src/pages/client/style.scss delete mode 100644 src/pages/client/types.ts delete mode 100644 src/pages/enrollment/EnrollmentPage.tsx delete mode 100644 src/pages/enrollment/components/AdminInfo/AdminInfo.tsx delete mode 100644 src/pages/enrollment/components/AdminInfo/style.scss delete mode 100644 src/pages/enrollment/components/EnrollmentSideBar/EnrollmentSideBar.tsx delete mode 100644 src/pages/enrollment/components/EnrollmentSideBar/style.scss delete mode 100644 src/pages/enrollment/components/EnrollmentStepControls/EnrollmentStepControls.tsx delete mode 100644 src/pages/enrollment/components/EnrollmentStepControls/style.scss delete mode 100644 src/pages/enrollment/components/EnrollmentStepIndicator/EnrollmentStepIndicator.tsx delete mode 100644 src/pages/enrollment/components/EnrollmentStepIndicator/style.scss delete mode 100644 src/pages/enrollment/components/TimeLeft/TimeLeft.tsx delete mode 100644 src/pages/enrollment/components/TimeLeft/style.scss delete mode 100644 src/pages/enrollment/components/types.ts delete mode 100644 src/pages/enrollment/const.tsx delete mode 100644 src/pages/enrollment/hooks/store/useEnrollmentStore.tsx delete mode 100644 src/pages/enrollment/hooks/types.ts delete mode 100644 src/pages/enrollment/hooks/useEnrollmentApi.tsx delete mode 100644 src/pages/enrollment/steps/ChooseMfaStep/ChooseMfaStep.tsx delete mode 100644 src/pages/enrollment/steps/ChooseMfaStep/style.scss delete mode 100644 src/pages/enrollment/steps/DataVerificationStep/DataVerificationStep.tsx delete mode 100644 src/pages/enrollment/steps/DataVerificationStep/style.scss delete mode 100644 src/pages/enrollment/steps/DeviceStep/DeviceStep.tsx delete mode 100644 src/pages/enrollment/steps/DeviceStep/components/DesktopSetup/DesktopSetup.tsx delete mode 100644 src/pages/enrollment/steps/DeviceStep/components/DesktopSetup/style.scss delete mode 100644 src/pages/enrollment/steps/DeviceStep/style.scss delete mode 100644 src/pages/enrollment/steps/FinishStep/FinishStep.tsx delete mode 100644 src/pages/enrollment/steps/FinishStep/style.scss delete mode 100644 src/pages/enrollment/steps/MfaRecoveryCodesStep/MfaRecoveryCodesStep.tsx delete mode 100644 src/pages/enrollment/steps/MfaRecoveryCodesStep/style.scss delete mode 100644 src/pages/enrollment/steps/MfaSetupStep/MfaSetupEmail.tsx delete mode 100644 src/pages/enrollment/steps/MfaSetupStep/MfaSetupStep.tsx delete mode 100644 src/pages/enrollment/steps/MfaSetupStep/MfaSetupTotp.tsx delete mode 100644 src/pages/enrollment/steps/MfaSetupStep/style.scss delete mode 100644 src/pages/enrollment/steps/PasswordStep/PasswordStep.tsx delete mode 100644 src/pages/enrollment/steps/PasswordStep/style.scss delete mode 100644 src/pages/enrollment/steps/SendFinishStep/SendFinishStep.tsx delete mode 100644 src/pages/enrollment/steps/SendFinishStep/style.scss delete mode 100644 src/pages/enrollment/steps/WelcomeStep/WelcomeStep.tsx delete mode 100644 src/pages/enrollment/steps/WelcomeStep/style.scss delete mode 100644 src/pages/enrollment/style.scss delete mode 100644 src/pages/sessionTimeout/SessionTimeoutPage.tsx delete mode 100644 src/pages/sessionTimeout/style.scss delete mode 100644 src/shared/components/icons/IconDefguard/IconDeguard.tsx delete mode 100644 src/shared/components/icons/IconDefguardFull/IconDefguardFull.tsx delete mode 100644 src/shared/components/layout/PageContainer/PageContainer.tsx delete mode 100644 src/shared/components/layout/PageContainer/style.scss delete mode 100644 src/shared/components/providers/DeepLinkProvider.tsx delete mode 100644 src/shared/components/svg/DefguardLogoCollapsed.tsx delete mode 100644 src/shared/components/svg/DefguardLogoDarkmode.tsx delete mode 100644 src/shared/components/svg/DefguardLogoIcon.tsx delete mode 100644 src/shared/components/svg/DefguardLogoText.tsx delete mode 100644 src/shared/components/svg/GithubIcon.tsx delete mode 100644 src/shared/components/svg/IconCheckmarkSmall.tsx delete mode 100644 src/shared/components/svg/IconNavConnections.tsx delete mode 100644 src/shared/components/svg/IconNavVpn.tsx delete mode 100644 src/shared/components/svg/TeoniteLogo.tsx delete mode 100644 src/shared/components/svg/VpnLocation.tsx delete mode 100644 src/shared/constants.ts delete mode 100644 src/shared/hooks/api/types.ts delete mode 100644 src/shared/hooks/api/utils.ts delete mode 100644 src/shared/hooks/useAddInstance.ts delete mode 100644 src/shared/hooks/useClipboard.ts delete mode 100644 src/shared/images/png/logo_256-256.png delete mode 100644 src/shared/images/svg/defguard-logo-collapsed.svg delete mode 100644 src/shared/images/svg/defguard-logo-darkmode.svg delete mode 100644 src/shared/images/svg/defguard-logo-icon.svg delete mode 100644 src/shared/images/svg/defguard-logo-text.svg delete mode 100644 src/shared/images/svg/icon-checkmark-small.svg delete mode 100644 src/shared/images/svg/icon-nav-connections.svg delete mode 100644 src/shared/images/svg/icon-nav-vpn.svg delete mode 100644 src/shared/images/svg/teonite-logo.svg delete mode 100644 src/shared/images/svg/vpn-location.svg delete mode 100644 src/shared/links.ts delete mode 100644 src/shared/patterns.ts delete mode 100644 src/shared/providers/ThemeProvider/ThemeProvider.tsx delete mode 100644 src/shared/routes.ts delete mode 100644 src/shared/scss/_base.scss delete mode 100644 src/shared/scss/_fonts.scss delete mode 100644 src/shared/scss/index.scss delete mode 100644 src/shared/types.ts delete mode 100644 src/shared/utils/detectClickOutside.ts delete mode 100644 src/shared/utils/downloadWGConfig.ts delete mode 100644 src/shared/utils/errorDetail.ts delete mode 100644 src/shared/utils/generateWGKeys.ts delete mode 100644 src/shared/utils/getStatsFilterValue.ts delete mode 100644 src/shared/utils/isComparable.ts delete mode 100644 src/shared/validators/password.ts delete mode 100644 src/shared/validators/tunnel.ts delete mode 100644 src/vite-env.d.ts delete mode 100644 svgo.config.json delete mode 100644 tsconfig.app.json delete mode 100644 tsconfig.json delete mode 100644 tsconfig.node.json delete mode 100644 tsconfig.node.tsbuildinfo delete mode 100644 vite.config.d.ts delete mode 100644 vite.config.ts diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 068d2685a..000000000 --- a/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -dist/ -src/shared/components/svg/* -src/i18n/formatters.ts diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index ecda93be7..000000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,82 +0,0 @@ -module.exports = { - root: true, - env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:react-hooks/recommended', - 'plugin:react/recommended', - 'plugin:react/jsx-runtime', - 'plugin:prettier/recommended', - 'plugin:import/recommended', - 'plugin:import/typescript', - ], - ignorePatterns: ['dist', '.eslintrc.cjs'], - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - project: ['./tsconfig.json', './tsconfig.node.json'], - tsconfigRootDir: __dirname, - }, - plugins: ['react-refresh', 'react-hooks', 'simple-import-sort'], - rules: { - 'react-refresh/only-export-components': [ - 'error', - { - allowConstantExport: true, - }, - ], - 'max-len': [ - 'error', - { - code: 90, - comments: 140, - tabWidth: 2, - ignorePattern: '^(import .* |.*LL\\..*|.*d=.*|.*from \')', - ignoreComments: true, - ignoreRegExpLiterals: true, - ignoreTemplateLiterals: true, - }, - ], - 'react-hooks/rules-of-hooks': 'error', - 'react-hooks/exhaustive-deps': 'error', - 'react/prop-types': 'off', - 'react/display-name': 'off', - semi: [ - 'error', - 'always', - { - omitLastInOneLineBlock: false, - }, - ], - 'prettier/prettier': [ - 'error', - { - semi: true, - }, - ], - 'simple-import-sort/imports': 'error', - 'react/react-in-jsx-scope': 'off', - '@typescript-eslint/no-unused-vars': 'error', - '@typescript-eslint/no-explicit-any': 'error', - '@typescript-eslint/no-non-null-assertion': 'error', - 'import/no-unresolved': [ - 'error', - { - ignore: ['@ladle/react', '.md', 'typesafe-i18n/detectors', '@hookform/devtools'], - }, - ], - }, - overrides: [ - { - extends: ['plugin:@typescript-eslint/disable-type-checked'], - files: ['./**/*.js'], - }, - ], - settings: { - react: { - version: '18.2', - }, - }, -}; diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index f9276e6a7..41cca4495 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -45,10 +45,23 @@ jobs: - uses: pnpm/action-setup@v6 with: - cache: true run_install: false version: 11 + - name: Get pnpm store directory + run: | + STORE_PATH=$(pnpm store path --silent) + mkdir -p "$STORE_PATH" + echo "STORE_PATH=$STORE_PATH" >> ${GITHUB_ENV} + + - name: Restore pnpm store cache + uses: actions/cache@v5 + with: + path: ${{ env.STORE_PATH }} + key: pnpm-store-${{ runner.os }}-${{ hashFiles('new-ui/pnpm-lock.yaml') }} + restore-keys: | + pnpm-store-${{ runner.os }}- + - name: Install Node dependencies for New UI run: | cd new-ui @@ -59,6 +72,9 @@ jobs: with: targets: aarch64-apple-darwin,x86_64-apple-darwin + - name: Install tauri-cli + run: cargo install tauri-cli --locked + - name: Run sccache-cache uses: mozilla-actions/sccache-action@v0.0.10 @@ -82,6 +98,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: + tauriScript: cargo tauri args: --config src-tauri/tauri.app.conf.json --target universal-apple-darwin - name: Build installation package @@ -99,7 +116,6 @@ jobs: APP_ID: "6754601166" run: | UPLOAD_DIR=$(mktemp -d) - VERSION=$(jq -r '.version' package.json) mkdir -p "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS" git log -1 --pretty='"whatsNew" = "%B";' > "${UPLOAD_DIR}/beta-${APP_ID}/upload/MACOS/en-US.txt" RETRIES=0 diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index ee052bb47..01109ecd8 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -47,15 +47,29 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: 24 + node-version: 26 - name: Install pnpm uses: pnpm/action-setup@v6 with: - cache: true version: 11.11 run_install: false + - name: Get pnpm store directory + shell: bash + run: | + STORE_PATH=$(pnpm store path --silent) + mkdir -p "$STORE_PATH" + echo "STORE_PATH=$STORE_PATH" >> $GITHUB_ENV + + - name: Restore pnpm store cache + uses: actions/cache@v5 + with: + path: ${{ env.STORE_PATH }} + key: pnpm-store-${{ runner.os }}-${{ hashFiles('new-ui/pnpm-lock.yaml', 'e2e/pnpm-lock.yaml') }} + restore-keys: | + pnpm-store-${{ runner.os }}- + - name: Install Rust stable uses: dtolnay/rust-toolchain@stable @@ -65,12 +79,15 @@ jobs: - name: Install tauri-driver run: cargo install tauri-driver --locked + - name: Install tauri-cli + run: cargo install tauri-cli --locked + - name: Build new-ui run: pnpm install --no-frozen-lockfile && pnpm build working-directory: new-ui - name: Build client - run: pnpm install --no-frozen-lockfile && pnpm tauri build + run: cargo tauri build - name: Prepare e2e environment run: | @@ -116,7 +133,7 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: 24 + node-version: 26 - name: Install pnpm uses: pnpm/action-setup@v6 diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 4dbaa3ef8..575c9e160 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -34,31 +34,31 @@ jobs: - uses: pnpm/action-setup@v6 with: - cache: true version: 11.11 run_install: false - name: Get pnpm store directory shell: bash run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + STORE_PATH=$(pnpm store path --silent) + mkdir -p "$STORE_PATH" + echo "STORE_PATH=$STORE_PATH" >> $GITHUB_ENV + + - name: Restore pnpm store cache + uses: actions/cache@v5 + with: + path: ${{ env.STORE_PATH }} + key: pnpm-store-${{ runner.os }}-${{ hashFiles('new-ui/pnpm-lock.yaml') }} + restore-keys: | + pnpm-store-${{ runner.os }}- # Change to '--frozen-lockfile' once this gets fixed: # https://github.com/pnpm/action-setup/issues/40 - - name: Install Node dependencies - run: pnpm install --no-frozen-lockfile - - name: Install Node dependencies for new UI run: | cd new-ui pnpm install --no-frozen-lockfile - - name: Run Biome and Prettier Lint - run: pnpm lint - - - name: Audit - run: pnpm audit --prod - - name: Run Biome and Prettier Lint for new UI run: | cd new-ui diff --git a/.github/workflows/release-macos.yaml b/.github/workflows/release-macos.yaml index 8f84b16b1..16250016c 100644 --- a/.github/workflows/release-macos.yaml +++ b/.github/workflows/release-macos.yaml @@ -38,10 +38,23 @@ jobs: - uses: pnpm/action-setup@v6 with: - cache: true run_install: false version: 11.11 + - name: Get pnpm store directory + run: | + STORE_PATH=$(pnpm store path --silent) + mkdir -p "$STORE_PATH" + echo "STORE_PATH=$STORE_PATH" >> ${GITHUB_ENV} + + - name: Restore pnpm store cache + uses: actions/cache@v5 + with: + path: ${{ env.STORE_PATH }} + key: pnpm-store-${{ runner.os }}-${{ hashFiles('new-ui/pnpm-lock.yaml') }} + restore-keys: | + pnpm-store-${{ runner.os }}- + - name: Install Node dependencies for New UI run: | cd new-ui @@ -52,6 +65,9 @@ jobs: with: targets: aarch64-apple-darwin,x86_64-apple-darwin + - name: Install tauri-cli + run: cargo install tauri-cli --locked + - name: Run sccache-cache uses: mozilla-actions/sccache-action@v0.0.10 @@ -80,6 +96,7 @@ jobs: # https://github.com/tauri-apps/tauri-action/issues/1003 TAURI_BUNDLER_DMG_IGNORE_CI: "false" with: + tauriScript: cargo tauri args: --config src-tauri/tauri.dmg.conf.json --target universal-apple-darwin - name: Upload DMG diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 9c41a238b..9c316c5e0 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -69,13 +69,22 @@ jobs: - name: Install pnpm uses: pnpm/action-setup@v6 with: - cache: true version: 11.11 run_install: false - name: Get pnpm store directory run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> ${GITHUB_ENV} + STORE_PATH=$(pnpm store path --silent) + mkdir -p "$STORE_PATH" + echo "STORE_PATH=$STORE_PATH" >> ${GITHUB_ENV} + + - name: Restore pnpm store cache + uses: actions/cache@v5 + with: + path: ${{ env.STORE_PATH }} + key: pnpm-store-${{ runner.os }}-${{ hashFiles('new-ui/pnpm-lock.yaml') }} + restore-keys: | + pnpm-store-${{ runner.os }}- - name: Write release version run: | @@ -84,11 +93,6 @@ jobs: echo "VERSION=$VERSION" >> ${GITHUB_ENV} echo "DEFGUARD_CLIENT_BUILD_VERSION=${GITHUB_REF_NAME#v}" >> ${GITHUB_ENV} - # Change to '--frozen-lockfile' once this gets fixed: - # https://github.com/pnpm/action-setup/issues/40 - - name: Install Node dependencies - run: pnpm install --no-frozen-lockfile - - name: Install Node dependencies for new UI run: | cd new-ui @@ -97,6 +101,9 @@ jobs: - name: Install Rust stable uses: dtolnay/rust-toolchain@stable + - name: Install tauri-cli + run: cargo install tauri-cli --locked + - name: Install dependencies run: | apt-get install -y build-essential libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf libssl-dev libxdo-dev unzip protobuf-compiler libprotobuf-dev rpm @@ -111,6 +118,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: + tauriScript: cargo tauri args: "--bundles deb" - name: Upload DEB @@ -177,19 +185,23 @@ jobs: - uses: pnpm/action-setup@v6 with: - cache: true version: 11.11 run_install: false - name: Get pnpm store directory shell: bash run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> ${GITHUB_ENV} + STORE_PATH=$(pnpm store path --silent) + mkdir -p "$STORE_PATH" + echo "STORE_PATH=$STORE_PATH" >> ${GITHUB_ENV} - # Change to '--frozen-lockfile' once this gets fixed: - # https://github.com/pnpm/action-setup/issues/40 - - name: Install Node dependencies - run: pnpm install --no-frozen-lockfile + - name: Restore pnpm store cache + uses: actions/cache@v5 + with: + path: ${{ env.STORE_PATH }} + key: pnpm-store-${{ runner.os }}-${{ hashFiles('new-ui/pnpm-lock.yaml') }} + restore-keys: | + pnpm-store-${{ runner.os }}- - name: Install Node dependencies for new UI run: | @@ -199,6 +211,9 @@ jobs: - name: Install Rust stable uses: dtolnay/rust-toolchain@stable + - name: Install tauri-cli + run: cargo install tauri-cli --locked + - name: Install Linux dependencies run: | sudo apt-get update @@ -214,6 +229,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: + tauriScript: cargo tauri args: "--bundles deb,rpm" - name: Calculate DEB SHA256 diff --git a/.github/workflows/update-pnpm-hash.yaml b/.github/workflows/update-pnpm-hash.yaml index 261e52f16..34460a140 100644 --- a/.github/workflows/update-pnpm-hash.yaml +++ b/.github/workflows/update-pnpm-hash.yaml @@ -3,7 +3,6 @@ name: Update pnpm deps Nix hash on: pull_request: paths: - - pnpm-lock.yaml - new-ui/pnpm-lock.yaml concurrency: @@ -41,7 +40,7 @@ jobs: # Helper: extract the hash for a given attribute, swap in FAKE, # build it, capture the real hash, and write it back. update_hash() { - local attr="$1" # e.g. "pnpmDeps" or "newUiPnpmDeps" + local attr="$1" # e.g. "newUiPnpmDeps" local label="$2" # human-readable label for logging # Extract the current hash for this attribute. @@ -91,17 +90,10 @@ jobs: fi } - # Always attempt both hashes - the workflow trigger already ensures - # at least one lockfile was modified. The commit step below only - # fires when a hash actually changed, so there's no harm in - # computing both every time. - update_hash "pnpmDeps" "pnpm root" update_hash "newUiPnpmDeps" "pnpm new-ui" - name: Commit updated hashes - if: > - steps.hash.outputs.pnpmDeps_changed == 'true' || - steps.hash.outputs.newUiPnpmDeps_changed == 'true' + if: steps.hash.outputs.newUiPnpmDeps_changed == 'true' uses: actions/github-script@v9 with: script: | @@ -109,14 +101,7 @@ jobs: const content = fs.readFileSync('nix/package.nix', 'utf8'); const encoded = Buffer.from(content).toString('base64'); - const parts = []; - if ('${{ steps.hash.outputs.pnpmDeps_changed }}' === 'true') { - parts.push('pnpm'); - } - if ('${{ steps.hash.outputs.newUiPnpmDeps_changed }}' === 'true') { - parts.push('new-ui pnpm'); - } - const headline = `chore(nix): update ${parts.join(' and ')} deps hash`; + const headline = 'chore(nix): update new-ui pnpm deps hash'; await github.graphql(` mutation CreateCommit($input: CreateCommitOnBranchInput!) { diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 13a310746..000000000 --- a/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/i18n/*.ts -/src/i18n/*.tsx diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 9a50f221f..000000000 --- a/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "semi": true, - "tabWidth": 2, - "singleQuote": true, - "useTabs": false, - "printWidth": 90 -} diff --git a/.trivyignore.yaml b/.trivyignore.yaml index b33a42431..0f163d54b 100644 --- a/.trivyignore.yaml +++ b/.trivyignore.yaml @@ -2,12 +2,3 @@ vulnerabilities: - id: GHSA-wrw7-89jp-8q8g expired_at: 2026-09-30 statement: "glib is a transitive dependency of Tauri which we cannot update ourselves. Waiting for tauri to finish migration to gtk4-rs: https://github.com/tauri-apps/tauri/issues/12563" - - id: CVE-2026-53666 - expired_at: 2026-08-01 - statement: "CVE in legacy UI. To be removed before 2.1 release." - - id: CVE-2026-53669 - expired_at: 2026-08-01 - statement: "CVE in legacy UI. To be removed before 2.1 release." - - id: CVE-2026-53668 - expired_at: 2026-08-01 - statement: "CVE in legacy UI. To be removed before 2.1 release." diff --git a/.typesafe-i18n.json b/.typesafe-i18n.json deleted file mode 100644 index e5c757695..000000000 --- a/.typesafe-i18n.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "adapter": "react", - "$schema": "https://unpkg.com/typesafe-i18n@5.27.1/schema/typesafe-i18n.json" -} \ No newline at end of file diff --git a/README.md b/README.md index ba112373d..01ca15698 100644 --- a/README.md +++ b/README.md @@ -36,13 +36,14 @@ Make sure you have [protoc](https://grpc.io/docs/protoc-installation/) available ### Install pnpm and node deps ```bash +cd new-ui pnpm install ``` ### Sqlx and local database file To work with sqlx on a local db file, you'll have to set `DATABASE_URL` env variable. -It's best to set it to absolute path since `pnpm tauri dev` runs with weird paths. +It's best to set it to absolute path since `cargo tauri dev` runs with weird paths. Init the file with: @@ -56,14 +57,19 @@ Then keep the `$DATABASE_URL` set during development (use direnv etc.) ### Dev server command +Run the new UI's dev server and the Tauri app in parallel (see `justfile`'s `dev` recipe for a one-liner): + ```bash -pnpm tauri dev +cd new-ui && pnpm dev +# in another terminal +cargo tauri dev ``` ### Build command ```bash -pnpm tauri build +cd new-ui && pnpm build +cargo tauri build ``` Built packages are available after in `src-tauri/target/release/bundle`. @@ -117,11 +123,11 @@ For details, see: ## Failed to bundle project -`pnpm tauri build` may fail with error: `Error failed to bundle project: error running appimage.sh`. To +`cargo tauri build` may fail with error: `Error failed to bundle project: error running appimage.sh`. To fix this set the NO_STRIP environment variable: ``` -NO_STRIP=1 pnpm tauri build +NO_STRIP=1 cargo tauri build ``` ## Blank screen @@ -141,9 +147,9 @@ As a last resort for resize crashes or persistent rendering issues, disable acce WEBKIT_DISABLE_COMPOSITING_MODE=1 defguard-client ``` -## Failed to run `pnpm tauri dev` +## Failed to run `cargo tauri dev` -`pnpm tauri dev` command may result in the following error: +`cargo tauri dev` command may result in the following error if `new-ui`'s node_modules are stale: ``` Error [ERR_REQUIRE_ESM]: require() of ES Module /home/jck/workspace/work/teonite/defguard/client/node_modules/.pnpm/path-type@5.0.0/node_modules/path-type/index.js from /home/jck/workspace/work/teonite/defguard/client/node_modules/.pnpm/read-pkg@3.0.0/node_modules/read-pkg/index.js not supported. @@ -159,4 +165,4 @@ Node.js v22.7.0  ELIFECYCLE  Command failed with exit code 1. ``` -To fix this remove node_modules and rerun `pnpm install`. +To fix this remove `new-ui/node_modules` and rerun `pnpm install` in `new-ui`. diff --git a/biome.json b/biome.json deleted file mode 100644 index 7681ee1f5..000000000 --- a/biome.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/2.4.16/schema.json", - "vcs": { - "enabled": false, - "clientKind": "git", - "useIgnoreFile": false - }, - "files": { - "ignoreUnknown": false, - "includes": [ - "src/**", - "!new-ui", - "!src/i18n/*.ts", - "!src/i18n/*.tsx", - "!src/i18n/i18n-util", - "!dist" - ] - }, - "formatter": { - "enabled": true, - "formatWithErrors": false, - "indentStyle": "space", - "indentWidth": 2, - "lineEnding": "lf", - "lineWidth": 90, - "attributePosition": "auto", - "bracketSameLine": false, - "bracketSpacing": true, - "expand": "auto", - "useEditorconfig": true, - "includes": ["./src/**"] - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true, - "a11y": "off", - "complexity": { - "noBannedTypes": "error", - "noUselessTypeConstraint": "error" - }, - "correctness": { - "useUniqueElementIds": "off", - "noChildrenProp": "error", - "noPrecisionLoss": "error", - "noUnusedVariables": "error", - "useExhaustiveDependencies": "error", - "useHookAtTopLevel": "error", - "useJsxKeyInIterable": "error" - }, - "security": { - "noDangerouslySetInnerHtmlWithChildren": "error" - }, - "style": { - "noNamespace": "error", - "noNonNullAssertion": "error", - "useArrayLiterals": "error", - "useAsConstAssertion": "error", - "useBlockStatements": "off", - "useLiteralEnumMembers": "off" - }, - "suspicious": { - "noCommentText": "error", - "noDuplicateJsxProps": "error", - "noExplicitAny": "error", - "noExtraNonNullAssertion": "error", - "noMisleadingInstantiator": "error", - "noUnsafeDeclarationMerging": "error", - "noArrayIndexKey": "off" - } - }, - "includes": ["src/**"] - }, - "javascript": { - "formatter": { - "jsxQuoteStyle": "double", - "quoteProperties": "asNeeded", - "trailingCommas": "all", - "semicolons": "always", - "arrowParentheses": "always", - "bracketSameLine": false, - "quoteStyle": "single", - "attributePosition": "auto", - "bracketSpacing": true - } - }, - "html": { - "formatter": { - "selfCloseVoidElements": "always" - } - }, - "overrides": [ - { - "includes": ["**/*.js"] - } - ], - "assist": { - "enabled": true, - "actions": { - "source": { - "organizeImports": "on" - } - } - } -} diff --git a/e2e/biome.json b/e2e/biome.json index 4ed56c687..d7e8f5ab9 100644 --- a/e2e/biome.json +++ b/e2e/biome.json @@ -1,47 +1,47 @@ { - "$schema": "https://biomejs.dev/schemas/2.4.16/schema.json", - "root": false, - "vcs": { - "enabled": false, - "clientKind": "git", - "useIgnoreFile": false - }, - "files": { - "ignoreUnknown": false, - "includes": ["helpers/**", "tests/**", "scripts/**", "wdio.conf.ts"] - }, - "formatter": { - "enabled": true, - "formatWithErrors": false, - "indentStyle": "space", - "indentWidth": 2, - "lineEnding": "lf", - "lineWidth": 90, - "bracketSpacing": true - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true - } - }, - "javascript": { - "formatter": { - "quoteStyle": "single", - "quoteProperties": "asNeeded", - "trailingCommas": "all", - "semicolons": "always", - "arrowParentheses": "always", - "bracketSameLine": false, - "bracketSpacing": true - } - }, - "assist": { - "enabled": true, - "actions": { - "source": { - "organizeImports": "on" - } - } - } + "$schema": "https://biomejs.dev/schemas/2.4.16/schema.json", + "root": false, + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "includes": ["helpers/**", "tests/**", "scripts/**", "wdio.conf.ts"] + }, + "formatter": { + "enabled": true, + "formatWithErrors": false, + "indentStyle": "space", + "indentWidth": 2, + "lineEnding": "lf", + "lineWidth": 90, + "bracketSpacing": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "javascript": { + "formatter": { + "quoteStyle": "single", + "quoteProperties": "asNeeded", + "trailingCommas": "all", + "semicolons": "always", + "arrowParentheses": "always", + "bracketSameLine": false, + "bracketSpacing": true + } + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": "on" + } + } + } } diff --git a/e2e/helpers/client.ts b/e2e/helpers/client.ts index b24174f5d..2d3bc5c99 100644 --- a/e2e/helpers/client.ts +++ b/e2e/helpers/client.ts @@ -1,19 +1,23 @@ -import { $, browser } from '@wdio/globals'; -import { switchToFullView } from './windows.js'; +import { $, browser } from "@wdio/globals"; +import { switchToFullView } from "./windows.js"; type TauriWindow = { - __TAURI_INTERNALS__: { invoke: (cmd: string, args?: unknown) => Promise }; + __TAURI_INTERNALS__: { + invoke: (cmd: string, args?: unknown) => Promise; + }; }; export const resetInstances = async () => { - await switchToFullView(); - await $('a[href="/full/add"]').click(); - await $('#add-page-view').waitForDisplayed(); - await browser.execute(async () => { - const { invoke } = (window as unknown as TauriWindow).__TAURI_INTERNALS__; - const instances = (await invoke('all_instances')) as Array<{ id: number }>; - await Promise.all( - instances.map((instance) => invoke('delete_instance', { instanceId: instance.id })), - ); - }); + await switchToFullView(); + await $('a[href="/full/add"]').click(); + await $("#add-page-view").waitForDisplayed(); + await browser.execute(async () => { + const { invoke } = (window as unknown as TauriWindow).__TAURI_INTERNALS__; + const instances = (await invoke("all_instances")) as Array<{ id: number }>; + await Promise.all( + instances.map((instance) => + invoke("delete_instance", { instanceId: instance.id }), + ), + ); + }); }; diff --git a/e2e/helpers/clipboard.ts b/e2e/helpers/clipboard.ts index 5846d58d5..677432c41 100644 --- a/e2e/helpers/clipboard.ts +++ b/e2e/helpers/clipboard.ts @@ -1,9 +1,9 @@ -import { spawnSync } from 'node:child_process'; +import { spawnSync } from "node:child_process"; export const readClipboard = (): string => { - const result = spawnSync('xclip', ['-selection', 'clipboard', '-o'], { - encoding: 'utf8', - timeout: 5_000, - }); - return result.status === 0 ? result.stdout : ''; + const result = spawnSync("xclip", ["-selection", "clipboard", "-o"], { + encoding: "utf8", + timeout: 5_000, + }); + return result.status === 0 ? result.stdout : ""; }; diff --git a/e2e/helpers/connection.ts b/e2e/helpers/connection.ts index 8fa5b93ae..b26f41ae4 100644 --- a/e2e/helpers/connection.ts +++ b/e2e/helpers/connection.ts @@ -1,40 +1,40 @@ -import { $, browser } from '@wdio/globals'; -import { submitTotpCode } from './mfa.js'; -import { canPingGateway } from './tunnel.js'; +import { $, browser } from "@wdio/globals"; +import { submitTotpCode } from "./mfa.js"; +import { canPingGateway } from "./tunnel.js"; -export const FULL_MFA_VIEW = '#mfa-totp-view'; -export const TRAY_MFA_VIEW = '.location-card-mfa-totp-view'; +export const FULL_MFA_VIEW = "#mfa-totp-view"; +export const TRAY_MFA_VIEW = ".location-card-mfa-totp-view"; export const connectAndPing = async (mfaView: string, totpSecret?: string) => { - const button = $('.connect-button'); - await button.waitForClickable(); - await button.click(); + const button = $(".connect-button"); + await button.waitForClickable(); + await button.click(); - if (totpSecret) { - const view = $(mfaView); - await view.waitForDisplayed(); - await submitTotpCode( - totpSecret, - mfaView, - async () => { - const verify = view.$('button=Verify'); - await verify.waitForClickable(); - await verify.click(); - }, - async () => !(await view.isDisplayed().catch(() => false)), - ); - } + if (totpSecret) { + const view = $(mfaView); + await view.waitForDisplayed(); + await submitTotpCode( + totpSecret, + mfaView, + async () => { + const verify = view.$("button=Verify"); + await verify.waitForClickable(); + await verify.click(); + }, + async () => !(await view.isDisplayed().catch(() => false)), + ); + } - await browser.waitUntil(() => canPingGateway(), { - timeout: 30_000, - interval: 2_000, - timeoutMsg: 'Could not ping the gateway through the VPN', - }); + await browser.waitUntil(() => canPingGateway(), { + timeout: 30_000, + interval: 2_000, + timeoutMsg: "Could not ping the gateway through the VPN", + }); }; export const disconnect = async () => { - const button = $('.connect-button.connected'); - await button.waitForClickable(); - await button.click(); - await $('.connect-button.disconnected').waitForDisplayed(); + const button = $(".connect-button.connected"); + await button.waitForClickable(); + await button.click(); + await $(".connect-button.disconnected").waitForDisplayed(); }; diff --git a/e2e/helpers/coreApi.ts b/e2e/helpers/coreApi.ts index 17359502f..669ca7768 100644 --- a/e2e/helpers/coreApi.ts +++ b/e2e/helpers/coreApi.ts @@ -1,190 +1,195 @@ const MIN_PEER_DISCONNECT_THRESHOLD_WITH_MFA = 120; const requireEnv = (name: string): string => { - const value = process.env[name]; - if (!value) { - throw new Error(`Missing required environment variable ${name}`); - } - return value; + const value = process.env[name]; + if (!value) { + throw new Error(`Missing required environment variable ${name}`); + } + return value; }; -const coreUrl = (): string => requireEnv('CORE_URL'); -const proxyUrl = (): string => requireEnv('PROXY_URL'); +const coreUrl = (): string => requireEnv("CORE_URL"); +const proxyUrl = (): string => requireEnv("PROXY_URL"); -export type LocationMfaMode = 'disabled' | 'internal' | 'external'; +export type LocationMfaMode = "disabled" | "internal" | "external"; export interface EnrollmentFixture { - username: string; - enrollmentToken: string; - enrollmentUrl: string; - ephemeral: boolean; + username: string; + enrollmentToken: string; + enrollmentUrl: string; + ephemeral: boolean; } export class CoreApi { - private cookie = ''; - - private async request( - method: string, - apiPath: string, - body?: unknown, - ): Promise { - const response = await fetch(`${coreUrl()}${apiPath}`, { - method, - redirect: 'manual', - headers: { - 'Content-Type': 'application/json', - ...(this.cookie ? { Cookie: this.cookie } : {}), - }, - body: body !== undefined ? JSON.stringify(body) : undefined, - }); - if (response.status >= 300 && response.status < 400) { - throw new Error(`Core API ${method} ${apiPath} redirected — check CORE_URL`); - } - if (!response.ok) { - throw new Error( - `Core API ${method} ${apiPath} failed: ${response.status} ${await response.text()}`, - ); - } - return response; - } - - async login(): Promise { - const response = await this.request('POST', '/api/v1/auth', { - username: process.env.CORE_ADMIN_USER ?? 'admin', - password: requireEnv('CORE_ADMIN_PASSWORD'), - }); - const setCookie = response.headers.get('set-cookie'); - if (!setCookie) { - throw new Error('Core API login did not return a session cookie'); - } - this.cookie = setCookie.split(';')[0]; - } - - async userExists(username: string): Promise { - const response = await fetch(`${coreUrl()}/api/v1/user/${username}`, { - redirect: 'manual', - headers: this.cookie ? { Cookie: this.cookie } : {}, - }); - return response.ok; - } - - async createUser(username: string): Promise { - await this.request('POST', '/api/v1/user', { - username, - first_name: 'E2E', - last_name: 'Test', - email: `${username}@e2e.test`, - }); - } - - async deleteUser(username: string): Promise { - await this.request('DELETE', `/api/v1/user/${username}`); - } - - async listNetworks(): Promise< - Array<{ id: number; location_mfa_mode: LocationMfaMode }> - > { - const response = await this.request('GET', '/api/v1/network'); - return (await response.json()) as Array<{ - id: number; - location_mfa_mode: LocationMfaMode; - }>; - } - - async findAvailableIp(networkId: number): Promise { - const response = await this.request('GET', `/api/v1/device/network/ip/${networkId}`); - const ips = (await response.json()) as Array<{ ip: string }>; - return ips[0].ip; - } - - async addNetworkDevice( - networkId: number, - name: string, - assignedIps: string[], - pubkey: string, - ): Promise { - const response = await this.request('POST', '/api/v1/device/network', { - name, - description: null, - location_id: networkId, - assigned_ips: assignedIps, - wireguard_pubkey: pubkey, - }); - const data = (await response.json()) as { config: { config: string } }; - return data.config.config; - } - - async setLocationMfaMode( - networkId: number, - mode: LocationMfaMode, - ): Promise { - const current = (await ( - await this.request('GET', `/api/v1/network/${networkId}`) - ).json()) as Record; - const previous = current.location_mfa_mode as LocationMfaMode; - if (previous === mode) { - return previous; - } - const joinList = (value: unknown): string => - Array.isArray(value) ? value.join(',') : ((value as string | null) ?? ''); - await this.request('PUT', `/api/v1/network/${networkId}`, { - name: current.name, - address: joinList(current.address), - endpoint: current.endpoint, - port: current.port, - allowed_ips: joinList(current.allowed_ips) || null, - dns: (current.dns as string | null) ?? null, - mtu: current.mtu, - fwmark: current.fwmark, - allow_all_groups: current.allow_all_groups, - allowed_groups: current.allowed_groups ?? [], - keepalive_interval: current.keepalive_interval, - peer_disconnect_threshold: Math.max( - Number(current.peer_disconnect_threshold ?? 0), - MIN_PEER_DISCONNECT_THRESHOLD_WITH_MFA, - ), - acl_enabled: current.acl_enabled, - acl_default_allow: current.acl_default_allow, - location_mfa_mode: mode, - service_location_mode: current.service_location_mode ?? 'disabled', - }); - return previous; - } - - private async startEnrollment( - username: string, - ephemeral: boolean, - ): Promise { - const response = await this.request( - 'POST', - `/api/v1/user/${username}/start_enrollment`, - { - send_enrollment_notification: false, - }, - ); - const data = (await response.json()) as { enrollment_token: string }; - return { - username, - enrollmentToken: data.enrollment_token, - enrollmentUrl: proxyUrl(), - ephemeral, - }; - } - - // A user with a pending enrollment, always (re)created so it has not enrolled. - async createEnrollmentFixture(): Promise { - const pinned = process.env.TEST_USERNAME; - const username = pinned ?? `e2e${Math.floor(Math.random() * 1_000_000)}`; - if (await this.userExists(username)) { - await this.deleteUser(username); - } - await this.createUser(username); - return this.startEnrollment(username, !pinned); - } + private cookie = ""; + + private async request( + method: string, + apiPath: string, + body?: unknown, + ): Promise { + const response = await fetch(`${coreUrl()}${apiPath}`, { + method, + redirect: "manual", + headers: { + "Content-Type": "application/json", + ...(this.cookie ? { Cookie: this.cookie } : {}), + }, + body: body !== undefined ? JSON.stringify(body) : undefined, + }); + if (response.status >= 300 && response.status < 400) { + throw new Error( + `Core API ${method} ${apiPath} redirected — check CORE_URL`, + ); + } + if (!response.ok) { + throw new Error( + `Core API ${method} ${apiPath} failed: ${response.status} ${await response.text()}`, + ); + } + return response; + } + + async login(): Promise { + const response = await this.request("POST", "/api/v1/auth", { + username: process.env.CORE_ADMIN_USER ?? "admin", + password: requireEnv("CORE_ADMIN_PASSWORD"), + }); + const setCookie = response.headers.get("set-cookie"); + if (!setCookie) { + throw new Error("Core API login did not return a session cookie"); + } + this.cookie = setCookie.split(";")[0]; + } + + async userExists(username: string): Promise { + const response = await fetch(`${coreUrl()}/api/v1/user/${username}`, { + redirect: "manual", + headers: this.cookie ? { Cookie: this.cookie } : {}, + }); + return response.ok; + } + + async createUser(username: string): Promise { + await this.request("POST", "/api/v1/user", { + username, + first_name: "E2E", + last_name: "Test", + email: `${username}@e2e.test`, + }); + } + + async deleteUser(username: string): Promise { + await this.request("DELETE", `/api/v1/user/${username}`); + } + + async listNetworks(): Promise< + Array<{ id: number; location_mfa_mode: LocationMfaMode }> + > { + const response = await this.request("GET", "/api/v1/network"); + return (await response.json()) as Array<{ + id: number; + location_mfa_mode: LocationMfaMode; + }>; + } + + async findAvailableIp(networkId: number): Promise { + const response = await this.request( + "GET", + `/api/v1/device/network/ip/${networkId}`, + ); + const ips = (await response.json()) as Array<{ ip: string }>; + return ips[0].ip; + } + + async addNetworkDevice( + networkId: number, + name: string, + assignedIps: string[], + pubkey: string, + ): Promise { + const response = await this.request("POST", "/api/v1/device/network", { + name, + description: null, + location_id: networkId, + assigned_ips: assignedIps, + wireguard_pubkey: pubkey, + }); + const data = (await response.json()) as { config: { config: string } }; + return data.config.config; + } + + async setLocationMfaMode( + networkId: number, + mode: LocationMfaMode, + ): Promise { + const current = (await ( + await this.request("GET", `/api/v1/network/${networkId}`) + ).json()) as Record; + const previous = current.location_mfa_mode as LocationMfaMode; + if (previous === mode) { + return previous; + } + const joinList = (value: unknown): string => + Array.isArray(value) ? value.join(",") : ((value as string | null) ?? ""); + await this.request("PUT", `/api/v1/network/${networkId}`, { + name: current.name, + address: joinList(current.address), + endpoint: current.endpoint, + port: current.port, + allowed_ips: joinList(current.allowed_ips) || null, + dns: (current.dns as string | null) ?? null, + mtu: current.mtu, + fwmark: current.fwmark, + allow_all_groups: current.allow_all_groups, + allowed_groups: current.allowed_groups ?? [], + keepalive_interval: current.keepalive_interval, + peer_disconnect_threshold: Math.max( + Number(current.peer_disconnect_threshold ?? 0), + MIN_PEER_DISCONNECT_THRESHOLD_WITH_MFA, + ), + acl_enabled: current.acl_enabled, + acl_default_allow: current.acl_default_allow, + location_mfa_mode: mode, + service_location_mode: current.service_location_mode ?? "disabled", + }); + return previous; + } + + private async startEnrollment( + username: string, + ephemeral: boolean, + ): Promise { + const response = await this.request( + "POST", + `/api/v1/user/${username}/start_enrollment`, + { + send_enrollment_notification: false, + }, + ); + const data = (await response.json()) as { enrollment_token: string }; + return { + username, + enrollmentToken: data.enrollment_token, + enrollmentUrl: proxyUrl(), + ephemeral, + }; + } + + // A user with a pending enrollment, always (re)created so it has not enrolled. + async createEnrollmentFixture(): Promise { + const pinned = process.env.TEST_USERNAME; + const username = pinned ?? `e2e${Math.floor(Math.random() * 1_000_000)}`; + if (await this.userExists(username)) { + await this.deleteUser(username); + } + await this.createUser(username); + return this.startEnrollment(username, !pinned); + } } export const loggedInCoreApi = async (): Promise => { - const api = new CoreApi(); - await api.login(); - return api; + const api = new CoreApi(); + await api.login(); + return api; }; diff --git a/e2e/helpers/enrollment.ts b/e2e/helpers/enrollment.ts index fcab19354..a37d6967c 100644 --- a/e2e/helpers/enrollment.ts +++ b/e2e/helpers/enrollment.ts @@ -1,58 +1,59 @@ -import { $, expect } from '@wdio/globals'; -import type { EnrollmentFixture } from './coreApi.js'; -import { submitTotpCode } from './mfa.js'; -import { switchToFullView } from './windows.js'; +import { $, expect } from "@wdio/globals"; +import type { EnrollmentFixture } from "./coreApi.js"; +import { submitTotpCode } from "./mfa.js"; +import { switchToFullView } from "./windows.js"; -export const password = 'E2eTestPassword123!'; +export const password = "E2eTestPassword123!"; const clickNext = async () => { - const next = $('.enroll-controls .right button'); - await next.waitForClickable(); - await next.click(); + const next = $(".enroll-controls .right button"); + await next.waitForClickable(); + await next.click(); }; export const addInstance = async (fixture: EnrollmentFixture) => { - await switchToFullView(); - const addCard = $('#add-page-view button'); - await addCard.waitForClickable(); - await addCard.click(); - await expect($('#add-instance-view')).toBeDisplayed(); - await $('[data-testid="field-url"]').setValue(fixture.enrollmentUrl); - await $('[data-testid="field-token"]').setValue(fixture.enrollmentToken); - const submit = $('#add-instance-view').$('button=Add Instance'); - await submit.waitForClickable(); - await submit.click(); - await expect($('#welcome-step')).toBeDisplayed(); + await switchToFullView(); + const addCard = $("#add-page-view button"); + await addCard.waitForClickable(); + await addCard.click(); + await expect($("#add-instance-view")).toBeDisplayed(); + await $('[data-testid="field-url"]').setValue(fixture.enrollmentUrl); + await $('[data-testid="field-token"]').setValue(fixture.enrollmentToken); + const submit = $("#add-instance-view").$("button=Add Instance"); + await submit.waitForClickable(); + await submit.click(); + await expect($("#welcome-step")).toBeDisplayed(); }; export const setPassword = async () => { - await clickNext(); - await expect($('#password-step')).toBeDisplayed(); - await $('[data-testid="field-password"]').setValue(password); - await $('[data-testid="field-repeat"]').setValue(password); - await clickNext(); + await clickNext(); + await expect($("#password-step")).toBeDisplayed(); + await $('[data-testid="field-password"]').setValue(password); + await $('[data-testid="field-repeat"]').setValue(password); + await clickNext(); }; export const configureTotp = async (): Promise => { - await expect($('#mfa-configuration-step')).toBeDisplayed(); - const secretField = $('#mfa-configuration-step .copy-field .track p'); - await secretField.waitForExist(); - const secret = - ((await secretField.getProperty('textContent')) as string | null)?.trim() ?? ''; - await submitTotpCode(secret, '#mfa-configuration-step', clickNext, () => - $('#recovery-codes-step') - .isDisplayed() - .catch(() => false), - ); - await $('#recovery-codes-step .checkbox').click(); - const complete = $('#recovery-codes-step').$('button=Complete'); - await complete.waitForClickable(); - await complete.click(); - return secret; + await expect($("#mfa-configuration-step")).toBeDisplayed(); + const secretField = $("#mfa-configuration-step .copy-field .track p"); + await secretField.waitForExist(); + const secret = + ((await secretField.getProperty("textContent")) as string | null)?.trim() ?? + ""; + await submitTotpCode(secret, "#mfa-configuration-step", clickNext, () => + $("#recovery-codes-step") + .isDisplayed() + .catch(() => false), + ); + await $("#recovery-codes-step .checkbox").click(); + const complete = $("#recovery-codes-step").$("button=Complete"); + await complete.waitForClickable(); + await complete.click(); + return secret; }; export const finishEnrollment = async () => { - await expect($('#finish-step')).toBeDisplayed(); - await $('#finish-step').$('button=Got it').click(); - await expect($('#overview-page')).toBeDisplayed(); + await expect($("#finish-step")).toBeDisplayed(); + await $("#finish-step").$("button=Got it").click(); + await expect($("#overview-page")).toBeDisplayed(); }; diff --git a/e2e/helpers/mfa.ts b/e2e/helpers/mfa.ts index c0fdeea98..ac6e12e1d 100644 --- a/e2e/helpers/mfa.ts +++ b/e2e/helpers/mfa.ts @@ -1,32 +1,32 @@ -import { $, browser } from '@wdio/globals'; -import { totpCode } from './totp.js'; +import { $, browser } from "@wdio/globals"; +import { totpCode } from "./totp.js"; const MAX_ATTEMPTS = 3; const fillCode = async (scope: string, code: string) => { - const input = $(`${scope} .code-input input`); - await input.click(); - await input.setValue(code); + const input = $(`${scope} .code-input input`); + await input.click(); + await input.setValue(code); }; export const submitTotpCode = async ( - secret: string, - scope: string, - submit: () => Promise, - accepted: () => Promise, + secret: string, + scope: string, + submit: () => Promise, + accepted: () => Promise, ) => { - for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) { - await fillCode(scope, totpCode(secret)); - await submit(); - try { - await browser.waitUntil(accepted, { - timeout: 6_000, - interval: 500, - timeoutMsg: 'TOTP code was not accepted after several attempts', - }); - return; - } catch (error) { - if (attempt === MAX_ATTEMPTS) throw error; - } - } + for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) { + await fillCode(scope, totpCode(secret)); + await submit(); + try { + await browser.waitUntil(accepted, { + timeout: 6_000, + interval: 500, + timeoutMsg: "TOTP code was not accepted after several attempts", + }); + return; + } catch (error) { + if (attempt === MAX_ATTEMPTS) throw error; + } + } }; diff --git a/e2e/helpers/totp.ts b/e2e/helpers/totp.ts index 87e4a4cca..f6579b6e3 100644 --- a/e2e/helpers/totp.ts +++ b/e2e/helpers/totp.ts @@ -1,8 +1,8 @@ -import { Secret, TOTP } from 'otpauth'; +import { Secret, TOTP } from "otpauth"; export const totpCode = (base32Secret: string): string => - new TOTP({ - secret: Secret.fromBase32(base32Secret.replace(/\s/g, '').toUpperCase()), - digits: 6, - period: 30, - }).generate(); + new TOTP({ + secret: Secret.fromBase32(base32Secret.replace(/\s/g, "").toUpperCase()), + digits: 6, + period: 30, + }).generate(); diff --git a/e2e/helpers/tunnel.ts b/e2e/helpers/tunnel.ts index c4279f0b8..674f0bb78 100644 --- a/e2e/helpers/tunnel.ts +++ b/e2e/helpers/tunnel.ts @@ -1,15 +1,17 @@ -import { execFile } from 'node:child_process'; -import { promisify } from 'node:util'; +import { execFile } from "node:child_process"; +import { promisify } from "node:util"; const execFileAsync = promisify(execFile); -const GATEWAY_VPN_IP = process.env.GATEWAY_VPN_IP ?? '10.10.10.1'; +const GATEWAY_VPN_IP = process.env.GATEWAY_VPN_IP ?? "10.10.10.1"; -export const canPingGateway = async (target = GATEWAY_VPN_IP): Promise => { - try { - await execFileAsync('ping', ['-c', '1', '-W', '5', target]); - return true; - } catch { - return false; - } +export const canPingGateway = async ( + target = GATEWAY_VPN_IP, +): Promise => { + try { + await execFileAsync("ping", ["-c", "1", "-W", "5", target]); + return true; + } catch { + return false; + } }; diff --git a/e2e/helpers/windows.ts b/e2e/helpers/windows.ts index 6fa52636a..6cd63f1bf 100644 --- a/e2e/helpers/windows.ts +++ b/e2e/helpers/windows.ts @@ -1,22 +1,22 @@ -import { $, browser } from '@wdio/globals'; +import { $, browser } from "@wdio/globals"; export const switchToFullView = async () => { - for (const handle of await browser.getWindowHandles()) { - await browser.switchToWindow(handle); - const url = await browser.getUrl(); - if (url.includes('/full')) { - return; - } - if (url.includes('/compact')) { - await browser.url('tauri://localhost/full/'); - return; - } - } - throw new Error('No full view window found'); + for (const handle of await browser.getWindowHandles()) { + await browser.switchToWindow(handle); + const url = await browser.getUrl(); + if (url.includes("/full")) { + return; + } + if (url.includes("/compact")) { + await browser.url("tauri://localhost/full/"); + return; + } + } + throw new Error("No full view window found"); }; export const switchToTrayView = async () => { - await switchToFullView(); - await browser.url('tauri://localhost/compact/'); - await $('#compact-locations-page').waitForDisplayed(); + await switchToFullView(); + await browser.url("tauri://localhost/compact/"); + await $("#compact-locations-page").waitForDisplayed(); }; diff --git a/e2e/helpers/wireguard.ts b/e2e/helpers/wireguard.ts index 6e1075604..092467ac0 100644 --- a/e2e/helpers/wireguard.ts +++ b/e2e/helpers/wireguard.ts @@ -1,50 +1,55 @@ -import { generateKeyPairSync } from 'node:crypto'; -import type { CoreApi } from './coreApi.js'; +import { generateKeyPairSync } from "node:crypto"; +import type { CoreApi } from "./coreApi.js"; export const generateWireguardKeys = () => { - const { privateKey, publicKey } = generateKeyPairSync('x25519'); - return { - privateKey: privateKey - .export({ type: 'pkcs8', format: 'der' }) - .subarray(-32) - .toString('base64'), - publicKey: publicKey - .export({ type: 'spki', format: 'der' }) - .subarray(-32) - .toString('base64'), - }; + const { privateKey, publicKey } = generateKeyPairSync("x25519"); + return { + privateKey: privateKey + .export({ type: "pkcs8", format: "der" }) + .subarray(-32) + .toString("base64"), + publicKey: publicKey + .export({ type: "spki", format: "der" }) + .subarray(-32) + .toString("base64"), + }; }; export type TunnelConfig = { - name: string; - prvkey: string; - pubkey: string; - address: string; - serverPubkey: string; - allowedIps: string; - endpoint: string; - dns: string; - keepalive: string; + name: string; + prvkey: string; + pubkey: string; + address: string; + serverPubkey: string; + allowedIps: string; + endpoint: string; + dns: string; + keepalive: string; }; export const provisionTunnel = async ( - core: CoreApi, - networkId: number, - name: string, + core: CoreApi, + networkId: number, + name: string, ): Promise => { - const keys = generateWireguardKeys(); - const ip = await core.findAvailableIp(networkId); - const conf = await core.addNetworkDevice(networkId, name, [ip], keys.publicKey); - const field = (re: RegExp) => conf.match(re)?.[1]?.trim() ?? ''; - return { - name, - prvkey: keys.privateKey, - pubkey: keys.publicKey, - address: field(/Address\s*=\s*(.+)/), - serverPubkey: field(/PublicKey\s*=\s*(.+)/), - allowedIps: field(/AllowedIPs\s*=\s*(.+)/), - endpoint: field(/Endpoint\s*=\s*(.+)/), - dns: field(/DNS\s*=\s*(.+)/), - keepalive: field(/PersistentKeepalive\s*=\s*(.+)/) || '25', - }; + const keys = generateWireguardKeys(); + const ip = await core.findAvailableIp(networkId); + const conf = await core.addNetworkDevice( + networkId, + name, + [ip], + keys.publicKey, + ); + const field = (re: RegExp) => conf.match(re)?.[1]?.trim() ?? ""; + return { + name, + prvkey: keys.privateKey, + pubkey: keys.publicKey, + address: field(/Address\s*=\s*(.+)/), + serverPubkey: field(/PublicKey\s*=\s*(.+)/), + allowedIps: field(/AllowedIPs\s*=\s*(.+)/), + endpoint: field(/Endpoint\s*=\s*(.+)/), + dns: field(/DNS\s*=\s*(.+)/), + keepalive: field(/PersistentKeepalive\s*=\s*(.+)/) || "25", + }; }; diff --git a/e2e/package.json b/e2e/package.json index 8d0d66d5c..c60286a44 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -1,25 +1,25 @@ { - "name": "e2e", - "private": true, - "version": "1.0.0", - "type": "module", - "scripts": { - "test": "wdio run ./wdio.conf.ts", - "provision": "node scripts/provision.mjs", - "fix": "biome check --fix", - "lint": "biome check" - }, - "devDependencies": { - "@biomejs/biome": "2.4.16", - "@types/node": "^25.9.2", - "@wdio/cli": "^9.20.0", - "@wdio/globals": "^9.27.2", - "@wdio/local-runner": "^9.20.0", - "@wdio/mocha-framework": "^9.20.0", - "@wdio/spec-reporter": "^9.20.0", - "@wdio/types": "^9.27.2", - "otpauth": "^9.4.1", - "tsx": "^4.20.6", - "typescript": "^5.9.3" - } + "name": "e2e", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "test": "wdio run ./wdio.conf.ts", + "provision": "node scripts/provision.mjs", + "fix": "biome check --fix", + "lint": "biome check" + }, + "devDependencies": { + "@biomejs/biome": "2.4.16", + "@types/node": "^25.9.2", + "@wdio/cli": "^9.30.0", + "@wdio/globals": "^9.29.1", + "@wdio/local-runner": "^9.30.0", + "@wdio/mocha-framework": "^9.30.0", + "@wdio/spec-reporter": "^9.29.1", + "@wdio/types": "^9.29.1", + "otpauth": "^9.4.1", + "tsx": "^4.20.6", + "typescript": "^5.9.3" + } } diff --git a/e2e/pnpm-lock.yaml b/e2e/pnpm-lock.yaml index 238ee63bd..5cd770fe6 100644 --- a/e2e/pnpm-lock.yaml +++ b/e2e/pnpm-lock.yaml @@ -15,23 +15,23 @@ importers: specifier: ^25.9.2 version: 25.9.2 '@wdio/cli': - specifier: ^9.20.0 - version: 9.27.2(@types/node@25.9.2)(expect-webdriverio@5.6.8) + specifier: ^9.30.0 + version: 9.30.0(@types/node@25.9.2)(expect-webdriverio@5.7.0)(supports-color@8.1.1) '@wdio/globals': - specifier: ^9.27.2 - version: 9.27.2(expect-webdriverio@5.6.8)(webdriverio@9.27.2) + specifier: ^9.29.1 + version: 9.29.1(expect-webdriverio@5.7.0)(webdriverio@9.30.0(supports-color@8.1.1)) '@wdio/local-runner': - specifier: ^9.20.0 - version: 9.27.2(@wdio/globals@9.27.2)(webdriverio@9.27.2) + specifier: ^9.30.0 + version: 9.30.0(@wdio/globals@9.29.1)(supports-color@8.1.1)(webdriverio@9.30.0(supports-color@8.1.1)) '@wdio/mocha-framework': - specifier: ^9.20.0 - version: 9.27.2 + specifier: ^9.30.0 + version: 9.30.0(supports-color@8.1.1) '@wdio/spec-reporter': - specifier: ^9.20.0 - version: 9.27.2 + specifier: ^9.29.1 + version: 9.29.1 '@wdio/types': - specifier: ^9.27.2 - version: 9.27.2 + specifier: ^9.29.1 + version: 9.29.1 otpauth: specifier: ^9.4.1 version: 9.5.1 @@ -74,24 +74,28 @@ packages: engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + libc: [musl] '@biomejs/cli-linux-arm64@2.4.16': resolution: {integrity: sha512-2kFb4//jxfZaP6D+Rj5VkHkxgyD9EoRAVBEQb8PKRv+s4NO2zYNJKXFaJmK1CmhufJOWEfpHKaRbOja7qjmdhQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + libc: [glibc] '@biomejs/cli-linux-x64-musl@2.4.16': resolution: {integrity: sha512-iHDS+MCM65DPqWGu+ECC3uoALyj2H7F4nVUPxIPjz/PIl94EUu+EDfGZDzFP+NY1EOPVt9NQvwFqq7HdMmowdg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + libc: [musl] '@biomejs/cli-linux-x64@2.4.16': resolution: {integrity: sha512-NbcBbi/nJqn5baae6wqRXdS7Gadf2uRpehSh6vMSYpG8OhkXl/Xg8aorWrJ+9VWqAT5ml90alLvorkpMW0nBwQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + libc: [glibc] '@biomejs/cli-win32-arm64@2.4.16': resolution: {integrity: sha512-0rgImMsNb5v/chhkIFe3wu7PEFClS6RBAYUijGL9UsYN3PanSaoK24HSSuSJb1pYbYYVjzAyZTl3gtjJ84BM8A==} @@ -111,156 +115,312 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.28.0': resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.28.0': resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.28.0': resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.28.0': resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.28.0': resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.28.0': resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.28.0': resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.28.0': resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.28.0': resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.28.0': resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.28.0': resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.28.0': resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.28.0': resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.28.0': resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.28.0': resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.28.0': resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.28.0': resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.28.0': resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.28.0': resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.28.0': resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openharmony-arm64@0.28.0': resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/sunos-x64@0.28.0': resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.28.0': resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.28.0': resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.28.0': resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} engines: {node: '>=18'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@inquirer/ansi@1.0.2': resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} engines: {node: '>=18'} @@ -430,8 +590,8 @@ packages: resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} engines: {node: '>= 20.19.0'} - '@nodable/entities@2.1.1': - resolution: {integrity: sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg==} + '@nodable/entities@3.0.0': + resolution: {integrity: sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -473,9 +633,15 @@ packages: '@types/node@20.19.42': resolution: {integrity: sha512-5L7SUaFC1RyDraj2yRhyBzHTobyXHmohD100CChNtyPyleoq37Mqab5Gn8XEKI04dfN/oqPdpHk38MgcQWHbZg==} + '@types/node@20.19.43': + resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==} + '@types/node@25.9.2': resolution: {integrity: sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw==} + '@types/node@25.9.5': + resolution: {integrity: sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -515,74 +681,74 @@ packages: '@vitest/utils@4.1.8': resolution: {integrity: sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==} - '@wdio/cli@9.27.2': - resolution: {integrity: sha512-DHCtxsAmKu4hMAnEljiJ6v76XidA2A9IgP+5kQipxc7r8Ct22VJfEJnasWKEz35WztATzr6vzhk0JalTHMVunw==} + '@wdio/cli@9.30.0': + resolution: {integrity: sha512-e5IqOvfjnyMfSYM6c++qe66kwMw24TA11b/sYDa3oPsHps06JaRzFqM4U0HZIUa+9QpNheat87VYJWrsRCKv1g==} engines: {node: '>=18.20.0'} hasBin: true - '@wdio/config@9.27.2': - resolution: {integrity: sha512-d31AMKrqADuKdw7F3025Aeunboska402xmbkdXpOKp3W8gwXcC/y9xorMNM1Z6/wYr+DDFBYXn9AgbaURPQ8gQ==} + '@wdio/config@9.30.0': + resolution: {integrity: sha512-pH/Y1F4QVIsx33xyli8+9HCr4HRuOeUk8j/lqNBuuUzbvduYRCLmNkZqxRsLnRth8wrlPdzA8Hq+PPLwJWrceA==} engines: {node: '>=18.20.0'} - '@wdio/dot-reporter@9.27.2': - resolution: {integrity: sha512-xoBgmACafV4L7e7e3DUN8UM1N+I225oms38JtxtfgrMfvHm8QtcmZWXfycxEGM28Gm2M3NmeV3oso7hZeBk6Ww==} + '@wdio/dot-reporter@9.29.1': + resolution: {integrity: sha512-5UVgxKHVoJfJVSg3VH9n0yPkstHzX65g5zRBtNX51hqXmSPRE9kSLGq53Lo91UTORc0og3i0UT93zZqEQhpzjA==} engines: {node: '>=18.20.0'} - '@wdio/globals@9.27.2': - resolution: {integrity: sha512-Rx9bqD4/8iR3CNPMWYxywQSCqsR/WGwIYT2Q0uUmrvPxOdYFridDEhVRGO32kQ55UM5+JXzXppxgwGLRQ60fJg==} + '@wdio/globals@9.29.1': + resolution: {integrity: sha512-F96BKppx4HGD64v+s57TM4K4zaxqUCg2RXHk6sjB2xrSa7P+d2VYV28ID2ddF7iSodVfPlpa1i2/jy8jMGrU8w==} engines: {node: '>=18.20.0'} peerDependencies: expect-webdriverio: ^5.6.5 webdriverio: ^9.0.0 - '@wdio/local-runner@9.27.2': - resolution: {integrity: sha512-VJ9SrOzZSgT8l3QOq+z/+nWZoLMeeEvzivEaVOBFwWOdkvE2JVomE19Ch/OFSXHCoGv3PrvfiiBunphLJ7EZ7A==} + '@wdio/local-runner@9.30.0': + resolution: {integrity: sha512-7W+vjAsccGXuy2g83vsc5zKwZSkmnEZDEzsORGhorJAWJPd3NwZ8LyyudBxWvSS4sLbJB0Ix4wx70lA8YoiQMA==} engines: {node: '>=18.20.0'} - '@wdio/logger@9.18.0': - resolution: {integrity: sha512-HdzDrRs+ywAqbXGKqe1i/bLtCv47plz4TvsHFH3j729OooT5VH38ctFn5aLXgECmiAKDkmH/A6kOq2Zh5DIxww==} + '@wdio/logger@9.29.1': + resolution: {integrity: sha512-0ZAEIo6PNyMIJPlOGkIgyOJUjcd0pC8/QHlVAAe1c91/IcjZ1X+k0yidXHaboJdN7dq1XPUacmhRdtua0U5EZg==} engines: {node: '>=18.20.0'} - '@wdio/mocha-framework@9.27.2': - resolution: {integrity: sha512-C3XbwffqbK4b80XcGp845FphPlz2VvCepvXfi8TI7uo1ZML/Ybcwjmb35nJeoB6F/jPp/Es60BVG7tFG1UW1iw==} + '@wdio/mocha-framework@9.30.0': + resolution: {integrity: sha512-NhxHeIFd0iHpb8sud3ahOilE/bgm5MBBzSq+xSKW+hTUYdmeyy4w+KX5p/+AQ0dsUEIToaA4xjZRUTCwY+65Wg==} engines: {node: '>=18.20.0'} - '@wdio/protocols@9.27.2': - resolution: {integrity: sha512-aek2972uzuoSG5yHLhtFpd463qeB4PklYXbJd7Ta44yKinol+akdPZUc9AQJC9Fxz6kBzxHAp2nfYuppxm+Pqg==} + '@wdio/protocols@9.30.0': + resolution: {integrity: sha512-VDKCTw3GVdqUw1+fXAY4FUOSt+a3/r7T2O34d5HAaZLfI6QHacsU7/N0Sv3w/QgWU6yj3WkXElXq1oSWF1XcBw==} '@wdio/repl@9.16.2': resolution: {integrity: sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==} engines: {node: '>=18.20.0'} - '@wdio/reporter@9.27.2': - resolution: {integrity: sha512-JDbBeSM8TMZ3CRTnF1fJqyUJEYDas6k1xjVZnrGrO8L/8xQ8dG2vaC5wGJz6uMSHazyks8pL3g/RS8dTbTUPbg==} + '@wdio/reporter@9.29.1': + resolution: {integrity: sha512-CKAcVy9BGwvufokMcl3H+yNcvD11Klku/1BPz8bKSRv7/KzueXR06s1cPbJH3tv9r9zxPErxgdVMpulN8I0qAg==} engines: {node: '>=18.20.0'} - '@wdio/runner@9.27.2': - resolution: {integrity: sha512-FLsJ/FKd5acsNOKMYWayVyyDBY1Zw91kgwZry9h+ghpbK8uzpkmgOPtGxljsABPrFpv02fk1ICUNjlKvzQBYNQ==} + '@wdio/runner@9.30.0': + resolution: {integrity: sha512-gvUExYXZtziIM4TmWMd98cvVUt2jTQ54k8gIYxBJ8w8N6BQfrko08IKWrVjoNOanJzLMHjqtCWWx4DXR3JtozQ==} engines: {node: '>=18.20.0'} peerDependencies: expect-webdriverio: ^5.6.5 webdriverio: ^9.0.0 - '@wdio/spec-reporter@9.27.2': - resolution: {integrity: sha512-CGd71d+fxa9UZUBI8frQucv6Iyq8JfdBzET98H1bBqhtFy8xf1f9AaveQ4VvRr0LQKZ6LwmXRfb/bZJcr0yfag==} + '@wdio/spec-reporter@9.29.1': + resolution: {integrity: sha512-iqlHW/qGDRGmxQKN7XyCHxfKphTbPNnniV3yxNXZRSGHCCQok5KFKOnj4fpUCKEyD5jtPAmP6Y0qc1UyR3Dc3Q==} engines: {node: '>=18.20.0'} - '@wdio/types@9.27.2': - resolution: {integrity: sha512-nBUq2juoaaibrOacn/cZ5IjZvJa6ZAHlh1B4UjMxOVcd7kzZyXJjfwAP3vNnboK4dyCLHyKLM+TpfFMmoO59OQ==} + '@wdio/types@9.29.1': + resolution: {integrity: sha512-jp8jgMv6TS35G96YzHZxw3PVN0Dz6xQ6tnMAicndAJ8Jt9AIXb0ywIse4TjaFywakO3dLoEhlyA3ZtR26vmt+w==} engines: {node: '>=18.20.0'} - '@wdio/utils@9.27.2': - resolution: {integrity: sha512-QANs93jABp4BfCrX3Vhmrt5usWz2Zo6F6H1hL1+/ibxwG3qYod68PRQIGssoV2Elhql3IUk6o8iRGTDqV0SmIg==} + '@wdio/utils@9.30.0': + resolution: {integrity: sha512-MhTx8jKOtspogeMUmASFsmL6vRetwCpvfcAFHauYZ62UzPjFwHThIXorzoG90mrcS9Yl+c8Sj9BfX+bdxwXfsg==} engines: {node: '>=18.20.0'} - '@wdio/xvfb@9.27.2': - resolution: {integrity: sha512-Rj8AP/VYVd5clZFKy+P7zzoXCKshjrog6lcV65nnUzATbUYT/PpUCy6OhEWHTSmLQY2Oc5ztY/IetLSg4nmB3w==} - engines: {node: '>=18'} + '@wdio/xvfb@9.30.0': + resolution: {integrity: sha512-v2vkweVbf1nI3lqRjVMbRyWFqHxPrDE95sLq0IZLjZ8fnXtWWIF61ZxfUhLdrMKB6s3gXnOyZuWgEJFD7iDBGQ==} + engines: {node: '>=18.20.0'} - '@zip.js/zip.js@2.8.26': - resolution: {integrity: sha512-RQ4h9F6DOiHxpdocUDrOl6xBM+yOtz+LkUol47AVWcfebGBDpZ7w7Xvz9PS24JgXvLGiXXzSAfdCdVy1tPlaFA==} + '@zip.js/zip.js@2.8.34': + resolution: {integrity: sha512-+6a3lyqq69rpseLbvDPiVIWsZ/HdTGAAD6afFtug6ECPDGttb2dHnPC6cJgdPofYkzL9OvXizegq+DQVfL2rnA==} engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=18.0.0'} abort-controller@3.0.0: @@ -621,8 +787,8 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - anynum@1.0.0: - resolution: {integrity: sha512-xjR9/zBVnUOP6ztMIIgShjsxui80nQUQH+5xJnvrYLs+90bF25/KJqaAi8mk+B4RDtX1Nspi6fmp4YTEts8SfA==} + anynum@1.0.1: + resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} archiver-utils@5.0.2: resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} @@ -678,6 +844,15 @@ packages: bare-buffer: optional: true + bare-fs@4.7.4: + resolution: {integrity: sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-os@3.9.1: resolution: {integrity: sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==} engines: {bare: '>=1.14.0'} @@ -685,6 +860,9 @@ packages: bare-path@3.0.1: resolution: {integrity: sha512-ghj2DSK/2e99a1anTVPCV4m4YIYtrbXhfM7V3D7XZLOTsybnYyaJloymGqssQc8l/or0UoDyRtNQkmkEF/ysgQ==} + bare-path@3.1.1: + resolution: {integrity: sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==} + bare-stream@2.13.1: resolution: {integrity: sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==} peerDependencies: @@ -699,9 +877,26 @@ packages: bare-events: optional: true + bare-stream@2.13.3: + resolution: {integrity: sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==} + peerDependencies: + bare-abort-controller: '*' + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + bare-buffer: + optional: true + bare-events: + optional: true + bare-url@2.4.5: resolution: {integrity: sha512-K+y9xF1tN+CdPu4qWwr0QiK1Al07eFPGYK5M2pDXcmHdMdgC/tT/bpmMe1hrmRHaidKLkXrC+cRNYf3XVDUhSQ==} + bare-url@2.4.6: + resolution: {integrity: sha512-iQxPClE07hETVpbRoX7JXX3v/ZQViCxe/SYCxylRLzdEx1xJAufPptfiOqR8tqiCtmbtMDANKWszzjLu1PMAZQ==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -716,11 +911,11 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.15: - resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} + brace-expansion@1.1.16: + resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} - brace-expansion@2.1.1: - resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + brace-expansion@2.1.2: + resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -751,8 +946,8 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chardet@2.1.1: - resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + chardet@2.2.0: + resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} @@ -825,9 +1020,9 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} - create-wdio@9.27.2: - resolution: {integrity: sha512-zhulPsBa+NkPbLtRFlZFzijCmvS5n7gkWB/90JwahfebfzB0k6/ZwWue7PwyVgzzD/JUGzX1M4HlaWo6265ESQ==} - engines: {node: '>=12.0.0'} + create-wdio@9.30.0: + resolution: {integrity: sha512-rmlMhGxT+s+mnAt+GWUhwf/h9CalN1Qy/LXE6u7IUkw2HdpcimYZOFCQ15bujE+Bm0/rfH9jFz9Tn08xtln4nw==} + engines: {node: '>=18.20.0'} hasBin: true cross-spawn@7.0.6: @@ -960,6 +1155,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -1009,8 +1209,8 @@ packages: resolution: {integrity: sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==} engines: {node: '>=18'} - expect-webdriverio@5.6.8: - resolution: {integrity: sha512-VfLC9o84B40LEw+zX7UykUptKkscX1rPYY4jaAsQ6KyKL0X0ltDkWzKIUiY9g/u0ApNerrkhM/QEY0TDT8pJOQ==} + expect-webdriverio@5.7.0: + resolution: {integrity: sha512-jLOTrJoPBC3Wtd83ryHMbRcEajMGtAnn6OWtSnoJoDLt16nHvxVdjcI4Bc0n+1KAOr8DvQtlJ55f0M48kJtEpw==} engines: {node: '>=20'} peerDependencies: '@wdio/globals': ^9.0.0 @@ -1032,11 +1232,11 @@ packages: fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - fast-xml-builder@1.2.0: - resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} + fast-xml-builder@1.3.0: + resolution: {integrity: sha512-F74cZEdCvuw9P41GAC3rod4X04jjWGM1JPEv/GWSqFTWLsdyMSBMBMlm9Hk3GLBgLBbdBNY8yee0pQh2RBVESQ==} - fast-xml-parser@5.8.0: - resolution: {integrity: sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg==} + fast-xml-parser@5.10.1: + resolution: {integrity: sha512-IEMIf7298kXuZSRFoGfMYrl7is8LpavODgbNz1cwIudv7KwVFnuU+UsMporfq6PD6aXSlawZlARiA3UywCTfMw==} hasBin: true fd-slicer@1.1.0: @@ -1077,8 +1277,8 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - geckodriver@6.1.0: - resolution: {integrity: sha512-ZRXLa4ZaYTTgUO4Eefw+RsQCleugU2QLb1ME7qTYxxuRj51yAhfnXaItXNs5/vUzfIaDHuZ+YnSF005hfp07nQ==} + geckodriver@6.1.1: + resolution: {integrity: sha512-/AcCyc9o9o6hUbudaSJM2iOtXbxSLqQPOb4GrPvEN40cjraUeaX/j5kH3mSgwiroyMn7qzx2wM61AQ2XY8j3sA==} engines: {node: '>=20.0.0'} hasBin: true @@ -1160,8 +1360,8 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - iconv-lite@0.7.2: - resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + iconv-lite@0.7.3: + resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} engines: {node: '>=0.10.0'} ieee754@1.2.1: @@ -1189,8 +1389,8 @@ packages: '@types/node': optional: true - ip-address@10.2.0: - resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==} + ip-address@10.3.1: + resolution: {integrity: sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==} engines: {node: '>= 12'} is-arrayish@0.2.1: @@ -1240,6 +1440,9 @@ packages: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} + is-unsafe@2.0.0: + resolution: {integrity: sha512-2LdV822R+wmI86unXA93WCFpL6g+av8ynWk0nrHyJqGop5VoocYsSLFgN8jrfalT6iGeLNM4KXuVSsULP53kEA==} + isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -1289,8 +1492,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.2.0: - resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} hasBin: true json-parse-even-better-errors@3.0.2: @@ -1384,8 +1587,8 @@ packages: engines: {node: '>= 14.0.0'} hasBin: true - modern-tar@0.7.6: - resolution: {integrity: sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg==} + modern-tar@0.7.7: + resolution: {integrity: sha512-t9VmxaqrmANnEOBhpSDI6HD192Ge48k8vmWqQQL7hSFEqHEYwZbbsu49+aKLWZeRvFs3j1pMhXOqqF4kPlvjkQ==} engines: {node: '>=18.0.0'} ms@2.1.3: @@ -1483,8 +1686,8 @@ packages: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - path-expression-matcher@1.5.0: - resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} + path-expression-matcher@1.6.2: + resolution: {integrity: sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ==} engines: {node: '>=14.0.0'} path-key@3.1.1: @@ -1628,8 +1831,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - semver@7.8.4: - resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true @@ -1705,6 +1908,9 @@ packages: streamx@2.27.0: resolution: {integrity: sha512-WZ189TKnHoAokYHvwzaAQMpd55cgUmFIcJFzBSgGcb886jau5DL+XdDhTWV4ps3FLvk+OORp0dLRTPsLZ21CSA==} + streamx@2.28.0: + resolution: {integrity: sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -1735,8 +1941,8 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strnum@2.4.0: - resolution: {integrity: sha512-sHrVyWWdq28RbhjuJdZsA1SnGRJV6NiXbk6AXBxDOsgAcA+lmpUZCYjOdLBxkXMwis6RRe7dlZt4VlIWFVzkmg==} + strnum@2.4.1: + resolution: {integrity: sha512-M9eUSMT2dCB2cTNPG7UYj6KuK7RJR2SN2+yCV/fTW3xzTCS6EaGZ5pSMgDIjB7r8zSfTGk+dvvn9rTjpVS9Mwg==} supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -1746,8 +1952,8 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - tar-fs@3.1.2: - resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} + tar-fs@3.1.3: + resolution: {integrity: sha512-/hU4AXnIdZu+Gvl1pk0oI5f5HxWsCJRtY2aFaJdk9VvyL48DWU6iU5WAIPG+wIi1YvWA6eTJvIviP/tMAZZNwQ==} tar-stream@3.2.0: resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} @@ -1778,6 +1984,11 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + tsx@4.23.1: + resolution: {integrity: sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==} + engines: {node: '>=18.0.0'} + hasBin: true + type-fest@3.13.1: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} @@ -1801,8 +2012,8 @@ packages: undici-types@7.24.6: resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} - undici@6.26.0: - resolution: {integrity: sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==} + undici@6.28.0: + resolution: {integrity: sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==} engines: {node: '>=18.17'} undici@7.27.2: @@ -1834,12 +2045,12 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - webdriver@9.27.2: - resolution: {integrity: sha512-m7JrZucyOa+VMojsKrZSIE7lsl2RtLk2VqqOe7aWtlmRnBQs33/AaaHIY8FJNe2NKfM1rRSEv87GP2zjLUzyog==} + webdriver@9.30.0: + resolution: {integrity: sha512-DisY5E8p5zAZyl8pee08p4Vlc91c94Am9oswZaNCgZH5Ewm//FoCZ+tHNppENqooCYjfa/upATbFqGOLuXQkrw==} engines: {node: '>=18.20.0'} - webdriverio@9.27.2: - resolution: {integrity: sha512-kNRTYomUY8ujhPn+eIxru9eQJP1BMmb4JfIdFt8m9mAPxkdNKJScRHSj77/x8yV2a4wKP0lefYfFtK77B+qzfA==} + webdriverio@9.30.0: + resolution: {integrity: sha512-cmV/uSbCvnJ99QejGPVGlzb9MjiSYUts8VjdESnDKvA7JvRMIJK0l807Js7HDK/g6KG7j+D2apsFHGlT7W5UeA==} engines: {node: '>=18.20.0'} peerDependencies: puppeteer-core: '>=22.x || <=24.x' @@ -1896,8 +2107,8 @@ packages: utf-8-validate: optional: true - xml-naming@0.1.0: - resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==} + xml-naming@0.3.0: + resolution: {integrity: sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==} engines: {node: '>=16.0.0'} y18n@5.0.8: @@ -1916,12 +2127,12 @@ packages: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} - yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + yargs@16.2.2: + resolution: {integrity: sha512-Nt9ZJjXTv5R8MHbqby/wXQ6Gi0Bb3TcYZkR1bzuL4yB2OxWPkXknz513gEF0GoA6tn00UpbPvERW8rzCuWCA6w==} engines: {node: '>=10'} - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + yargs@17.7.3: + resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} engines: {node: '>=12'} yauzl@2.10.0: @@ -1939,8 +2150,8 @@ packages: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} - yoctocolors@2.1.2: - resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + yoctocolors@2.2.0: + resolution: {integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==} engines: {node: '>=18'} zip-stream@6.0.1: @@ -1995,81 +2206,159 @@ snapshots: '@esbuild/aix-ppc64@0.28.0': optional: true + '@esbuild/aix-ppc64@0.28.1': + optional: true + '@esbuild/android-arm64@0.28.0': optional: true + '@esbuild/android-arm64@0.28.1': + optional: true + '@esbuild/android-arm@0.28.0': optional: true + '@esbuild/android-arm@0.28.1': + optional: true + '@esbuild/android-x64@0.28.0': optional: true + '@esbuild/android-x64@0.28.1': + optional: true + '@esbuild/darwin-arm64@0.28.0': optional: true + '@esbuild/darwin-arm64@0.28.1': + optional: true + '@esbuild/darwin-x64@0.28.0': optional: true + '@esbuild/darwin-x64@0.28.1': + optional: true + '@esbuild/freebsd-arm64@0.28.0': optional: true + '@esbuild/freebsd-arm64@0.28.1': + optional: true + '@esbuild/freebsd-x64@0.28.0': optional: true + '@esbuild/freebsd-x64@0.28.1': + optional: true + '@esbuild/linux-arm64@0.28.0': optional: true + '@esbuild/linux-arm64@0.28.1': + optional: true + '@esbuild/linux-arm@0.28.0': optional: true + '@esbuild/linux-arm@0.28.1': + optional: true + '@esbuild/linux-ia32@0.28.0': optional: true + '@esbuild/linux-ia32@0.28.1': + optional: true + '@esbuild/linux-loong64@0.28.0': optional: true + '@esbuild/linux-loong64@0.28.1': + optional: true + '@esbuild/linux-mips64el@0.28.0': optional: true + '@esbuild/linux-mips64el@0.28.1': + optional: true + '@esbuild/linux-ppc64@0.28.0': optional: true + '@esbuild/linux-ppc64@0.28.1': + optional: true + '@esbuild/linux-riscv64@0.28.0': optional: true + '@esbuild/linux-riscv64@0.28.1': + optional: true + '@esbuild/linux-s390x@0.28.0': optional: true + '@esbuild/linux-s390x@0.28.1': + optional: true + '@esbuild/linux-x64@0.28.0': optional: true + '@esbuild/linux-x64@0.28.1': + optional: true + '@esbuild/netbsd-arm64@0.28.0': optional: true + '@esbuild/netbsd-arm64@0.28.1': + optional: true + '@esbuild/netbsd-x64@0.28.0': optional: true + '@esbuild/netbsd-x64@0.28.1': + optional: true + '@esbuild/openbsd-arm64@0.28.0': optional: true + '@esbuild/openbsd-arm64@0.28.1': + optional: true + '@esbuild/openbsd-x64@0.28.0': optional: true + '@esbuild/openbsd-x64@0.28.1': + optional: true + '@esbuild/openharmony-arm64@0.28.0': optional: true + '@esbuild/openharmony-arm64@0.28.1': + optional: true + '@esbuild/sunos-x64@0.28.0': optional: true + '@esbuild/sunos-x64@0.28.1': + optional: true + '@esbuild/win32-arm64@0.28.0': optional: true + '@esbuild/win32-arm64@0.28.1': + optional: true + '@esbuild/win32-ia32@0.28.0': optional: true + '@esbuild/win32-ia32@0.28.1': + optional: true + '@esbuild/win32-x64@0.28.0': optional: true + '@esbuild/win32-x64@0.28.1': + optional: true + '@inquirer/ansi@1.0.2': {} '@inquirer/checkbox@4.3.2(@types/node@25.9.2)': @@ -2120,8 +2409,8 @@ snapshots: '@inquirer/external-editor@1.0.3(@types/node@25.9.2)': dependencies: - chardet: 2.1.1 - iconv-lite: 0.7.2 + chardet: 2.2.0 + iconv-lite: 0.7.3 optionalDependencies: '@types/node': 25.9.2 @@ -2235,7 +2524,7 @@ snapshots: '@noble/hashes@2.2.0': {} - '@nodable/entities@2.1.1': {} + '@nodable/entities@3.0.0': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -2244,15 +2533,15 @@ snapshots: dependencies: spacetrim: 0.11.59 - '@puppeteer/browsers@2.13.2': + '@puppeteer/browsers@2.13.2(supports-color@8.1.1)': dependencies: debug: 4.4.3(supports-color@8.1.1) - extract-zip: 2.0.1 + extract-zip: 2.0.1(supports-color@8.1.1) progress: 2.0.3 - proxy-agent: 6.5.0 - semver: 7.8.4 - tar-fs: 3.1.2 - yargs: 17.7.2 + proxy-agent: 6.5.0(supports-color@8.1.1) + semver: 7.8.5 + tar-fs: 3.1.3 + yargs: 17.7.3 transitivePeerDependencies: - bare-abort-controller - bare-buffer @@ -2283,10 +2572,19 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/node@20.19.43': + dependencies: + undici-types: 6.21.0 + '@types/node@25.9.2': dependencies: undici-types: 7.24.6 + '@types/node@25.9.5': + dependencies: + undici-types: 7.24.6 + optional: true + '@types/normalize-package-data@2.4.4': {} '@types/sinonjs__fake-timers@8.1.5': {} @@ -2307,7 +2605,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 25.9.2 + '@types/node': 25.9.5 optional: true '@vitest/pretty-format@2.1.9': @@ -2337,28 +2635,28 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 - '@wdio/cli@9.27.2(@types/node@25.9.2)(expect-webdriverio@5.6.8)': + '@wdio/cli@9.30.0(@types/node@25.9.2)(expect-webdriverio@5.7.0)(supports-color@8.1.1)': dependencies: '@vitest/snapshot': 2.1.9 - '@wdio/config': 9.27.2 - '@wdio/globals': 9.27.2(expect-webdriverio@5.6.8)(webdriverio@9.27.2) - '@wdio/logger': 9.18.0 - '@wdio/protocols': 9.27.2 - '@wdio/types': 9.27.2 - '@wdio/utils': 9.27.2 + '@wdio/config': 9.30.0(supports-color@8.1.1) + '@wdio/globals': 9.29.1(expect-webdriverio@5.7.0)(webdriverio@9.30.0(supports-color@8.1.1)) + '@wdio/logger': 9.29.1 + '@wdio/protocols': 9.30.0 + '@wdio/types': 9.29.1 + '@wdio/utils': 9.30.0(supports-color@8.1.1) async-exit-hook: 2.0.1 chalk: 5.6.2 chokidar: 4.0.3 - create-wdio: 9.27.2(@types/node@25.9.2) + create-wdio: 9.30.0(@types/node@25.9.2) dotenv: 17.4.2 import-meta-resolve: 4.2.0 lodash.flattendeep: 4.4.0 lodash.pickby: 4.6.0 lodash.union: 4.6.0 read-pkg-up: 10.1.0 - tsx: 4.22.4 - webdriverio: 9.27.2 - yargs: 17.7.2 + tsx: 4.23.1 + webdriverio: 9.30.0(supports-color@8.1.1) + yargs: 17.7.3 transitivePeerDependencies: - '@types/node' - bare-abort-controller @@ -2370,11 +2668,11 @@ snapshots: - supports-color - utf-8-validate - '@wdio/config@9.27.2': + '@wdio/config@9.30.0(supports-color@8.1.1)': dependencies: - '@wdio/logger': 9.18.0 - '@wdio/types': 9.27.2 - '@wdio/utils': 9.27.2 + '@wdio/logger': 9.29.1 + '@wdio/types': 9.29.1 + '@wdio/utils': 9.30.0(supports-color@8.1.1) deepmerge-ts: 7.1.5 glob: 10.5.0 import-meta-resolve: 4.2.0 @@ -2385,27 +2683,27 @@ snapshots: - react-native-b4a - supports-color - '@wdio/dot-reporter@9.27.2': + '@wdio/dot-reporter@9.29.1': dependencies: - '@wdio/reporter': 9.27.2 - '@wdio/types': 9.27.2 + '@wdio/reporter': 9.29.1 + '@wdio/types': 9.29.1 chalk: 5.6.2 - '@wdio/globals@9.27.2(expect-webdriverio@5.6.8)(webdriverio@9.27.2)': + '@wdio/globals@9.29.1(expect-webdriverio@5.7.0)(webdriverio@9.30.0(supports-color@8.1.1))': dependencies: - expect-webdriverio: 5.6.8(@wdio/globals@9.27.2)(@wdio/logger@9.18.0)(webdriverio@9.27.2) - webdriverio: 9.27.2 + expect-webdriverio: 5.7.0(@wdio/globals@9.29.1)(@wdio/logger@9.29.1)(webdriverio@9.30.0(supports-color@8.1.1)) + webdriverio: 9.30.0(supports-color@8.1.1) - '@wdio/local-runner@9.27.2(@wdio/globals@9.27.2)(webdriverio@9.27.2)': + '@wdio/local-runner@9.30.0(@wdio/globals@9.29.1)(supports-color@8.1.1)(webdriverio@9.30.0(supports-color@8.1.1))': dependencies: - '@types/node': 20.19.42 - '@wdio/logger': 9.18.0 + '@types/node': 20.19.43 + '@wdio/logger': 9.29.1 '@wdio/repl': 9.16.2 - '@wdio/runner': 9.27.2(expect-webdriverio@5.6.8)(webdriverio@9.27.2) - '@wdio/types': 9.27.2 - '@wdio/xvfb': 9.27.2 + '@wdio/runner': 9.30.0(expect-webdriverio@5.7.0)(supports-color@8.1.1)(webdriverio@9.30.0(supports-color@8.1.1)) + '@wdio/types': 9.29.1 + '@wdio/xvfb': 9.30.0 exit-hook: 4.0.0 - expect-webdriverio: 5.6.8(@wdio/globals@9.27.2)(@wdio/logger@9.18.0)(webdriverio@9.27.2) + expect-webdriverio: 5.7.0(@wdio/globals@9.29.1)(@wdio/logger@9.29.1)(webdriverio@9.30.0(supports-color@8.1.1)) split2: 4.2.0 stream-buffers: 3.0.3 transitivePeerDependencies: @@ -2418,7 +2716,7 @@ snapshots: - utf-8-validate - webdriverio - '@wdio/logger@9.18.0': + '@wdio/logger@9.29.1': dependencies: chalk: 5.6.2 loglevel: 1.9.2 @@ -2426,13 +2724,13 @@ snapshots: safe-regex2: 5.1.1 strip-ansi: 7.2.0 - '@wdio/mocha-framework@9.27.2': + '@wdio/mocha-framework@9.30.0(supports-color@8.1.1)': dependencies: '@types/mocha': 10.0.10 - '@types/node': 20.19.42 - '@wdio/logger': 9.18.0 - '@wdio/types': 9.27.2 - '@wdio/utils': 9.27.2 + '@types/node': 20.19.43 + '@wdio/logger': 9.29.1 + '@wdio/types': 9.29.1 + '@wdio/utils': 9.30.0(supports-color@8.1.1) mocha: 10.8.2 transitivePeerDependencies: - bare-abort-controller @@ -2440,33 +2738,33 @@ snapshots: - react-native-b4a - supports-color - '@wdio/protocols@9.27.2': {} + '@wdio/protocols@9.30.0': {} '@wdio/repl@9.16.2': dependencies: - '@types/node': 20.19.42 + '@types/node': 20.19.43 - '@wdio/reporter@9.27.2': + '@wdio/reporter@9.29.1': dependencies: - '@types/node': 20.19.42 - '@wdio/logger': 9.18.0 - '@wdio/types': 9.27.2 + '@types/node': 20.19.43 + '@wdio/logger': 9.29.1 + '@wdio/types': 9.29.1 diff: 8.0.4 object-inspect: 1.13.4 - '@wdio/runner@9.27.2(expect-webdriverio@5.6.8)(webdriverio@9.27.2)': + '@wdio/runner@9.30.0(expect-webdriverio@5.7.0)(supports-color@8.1.1)(webdriverio@9.30.0(supports-color@8.1.1))': dependencies: - '@types/node': 20.19.42 - '@wdio/config': 9.27.2 - '@wdio/dot-reporter': 9.27.2 - '@wdio/globals': 9.27.2(expect-webdriverio@5.6.8)(webdriverio@9.27.2) - '@wdio/logger': 9.18.0 - '@wdio/types': 9.27.2 - '@wdio/utils': 9.27.2 + '@types/node': 20.19.43 + '@wdio/config': 9.30.0(supports-color@8.1.1) + '@wdio/dot-reporter': 9.29.1 + '@wdio/globals': 9.29.1(expect-webdriverio@5.7.0)(webdriverio@9.30.0(supports-color@8.1.1)) + '@wdio/logger': 9.29.1 + '@wdio/types': 9.29.1 + '@wdio/utils': 9.30.0(supports-color@8.1.1) deepmerge-ts: 7.1.5 - expect-webdriverio: 5.6.8(@wdio/globals@9.27.2)(@wdio/logger@9.18.0)(webdriverio@9.27.2) - webdriver: 9.27.2 - webdriverio: 9.27.2 + expect-webdriverio: 5.7.0(@wdio/globals@9.29.1)(@wdio/logger@9.29.1)(webdriverio@9.30.0(supports-color@8.1.1)) + webdriver: 9.30.0(supports-color@8.1.1) + webdriverio: 9.30.0(supports-color@8.1.1) transitivePeerDependencies: - bare-abort-controller - bare-buffer @@ -2475,45 +2773,45 @@ snapshots: - supports-color - utf-8-validate - '@wdio/spec-reporter@9.27.2': + '@wdio/spec-reporter@9.29.1': dependencies: - '@wdio/reporter': 9.27.2 - '@wdio/types': 9.27.2 + '@wdio/reporter': 9.29.1 + '@wdio/types': 9.29.1 chalk: 5.6.2 easy-table: 1.2.0 pretty-ms: 9.3.0 - '@wdio/types@9.27.2': + '@wdio/types@9.29.1': dependencies: - '@types/node': 20.19.42 + '@types/node': 20.19.43 - '@wdio/utils@9.27.2': + '@wdio/utils@9.30.0(supports-color@8.1.1)': dependencies: - '@puppeteer/browsers': 2.13.2 - '@wdio/logger': 9.18.0 - '@wdio/types': 9.27.2 + '@puppeteer/browsers': 2.13.2(supports-color@8.1.1) + '@wdio/logger': 9.29.1 + '@wdio/types': 9.29.1 decamelize: 6.0.1 deepmerge-ts: 7.1.5 - edgedriver: 6.3.0 - geckodriver: 6.1.0 + edgedriver: 6.3.0(supports-color@8.1.1) + geckodriver: 6.1.1(supports-color@8.1.1) get-port: 7.2.0 import-meta-resolve: 4.2.0 locate-app: 2.5.0 mitt: 3.0.1 safaridriver: 1.0.1 split2: 4.2.0 - wait-port: 1.1.0 + wait-port: 1.1.0(supports-color@8.1.1) transitivePeerDependencies: - bare-abort-controller - bare-buffer - react-native-b4a - supports-color - '@wdio/xvfb@9.27.2': + '@wdio/xvfb@9.30.0': dependencies: - '@wdio/logger': 9.18.0 + '@wdio/logger': 9.29.1 - '@zip.js/zip.js@2.8.26': {} + '@zip.js/zip.js@2.8.34': {} abort-controller@3.0.0: dependencies: @@ -2540,7 +2838,7 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.2 - anynum@1.0.0: {} + anynum@1.0.1: {} archiver-utils@5.0.2: dependencies: @@ -2595,12 +2893,27 @@ snapshots: - bare-abort-controller - react-native-b4a + bare-fs@4.7.4: + dependencies: + bare-events: 2.9.1 + bare-path: 3.1.1 + bare-stream: 2.13.3(bare-events@2.9.1) + bare-url: 2.4.6 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + bare-os@3.9.1: {} bare-path@3.0.1: dependencies: bare-os: 3.9.1 + bare-path@3.1.1: + optional: true + bare-stream@2.13.1(bare-events@2.9.1): dependencies: streamx: 2.27.0 @@ -2610,10 +2923,26 @@ snapshots: transitivePeerDependencies: - react-native-b4a + bare-stream@2.13.3(bare-events@2.9.1): + dependencies: + b4a: 1.8.1 + streamx: 2.28.0 + teex: 1.0.1 + optionalDependencies: + bare-events: 2.9.1 + transitivePeerDependencies: + - react-native-b4a + optional: true + bare-url@2.4.5: dependencies: bare-path: 3.0.1 + bare-url@2.4.6: + dependencies: + bare-path: 3.1.1 + optional: true + base64-js@1.5.1: {} basic-ftp@5.3.1: {} @@ -2622,12 +2951,12 @@ snapshots: boolbase@1.0.0: {} - brace-expansion@1.1.15: + brace-expansion@1.1.16: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.1.1: + brace-expansion@2.1.2: dependencies: balanced-match: 1.0.2 @@ -2655,7 +2984,7 @@ snapshots: chalk@5.6.2: {} - chardet@2.1.1: {} + chardet@2.2.0: {} cheerio-select@2.1.0: dependencies: @@ -2746,7 +3075,7 @@ snapshots: crc-32: 1.2.2 readable-stream: 4.7.0 - create-wdio@9.27.2(@types/node@25.9.2): + create-wdio@9.30.0(@types/node@25.9.2): dependencies: chalk: 5.6.2 commander: 14.0.3 @@ -2758,9 +3087,9 @@ snapshots: normalize-package-data: 7.0.1 read-pkg-up: 10.1.0 recursive-readdir: 2.2.3 - semver: 7.8.4 + semver: 7.8.5 type-fest: 4.41.0 - yargs: 17.7.2 + yargs: 17.7.3 transitivePeerDependencies: - '@types/node' @@ -2848,15 +3177,15 @@ snapshots: '@types/which': 2.0.2 which: 2.0.2 - edgedriver@6.3.0: + edgedriver@6.3.0(supports-color@8.1.1): dependencies: - '@wdio/logger': 9.18.0 - '@zip.js/zip.js': 2.8.26 + '@wdio/logger': 9.29.1 + '@zip.js/zip.js': 2.8.34 decamelize: 6.0.1 edge-paths: 3.0.5 - fast-xml-parser: 5.8.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 + fast-xml-parser: 5.10.1 + http-proxy-agent: 7.0.2(supports-color@8.1.1) + https-proxy-agent: 7.0.6(supports-color@8.1.1) which: 6.0.1 transitivePeerDependencies: - supports-color @@ -2917,6 +3246,35 @@ snapshots: '@esbuild/win32-ia32': 0.28.0 '@esbuild/win32-x64': 0.28.0 + esbuild@0.28.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 + escalade@3.2.0: {} escape-string-regexp@2.0.0: {} @@ -2960,19 +3318,19 @@ snapshots: pretty-ms: 9.3.0 signal-exit: 4.1.0 strip-final-newline: 4.0.0 - yoctocolors: 2.1.2 + yoctocolors: 2.2.0 exit-hook@4.0.0: {} - expect-webdriverio@5.6.8(@wdio/globals@9.27.2)(@wdio/logger@9.18.0)(webdriverio@9.27.2): + expect-webdriverio@5.7.0(@wdio/globals@9.29.1)(@wdio/logger@9.29.1)(webdriverio@9.30.0(supports-color@8.1.1)): dependencies: '@vitest/snapshot': 4.1.8 - '@wdio/globals': 9.27.2(expect-webdriverio@5.6.8)(webdriverio@9.27.2) - '@wdio/logger': 9.18.0 + '@wdio/globals': 9.29.1(expect-webdriverio@5.7.0)(webdriverio@9.30.0(supports-color@8.1.1)) + '@wdio/logger': 9.29.1 deep-eql: 5.0.2 expect: 30.4.1 jest-matcher-utils: 30.4.1 - webdriverio: 9.27.2 + webdriverio: 9.30.0(supports-color@8.1.1) expect@30.4.1: dependencies: @@ -2983,7 +3341,7 @@ snapshots: jest-mock: 30.4.1 jest-util: 30.4.1 - extract-zip@2.0.1: + extract-zip@2.0.1(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) get-stream: 5.2.0 @@ -2997,18 +3355,19 @@ snapshots: fast-fifo@1.3.2: {} - fast-xml-builder@1.2.0: + fast-xml-builder@1.3.0: dependencies: - path-expression-matcher: 1.5.0 - xml-naming: 0.1.0 + path-expression-matcher: 1.6.2 + xml-naming: 0.3.0 - fast-xml-parser@5.8.0: + fast-xml-parser@5.10.1: dependencies: - '@nodable/entities': 2.1.1 - fast-xml-builder: 1.2.0 - path-expression-matcher: 1.5.0 - strnum: 2.4.0 - xml-naming: 0.1.0 + '@nodable/entities': 3.0.0 + fast-xml-builder: 1.3.0 + is-unsafe: 2.0.0 + path-expression-matcher: 1.6.2 + strnum: 2.4.1 + xml-naming: 0.3.0 fd-slicer@1.1.0: dependencies: @@ -3048,14 +3407,14 @@ snapshots: fsevents@2.3.3: optional: true - geckodriver@6.1.0: + geckodriver@6.1.1(supports-color@8.1.1): dependencies: - '@wdio/logger': 9.18.0 - '@zip.js/zip.js': 2.8.26 + '@wdio/logger': 9.29.1 + '@zip.js/zip.js': 2.8.34 decamelize: 6.0.1 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - modern-tar: 0.7.6 + http-proxy-agent: 7.0.2(supports-color@8.1.1) + https-proxy-agent: 7.0.6(supports-color@8.1.1) + modern-tar: 0.7.7 transitivePeerDependencies: - supports-color @@ -3072,7 +3431,7 @@ snapshots: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 - get-uri@6.0.5: + get-uri@6.0.5(supports-color@8.1.1): dependencies: basic-ftp: 5.3.1 data-uri-to-buffer: 6.0.2 @@ -3126,14 +3485,14 @@ snapshots: domutils: 3.2.2 entities: 7.0.1 - http-proxy-agent@7.0.2: + http-proxy-agent@7.0.2(supports-color@8.1.1): dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.6: + https-proxy-agent@7.0.6(supports-color@8.1.1): dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) @@ -3146,7 +3505,7 @@ snapshots: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.7.2: + iconv-lite@0.7.3: dependencies: safer-buffer: 2.1.2 @@ -3175,7 +3534,7 @@ snapshots: optionalDependencies: '@types/node': 25.9.2 - ip-address@10.2.0: {} + ip-address@10.3.1: {} is-arrayish@0.2.1: {} @@ -3205,6 +3564,8 @@ snapshots: is-unicode-supported@2.1.0: {} + is-unsafe@2.0.0: {} + isarray@1.0.0: {} isexe@2.0.0: {} @@ -3271,7 +3632,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.2.0: + js-yaml@4.3.0: dependencies: argparse: 2.0.1 @@ -3339,15 +3700,15 @@ snapshots: minimatch@3.1.5: dependencies: - brace-expansion: 1.1.15 + brace-expansion: 1.1.16 minimatch@5.1.9: dependencies: - brace-expansion: 2.1.1 + brace-expansion: 2.1.2 minimatch@9.0.9: dependencies: - brace-expansion: 2.1.1 + brace-expansion: 2.1.2 minipass@7.1.3: {} @@ -3364,7 +3725,7 @@ snapshots: find-up: 5.0.0 glob: 8.1.0 he: 1.2.0 - js-yaml: 4.2.0 + js-yaml: 4.3.0 log-symbols: 4.1.0 minimatch: 5.1.9 ms: 2.1.3 @@ -3372,11 +3733,11 @@ snapshots: strip-json-comments: 3.1.1 supports-color: 8.1.1 workerpool: 6.5.1 - yargs: 16.2.0 + yargs: 16.2.2 yargs-parser: 20.2.9 yargs-unparser: 2.0.0 - modern-tar@0.7.6: {} + modern-tar@0.7.7: {} ms@2.1.3: {} @@ -3387,13 +3748,13 @@ snapshots: normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.8.4 + semver: 7.8.5 validate-npm-package-license: 3.0.4 normalize-package-data@7.0.1: dependencies: hosted-git-info: 8.1.0 - semver: 7.8.4 + semver: 7.8.5 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -3433,16 +3794,16 @@ snapshots: dependencies: p-limit: 4.0.0 - pac-proxy-agent@7.2.0: + pac-proxy-agent@7.2.0(supports-color@8.1.1): dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) - get-uri: 6.0.5 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 + get-uri: 6.0.5(supports-color@8.1.1) + http-proxy-agent: 7.0.2(supports-color@8.1.1) + https-proxy-agent: 7.0.6(supports-color@8.1.1) pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5 + socks-proxy-agent: 8.0.5(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -3482,7 +3843,7 @@ snapshots: path-exists@5.0.0: {} - path-expression-matcher@1.5.0: {} + path-expression-matcher@1.6.2: {} path-key@3.1.1: {} @@ -3522,16 +3883,16 @@ snapshots: progress@2.0.3: {} - proxy-agent@6.5.0: + proxy-agent@6.5.0(supports-color@8.1.1): dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 + http-proxy-agent: 7.0.2(supports-color@8.1.1) + https-proxy-agent: 7.0.6(supports-color@8.1.1) lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 + pac-proxy-agent: 7.2.0(supports-color@8.1.1) proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5 + socks-proxy-agent: 8.0.5(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -3625,7 +3986,7 @@ snapshots: safer-buffer@2.1.2: {} - semver@7.8.4: {} + semver@7.8.5: {} serialize-error@12.0.0: dependencies: @@ -3649,7 +4010,7 @@ snapshots: smart-buffer@4.2.0: {} - socks-proxy-agent@8.0.5: + socks-proxy-agent@8.0.5(supports-color@8.1.1): dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) @@ -3659,7 +4020,7 @@ snapshots: socks@2.8.9: dependencies: - ip-address: 10.2.0 + ip-address: 10.3.1 smart-buffer: 4.2.0 source-map@0.6.1: @@ -3698,6 +4059,16 @@ snapshots: - bare-abort-controller - react-native-b4a + streamx@2.28.0: + dependencies: + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -3730,9 +4101,9 @@ snapshots: strip-json-comments@3.1.1: {} - strnum@2.4.0: + strnum@2.4.1: dependencies: - anynum: 1.0.0 + anynum: 1.0.1 supports-color@7.2.0: dependencies: @@ -3742,13 +4113,13 @@ snapshots: dependencies: has-flag: 4.0.0 - tar-fs@3.1.2: + tar-fs@3.1.3: dependencies: pump: 3.0.4 tar-stream: 3.2.0 optionalDependencies: - bare-fs: 4.7.2 - bare-path: 3.0.1 + bare-fs: 4.7.4 + bare-path: 3.1.1 transitivePeerDependencies: - bare-abort-controller - bare-buffer @@ -3794,6 +4165,12 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + tsx@4.23.1: + dependencies: + esbuild: 0.28.1 + optionalDependencies: + fsevents: 2.3.3 + type-fest@3.13.1: {} type-fest@4.26.0: {} @@ -3806,7 +4183,7 @@ snapshots: undici-types@7.24.6: {} - undici@6.26.0: {} + undici@6.28.0: {} undici@7.27.2: {} @@ -3823,7 +4200,7 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - wait-port@1.1.0: + wait-port@1.1.0(supports-color@8.1.1): dependencies: chalk: 4.1.2 commander: 9.5.0 @@ -3836,18 +4213,18 @@ snapshots: defaults: 1.0.4 optional: true - webdriver@9.27.2: + webdriver@9.30.0(supports-color@8.1.1): dependencies: '@types/node': 20.19.42 '@types/ws': 8.18.1 - '@wdio/config': 9.27.2 - '@wdio/logger': 9.18.0 - '@wdio/protocols': 9.27.2 - '@wdio/types': 9.27.2 - '@wdio/utils': 9.27.2 + '@wdio/config': 9.30.0(supports-color@8.1.1) + '@wdio/logger': 9.29.1 + '@wdio/protocols': 9.30.0 + '@wdio/types': 9.29.1 + '@wdio/utils': 9.30.0(supports-color@8.1.1) deepmerge-ts: 7.1.5 - https-proxy-agent: 7.0.6 - undici: 6.26.0 + https-proxy-agent: 7.0.6(supports-color@8.1.1) + undici: 6.28.0 ws: 8.21.0 transitivePeerDependencies: - bare-abort-controller @@ -3857,16 +4234,16 @@ snapshots: - supports-color - utf-8-validate - webdriverio@9.27.2: + webdriverio@9.30.0(supports-color@8.1.1): dependencies: '@types/node': 20.19.42 '@types/sinonjs__fake-timers': 8.1.5 - '@wdio/config': 9.27.2 - '@wdio/logger': 9.18.0 - '@wdio/protocols': 9.27.2 + '@wdio/config': 9.30.0(supports-color@8.1.1) + '@wdio/logger': 9.29.1 + '@wdio/protocols': 9.30.0 '@wdio/repl': 9.16.2 - '@wdio/types': 9.27.2 - '@wdio/utils': 9.27.2 + '@wdio/types': 9.29.1 + '@wdio/utils': 9.30.0(supports-color@8.1.1) archiver: 7.0.1 aria-query: 5.3.2 cheerio: 1.2.0 @@ -3883,7 +4260,7 @@ snapshots: rgb2hex: 0.2.5 serialize-error: 12.0.0 urlpattern-polyfill: 10.1.0 - webdriver: 9.27.2 + webdriver: 9.30.0(supports-color@8.1.1) transitivePeerDependencies: - bare-abort-controller - bare-buffer @@ -3930,7 +4307,7 @@ snapshots: ws@8.21.0: {} - xml-naming@0.1.0: {} + xml-naming@0.3.0: {} y18n@5.0.8: {} @@ -3945,7 +4322,7 @@ snapshots: flat: 5.0.2 is-plain-obj: 2.1.0 - yargs@16.2.0: + yargs@16.2.2: dependencies: cliui: 7.0.4 escalade: 3.2.0 @@ -3955,7 +4332,7 @@ snapshots: y18n: 5.0.8 yargs-parser: 20.2.9 - yargs@17.7.2: + yargs@17.7.3: dependencies: cliui: 8.0.1 escalade: 3.2.0 @@ -3976,7 +4353,7 @@ snapshots: yoctocolors-cjs@2.1.3: {} - yoctocolors@2.1.2: {} + yoctocolors@2.2.0: {} zip-stream@6.0.1: dependencies: diff --git a/e2e/scripts/provision.mjs b/e2e/scripts/provision.mjs index 98c0763db..07d0011d8 100644 --- a/e2e/scripts/provision.mjs +++ b/e2e/scripts/provision.mjs @@ -1,121 +1,121 @@ #!/usr/bin/env node -import fs from 'node:fs'; -import path from 'node:path'; +import fs from "node:fs"; +import path from "node:path"; -const envFile = path.resolve(import.meta.dirname, '../.env'); +const envFile = path.resolve(import.meta.dirname, "../.env"); if (fs.existsSync(envFile)) { - process.loadEnvFile(envFile); + process.loadEnvFile(envFile); } -const CORE_URL = requireEnv('CORE_URL'); -const ADMIN_USER = process.env.CORE_ADMIN_USER ?? 'admin'; -const ADMIN_PASSWORD = requireEnv('CORE_ADMIN_PASSWORD'); +const CORE_URL = requireEnv("CORE_URL"); +const ADMIN_USER = process.env.CORE_ADMIN_USER ?? "admin"; +const ADMIN_PASSWORD = requireEnv("CORE_ADMIN_PASSWORD"); function requireEnv(name) { - const value = process.env[name]; - if (!value) { - console.error(`Missing required environment variable ${name}.`); - process.exit(1); - } - return value; + const value = process.env[name]; + if (!value) { + console.error(`Missing required environment variable ${name}.`); + process.exit(1); + } + return value; } const NETWORK = { - name: process.env.NETWORK_NAME ?? 'e2e', - address: process.env.NETWORK_ADDRESS ?? '10.10.10.1/24', - endpoint: requireEnv('NETWORK_ENDPOINT'), - port: Number(process.env.NETWORK_PORT ?? 50051), - allowed_ips: process.env.NETWORK_ALLOWED_IPS ?? '10.10.10.0/24', - dns: null, - mtu: 1420, - fwmark: 0, - allow_all_groups: true, - allowed_groups: [], - keepalive_interval: 25, - peer_disconnect_threshold: 300, - acl_enabled: false, - acl_default_allow: false, - location_mfa_mode: 'disabled', - service_location_mode: 'disabled', + name: process.env.NETWORK_NAME ?? "e2e", + address: process.env.NETWORK_ADDRESS ?? "10.10.10.1/24", + endpoint: requireEnv("NETWORK_ENDPOINT"), + port: Number(process.env.NETWORK_PORT ?? 50051), + allowed_ips: process.env.NETWORK_ALLOWED_IPS ?? "10.10.10.0/24", + dns: null, + mtu: 1420, + fwmark: 0, + allow_all_groups: true, + allowed_groups: [], + keepalive_interval: 25, + peer_disconnect_threshold: 300, + acl_enabled: false, + acl_default_allow: false, + location_mfa_mode: "disabled", + service_location_mode: "disabled", }; async function waitForCore() { - const deadline = Date.now() + 120_000; - while (Date.now() < deadline) { - try { - const res = await fetch(`${CORE_URL}/api/v1/health`); - if (res.status === 200) return; - } catch { - // not up yet - } - await new Promise((resolve) => setTimeout(resolve, 2000)); - } - throw new Error(`Core did not become healthy at ${CORE_URL} within 120s`); + const deadline = Date.now() + 120_000; + while (Date.now() < deadline) { + try { + const res = await fetch(`${CORE_URL}/api/v1/health`); + if (res.status === 200) return; + } catch { + // not up yet + } + await new Promise((resolve) => setTimeout(resolve, 2000)); + } + throw new Error(`Core did not become healthy at ${CORE_URL} within 120s`); } -let cookie = ''; +let cookie = ""; async function api(method, apiPath, body) { - const res = await fetch(`${CORE_URL}${apiPath}`, { - method, - redirect: 'manual', - headers: { - 'Content-Type': 'application/json', - ...(cookie ? { Cookie: cookie } : {}), - }, - body: body !== undefined ? JSON.stringify(body) : undefined, - }); - if (res.status >= 300 && res.status < 400) { - throw new Error( - `${method} ${apiPath} redirected (${res.status}) to ${res.headers.get('location')} — check CORE_URL`, - ); - } - if (!res.ok) { - const allow = res.headers.get('allow'); - throw new Error( - `${method} ${apiPath} failed: ${res.status}` + - (allow ? ` (Allow: ${allow})` : '') + - ` ${await res.text()}`, - ); - } - return res; + const res = await fetch(`${CORE_URL}${apiPath}`, { + method, + redirect: "manual", + headers: { + "Content-Type": "application/json", + ...(cookie ? { Cookie: cookie } : {}), + }, + body: body !== undefined ? JSON.stringify(body) : undefined, + }); + if (res.status >= 300 && res.status < 400) { + throw new Error( + `${method} ${apiPath} redirected (${res.status}) to ${res.headers.get("location")} — check CORE_URL`, + ); + } + if (!res.ok) { + const allow = res.headers.get("allow"); + throw new Error( + `${method} ${apiPath} failed: ${res.status}` + + (allow ? ` (Allow: ${allow})` : "") + + ` ${await res.text()}`, + ); + } + return res; } console.log(`Waiting for core at ${CORE_URL}...`); await waitForCore(); -console.log('Logging in as admin...'); +console.log("Logging in as admin..."); let loginRes; try { - loginRes = await api('POST', '/api/v1/auth', { - username: ADMIN_USER, - password: ADMIN_PASSWORD, - }); + loginRes = await api("POST", "/api/v1/auth", { + username: ADMIN_USER, + password: ADMIN_PASSWORD, + }); } catch (error) { - if (String(error).includes('405')) { - console.error(`\nCore at ${CORE_URL} is still in initial-setup mode`); - process.exit(1); - } - throw error; + if (String(error).includes("405")) { + console.error(`\nCore at ${CORE_URL} is still in initial-setup mode`); + process.exit(1); + } + throw error; } -const setCookie = loginRes.headers.get('set-cookie'); -if (!setCookie) throw new Error('Login did not return a session cookie'); -cookie = setCookie.split(';')[0]; +const setCookie = loginRes.headers.get("set-cookie"); +if (!setCookie) throw new Error("Login did not return a session cookie"); +cookie = setCookie.split(";")[0]; -const existing = await (await api('GET', '/api/v1/network')).json(); +const existing = await (await api("GET", "/api/v1/network")).json(); let network = existing.find((n) => n.name === NETWORK.name); if (network) { - console.log(`Network "${NETWORK.name}" already exists with id ${network.id}`); + console.log(`Network "${NETWORK.name}" already exists with id ${network.id}`); } else { - network = await (await api('POST', '/api/v1/network', NETWORK)).json(); - console.log(`Network created with id ${network.id}`); + network = await (await api("POST", "/api/v1/network", NETWORK)).json(); + console.log(`Network created with id ${network.id}`); } const gateways = await ( - await api('GET', `/api/v1/network/${network.id}/gateways`) + await api("GET", `/api/v1/network/${network.id}/gateways`) ).json(); if (gateways.length === 0) { - process.exit(1); + process.exit(1); } console.log(`Gateway connected: ${gateways[0].name}`); diff --git a/e2e/tests/enrollment.spec.ts b/e2e/tests/enrollment.spec.ts index 69a75fadb..7bb5787e2 100644 --- a/e2e/tests/enrollment.spec.ts +++ b/e2e/tests/enrollment.spec.ts @@ -1,73 +1,73 @@ -import { $, expect } from '@wdio/globals'; -import { resetInstances } from '../helpers/client.js'; +import { $, expect } from "@wdio/globals"; +import { resetInstances } from "../helpers/client.js"; import { - connectAndPing, - disconnect, - FULL_MFA_VIEW, - TRAY_MFA_VIEW, -} from '../helpers/connection.js'; + connectAndPing, + disconnect, + FULL_MFA_VIEW, + TRAY_MFA_VIEW, +} from "../helpers/connection.js"; import { - type CoreApi, - type EnrollmentFixture, - type LocationMfaMode, - loggedInCoreApi, -} from '../helpers/coreApi.js'; + type CoreApi, + type EnrollmentFixture, + type LocationMfaMode, + loggedInCoreApi, +} from "../helpers/coreApi.js"; import { - addInstance, - configureTotp, - finishEnrollment, - setPassword, -} from '../helpers/enrollment.js'; -import { switchToTrayView } from '../helpers/windows.js'; + addInstance, + configureTotp, + finishEnrollment, + setPassword, +} from "../helpers/enrollment.js"; +import { switchToTrayView } from "../helpers/windows.js"; -describe('enrollment', () => { - let core: CoreApi; - let networkId: number; - let previousMfaMode: LocationMfaMode; - let fixture: EnrollmentFixture; +describe("enrollment", () => { + let core: CoreApi; + let networkId: number; + let previousMfaMode: LocationMfaMode; + let fixture: EnrollmentFixture; - beforeEach(async () => { - core = await loggedInCoreApi(); - networkId = (await core.listNetworks())[0].id; - }); + beforeEach(async () => { + core = await loggedInCoreApi(); + networkId = (await core.listNetworks())[0].id; + }); - afterEach(async () => { - await core.setLocationMfaMode(networkId, previousMfaMode); - await resetInstances(); - if (fixture?.ephemeral) { - await core.deleteUser(fixture.username); - } - }); + afterEach(async () => { + await core.setLocationMfaMode(networkId, previousMfaMode); + await resetInstances(); + if (fixture?.ephemeral) { + await core.deleteUser(fixture.username); + } + }); - it('enrolls a user without MFA and connects from the full and tray views', async () => { - previousMfaMode = await core.setLocationMfaMode(networkId, 'disabled'); - fixture = await core.createEnrollmentFixture(); + it("enrolls a user without MFA and connects from the full and tray views", async () => { + previousMfaMode = await core.setLocationMfaMode(networkId, "disabled"); + fixture = await core.createEnrollmentFixture(); - await addInstance(fixture); - await setPassword(); - await expect($('#mfa-configuration-step')).not.toBeDisplayed(); - await finishEnrollment(); + await addInstance(fixture); + await setPassword(); + await expect($("#mfa-configuration-step")).not.toBeDisplayed(); + await finishEnrollment(); - await connectAndPing(FULL_MFA_VIEW); - await disconnect(); + await connectAndPing(FULL_MFA_VIEW); + await disconnect(); - await switchToTrayView(); - await connectAndPing(TRAY_MFA_VIEW); - }); + await switchToTrayView(); + await connectAndPing(TRAY_MFA_VIEW); + }); - it('enrolls a user with TOTP MFA and connects from the full and tray views', async () => { - previousMfaMode = await core.setLocationMfaMode(networkId, 'internal'); - fixture = await core.createEnrollmentFixture(); + it("enrolls a user with TOTP MFA and connects from the full and tray views", async () => { + previousMfaMode = await core.setLocationMfaMode(networkId, "internal"); + fixture = await core.createEnrollmentFixture(); - await addInstance(fixture); - await setPassword(); - const secret = await configureTotp(); - await finishEnrollment(); + await addInstance(fixture); + await setPassword(); + const secret = await configureTotp(); + await finishEnrollment(); - await connectAndPing(FULL_MFA_VIEW, secret); - await disconnect(); + await connectAndPing(FULL_MFA_VIEW, secret); + await disconnect(); - await switchToTrayView(); - await connectAndPing(TRAY_MFA_VIEW, secret); - }); + await switchToTrayView(); + await connectAndPing(TRAY_MFA_VIEW, secret); + }); }); diff --git a/e2e/tests/logs.spec.ts b/e2e/tests/logs.spec.ts index 020359d49..f64648989 100644 --- a/e2e/tests/logs.spec.ts +++ b/e2e/tests/logs.spec.ts @@ -1,38 +1,42 @@ -import { $, browser, expect } from '@wdio/globals'; -import { readClipboard } from '../helpers/clipboard.js'; -import { switchToFullView } from '../helpers/windows.js'; +import { $, browser, expect } from "@wdio/globals"; +import { readClipboard } from "../helpers/clipboard.js"; +import { switchToFullView } from "../helpers/windows.js"; const openActionsMenu = async () => { - const actions = $('#log-page-view').$('button=Actions'); - await actions.waitForClickable(); - await actions.click(); + const actions = $("#log-page-view").$("button=Actions"); + await actions.waitForClickable(); + await actions.click(); }; -describe('logs', () => { - beforeEach(async () => { - await switchToFullView(); - const logLink = $('a[href="/full/log"]'); - await logLink.waitForClickable(); - await logLink.click(); - await expect($('#log-page-view')).toBeDisplayed(); - await $('#log-page-view .log-container p').waitForExist({ timeout: 15_000 }); - }); +describe("logs", () => { + beforeEach(async () => { + await switchToFullView(); + const logLink = $('a[href="/full/log"]'); + await logLink.waitForClickable(); + await logLink.click(); + await expect($("#log-page-view")).toBeDisplayed(); + await $("#log-page-view .log-container p").waitForExist({ + timeout: 15_000, + }); + }); - it('copies logs to the clipboard', async () => { - const firstLine = $('#log-page-view .log-container p'); - const sample = ((await firstLine.getProperty('textContent')) as string).trim(); - await openActionsMenu(); - const copy = $('.menu-item*=Copy to Clipboard'); - await copy.waitForClickable(); - await copy.click(); - await browser.waitUntil(() => readClipboard().includes(sample), { - timeout: 10_000, - timeoutMsg: 'Clipboard does not contain the logs after copying', - }); - }); + it("copies logs to the clipboard", async () => { + const firstLine = $("#log-page-view .log-container p"); + const sample = ( + (await firstLine.getProperty("textContent")) as string + ).trim(); + await openActionsMenu(); + const copy = $(".menu-item*=Copy to Clipboard"); + await copy.waitForClickable(); + await copy.click(); + await browser.waitUntil(() => readClipboard().includes(sample), { + timeout: 10_000, + timeoutMsg: "Clipboard does not contain the logs after copying", + }); + }); - it('offers a logs download', async () => { - await openActionsMenu(); - await expect($('.menu-item*=Download')).toBeDisplayed(); - }); + it("offers a logs download", async () => { + await openActionsMenu(); + await expect($(".menu-item*=Download")).toBeDisplayed(); + }); }); diff --git a/e2e/tests/wireguard_tunnel.spec.ts b/e2e/tests/wireguard_tunnel.spec.ts index 8d6c5499b..3f93d7bc6 100644 --- a/e2e/tests/wireguard_tunnel.spec.ts +++ b/e2e/tests/wireguard_tunnel.spec.ts @@ -1,64 +1,72 @@ -import { $, expect } from '@wdio/globals'; +import { $, expect } from "@wdio/globals"; import { - type CoreApi, - type LocationMfaMode, - loggedInCoreApi, -} from '../helpers/coreApi.js'; -import { switchToFullView } from '../helpers/windows.js'; -import { provisionTunnel } from '../helpers/wireguard.js'; + type CoreApi, + type LocationMfaMode, + loggedInCoreApi, +} from "../helpers/coreApi.js"; +import { switchToFullView } from "../helpers/windows.js"; +import { provisionTunnel } from "../helpers/wireguard.js"; const continueStep = async (stepId: string) => { - const button = $(stepId).$('button=Continue'); - await button.waitForClickable(); - await button.click(); + const button = $(stepId).$("button=Continue"); + await button.waitForClickable(); + await button.click(); }; // Skipped: blocked by https://github.com/DefGuard/client/issues/1006 -describe.skip('WireGuard tunnel', () => { - let core: CoreApi; - let networkId: number; - let previousMfaMode: LocationMfaMode; +describe.skip("WireGuard tunnel", () => { + let core: CoreApi; + let networkId: number; + let previousMfaMode: LocationMfaMode; - beforeEach(async () => { - core = await loggedInCoreApi(); - networkId = (await core.listNetworks())[0].id; - previousMfaMode = await core.setLocationMfaMode(networkId, 'disabled'); - }); + beforeEach(async () => { + core = await loggedInCoreApi(); + networkId = (await core.listNetworks())[0].id; + previousMfaMode = await core.setLocationMfaMode(networkId, "disabled"); + }); - afterEach(async () => { - await core.setLocationMfaMode(networkId, previousMfaMode); - }); + afterEach(async () => { + await core.setLocationMfaMode(networkId, previousMfaMode); + }); - it('adds a tunnel from a core-provisioned config', async () => { - const config = await provisionTunnel(core, networkId, `e2e-tunnel-${Date.now()}`); + it("adds a tunnel from a core-provisioned config", async () => { + const config = await provisionTunnel( + core, + networkId, + `e2e-tunnel-${Date.now()}`, + ); - await switchToFullView(); - await $('#add-page-view').$('button=Add tunnel').click(); - await $('#add-tunnel-page').$('button=Add tunnel').click(); + await switchToFullView(); + await $("#add-page-view").$("button=Add tunnel").click(); + await $("#add-tunnel-page").$("button=Add tunnel").click(); - await expect($('#general-info-step')).toBeDisplayed(); - await $('[data-testid="field-name"]').setValue(config.name); - await $('[data-testid="field-address"]').setValue(config.address); - await continueStep('#general-info-step'); + await expect($("#general-info-step")).toBeDisplayed(); + await $('[data-testid="field-name"]').setValue(config.name); + await $('[data-testid="field-address"]').setValue(config.address); + await continueStep("#general-info-step"); - await expect($('#keys-step')).toBeDisplayed(); - await $('[data-testid="field-prvkey"]').setValue(config.prvkey); - await $('[data-testid="field-pubkey"]').setValue(config.pubkey); - await continueStep('#keys-step'); + await expect($("#keys-step")).toBeDisplayed(); + await $('[data-testid="field-prvkey"]').setValue(config.prvkey); + await $('[data-testid="field-pubkey"]').setValue(config.pubkey); + await continueStep("#keys-step"); - await expect($('#vpn-server-step')).toBeDisplayed(); - await $('[data-testid="field-server_pubkey"]').setValue(config.serverPubkey); - await $('[data-testid="field-endpoint"]').setValue(config.endpoint); - await $('[data-testid="field-allowed_ips"]').setValue(config.allowedIps); - await $('[data-testid="field-persistent_keep_alive"]').setValue(config.keepalive); - await continueStep('#vpn-server-step'); + await expect($("#vpn-server-step")).toBeDisplayed(); + await $('[data-testid="field-server_pubkey"]').setValue( + config.serverPubkey, + ); + await $('[data-testid="field-endpoint"]').setValue(config.endpoint); + await $('[data-testid="field-allowed_ips"]').setValue(config.allowedIps); + await $('[data-testid="field-persistent_keep_alive"]').setValue( + config.keepalive, + ); + await continueStep("#vpn-server-step"); - await expect($('#advanced-settings-step')).toBeDisplayed(); - await continueStep('#advanced-settings-step'); + await expect($("#advanced-settings-step")).toBeDisplayed(); + await continueStep("#advanced-settings-step"); - await expect($('#finish-step')).toBeDisplayed(); - await expect($('#finish-step')).toHaveText('added successfully', { - containing: true, - }); - }); + await expect($("#finish-step")).toBeDisplayed(); + await expect($("#finish-step")).toHaveText("added successfully", { + containing: true, + }); + }); }); diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json index 08bfbff55..a1b5497b6 100644 --- a/e2e/tsconfig.json +++ b/e2e/tsconfig.json @@ -1,13 +1,13 @@ { - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "bundler", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "noEmit": true, - "types": ["node", "@wdio/globals/types", "@wdio/mocha-framework"] - }, - "include": ["**/*.ts"] + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "noEmit": true, + "types": ["node", "@wdio/globals/types", "@wdio/mocha-framework"] + }, + "include": ["**/*.ts"] } diff --git a/e2e/wdio.conf.ts b/e2e/wdio.conf.ts index d22957610..2965e24d9 100644 --- a/e2e/wdio.conf.ts +++ b/e2e/wdio.conf.ts @@ -1,7 +1,7 @@ -import { type ChildProcess, spawn, spawnSync } from 'node:child_process'; -import fs from 'node:fs'; -import os from 'node:os'; -import path from 'node:path'; +import { type ChildProcess, spawn, spawnSync } from "node:child_process"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; const here = import.meta.dirname; @@ -10,120 +10,121 @@ const DRIVER_READY_DELAY_MS = 1_000; const TEST_TIMEOUT_MS = 120_000; const WAIT_FOR_TIMEOUT_MS = 15_000; -const envFile = path.resolve(here, '.env'); +const envFile = path.resolve(here, ".env"); if (fs.existsSync(envFile)) { - process.loadEnvFile(envFile); + process.loadEnvFile(envFile); } const clientBinary = - process.env.CLIENT_BINARY ?? - path.resolve(here, '../src-tauri/target/release/defguard-client'); + process.env.CLIENT_BINARY ?? + path.resolve(here, "../src-tauri/target/release/defguard-client"); const tauriDriverBinary = - process.env.TAURI_DRIVER ?? path.join(os.homedir(), '.cargo', 'bin', 'tauri-driver'); + process.env.TAURI_DRIVER ?? + path.join(os.homedir(), ".cargo", "bin", "tauri-driver"); const nativeDriver = process.env.NATIVE_DRIVER; let tauriDriver: ChildProcess | undefined; let dataDir: string | undefined; const killLeftoverClients = () => { - spawnSync('pkill', ['-f', clientBinary]); + spawnSync("pkill", ["-f", clientBinary]); }; const cleanupWireguardInterfaces = () => { - const listed = spawnSync('ip', ['-j', 'link', 'show', 'type', 'wireguard'], { - encoding: 'utf8', - }); - const links = JSON.parse(listed.stdout || '[]') as Array<{ ifname: string }>; - for (const { ifname } of links) { - if (!/^wg\d+$/.test(ifname)) continue; - if (spawnSync('ip', ['link', 'delete', ifname]).status !== 0) { - spawnSync('sudo', ['-n', 'ip', 'link', 'delete', ifname]); - } - } + const listed = spawnSync("ip", ["-j", "link", "show", "type", "wireguard"], { + encoding: "utf8", + }); + const links = JSON.parse(listed.stdout || "[]") as Array<{ ifname: string }>; + for (const { ifname } of links) { + if (!/^wg\d+$/.test(ifname)) continue; + if (spawnSync("ip", ["link", "delete", ifname]).status !== 0) { + spawnSync("sudo", ["-n", "ip", "link", "delete", ifname]); + } + } }; const cleanup = () => { - tauriDriver?.kill(); - tauriDriver = undefined; - killLeftoverClients(); - cleanupWireguardInterfaces(); + tauriDriver?.kill(); + tauriDriver = undefined; + killLeftoverClients(); + cleanupWireguardInterfaces(); }; -process.on('exit', cleanup); -for (const signal of ['SIGINT', 'SIGTERM'] as const) { - process.on(signal, () => { - cleanup(); - process.exit(130); - }); +process.on("exit", cleanup); +for (const signal of ["SIGINT", "SIGTERM"] as const) { + process.on(signal, () => { + cleanup(); + process.exit(130); + }); } export const config: WebdriverIO.Config = { - runner: 'local', - hostname: '127.0.0.1', - port: DRIVER_PORT, - logLevel: 'info', - specs: ['./tests/**/*.spec.ts'], - maxInstances: 1, - capabilities: [ - { - 'wdio:maxInstances': 1, - 'tauri:options': { application: clientBinary }, - } as WebdriverIO.Capabilities, - ], - reporters: ['spec'], - framework: 'mocha', - mochaOpts: { ui: 'bdd', timeout: TEST_TIMEOUT_MS }, - waitforTimeout: WAIT_FOR_TIMEOUT_MS, - connectionRetryTimeout: 120_000, - connectionRetryCount: 2, + runner: "local", + hostname: "127.0.0.1", + port: DRIVER_PORT, + logLevel: "info", + specs: ["./tests/**/*.spec.ts"], + maxInstances: 1, + capabilities: [ + { + "wdio:maxInstances": 1, + "tauri:options": { application: clientBinary }, + } as WebdriverIO.Capabilities, + ], + reporters: ["spec"], + framework: "mocha", + mochaOpts: { ui: "bdd", timeout: TEST_TIMEOUT_MS }, + waitforTimeout: WAIT_FOR_TIMEOUT_MS, + connectionRetryTimeout: 120_000, + connectionRetryCount: 2, - onPrepare: () => { - if (!fs.existsSync(clientBinary)) { - throw new Error( - `Client binary not found at ${clientBinary}. Build it with ` + - '`pnpm tauri build` or set CLIENT_BINARY.', - ); - } - }, + onPrepare: () => { + if (!fs.existsSync(clientBinary)) { + throw new Error( + `Client binary not found at ${clientBinary}. Build it with ` + + "`pnpm tauri build` or set CLIENT_BINARY.", + ); + } + }, - beforeSession: () => { - killLeftoverClients(); - cleanupWireguardInterfaces(); - dataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'defguard-e2e-')); - tauriDriver = spawn( - tauriDriverBinary, - nativeDriver ? ['--native-driver', nativeDriver] : [], - { - stdio: ['ignore', 'inherit', 'inherit'], - env: { - ...process.env, - XDG_DATA_HOME: path.join(dataDir, 'share'), - XDG_CONFIG_HOME: path.join(dataDir, 'config'), - XDG_CACHE_HOME: path.join(dataDir, 'cache'), - }, - }, - ); - tauriDriver.on('error', (error) => { - console.error('tauri-driver failed to start:', error); - process.exit(1); - }); - return new Promise((resolve) => setTimeout(resolve, DRIVER_READY_DELAY_MS)); - }, + beforeSession: () => { + killLeftoverClients(); + cleanupWireguardInterfaces(); + dataDir = fs.mkdtempSync(path.join(os.tmpdir(), "defguard-e2e-")); + tauriDriver = spawn( + tauriDriverBinary, + nativeDriver ? ["--native-driver", nativeDriver] : [], + { + stdio: ["ignore", "inherit", "inherit"], + env: { + ...process.env, + XDG_DATA_HOME: path.join(dataDir, "share"), + XDG_CONFIG_HOME: path.join(dataDir, "config"), + XDG_CACHE_HOME: path.join(dataDir, "cache"), + }, + }, + ); + tauriDriver.on("error", (error) => { + console.error("tauri-driver failed to start:", error); + process.exit(1); + }); + return new Promise((resolve) => setTimeout(resolve, DRIVER_READY_DELAY_MS)); + }, - afterTest: () => cleanupWireguardInterfaces(), + afterTest: () => cleanupWireguardInterfaces(), - afterSession: () => { - cleanup(); - if (dataDir) { - fs.rmSync(dataDir, { - recursive: true, - force: true, - maxRetries: 5, - retryDelay: 100, - }); - dataDir = undefined; - } - }, + afterSession: () => { + cleanup(); + if (dataDir) { + fs.rmSync(dataDir, { + recursive: true, + force: true, + maxRetries: 5, + retryDelay: 100, + }); + dataDir = undefined; + } + }, - onComplete: cleanup, + onComplete: cleanup, }; diff --git a/index.html b/index.html deleted file mode 100644 index 91ff3d134..000000000 --- a/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - main window - - - -
    -
    -
    - - - diff --git a/justfile b/justfile index daabed537..934ff907c 100644 --- a/justfile +++ b/justfile @@ -2,12 +2,10 @@ set windows-shell := ["powershell.exe", "-c"] dev: npx concurrently \ - -n "NEW,OLD,TAURI" \ + -n "NEW,TAURI" \ "cd new-ui && pnpm dev" \ - "pnpm dev" \ "cargo tauri dev" build: cd new-ui; pnpm build - pnpm build cargo tauri build --config .\src-tauri\tauri.local.conf.json diff --git a/nix/package.nix b/nix/package.nix index 3b9c6cec4..9b5420928 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -84,15 +84,6 @@ SQLX_OFFLINE = "true"; }; - # Prefetch pnpm dependencies. - # Explicit pnpm_10 keeps fetchPnpmDeps and pnpmConfigHook on the same major version. - pnpmDeps = fetchPnpmDeps { - inherit pname version pnpm; - src = ../.; - fetcherVersion = 3; - hash = "sha256-CqWUwzsTw6NlM96kPobXFuyS2kIM1oHVbun/F7SqgK8="; - }; - # Prefetch pnpm dependencies for the new UI (separate pnpm project). newUiPnpmDeps = fetchPnpmDeps { pname = "defguard-client-new-ui"; @@ -113,17 +104,18 @@ runHook preBuild pnpm tsc -b pnpm vite build --outDir "$out" - # Create entry points for compact and full view windows. - mkdir -p "$out"/compact "$out"/full + # Create entry points for compact, full, and welcome view windows. + mkdir -p "$out"/compact "$out"/full "$out"/welcome cp "$out"/index.html "$out"/compact/ cp "$out"/index.html "$out"/full/ + cp "$out"/index.html "$out"/welcome/ runHook postBuild ''; installPhase = "true"; }; in craneLib.mkCargoDerivation { - inherit pname version buildInputs cargoArtifacts cargoVendorDir pnpmDeps newUiDist; + inherit pname version buildInputs cargoArtifacts cargoVendorDir newUiDist; src = ../.; @@ -132,9 +124,6 @@ in ++ [ pkgs.makeWrapper pkgs.wrapGAppsHook3 - pkgs.nodejs_24 - pnpm - pnpmConfigHook ]; # Pin CARGO_TARGET_DIR before crane's inheritCargoArtifacts hook runs so @@ -169,13 +158,13 @@ in buildPhase = '' runHook preBuild - # Build the old frontend and copy in the pre-built new UI. - pnpm build + # Copy in the pre-built new UI frontend. + mkdir -p dist cp -r ${newUiDist}/* dist/ chmod -R u+w dist/ # --config replaces the build section from tauri.linux.conf.json. - pnpm tauri build \ + cargo tauri build \ --config '{"build":{"beforeBuildCommand":""}}' runHook postBuild @@ -218,13 +207,11 @@ in doInstallCargoArtifacts = false; # passthru attrs are ignored by the build but addressable by external tools. - # There are TWO pnpm lockfiles, each with its own pinned hash that must be kept - # current when the corresponding lockfile changes: - # pnpmDeps - root pnpm project (../pnpm-lock.yaml) - # newUiPnpmDeps - new-ui pnpm project (../new-ui/pnpm-lock.yaml) - # Any hash-refresh automation (e.g. an update-pnpm-hash workflow) must update both. + # newUiPnpmDeps has its own pinned hash that must be kept current when + # new-ui/pnpm-lock.yaml changes. Any hash-refresh automation (e.g. an + # update-pnpm-hash workflow) must update it. passthru = { - inherit pnpmDeps newUiPnpmDeps; + inherit newUiPnpmDeps; }; meta = with lib; { diff --git a/package.json b/package.json deleted file mode 100644 index e1738bcf7..000000000 --- a/package.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "name": "defguard-client", - "private": false, - "version": "2.1.0", - "type": "module", - "scripts": { - "dev": "npm-run-all --parallel vite typesafe-i18n", - "typecheck": "tsc --project ./tsconfig.app.json", - "build": "pnpm run typecheck && vite build", - "preview": "vite preview", - "typesafe-i18n": "typesafe-i18n", - "generate-translation-types": "typesafe-i18n --no-watch", - "fix": "biome check --fix && prettier src/**/*.scss -w --log-level silent", - "fix-unsafe": "biome check --fix --unsafe && prettier src/**/*.scss -w --log-level silent", - "lint": "biome lint && pnpm run typecheck && prettier src/**/*.scss --check --log-level error", - "lint-ci": "biome ci && pnpm run typecheck && prettier src/**/*.scss --check --log-level error", - "vite": "vite", - "prettier": "prettier", - "parse-client-svgs": "svgr --no-index --jsx-runtime automatic --svgo-config ./svgo.config.json --prettier-config ./.prettierrc --out-dir ./src/shared/components/svg/ --typescript ./src/shared/images/svg/", - "parse-ui-svgs": "svgr --no-index --jsx-runtime automatic --svgo-config ./svgo.config.json --prettier-config ./.prettierrc --out-dir ./src/shared/defguard-ui/components/svg/ --typescript ./src/shared/defguard-ui/images/svg/", - "parse-svgs": "pnpm parse-ui-svgs && pnpm parse-client-svgs", - "svgr": "svgr", - "tauri": "tauri", - "biome": "biome" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "dependencies": { - "@floating-ui/react": "^0.27.20", - "@hookform/resolvers": "^3.10.0", - "@react-hook/resize-observer": "^2.0.2", - "@stablelib/base64": "^2.0.1", - "@stablelib/x25519": "^2.0.1", - "@tanstack/query-core": "^5.101.2", - "@tanstack/react-virtual": "^3.14.6", - "@tauri-apps/api": "^2.11.1", - "@tauri-apps/plugin-clipboard-manager": "^2.3.2", - "@tauri-apps/plugin-deep-link": "^2.4.9", - "@tauri-apps/plugin-dialog": "^2.7.2", - "@tauri-apps/plugin-fs": "^2.5.1", - "@tauri-apps/plugin-http": "^2.5.9", - "@tauri-apps/plugin-log": "^2.9.0", - "@tauri-apps/plugin-notification": "^2.3.3", - "@tauri-apps/plugin-opener": "^2.5.4", - "@tauri-apps/plugin-os": "^2.3.2", - "@tauri-apps/plugin-process": "^2.3.1", - "@tauri-apps/plugin-window-state": "^2.4.1", - "@types/byte-size": "^8.1.2", - "@use-gesture/react": "^10.3.1", - "byte-size": "^9.0.1", - "classnames": "^2.5.1", - "clsx": "^2.1.1", - "compare-versions": "^6.1.1", - "dayjs": "^1.11.21", - "deepmerge-ts": "^7.1.5", - "detect-browser": "^5.3.0", - "fast-deep-equal": "^3.1.3", - "file-saver": "^2.0.5", - "get-text-width": "^1.0.3", - "html-react-parser": "^6.1.5", - "itertools": "^2.7.1", - "js-base64": "^3.9.1", - "lodash-es": "^4.18.1", - "merge-refs": "^2.0.0", - "millify": "^6.1.0", - "motion": "^12.42.2", - "p-timeout": "^7.0.1", - "prop-types": "^15.8.1", - "radash": "^12.1.1", - "react": "^19.2.7", - "react-auth-code-input": "^3.2.1", - "react-click-away-listener": "^2.4.2", - "react-dom": "^19.2.7", - "react-hook-form": "^7.82.0", - "react-hotkeys-hook": "^5.3.3", - "react-loading-skeleton": "^3.5.0", - "react-markdown": "^10.1.0", - "react-qr-code": "^2.2.0", - "react-router-dom": "^6.30.4", - "react-use-websocket": "^4.13.0", - "react-virtualized-auto-sizer": "^1.0.26", - "recharts": "^3.9.2", - "rehype-sanitize": "^6.0.0", - "rxjs": "^7.8.2", - "use-breakpoint": "^4.0.10", - "zod": "^3.25.76", - "zustand": "^5.0.14" - }, - "devDependencies": { - "@biomejs/biome": "2.4.16", - "@hookform/devtools": "^4.4.0", - "@svgr/cli": "^8.1.0", - "@tanstack/react-query": "^5.101.2", - "@tanstack/react-query-devtools": "^5.101.2", - "@tauri-apps/cli": "^2.11.4", - "@types/file-saver": "^2.0.7", - "@types/lodash-es": "^4.17.12", - "@types/node": "^26.1.1", - "@types/react": "^19.2.17", - "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^5.2.0", - "@vitejs/plugin-react-swc": "^4.3.1", - "autoprefixer": "^10.5.4", - "npm-run-all": "^4.1.5", - "postcss": "^8.5.20", - "prettier": "^3.9.5", - "sass": "~1.92.1", - "typedoc": "^0.28.20", - "typesafe-i18n": "^5.27.1", - "typescript": "^6.0.3", - "vite": "^7.3.6" - }, - "volta": { - "node": "20.5.1" - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 7d9422668..000000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,6087 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@floating-ui/react': - specifier: ^0.27.20 - version: 0.27.20(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@hookform/resolvers': - specifier: ^3.10.0 - version: 3.10.0(react-hook-form@7.82.0(react@19.2.7)) - '@react-hook/resize-observer': - specifier: ^2.0.2 - version: 2.0.2(react@19.2.7) - '@stablelib/base64': - specifier: ^2.0.1 - version: 2.0.1 - '@stablelib/x25519': - specifier: ^2.0.1 - version: 2.0.1 - '@tanstack/query-core': - specifier: ^5.101.2 - version: 5.101.2 - '@tanstack/react-virtual': - specifier: ^3.14.6 - version: 3.14.6(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@tauri-apps/api': - specifier: ^2.11.1 - version: 2.11.1 - '@tauri-apps/plugin-clipboard-manager': - specifier: ^2.3.2 - version: 2.3.2 - '@tauri-apps/plugin-deep-link': - specifier: ^2.4.9 - version: 2.4.9 - '@tauri-apps/plugin-dialog': - specifier: ^2.7.2 - version: 2.7.2 - '@tauri-apps/plugin-fs': - specifier: ^2.5.1 - version: 2.5.1 - '@tauri-apps/plugin-http': - specifier: ^2.5.9 - version: 2.5.9 - '@tauri-apps/plugin-log': - specifier: ^2.9.0 - version: 2.9.0 - '@tauri-apps/plugin-notification': - specifier: ^2.3.3 - version: 2.3.3 - '@tauri-apps/plugin-opener': - specifier: ^2.5.4 - version: 2.5.4 - '@tauri-apps/plugin-os': - specifier: ^2.3.2 - version: 2.3.2 - '@tauri-apps/plugin-process': - specifier: ^2.3.1 - version: 2.3.1 - '@tauri-apps/plugin-window-state': - specifier: ^2.4.1 - version: 2.4.1 - '@types/byte-size': - specifier: ^8.1.2 - version: 8.1.2 - '@use-gesture/react': - specifier: ^10.3.1 - version: 10.3.1(react@19.2.7) - byte-size: - specifier: ^9.0.1 - version: 9.0.1 - classnames: - specifier: ^2.5.1 - version: 2.5.1 - clsx: - specifier: ^2.1.1 - version: 2.1.1 - compare-versions: - specifier: ^6.1.1 - version: 6.1.1 - dayjs: - specifier: ^1.11.21 - version: 1.11.21 - deepmerge-ts: - specifier: ^7.1.5 - version: 7.1.5 - detect-browser: - specifier: ^5.3.0 - version: 5.3.0 - fast-deep-equal: - specifier: ^3.1.3 - version: 3.1.3 - file-saver: - specifier: ^2.0.5 - version: 2.0.5 - get-text-width: - specifier: ^1.0.3 - version: 1.0.3 - html-react-parser: - specifier: ^6.1.5 - version: 6.1.5(@types/react@19.2.17)(react@19.2.7) - itertools: - specifier: ^2.7.1 - version: 2.7.1 - js-base64: - specifier: ^3.9.1 - version: 3.9.1 - lodash-es: - specifier: ^4.18.1 - version: 4.18.1 - merge-refs: - specifier: ^2.0.0 - version: 2.0.0(@types/react@19.2.17) - millify: - specifier: ^6.1.0 - version: 6.1.0 - motion: - specifier: ^12.42.2 - version: 12.42.2(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - p-timeout: - specifier: ^7.0.1 - version: 7.0.1 - prop-types: - specifier: ^15.8.1 - version: 15.8.1 - radash: - specifier: ^12.1.1 - version: 12.1.1 - react: - specifier: ^19.2.7 - version: 19.2.7 - react-auth-code-input: - specifier: ^3.2.1 - version: 3.2.1(react@19.2.7) - react-click-away-listener: - specifier: ^2.4.2 - version: 2.4.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - react-dom: - specifier: ^19.2.7 - version: 19.2.7(react@19.2.7) - react-hook-form: - specifier: ^7.82.0 - version: 7.82.0(react@19.2.7) - react-hotkeys-hook: - specifier: ^5.3.3 - version: 5.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - react-loading-skeleton: - specifier: ^3.5.0 - version: 3.5.0(react@19.2.7) - react-markdown: - specifier: ^10.1.0 - version: 10.1.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0) - react-qr-code: - specifier: ^2.2.0 - version: 2.2.0(react@19.2.7) - react-router-dom: - specifier: ^6.30.4 - version: 6.30.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - react-use-websocket: - specifier: ^4.13.0 - version: 4.13.0 - react-virtualized-auto-sizer: - specifier: ^1.0.26 - version: 1.0.26(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - recharts: - specifier: ^3.9.2 - version: 3.9.2(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react-is@16.13.1)(react@19.2.7)(redux@5.0.1) - rehype-sanitize: - specifier: ^6.0.0 - version: 6.0.0 - rxjs: - specifier: ^7.8.2 - version: 7.8.2 - use-breakpoint: - specifier: ^4.0.10 - version: 4.0.10(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - zod: - specifier: ^3.25.76 - version: 3.25.76 - zustand: - specifier: ^5.0.14 - version: 5.0.14(@types/react@19.2.17)(immer@11.1.15)(react@19.2.7)(use-sync-external-store@1.6.0(react@19.2.7)) - devDependencies: - '@biomejs/biome': - specifier: 2.4.16 - version: 2.4.16 - '@hookform/devtools': - specifier: ^4.4.0 - version: 4.4.0(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@7.2.0) - '@svgr/cli': - specifier: ^8.1.0 - version: 8.1.0(supports-color@7.2.0)(typescript@6.0.3) - '@tanstack/react-query': - specifier: ^5.101.2 - version: 5.101.2(react@19.2.7) - '@tanstack/react-query-devtools': - specifier: ^5.101.2 - version: 5.101.2(@tanstack/react-query@5.101.2(react@19.2.7))(react@19.2.7) - '@tauri-apps/cli': - specifier: ^2.11.4 - version: 2.11.4 - '@types/file-saver': - specifier: ^2.0.7 - version: 2.0.7 - '@types/lodash-es': - specifier: ^4.17.12 - version: 4.17.12 - '@types/node': - specifier: ^26.1.1 - version: 26.1.1 - '@types/react': - specifier: ^19.2.17 - version: 19.2.17 - '@types/react-dom': - specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.17) - '@vitejs/plugin-react': - specifier: ^5.2.0 - version: 5.2.0(supports-color@7.2.0)(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0)) - '@vitejs/plugin-react-swc': - specifier: ^4.3.1 - version: 4.3.1(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0)) - autoprefixer: - specifier: ^10.5.4 - version: 10.5.4(postcss@8.5.20) - npm-run-all: - specifier: ^4.1.5 - version: 4.1.5 - postcss: - specifier: ^8.5.20 - version: 8.5.20 - prettier: - specifier: ^3.9.5 - version: 3.9.5 - sass: - specifier: ~1.92.1 - version: 1.92.1 - typedoc: - specifier: ^0.28.20 - version: 0.28.20(typescript@6.0.3) - typesafe-i18n: - specifier: ^5.27.1 - version: 5.27.1(typescript@6.0.3) - typescript: - specifier: ^6.0.3 - version: 6.0.3 - vite: - specifier: ^7.3.6 - version: 7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0) - -packages: - - '@babel/code-frame@7.29.7': - resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.29.7': - resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.29.7': - resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.29.7': - resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.29.7': - resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} - engines: {node: '>=6.9.0'} - - '@babel/helper-globals@7.29.7': - resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.29.7': - resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.29.7': - resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.29.7': - resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.29.7': - resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.29.7': - resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.29.7': - resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.29.7': - resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.29.7': - resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-transform-react-jsx-self@7.29.7': - resolution: {integrity: sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-source@7.29.7': - resolution: {integrity: sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.29.7': - resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.29.7': - resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.29.7': - resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.29.7': - resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} - engines: {node: '>=6.9.0'} - - '@biomejs/biome@2.4.16': - resolution: {integrity: sha512-x9ajFh1zChVybCiM3TN6OD4phAqLgtPZjFrZF+aTMYCPjwBO+k529TX7PPsAqtGNLeV4UgzwQnowEgS7bGmzcA==} - engines: {node: '>=14.21.3'} - hasBin: true - - '@biomejs/cli-darwin-arm64@2.4.16': - resolution: {integrity: sha512-wxPvu4XOA85YJk9ixSWUmq/QBHbid85BISbOAqqBM/5xQpPk9ayjk5375tOlSC0BeCwNSbPFafQBm+vBumXq0A==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [darwin] - - '@biomejs/cli-darwin-x64@2.4.16': - resolution: {integrity: sha512-xFCqGPwYusQJp4N4NJLi1XJiZqjwFdjhT+KqtNy+Ug3qgfczqnTa6MSDvxJF6TkuDLoYJItMapz6tAf7kCekFw==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [darwin] - - '@biomejs/cli-linux-arm64-musl@2.4.16': - resolution: {integrity: sha512-oYxnW0ARfJkr72ezzF2OR8N/rtkgLUQeYtF8cFhVswbknHxtTcmzSsanVJP8yQKnGpGpc2ck6c5zLvHahL6Cbg==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@biomejs/cli-linux-arm64@2.4.16': - resolution: {integrity: sha512-2kFb4//jxfZaP6D+Rj5VkHkxgyD9EoRAVBEQb8PKRv+s4NO2zYNJKXFaJmK1CmhufJOWEfpHKaRbOja7qjmdhQ==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@biomejs/cli-linux-x64-musl@2.4.16': - resolution: {integrity: sha512-iHDS+MCM65DPqWGu+ECC3uoALyj2H7F4nVUPxIPjz/PIl94EUu+EDfGZDzFP+NY1EOPVt9NQvwFqq7HdMmowdg==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@biomejs/cli-linux-x64@2.4.16': - resolution: {integrity: sha512-NbcBbi/nJqn5baae6wqRXdS7Gadf2uRpehSh6vMSYpG8OhkXl/Xg8aorWrJ+9VWqAT5ml90alLvorkpMW0nBwQ==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@biomejs/cli-win32-arm64@2.4.16': - resolution: {integrity: sha512-0rgImMsNb5v/chhkIFe3wu7PEFClS6RBAYUijGL9UsYN3PanSaoK24HSSuSJb1pYbYYVjzAyZTl3gtjJ84BM8A==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [win32] - - '@biomejs/cli-win32-x64@2.4.16': - resolution: {integrity: sha512-Kp85jgoBHa05gix6UIRjfCDiUV3w/8VIdZ247VyyO2gEjaw12WEVhdIjlxp/AMzXxqxQwbxNTDVZ3Mwd2RG5rw==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [win32] - - '@emotion/babel-plugin@11.13.5': - resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} - - '@emotion/cache@11.14.0': - resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} - - '@emotion/hash@0.9.2': - resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - - '@emotion/is-prop-valid@1.4.0': - resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==} - - '@emotion/memoize@0.9.0': - resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - - '@emotion/react@11.14.0': - resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} - peerDependencies: - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - - '@emotion/serialize@1.3.3': - resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} - - '@emotion/sheet@1.4.0': - resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - - '@emotion/styled@11.14.1': - resolution: {integrity: sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==} - peerDependencies: - '@emotion/react': ^11.0.0-rc.0 - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - - '@emotion/unitless@0.10.0': - resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} - - '@emotion/use-insertion-effect-with-fallbacks@1.2.0': - resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} - peerDependencies: - react: '>=16.8.0' - - '@emotion/utils@1.4.2': - resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} - - '@emotion/weak-memoize@0.4.0': - resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - - '@esbuild/aix-ppc64@0.28.1': - resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.28.1': - resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.28.1': - resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.28.1': - resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.28.1': - resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.28.1': - resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.28.1': - resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.28.1': - resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.28.1': - resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.28.1': - resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.28.1': - resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.28.1': - resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.28.1': - resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.28.1': - resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.28.1': - resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.28.1': - resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.28.1': - resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.28.1': - resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.28.1': - resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.28.1': - resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.28.1': - resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.28.1': - resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.28.1': - resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.28.1': - resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.28.1': - resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.28.1': - resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@floating-ui/core@1.8.0': - resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} - - '@floating-ui/dom@1.8.0': - resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} - - '@floating-ui/react-dom@2.1.9': - resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/react@0.27.20': - resolution: {integrity: sha512-CMqMy7OaXl9W0eq1Uy7L7i2Y/anPvHmFmESd2CEw0t5YvZhcVCeo4MBevAmswRllX7Y2dEidA4ozGPunLSTQpw==} - peerDependencies: - react: '>=17.0.0' - react-dom: '>=17.0.0' - - '@floating-ui/utils@0.2.12': - resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} - - '@gerrit0/mini-shiki@3.23.0': - resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==} - - '@hookform/devtools@4.4.0': - resolution: {integrity: sha512-Mtlic+uigoYBPXlfvPBfiYYUZuyMrD3pTjDpVIhL6eCZTvQkHsKBSKeZCvXWUZr8fqrkzDg27N+ZuazLKq6Vmg==} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - react-dom: ^16.8.0 || ^17 || ^18 || ^19 - - '@hookform/resolvers@3.10.0': - resolution: {integrity: sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==} - peerDependencies: - react-hook-form: ^7.0.0 - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@parcel/watcher-android-arm64@2.6.0': - resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [android] - - '@parcel/watcher-darwin-arm64@2.6.0': - resolution: {integrity: sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [darwin] - - '@parcel/watcher-darwin-x64@2.6.0': - resolution: {integrity: sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [darwin] - - '@parcel/watcher-freebsd-x64@2.6.0': - resolution: {integrity: sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [freebsd] - - '@parcel/watcher-linux-arm-glibc@2.6.0': - resolution: {integrity: sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-arm-musl@2.6.0': - resolution: {integrity: sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - libc: [musl] - - '@parcel/watcher-linux-arm64-glibc@2.6.0': - resolution: {integrity: sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-arm64-musl@2.6.0': - resolution: {integrity: sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@parcel/watcher-linux-x64-glibc@2.6.0': - resolution: {integrity: sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-x64-musl@2.6.0': - resolution: {integrity: sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@parcel/watcher-win32-arm64@2.6.0': - resolution: {integrity: sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [win32] - - '@parcel/watcher-win32-x64@2.6.0': - resolution: {integrity: sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [win32] - - '@parcel/watcher@2.6.0': - resolution: {integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==} - engines: {node: '>= 10.0.0'} - - '@react-hook/latest@1.0.3': - resolution: {integrity: sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg==} - peerDependencies: - react: '>=16.8' - - '@react-hook/passive-layout-effect@1.2.1': - resolution: {integrity: sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==} - peerDependencies: - react: '>=16.8' - - '@react-hook/resize-observer@2.0.2': - resolution: {integrity: sha512-tzKKzxNpfE5TWmxuv+5Ae3IF58n0FQgQaWJmcbYkjXTRZATXxClnTprQ2uuYygYTpu1pqbBskpwMpj6jpT1djA==} - peerDependencies: - react: '>=18' - - '@reduxjs/toolkit@2.12.0': - resolution: {integrity: sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18 || ^19 - react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 - peerDependenciesMeta: - react: - optional: true - react-redux: - optional: true - - '@remix-run/router@1.23.3': - resolution: {integrity: sha512-4An71tdz9X8+3sI4Qqqd2LWd9vS39J7sqd9EU4Scw7TJE/qB10Flv/UuqbPVgfQV9XoK8Np6jNquZitnZq5i+Q==} - engines: {node: '>=14.0.0'} - - '@rolldown/pluginutils@1.0.0-rc.3': - resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} - - '@rolldown/pluginutils@1.0.1': - resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - - '@rollup/rollup-android-arm-eabi@4.62.2': - resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.62.2': - resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.62.2': - resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.62.2': - resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.62.2': - resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.62.2': - resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.62.2': - resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.62.2': - resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==} - cpu: [arm] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-arm64-gnu@4.62.2': - resolution: {integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm64-musl@4.62.2': - resolution: {integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-loong64-gnu@4.62.2': - resolution: {integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==} - cpu: [loong64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-loong64-musl@4.62.2': - resolution: {integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==} - cpu: [loong64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-ppc64-gnu@4.62.2': - resolution: {integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-ppc64-musl@4.62.2': - resolution: {integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==} - cpu: [ppc64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-riscv64-gnu@4.62.2': - resolution: {integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-riscv64-musl@4.62.2': - resolution: {integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-s390x-gnu@4.62.2': - resolution: {integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-gnu@4.62.2': - resolution: {integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-musl@4.62.2': - resolution: {integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rollup/rollup-openbsd-x64@4.62.2': - resolution: {integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.62.2': - resolution: {integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.62.2': - resolution: {integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.62.2': - resolution: {integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.62.2': - resolution: {integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.62.2': - resolution: {integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==} - cpu: [x64] - os: [win32] - - '@shikijs/engine-oniguruma@3.23.0': - resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} - - '@shikijs/langs@3.23.0': - resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} - - '@shikijs/themes@3.23.0': - resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} - - '@shikijs/types@3.23.0': - resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} - - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - - '@stablelib/base64@2.0.1': - resolution: {integrity: sha512-P2z89A7N1ETt6RxgpVdDT2xlg8cnm3n6td0lY9gyK7EiWK3wdq388yFX/hLknkCC0we05OZAD1rfxlQJUbl5VQ==} - - '@stablelib/binary@2.0.1': - resolution: {integrity: sha512-U9iAO8lXgEDONsA0zPPSgcf3HUBNAqHiJmSHgZz62OvC3Hi2Bhc5kTnQ3S1/L+sthDTHtCMhcEiklmIly6uQ3w==} - - '@stablelib/bytes@2.0.1': - resolution: {integrity: sha512-QIzI6V7nkJA5CjOZ7GoceBd4CIKrJoC471VaI6jh1xPQ2cMhkhQK4HddyzCXOR2y+fBF3/5B2HO3FXXI9C+Xzg==} - - '@stablelib/int@2.0.1': - resolution: {integrity: sha512-Ht63fQp3wz/F8U4AlXEPb7hfJOIILs8Lq55jgtD7KueWtyjhVuzcsGLSTAWtZs3XJDZYdF1WcSKn+kBtbzupww==} - - '@stablelib/keyagreement@2.0.1': - resolution: {integrity: sha512-2+tWBLCMtWlHQ7GqjD5L+lQRyWtun4Lou0IOdTML8zuTuAS0EgihnHFx+4uMZwYU1In40J/WlpyKSLidHfStRQ==} - - '@stablelib/random@2.0.1': - resolution: {integrity: sha512-W6GAtXEEs7r+dSbuBsvoFmlyL3gLxle41tQkjKu17dDWtDdjhVUbtRfRCQcCUeczwkgjQxMPopgwYEvxXtHXGw==} - - '@stablelib/wipe@2.0.1': - resolution: {integrity: sha512-1eU2K9EgOcV4qc9jcP6G72xxZxEm5PfeI5H55l08W95b4oRJaqhmlWRc4xZAm6IVSKhVNxMi66V67hCzzuMTAg==} - - '@stablelib/x25519@2.0.1': - resolution: {integrity: sha512-qi04HS2puHaBf50kM/kes5QcZFGsx8yF0YmCjLCOa/LPmnBaKEKX9ZR82OnnCwMn72YH13R/bBZgr/UP0aPFfA==} - - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - - '@standard-schema/utils@0.3.0': - resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - - '@svgr/babel-plugin-add-jsx-attribute@8.0.0': - resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': - resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': - resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0': - resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-svg-dynamic-title@8.0.0': - resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-svg-em-dimensions@8.0.0': - resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-transform-react-native-svg@8.1.0': - resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-transform-svg-component@8.0.0': - resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} - engines: {node: '>=12'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-preset@8.1.0': - resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/cli@8.1.0': - resolution: {integrity: sha512-SnlaLspB610XFXvs3PmhzViHErsXp0yIy4ERyZlHDlO1ro2iYtHMWYk2mztdLD/lBjiA4ZXe4RePON3qU/Tc4A==} - engines: {node: '>=14'} - hasBin: true - - '@svgr/core@8.1.0': - resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} - engines: {node: '>=14'} - - '@svgr/hast-util-to-babel-ast@8.0.0': - resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} - engines: {node: '>=14'} - - '@svgr/plugin-jsx@8.1.0': - resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==} - engines: {node: '>=14'} - peerDependencies: - '@svgr/core': '*' - - '@svgr/plugin-prettier@8.1.0': - resolution: {integrity: sha512-o4/uFI8G64tAjBZ4E7gJfH+VP7Qi3T0+M4WnIsP91iFnGPqs5WvPDkpZALXPiyWEtzfYs1Rmwy1Zdfu8qoZuKw==} - engines: {node: '>=14'} - peerDependencies: - '@svgr/core': '*' - - '@svgr/plugin-svgo@8.1.0': - resolution: {integrity: sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==} - engines: {node: '>=14'} - peerDependencies: - '@svgr/core': '*' - - '@swc/core-darwin-arm64@1.15.46': - resolution: {integrity: sha512-IsISIT22EfktVJrlvIpnAxG2u/A9aob9l99HMlx80x72WlFmFPk1V3UhkEzx86eJP8hw049KTFv/RISho2cq2Q==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-x64@1.15.46': - resolution: {integrity: sha512-4Tj4ppVIPCmUMpmGFiGtyEriwLyJ+yi/US4WfBrP/ok8COGddDZXLEzQETnKyK46mjvr1v0jevrS23zjoff7vA==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-linux-arm-gnueabihf@1.15.46': - resolution: {integrity: sha512-i8tUGnNjyOgMmfmgFSg4aeJLQoFyfpIHK5FjpQAwpRyQIqEUB2w1e8zIDQzY1WhOxx8NoS1S5iUL813Un4Sf5A==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.15.46': - resolution: {integrity: sha512-c0OnhqzdhfOvv6qhNCcByepB+sNYOGZyhtr2Qa6ZCHvAWTYhSRw4j/u92Stue9PbZ/6q74b9nHzi76+kVzqQHQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@swc/core-linux-arm64-musl@1.15.46': - resolution: {integrity: sha512-imyRpNEcUzFQFV2LE4jL68ErvmKEuZCbvZru77iQREunJ+bR4i658cupTgtG1mLYM3F1Tzy3Sb9xYb02KghWTg==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@swc/core-linux-ppc64-gnu@1.15.46': - resolution: {integrity: sha512-ctEfcl/HcUeomK33cbySiHZm98GEDIxTm1EkpBsYCiHxElYBzvTXVeuQT2YwbUXn9XCrjiw4ipyUNk33k26qRg==} - engines: {node: '>=10'} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@swc/core-linux-s390x-gnu@1.15.46': - resolution: {integrity: sha512-DxlMdnt84TtRVTv7WL/thWyz9+QU8QZNNoAP9rrk0P68LziuhfePp8MjQ44zIprpTHTsEwyziIuGUUN5iSC1bQ==} - engines: {node: '>=10'} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@swc/core-linux-x64-gnu@1.15.46': - resolution: {integrity: sha512-SKxI7J6t90XPl8hRUqtJi9NfGdunN/E/vZMc7Bc0figeRdOPDBT+Tm8g7cx9xM0T0mewh2l+8dewa3Am27/P+A==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@swc/core-linux-x64-musl@1.15.46': - resolution: {integrity: sha512-qj9T6B7bosI0VEsrWOVXZN1OXxS8Tp63ywyrLxNdOycnUtLdkgYcoBsN5y8ImnDDsnwrEWZOy1e+J4xSe7mA3Q==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@swc/core-win32-arm64-msvc@1.15.46': - resolution: {integrity: sha512-8p7l4c3LU+eA5g9Et1JPhNeMC1oQwXTGU+uah8DPIBX7YXzqswvaBtyKVmXefVGi/DJU1x3YJsc3mbAp9aWzSQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.15.46': - resolution: {integrity: sha512-tUEnfr3Bn9u6FOjUb3PN9p+09qZC2j+wNDLKHzXXZn22rqGcUqR/ohCRSS+nG9B9+X+U+3FewNEHJkTmdIvMjQ==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.15.46': - resolution: {integrity: sha512-Vux7UDzBJYQggSuPfcl2w9iu+IJpgpRCxHzgCaVkELnAXAE4XZMOTX9HNcaNiwfeIDqdu2rkr69RuDm6wY8neA==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core@1.15.46': - resolution: {integrity: sha512-Ri3em2mBpq3h2zSPliCYl63otDGqek8PPEfv2nWgRQEbZ/VBCNyypVTVQ6cEbTCXBhy+WE2T3fQb08moIyuYaw==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '>=0.5.17' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - - '@swc/types@0.1.27': - resolution: {integrity: sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==} - - '@tanstack/query-core@5.101.2': - resolution: {integrity: sha512-hH5MLoJhF7KaIGd7q3xTXGXvslI+GYlM1Z/35aSHHWaCJWB7XvTSHYuV3eM7tw+aE0mT/xMro4M4Q9rCGHT0lw==} - - '@tanstack/query-devtools@5.101.2': - resolution: {integrity: sha512-o+wHcqgN7Pp0s8v1i0UGq/ZrrEKrxdIiMQmKRdYb2w7NPtylYSJ4+wg/tIn71m9DLstwUwdEGAvROdly6HXP6w==} - - '@tanstack/react-query-devtools@5.101.2': - resolution: {integrity: sha512-eU7HctdA9gDjqoERoEdzLbw9DiqnBDfh5+Hu0u26gjqoHJezOpQAuiesDL2VvkU+2cPV76zgv0tMZsOrI4LjnQ==} - peerDependencies: - '@tanstack/react-query': ^5.101.2 - react: ^18 || ^19 - - '@tanstack/react-query@5.101.2': - resolution: {integrity: sha512-seDkr6kzGzX1okaaTtZPtgA688CDPlXUz1C6xSg0ESqn04Vuc8tlrYms1s3de+znBqhPVxFRfpAfUf+6XvfPWg==} - peerDependencies: - react: ^18 || ^19 - - '@tanstack/react-virtual@3.14.6': - resolution: {integrity: sha512-4+Uq8m0/gzO4kMCHUEpTtGX1RnONK0C+g88b2ltwPMWUBiaVarBuWKoPJaz7gj1cKCVRAdyu+U8GcKhwCc2beA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tanstack/virtual-core@3.17.4': - resolution: {integrity: sha512-nGm5KteqxasUdThLc2izl6dHUqLv0LQj7Nuyo5gYalTPf/U8a9ermvsl7reT+6ioBW1l8WfpP/mcU338nLXpqw==} - - '@tauri-apps/api@2.11.1': - resolution: {integrity: sha512-M2FPuYND2m+wh5hfW9ZpSdxMPdEJovPBWwoHJmwUpysTYNHaOkVFN419m/K0LIgjb/7KU2vBgsUepJWugQCvAA==} - - '@tauri-apps/cli-darwin-arm64@2.11.4': - resolution: {integrity: sha512-1ryOF3ZhpZ/nemHV5zVwBQBz9jDGKmKPvWPADOhc83ig0P4bMc2iER4NbC6r9sjeIZ6RVQ4g3RZIYvezhcl4TQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@tauri-apps/cli-darwin-x64@2.11.4': - resolution: {integrity: sha512-uFsGQAAfuyz1k/yGLmkWfkBlgKAqZfxqlHmLWx81QU27RJWfmbNHCIq8T8w1e+VClleIuZUjpHWfoE4E3DLo3A==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@tauri-apps/cli-linux-arm-gnueabihf@2.11.4': - resolution: {integrity: sha512-IaHZn5CdBL21oUmjiVOS1ctw6Ip1O0pjp70FwOWmYz1myWe0SY96ZIj2FYf7pT0m8bI2h/hrs5ZbEXXh44/MkQ==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@tauri-apps/cli-linux-arm64-gnu@2.11.4': - resolution: {integrity: sha512-N41/ukTRVe6XSuUTESuFdGeOW2i7k62tK+6gHK5Kd5/q5RPvvi19GaWAVPPb9u95HSGmTChSolBfzynUsssFaA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@tauri-apps/cli-linux-arm64-musl@2.11.4': - resolution: {integrity: sha512-v277UnT/fB64xAfSroL5N3Km3tLmvATWqJJw/wRI+g6o+HkeD0slyE7gOhNs1MbjE41R7bQOTxMVoL3aomUJmw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@tauri-apps/cli-linux-riscv64-gnu@2.11.4': - resolution: {integrity: sha512-qqgNkQ2u1yZHxjhxsZaxUtRDW8dIqIYm33rx/mzwQv0SfY9x1B+iraj8vWeFiXjjSVVhEMepXSOts1TqPzvXNQ==} - engines: {node: '>= 10'} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@tauri-apps/cli-linux-x64-gnu@2.11.4': - resolution: {integrity: sha512-2VRNWl84FOH0m2giiDkO2h0QXlcMJeX+zJDpI5kDIQAx6s+geF3v48F4DXfJez4GS/FdoDGnPnw1C2iYGbQ7bQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@tauri-apps/cli-linux-x64-musl@2.11.4': - resolution: {integrity: sha512-o9GyhYor/nc7xarmwDE3ka2szuW3uuZzXjHWh64Q8YX5AtSgxdQkFWzrY4O8KiGtVNvFBI14H3Q49Qj5TOIP/A==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@tauri-apps/cli-win32-arm64-msvc@2.11.4': - resolution: {integrity: sha512-ld5Ehb598m0VkYyylRPNeCFsBe/km0jxis6KgMpl3IGY6I/i1RwQXO05I1AsXUXO2WC6AvB/Lw4qTf/asiuEiQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@tauri-apps/cli-win32-ia32-msvc@2.11.4': - resolution: {integrity: sha512-12Hxi0XX/H5VFxO/bGgHkFWhml9VMgEOu9CidjeCeTNQ1l6fpUlbiGgSP7CLI3PFtW9/FfbeHieZ+kyWK5H7CA==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - - '@tauri-apps/cli-win32-x64-msvc@2.11.4': - resolution: {integrity: sha512-+vDiqBIU5dMISg/wNvX3sF+ZHfgJGJ5T0AcO+EHNXV9GGAG+P5fzodlDXD3QdKCRgZxMoCm5PPvj3BqLNjBthw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@tauri-apps/cli@2.11.4': - resolution: {integrity: sha512-R8xGtMpwyetawSqm9kYOuMmEqkhUbvcUy8n0aNXIxollKBLESUu5f4Fx+64hgASYm1H+jSWq6jCW6zqTnH6hqQ==} - engines: {node: '>= 10'} - hasBin: true - - '@tauri-apps/plugin-clipboard-manager@2.3.2': - resolution: {integrity: sha512-CUlb5Hqi2oZbcZf4VUyUH53XWPPdtpw43EUpCza5HWZJwxEoDowFzNUDt1tRUXA8Uq+XPn17Ysfptip33sG4eQ==} - - '@tauri-apps/plugin-deep-link@2.4.9': - resolution: {integrity: sha512-u0SKOUHnJ1wqeqXsDFq2+kASCBj9xxbG0g9XZWPy9SOmU4wXtp6b/wiYpm6oH6/5fBTQsLqnLhIvqLBRpgHJlA==} - - '@tauri-apps/plugin-dialog@2.7.2': - resolution: {integrity: sha512-pX0IGm1I3I6wc+zeKYcq1GSqogK6okCNX5fOdaNU5ab1AjGS6l1E5wFNjEb7meg7ZFSp0JUs+0jQGQNyOvLrsg==} - - '@tauri-apps/plugin-fs@2.5.1': - resolution: {integrity: sha512-9Lz+Jopp6QyeEWhlpkMx4R/+P9HgR+AVAI4vOZhlT8Xaymtz8iVI/Ov984/XTqgJz/5gz5NretqPB/XEMS3NhQ==} - - '@tauri-apps/plugin-http@2.5.9': - resolution: {integrity: sha512-lCiY0+vs4HvIUSvZrBs8TC3TiCB0MOPRmiUjTq4prW7SlcJE2jdLeT6KBsJrT9Tlplufl7W1pY6SFAO3gCWxDA==} - - '@tauri-apps/plugin-log@2.9.0': - resolution: {integrity: sha512-Ql8okrnsguk0eDq1GvRfttFV5KaeW/7vcao6bdbkXCRJ1+2sWE15ZJvJVEKVANrOKy1mRngqC3IFIAP+wP5qSw==} - - '@tauri-apps/plugin-notification@2.3.3': - resolution: {integrity: sha512-Zw+ZH18RJb41G4NrfHgIuofJiymusqN+q8fGUIIV7vyCH+5sSn5coqRv/MWB9qETsUs97vmU045q7OyseCV3Qg==} - - '@tauri-apps/plugin-opener@2.5.4': - resolution: {integrity: sha512-1HnPkb+AmgO29HBazm4uPLKB+r7zzcTBW1d0fyYp1uP+jwtpoiNDGKMMzz58SFp49nOIrxdE3aUJtT57lfO9CQ==} - - '@tauri-apps/plugin-os@2.3.2': - resolution: {integrity: sha512-n+nXWeuSeF9wcEsSPmRnBEGrRgOy6jjkSU+UVCOV8YUGKb2erhDOxis7IqRXiRVHhY8XMKks00BJ0OAdkpf6+A==} - - '@tauri-apps/plugin-process@2.3.1': - resolution: {integrity: sha512-nCa4fGVaDL/B9ai03VyPOjfAHRHSBz5v6F/ObsB73r/dA3MHHhZtldaDMIc0V/pnUw9ehzr2iEG+XkSEyC0JJA==} - - '@tauri-apps/plugin-window-state@2.4.1': - resolution: {integrity: sha512-OuvdrzyY8Q5Dbzpj+GcrnV1iCeoZbcFdzMjanZMMcAEUNy/6PH5pxZPXpaZLOR7whlzXiuzx0L9EKZbH7zpdRw==} - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.27.0': - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.28.0': - resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - - '@types/byte-size@8.1.2': - resolution: {integrity: sha512-jGyVzYu6avI8yuqQCNTZd65tzI8HZrLjKX9sdMqZrGWVlNChu0rf6p368oVEDCYJe5BMx2Ov04tD1wqtgTwGSA==} - - '@types/d3-array@3.2.2': - resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} - - '@types/d3-color@3.1.3': - resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} - - '@types/d3-ease@3.0.2': - resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} - - '@types/d3-interpolate@3.0.4': - resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - - '@types/d3-path@3.1.1': - resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} - - '@types/d3-scale@4.0.9': - resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} - - '@types/d3-shape@3.1.8': - resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} - - '@types/d3-time@3.0.4': - resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} - - '@types/d3-timer@3.0.2': - resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} - - '@types/debug@4.1.13': - resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} - - '@types/estree-jsx@1.0.5': - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - - '@types/estree@1.0.9': - resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - - '@types/file-saver@2.0.7': - resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==} - - '@types/hast@3.0.5': - resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} - - '@types/lodash-es@4.17.12': - resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} - - '@types/lodash@4.17.24': - resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/node@26.1.1': - resolution: {integrity: sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==} - - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - - '@types/react-dom@19.2.3': - resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} - peerDependencies: - '@types/react': ^19.2.0 - - '@types/react@19.2.17': - resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} - - '@types/unist@2.0.11': - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@types/use-sync-external-store@0.0.6': - resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - - '@ungap/structured-clone@1.3.3': - resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==} - - '@use-gesture/core@10.3.1': - resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==} - - '@use-gesture/react@10.3.1': - resolution: {integrity: sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==} - peerDependencies: - react: '>= 16.8.0' - - '@vitejs/plugin-react-swc@4.3.1': - resolution: {integrity: sha512-PaeokKjAGraNN+s5SIApgsktnJprIyt3zgEIu7awnEdfn29QiB2crTcCzyi2XGpX9rUnTc0cKU07Wm0N0g7H2w==} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - vite: ^4 || ^5 || ^6 || ^7 || ^8 - - '@vitejs/plugin-react@5.2.0': - resolution: {integrity: sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - autoprefixer@10.5.4: - resolution: {integrity: sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - - bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - balanced-match@4.0.4: - resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} - engines: {node: 18 || 20 || >=22} - - baseline-browser-mapping@2.10.43: - resolution: {integrity: sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==} - engines: {node: '>=6.0.0'} - hasBin: true - - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - - brace-expansion@1.1.16: - resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} - - brace-expansion@2.1.2: - resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==} - - brace-expansion@5.0.7: - resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} - engines: {node: 18 || 20 || >=22} - - browserslist@4.28.6: - resolution: {integrity: sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - byte-size@9.0.1: - resolution: {integrity: sha512-YLe9x3rabBrcI0cueCdLS2l5ONUKywcRpTs02B8KP9/Cimhj7o3ZccGrPnRvcbyHMbb7W79/3MUJl7iGgTXKEw==} - engines: {node: '>=12.17'} - peerDependencies: - '@75lb/nature': latest - peerDependenciesMeta: - '@75lb/nature': - optional: true - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.9: - resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - caniuse-lite@1.0.30001806: - resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} - - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - - character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - - character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - - compare-versions@6.1.1: - resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - - cosmiconfig@8.3.6: - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - - cross-spawn@6.0.6: - resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} - engines: {node: '>=4.8'} - - css-select@5.2.2: - resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - - css-tree@2.2.1: - resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - css-what@6.2.2: - resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} - engines: {node: '>= 6'} - - csso@5.0.5: - resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - - csstype@3.2.3: - resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - - d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} - - d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - - d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} - - d3-format@3.1.2: - resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} - engines: {node: '>=12'} - - d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - - d3-path@3.1.0: - resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} - engines: {node: '>=12'} - - d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - - d3-shape@3.2.0: - resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} - engines: {node: '>=12'} - - d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - - d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} - - d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - - dashify@2.0.0: - resolution: {integrity: sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A==} - engines: {node: '>=4'} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - dayjs@1.11.21: - resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decimal.js-light@2.5.1: - resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} - - decode-named-character-reference@1.3.0: - resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} - - deepmerge-ts@7.1.5: - resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} - engines: {node: '>=16.0.0'} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - detect-browser@5.3.0: - resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - dom-serializer@3.1.1: - resolution: {integrity: sha512-4MEa38/QexBob6gFNwu+EGdWvhJ1OKuNwdYY3Y3NyeWDQfnGeDYQUDfIRzWu5B5gsv03so2Uxd28YC6zrsx3Lw==} - engines: {node: '>=20.19.0'} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domelementtype@3.0.0: - resolution: {integrity: sha512-umCQid3jKbDmVjx8jGaW7uUykm4DEUeyV21hPxNMo2nV955DhUThwqyOIDtreepP31hl84X7G5U9ZfsWvIB3Pg==} - engines: {node: '>=20.19.0'} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - domhandler@6.0.1: - resolution: {integrity: sha512-gYzvtM72ZtxQO0T048kd6HWSbbGCNOUwcnfQ01cqIJ4X2IYKFFHZ5mKvrQETcFXxsRObZulDaKmy//R7TPtsBg==} - engines: {node: '>=20.19.0'} - - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - - domutils@4.0.2: - resolution: {integrity: sha512-qI4JLRKnSzqFqr7hAlS5xQDusBCjKSEG4t4+7aNrIQMHBcsC2TGEhuyABJdYkgSewL57PNLYEiibY2iPKhKpaA==} - engines: {node: '>=20.19.0'} - - dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - electron-to-chromium@1.5.393: - resolution: {integrity: sha512-kiDJdIUawuEIcp9XoICKp1iTYDEbgguIPq526N1Q7jIQDeQ3CqoMx71025PI/7E48Ddtw2HuWsVjY7afEgNxmg==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - entities@8.0.0: - resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} - engines: {node: '>=20.19.0'} - - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - - es-abstract-get@1.0.0: - resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==} - engines: {node: '>= 0.4'} - - es-abstract@1.24.2: - resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.2: - resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.4: - resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} - engines: {node: '>= 0.4'} - - es-toolkit@1.49.0: - resolution: {integrity: sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g==} - - esbuild@0.28.1: - resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} - - eventemitter3@5.0.4: - resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - file-saver@2.0.5: - resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} - - find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - - fraction.js@5.3.4: - resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} - - framer-motion@12.42.2: - resolution: {integrity: sha512-5XY9luDiu0oHfHBjpDthFMh0ES+122w6p/papSJBweMkO8Sn+PW2QaEgRblQBpWFnuvZS5qvarpt/hO2pjGmnw==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.2.0: - resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - - get-text-width@1.0.3: - resolution: {integrity: sha512-kv1MaexPcR/qaZ4kN8sUDjG5pRp5ptHvxcDGDBTeGld1cmo7MnlCMH22jevyvs/VV7Ran203o7qAOq2+kWw9cA==} - - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.4: - resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} - engines: {node: '>= 0.4'} - - hast-util-sanitize@5.0.2: - resolution: {integrity: sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==} - - hast-util-to-jsx-runtime@2.3.6: - resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - - html-dom-parser@8.0.0: - resolution: {integrity: sha512-cWLJ8mt930VceOzVfY/J+T1ou9v3ENT0BgWqy5aEZjdFp37TYLXULjX8u0vD2rBpFAkK5IofOPl0y4Gq0QLIyA==} - - html-react-parser@6.1.5: - resolution: {integrity: sha512-jhdRR0fSkdkVlAmDIk5lS+IMSjCgFSfe+nI69DUwaxkWOgid2mk7RhoYxsQ7B6hzCghAI5YPz2B1jbskHhbaLg==} - peerDependencies: - '@types/react': 0.14 || 15 || 16 || 17 || 18 || 19 - react: 0.14 || 15 || 16 || 17 || 18 || 19 - peerDependenciesMeta: - '@types/react': - optional: true - - html-url-attributes@3.0.1: - resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} - - htmlparser2@12.0.0: - resolution: {integrity: sha512-Tz7u1i95/g2x2jz81+x0FBVhBhY5aRTvD3tXXdFaljuNdzDLJ8UGNRrTcj2cgQvAg3iW/h77Fz15nLW0L0CrZw==} - engines: {node: '>=20.19.0'} - - immer@11.1.15: - resolution: {integrity: sha512-VrNANlmnWQnh5COXIIOQXM9oOJw7naGKlBT74ZOOR6lpVXc3gFEu9FJLDFcpCJ2j+NWr8TIwtWD//T6ZX6TKiQ==} - - immutable@5.1.9: - resolution: {integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - inline-style-parser@0.2.7: - resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} - - inline-style-parser@0.2.9: - resolution: {integrity: sha512-IttN8BqKLxzUrnTqHI+/hwAJQItBAUjdoHERCDv+oOuX48VP6bzW8+QjOXSfoevzq3YrYAwX1uLHp8TqO9yIeg==} - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - - is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - - is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.2: - resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - - is-document.all@1.0.0: - resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - itertools@2.7.1: - resolution: {integrity: sha512-xrbTDDdUfkJhM4EzYOwwzEf2ksPT5WLgQ5i2X9X5yUpcmXJPEjeAnpMl1tIrYDzuCD19/AEH+cbLunQHGn8v7w==} - engines: {node: '>=22'} - - js-base64@3.9.1: - resolution: {integrity: sha512-U73qptcvf/HIOauFOmqT3a0mDUp0MYlfd15oqoe9kqZt5XhiXVb+HG09sLvI9PQ9tZIBFS4nlErai8zbWazP0g==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.3.0: - resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} - hasBin: true - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - linkify-it@5.0.2: - resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} - - little-state-machine@4.8.1: - resolution: {integrity: sha512-liPHqaWMQ7rzZryQUDnbZ1Gclnnai3dIyaJ0nAgwZRXMzqbYrydrlCI0NDojRUbE5VYh5vu6hygEUZiH77nQkQ==} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - - load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} - - lodash-es@4.18.1: - resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} - - lodash@4.18.1: - resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} - - longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lunr@2.3.9: - resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - - markdown-it@14.3.0: - resolution: {integrity: sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==} - hasBin: true - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mdast-util-from-markdown@2.0.3: - resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} - - mdast-util-mdx-expression@2.0.1: - resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} - - mdast-util-mdx-jsx@3.2.0: - resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} - - mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} - - mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - - mdast-util-to-hast@13.2.1: - resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} - - mdast-util-to-markdown@2.1.2: - resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} - - mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - - mdn-data@2.0.28: - resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - - mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - - memorystream@0.3.1: - resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} - engines: {node: '>= 0.10.0'} - - merge-refs@2.0.0: - resolution: {integrity: sha512-3+B21mYK2IqUWnd2EivABLT7ueDhb0b8/dGK8LoFQPrU61YITeCMn14F7y7qZafWNZhUEKb24cJdiT5Wxs3prg==} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - micromark-core-commonmark@2.0.3: - resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} - - micromark-factory-destination@2.0.1: - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} - - micromark-factory-label@2.0.1: - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - - micromark-factory-space@2.0.1: - resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} - - micromark-factory-title@2.0.1: - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} - - micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} - - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - - micromark-util-chunked@2.0.1: - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} - - micromark-util-classify-character@2.0.1: - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} - - micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - - micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - - micromark-util-decode-string@2.0.1: - resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - - micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - - micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - - micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - - micromark-util-subtokenize@2.1.0: - resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - - micromark@4.0.2: - resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - - millify@6.1.0: - resolution: {integrity: sha512-H/E3J6t+DQs/F2YgfDhxUVZz/dF8JXPPKTLHL/yHCcLZLtCXJDUaqvhJXQwqOVBvbyNn4T0WjLpIHd7PAw7fBA==} - hasBin: true - - minimatch@10.2.5: - resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} - engines: {node: 18 || 20 || >=22} - - minimatch@3.1.5: - resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - - minimatch@5.1.9: - resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} - engines: {node: '>=10'} - - motion-dom@12.42.2: - resolution: {integrity: sha512-5gIMWLp/PycBtJRJWRgjxke5n8dlvkSn2DrYW+tr3XcqAZY1xZh6BJyooJXCM8wdfM7wfMjkBJNLge1CKPUIRA==} - - motion-utils@12.39.0: - resolution: {integrity: sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==} - - motion@12.42.2: - resolution: {integrity: sha512-Atvv11yUKIid41cVrRBDVX5m8tF8kNpExRSlbpt6APClhDjtwQssgFHhQzejxw7/7YYbjHSPKBVbHo05BuJT5Q==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - nanoid@3.3.16: - resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - - no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - - node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - - node-releases@2.0.51: - resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} - engines: {node: '>=18'} - - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - - npm-run-all@4.1.5: - resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} - engines: {node: '>= 4'} - hasBin: true - - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - - p-timeout@7.0.1: - resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} - engines: {node: '>=20'} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-entities@4.0.2: - resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - - parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@4.0.5: - resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} - engines: {node: '>=12'} - - pidtree@0.3.1: - resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} - engines: {node: '>=0.10'} - hasBin: true - - pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.5.20: - resolution: {integrity: sha512-lW616l85ucIQL+FocMmL7pQFPqBmwejrCMg+iPxyImlrANNJG9NHq/RkyCZopDhd8C3LA03PHRJDjkbGu8vvug==} - engines: {node: ^10 || ^12 || >=14} - - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - - prettier@3.9.5: - resolution: {integrity: sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==} - engines: {node: '>=14'} - hasBin: true - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - property-information@7.2.0: - resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} - - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - - qrcode-generator@2.0.4: - resolution: {integrity: sha512-mZSiP6RnbHl4xL2Ap5HfkjLnmxfKcPWpWe/c+5XxCuetEenqmNFf1FH/ftXPCtFG5/TDobjsjz6sSNL0Sr8Z9g==} - - radash@12.1.1: - resolution: {integrity: sha512-h36JMxKRqrAxVD8201FrCpyeNuUY9Y5zZwujr20fFO77tpUtGa6EZzfKw/3WaiBX95fq7+MpsuMLNdSnORAwSA==} - engines: {node: '>=14.18.0'} - - react-auth-code-input@3.2.1: - resolution: {integrity: sha512-oWWKbxDLU5g46gvE1DIvNFHsDx37JSAfB6WX8luG6TWZB3iDfKMjQnhUgb+0imL/6ykGVMqdZ426tQW1uj25kg==} - engines: {node: '>=10'} - peerDependencies: - react: '>=16.0.0' - - react-click-away-listener@2.4.2: - resolution: {integrity: sha512-043CBfIe9SYzfAb/MK4mnIOGpRG+GFHHqkHv4QUrKmuVlUtV3PcNoxd6hAh5+RHgtgVLQfneYsznS8lbc9QtqA==} - engines: {node: '>=18'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - react-dom@19.2.7: - resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} - peerDependencies: - react: ^19.2.7 - - react-hook-form@7.82.0: - resolution: {integrity: sha512-Zw/uFZ2dO+02GHlBn7JFGn8kZJ7LdM33B/0BXOovzFay+CMhf94JMw5BVu+F1tVkUKjNvBuaE3fz5BJhga10Tg==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - - react-hotkeys-hook@5.3.3: - resolution: {integrity: sha512-aswgyWUnE25hmhzHTfKDmKzsaSE5DJ4LKaU/o6rQSXkDd/1Bh9TfAFQbHkf6fLy11HvlYkp+cDDarGdhmCDhoQ==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-loading-skeleton@3.5.0: - resolution: {integrity: sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ==} - peerDependencies: - react: '>=16.8.0' - - react-markdown@10.1.0: - resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==} - peerDependencies: - '@types/react': '>=18' - react: '>=18' - - react-property@2.0.2: - resolution: {integrity: sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug==} - - react-qr-code@2.2.0: - resolution: {integrity: sha512-e5nS0UUN22K3Nf8KBRUzemfdJ6OmnN5w+kbnj1lvJaol9RyVRFeGl05bCkxSN2ZegbLxjjYjX1+mmAoX9+fAhw==} - peerDependencies: - react: '*' - - react-redux@9.3.0: - resolution: {integrity: sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==} - peerDependencies: - '@types/react': ^18.2.25 || ^19 - react: ^18.0 || ^19 - redux: ^5.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - redux: - optional: true - - react-refresh@0.18.0: - resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} - engines: {node: '>=0.10.0'} - - react-router-dom@6.30.4: - resolution: {integrity: sha512-q4HvNl+mmDdkS0g+MqiBZNteQJCuimWoOyHMy4T/RQLAn9Z29+E91QXRaxOujeMl2HTzRSS0KFPd7lxX3PjV0Q==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - - react-router@6.30.4: - resolution: {integrity: sha512-SVUsDe+DybHM/WmYKIVYhZh1o5Dcuf16yM6WjG02Q9XVFMZIJyHYhwrr6bFBXZkVP6z69kNkMyBCujt8FaFLJA==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - - react-simple-animate@3.5.3: - resolution: {integrity: sha512-Ob+SmB5J1tXDEZyOe2Hf950K4M8VaWBBmQ3cS2BUnTORqHjhK0iKG8fB+bo47ZL15t8d3g/Y0roiqH05UBjG7A==} - peerDependencies: - react-dom: ^16.8.0 || ^17 || ^18 || ^19 - - react-use-websocket@4.13.0: - resolution: {integrity: sha512-anMuVoV//g2N76Wxqvqjjo1X48r9Np3y1/gMl7arX84tAPXdy5R7sB5lO5hvCzQRYjqXwV8XMAiEBOUbyrZFrw==} - - react-virtualized-auto-sizer@1.0.26: - resolution: {integrity: sha512-CblNyiNVw2o+hsa5/49NH2ogGxZ+t+3aweRvNSq7TVjDIlwk7ir4lencEg5HxHeSzwNarSkNkiu0qJSOXtxm5A==} - peerDependencies: - react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0 - - react@19.2.7: - resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} - engines: {node: '>=0.10.0'} - - read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} - - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - recharts@3.9.2: - resolution: {integrity: sha512-G4fy+Pk46RaXgwWMh+Nzhyo/lbFAVqXo9gtetlyehe6Ehge9CsgDuOTwQDD+i1+llaLktNBiNq4bhnGlDRXFtw==} - engines: {node: '>=18'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-is: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - redux-thunk@3.1.0: - resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} - peerDependencies: - redux: ^5.0.0 - - redux@5.0.1: - resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - rehype-sanitize@6.0.0: - resolution: {integrity: sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==} - - remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - - remark-rehype@11.1.2: - resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - reselect@5.2.0: - resolution: {integrity: sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve@1.22.12: - resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} - engines: {node: '>= 0.4'} - hasBin: true - - rollup@4.62.2: - resolution: {integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - - safe-array-concat@1.1.4: - resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} - engines: {node: '>=0.4'} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - sass@1.92.1: - resolution: {integrity: sha512-ffmsdbwqb3XeyR8jJR6KelIXARM9bFQe8A6Q3W4Klmwy5Ckd5gz7jgUNHo4UOqutU5Sk1DtKLbpDP0nLCg1xqQ==} - engines: {node: '>=14.0.0'} - hasBin: true - - sax@1.6.0: - resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} - engines: {node: '>=11.0.0'} - - scheduler@0.27.0: - resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} - - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - - shell-quote@1.10.0: - resolution: {integrity: sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==} - engines: {node: '>= 0.4'} - - side-channel-list@1.0.1: - resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.1: - resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} - engines: {node: '>= 0.4'} - - snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-license-ids@3.0.23: - resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} - - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string.prototype.padend@3.1.6: - resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} - engines: {node: '>= 0.4'} - - string.prototype.trim@1.2.11: - resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.10: - resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - style-to-js@1.1.21: - resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} - - style-to-js@2.0.2: - resolution: {integrity: sha512-ctgbFvvi406Jvhi/s6TJtX6XYYCCTg6POgsL+SLmrl2RHFgwulepqtYPrtKuEmT8kmyk/+fxfNzuhRLO4zsASg==} - - style-to-object@1.0.14: - resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} - - style-to-object@2.0.2: - resolution: {integrity: sha512-QmbXPUylqU80HAgTOJeEOdbA40W9KtxmjMhQy+tq+b8F2aoh3aQLuy82hh2jm2qsC9hR9eI0+eQidTMydKcqRA==} - - stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - - svgo@3.3.4: - resolution: {integrity: sha512-GsNRis4e8jxn2Y9ENz/8lbJ93CstG8svtMnuRaHbiF2LTJ5tK0/q3t/URPq9Zc7zVWBJnNnJMIp6bevK7bSmNg==} - engines: {node: '>=14.0.0'} - hasBin: true - - tabbable@6.5.0: - resolution: {integrity: sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==} - - tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - - tinyglobby@0.2.17: - resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} - engines: {node: '>=12.0.0'} - - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - - trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.8: - resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} - engines: {node: '>= 0.4'} - - typedoc@0.28.20: - resolution: {integrity: sha512-uSKqkh8Cr48vllnEy+jdaAgOeR6Y+QCBW7usgUsKj7gJEfR7stw9U/fE49LBnj2tPRKPY0c0EBJSWe9Appmplg==} - engines: {node: '>= 18', pnpm: '>= 10'} - hasBin: true - peerDependencies: - typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x - - typesafe-i18n@5.27.1: - resolution: {integrity: sha512-749uWo2ZXETT//kWjVYPm8QPYR8xLh8G0wLfoAyCAtAmysX67uCaAyLjAjAWojL6fuJpE5B6yIjwvO9orXzUPg==} - hasBin: true - peerDependencies: - typescript: '>=3.5.1' - - typescript@6.0.3: - resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} - engines: {node: '>=14.17'} - hasBin: true - - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - undici-types@8.3.0: - resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} - - unified@11.0.5: - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - - unist-util-is@6.0.1: - resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-parents@6.0.2: - resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} - - unist-util-visit@5.1.0: - resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} - - update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - use-breakpoint@4.0.10: - resolution: {integrity: sha512-rnUpZwCQCTtexbpM8S5aiJrfIx6NTvt0WwATiH4hCBN6gQNgkYPFoFt6g/3pAuyqU9D9tLKwXfsVqEWMBnwo6A==} - deprecated: This package is no longer maintained and will not be updated on registry.npmjs.com. You can copy the source directly into your own code to keep using it. - peerDependencies: - react: '>=18' - react-dom: '>=18' - - use-deep-compare-effect@1.8.1: - resolution: {integrity: sha512-kbeNVZ9Zkc0RFGpfMN3MNfaKNvcLNyxOAAd9O4CBZ+kCBXXscn9s/4I+8ytUER4RDpEYs5+O6Rs4PqiZ+rHr5Q==} - engines: {node: '>=10', npm: '>=6'} - peerDependencies: - react: '>=16.13' - - use-sync-external-store@1.6.0: - resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). - hasBin: true - - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - - vfile-message@4.0.3: - resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - - victory-vendor@37.3.6: - resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} - - vite@7.3.6: - resolution: {integrity: sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.22: - resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} - engines: {node: '>= 0.4'} - - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yaml@1.10.3: - resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} - engines: {node: '>= 6'} - - yaml@2.9.0: - resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} - engines: {node: '>= 14.6'} - hasBin: true - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.3: - resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} - engines: {node: '>=12'} - - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - - zustand@5.0.14: - resolution: {integrity: sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g==} - engines: {node: '>=12.20.0'} - peerDependencies: - '@types/react': '>=18.0.0' - immer: '>=9.0.6' - react: '>=18.0.0' - use-sync-external-store: '>=1.2.0' - peerDependenciesMeta: - '@types/react': - optional: true - immer: - optional: true - react: - optional: true - use-sync-external-store: - optional: true - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - -snapshots: - - '@babel/code-frame@7.29.7': - dependencies: - '@babel/helper-validator-identifier': 7.29.7 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.29.7': {} - - '@babel/core@7.29.7(supports-color@7.2.0)': - dependencies: - '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 - '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/helpers': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@7.2.0) - '@babel/types': 7.29.7 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3(supports-color@7.2.0) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.29.7': - dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-compilation-targets@7.29.7': - dependencies: - '@babel/compat-data': 7.29.7 - '@babel/helper-validator-option': 7.29.7 - browserslist: 4.28.6 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-globals@7.29.7': {} - - '@babel/helper-module-imports@7.29.7(supports-color@7.2.0)': - dependencies: - '@babel/traverse': 7.29.7(supports-color@7.2.0) - '@babel/types': 7.29.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) - '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@7.2.0) - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.29.7': {} - - '@babel/helper-string-parser@7.29.7': {} - - '@babel/helper-validator-identifier@7.29.7': {} - - '@babel/helper-validator-option@7.29.7': {} - - '@babel/helpers@7.29.7': - dependencies: - '@babel/template': 7.29.7 - '@babel/types': 7.29.7 - - '@babel/parser@7.29.7': - dependencies: - '@babel/types': 7.29.7 - - '@babel/plugin-transform-react-jsx-self@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-transform-react-jsx-source@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/runtime@7.29.7': {} - - '@babel/template@7.29.7': - dependencies: - '@babel/code-frame': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 - - '@babel/traverse@7.29.7(supports-color@7.2.0)': - dependencies: - '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 - '@babel/helper-globals': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/template': 7.29.7 - '@babel/types': 7.29.7 - debug: 4.4.3(supports-color@7.2.0) - transitivePeerDependencies: - - supports-color - - '@babel/types@7.29.7': - dependencies: - '@babel/helper-string-parser': 7.29.7 - '@babel/helper-validator-identifier': 7.29.7 - - '@biomejs/biome@2.4.16': - optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.4.16 - '@biomejs/cli-darwin-x64': 2.4.16 - '@biomejs/cli-linux-arm64': 2.4.16 - '@biomejs/cli-linux-arm64-musl': 2.4.16 - '@biomejs/cli-linux-x64': 2.4.16 - '@biomejs/cli-linux-x64-musl': 2.4.16 - '@biomejs/cli-win32-arm64': 2.4.16 - '@biomejs/cli-win32-x64': 2.4.16 - - '@biomejs/cli-darwin-arm64@2.4.16': - optional: true - - '@biomejs/cli-darwin-x64@2.4.16': - optional: true - - '@biomejs/cli-linux-arm64-musl@2.4.16': - optional: true - - '@biomejs/cli-linux-arm64@2.4.16': - optional: true - - '@biomejs/cli-linux-x64-musl@2.4.16': - optional: true - - '@biomejs/cli-linux-x64@2.4.16': - optional: true - - '@biomejs/cli-win32-arm64@2.4.16': - optional: true - - '@biomejs/cli-win32-x64@2.4.16': - optional: true - - '@emotion/babel-plugin@11.13.5(supports-color@7.2.0)': - dependencies: - '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) - '@babel/runtime': 7.29.7 - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/serialize': 1.3.3 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - transitivePeerDependencies: - - supports-color - - '@emotion/cache@11.14.0': - dependencies: - '@emotion/memoize': 0.9.0 - '@emotion/sheet': 1.4.0 - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.4.0 - stylis: 4.2.0 - - '@emotion/hash@0.9.2': {} - - '@emotion/is-prop-valid@1.4.0': - dependencies: - '@emotion/memoize': 0.9.0 - - '@emotion/memoize@0.9.0': {} - - '@emotion/react@11.14.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0)': - dependencies: - '@babel/runtime': 7.29.7 - '@emotion/babel-plugin': 11.13.5(supports-color@7.2.0) - '@emotion/cache': 11.14.0 - '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.7) - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.4.0 - hoist-non-react-statics: 3.3.2 - react: 19.2.7 - optionalDependencies: - '@types/react': 19.2.17 - transitivePeerDependencies: - - supports-color - - '@emotion/serialize@1.3.3': - dependencies: - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/unitless': 0.10.0 - '@emotion/utils': 1.4.2 - csstype: 3.2.3 - - '@emotion/sheet@1.4.0': {} - - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0))(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0)': - dependencies: - '@babel/runtime': 7.29.7 - '@emotion/babel-plugin': 11.13.5(supports-color@7.2.0) - '@emotion/is-prop-valid': 1.4.0 - '@emotion/react': 11.14.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0) - '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.7) - '@emotion/utils': 1.4.2 - react: 19.2.7 - optionalDependencies: - '@types/react': 19.2.17 - transitivePeerDependencies: - - supports-color - - '@emotion/unitless@0.10.0': {} - - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.7)': - dependencies: - react: 19.2.7 - - '@emotion/utils@1.4.2': {} - - '@emotion/weak-memoize@0.4.0': {} - - '@esbuild/aix-ppc64@0.28.1': - optional: true - - '@esbuild/android-arm64@0.28.1': - optional: true - - '@esbuild/android-arm@0.28.1': - optional: true - - '@esbuild/android-x64@0.28.1': - optional: true - - '@esbuild/darwin-arm64@0.28.1': - optional: true - - '@esbuild/darwin-x64@0.28.1': - optional: true - - '@esbuild/freebsd-arm64@0.28.1': - optional: true - - '@esbuild/freebsd-x64@0.28.1': - optional: true - - '@esbuild/linux-arm64@0.28.1': - optional: true - - '@esbuild/linux-arm@0.28.1': - optional: true - - '@esbuild/linux-ia32@0.28.1': - optional: true - - '@esbuild/linux-loong64@0.28.1': - optional: true - - '@esbuild/linux-mips64el@0.28.1': - optional: true - - '@esbuild/linux-ppc64@0.28.1': - optional: true - - '@esbuild/linux-riscv64@0.28.1': - optional: true - - '@esbuild/linux-s390x@0.28.1': - optional: true - - '@esbuild/linux-x64@0.28.1': - optional: true - - '@esbuild/netbsd-arm64@0.28.1': - optional: true - - '@esbuild/netbsd-x64@0.28.1': - optional: true - - '@esbuild/openbsd-arm64@0.28.1': - optional: true - - '@esbuild/openbsd-x64@0.28.1': - optional: true - - '@esbuild/openharmony-arm64@0.28.1': - optional: true - - '@esbuild/sunos-x64@0.28.1': - optional: true - - '@esbuild/win32-arm64@0.28.1': - optional: true - - '@esbuild/win32-ia32@0.28.1': - optional: true - - '@esbuild/win32-x64@0.28.1': - optional: true - - '@floating-ui/core@1.8.0': - dependencies: - '@floating-ui/utils': 0.2.12 - - '@floating-ui/dom@1.8.0': - dependencies: - '@floating-ui/core': 1.8.0 - '@floating-ui/utils': 0.2.12 - - '@floating-ui/react-dom@2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': - dependencies: - '@floating-ui/dom': 1.8.0 - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - - '@floating-ui/react@0.27.20(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': - dependencies: - '@floating-ui/react-dom': 2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@floating-ui/utils': 0.2.12 - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - tabbable: 6.5.0 - - '@floating-ui/utils@0.2.12': {} - - '@gerrit0/mini-shiki@3.23.0': - dependencies: - '@shikijs/engine-oniguruma': 3.23.0 - '@shikijs/langs': 3.23.0 - '@shikijs/themes': 3.23.0 - '@shikijs/types': 3.23.0 - '@shikijs/vscode-textmate': 10.0.2 - - '@hookform/devtools@4.4.0(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@7.2.0)': - dependencies: - '@emotion/react': 11.14.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0))(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0) - '@types/lodash': 4.17.24 - little-state-machine: 4.8.1(react@19.2.7) - lodash: 4.18.1 - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - react-simple-animate: 3.5.3(react-dom@19.2.7(react@19.2.7)) - use-deep-compare-effect: 1.8.1(react@19.2.7) - uuid: 8.3.2 - transitivePeerDependencies: - - '@types/react' - - supports-color - - '@hookform/resolvers@3.10.0(react-hook-form@7.82.0(react@19.2.7))': - dependencies: - react-hook-form: 7.82.0(react@19.2.7) - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@parcel/watcher-android-arm64@2.6.0': - optional: true - - '@parcel/watcher-darwin-arm64@2.6.0': - optional: true - - '@parcel/watcher-darwin-x64@2.6.0': - optional: true - - '@parcel/watcher-freebsd-x64@2.6.0': - optional: true - - '@parcel/watcher-linux-arm-glibc@2.6.0': - optional: true - - '@parcel/watcher-linux-arm-musl@2.6.0': - optional: true - - '@parcel/watcher-linux-arm64-glibc@2.6.0': - optional: true - - '@parcel/watcher-linux-arm64-musl@2.6.0': - optional: true - - '@parcel/watcher-linux-x64-glibc@2.6.0': - optional: true - - '@parcel/watcher-linux-x64-musl@2.6.0': - optional: true - - '@parcel/watcher-win32-arm64@2.6.0': - optional: true - - '@parcel/watcher-win32-x64@2.6.0': - optional: true - - '@parcel/watcher@2.6.0': - dependencies: - detect-libc: 2.1.2 - is-glob: 4.0.3 - node-addon-api: 7.1.1 - picomatch: 4.0.5 - optionalDependencies: - '@parcel/watcher-android-arm64': 2.6.0 - '@parcel/watcher-darwin-arm64': 2.6.0 - '@parcel/watcher-darwin-x64': 2.6.0 - '@parcel/watcher-freebsd-x64': 2.6.0 - '@parcel/watcher-linux-arm-glibc': 2.6.0 - '@parcel/watcher-linux-arm-musl': 2.6.0 - '@parcel/watcher-linux-arm64-glibc': 2.6.0 - '@parcel/watcher-linux-arm64-musl': 2.6.0 - '@parcel/watcher-linux-x64-glibc': 2.6.0 - '@parcel/watcher-linux-x64-musl': 2.6.0 - '@parcel/watcher-win32-arm64': 2.6.0 - '@parcel/watcher-win32-x64': 2.6.0 - optional: true - - '@react-hook/latest@1.0.3(react@19.2.7)': - dependencies: - react: 19.2.7 - - '@react-hook/passive-layout-effect@1.2.1(react@19.2.7)': - dependencies: - react: 19.2.7 - - '@react-hook/resize-observer@2.0.2(react@19.2.7)': - dependencies: - '@react-hook/latest': 1.0.3(react@19.2.7) - '@react-hook/passive-layout-effect': 1.2.1(react@19.2.7) - react: 19.2.7 - - '@reduxjs/toolkit@2.12.0(react-redux@9.3.0(@types/react@19.2.17)(react@19.2.7)(redux@5.0.1))(react@19.2.7)': - dependencies: - '@standard-schema/spec': 1.1.0 - '@standard-schema/utils': 0.3.0 - immer: 11.1.15 - redux: 5.0.1 - redux-thunk: 3.1.0(redux@5.0.1) - reselect: 5.2.0 - optionalDependencies: - react: 19.2.7 - react-redux: 9.3.0(@types/react@19.2.17)(react@19.2.7)(redux@5.0.1) - - '@remix-run/router@1.23.3': {} - - '@rolldown/pluginutils@1.0.0-rc.3': {} - - '@rolldown/pluginutils@1.0.1': {} - - '@rollup/rollup-android-arm-eabi@4.62.2': - optional: true - - '@rollup/rollup-android-arm64@4.62.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.62.2': - optional: true - - '@rollup/rollup-darwin-x64@4.62.2': - optional: true - - '@rollup/rollup-freebsd-arm64@4.62.2': - optional: true - - '@rollup/rollup-freebsd-x64@4.62.2': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.62.2': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.62.2': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.62.2': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.62.2': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.62.2': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.62.2': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.62.2': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.62.2': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.62.2': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.62.2': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.62.2': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.62.2': - optional: true - - '@rollup/rollup-linux-x64-musl@4.62.2': - optional: true - - '@rollup/rollup-openbsd-x64@4.62.2': - optional: true - - '@rollup/rollup-openharmony-arm64@4.62.2': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.62.2': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.62.2': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.62.2': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.62.2': - optional: true - - '@shikijs/engine-oniguruma@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/langs@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - - '@shikijs/themes@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - - '@shikijs/types@3.23.0': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.5 - - '@shikijs/vscode-textmate@10.0.2': {} - - '@stablelib/base64@2.0.1': {} - - '@stablelib/binary@2.0.1': - dependencies: - '@stablelib/int': 2.0.1 - - '@stablelib/bytes@2.0.1': {} - - '@stablelib/int@2.0.1': {} - - '@stablelib/keyagreement@2.0.1': - dependencies: - '@stablelib/bytes': 2.0.1 - - '@stablelib/random@2.0.1': - dependencies: - '@stablelib/binary': 2.0.1 - '@stablelib/wipe': 2.0.1 - - '@stablelib/wipe@2.0.1': {} - - '@stablelib/x25519@2.0.1': - dependencies: - '@stablelib/keyagreement': 2.0.1 - '@stablelib/random': 2.0.1 - '@stablelib/wipe': 2.0.1 - - '@standard-schema/spec@1.1.0': {} - - '@standard-schema/utils@0.3.0': {} - - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.7(supports-color@7.2.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - - '@svgr/babel-preset@8.1.0(@babel/core@7.29.7(supports-color@7.2.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.7(supports-color@7.2.0)) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) - - '@svgr/cli@8.1.0(supports-color@7.2.0)(typescript@6.0.3)': - dependencies: - '@svgr/core': 8.1.0(supports-color@7.2.0)(typescript@6.0.3) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3))(supports-color@7.2.0) - '@svgr/plugin-prettier': 8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3))(typescript@6.0.3) - camelcase: 6.3.0 - chalk: 4.1.2 - commander: 9.5.0 - dashify: 2.0.0 - glob: 8.1.0 - snake-case: 3.0.4 - transitivePeerDependencies: - - supports-color - - typescript - - '@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3)': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7(supports-color@7.2.0)) - camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@6.0.3) - snake-case: 3.0.4 - transitivePeerDependencies: - - supports-color - - typescript - - '@svgr/hast-util-to-babel-ast@8.0.0': - dependencies: - '@babel/types': 7.29.7 - entities: 4.5.0 - - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3))(supports-color@7.2.0)': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7(supports-color@7.2.0)) - '@svgr/core': 8.1.0(supports-color@7.2.0)(typescript@6.0.3) - '@svgr/hast-util-to-babel-ast': 8.0.0 - svg-parser: 2.0.4 - transitivePeerDependencies: - - supports-color - - '@svgr/plugin-prettier@8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3))': - dependencies: - '@svgr/core': 8.1.0(supports-color@7.2.0)(typescript@6.0.3) - deepmerge: 4.3.1 - prettier: 2.8.8 - - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@6.0.3))(typescript@6.0.3)': - dependencies: - '@svgr/core': 8.1.0(supports-color@7.2.0)(typescript@6.0.3) - cosmiconfig: 8.3.6(typescript@6.0.3) - deepmerge: 4.3.1 - svgo: 3.3.4 - transitivePeerDependencies: - - typescript - - '@swc/core-darwin-arm64@1.15.46': - optional: true - - '@swc/core-darwin-x64@1.15.46': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.15.46': - optional: true - - '@swc/core-linux-arm64-gnu@1.15.46': - optional: true - - '@swc/core-linux-arm64-musl@1.15.46': - optional: true - - '@swc/core-linux-ppc64-gnu@1.15.46': - optional: true - - '@swc/core-linux-s390x-gnu@1.15.46': - optional: true - - '@swc/core-linux-x64-gnu@1.15.46': - optional: true - - '@swc/core-linux-x64-musl@1.15.46': - optional: true - - '@swc/core-win32-arm64-msvc@1.15.46': - optional: true - - '@swc/core-win32-ia32-msvc@1.15.46': - optional: true - - '@swc/core-win32-x64-msvc@1.15.46': - optional: true - - '@swc/core@1.15.46': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.27 - optionalDependencies: - '@swc/core-darwin-arm64': 1.15.46 - '@swc/core-darwin-x64': 1.15.46 - '@swc/core-linux-arm-gnueabihf': 1.15.46 - '@swc/core-linux-arm64-gnu': 1.15.46 - '@swc/core-linux-arm64-musl': 1.15.46 - '@swc/core-linux-ppc64-gnu': 1.15.46 - '@swc/core-linux-s390x-gnu': 1.15.46 - '@swc/core-linux-x64-gnu': 1.15.46 - '@swc/core-linux-x64-musl': 1.15.46 - '@swc/core-win32-arm64-msvc': 1.15.46 - '@swc/core-win32-ia32-msvc': 1.15.46 - '@swc/core-win32-x64-msvc': 1.15.46 - - '@swc/counter@0.1.3': {} - - '@swc/types@0.1.27': - dependencies: - '@swc/counter': 0.1.3 - - '@tanstack/query-core@5.101.2': {} - - '@tanstack/query-devtools@5.101.2': {} - - '@tanstack/react-query-devtools@5.101.2(@tanstack/react-query@5.101.2(react@19.2.7))(react@19.2.7)': - dependencies: - '@tanstack/query-devtools': 5.101.2 - '@tanstack/react-query': 5.101.2(react@19.2.7) - react: 19.2.7 - - '@tanstack/react-query@5.101.2(react@19.2.7)': - dependencies: - '@tanstack/query-core': 5.101.2 - react: 19.2.7 - - '@tanstack/react-virtual@3.14.6(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': - dependencies: - '@tanstack/virtual-core': 3.17.4 - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - - '@tanstack/virtual-core@3.17.4': {} - - '@tauri-apps/api@2.11.1': {} - - '@tauri-apps/cli-darwin-arm64@2.11.4': - optional: true - - '@tauri-apps/cli-darwin-x64@2.11.4': - optional: true - - '@tauri-apps/cli-linux-arm-gnueabihf@2.11.4': - optional: true - - '@tauri-apps/cli-linux-arm64-gnu@2.11.4': - optional: true - - '@tauri-apps/cli-linux-arm64-musl@2.11.4': - optional: true - - '@tauri-apps/cli-linux-riscv64-gnu@2.11.4': - optional: true - - '@tauri-apps/cli-linux-x64-gnu@2.11.4': - optional: true - - '@tauri-apps/cli-linux-x64-musl@2.11.4': - optional: true - - '@tauri-apps/cli-win32-arm64-msvc@2.11.4': - optional: true - - '@tauri-apps/cli-win32-ia32-msvc@2.11.4': - optional: true - - '@tauri-apps/cli-win32-x64-msvc@2.11.4': - optional: true - - '@tauri-apps/cli@2.11.4': - optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 2.11.4 - '@tauri-apps/cli-darwin-x64': 2.11.4 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.11.4 - '@tauri-apps/cli-linux-arm64-gnu': 2.11.4 - '@tauri-apps/cli-linux-arm64-musl': 2.11.4 - '@tauri-apps/cli-linux-riscv64-gnu': 2.11.4 - '@tauri-apps/cli-linux-x64-gnu': 2.11.4 - '@tauri-apps/cli-linux-x64-musl': 2.11.4 - '@tauri-apps/cli-win32-arm64-msvc': 2.11.4 - '@tauri-apps/cli-win32-ia32-msvc': 2.11.4 - '@tauri-apps/cli-win32-x64-msvc': 2.11.4 - - '@tauri-apps/plugin-clipboard-manager@2.3.2': - dependencies: - '@tauri-apps/api': 2.11.1 - - '@tauri-apps/plugin-deep-link@2.4.9': - dependencies: - '@tauri-apps/api': 2.11.1 - - '@tauri-apps/plugin-dialog@2.7.2': - dependencies: - '@tauri-apps/api': 2.11.1 - - '@tauri-apps/plugin-fs@2.5.1': - dependencies: - '@tauri-apps/api': 2.11.1 - - '@tauri-apps/plugin-http@2.5.9': - dependencies: - '@tauri-apps/api': 2.11.1 - - '@tauri-apps/plugin-log@2.9.0': - dependencies: - '@tauri-apps/api': 2.11.1 - - '@tauri-apps/plugin-notification@2.3.3': - dependencies: - '@tauri-apps/api': 2.11.1 - - '@tauri-apps/plugin-opener@2.5.4': - dependencies: - '@tauri-apps/api': 2.11.1 - - '@tauri-apps/plugin-os@2.3.2': - dependencies: - '@tauri-apps/api': 2.11.1 - - '@tauri-apps/plugin-process@2.3.1': - dependencies: - '@tauri-apps/api': 2.11.1 - - '@tauri-apps/plugin-window-state@2.4.1': - dependencies: - '@tauri-apps/api': 2.11.1 - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 - '@types/babel__generator': 7.27.0 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.28.0 - - '@types/babel__generator@7.27.0': - dependencies: - '@babel/types': 7.29.7 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 - - '@types/babel__traverse@7.28.0': - dependencies: - '@babel/types': 7.29.7 - - '@types/byte-size@8.1.2': {} - - '@types/d3-array@3.2.2': {} - - '@types/d3-color@3.1.3': {} - - '@types/d3-ease@3.0.2': {} - - '@types/d3-interpolate@3.0.4': - dependencies: - '@types/d3-color': 3.1.3 - - '@types/d3-path@3.1.1': {} - - '@types/d3-scale@4.0.9': - dependencies: - '@types/d3-time': 3.0.4 - - '@types/d3-shape@3.1.8': - dependencies: - '@types/d3-path': 3.1.1 - - '@types/d3-time@3.0.4': {} - - '@types/d3-timer@3.0.2': {} - - '@types/debug@4.1.13': - dependencies: - '@types/ms': 2.1.0 - - '@types/estree-jsx@1.0.5': - dependencies: - '@types/estree': 1.0.9 - - '@types/estree@1.0.9': {} - - '@types/file-saver@2.0.7': {} - - '@types/hast@3.0.5': - dependencies: - '@types/unist': 3.0.3 - - '@types/lodash-es@4.17.12': - dependencies: - '@types/lodash': 4.17.24 - - '@types/lodash@4.17.24': {} - - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/ms@2.1.0': {} - - '@types/node@26.1.1': - dependencies: - undici-types: 8.3.0 - - '@types/parse-json@4.0.2': {} - - '@types/react-dom@19.2.3(@types/react@19.2.17)': - dependencies: - '@types/react': 19.2.17 - - '@types/react@19.2.17': - dependencies: - csstype: 3.2.3 - - '@types/unist@2.0.11': {} - - '@types/unist@3.0.3': {} - - '@types/use-sync-external-store@0.0.6': {} - - '@ungap/structured-clone@1.3.3': {} - - '@use-gesture/core@10.3.1': {} - - '@use-gesture/react@10.3.1(react@19.2.7)': - dependencies: - '@use-gesture/core': 10.3.1 - react: 19.2.7 - - '@vitejs/plugin-react-swc@4.3.1(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0))': - dependencies: - '@rolldown/pluginutils': 1.0.1 - '@swc/core': 1.15.46 - vite: 7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0) - transitivePeerDependencies: - - '@swc/helpers' - - '@vitejs/plugin-react@5.2.0(supports-color@7.2.0)(vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@rolldown/pluginutils': 1.0.0-rc.3 - '@types/babel__core': 7.20.5 - react-refresh: 0.18.0 - vite: 7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0) - transitivePeerDependencies: - - supports-color - - ansi-regex@5.0.1: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - argparse@2.0.1: {} - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - async-function@1.0.0: {} - - autoprefixer@10.5.4(postcss@8.5.20): - dependencies: - browserslist: 4.28.6 - caniuse-lite: 1.0.30001806 - fraction.js: 5.3.4 - picocolors: 1.1.1 - postcss: 8.5.20 - postcss-value-parser: 4.2.0 - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - babel-plugin-macros@3.1.0: - dependencies: - '@babel/runtime': 7.29.7 - cosmiconfig: 7.1.0 - resolve: 1.22.12 - - bail@2.0.2: {} - - balanced-match@1.0.2: {} - - balanced-match@4.0.4: {} - - baseline-browser-mapping@2.10.43: {} - - boolbase@1.0.0: {} - - brace-expansion@1.1.16: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.1.2: - dependencies: - balanced-match: 1.0.2 - - brace-expansion@5.0.7: - dependencies: - balanced-match: 4.0.4 - - browserslist@4.28.6: - dependencies: - baseline-browser-mapping: 2.10.43 - caniuse-lite: 1.0.30001806 - electron-to-chromium: 1.5.393 - node-releases: 2.0.51 - update-browserslist-db: 1.2.3(browserslist@4.28.6) - - byte-size@9.0.1: {} - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.9: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - camelcase@6.3.0: {} - - caniuse-lite@1.0.30001806: {} - - ccount@2.0.1: {} - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - character-entities-html4@2.1.0: {} - - character-entities-legacy@3.0.0: {} - - character-entities@2.0.2: {} - - character-reference-invalid@2.0.1: {} - - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - - classnames@2.5.1: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clsx@2.1.1: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - comma-separated-tokens@2.0.3: {} - - commander@7.2.0: {} - - commander@9.5.0: {} - - compare-versions@6.1.1: {} - - concat-map@0.0.1: {} - - convert-source-map@1.9.0: {} - - convert-source-map@2.0.0: {} - - cosmiconfig@7.1.0: - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.3 - - cosmiconfig@8.3.6(typescript@6.0.3): - dependencies: - import-fresh: 3.3.1 - js-yaml: 4.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - optionalDependencies: - typescript: 6.0.3 - - cross-spawn@6.0.6: - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.2 - shebang-command: 1.2.0 - which: 1.3.1 - - css-select@5.2.2: - dependencies: - boolbase: 1.0.0 - css-what: 6.2.2 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 - - css-tree@2.2.1: - dependencies: - mdn-data: 2.0.28 - source-map-js: 1.2.1 - - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.1 - - css-what@6.2.2: {} - - csso@5.0.5: - dependencies: - css-tree: 2.2.1 - - csstype@3.2.3: {} - - d3-array@3.2.4: - dependencies: - internmap: 2.0.3 - - d3-color@3.1.0: {} - - d3-ease@3.0.1: {} - - d3-format@3.1.2: {} - - d3-interpolate@3.0.1: - dependencies: - d3-color: 3.1.0 - - d3-path@3.1.0: {} - - d3-scale@4.0.2: - dependencies: - d3-array: 3.2.4 - d3-format: 3.1.2 - d3-interpolate: 3.0.1 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - - d3-shape@3.2.0: - dependencies: - d3-path: 3.1.0 - - d3-time-format@4.1.0: - dependencies: - d3-time: 3.1.0 - - d3-time@3.1.0: - dependencies: - d3-array: 3.2.4 - - d3-timer@3.0.1: {} - - dashify@2.0.0: {} - - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - dayjs@1.11.21: {} - - debug@4.4.3(supports-color@7.2.0): - dependencies: - ms: 2.1.3 - optionalDependencies: - supports-color: 7.2.0 - - decimal.js-light@2.5.1: {} - - decode-named-character-reference@1.3.0: - dependencies: - character-entities: 2.0.2 - - deepmerge-ts@7.1.5: {} - - deepmerge@4.3.1: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - dequal@2.0.3: {} - - detect-browser@5.3.0: {} - - detect-libc@2.1.2: - optional: true - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - dom-serializer@3.1.1: - dependencies: - domelementtype: 3.0.0 - domhandler: 6.0.1 - entities: 8.0.0 - - domelementtype@2.3.0: {} - - domelementtype@3.0.0: {} - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - domhandler@6.0.1: - dependencies: - domelementtype: 3.0.0 - - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - - domutils@4.0.2: - dependencies: - dom-serializer: 3.1.1 - domelementtype: 3.0.0 - domhandler: 6.0.1 - - dot-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.8.1 - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - electron-to-chromium@1.5.393: {} - - emoji-regex@8.0.0: {} - - entities@4.5.0: {} - - entities@8.0.0: {} - - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - - es-abstract-get@1.0.0: - dependencies: - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - is-callable: 1.2.7 - object-inspect: 1.13.4 - - es-abstract@1.24.2: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.4 - function.prototype.name: 1.2.0 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.4 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.4 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.11 - string.prototype.trimend: 1.0.10 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.8 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.22 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.2: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - - es-to-primitive@1.3.4: - dependencies: - es-abstract-get: 1.0.0 - es-define-property: 1.0.1 - es-errors: 1.3.0 - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - es-toolkit@1.49.0: {} - - esbuild@0.28.1: - optionalDependencies: - '@esbuild/aix-ppc64': 0.28.1 - '@esbuild/android-arm': 0.28.1 - '@esbuild/android-arm64': 0.28.1 - '@esbuild/android-x64': 0.28.1 - '@esbuild/darwin-arm64': 0.28.1 - '@esbuild/darwin-x64': 0.28.1 - '@esbuild/freebsd-arm64': 0.28.1 - '@esbuild/freebsd-x64': 0.28.1 - '@esbuild/linux-arm': 0.28.1 - '@esbuild/linux-arm64': 0.28.1 - '@esbuild/linux-ia32': 0.28.1 - '@esbuild/linux-loong64': 0.28.1 - '@esbuild/linux-mips64el': 0.28.1 - '@esbuild/linux-ppc64': 0.28.1 - '@esbuild/linux-riscv64': 0.28.1 - '@esbuild/linux-s390x': 0.28.1 - '@esbuild/linux-x64': 0.28.1 - '@esbuild/netbsd-arm64': 0.28.1 - '@esbuild/netbsd-x64': 0.28.1 - '@esbuild/openbsd-arm64': 0.28.1 - '@esbuild/openbsd-x64': 0.28.1 - '@esbuild/openharmony-arm64': 0.28.1 - '@esbuild/sunos-x64': 0.28.1 - '@esbuild/win32-arm64': 0.28.1 - '@esbuild/win32-ia32': 0.28.1 - '@esbuild/win32-x64': 0.28.1 - - escalade@3.2.0: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - estree-util-is-identifier-name@3.0.0: {} - - eventemitter3@5.0.4: {} - - extend@3.0.2: {} - - fast-deep-equal@3.1.3: {} - - fdir@6.5.0(picomatch@4.0.5): - optionalDependencies: - picomatch: 4.0.5 - - file-saver@2.0.5: {} - - find-root@1.1.0: {} - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - - fraction.js@5.3.4: {} - - framer-motion@12.42.2(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): - dependencies: - motion-dom: 12.42.2 - motion-utils: 12.39.0 - tslib: 2.8.1 - optionalDependencies: - '@emotion/is-prop-valid': 1.4.0 - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.2.0: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - es-define-property: 1.0.1 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - hasown: 2.0.4 - is-callable: 1.2.7 - is-document.all: 1.0.0 - - functions-have-names@1.2.3: {} - - generator-function@2.0.1: {} - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.4 - math-intrinsics: 1.1.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.2 - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - get-text-width@1.0.3: {} - - glob@8.1.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.9 - once: 1.4.0 - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - gopd@1.2.0: {} - - graceful-fs@4.2.11: {} - - has-bigints@1.1.0: {} - - has-flag@3.0.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.4: - dependencies: - function-bind: 1.1.2 - - hast-util-sanitize@5.0.2: - dependencies: - '@types/hast': 3.0.5 - '@ungap/structured-clone': 1.3.3 - unist-util-position: 5.0.0 - - hast-util-to-jsx-runtime@2.3.6(supports-color@7.2.0): - dependencies: - '@types/estree': 1.0.9 - '@types/hast': 3.0.5 - '@types/unist': 3.0.3 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) - mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) - mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) - property-information: 7.2.0 - space-separated-tokens: 2.0.2 - style-to-js: 1.1.21 - unist-util-position: 5.0.0 - vfile-message: 4.0.3 - transitivePeerDependencies: - - supports-color - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.5 - - hoist-non-react-statics@3.3.2: - dependencies: - react-is: 16.13.1 - - hosted-git-info@2.8.9: {} - - html-dom-parser@8.0.0: - dependencies: - domhandler: 6.0.1 - htmlparser2: 12.0.0 - - html-react-parser@6.1.5(@types/react@19.2.17)(react@19.2.7): - dependencies: - domhandler: 6.0.1 - html-dom-parser: 8.0.0 - react: 19.2.7 - react-property: 2.0.2 - style-to-js: 2.0.2 - optionalDependencies: - '@types/react': 19.2.17 - - html-url-attributes@3.0.1: {} - - htmlparser2@12.0.0: - dependencies: - domelementtype: 3.0.0 - domhandler: 6.0.1 - domutils: 4.0.2 - entities: 8.0.0 - - immer@11.1.15: {} - - immutable@5.1.9: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - inline-style-parser@0.2.7: {} - - inline-style-parser@0.2.9: {} - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.4 - side-channel: 1.1.1 - - internmap@2.0.3: {} - - is-alphabetical@2.0.1: {} - - is-alphanumerical@2.0.1: - dependencies: - is-alphabetical: 2.0.1 - is-decimal: 2.0.1 - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-arrayish@0.2.1: {} - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.2: - dependencies: - hasown: 2.0.4 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-decimal@2.0.1: {} - - is-document.all@1.0.0: - dependencies: - call-bound: 1.0.4 - - is-extglob@2.1.1: - optional: true - - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-fullwidth-code-point@3.0.0: {} - - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - optional: true - - is-hexadecimal@2.0.1: {} - - is-map@2.0.3: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-plain-obj@4.1.0: {} - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.22 - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - itertools@2.7.1: {} - - js-base64@3.9.1: {} - - js-tokens@4.0.0: {} - - js-yaml@4.3.0: - dependencies: - argparse: 2.0.1 - - jsesc@3.1.0: {} - - json-parse-better-errors@1.0.2: {} - - json-parse-even-better-errors@2.3.1: {} - - json5@2.2.3: {} - - lines-and-columns@1.2.4: {} - - linkify-it@5.0.2: - dependencies: - uc.micro: 2.1.0 - - little-state-machine@4.8.1(react@19.2.7): - dependencies: - react: 19.2.7 - - load-json-file@4.0.0: - dependencies: - graceful-fs: 4.2.11 - parse-json: 4.0.0 - pify: 3.0.0 - strip-bom: 3.0.0 - - lodash-es@4.18.1: {} - - lodash@4.18.1: {} - - longest-streak@3.1.0: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lower-case@2.0.2: - dependencies: - tslib: 2.8.1 - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lunr@2.3.9: {} - - markdown-it@14.3.0: - dependencies: - argparse: 2.0.1 - entities: 4.5.0 - linkify-it: 5.0.2 - mdurl: 2.0.0 - punycode.js: 2.3.1 - uc.micro: 2.1.0 - - math-intrinsics@1.1.0: {} - - mdast-util-from-markdown@2.0.3(supports-color@7.2.0): - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - decode-named-character-reference: 1.3.0 - devlop: 1.1.0 - mdast-util-to-string: 4.0.0 - micromark: 4.0.2(supports-color@7.2.0) - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-decode-string: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-stringify-position: 4.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-expression@2.0.1(supports-color@7.2.0): - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.5 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-jsx@3.2.0(supports-color@7.2.0): - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.5 - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) - mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.2 - stringify-entities: 4.0.4 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.3 - transitivePeerDependencies: - - supports-color - - mdast-util-mdxjs-esm@2.0.1(supports-color@7.2.0): - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.5 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-phrasing@4.1.0: - dependencies: - '@types/mdast': 4.0.4 - unist-util-is: 6.0.1 - - mdast-util-to-hast@13.2.1: - dependencies: - '@types/hast': 3.0.5 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.3 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.1.0 - vfile: 6.0.3 - - mdast-util-to-markdown@2.1.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - longest-streak: 3.1.0 - mdast-util-phrasing: 4.1.0 - mdast-util-to-string: 4.0.0 - micromark-util-classify-character: 2.0.1 - micromark-util-decode-string: 2.0.1 - unist-util-visit: 5.1.0 - zwitch: 2.0.4 - - mdast-util-to-string@4.0.0: - dependencies: - '@types/mdast': 4.0.4 - - mdn-data@2.0.28: {} - - mdn-data@2.0.30: {} - - mdurl@2.0.0: {} - - memorystream@0.3.1: {} - - merge-refs@2.0.0(@types/react@19.2.17): - optionalDependencies: - '@types/react': 19.2.17 - - micromark-core-commonmark@2.0.3: - dependencies: - decode-named-character-reference: 1.3.0 - devlop: 1.1.0 - micromark-factory-destination: 2.0.1 - micromark-factory-label: 2.0.1 - micromark-factory-space: 2.0.1 - micromark-factory-title: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-html-tag-name: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-destination@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-label@2.0.1: - dependencies: - devlop: 1.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-space@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-types: 2.0.2 - - micromark-factory-title@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-whitespace@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-chunked@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-classify-character@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-combine-extensions@2.0.1: - dependencies: - micromark-util-chunked: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-decode-numeric-character-reference@2.0.2: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-decode-string@2.0.1: - dependencies: - decode-named-character-reference: 1.3.0 - micromark-util-character: 2.1.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-symbol: 2.0.1 - - micromark-util-encode@2.0.1: {} - - micromark-util-html-tag-name@2.0.1: {} - - micromark-util-normalize-identifier@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-resolve-all@2.0.1: - dependencies: - micromark-util-types: 2.0.2 - - micromark-util-sanitize-uri@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 - - micromark-util-subtokenize@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-symbol@2.0.1: {} - - micromark-util-types@2.0.2: {} - - micromark@4.0.2(supports-color@7.2.0): - dependencies: - '@types/debug': 4.1.13 - debug: 4.4.3(supports-color@7.2.0) - decode-named-character-reference: 1.3.0 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-combine-extensions: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-encode: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - transitivePeerDependencies: - - supports-color - - millify@6.1.0: - dependencies: - yargs: 17.7.3 - - minimatch@10.2.5: - dependencies: - brace-expansion: 5.0.7 - - minimatch@3.1.5: - dependencies: - brace-expansion: 1.1.16 - - minimatch@5.1.9: - dependencies: - brace-expansion: 2.1.2 - - motion-dom@12.42.2: - dependencies: - motion-utils: 12.39.0 - - motion-utils@12.39.0: {} - - motion@12.42.2(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): - dependencies: - framer-motion: 12.42.2(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - tslib: 2.8.1 - optionalDependencies: - '@emotion/is-prop-valid': 1.4.0 - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - - ms@2.1.3: {} - - nanoid@3.3.16: {} - - nice-try@1.0.5: {} - - no-case@3.0.4: - dependencies: - lower-case: 2.0.2 - tslib: 2.8.1 - - node-addon-api@7.1.1: - optional: true - - node-releases@2.0.51: {} - - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.12 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - - npm-run-all@4.1.5: - dependencies: - ansi-styles: 3.2.1 - chalk: 2.4.2 - cross-spawn: 6.0.6 - memorystream: 0.3.1 - minimatch: 3.1.5 - pidtree: 0.3.1 - read-pkg: 3.0.0 - shell-quote: 1.10.0 - string.prototype.padend: 3.1.6 - - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - - p-timeout@7.0.1: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-entities@4.0.2: - dependencies: - '@types/unist': 2.0.11 - character-entities-legacy: 3.0.0 - character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.3.0 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 - is-hexadecimal: 2.0.1 - - parse-json@4.0.0: - dependencies: - error-ex: 1.3.4 - json-parse-better-errors: 1.0.2 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.29.7 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - path-key@2.0.1: {} - - path-parse@1.0.7: {} - - path-type@3.0.0: - dependencies: - pify: 3.0.0 - - path-type@4.0.0: {} - - picocolors@1.1.1: {} - - picomatch@4.0.5: {} - - pidtree@0.3.1: {} - - pify@3.0.0: {} - - possible-typed-array-names@1.1.0: {} - - postcss-value-parser@4.2.0: {} - - postcss@8.5.20: - dependencies: - nanoid: 3.3.16 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - prettier@2.8.8: {} - - prettier@3.9.5: {} - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - property-information@7.2.0: {} - - punycode.js@2.3.1: {} - - qrcode-generator@2.0.4: {} - - radash@12.1.1: {} - - react-auth-code-input@3.2.1(react@19.2.7): - dependencies: - react: 19.2.7 - - react-click-away-listener@2.4.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7): - dependencies: - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - - react-dom@19.2.7(react@19.2.7): - dependencies: - react: 19.2.7 - scheduler: 0.27.0 - - react-hook-form@7.82.0(react@19.2.7): - dependencies: - react: 19.2.7 - - react-hotkeys-hook@5.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7): - dependencies: - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - - react-is@16.13.1: {} - - react-loading-skeleton@3.5.0(react@19.2.7): - dependencies: - react: 19.2.7 - - react-markdown@10.1.0(@types/react@19.2.17)(react@19.2.7)(supports-color@7.2.0): - dependencies: - '@types/hast': 3.0.5 - '@types/mdast': 4.0.4 - '@types/react': 19.2.17 - devlop: 1.1.0 - hast-util-to-jsx-runtime: 2.3.6(supports-color@7.2.0) - html-url-attributes: 3.0.1 - mdast-util-to-hast: 13.2.1 - react: 19.2.7 - remark-parse: 11.0.0(supports-color@7.2.0) - remark-rehype: 11.1.2 - unified: 11.0.5 - unist-util-visit: 5.1.0 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - - react-property@2.0.2: {} - - react-qr-code@2.2.0(react@19.2.7): - dependencies: - prop-types: 15.8.1 - qrcode-generator: 2.0.4 - react: 19.2.7 - - react-redux@9.3.0(@types/react@19.2.17)(react@19.2.7)(redux@5.0.1): - dependencies: - '@types/use-sync-external-store': 0.0.6 - react: 19.2.7 - use-sync-external-store: 1.6.0(react@19.2.7) - optionalDependencies: - '@types/react': 19.2.17 - redux: 5.0.1 - - react-refresh@0.18.0: {} - - react-router-dom@6.30.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7): - dependencies: - '@remix-run/router': 1.23.3 - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - react-router: 6.30.4(react@19.2.7) - - react-router@6.30.4(react@19.2.7): - dependencies: - '@remix-run/router': 1.23.3 - react: 19.2.7 - - react-simple-animate@3.5.3(react-dom@19.2.7(react@19.2.7)): - dependencies: - react-dom: 19.2.7(react@19.2.7) - - react-use-websocket@4.13.0: {} - - react-virtualized-auto-sizer@1.0.26(react-dom@19.2.7(react@19.2.7))(react@19.2.7): - dependencies: - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - - react@19.2.7: {} - - read-pkg@3.0.0: - dependencies: - load-json-file: 4.0.0 - normalize-package-data: 2.5.0 - path-type: 3.0.0 - - readdirp@4.1.2: {} - - recharts@3.9.2(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react-is@16.13.1)(react@19.2.7)(redux@5.0.1): - dependencies: - '@reduxjs/toolkit': 2.12.0(react-redux@9.3.0(@types/react@19.2.17)(react@19.2.7)(redux@5.0.1))(react@19.2.7) - clsx: 2.1.1 - decimal.js-light: 2.5.1 - es-toolkit: 1.49.0 - eventemitter3: 5.0.4 - immer: 11.1.15 - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - react-is: 16.13.1 - react-redux: 9.3.0(@types/react@19.2.17)(react@19.2.7)(redux@5.0.1) - reselect: 5.2.0 - tiny-invariant: 1.3.3 - use-sync-external-store: 1.6.0(react@19.2.7) - victory-vendor: 37.3.6 - transitivePeerDependencies: - - '@types/react' - - redux - - redux-thunk@3.1.0(redux@5.0.1): - dependencies: - redux: 5.0.1 - - redux@5.0.1: {} - - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - rehype-sanitize@6.0.0: - dependencies: - '@types/hast': 3.0.5 - hast-util-sanitize: 5.0.2 - - remark-parse@11.0.0(supports-color@7.2.0): - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) - micromark-util-types: 2.0.2 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-rehype@11.1.2: - dependencies: - '@types/hast': 3.0.5 - '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.1 - unified: 11.0.5 - vfile: 6.0.3 - - require-directory@2.1.1: {} - - reselect@5.2.0: {} - - resolve-from@4.0.0: {} - - resolve@1.22.12: - dependencies: - es-errors: 1.3.0 - is-core-module: 2.16.2 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - rollup@4.62.2: - dependencies: - '@types/estree': 1.0.9 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.62.2 - '@rollup/rollup-android-arm64': 4.62.2 - '@rollup/rollup-darwin-arm64': 4.62.2 - '@rollup/rollup-darwin-x64': 4.62.2 - '@rollup/rollup-freebsd-arm64': 4.62.2 - '@rollup/rollup-freebsd-x64': 4.62.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.62.2 - '@rollup/rollup-linux-arm-musleabihf': 4.62.2 - '@rollup/rollup-linux-arm64-gnu': 4.62.2 - '@rollup/rollup-linux-arm64-musl': 4.62.2 - '@rollup/rollup-linux-loong64-gnu': 4.62.2 - '@rollup/rollup-linux-loong64-musl': 4.62.2 - '@rollup/rollup-linux-ppc64-gnu': 4.62.2 - '@rollup/rollup-linux-ppc64-musl': 4.62.2 - '@rollup/rollup-linux-riscv64-gnu': 4.62.2 - '@rollup/rollup-linux-riscv64-musl': 4.62.2 - '@rollup/rollup-linux-s390x-gnu': 4.62.2 - '@rollup/rollup-linux-x64-gnu': 4.62.2 - '@rollup/rollup-linux-x64-musl': 4.62.2 - '@rollup/rollup-openbsd-x64': 4.62.2 - '@rollup/rollup-openharmony-arm64': 4.62.2 - '@rollup/rollup-win32-arm64-msvc': 4.62.2 - '@rollup/rollup-win32-ia32-msvc': 4.62.2 - '@rollup/rollup-win32-x64-gnu': 4.62.2 - '@rollup/rollup-win32-x64-msvc': 4.62.2 - fsevents: 2.3.3 - - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 - - safe-array-concat@1.1.4: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - sass@1.92.1: - dependencies: - chokidar: 4.0.3 - immutable: 5.1.9 - source-map-js: 1.2.1 - optionalDependencies: - '@parcel/watcher': 2.6.0 - - sax@1.6.0: {} - - scheduler@0.27.0: {} - - semver@5.7.2: {} - - semver@6.3.1: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 - - shebang-regex@1.0.0: {} - - shell-quote@1.10.0: {} - - side-channel-list@1.0.1: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.1: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.1 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - snake-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.8.1 - - source-map-js@1.2.1: {} - - source-map@0.5.7: {} - - space-separated-tokens@2.0.2: {} - - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.23 - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.23 - - spdx-license-ids@3.0.23: {} - - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string.prototype.padend@3.1.6: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-object-atoms: 1.1.2 - - string.prototype.trim@1.2.11: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-object-atoms: 1.1.2 - has-property-descriptors: 1.0.2 - safe-regex-test: 1.1.0 - - string.prototype.trimend@1.0.10: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-bom@3.0.0: {} - - style-to-js@1.1.21: - dependencies: - style-to-object: 1.0.14 - - style-to-js@2.0.2: - dependencies: - style-to-object: 2.0.2 - - style-to-object@1.0.14: - dependencies: - inline-style-parser: 0.2.7 - - style-to-object@2.0.2: - dependencies: - inline-style-parser: 0.2.9 - - stylis@4.2.0: {} - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - svg-parser@2.0.4: {} - - svgo@3.3.4: - dependencies: - commander: 7.2.0 - css-select: 5.2.2 - css-tree: 2.3.1 - css-what: 6.2.2 - csso: 5.0.5 - picocolors: 1.1.1 - sax: 1.6.0 - - tabbable@6.5.0: {} - - tiny-invariant@1.3.3: {} - - tinyglobby@0.2.17: - dependencies: - fdir: 6.5.0(picomatch@4.0.5) - picomatch: 4.0.5 - - trim-lines@3.0.1: {} - - trough@2.2.0: {} - - tslib@2.8.1: {} - - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.8: - dependencies: - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typedoc@0.28.20(typescript@6.0.3): - dependencies: - '@gerrit0/mini-shiki': 3.23.0 - lunr: 2.3.9 - markdown-it: 14.3.0 - minimatch: 10.2.5 - typescript: 6.0.3 - yaml: 2.9.0 - - typesafe-i18n@5.27.1(typescript@6.0.3): - dependencies: - typescript: 6.0.3 - - typescript@6.0.3: {} - - uc.micro@2.1.0: {} - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - undici-types@8.3.0: {} - - unified@11.0.5: - dependencies: - '@types/unist': 3.0.3 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 6.0.3 - - unist-util-is@6.0.1: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@6.0.2: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - - unist-util-visit@5.1.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.2 - - update-browserslist-db@1.2.3(browserslist@4.28.6): - dependencies: - browserslist: 4.28.6 - escalade: 3.2.0 - picocolors: 1.1.1 - - use-breakpoint@4.0.10(react-dom@19.2.7(react@19.2.7))(react@19.2.7): - dependencies: - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - - use-deep-compare-effect@1.8.1(react@19.2.7): - dependencies: - '@babel/runtime': 7.29.7 - dequal: 2.0.3 - react: 19.2.7 - - use-sync-external-store@1.6.0(react@19.2.7): - dependencies: - react: 19.2.7 - - uuid@8.3.2: {} - - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - - vfile-message@4.0.3: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.3 - - victory-vendor@37.3.6: - dependencies: - '@types/d3-array': 3.2.2 - '@types/d3-ease': 3.0.2 - '@types/d3-interpolate': 3.0.4 - '@types/d3-scale': 4.0.9 - '@types/d3-shape': 3.1.8 - '@types/d3-time': 3.0.4 - '@types/d3-timer': 3.0.2 - d3-array: 3.2.4 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-scale: 4.0.2 - d3-shape: 3.2.0 - d3-time: 3.1.0 - d3-timer: 3.0.1 - - vite@7.3.6(@types/node@26.1.1)(sass@1.92.1)(yaml@2.9.0): - dependencies: - esbuild: 0.28.1 - fdir: 6.5.0(picomatch@4.0.5) - picomatch: 4.0.5 - postcss: 8.5.20 - rollup: 4.62.2 - tinyglobby: 0.2.17 - optionalDependencies: - '@types/node': 26.1.1 - fsevents: 2.3.3 - sass: 1.92.1 - yaml: 2.9.0 - - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.2.0 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.22 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.22: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@1.3.1: - dependencies: - isexe: 2.0.0 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrappy@1.0.2: {} - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yaml@1.10.3: {} - - yaml@2.9.0: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.3: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - zod@3.25.76: {} - - zustand@5.0.14(@types/react@19.2.17)(immer@11.1.15)(react@19.2.7)(use-sync-external-store@1.6.0(react@19.2.7)): - optionalDependencies: - '@types/react': 19.2.17 - immer: 11.1.15 - react: 19.2.7 - use-sync-external-store: 1.6.0(react@19.2.7) - - zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index b1179a202..000000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,11 +0,0 @@ -allowBuilds: - '@parcel/watcher': true - '@swc/core': true - esbuild: true - itertools: false - -auditConfig: - ignoreGhsas: - - GHSA-wrjc-x8rr-h8h6 - - GHSA-jjmj-jmhj-qwj2 - - GHSA-337j-9hxr-rhxg diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index a47ef4f95..000000000 --- a/postcss.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: { - autoprefixer: {}, - }, -}; diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index 97fc0b90c..a7ec2bf51 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -4,7 +4,7 @@ "description": "Capability for the main window", "local": true, "remote": { - "urls": ["http://localhost:5071/*", "http://localhost:5072/*"] + "urls": ["http://localhost:5072/*"] }, "windows": ["compact-view", "full-view", "welcome"], "permissions": [ diff --git a/src-tauri/permissions/default.toml b/src-tauri/permissions/default.toml index 46e1e3699..e6aac4cc8 100644 --- a/src-tauri/permissions/default.toml +++ b/src-tauri/permissions/default.toml @@ -1,6 +1,6 @@ [[permission]] identifier = "allow-app-commands" -description = "Allow all application commands for both UI windows (old-ui and new-ui)." +description = "Allow all application commands for both UI windows." commands.allow = [ "enrollment_start", "enrollment_create_device", diff --git a/src/components/App/App.tsx b/src/components/App/App.tsx deleted file mode 100644 index 8b70f22c8..000000000 --- a/src/components/App/App.tsx +++ /dev/null @@ -1,229 +0,0 @@ -import 'dayjs/locale/en'; -import '../../shared/defguard-ui/scss/index.scss'; -import '../../shared/scss/index.scss'; - -import { QueryClient } from '@tanstack/query-core'; -import { QueryClientProvider } from '@tanstack/react-query'; -import { getVersion } from '@tauri-apps/api/app'; -import { debug, info } from '@tauri-apps/plugin-log'; -import { openUrl } from '@tauri-apps/plugin-opener'; -import { exit } from '@tauri-apps/plugin-process'; -import dayjs from 'dayjs'; -import customParseData from 'dayjs/plugin/customParseFormat'; -import duration from 'dayjs/plugin/duration'; -import localeData from 'dayjs/plugin/localeData'; -import relativeTime from 'dayjs/plugin/relativeTime'; -import timezone from 'dayjs/plugin/timezone'; -import updateLocale from 'dayjs/plugin/updateLocale'; -import utc from 'dayjs/plugin/utc'; -import { useEffect, useMemo, useRef, useState } from 'react'; -import { useHotkeys } from 'react-hotkeys-hook'; -import { createBrowserRouter, Navigate, RouterProvider } from 'react-router-dom'; -import { localStorageDetector } from 'typesafe-i18n/detectors'; -import TypesafeI18n from '../../i18n/i18n-react'; -import { detectLocale } from '../../i18n/i18n-util'; -import { loadLocaleAsync } from '../../i18n/i18n-util.async'; -import { ClientPage } from '../../pages/client/ClientPage'; -import { clientApi } from '../../pages/client/clientAPI/clientApi'; -import type { PlatformInfo } from '../../pages/client/clientAPI/types'; -import { useClientStore } from '../../pages/client/hooks/useClientStore'; -import { CarouselPage } from '../../pages/client/pages/CarouselPage/CarouselPage'; -import { ClientAddedPage } from '../../pages/client/pages/ClientAddedPage/ClientAddedPage'; -import { ClientAddInstancePage } from '../../pages/client/pages/ClientAddInstancePage/ClientAddInstnacePage'; -import { ClientAddTunnelPage } from '../../pages/client/pages/ClientAddTunnelPage/ClientAddTunnelPage'; -import { ClientEditTunnelPage } from '../../pages/client/pages/ClientEditTunnelPage/ClientEditTunnelPage'; -import { ClientInstancePage } from '../../pages/client/pages/ClientInstancePage/ClientInstancePage'; -import { ClientSettingsPage } from '../../pages/client/pages/ClientSettingsPage/ClientSettingsPage'; -import { ClientConnectionType } from '../../pages/client/types'; -import { EnrollmentPage } from '../../pages/enrollment/EnrollmentPage'; -import { SessionTimeoutPage } from '../../pages/sessionTimeout/SessionTimeoutPage'; -import { ToastManager } from '../../shared/defguard-ui/components/Layout/ToastManager/ToastManager'; -import { useTheme } from '../../shared/defguard-ui/hooks/theme/useTheme'; -import { ThemeProvider } from '../../shared/providers/ThemeProvider/ThemeProvider'; -import { routes } from '../../shared/routes'; -import { ApplicationUpdateManager } from '../ApplicationUpdateManager/ApplicationUpdateManager'; - -dayjs.extend(duration); -dayjs.extend(utc); -dayjs.extend(customParseData); -dayjs.extend(relativeTime); -dayjs.extend(localeData); -dayjs.extend(updateLocale); -dayjs.extend(timezone); - -const queryClient = new QueryClient(); - -const { getAppConfig, getInstances, getTunnels } = clientApi; - -const router = createBrowserRouter([ - { - index: true, - element: , - }, - { - path: '/timeout', - element: , - }, - { - path: '/enrollment', - element: , - }, - { - path: '/client', - element: , - children: [ - { - path: '/client/', - index: true, - element: , - }, - { - path: '/client/instance', - element: , - }, - { - path: '/client/carousel', - element: , - }, - { - path: '/client/add-instance', - element: , - }, - { - path: '/client/instance-created', - element: , - }, - { - path: '/client/add-tunnel', - element: , - }, - { - path: '/client/tunnel-created', - element: , - }, - { - path: '/client/edit-tunnel', - element: , - }, - { - path: '/client/settings', - element: , - }, - { - path: '/client/*', - element: , - }, - ], - }, - { - path: '/*', - element: , - }, -]); - -const detectedLocale = detectLocale(localStorageDetector); - -export const App = () => { - // Workaround: ensure effect once in dev mode, thanks react :3 - const tauriInitLoadRef = useRef(false); - const localeLoadRef = useRef(false); - const [localeLoaded, setWasLoaded] = useState(false); - const [settingsLoaded, setSettingsLoaded] = useState(false); - const [platformInfoLoaded, setPlatformInfoLoaded] = useState(false); - const setClientState = useClientStore((state) => state.setState); - const { changeTheme } = useTheme(); - - const appLoaded = useMemo( - () => localeLoaded && settingsLoaded && platformInfoLoaded, - [localeLoaded, settingsLoaded, platformInfoLoaded], - ); - - // load locales - useEffect(() => { - if (!localeLoadRef.current) { - localeLoadRef.current = true; - debug('Loading locales'); - loadLocaleAsync(detectedLocale).then(() => { - setWasLoaded(true); - debug(`Locale ${detectedLocale} loaded.`); - }); - dayjs.locale(detectedLocale); - } - }, []); - - // Load settings from Tauri for the first time. - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - if (!tauriInitLoadRef.current) { - tauriInitLoadRef.current = true; - const loadTauriState = async () => { - debug('App init state from Tauri'); - const appConfig = await getAppConfig(); - const instances = await getInstances(); - const tunnels = await getTunnels(); - changeTheme(appConfig.theme); - setClientState({ appConfig, instances, tunnels }); - debug('Tauri init data loaded'); - setSettingsLoaded(true); - }; - loadTauriState(); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - useEffect(() => { - const handler = (e: MouseEvent) => { - const target = e.target as HTMLElement | undefined; - if (target) { - const link = target.closest('a'); - if ( - link instanceof HTMLAnchorElement && - link.target === '_blank' && - link.href.startsWith('https') - ) { - void openUrl(link.href); - } - } - }; - document.addEventListener('click', handler); - return () => { - document.removeEventListener('click', handler); - }; - }, []); - - // register ctrl+q keyboard shortcut - useHotkeys('ctrl+q', () => { - info('Ctrl-Q pressed, exiting.'); - exit(0); - }); - - useEffect(() => { - const loadPlatformInfo = async () => { - debug('Loading platform info from Tauri'); - const version = await getVersion().catch(() => 'unknown'); - const platformHeader = await clientApi.getPlatformHeader(); - const platformInfo: PlatformInfo = { - client_version: `${version}`, - platform_info: platformHeader, - }; - setClientState({ platformInfo }); - debug('Platform info loaded from Tauri'); - setPlatformInfoLoaded(true); - }; - void loadPlatformInfo(); - }, [setClientState]); - - if (!appLoaded) return null; - - return ( - - - - - - - - - - ); -}; diff --git a/src/components/ApplicationUpdateManager/ApplicationUpdateManager.tsx b/src/components/ApplicationUpdateManager/ApplicationUpdateManager.tsx deleted file mode 100644 index f4d9f787f..000000000 --- a/src/components/ApplicationUpdateManager/ApplicationUpdateManager.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import { getVersion } from '@tauri-apps/api/app'; -import { listen, type UnlistenFn } from '@tauri-apps/api/event'; -import { error } from '@tauri-apps/plugin-log'; -import { useEffect, useState } from 'react'; -import { clientApi } from '../../pages/client/clientAPI/clientApi.ts'; -import { useClientStore } from '../../pages/client/hooks/useClientStore'; -import { TauriEventKey } from '../../pages/client/types'; -import type { NewApplicationVersionInfo } from '../../shared/hooks/api/types'; -import { errorDetail } from '../../shared/utils/errorDetail'; -import { - type ApplicationUpdateStore, - useApplicationUpdateStore, -} from './useApplicationUpdateStore'; - -const { getLatestAppVersion } = clientApi; - -export const ApplicationUpdateManager = () => { - const [appVersion, setAppVersion] = useState(undefined); - - const setApplicationUpdateData = useApplicationUpdateStore((state) => state.setValues); - const checkForUpdates = useClientStore((state) => state.appConfig.check_for_updates); - - // Get current application version. - useEffect(() => { - const getAppVersion = async () => { - const version = await getVersion().catch(() => { - return ''; - }); - setAppVersion(version); - }; - - getAppVersion(); - }, []); - - // Listen to new application release info. - useEffect(() => { - const subs: UnlistenFn[] = []; - - // Stop listening if "check for updates" setting has been turned off. - if (!checkForUpdates) { - subs.forEach((sub) => { - sub(); - }); - return; - } - - listen(TauriEventKey.APP_VERSION_FETCH, (data) => { - const payload = data.payload as NewApplicationVersionInfo; - const state = { - latestVersion: payload.version, - releaseDate: payload.release_date, - releaseNotesUrl: payload.release_notes_url, - updateUrl: payload.update_url, - dismissed: false, - } as ApplicationUpdateStore; - setApplicationUpdateData(state); - }).then((cleanup) => { - subs.push(cleanup); - }); - - return () => { - subs.forEach((sub) => { - sub(); - }); - }; - }, [checkForUpdates, setApplicationUpdateData]); - - // Check for updates on launch and when "check for updates" setting has been turned on. - useEffect(() => { - if (!checkForUpdates || !appVersion) return; - - const getNewVersion = async (appVersion: string) => { - if (!appVersion) return; - - try { - const response = await getLatestAppVersion(); - - setApplicationUpdateData({ - currentVersion: appVersion, - latestVersion: response.version, - releaseDate: response.release_date, - releaseNotesUrl: response.release_notes_url, - updateUrl: response.update_url, - dismissed: false, - }); - } catch (e) { - const detail = errorDetail(e); - error(`Failed to check latest app version (current: ${appVersion}): ${detail}`); - } - }; - - getNewVersion(appVersion); - }, [checkForUpdates, appVersion, setApplicationUpdateData]); - - return null; -}; diff --git a/src/components/ApplicationUpdateManager/useApplicationUpdateStore.tsx b/src/components/ApplicationUpdateManager/useApplicationUpdateStore.tsx deleted file mode 100644 index 4adbd30a4..000000000 --- a/src/components/ApplicationUpdateManager/useApplicationUpdateStore.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -export interface ApplicationUpdateStore { - currentVersion: string | undefined; - latestVersion: string | undefined; - releaseDate: string | undefined; - releaseNotesUrl: string | undefined; - updateUrl: string | undefined; - dismissed: boolean; - setValues: (values: Partial) => void; -} - -const defaultState = { - currentVersion: undefined, - latestVersion: undefined, - releaseDate: undefined, - releaseNotesUrl: undefined, - updateUrl: undefined, - dismissed: false, -} as ApplicationUpdateStore; - -export const useApplicationUpdateStore = createWithEqualityFn( - (set) => ({ - ...defaultState, - setValues: (values: Partial) => set({ ...values }), - }), - Object.is, -); diff --git a/src/components/ApplicationUpdateManager/useNewAppVersionAvailable.tsx b/src/components/ApplicationUpdateManager/useNewAppVersionAvailable.tsx deleted file mode 100644 index 747649144..000000000 --- a/src/components/ApplicationUpdateManager/useNewAppVersionAvailable.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { compareVersions } from 'compare-versions'; - -import { useApplicationUpdateStore } from './useApplicationUpdateStore'; - -export const useNewAppVersionAvailable = () => { - const newAppVersionAvailable = useApplicationUpdateStore((state) => { - if (!state.currentVersion || !state.latestVersion) return false; - - return compareVersions(state.latestVersion, state.currentVersion) === 1; - }); - - return { - newAppVersionAvailable, - }; -}; diff --git a/src/components/AutoProvisioningManager.tsx b/src/components/AutoProvisioningManager.tsx deleted file mode 100644 index aed98ba54..000000000 --- a/src/components/AutoProvisioningManager.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { useQuery } from '@tanstack/react-query'; -import { error } from '@tauri-apps/plugin-log'; -import { type PropsWithChildren, useEffect } from 'react'; -import { clientApi } from '../pages/client/clientAPI/clientApi'; -import type { ProvisioningConfig } from '../pages/client/clientAPI/types'; -import { clientQueryKeys } from '../pages/client/query'; -import { useToaster } from '../shared/defguard-ui/hooks/toasts/useToaster'; -import useAddInstance from '../shared/hooks/useAddInstance'; -import { errorDetail } from '../shared/utils/errorDetail'; - -const { getProvisioningConfig } = clientApi; - -export default function AutoProvisioningManager({ children }: PropsWithChildren) { - const toaster = useToaster(); - const { handleAddInstance } = useAddInstance(); - const { data: provisioningConfig } = useQuery({ - queryFn: getProvisioningConfig, - queryKey: [clientQueryKeys.getProvisioningConfig], - refetchOnMount: false, - refetchOnWindowFocus: false, - }); - - const handleProvisioning = async (config: ProvisioningConfig) => { - try { - await handleAddInstance({ - url: config.enrollment_url, - token: config.enrollment_token, - }); - } catch (e) { - const detail = errorDetail(e); - error( - `Failed to handle automatic client provisioning (url: ${config.enrollment_url}): ${detail}`, - ); - toaster.error( - 'Automatic client provisioning failed, please contact your administrator.', - ); - } - }; - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - if (provisioningConfig) { - handleProvisioning(provisioningConfig); - } - }, [provisioningConfig]); - - return <>{children}; -} diff --git a/src/components/LogoContainer/LogoContainer.tsx b/src/components/LogoContainer/LogoContainer.tsx deleted file mode 100644 index 21e78e4b1..000000000 --- a/src/components/LogoContainer/LogoContainer.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import './style.scss'; - -import SvgDefguardLogoText from '../../shared/components/svg/DefguardLogoText'; -import SvgTeoniteLogo from '../../shared/components/svg/TeoniteLogo'; -import { Divider } from '../../shared/defguard-ui/components/Layout/Divider/Divider'; -import { DividerDirection } from '../../shared/defguard-ui/components/Layout/Divider/types'; - -export const LogoContainer = () => { - return ( -
    - - - -
    - ); -}; diff --git a/src/components/LogoContainer/style.scss b/src/components/LogoContainer/style.scss deleted file mode 100644 index 946b702ac..000000000 --- a/src/components/LogoContainer/style.scss +++ /dev/null @@ -1,25 +0,0 @@ -.logo-container { - display: flex; - flex-flow: row; - column-gap: 40px; - align-items: center; - justify-content: center; - height: 48px; - width: 100%; - - & > .divider { - height: 100%; - } - - & > .defguard { - path { - fill: var(--text-body-primary); - } - } - - & > .teonite { - path { - fill: var(--surface-teonite-logo); - } - } -} diff --git a/src/i18n/en/index.ts b/src/i18n/en/index.ts deleted file mode 100644 index aa0ade37a..000000000 --- a/src/i18n/en/index.ts +++ /dev/null @@ -1,790 +0,0 @@ -/* eslint-disable no-irregular-whitespace */ -/* eslint-disable max-len */ -import type { BaseTranslation } from '../i18n-types'; - -const en = { - time: { - seconds: { - singular: 'second', - plural: 'seconds', - }, - minutes: { - singular: 'minute', - plural: 'minutes', - }, - }, - form: { - errors: { - invalid: 'Field is invalid', - email: 'Enter a valid E-mail', - required: 'Field is required', - minValue: 'Field requires minimal value of {min: number}', - maxValue: 'Field cannot exceed maximal value of {max: number}', - aboveZero: 'Field value must be above zero', - minLength: 'Min length of {length: number}', - maxLength: 'Max length of {length: number}', - specialsRequired: 'At least one special character', - specialsForbidden: 'Special characters are forbidden', - numberRequired: 'At least one number required', - password: { - floatingTitle: 'Please correct the following:', - }, - oneLower: 'At least one lower case character', - oneUpper: 'At least one upper case character', - duplicatedName: 'Device with this name already exists', - }, - }, - common: { - controls: { - back: 'Back', - next: 'Next', - submit: 'Submit', - cancel: 'Cancel', - close: 'Close', - reset: 'Reset', - save: 'Save', - }, - messages: { - error: 'Unexpected error occurred!', - errorWithMessage: 'An error occurred: {message}', - tokenExpired: - 'Token has expired, please contact your administrator to issue a new enrollment token', - networkError: "There was a network error. Can't reach proxy.", - configChanged: - 'Configuration for instance {instance: string} has changed. Disconnect from all locations to apply changes.', - deadConDropped: - 'Detected that the {con_type: string} {interface_name: string} has disconnected, trying to reconnect...', - noCookie: 'No defguard_proxy set-cookie received', - insecureContext: 'Context is not secure.', - clipboard: { - error: 'Clipboard is not accessible.', - success: 'Content copied to clipboard.', - }, - versionMismatch: - 'Your Defguard instance "{instance_name: string}" version is not supported by your Defguard Client version. \ - Defguard Core version: {core_version: string} (required: {core_required_version: string}), Defguard Proxy version: {proxy_version: string} (required: {proxy_required_version: string}). \ - Please contact your administrator.', - uuidMismatch: - 'The identifier (UUID) of the remote Defguard instance "{instance_name: string}" does not match the one stored locally. \ - Because of this, some features may not work correctly. To resolve this issue, remove the instance and add it again, or contact your administrator.', - }, - }, - components: { - adminInfo: { - title: 'Your admin', - }, - }, - pages: { - client: { - modals: { - deadConDropped: { - title: '{conType: string} {name: string} disconnected', - tunnel: 'Tunnel', - location: 'Location', - message: - 'The {conType: string} {name: string} has been disconnected, since we have detected that the server is not responding with any traffic for {time: number}s. If this message keeps occurring, please contact your administrator and inform them about this fact.', - controls: { - close: 'Close', - }, - }, - }, - pages: { - carouselPage: { - slides: { - shared: { - //md - isMore: '**defguard** is all the above and more!', - githubButton: 'Visit defguard on', - }, - welcome: { - // md - title: 'Welcome to **defguard** desktop client!', - instance: { - title: 'Add Instance', - subtitle: - 'Establish a connection to defguard instance effortlessly by configuring it with a single token.', - }, - tunnel: { - title: 'Add Tunnel', - subtitle: - 'Utilize it as a WireGuard® Desktop Client with ease. Set up your own tunnel or import a configuration file.', - }, - }, - twoFa: { - // md - title: 'WireGuard **2FA with defguard**', - // md - sideText: `Since WireGuard protocol doesn't support 2FA/MFA - most (if not all) currently available WireGuard clients do not support real Multi-Factor Authentication/2FA - and use 2FA just as authorization to the "application" itself (and not WireGuard tunnel). - -If you would like to secure your WireGuard instance try **defguard** VPN & SSO server (which is also free & open source) to get real 2FA using WireGuard PSK keys and peers configuration by defguard gateway!`, - }, - security: { - // md - title: 'Security and Privacy **done right!**', - // md - sideText: `* Privacy requires controlling your data, thus your user data (Identity, SSO) needs to be on-premise (on your servers) -* Securing your data and applications requires authentication and authorization (SSO) with Multi-Factor Authentication, and for highest security - MFA with Hardware Security Modules -* Accessing your data and applications securely and privately requires data encryption (HTTPS) and a secure tunnel between your device and the Internet to encrypt all traffic (VPN). -* To fully trust your SSO, VPN, it needs to be Open Source`, - }, - instances: { - // md - title: '**Multiple** instance & locations', - // md - sideText: `**defguard** (both server nad this client) support multiple instances (installations) and multiple Locations (VPN tunnels). - -If you are an admin/devops - all your customers (instances) and all their tunnels (locations) can be in one place!`, - }, - support: { - // md - title: '**Support us** on Github', - // md - text: `**defguard** is free and truly Open Source and our team has been working on it for several months. Please consider supporting us by: `, - githubText: `staring us on`, - githubLink: `GitHub`, - spreadWordText: `spreading the word about:`, - defguard: `defguard!`, - githubDiscussions: `Reach out to our community via `, - supportUs: 'Support Us!', - }, - }, - }, - settingsPage: { - title: 'Settings', - tabs: { - global: { - common: { - value_in_seconds: '(seconds)', - }, - peer_alive: { - title: 'Session timeout', - helper: - 'If active connection exceeds given time without making an handshake with the server. The connection will be considered invalid and disconnected automatically.', - }, - mtu: { - title: 'MTU (Maximum Transmission Unit)', - helper: - 'MTU sets the largest packet size sent through the network. Lowering it can improve connection stability in restrictive or unreliable ISP networks. The default value on most systems is 1500. Try lowering it to 1300-1400 if you encounter ISP-related issues. 0 = default.', - }, - tray: { - title: 'System tray', - label: 'Tray icon theme', - options: { - color: 'Color', - white: 'White', - black: 'Black', - gray: 'Gray', - }, - }, - logging: { - title: 'Logging threshold', - warning: 'Change will take effect after client restart.', - options: { - error: 'Error', - info: 'Info', - debug: 'Debug', - trace: 'Trace', - }, - }, - globalLogs: { - logSources: { - client: 'Client', - vpn: 'VPN', - all: 'All', - }, - logSourceHelper: - 'The source of the logs. Logs can come from the Defguard client or the VPN service/extension that manages VPN connections at the network level.', - }, - theme: { - title: 'Theme', - options: { - light: 'Light', - dark: 'Dark', - }, - }, - versionUpdate: { - title: 'Updates', - checkboxTitle: 'Check for updates', - }, - }, - }, - }, - createdPage: { - tunnel: { - title: 'Your Tunnel Was Added Successfully', - content: - 'Your tunnel has been successfully added. You can now connect this device, check its status and view statistics using the menu in the left sidebar.', - controls: { - submit: 'Add Another Tunnel', - }, - }, - instance: { - title: 'Your Instance Was Added Successfully', - content: - 'Your instance has been successfully added. You can now connect this device, check its status and view statistics using the menu in the left sidebar.', - controls: { - submit: 'Add Another Instance', - }, - }, - }, - instancePage: { - title: 'Locations', - //md - noData: ` -Currently you do not have access to any VPN Locations. This may be temporary - your administration team maybe is configuring your access policies. - -If this will not change, please contact your administrator.`, - controls: { - connect: 'Connect', - disconnect: 'Disconnect', - traffic: { - predefinedTraffic: 'Predefined traffic', - allTraffic: 'All traffic', - label: 'Allowed traffic', - helper: ` -

    - Predefined traffic - route only traffic for networks defined by Admin through this VPN location
    - All traffic - route ALL your network traffic through this VPN location -

    `, - }, - }, - header: { - title: 'Locations', - edit: 'Edit Instance', - filters: { - views: { - grid: 'Grid View', - detail: 'Detail View', - }, - }, - }, - connectionLabels: { - lastConnectedFrom: 'Last connected from', - lastConnected: 'Last connected', - connectedFrom: 'Connected from', - assignedIp: 'Assigned IP', - active: 'Active', - neverConnected: 'Never connected', - }, - locationNeverConnected: { - title: 'Never Connected', - content: - 'This device was never connected to this location, connect to view statistics and information about connection', - }, - LocationNoStats: { - title: 'No stats', - content: - 'This device has no stats for this location in specified time period. Connect to location and wait for client to gather statistics.', - }, - detailView: { - history: { - title: 'Connection history', - headers: { - date: 'Date', - duration: 'Duration', - connectedFrom: 'Connected from', - upload: 'Upload', - download: 'Download', - }, - }, - details: { - title: 'Details', - logs: { - title: 'Log', - }, - info: { - configuration: { - title: 'Device configuration', - pubkey: 'Public key', - address: 'Addresses', - listenPort: 'Listen port', - }, - vpn: { - title: 'VPN Server Configuration', - pubkey: 'Public key', - serverAddress: 'Server Address', - allowedIps: 'Allowed IPs', - dns: 'DNS servers', - keepalive: 'Persistent keepalive', - handshake: 'Latest Handshake', - handshakeValue: '{seconds: number} seconds ago', - }, - }, - }, - }, - }, - tunnelPage: { - title: 'WireGuard Tunnels', - header: { - edit: 'Edit Tunnel', - }, - }, - - editTunnelPage: { - title: 'Edit WireGuard® Tunnel', - messages: { - editSuccess: 'Tunnel edited', - editError: 'Editing tunnel failed', - }, - controls: { - save: 'Save changes', - }, - }, - addTunnelPage: { - title: 'Add WireGuard® Tunnel', - forms: { - initTunnel: { - title: 'Please provide Instance URL and token', - sections: { - vpnServer: 'VPN Server', - advancedOptions: 'Advanced Options', - }, - labels: { - name: 'Tunnel Name', - privateKey: 'Private Key', - publicKey: 'Public Key', - address: 'Address', - serverPubkey: 'Public Key', - presharedKey: 'Pre-shared Key', - endpoint: 'VPN Server Address:Port', - dns: 'DNS', - allowedips: 'Allowed IPs (separate with comma)', - persistentKeepAlive: 'Persistent Keep Alive (sec)', - preUp: 'PreUp', - postUp: 'PostUp', - PreDown: 'PreDown', - PostDown: 'PostDown', - }, - helpers: { - advancedOptions: - 'Click the "Advanced Options" section to reveal additional settings for fine-tuning your WireGuard tunnel configuration. You can customize pre and post scripts, among other options.', - name: 'A unique name for your WireGuard tunnel to identify it easily.', - pubkey: - 'The public key associated with the WireGuard tunnel for secure communication.', - prvkey: - 'The private key associated with the WireGuard tunnel for secure communication.', - address: - 'The IP address assigned to this WireGuard client within the VPN network.', - serverPubkey: - 'The public key of the WireGuard server for secure communication.', - presharedKey: 'Optional symmetric secret key for enhanced security.', - allowedIps: - 'A comma-separated list of IP addresses or CIDR ranges that are allowed for communication through the tunnel.', - endpoint: - 'The address and port of the WireGuard server, typically in the format "hostname:port".', - dns: 'The DNS (Domain Name System) server that the WireGuard tunnel should use for name resolution. Right now we only support DNS server IP, in the feature we will support domain search.', - persistentKeepAlive: - 'The interval (in seconds) for sending periodic keep-alive messages to ensure the tunnel stays active. Adjust as needed.', - routeAllTraffic: - 'If enabled, all network traffic will be routed through the WireGuard tunnel.', - preUp: - 'Shell commands or scripts to be executed before bringing up the WireGuard tunnel.', - postUp: - 'Shell commands or scripts to be executed after bringing up the WireGuard tunnel.', - preDown: - 'Shell commands or scripts to be executed before tearing down the WireGuard tunnel.', - postDown: - 'Shell commands or scripts to be executed after tearing down the WireGuard tunnel.', - }, - submit: 'Add Tunnel', - messages: { - configError: 'Error parsing config file', - addSuccess: 'Tunnel added', - addError: 'Creating tunnel failed', - }, - controls: { - importConfig: 'Import Config File', - generatePrvkey: 'Generate Private Key', - }, - }, - }, - guide: { - title: 'Adding WireGuard tunnel', - subTitle: `

    To establish secure communication between two or more devices over the internet create a virtual private network by configuring your tunnel.

    If you don’t see options like Table or MTU it means we do not support it for now, but will be added later.

    `, - card: { - title: 'Setting Up A new Tunnel:', - content: ` -

    1. Import Configuration File

    -
    -
      -
    • Click on the "Import Config File" button.
    • -
    • Navigate to configuration file using the file selection dialog.
    • -
    • Select the .conf file you received or created.
    • -
    -
    -

    2. Or Fill in Form on the Left

    -
    -
      -
    • Enter a name for the tunnel.
    • -
    • Provide essential details such as the private key, public key, and endpoint (server address).
    • -
    -
    -

    - For more help, please visit defguard help (https://docs.defguard.net) -

    - `, - }, - }, - }, - addInstancePage: { - title: 'Add Instance', - forms: { - initInstance: { - title: 'Please provide Instance URL and token', - labels: { - url: 'Instance URL', - token: 'Token', - }, - submit: 'Add Instance', - }, - device: { - title: 'Name this device', - labels: { - name: 'Name', - }, - submit: 'Finish', - messages: { - addSuccess: 'Device added', - }, - }, - }, - guide: { - title: 'Adding Instances and connecting to VPN locations', - subTitle: - 'In order to activate this device and access all VPN locations, you must provide the URL to your defguard instance and enter the activation token.', - card: { - title: 'You can obtain the token by', - content: ` -

    1. Invoking Remote Desktop activation process yourself

    -
    -

    - If you have access to your defguard instance (either you are at home/office where defguard is accessible), go to defguard -> your profile -> "Add device" and choose: Activate Defguard Client. Then select if you wish to have the token sent to you by email or just copy it from defguard. -

    -
    -

    2. Activating remotely by your administrator

    -
    -

    - If you do not have access to defguard - please contact your administrator (in your onboarding message/email there were the admin contact details) and ask for Remote desktop activation - best to send you the activation email, from which you can copy the instance URL & token. -

    -
    -

    - For more help, please visit defguard help (https://docs.defguard.net) -

    - `, - }, - }, - }, - }, - sideBar: { - instances: 'defguard Instances', - addInstance: 'Add Instance', - addTunnel: 'Add Tunnel', - tunnels: 'WireGuard Tunnels', - settings: 'Settings', - copyright: { - copyright: `Copyright © 2023`, - appVersion: 'Application version: {version:string}', - }, - applicationVersion: 'Application version: ', - }, - newApplicationVersion: { - header: 'New version available', - dismiss: 'Dismiss', - releaseNotes: "See what's new", - }, - }, - enrollment: { - sideBar: { - title: 'Enrollment', - steps: { - welcome: 'Welcome', - verification: 'Data verification', - password: 'Create password', - vpn: 'Configure VPN', - finish: 'Finish', - mfa: 'Configure MFA', - mfaChoice: 'Choose method', - mfaSetup: 'Complete method', - mfaRecovery: 'Recovery codes', - }, - appVersion: 'Application version', - }, - stepsIndicator: { - step: 'Step', - of: 'of', - }, - timeLeft: 'Time left', - steps: { - welcome: { - title: 'Hello, {name: string}', - explanation: ` -In order to gain access to the company infrastructure, we require you to complete this enrollment process. During this process, you will need to: - -1. Verify your data -2. Create your password -3. Configure VPN device - -You have a time limit of **{time: string} minutes** to complete this process. -If you have any questions, please consult your assigned admin.All necessary information can be found at the bottom of the sidebar.`, - }, - dataVerification: { - title: 'Data verification', - messageBox: - 'Please, check your data. If anything is wrong, notify your admin after you complete the process.', - form: { - fields: { - firstName: { - label: 'Name', - }, - lastName: { - label: 'Last name', - }, - email: { - label: 'E-mail', - }, - phone: { - label: 'Phone number', - }, - }, - }, - }, - password: { - title: 'Create password', - form: { - fields: { - password: { - label: 'Create new password', - }, - repeat: { - label: 'Confirm new password', - errors: { - matching: `Passwords aren't matching`, - }, - }, - }, - }, - }, - deviceSetup: { - desktopSetup: { - title: 'Configure this device', - controls: { - create: 'Configure device', - success: 'Device is configured', - }, - messages: { - deviceConfigured: 'Device is configured', - }, - }, - optionalMessage: `* This step is OPTIONAL. You can skip it if you wish. This can be configured later in defguard.`, - cards: { - device: { - title: 'Configure your device for VPN', - create: { - submit: 'Create Configuration', - messageBox: - 'Please be advised that you have to download the configuration now, since we do not store your private key. After this dialog is closed, you will not be able to get your full configuration file (with private keys, only blank template).', - form: { - fields: { - name: { - label: 'Device Name', - }, - public: { - label: 'My Public Key', - }, - toggle: { - generate: 'Generate key pair', - own: 'Use my own public key', - }, - }, - }, - }, - config: { - messageBox: { - auto: ` -

    - Please be advised that you have to download the configuration now, - since we do not store your private key. After this - dialog is closed, you will not be able to get your - full configuration file (with private keys, only blank template). -

    -`, - manual: ` -

    - Please be advised that configuration provided here does not include private key and uses public key to fill it's place you will need to replace it on your own for configuration to work properly. -

    -`, - }, - deviceNameLabel: 'My Device Name', - cardTitle: - 'Use provided configuration file below by scanning QR Code or importing it as file on your devices WireGuard app.', - card: { - selectLabel: 'Config file for location', - }, - }, - }, - guide: { - title: 'Quick Guide', - messageBox: 'This quick guide will help you with device configuration.', - step: 'Step {step: number}:', - steps: { - wireguard: { - content: - 'Download and install WireGuard client on your computer or app on phone.', - button: 'Download WireGuard', - }, - downloadConfig: 'Download provided configuration file to your device.', - addTunnel: `Open WireGuard and select "Add Tunnel" (Import tunnel(s) from file). Find your -Defguard configuration file and hit "OK". On phone use WireGuard app “+” icon and scan QR code.`, - activate: 'Select your tunnel from the list and press "activate".', - finish: ` -**Great work - your Defguard VPN is now active!** - -If you want to disengage your VPN connection, simply press "deactivate". -`, - }, - }, - }, - }, - finish: { - title: 'Configuration completed!', - }, - }, - }, - sessionTimeout: { - card: { - header: 'Session timed out', - message: - 'Sorry, you have exceeded the time limit to complete the process. Please try again. If you need assistance, please watch our guide or contact your administrator.', - }, - controls: { - back: 'Enter new token', - contact: 'Contact admin', - }, - }, - token: { - card: { - title: 'Please, enter your personal enrollment token', - messageBox: { - email: 'You can find token in e-mail message or use direct link.', - }, - form: { - errors: { - token: { - required: 'Token is required', - }, - }, - fields: { - token: { - placeholder: 'Token', - }, - }, - controls: { - submit: 'Next', - }, - }, - }, - }, - }, - modals: { - updateInstance: { - title: 'Update instance', - infoMessage: - "Enter the token sent by the administrator to update the Instance configuration.\nAlternatively, you can choose to remove this Instance entirely by clicking the 'Remove Instance' button below.", - form: { - fieldLabels: { - token: 'Token', - url: 'URL', - }, - fieldErrors: { - token: { - rejected: 'Token or URL rejected.', - instanceIsNotPresent: 'Instance for this token was not found.', - }, - }, - }, - controls: { - updateInstance: 'Update Instance', - removeInstance: 'Remove Instance', - }, - messages: { - success: '{name: string} updated.', - error: 'Token or URL is invalid.', - errorInstanceNotFound: 'Instance for given token is not registered !', - }, - }, - deleteInstance: { - title: 'Delete instance', - subtitle: 'Are you sure you want to delete {name: string}?', - messages: { - success: 'Instance deleted', - error: 'Unexpected error occurred', - }, - controls: { - submit: 'Delete instance', - }, - }, - deleteTunnel: { - title: 'Delete tunnel', - subtitle: 'Are you sure you want to delete {name: string}?', - messages: { - success: 'Tunnel deleted', - error: 'Unexpected error occurred', - }, - controls: { - submit: 'Delete tunnel', - }, - }, - mfa: { - authentication: { - title: 'Two-factor authentication', - authenticatorAppDescription: - 'Paste the authentication code from your Authenticator Application.', - emailCodeDescription: - 'Paste the authentication code that was sent to your email address.', - mfaStartDescriptionPrimary: - 'For this connection, two-factor authentication (2FA) is mandatory.', - mfaStartDescriptionSecondary: 'Select your preferred authentication method.', - useAuthenticatorApp: 'Use authenticator app', - useEmailCode: 'Use your email code', - saveAuthenticationMethodForFutureLogins: 'Use this method for future logins', - buttonSubmit: 'Verify', - openidLogin: { - description: - 'In order to connect to the VPN please login with {provider}. To do so, please click "Authenticate with {provider}" button below.', - browserWarning: - '**This will open a new window in your Web Browser** and automatically redirect you to the {provider} login page. After authenticating with {provider} please get back here.', - buttonText: 'Authenticate with {provider}', - }, - openidPending: { - description: 'Waiting for authentication in your browser...', - tryAgain: 'Try again', - errorDescription: - 'There was an error during authentication. Use the try again button below to retry the authentication process.', - }, - openidUnavailable: { - description: - 'The OpenID authentication is currently unavailable. This may be due to a configuration issue or the Defguard instance is down. Please contact your administrator or try again later.', - tryAgain: 'Try again', - }, - errors: { - mfaNotConfigured: 'Selected method has not been configured.', - mfaStartGeneric: - 'Could not start MFA process. Please try again or contact administrator.', - mfaFinishGeneric: - 'Could not finish MFA process. Please try again or contact administrator.', - instanceNotFound: 'Could not find instance.', - locationNotSpecified: 'Location is not specified.', - invalidCode: - 'Error, this code is invalid, try again or contact your administrator.', - tokenExpired: 'Token has expired. Please try to connect again.', - authenticationTimeout: - 'Authentication took too long and timed out. Please try connecting again.', - sessionInvalidated: - 'Error: Your login session might have been invalidated or expired. Please try again.', - }, - }, - }, - }, -} satisfies BaseTranslation; - -export default en; diff --git a/src/i18n/formatters.ts b/src/i18n/formatters.ts deleted file mode 100644 index 51a876c94..000000000 --- a/src/i18n/formatters.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { FormattersInitializer } from 'typesafe-i18n'; - -import type { Formatters, Locales } from './i18n-types'; - -// eslint-disable-next-line -export const initFormatters: FormattersInitializer = () => { - const formatters: Formatters = { - // add your formatter functions here - }; - - return formatters; -}; diff --git a/src/i18n/fr/index.ts b/src/i18n/fr/index.ts deleted file mode 100644 index 51bf3260a..000000000 --- a/src/i18n/fr/index.ts +++ /dev/null @@ -1,749 +0,0 @@ -/* eslint-disable no-irregular-whitespace */ -/* eslint-disable max-len */ -import { deepmerge } from 'deepmerge-ts'; - -import en from '../en'; -import type { BaseTranslation } from '../i18n-types'; - -const translation = { - time: { - seconds: { - singular: 'seconde', - plural: 'secondes', - }, - minutes: { - singular: 'minute', - plural: 'minutes', - }, - }, - form: { - errors: { - invalid: 'Champ invalide', - email: 'Entrez une adresse e-mail valide', - required: 'Champ requis', - minValue: 'Le champ requiert une valeur minimale de {min: number}', - maxValue: 'Le champ ne peut pas dépasser la valeur maximale de {max: number}', - aboveZero: 'La valeur du champ doit être supérieure à zéro', - minLength: 'Longueur minimale de {length: number}', - maxLength: 'Longueur maximale de {length: number}', - specialsRequired: 'Au moins un caractère spécial', - specialsForbidden: 'Les caractères spéciaux sont interdits', - numberRequired: 'Au moins un chiffre requis', - password: { - floatingTitle: 'Veuillez corriger ce qui suit :', - }, - oneLower: 'Au moins une lettre minuscule', - oneUpper: 'Au moins une lettre majuscule', - duplicatedName: 'Un appareil avec ce nom existe déjà', - }, - }, - common: { - controls: { - back: 'Retour', - next: 'Suivant', - submit: 'Soumettre', - cancel: 'Annuler', - close: 'Fermer', - reset: 'Réinitialiser', - save: 'Enregistrer', - }, - messages: { - error: "Une erreur inattendue s'est produite !", - errorWithMessage: "Une erreur s'est produite : {message}", - tokenExpired: - "Le jeton a expiré, veuillez contacter votre administrateur pour émettre un nouveau jeton d'inscription", - networkError: "Il y a eu une erreur réseau. Impossible d'atteindre le proxy.", - configChanged: - "La configuration pour l'instance {instance: string} a changé. Déconnectez-vous de tous les emplacements pour appliquer les modifications.", - deadConDropped: - "L '{conType: string} {name: string} a été déconnecté, tentative de reconnexion...", - noCookie: 'Aucun defguard_proxy set-cookie reçu', - }, - }, - components: { - adminInfo: { - title: 'Votre administrateur', - }, - }, - pages: { - client: { - modals: { - deadConDropped: { - title: '{conType: string} {name: string} déconnecté', - tunnel: 'Tunnel', - location: 'Emplacement', - message: - "L '{conType: string} {name: string} a été déconnecté, car nous avons détecté que le serveur ne répond pas avec du trafic depuis {time: number}s. Si ce message continue d'apparaître, veuillez contacter votre administrateur", - controls: { - close: 'Fermer', - }, - }, - }, - pages: { - carouselPage: { - slides: { - shared: { - //md - isMore: '**defguard** est tout cela et plus encore !', - githubButton: 'Visitez defguard sur', - }, - welcome: { - // md - title: 'Bienvenue sur le client **defguard** !', - instance: { - title: 'Ajouter une instance', - subtitle: - 'Établissez une connexion à une instance defguard sans effort en la configurant avec un seul jeton.', - }, - tunnel: { - title: 'Ajouter un tunnel', - subtitle: - 'Utilisez-le simplement comme un client WireGuard®. Configurez votre propre tunnel ou importez un fichier de configuration.', - }, - }, - twoFa: { - // md - title: 'WireGuard **2FA avec defguard**', - // md - sideText: `Le protocole WireGuard ne supporte pas le 2FA/MFA - la plupart (sinon tous) des clients WireGuard actuellement disponibles ne supportent pas l'authentification multi-facteurs/2FA réelle - et utilisent le 2FA uniquement comme autorisation à l'"application" elle-même (et non au tunnel WireGuard). - -Si vous souhaitez sécuriser votre instance WireGuard, essayez le serveur **defguard** VPN & SSO (qui est également gratuit et open source) pour obtenir un véritable 2FA en utilisant les clés PSK WireGuard et la configuration des pairs par la passerelle defguard !`, - }, - security: { - // md - title: "Une sécurité et une confidentialité dans **les règles de l'art**", - // md - sideText: `* La confidentialité nécessite le contrôle de vos données (Identité, SSO), elles doivent donc être hebergées sur vos serveurs. -* La sécurisation de vos données et applications nécessite une authentification et une autorisation (SSO) avec une authentification multi-facteurs. Pour une sécurité plus evoluée - du MFA avec un module de sécurité matériel. -* L'accés sécurisé et confidentielle à vos données et applications nécessite un chiffrement des données (HTTPS) et un tunnel sécurisé, entre votre appareil et Internet, pour bénéficier d'un chiffrement de bout en bout du trafic (VPN). -* Pour faire entièrement confiance à vos solutions SSO & VPN, elle doivent être open source`, - }, - instances: { - // md - title: '**Multiples** instances et emplacements', - // md - sideText: `**defguard** (le serveur et ce client) supporte plusieurs instances (installations) et plusieurs emplacements (tunnels VPN). - -Si vous êtes un administrateur/devops - tous vos clients (instances) et tous leurs tunnels (emplacements) peuvent être au même endroit !`, - }, - support: { - // md - title: '**Soutenez-nous** sur Github', - // md - text: `**defguard** est gratuit et véritablement open source. Notre équipe travaille sur ce projet depuis plusieurs mois. N'ésitez pas à nous soutenir : `, - githubText: `En nous mettant des étoiles sur`, - githubLink: `GitHub`, - spreadWordText: `En faisant passer le mot sur :`, - defguard: `defguard !`, - githubDiscussions: `Contactez notre communauté via `, - supportUs: 'Soutenez-nous !', - }, - }, - }, - settingsPage: { - title: 'Paramètres', - tabs: { - global: { - common: { - value_in_seconds: '(secondes)', - }, - peer_alive: { - title: 'Délai de session', - helper: - 'Si une connexion active dépasse le temps donné sans effectuer de handshake avec le serveur. La connexion sera considérée comme invalide et déconnectée automatiquement.', - }, - tray: { - title: "Barre d'état", - label: "Thème de l'icône de la barre d'état", - options: { - color: 'Couleur', - white: 'Blanc', - black: 'Noir', - gray: 'Gris', - }, - }, - logging: { - title: 'Niveau de journalisation', - warning: 'Le changement prendra effet après le redémarrage du client.', - options: { - error: 'Erreur', - info: 'Info', - debug: 'Débogage', - trace: 'Trace', - }, - }, - globalLogs: { - logSources: { - client: 'Client', - vpn: 'VPN', - all: 'Tous', - }, - logSourceHelper: - 'La source des journaux. Les journaux peuvent provenir du client Defguard ou du service/extension VPN qui gère les connexions VPN au niveau du réseau.', - }, - theme: { - title: 'Thème', - options: { - light: 'Clair', - dark: 'Sombre', - }, - }, - versionUpdate: { - title: 'Mises à jour', - checkboxTitle: 'Vérifier les mises à jour', - }, - }, - }, - }, - createdPage: { - tunnel: { - title: 'Votre tunnel a été ajouté avec succès', - content: - 'Votre tunnel a été ajouté avec succès. Vous pouvez maintenant connecter cet appareil. Vérifiez son état et les statistiques en utilisant le menu dans la barre latérale de gauche.', - controls: { - submit: 'Ajouter un autre tunnel', - }, - }, - instance: { - title: 'Votre instance a été ajoutée avec succès', - content: - 'Votre instance a été ajoutée avec succès. Vous pouvez maintenant connecter cet appareil. Vérifier son état et les statistiques en utilisant le menu dans la barre latérale de gauche.', - controls: { - submit: 'Ajouter une autre instance', - }, - }, - }, - instancePage: { - title: 'Emplacements', - controls: { - connect: 'Connecter', - disconnect: 'Déconnecter', - traffic: { - predefinedTraffic: 'Trafic prédéfini', - allTraffic: 'Tout le trafic', - label: 'Trafic autorisé', - helper: ` -

    - Trafic prédéfini - router uniquement le trafic pour les réseaux définis par l'administrateur via cet emplacement VPN
    - Tout le trafic - router L'INTEGRALITE de votre trafic réseau via cet emplacement VPN -

    `, - }, - }, - header: { - title: 'Emplacements', - edit: "Modifier l'instance", - filters: { - views: { - grid: 'Vue en grille', - detail: 'Vue détaillée', - }, - }, - }, - connectionLabels: { - lastConnectedFrom: 'Dernière connexion depuis', - lastConnected: 'Dernière connexion', - connectedFrom: 'Connecté depuis', - assignedIp: 'IP attribuée', - active: 'Actif', - neverConnected: 'Jamais connecté', - }, - locationNeverConnected: { - title: 'Jamais connecté', - content: - "Cet appareil n'a jamais été connecté à cet emplacement, connectez-vous pour voir les statistiques et les informations sur la connexion", - }, - LocationNoStats: { - title: 'Aucune statistique', - content: - "Cet appareil n'a aucune statistique pour cet emplacement dans la période de temps spécifiée. Connectez-vous à l'emplacement et attendez que le client rassemble les statistiques.", - }, - detailView: { - history: { - title: 'Historique des connexions', - headers: { - date: 'Date', - duration: 'Durée', - connectedFrom: 'Connecté depuis', - upload: 'Téléversement', - download: 'Téléchargement', - }, - }, - details: { - title: 'Détails', - logs: { - title: 'Journal', - }, - info: { - configuration: { - title: "Configuration de l'appareil", - pubkey: 'Clé publique', - address: 'Adresses', - listenPort: "Port d'écoute", - }, - vpn: { - title: 'Configuration du serveur VPN', - pubkey: 'Clé publique', - serverAddress: 'Adresse du serveur', - allowedIps: 'IP autorisées', - dns: 'Serveurs DNS', - keepalive: 'Keepalive', - handshake: 'Handshake', - handshakeValue: '{seconds: number} secondes', - }, - }, - }, - }, - }, - tunnelPage: { - title: 'Tunnels WireGuard', - header: { - edit: 'Modifier le tunnel', - }, - }, - - editTunnelPage: { - title: 'Modifier le tunnel WireGuard®', - messages: { - editSuccess: 'Tunnel modifié', - editError: 'Échec de la modification du tunnel', - }, - controls: { - save: 'Enregistrer les modifications', - }, - }, - addTunnelPage: { - title: 'Ajouter un tunnel WireGuard®', - forms: { - initTunnel: { - title: "Veuillez fournir l'URL de l'instance et le jeton", - sections: { - vpnServer: 'Serveur VPN', - advancedOptions: 'Options avancées', - }, - labels: { - name: 'Nom du tunnel', - privateKey: 'Clé privée', - publicKey: 'Clé publique', - address: 'Adresse', - serverPubkey: 'Clé publique', - presharedKey: 'Clé pré-partagée', - endpoint: 'Adresse:Port du serveur VPN', - dns: 'DNS', - allowedips: 'IP autorisées (séparées par une virgule)', - persistentKeepAlive: 'Keep Alive persistant (sec)', - preUp: 'PreUp', - postUp: 'PostUp', - PreDown: 'PreDown', - PostDown: 'PostDown', - }, - helpers: { - advancedOptions: `Cliquez sur la section "Options avancées" pour afficher les paramètres supplémentaires permettant d'affiner la configuration de votre tunnel WireGuard. Parmi les options disponibles, vous pouvez personnaliser les scripts de pré-exécution/post-exécution`, - name: "Un nom unique pour votre tunnel WireGuard afin de l'identifier facilement.", - pubkey: - 'La clé publique associée au tunnel WireGuard pour une communication sécurisée.', - prvkey: - 'La clé privée associée au tunnel WireGuard pour une communication sécurisée.', - address: - "L'adresse IP attribuée à ce client WireGuard au sein du réseau VPN.", - serverPubkey: - 'La clé publique du serveur WireGuard pour une communication sécurisée.', - presharedKey: - 'Clé secrète symétrique optionnelle pour une sécurité renforcée.', - allowedIps: - "Une liste d'adresses IP ou de plages CIDR séparées par des virgules qui sont autorisées pour la communication via le tunnel.", - endpoint: `L'adresse et le port du serveur WireGuard, généralement au format "nom_hôte:port".`, - dns: "Le serveur DNS (Domain Name System) que le tunnel WireGuard doit utiliser pour la résolution de noms. Actuellement, nous ne supportons que l'adresse IP du serveur DNS, mais nous supporterons la recherche de domaine à l'avenir.", - persistentKeepAlive: - "L'intervalle (en secondes) pour envoyer des messages keep-alive périodiques afin de maintenir le tunnel actif. Ajustez selon les besoins.", - routeAllTraffic: - 'Si activé, tout le trafic réseau sera routé via le tunnel WireGuard.', - preUp: - 'Commandes shell ou scripts à exécuter avant de monter le tunnel WireGuard.', - postUp: - 'Commandes shell ou scripts à exécuter après avoir monté le tunnel WireGuard.', - preDown: - 'Commandes shell ou scripts à exécuter avant de démonter le tunnel WireGuard.', - postDown: - 'Commandes shell ou scripts à exécuter après avoir démonté le tunnel WireGuard.', - }, - submit: 'Ajouter un tunnel', - messages: { - configError: "Erreur lors de l'analyse du fichier de configuration", - addSuccess: 'Tunnel ajouté', - addError: 'Échec de la création du tunnel', - }, - controls: { - importConfig: 'Importer un fichier de configuration', - generatePrvkey: 'Générer une clé privée', - }, - }, - }, - guide: { - title: "Ajout d'un tunnel WireGuard", - subTitle: `

    Pour établir une communication sécurisée entre deux appareils ou plus sur Internet, créez un réseau privé virtuel en configurant votre tunnel.

    Si vous ne voyez pas d'options comme Table ou MTU, cela signifie que nous ne les supportons pas pour le moment, mais elles seront ajoutées plus tard.

    `, - card: { - title: "Configuration d'un nouveau tunnel :", - content: ` -

    1. Importer un fichier de configuration

    -
    -
      -
    • Cliquez sur le bouton "Importer un fichier de configuration".
    • -
    • Accédez au fichier de configuration en utilisant la boîte de dialogue de sélection de fichier.
    • -
    • Sélectionnez le fichier .conf que vous avez reçu ou créé.
    • -
    -
    -

    2. Ou remplissez le formulaire à gauche

    -
    -
      -
    • Entrez un nom pour le tunnel.
    • -
    • Fournissez les détails nécessaires tels que la clé privée, la clé publique et l'endpoint (adresse du serveur).
    • -
    -
    -

    - Pour plus d'aide, veuillez visiter l'aide defguard (https://docs.defguard.net) -

    - `, - }, - }, - }, - addInstancePage: { - title: 'Ajouter une instance', - forms: { - initInstance: { - title: "Veuillez fournir l'URL de l'instance et le jeton", - labels: { - url: "URL de l'instance", - token: 'Jeton', - }, - submit: 'Ajouter une instance', - }, - device: { - title: 'Nommez cet appareil', - labels: { - name: 'Nom', - }, - submit: 'Terminer', - messages: { - addSuccess: 'Appareil ajouté', - }, - }, - }, - guide: { - title: "Ajout d'instances et connexion aux emplacements VPN", - subTitle: - "Afin d'activer cet appareil et d'accéder à tous les emplacements VPN, vous devez fournir l'URL de votre instance defguard et entrer le jeton d'activation.", - card: { - title: 'Vous pouvez obtenir le jeton en', - content: ` -

    1. Invoquant le processus d'activation du Bureau à distance vous-même

    -
    -

    - Si vous avez accès à votre instance defguard (depuis chez vous ou au bureau), allez sur defguard -> votre profil -> "Ajouter un appareil" et choisissez : Activer le client Defguard. Ensuite, choisissez si vous souhaitez que le jeton vous soit envoyé par e-mail ou simplement le copier depuis defguard. -

    -
    -

    2. L'activant à distance par votre administrateur

    -
    -

    - Si vous n'avez pas accès à defguard - veuillez contacter votre administrateur (dans votre message/e-mail d'intégration se trouvent les coordonnées de l'administrateur) et demandez l'activation du bureau à distance - le mieux est de vous envoyer l'e-mail d'activation, à partir duquel vous pourrez copier l'URL de l'instance et le jeton. -

    -
    -

    - Pour plus d'aide, veuillez visiter l'aide defguard (https://docs.defguard.net) -

    - `, - }, - }, - }, - }, - sideBar: { - instances: 'Instances defguard', - addInstance: 'Ajouter une instance', - addTunnel: 'Ajouter un tunnel', - tunnels: 'Tunnels WireGuard', - settings: 'Paramètres', - copyright: { - copyright: `Copyright © 2023`, - appVersion: "Version de l'application : {version:string}", - }, - applicationVersion: "Version de l'application : ", - }, - newApplicationVersion: { - header: 'Nouvelle version disponible', - dismiss: 'Ignorer', - releaseNotes: 'Voir les nouveautés', - }, - }, - enrollment: { - sideBar: { - title: 'Inscription', - steps: { - welcome: 'Bienvenue', - verification: 'Vérification des données', - password: 'Créer un mot de passe', - vpn: 'Configurer le VPN', - finish: 'Terminer', - }, - appVersion: "Version de l'application", - }, - stepsIndicator: { - step: 'Étape', - of: 'sur', - }, - timeLeft: 'Temps restant', - steps: { - welcome: { - title: 'Bonjour, {name: string}', - explanation: ` -Afin d'accéder à l'infrastructure de l'entreprise, vous devez compléter ce formulaire d'inscription. Au cours de ce processus, vous devrez : - -1. Vérifier vos données -2. Créer votre mot de passe -3. Configurer l'appareil VPN - -Vous avez un délai de **{time: string} minutes** pour le compléter. -Si vous avez des questions, veuillez consulter votre administrateur. Toutes les informations nécessaires se trouvent en bas de la barre latérale.`, - }, - dataVerification: { - title: 'Vérification des données', - messageBox: - 'Veuillez vérifier vos données. Si quelque chose ne va pas, informez votre administrateur après avoir terminé.', - form: { - fields: { - firstName: { - label: 'Prénom', - }, - lastName: { - label: 'Nom de famille', - }, - email: { - label: 'E-mail', - }, - phone: { - label: 'Numéro de téléphone', - }, - }, - }, - }, - password: { - title: 'Créer un mot de passe', - form: { - fields: { - password: { - label: 'Créer un nouveau mot de passe', - }, - repeat: { - label: 'Confirmer le nouveau mot de passe', - errors: { - matching: `Les mots de passe ne correspondent pas`, - }, - }, - }, - }, - }, - deviceSetup: { - desktopSetup: { - title: 'Configurer cet appareil', - controls: { - create: "Configurer l'appareil", - success: "L'appareil est configuré", - }, - messages: { - deviceConfigured: "L'appareil est configuré", - }, - }, - optionalMessage: `* Cette étape est OPTIONNELLE. Vous pouvez l'ignorer si vous le souhaitez. Cela peut être configuré plus tard.`, - cards: { - device: { - title: 'Configurer votre appareil pour le VPN', - create: { - submit: 'Créer la configuration', - messageBox: - 'Veuillez noter que vous devez télécharger la configuration, car nous ne stockons pas votre clé privée. Après la fermeture de cette boîte de dialogue, vous ne pourrez plus obtenir votre fichier de configuration complet (avec les clés privées, uniquement un modèle vierge).', - form: { - fields: { - name: { - label: "Nom de l'appareil", - }, - public: { - label: 'Ma clé publique', - }, - toggle: { - generate: 'Générer une paire de clés', - own: 'Utiliser ma propre clé publique', - }, - }, - }, - }, - config: { - messageBox: { - auto: ` -

    - Veuillez noter que vous devez télécharger la configuration, - car nous ne stockons pas votre clé privée. Après la fermeture de - cette boîte de dialogue, vous ne pourrez plus obtenir - votre fichier de configuration complet (avec les clés privées, uniquement un modèle vierge). -

    -`, - manual: ` -

    - Veuillez noter que la configuration fournie ici inclut la clé publique en lieu et place de la clé privée. Vous devrez la remplacer pour que la configuration fonctionne correctement. -

    -`, - }, - deviceNameLabel: 'Nom de mon appareil', - cardTitle: - "Utilisez le fichier de configuration fourni ci-dessous en scannant le code QR ou en l'important comme fichier sur l'application WireGuard de votre appareil.", - card: { - selectLabel: "Fichier de configuration pour l'emplacement", - }, - }, - }, - guide: { - title: 'Guide rapide', - messageBox: 'Ce guide rapide vous aidera à configurer votre appareil.', - step: 'Étape {step: number} :', - steps: { - wireguard: { - content: - "Téléchargez et installez le client WireGuard sur votre ordinateur ou l'application sur votre téléphone.", - button: 'Télécharger WireGuard', - }, - downloadConfig: - 'Téléchargez le fichier de configuration fourni sur votre appareil.', - addTunnel: `Ouvrez WireGuard et sélectionnez "Ajouter un tunnel" (Importer des tunnels depuis un fichier). Trouvez votre -fichier de configuration Defguard et cliquez sur "OK". Sur le téléphone, utilisez l'icône “+” de l'application WireGuard et scannez le code QR.`, - activate: - 'Sélectionnez votre tunnel dans la liste et appuyez sur "activer".', - finish: ` -**Bravo - votre VPN Defguard est maintenant actif !** - -Si vous souhaitez désactiver votre connexion VPN, appuyez simplement sur "désactiver". -`, - }, - }, - }, - }, - finish: { - title: 'Configuration terminée !', - }, - }, - }, - sessionTimeout: { - card: { - header: 'Session expirée', - message: - "Désolé, vous avez dépassé le délai pour compléter le formulaire. Veuillez réessayer. Si vous avez besoin d'aide, veuillez consulter notre guide ou contacter votre administrateur.", - }, - controls: { - back: 'Entrer un nouveau jeton', - contact: "Contacter l'administrateur", - }, - }, - token: { - card: { - title: "Veuillez entrer votre jeton d'inscription personnel", - messageBox: { - email: - 'Vous pouvez trouver le jeton dans le message e-mail ou utiliser le lien direct.', - }, - form: { - errors: { - token: { - required: 'Jeton requis', - }, - }, - fields: { - token: { - placeholder: 'Jeton', - }, - }, - controls: { - submit: 'Suivant', - }, - }, - }, - }, - }, - modals: { - updateInstance: { - title: "Mettre à jour l'instance", - infoMessage: - "Entrez le jeton envoyé par l'administrateur pour mettre à jour la configuration de l'Instance.\nAlternativement, vous pouvez choisir de supprimer entièrement cette Instance en cliquant sur le bouton 'Supprimer l'Instance' ci-dessous.", - form: { - fieldLabels: { - token: 'Jeton', - url: 'URL', - }, - fieldErrors: { - token: { - rejected: 'Jeton ou URL rejeté.', - instanceIsNotPresent: 'Instance pour ce jeton non trouvée.', - }, - }, - }, - controls: { - updateInstance: "Mettre à jour l'Instance", - removeInstance: "Supprimer l'Instance", - }, - messages: { - success: '{name: string} mis à jour.', - error: 'Jeton ou URL invalide.', - errorInstanceNotFound: 'Instance pour le jeton donné non enregistrée !', - }, - }, - deleteInstance: { - title: "Supprimer l'instance", - subtitle: 'Êtes-vous sûr de vouloir supprimer {name: string} ?', - messages: { - success: 'Instance supprimée', - error: "Une erreur inattendue s'est produite", - }, - controls: { - submit: "Supprimer l'instance", - }, - }, - deleteTunnel: { - title: 'Supprimer le tunnel', - subtitle: 'Êtes-vous sûr de vouloir supprimer {name: string} ?', - messages: { - success: 'Tunnel supprimé', - error: "Une erreur inattendue s'est produite", - }, - controls: { - submit: 'Supprimer le tunnel', - }, - }, - mfa: { - authentication: { - title: 'Authentification à deux facteurs', - authenticatorAppDescription: - "Collez le code d'authentification de votre application Authenticator.", - emailCodeDescription: - "Collez le code d'authentification qui a été envoyé à votre adresse e-mail.", - mfaStartDescriptionPrimary: - "Pour cette connexion, l'authentification à deux facteurs (2FA) est obligatoire.", - mfaStartDescriptionSecondary: - "Sélectionnez votre méthode d'authentification préférée.", - useAuthenticatorApp: "Utiliser l'application authenticator", - useEmailCode: 'Utiliser votre code e-mail', - saveAuthenticationMethodForFutureLogins: - 'Utiliser cette méthode pour les connexions futures', - buttonSubmit: 'Vérifier', - errors: { - mfaNotConfigured: "La méthode sélectionnée n'a pas été configurée.", - mfaStartGeneric: - "Impossible de démarrer le processus MFA. Veuillez réessayer ou contacter l'administrateur.", - instanceNotFound: "Impossible de trouver l'instance.", - locationNotSpecified: 'Emplacement non spécifié.', - invalidCode: - 'Erreur, ce code est invalide, veuillez réessayer ou contacter votre administrateur.', - tokenExpired: 'Le jeton a expiré. Veuillez essayer de vous reconnecter.', - }, - }, - }, - }, -} satisfies BaseTranslation; - -const fr = deepmerge(en, translation); - -export default fr; diff --git a/src/i18n/i18n-react.tsx b/src/i18n/i18n-react.tsx deleted file mode 100644 index f113051fa..000000000 --- a/src/i18n/i18n-react.tsx +++ /dev/null @@ -1,16 +0,0 @@ -// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. -/* eslint-disable */ - -import { useContext } from 'react' -import { initI18nReact } from 'typesafe-i18n/react' -import type { I18nContextType } from 'typesafe-i18n/react' -import type { Formatters, Locales, TranslationFunctions, Translations } from './i18n-types' -import { loadedFormatters, loadedLocales } from './i18n-util' - -const { component: TypesafeI18n, context: I18nContext } = initI18nReact(loadedLocales, loadedFormatters) - -const useI18nContext = (): I18nContextType => useContext(I18nContext) - -export { I18nContext, useI18nContext } - -export default TypesafeI18n diff --git a/src/i18n/i18n-types.ts b/src/i18n/i18n-types.ts deleted file mode 100644 index 0808669e1..000000000 --- a/src/i18n/i18n-types.ts +++ /dev/null @@ -1,3432 +0,0 @@ -// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. -/* eslint-disable */ -import type { BaseTranslation as BaseTranslationType, LocalizedString, RequiredParams } from 'typesafe-i18n' - -export type BaseTranslation = BaseTranslationType -export type BaseLocale = 'en' - -export type Locales = - | 'en' - | 'fr' - -export type Translation = RootTranslation - -export type Translations = RootTranslation - -type RootTranslation = { - time: { - seconds: { - /** - * s​e​c​o​n​d - */ - singular: string - /** - * s​e​c​o​n​d​s - */ - plural: string - } - minutes: { - /** - * m​i​n​u​t​e - */ - singular: string - /** - * m​i​n​u​t​e​s - */ - plural: string - } - } - form: { - errors: { - /** - * F​i​e​l​d​ ​i​s​ ​i​n​v​a​l​i​d - */ - invalid: string - /** - * E​n​t​e​r​ ​a​ ​v​a​l​i​d​ ​E​-​m​a​i​l - */ - email: string - /** - * F​i​e​l​d​ ​i​s​ ​r​e​q​u​i​r​e​d - */ - required: string - /** - * F​i​e​l​d​ ​r​e​q​u​i​r​e​s​ ​m​i​n​i​m​a​l​ ​v​a​l​u​e​ ​o​f​ ​{​m​i​n​} - * @param {number} min - */ - minValue: RequiredParams<'min'> - /** - * F​i​e​l​d​ ​c​a​n​n​o​t​ ​e​x​c​e​e​d​ ​m​a​x​i​m​a​l​ ​v​a​l​u​e​ ​o​f​ ​{​m​a​x​} - * @param {number} max - */ - maxValue: RequiredParams<'max'> - /** - * F​i​e​l​d​ ​v​a​l​u​e​ ​m​u​s​t​ ​b​e​ ​a​b​o​v​e​ ​z​e​r​o - */ - aboveZero: string - /** - * M​i​n​ ​l​e​n​g​t​h​ ​o​f​ ​{​l​e​n​g​t​h​} - * @param {number} length - */ - minLength: RequiredParams<'length'> - /** - * M​a​x​ ​l​e​n​g​t​h​ ​o​f​ ​{​l​e​n​g​t​h​} - * @param {number} length - */ - maxLength: RequiredParams<'length'> - /** - * A​t​ ​l​e​a​s​t​ ​o​n​e​ ​s​p​e​c​i​a​l​ ​c​h​a​r​a​c​t​e​r - */ - specialsRequired: string - /** - * S​p​e​c​i​a​l​ ​c​h​a​r​a​c​t​e​r​s​ ​a​r​e​ ​f​o​r​b​i​d​d​e​n - */ - specialsForbidden: string - /** - * A​t​ ​l​e​a​s​t​ ​o​n​e​ ​n​u​m​b​e​r​ ​r​e​q​u​i​r​e​d - */ - numberRequired: string - password: { - /** - * P​l​e​a​s​e​ ​c​o​r​r​e​c​t​ ​t​h​e​ ​f​o​l​l​o​w​i​n​g​: - */ - floatingTitle: string - } - /** - * A​t​ ​l​e​a​s​t​ ​o​n​e​ ​l​o​w​e​r​ ​c​a​s​e​ ​c​h​a​r​a​c​t​e​r - */ - oneLower: string - /** - * A​t​ ​l​e​a​s​t​ ​o​n​e​ ​u​p​p​e​r​ ​c​a​s​e​ ​c​h​a​r​a​c​t​e​r - */ - oneUpper: string - /** - * D​e​v​i​c​e​ ​w​i​t​h​ ​t​h​i​s​ ​n​a​m​e​ ​a​l​r​e​a​d​y​ ​e​x​i​s​t​s - */ - duplicatedName: string - } - } - common: { - controls: { - /** - * B​a​c​k - */ - back: string - /** - * N​e​x​t - */ - next: string - /** - * S​u​b​m​i​t - */ - submit: string - /** - * C​a​n​c​e​l - */ - cancel: string - /** - * C​l​o​s​e - */ - close: string - /** - * R​e​s​e​t - */ - reset: string - /** - * S​a​v​e - */ - save: string - } - messages: { - /** - * U​n​e​x​p​e​c​t​e​d​ ​e​r​r​o​r​ ​o​c​c​u​r​r​e​d​! - */ - error: string - /** - * A​n​ ​e​r​r​o​r​ ​o​c​c​u​r​r​e​d​:​ ​{​m​e​s​s​a​g​e​} - * @param {unknown} message - */ - errorWithMessage: RequiredParams<'message'> - /** - * T​o​k​e​n​ ​h​a​s​ ​e​x​p​i​r​e​d​,​ ​p​l​e​a​s​e​ ​c​o​n​t​a​c​t​ ​y​o​u​r​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​ ​t​o​ ​i​s​s​u​e​ ​a​ ​n​e​w​ ​e​n​r​o​l​l​m​e​n​t​ ​t​o​k​e​n - */ - tokenExpired: string - /** - * T​h​e​r​e​ ​w​a​s​ ​a​ ​n​e​t​w​o​r​k​ ​e​r​r​o​r​.​ ​C​a​n​'​t​ ​r​e​a​c​h​ ​p​r​o​x​y​. - */ - networkError: string - /** - * C​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​o​r​ ​i​n​s​t​a​n​c​e​ ​{​i​n​s​t​a​n​c​e​}​ ​h​a​s​ ​c​h​a​n​g​e​d​.​ ​D​i​s​c​o​n​n​e​c​t​ ​f​r​o​m​ ​a​l​l​ ​l​o​c​a​t​i​o​n​s​ ​t​o​ ​a​p​p​l​y​ ​c​h​a​n​g​e​s​. - * @param {string} instance - */ - configChanged: RequiredParams<'instance'> - /** - * D​e​t​e​c​t​e​d​ ​t​h​a​t​ ​t​h​e​ ​{​c​o​n​_​t​y​p​e​}​ ​{​i​n​t​e​r​f​a​c​e​_​n​a​m​e​}​ ​h​a​s​ ​d​i​s​c​o​n​n​e​c​t​e​d​,​ ​t​r​y​i​n​g​ ​t​o​ ​r​e​c​o​n​n​e​c​t​.​.​. - * @param {string} con_type - * @param {string} interface_name - */ - deadConDropped: RequiredParams<'con_type' | 'interface_name'> - /** - * N​o​ ​d​e​f​g​u​a​r​d​_​p​r​o​x​y​ ​s​e​t​-​c​o​o​k​i​e​ ​r​e​c​e​i​v​e​d - */ - noCookie: string - /** - * C​o​n​t​e​x​t​ ​i​s​ ​n​o​t​ ​s​e​c​u​r​e​. - */ - insecureContext: string - clipboard: { - /** - * C​l​i​p​b​o​a​r​d​ ​i​s​ ​n​o​t​ ​a​c​c​e​s​s​i​b​l​e​. - */ - error: string - /** - * C​o​n​t​e​n​t​ ​c​o​p​i​e​d​ ​t​o​ ​c​l​i​p​b​o​a​r​d​. - */ - success: string - } - /** - * Y​o​u​r​ ​D​e​f​g​u​a​r​d​ ​i​n​s​t​a​n​c​e​ ​"​{​i​n​s​t​a​n​c​e​_​n​a​m​e​}​"​ ​v​e​r​s​i​o​n​ ​i​s​ ​n​o​t​ ​s​u​p​p​o​r​t​e​d​ ​b​y​ ​y​o​u​r​ ​D​e​f​g​u​a​r​d​ ​C​l​i​e​n​t​ ​v​e​r​s​i​o​n​.​ ​ ​ ​ ​ ​ ​ ​ ​ ​D​e​f​g​u​a​r​d​ ​C​o​r​e​ ​v​e​r​s​i​o​n​:​ ​{​c​o​r​e​_​v​e​r​s​i​o​n​}​ ​(​r​e​q​u​i​r​e​d​:​ ​{​c​o​r​e​_​r​e​q​u​i​r​e​d​_​v​e​r​s​i​o​n​}​)​,​ ​D​e​f​g​u​a​r​d​ ​P​r​o​x​y​ ​v​e​r​s​i​o​n​:​ ​{​p​r​o​x​y​_​v​e​r​s​i​o​n​}​ ​(​r​e​q​u​i​r​e​d​:​ ​{​p​r​o​x​y​_​r​e​q​u​i​r​e​d​_​v​e​r​s​i​o​n​}​)​.​ ​ ​ ​ ​ ​ ​ ​ ​ ​P​l​e​a​s​e​ ​c​o​n​t​a​c​t​ ​y​o​u​r​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​. - * @param {string} core_required_version - * @param {string} core_version - * @param {string} instance_name - * @param {string} proxy_required_version - * @param {string} proxy_version - */ - versionMismatch: RequiredParams<'core_required_version' | 'core_version' | 'instance_name' | 'proxy_required_version' | 'proxy_version'> - /** - * T​h​e​ ​i​d​e​n​t​i​f​i​e​r​ ​(​U​U​I​D​)​ ​o​f​ ​t​h​e​ ​r​e​m​o​t​e​ ​D​e​f​g​u​a​r​d​ ​i​n​s​t​a​n​c​e​ ​"​{​i​n​s​t​a​n​c​e​_​n​a​m​e​}​"​ ​d​o​e​s​ ​n​o​t​ ​m​a​t​c​h​ ​t​h​e​ ​o​n​e​ ​s​t​o​r​e​d​ ​l​o​c​a​l​l​y​.​ ​ ​ ​ ​ ​ ​ ​ ​ ​B​e​c​a​u​s​e​ ​o​f​ ​t​h​i​s​,​ ​s​o​m​e​ ​f​e​a​t​u​r​e​s​ ​m​a​y​ ​n​o​t​ ​w​o​r​k​ ​c​o​r​r​e​c​t​l​y​.​ ​T​o​ ​r​e​s​o​l​v​e​ ​t​h​i​s​ ​i​s​s​u​e​,​ ​r​e​m​o​v​e​ ​t​h​e​ ​i​n​s​t​a​n​c​e​ ​a​n​d​ ​a​d​d​ ​i​t​ ​a​g​a​i​n​,​ ​o​r​ ​c​o​n​t​a​c​t​ ​y​o​u​r​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​. - * @param {string} instance_name - */ - uuidMismatch: RequiredParams<'instance_name'> - } - } - components: { - adminInfo: { - /** - * Y​o​u​r​ ​a​d​m​i​n - */ - title: string - } - } - pages: { - client: { - modals: { - deadConDropped: { - /** - * {​c​o​n​T​y​p​e​}​ ​{​n​a​m​e​}​ ​d​i​s​c​o​n​n​e​c​t​e​d - * @param {string} conType - * @param {string} name - */ - title: RequiredParams<'conType' | 'name'> - /** - * T​u​n​n​e​l - */ - tunnel: string - /** - * L​o​c​a​t​i​o​n - */ - location: string - /** - * T​h​e​ ​{​c​o​n​T​y​p​e​}​ ​{​n​a​m​e​}​ ​h​a​s​ ​b​e​e​n​ ​d​i​s​c​o​n​n​e​c​t​e​d​,​ ​s​i​n​c​e​ ​w​e​ ​h​a​v​e​ ​d​e​t​e​c​t​e​d​ ​t​h​a​t​ ​t​h​e​ ​s​e​r​v​e​r​ ​i​s​ ​n​o​t​ ​r​e​s​p​o​n​d​i​n​g​ ​w​i​t​h​ ​a​n​y​ ​t​r​a​f​f​i​c​ ​f​o​r​ ​{​t​i​m​e​}​s​.​ ​I​f​ ​t​h​i​s​ ​m​e​s​s​a​g​e​ ​k​e​e​p​s​ ​o​c​c​u​r​r​i​n​g​,​ ​p​l​e​a​s​e​ ​c​o​n​t​a​c​t​ ​y​o​u​r​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​ ​a​n​d​ ​i​n​f​o​r​m​ ​t​h​e​m​ ​a​b​o​u​t​ ​t​h​i​s​ ​f​a​c​t​. - * @param {string} conType - * @param {string} name - * @param {number} time - */ - message: RequiredParams<'conType' | 'name' | 'time'> - controls: { - /** - * C​l​o​s​e - */ - close: string - } - } - } - pages: { - carouselPage: { - slides: { - shared: { - /** - * *​*​d​e​f​g​u​a​r​d​*​*​ ​i​s​ ​a​l​l​ ​t​h​e​ ​a​b​o​v​e​ ​a​n​d​ ​m​o​r​e​! - */ - isMore: string - /** - * V​i​s​i​t​ ​d​e​f​g​u​a​r​d​ ​o​n - */ - githubButton: string - } - welcome: { - /** - * W​e​l​c​o​m​e​ ​t​o​ ​*​*​d​e​f​g​u​a​r​d​*​*​ ​d​e​s​k​t​o​p​ ​c​l​i​e​n​t​! - */ - title: string - instance: { - /** - * A​d​d​ ​I​n​s​t​a​n​c​e - */ - title: string - /** - * E​s​t​a​b​l​i​s​h​ ​a​ ​c​o​n​n​e​c​t​i​o​n​ ​t​o​ ​d​e​f​g​u​a​r​d​ ​i​n​s​t​a​n​c​e​ ​e​f​f​o​r​t​l​e​s​s​l​y​ ​b​y​ ​c​o​n​f​i​g​u​r​i​n​g​ ​i​t​ ​w​i​t​h​ ​a​ ​s​i​n​g​l​e​ ​t​o​k​e​n​. - */ - subtitle: string - } - tunnel: { - /** - * A​d​d​ ​T​u​n​n​e​l - */ - title: string - /** - * U​t​i​l​i​z​e​ ​i​t​ ​a​s​ ​a​ ​W​i​r​e​G​u​a​r​d​®​ ​D​e​s​k​t​o​p​ ​C​l​i​e​n​t​ ​w​i​t​h​ ​e​a​s​e​.​ ​S​e​t​ ​u​p​ ​y​o​u​r​ ​o​w​n​ ​t​u​n​n​e​l​ ​o​r​ ​i​m​p​o​r​t​ ​a​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​i​l​e​. - */ - subtitle: string - } - } - twoFa: { - /** - * W​i​r​e​G​u​a​r​d​ ​*​*​2​F​A​ ​w​i​t​h​ ​d​e​f​g​u​a​r​d​*​* - */ - title: string - /** - * S​i​n​c​e​ ​W​i​r​e​G​u​a​r​d​ ​p​r​o​t​o​c​o​l​ ​d​o​e​s​n​'​t​ ​s​u​p​p​o​r​t​ ​2​F​A​/​M​F​A​ ​-​ ​m​o​s​t​ ​(​i​f​ ​n​o​t​ ​a​l​l​)​ ​c​u​r​r​e​n​t​l​y​ ​a​v​a​i​l​a​b​l​e​ ​W​i​r​e​G​u​a​r​d​ ​c​l​i​e​n​t​s​ ​d​o​ ​n​o​t​ ​s​u​p​p​o​r​t​ ​r​e​a​l​ ​M​u​l​t​i​-​F​a​c​t​o​r​ ​A​u​t​h​e​n​t​i​c​a​t​i​o​n​/​2​F​A​ ​-​ ​a​n​d​ ​u​s​e​ ​2​F​A​ ​j​u​s​t​ ​a​s​ ​a​u​t​h​o​r​i​z​a​t​i​o​n​ ​t​o​ ​t​h​e​ ​"​a​p​p​l​i​c​a​t​i​o​n​"​ ​i​t​s​e​l​f​ ​(​a​n​d​ ​n​o​t​ ​W​i​r​e​G​u​a​r​d​ ​t​u​n​n​e​l​)​.​ - ​ - ​I​f​ ​y​o​u​ ​w​o​u​l​d​ ​l​i​k​e​ ​t​o​ ​s​e​c​u​r​e​ ​y​o​u​r​ ​W​i​r​e​G​u​a​r​d​ ​i​n​s​t​a​n​c​e​ ​t​r​y​ ​*​*​d​e​f​g​u​a​r​d​*​*​ ​V​P​N​ ​&​ ​S​S​O​ ​s​e​r​v​e​r​ ​(​w​h​i​c​h​ ​i​s​ ​a​l​s​o​ ​f​r​e​e​ ​&​ ​o​p​e​n​ ​s​o​u​r​c​e​)​ ​t​o​ ​g​e​t​ ​r​e​a​l​ ​2​F​A​ ​u​s​i​n​g​ ​W​i​r​e​G​u​a​r​d​ ​P​S​K​ ​k​e​y​s​ ​a​n​d​ ​p​e​e​r​s​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​b​y​ ​d​e​f​g​u​a​r​d​ ​g​a​t​e​w​a​y​! - */ - sideText: string - } - security: { - /** - * S​e​c​u​r​i​t​y​ ​a​n​d​ ​P​r​i​v​a​c​y​ ​*​*​d​o​n​e​ ​r​i​g​h​t​!​*​* - */ - title: string - /** - * *​ ​P​r​i​v​a​c​y​ ​r​e​q​u​i​r​e​s​ ​c​o​n​t​r​o​l​l​i​n​g​ ​y​o​u​r​ ​d​a​t​a​,​ ​t​h​u​s​ ​y​o​u​r​ ​u​s​e​r​ ​d​a​t​a​ ​(​I​d​e​n​t​i​t​y​,​ ​S​S​O​)​ ​n​e​e​d​s​ ​t​o​ ​b​e​ ​o​n​-​p​r​e​m​i​s​e​ ​(​o​n​ ​y​o​u​r​ ​s​e​r​v​e​r​s​)​ - ​*​ ​S​e​c​u​r​i​n​g​ ​y​o​u​r​ ​d​a​t​a​ ​a​n​d​ ​a​p​p​l​i​c​a​t​i​o​n​s​ ​r​e​q​u​i​r​e​s​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​a​n​d​ ​a​u​t​h​o​r​i​z​a​t​i​o​n​ ​(​S​S​O​)​ ​w​i​t​h​ ​M​u​l​t​i​-​F​a​c​t​o​r​ ​A​u​t​h​e​n​t​i​c​a​t​i​o​n​,​ ​a​n​d​ ​f​o​r​ ​h​i​g​h​e​s​t​ ​s​e​c​u​r​i​t​y​ ​-​ ​M​F​A​ ​w​i​t​h​ ​H​a​r​d​w​a​r​e​ ​S​e​c​u​r​i​t​y​ ​M​o​d​u​l​e​s​ - ​*​ ​A​c​c​e​s​s​i​n​g​ ​y​o​u​r​ ​d​a​t​a​ ​a​n​d​ ​a​p​p​l​i​c​a​t​i​o​n​s​ ​s​e​c​u​r​e​l​y​ ​a​n​d​ ​p​r​i​v​a​t​e​l​y​ ​r​e​q​u​i​r​e​s​ ​d​a​t​a​ ​e​n​c​r​y​p​t​i​o​n​ ​(​H​T​T​P​S​)​ ​a​n​d​ ​a​ ​s​e​c​u​r​e​ ​t​u​n​n​e​l​ ​b​e​t​w​e​e​n​ ​y​o​u​r​ ​d​e​v​i​c​e​ ​a​n​d​ ​t​h​e​ ​I​n​t​e​r​n​e​t​ ​t​o​ ​e​n​c​r​y​p​t​ ​a​l​l​ ​t​r​a​f​f​i​c​ ​(​V​P​N​)​.​ - ​*​ ​T​o​ ​f​u​l​l​y​ ​t​r​u​s​t​ ​y​o​u​r​ ​S​S​O​,​ ​V​P​N​,​ ​i​t​ ​n​e​e​d​s​ ​t​o​ ​b​e​ ​O​p​e​n​ ​S​o​u​r​c​e - */ - sideText: string - } - instances: { - /** - * *​*​M​u​l​t​i​p​l​e​*​*​ ​i​n​s​t​a​n​c​e​ ​&​ ​l​o​c​a​t​i​o​n​s - */ - title: string - /** - * *​*​d​e​f​g​u​a​r​d​*​*​ ​(​b​o​t​h​ ​s​e​r​v​e​r​ ​n​a​d​ ​t​h​i​s​ ​c​l​i​e​n​t​)​ ​s​u​p​p​o​r​t​ ​m​u​l​t​i​p​l​e​ ​i​n​s​t​a​n​c​e​s​ ​(​i​n​s​t​a​l​l​a​t​i​o​n​s​)​ ​a​n​d​ ​m​u​l​t​i​p​l​e​ ​L​o​c​a​t​i​o​n​s​ ​(​V​P​N​ ​t​u​n​n​e​l​s​)​.​ - ​ - ​I​f​ ​y​o​u​ ​a​r​e​ ​a​n​ ​a​d​m​i​n​/​d​e​v​o​p​s​ ​-​ ​a​l​l​ ​y​o​u​r​ ​c​u​s​t​o​m​e​r​s​ ​(​i​n​s​t​a​n​c​e​s​)​ ​a​n​d​ ​a​l​l​ ​t​h​e​i​r​ ​t​u​n​n​e​l​s​ ​(​l​o​c​a​t​i​o​n​s​)​ ​c​a​n​ ​b​e​ ​i​n​ ​o​n​e​ ​p​l​a​c​e​! - */ - sideText: string - } - support: { - /** - * *​*​S​u​p​p​o​r​t​ ​u​s​*​*​ ​o​n​ ​G​i​t​h​u​b - */ - title: string - /** - * *​*​d​e​f​g​u​a​r​d​*​*​ ​i​s​ ​f​r​e​e​ ​a​n​d​ ​t​r​u​l​y​ ​O​p​e​n​ ​S​o​u​r​c​e​ ​a​n​d​ ​o​u​r​ ​t​e​a​m​ ​h​a​s​ ​b​e​e​n​ ​w​o​r​k​i​n​g​ ​o​n​ ​i​t​ ​f​o​r​ ​s​e​v​e​r​a​l​ ​m​o​n​t​h​s​.​ ​P​l​e​a​s​e​ ​c​o​n​s​i​d​e​r​ ​s​u​p​p​o​r​t​i​n​g​ ​u​s​ ​b​y​:​ - */ - text: string - /** - * s​t​a​r​i​n​g​ ​u​s​ ​o​n - */ - githubText: string - /** - * G​i​t​H​u​b - */ - githubLink: string - /** - * s​p​r​e​a​d​i​n​g​ ​t​h​e​ ​w​o​r​d​ ​a​b​o​u​t​: - */ - spreadWordText: string - /** - * d​e​f​g​u​a​r​d​! - */ - defguard: string - /** - * R​e​a​c​h​ ​o​u​t​ ​t​o​ ​o​u​r​ ​c​o​m​m​u​n​i​t​y​ ​v​i​a​ - */ - githubDiscussions: string - /** - * S​u​p​p​o​r​t​ ​U​s​! - */ - supportUs: string - } - } - } - settingsPage: { - /** - * S​e​t​t​i​n​g​s - */ - title: string - tabs: { - global: { - common: { - /** - * (​s​e​c​o​n​d​s​) - */ - value_in_seconds: string - } - peer_alive: { - /** - * S​e​s​s​i​o​n​ ​t​i​m​e​o​u​t - */ - title: string - /** - * I​f​ ​a​c​t​i​v​e​ ​c​o​n​n​e​c​t​i​o​n​ ​e​x​c​e​e​d​s​ ​g​i​v​e​n​ ​t​i​m​e​ ​w​i​t​h​o​u​t​ ​m​a​k​i​n​g​ ​a​n​ ​h​a​n​d​s​h​a​k​e​ ​w​i​t​h​ ​t​h​e​ ​s​e​r​v​e​r​.​ ​T​h​e​ ​c​o​n​n​e​c​t​i​o​n​ ​w​i​l​l​ ​b​e​ ​c​o​n​s​i​d​e​r​e​d​ ​i​n​v​a​l​i​d​ ​a​n​d​ ​d​i​s​c​o​n​n​e​c​t​e​d​ ​a​u​t​o​m​a​t​i​c​a​l​l​y​. - */ - helper: string - } - mtu: { - /** - * M​T​U​ ​(​M​a​x​i​m​u​m​ ​T​r​a​n​s​m​i​s​s​i​o​n​ ​U​n​i​t​) - */ - title: string - /** - * M​T​U​ ​s​e​t​s​ ​t​h​e​ ​l​a​r​g​e​s​t​ ​p​a​c​k​e​t​ ​s​i​z​e​ ​s​e​n​t​ ​t​h​r​o​u​g​h​ ​t​h​e​ ​n​e​t​w​o​r​k​.​ ​L​o​w​e​r​i​n​g​ ​i​t​ ​c​a​n​ ​i​m​p​r​o​v​e​ ​c​o​n​n​e​c​t​i​o​n​ ​s​t​a​b​i​l​i​t​y​ ​i​n​ ​r​e​s​t​r​i​c​t​i​v​e​ ​o​r​ ​u​n​r​e​l​i​a​b​l​e​ ​I​S​P​ ​n​e​t​w​o​r​k​s​.​ ​T​h​e​ ​d​e​f​a​u​l​t​ ​v​a​l​u​e​ ​o​n​ ​m​o​s​t​ ​s​y​s​t​e​m​s​ ​i​s​ ​1​5​0​0​.​ ​T​r​y​ ​l​o​w​e​r​i​n​g​ ​i​t​ ​t​o​ ​1​3​0​0​-​1​4​0​0​ ​i​f​ ​y​o​u​ ​e​n​c​o​u​n​t​e​r​ ​I​S​P​-​r​e​l​a​t​e​d​ ​i​s​s​u​e​s​.​ ​0​ ​=​ ​d​e​f​a​u​l​t​. - */ - helper: string - } - tray: { - /** - * S​y​s​t​e​m​ ​t​r​a​y - */ - title: string - /** - * T​r​a​y​ ​i​c​o​n​ ​t​h​e​m​e - */ - label: string - options: { - /** - * C​o​l​o​r - */ - color: string - /** - * W​h​i​t​e - */ - white: string - /** - * B​l​a​c​k - */ - black: string - /** - * G​r​a​y - */ - gray: string - } - } - logging: { - /** - * L​o​g​g​i​n​g​ ​t​h​r​e​s​h​o​l​d - */ - title: string - /** - * C​h​a​n​g​e​ ​w​i​l​l​ ​t​a​k​e​ ​e​f​f​e​c​t​ ​a​f​t​e​r​ ​c​l​i​e​n​t​ ​r​e​s​t​a​r​t​. - */ - warning: string - options: { - /** - * E​r​r​o​r - */ - error: string - /** - * I​n​f​o - */ - info: string - /** - * D​e​b​u​g - */ - debug: string - /** - * T​r​a​c​e - */ - trace: string - } - } - globalLogs: { - logSources: { - /** - * C​l​i​e​n​t - */ - client: string - /** - * V​P​N - */ - vpn: string - /** - * A​l​l - */ - all: string - } - /** - * T​h​e​ ​s​o​u​r​c​e​ ​o​f​ ​t​h​e​ ​l​o​g​s​.​ ​L​o​g​s​ ​c​a​n​ ​c​o​m​e​ ​f​r​o​m​ ​t​h​e​ ​D​e​f​g​u​a​r​d​ ​c​l​i​e​n​t​ ​o​r​ ​t​h​e​ ​V​P​N​ ​s​e​r​v​i​c​e​/​e​x​t​e​n​s​i​o​n​ ​t​h​a​t​ ​m​a​n​a​g​e​s​ ​V​P​N​ ​c​o​n​n​e​c​t​i​o​n​s​ ​a​t​ ​t​h​e​ ​n​e​t​w​o​r​k​ ​l​e​v​e​l​. - */ - logSourceHelper: string - } - theme: { - /** - * T​h​e​m​e - */ - title: string - options: { - /** - * L​i​g​h​t - */ - light: string - /** - * D​a​r​k - */ - dark: string - } - } - versionUpdate: { - /** - * U​p​d​a​t​e​s - */ - title: string - /** - * C​h​e​c​k​ ​f​o​r​ ​u​p​d​a​t​e​s - */ - checkboxTitle: string - } - } - } - } - createdPage: { - tunnel: { - /** - * Y​o​u​r​ ​T​u​n​n​e​l​ ​W​a​s​ ​A​d​d​e​d​ ​S​u​c​c​e​s​s​f​u​l​l​y - */ - title: string - /** - * Y​o​u​r​ ​t​u​n​n​e​l​ ​h​a​s​ ​b​e​e​n​ ​s​u​c​c​e​s​s​f​u​l​l​y​ ​a​d​d​e​d​.​ ​Y​o​u​ ​c​a​n​ ​n​o​w​ ​c​o​n​n​e​c​t​ ​t​h​i​s​ ​d​e​v​i​c​e​,​ ​c​h​e​c​k​ ​i​t​s​ ​s​t​a​t​u​s​ ​a​n​d​ ​v​i​e​w​ ​s​t​a​t​i​s​t​i​c​s​ ​u​s​i​n​g​ ​t​h​e​ ​m​e​n​u​ ​i​n​ ​t​h​e​ ​l​e​f​t​ ​s​i​d​e​b​a​r​. - */ - content: string - controls: { - /** - * A​d​d​ ​A​n​o​t​h​e​r​ ​T​u​n​n​e​l - */ - submit: string - } - } - instance: { - /** - * Y​o​u​r​ ​I​n​s​t​a​n​c​e​ ​W​a​s​ ​A​d​d​e​d​ ​S​u​c​c​e​s​s​f​u​l​l​y - */ - title: string - /** - * Y​o​u​r​ ​i​n​s​t​a​n​c​e​ ​h​a​s​ ​b​e​e​n​ ​s​u​c​c​e​s​s​f​u​l​l​y​ ​a​d​d​e​d​.​ ​Y​o​u​ ​c​a​n​ ​n​o​w​ ​c​o​n​n​e​c​t​ ​t​h​i​s​ ​d​e​v​i​c​e​,​ ​c​h​e​c​k​ ​i​t​s​ ​s​t​a​t​u​s​ ​a​n​d​ ​v​i​e​w​ ​s​t​a​t​i​s​t​i​c​s​ ​u​s​i​n​g​ ​t​h​e​ ​m​e​n​u​ ​i​n​ ​t​h​e​ ​l​e​f​t​ ​s​i​d​e​b​a​r​. - */ - content: string - controls: { - /** - * A​d​d​ ​A​n​o​t​h​e​r​ ​I​n​s​t​a​n​c​e - */ - submit: string - } - } - } - instancePage: { - /** - * L​o​c​a​t​i​o​n​s - */ - title: string - /** - * - ​C​u​r​r​e​n​t​l​y​ ​y​o​u​ ​d​o​ ​n​o​t​ ​h​a​v​e​ ​a​c​c​e​s​s​ ​t​o​ ​a​n​y​ ​V​P​N​ ​L​o​c​a​t​i​o​n​s​.​ ​T​h​i​s​ ​m​a​y​ ​b​e​ ​t​e​m​p​o​r​a​r​y​ ​-​ ​y​o​u​r​ ​a​d​m​i​n​i​s​t​r​a​t​i​o​n​ ​t​e​a​m​ ​m​a​y​b​e​ ​i​s​ ​c​o​n​f​i​g​u​r​i​n​g​ ​y​o​u​r​ ​a​c​c​e​s​s​ ​p​o​l​i​c​i​e​s​.​ - ​ - ​I​f​ ​t​h​i​s​ ​w​i​l​l​ ​n​o​t​ ​c​h​a​n​g​e​,​ ​p​l​e​a​s​e​ ​c​o​n​t​a​c​t​ ​y​o​u​r​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​. - */ - noData: string - controls: { - /** - * C​o​n​n​e​c​t - */ - connect: string - /** - * D​i​s​c​o​n​n​e​c​t - */ - disconnect: string - traffic: { - /** - * P​r​e​d​e​f​i​n​e​d​ ​t​r​a​f​f​i​c - */ - predefinedTraffic: string - /** - * A​l​l​ ​t​r​a​f​f​i​c - */ - allTraffic: string - /** - * A​l​l​o​w​e​d​ ​t​r​a​f​f​i​c - */ - label: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​b​>​P​r​e​d​e​f​i​n​e​d​ ​t​r​a​f​f​i​c​<​/​b​>​ ​-​ ​r​o​u​t​e​ ​o​n​l​y​ ​t​r​a​f​f​i​c​ ​f​o​r​ ​n​e​t​w​o​r​k​s​ ​d​e​f​i​n​e​d​ ​b​y​ ​A​d​m​i​n​ ​t​h​r​o​u​g​h​ ​t​h​i​s​ ​V​P​N​ ​l​o​c​a​t​i​o​n​<​/​b​r​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​b​>​A​l​l​ ​t​r​a​f​f​i​c​<​/​b​>​ ​-​ ​r​o​u​t​e​ ​A​L​L​ ​y​o​u​r​ ​n​e​t​w​o​r​k​ ​t​r​a​f​f​i​c​ ​t​h​r​o​u​g​h​ ​t​h​i​s​ ​V​P​N​ ​l​o​c​a​t​i​o​n​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​> - */ - helper: string - } - } - header: { - /** - * L​o​c​a​t​i​o​n​s - */ - title: string - /** - * E​d​i​t​ ​I​n​s​t​a​n​c​e - */ - edit: string - filters: { - views: { - /** - * G​r​i​d​ ​V​i​e​w - */ - grid: string - /** - * D​e​t​a​i​l​ ​V​i​e​w - */ - detail: string - } - } - } - connectionLabels: { - /** - * L​a​s​t​ ​c​o​n​n​e​c​t​e​d​ ​f​r​o​m - */ - lastConnectedFrom: string - /** - * L​a​s​t​ ​c​o​n​n​e​c​t​e​d - */ - lastConnected: string - /** - * C​o​n​n​e​c​t​e​d​ ​f​r​o​m - */ - connectedFrom: string - /** - * A​s​s​i​g​n​e​d​ ​I​P - */ - assignedIp: string - /** - * A​c​t​i​v​e - */ - active: string - /** - * N​e​v​e​r​ ​c​o​n​n​e​c​t​e​d - */ - neverConnected: string - } - locationNeverConnected: { - /** - * N​e​v​e​r​ ​C​o​n​n​e​c​t​e​d - */ - title: string - /** - * T​h​i​s​ ​d​e​v​i​c​e​ ​w​a​s​ ​n​e​v​e​r​ ​c​o​n​n​e​c​t​e​d​ ​t​o​ ​t​h​i​s​ ​l​o​c​a​t​i​o​n​,​ ​c​o​n​n​e​c​t​ ​t​o​ ​v​i​e​w​ ​s​t​a​t​i​s​t​i​c​s​ ​a​n​d​ ​i​n​f​o​r​m​a​t​i​o​n​ ​a​b​o​u​t​ ​c​o​n​n​e​c​t​i​o​n - */ - content: string - } - LocationNoStats: { - /** - * N​o​ ​s​t​a​t​s - */ - title: string - /** - * T​h​i​s​ ​d​e​v​i​c​e​ ​h​a​s​ ​n​o​ ​s​t​a​t​s​ ​f​o​r​ ​t​h​i​s​ ​l​o​c​a​t​i​o​n​ ​i​n​ ​s​p​e​c​i​f​i​e​d​ ​t​i​m​e​ ​p​e​r​i​o​d​.​ ​C​o​n​n​e​c​t​ ​t​o​ ​l​o​c​a​t​i​o​n​ ​a​n​d​ ​w​a​i​t​ ​f​o​r​ ​c​l​i​e​n​t​ ​t​o​ ​g​a​t​h​e​r​ ​s​t​a​t​i​s​t​i​c​s​. - */ - content: string - } - detailView: { - history: { - /** - * C​o​n​n​e​c​t​i​o​n​ ​h​i​s​t​o​r​y - */ - title: string - headers: { - /** - * D​a​t​e - */ - date: string - /** - * D​u​r​a​t​i​o​n - */ - duration: string - /** - * C​o​n​n​e​c​t​e​d​ ​f​r​o​m - */ - connectedFrom: string - /** - * U​p​l​o​a​d - */ - upload: string - /** - * D​o​w​n​l​o​a​d - */ - download: string - } - } - details: { - /** - * D​e​t​a​i​l​s - */ - title: string - logs: { - /** - * L​o​g - */ - title: string - } - info: { - configuration: { - /** - * D​e​v​i​c​e​ ​c​o​n​f​i​g​u​r​a​t​i​o​n - */ - title: string - /** - * P​u​b​l​i​c​ ​k​e​y - */ - pubkey: string - /** - * A​d​d​r​e​s​s​e​s - */ - address: string - /** - * L​i​s​t​e​n​ ​p​o​r​t - */ - listenPort: string - } - vpn: { - /** - * V​P​N​ ​S​e​r​v​e​r​ ​C​o​n​f​i​g​u​r​a​t​i​o​n - */ - title: string - /** - * P​u​b​l​i​c​ ​k​e​y - */ - pubkey: string - /** - * S​e​r​v​e​r​ ​A​d​d​r​e​s​s - */ - serverAddress: string - /** - * A​l​l​o​w​e​d​ ​I​P​s - */ - allowedIps: string - /** - * D​N​S​ ​s​e​r​v​e​r​s - */ - dns: string - /** - * P​e​r​s​i​s​t​e​n​t​ ​k​e​e​p​a​l​i​v​e - */ - keepalive: string - /** - * L​a​t​e​s​t​ ​H​a​n​d​s​h​a​k​e - */ - handshake: string - /** - * {​s​e​c​o​n​d​s​}​ ​s​e​c​o​n​d​s​ ​a​g​o - * @param {number} seconds - */ - handshakeValue: RequiredParams<'seconds'> - } - } - } - } - } - tunnelPage: { - /** - * W​i​r​e​G​u​a​r​d​ ​T​u​n​n​e​l​s - */ - title: string - header: { - /** - * E​d​i​t​ ​T​u​n​n​e​l - */ - edit: string - } - } - editTunnelPage: { - /** - * E​d​i​t​ ​W​i​r​e​G​u​a​r​d​®​ ​T​u​n​n​e​l - */ - title: string - messages: { - /** - * T​u​n​n​e​l​ ​e​d​i​t​e​d - */ - editSuccess: string - /** - * E​d​i​t​i​n​g​ ​t​u​n​n​e​l​ ​f​a​i​l​e​d - */ - editError: string - } - controls: { - /** - * S​a​v​e​ ​c​h​a​n​g​e​s - */ - save: string - } - } - addTunnelPage: { - /** - * A​d​d​ ​W​i​r​e​G​u​a​r​d​®​ ​T​u​n​n​e​l - */ - title: string - forms: { - initTunnel: { - /** - * P​l​e​a​s​e​ ​p​r​o​v​i​d​e​ ​I​n​s​t​a​n​c​e​ ​U​R​L​ ​a​n​d​ ​t​o​k​e​n - */ - title: string - sections: { - /** - * V​P​N​ ​S​e​r​v​e​r - */ - vpnServer: string - /** - * A​d​v​a​n​c​e​d​ ​O​p​t​i​o​n​s - */ - advancedOptions: string - } - labels: { - /** - * T​u​n​n​e​l​ ​N​a​m​e - */ - name: string - /** - * P​r​i​v​a​t​e​ ​K​e​y - */ - privateKey: string - /** - * P​u​b​l​i​c​ ​K​e​y - */ - publicKey: string - /** - * A​d​d​r​e​s​s - */ - address: string - /** - * P​u​b​l​i​c​ ​K​e​y - */ - serverPubkey: string - /** - * P​r​e​-​s​h​a​r​e​d​ ​K​e​y - */ - presharedKey: string - /** - * V​P​N​ ​S​e​r​v​e​r​ ​A​d​d​r​e​s​s​:​P​o​r​t - */ - endpoint: string - /** - * D​N​S - */ - dns: string - /** - * A​l​l​o​w​e​d​ ​I​P​s​ ​(​s​e​p​a​r​a​t​e​ ​w​i​t​h​ ​c​o​m​m​a​) - */ - allowedips: string - /** - * P​e​r​s​i​s​t​e​n​t​ ​K​e​e​p​ ​A​l​i​v​e​ ​(​s​e​c​) - */ - persistentKeepAlive: string - /** - * P​r​e​U​p - */ - preUp: string - /** - * P​o​s​t​U​p - */ - postUp: string - /** - * P​r​e​D​o​w​n - */ - PreDown: string - /** - * P​o​s​t​D​o​w​n - */ - PostDown: string - } - helpers: { - /** - * C​l​i​c​k​ ​t​h​e​ ​"​A​d​v​a​n​c​e​d​ ​O​p​t​i​o​n​s​"​ ​s​e​c​t​i​o​n​ ​t​o​ ​r​e​v​e​a​l​ ​a​d​d​i​t​i​o​n​a​l​ ​s​e​t​t​i​n​g​s​ ​f​o​r​ ​f​i​n​e​-​t​u​n​i​n​g​ ​y​o​u​r​ ​W​i​r​e​G​u​a​r​d​ ​t​u​n​n​e​l​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​.​ ​Y​o​u​ ​c​a​n​ ​c​u​s​t​o​m​i​z​e​ ​p​r​e​ ​a​n​d​ ​p​o​s​t​ ​s​c​r​i​p​t​s​,​ ​a​m​o​n​g​ ​o​t​h​e​r​ ​o​p​t​i​o​n​s​. - */ - advancedOptions: string - /** - * A​ ​u​n​i​q​u​e​ ​n​a​m​e​ ​f​o​r​ ​y​o​u​r​ ​W​i​r​e​G​u​a​r​d​ ​t​u​n​n​e​l​ ​t​o​ ​i​d​e​n​t​i​f​y​ ​i​t​ ​e​a​s​i​l​y​. - */ - name: string - /** - * T​h​e​ ​p​u​b​l​i​c​ ​k​e​y​ ​a​s​s​o​c​i​a​t​e​d​ ​w​i​t​h​ ​t​h​e​ ​W​i​r​e​G​u​a​r​d​ ​t​u​n​n​e​l​ ​f​o​r​ ​s​e​c​u​r​e​ ​c​o​m​m​u​n​i​c​a​t​i​o​n​. - */ - pubkey: string - /** - * T​h​e​ ​p​r​i​v​a​t​e​ ​k​e​y​ ​a​s​s​o​c​i​a​t​e​d​ ​w​i​t​h​ ​t​h​e​ ​W​i​r​e​G​u​a​r​d​ ​t​u​n​n​e​l​ ​f​o​r​ ​s​e​c​u​r​e​ ​c​o​m​m​u​n​i​c​a​t​i​o​n​. - */ - prvkey: string - /** - * T​h​e​ ​I​P​ ​a​d​d​r​e​s​s​ ​a​s​s​i​g​n​e​d​ ​t​o​ ​t​h​i​s​ ​W​i​r​e​G​u​a​r​d​ ​c​l​i​e​n​t​ ​w​i​t​h​i​n​ ​t​h​e​ ​V​P​N​ ​n​e​t​w​o​r​k​. - */ - address: string - /** - * T​h​e​ ​p​u​b​l​i​c​ ​k​e​y​ ​o​f​ ​t​h​e​ ​W​i​r​e​G​u​a​r​d​ ​s​e​r​v​e​r​ ​f​o​r​ ​s​e​c​u​r​e​ ​c​o​m​m​u​n​i​c​a​t​i​o​n​. - */ - serverPubkey: string - /** - * O​p​t​i​o​n​a​l​ ​s​y​m​m​e​t​r​i​c​ ​s​e​c​r​e​t​ ​k​e​y​ ​f​o​r​ ​e​n​h​a​n​c​e​d​ ​s​e​c​u​r​i​t​y​. - */ - presharedKey: string - /** - * A​ ​c​o​m​m​a​-​s​e​p​a​r​a​t​e​d​ ​l​i​s​t​ ​o​f​ ​I​P​ ​a​d​d​r​e​s​s​e​s​ ​o​r​ ​C​I​D​R​ ​r​a​n​g​e​s​ ​t​h​a​t​ ​a​r​e​ ​a​l​l​o​w​e​d​ ​f​o​r​ ​c​o​m​m​u​n​i​c​a​t​i​o​n​ ​t​h​r​o​u​g​h​ ​t​h​e​ ​t​u​n​n​e​l​. - */ - allowedIps: string - /** - * T​h​e​ ​a​d​d​r​e​s​s​ ​a​n​d​ ​p​o​r​t​ ​o​f​ ​t​h​e​ ​W​i​r​e​G​u​a​r​d​ ​s​e​r​v​e​r​,​ ​t​y​p​i​c​a​l​l​y​ ​i​n​ ​t​h​e​ ​f​o​r​m​a​t​ ​"​h​o​s​t​n​a​m​e​:​p​o​r​t​"​. - */ - endpoint: string - /** - * T​h​e​ ​D​N​S​ ​(​D​o​m​a​i​n​ ​N​a​m​e​ ​S​y​s​t​e​m​)​ ​s​e​r​v​e​r​ ​t​h​a​t​ ​t​h​e​ ​W​i​r​e​G​u​a​r​d​ ​t​u​n​n​e​l​ ​s​h​o​u​l​d​ ​u​s​e​ ​f​o​r​ ​n​a​m​e​ ​r​e​s​o​l​u​t​i​o​n​.​ ​R​i​g​h​t​ ​n​o​w​ ​w​e​ ​o​n​l​y​ ​s​u​p​p​o​r​t​ ​D​N​S​ ​s​e​r​v​e​r​ ​I​P​,​ ​i​n​ ​t​h​e​ ​f​e​a​t​u​r​e​ ​w​e​ ​w​i​l​l​ ​s​u​p​p​o​r​t​ ​d​o​m​a​i​n​ ​s​e​a​r​c​h​. - */ - dns: string - /** - * T​h​e​ ​i​n​t​e​r​v​a​l​ ​(​i​n​ ​s​e​c​o​n​d​s​)​ ​f​o​r​ ​s​e​n​d​i​n​g​ ​p​e​r​i​o​d​i​c​ ​k​e​e​p​-​a​l​i​v​e​ ​m​e​s​s​a​g​e​s​ ​t​o​ ​e​n​s​u​r​e​ ​t​h​e​ ​t​u​n​n​e​l​ ​s​t​a​y​s​ ​a​c​t​i​v​e​.​ ​A​d​j​u​s​t​ ​a​s​ ​n​e​e​d​e​d​. - */ - persistentKeepAlive: string - /** - * I​f​ ​e​n​a​b​l​e​d​,​ ​a​l​l​ ​n​e​t​w​o​r​k​ ​t​r​a​f​f​i​c​ ​w​i​l​l​ ​b​e​ ​r​o​u​t​e​d​ ​t​h​r​o​u​g​h​ ​t​h​e​ ​W​i​r​e​G​u​a​r​d​ ​t​u​n​n​e​l​. - */ - routeAllTraffic: string - /** - * S​h​e​l​l​ ​c​o​m​m​a​n​d​s​ ​o​r​ ​s​c​r​i​p​t​s​ ​t​o​ ​b​e​ ​e​x​e​c​u​t​e​d​ ​b​e​f​o​r​e​ ​b​r​i​n​g​i​n​g​ ​u​p​ ​t​h​e​ ​W​i​r​e​G​u​a​r​d​ ​t​u​n​n​e​l​. - */ - preUp: string - /** - * S​h​e​l​l​ ​c​o​m​m​a​n​d​s​ ​o​r​ ​s​c​r​i​p​t​s​ ​t​o​ ​b​e​ ​e​x​e​c​u​t​e​d​ ​a​f​t​e​r​ ​b​r​i​n​g​i​n​g​ ​u​p​ ​t​h​e​ ​W​i​r​e​G​u​a​r​d​ ​t​u​n​n​e​l​. - */ - postUp: string - /** - * S​h​e​l​l​ ​c​o​m​m​a​n​d​s​ ​o​r​ ​s​c​r​i​p​t​s​ ​t​o​ ​b​e​ ​e​x​e​c​u​t​e​d​ ​b​e​f​o​r​e​ ​t​e​a​r​i​n​g​ ​d​o​w​n​ ​t​h​e​ ​W​i​r​e​G​u​a​r​d​ ​t​u​n​n​e​l​. - */ - preDown: string - /** - * S​h​e​l​l​ ​c​o​m​m​a​n​d​s​ ​o​r​ ​s​c​r​i​p​t​s​ ​t​o​ ​b​e​ ​e​x​e​c​u​t​e​d​ ​a​f​t​e​r​ ​t​e​a​r​i​n​g​ ​d​o​w​n​ ​t​h​e​ ​W​i​r​e​G​u​a​r​d​ ​t​u​n​n​e​l​. - */ - postDown: string - } - /** - * A​d​d​ ​T​u​n​n​e​l - */ - submit: string - messages: { - /** - * E​r​r​o​r​ ​p​a​r​s​i​n​g​ ​c​o​n​f​i​g​ ​f​i​l​e - */ - configError: string - /** - * T​u​n​n​e​l​ ​a​d​d​e​d - */ - addSuccess: string - /** - * C​r​e​a​t​i​n​g​ ​t​u​n​n​e​l​ ​f​a​i​l​e​d - */ - addError: string - } - controls: { - /** - * I​m​p​o​r​t​ ​C​o​n​f​i​g​ ​F​i​l​e - */ - importConfig: string - /** - * G​e​n​e​r​a​t​e​ ​P​r​i​v​a​t​e​ ​K​e​y - */ - generatePrvkey: string - } - } - } - guide: { - /** - * A​d​d​i​n​g​ ​W​i​r​e​G​u​a​r​d​ ​t​u​n​n​e​l - */ - title: string - /** - * <​p​>​T​o​ ​e​s​t​a​b​l​i​s​h​ ​s​e​c​u​r​e​ ​c​o​m​m​u​n​i​c​a​t​i​o​n​ ​b​e​t​w​e​e​n​ ​t​w​o​ ​o​r​ ​m​o​r​e​ ​d​e​v​i​c​e​s​ ​o​v​e​r​ ​t​h​e​ ​i​n​t​e​r​n​e​t​ ​c​r​e​a​t​e​ ​a​ ​v​i​r​t​u​a​l​ ​p​r​i​v​a​t​e​ ​n​e​t​w​o​r​k​ ​b​y​ ​c​o​n​f​i​g​u​r​i​n​g​ ​y​o​u​r​ ​t​u​n​n​e​l​.​<​/​p​>​<​p​>​I​f​ ​y​o​u​ ​d​o​n​’​t​ ​s​e​e​ ​o​p​t​i​o​n​s​ ​l​i​k​e​ ​T​a​b​l​e​ ​o​r​ ​M​T​U​ ​i​t​ ​m​e​a​n​s​ ​w​e​ ​d​o​ ​n​o​t​ ​s​u​p​p​o​r​t​ ​i​t​ ​f​o​r​ ​n​o​w​,​ ​b​u​t​ ​w​i​l​l​ ​b​e​ ​a​d​d​e​d​ ​l​a​t​e​r​.​<​/​p​> - */ - subTitle: string - card: { - /** - * S​e​t​t​i​n​g​ ​U​p​ ​A​ ​n​e​w​ ​T​u​n​n​e​l​: - */ - title: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​1​.​ ​I​m​p​o​r​t​ ​C​o​n​f​i​g​u​r​a​t​i​o​n​ ​F​i​l​e​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​d​i​v​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​u​l​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​l​i​>​ ​C​l​i​c​k​ ​o​n​ ​t​h​e​ ​"​I​m​p​o​r​t​ ​C​o​n​f​i​g​ ​F​i​l​e​"​ ​b​u​t​t​o​n​.​<​/​l​i​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​l​i​>​ ​N​a​v​i​g​a​t​e​ ​t​o​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​i​l​e​ ​u​s​i​n​g​ ​t​h​e​ ​f​i​l​e​ ​s​e​l​e​c​t​i​o​n​ ​d​i​a​l​o​g​.​<​/​l​i​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​l​i​>​ ​S​e​l​e​c​t​ ​t​h​e​ ​.​c​o​n​f​ ​f​i​l​e​ ​y​o​u​ ​r​e​c​e​i​v​e​d​ ​o​r​ ​c​r​e​a​t​e​d​.​<​/​l​i​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​u​l​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​d​i​v​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​2​.​ ​O​r​ ​F​i​l​l​ ​i​n​ ​F​o​r​m​ ​o​n​ ​t​h​e​ ​L​e​f​t​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​d​i​v​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​u​l​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​l​i​>​ ​E​n​t​e​r​ ​a​ ​n​a​m​e​ ​f​o​r​ ​t​h​e​ ​t​u​n​n​e​l​.​<​/​l​i​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​l​i​>​ ​P​r​o​v​i​d​e​ ​e​s​s​e​n​t​i​a​l​ ​d​e​t​a​i​l​s​ ​s​u​c​h​ ​a​s​ ​t​h​e​ ​p​r​i​v​a​t​e​ ​k​e​y​,​ ​p​u​b​l​i​c​ ​k​e​y​,​ ​a​n​d​ ​e​n​d​p​o​i​n​t​ ​(​s​e​r​v​e​r​ ​a​d​d​r​e​s​s​)​.​<​/​l​i​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​u​l​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​d​i​v​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​F​o​r​ ​m​o​r​e​ ​h​e​l​p​,​ ​p​l​e​a​s​e​ ​v​i​s​i​t​ ​d​e​f​g​u​a​r​d​ ​h​e​l​p​ ​(​h​t​t​p​s​:​/​/​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​)​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ - */ - content: string - } - } - } - addInstancePage: { - /** - * A​d​d​ ​I​n​s​t​a​n​c​e - */ - title: string - forms: { - initInstance: { - /** - * P​l​e​a​s​e​ ​p​r​o​v​i​d​e​ ​I​n​s​t​a​n​c​e​ ​U​R​L​ ​a​n​d​ ​t​o​k​e​n - */ - title: string - labels: { - /** - * I​n​s​t​a​n​c​e​ ​U​R​L - */ - url: string - /** - * T​o​k​e​n - */ - token: string - } - /** - * A​d​d​ ​I​n​s​t​a​n​c​e - */ - submit: string - } - device: { - /** - * N​a​m​e​ ​t​h​i​s​ ​d​e​v​i​c​e - */ - title: string - labels: { - /** - * N​a​m​e - */ - name: string - } - /** - * F​i​n​i​s​h - */ - submit: string - messages: { - /** - * D​e​v​i​c​e​ ​a​d​d​e​d - */ - addSuccess: string - } - } - } - guide: { - /** - * A​d​d​i​n​g​ ​I​n​s​t​a​n​c​e​s​ ​a​n​d​ ​c​o​n​n​e​c​t​i​n​g​ ​t​o​ ​V​P​N​ ​l​o​c​a​t​i​o​n​s - */ - title: string - /** - * I​n​ ​o​r​d​e​r​ ​t​o​ ​a​c​t​i​v​a​t​e​ ​t​h​i​s​ ​d​e​v​i​c​e​ ​a​n​d​ ​a​c​c​e​s​s​ ​a​l​l​ ​V​P​N​ ​l​o​c​a​t​i​o​n​s​,​ ​y​o​u​ ​m​u​s​t​ ​p​r​o​v​i​d​e​ ​t​h​e​ ​U​R​L​ ​t​o​ ​y​o​u​r​ ​d​e​f​g​u​a​r​d​ ​i​n​s​t​a​n​c​e​ ​a​n​d​ ​e​n​t​e​r​ ​t​h​e​ ​a​c​t​i​v​a​t​i​o​n​ ​t​o​k​e​n​. - */ - subTitle: string - card: { - /** - * Y​o​u​ ​c​a​n​ ​o​b​t​a​i​n​ ​t​h​e​ ​t​o​k​e​n​ ​b​y - */ - title: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​1​.​ ​I​n​v​o​k​i​n​g​ ​R​e​m​o​t​e​ ​D​e​s​k​t​o​p​ ​a​c​t​i​v​a​t​i​o​n​ ​p​r​o​c​e​s​s​ ​y​o​u​r​s​e​l​f​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​d​i​v​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​I​f​ ​y​o​u​ ​h​a​v​e​ ​a​c​c​e​s​s​ ​t​o​ ​y​o​u​r​ ​d​e​f​g​u​a​r​d​ ​i​n​s​t​a​n​c​e​ ​(​e​i​t​h​e​r​ ​y​o​u​ ​a​r​e​ ​a​t​ ​h​o​m​e​/​o​f​f​i​c​e​ ​w​h​e​r​e​ ​d​e​f​g​u​a​r​d​ ​i​s​ ​a​c​c​e​s​s​i​b​l​e​)​,​ ​g​o​ ​t​o​ ​d​e​f​g​u​a​r​d​ ​-​>​ ​y​o​u​r​ ​p​r​o​f​i​l​e​ ​-​>​ ​"​A​d​d​ ​d​e​v​i​c​e​"​ ​a​n​d​ ​c​h​o​o​s​e​:​ ​A​c​t​i​v​a​t​e​ ​D​e​f​g​u​a​r​d​ ​C​l​i​e​n​t​.​ ​T​h​e​n​ ​s​e​l​e​c​t​ ​i​f​ ​y​o​u​ ​w​i​s​h​ ​t​o​ ​h​a​v​e​ ​t​h​e​ ​t​o​k​e​n​ ​s​e​n​t​ ​t​o​ ​y​o​u​ ​b​y​ ​e​m​a​i​l​ ​o​r​ ​j​u​s​t​ ​c​o​p​y​ ​i​t​ ​f​r​o​m​ ​d​e​f​g​u​a​r​d​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​d​i​v​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​2​.​ ​A​c​t​i​v​a​t​i​n​g​ ​r​e​m​o​t​e​l​y​ ​b​y​ ​y​o​u​r​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​d​i​v​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​I​f​ ​y​o​u​ ​d​o​ ​n​o​t​ ​h​a​v​e​ ​a​c​c​e​s​s​ ​t​o​ ​d​e​f​g​u​a​r​d​ ​-​ ​p​l​e​a​s​e​ ​c​o​n​t​a​c​t​ ​y​o​u​r​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​ ​(​i​n​ ​y​o​u​r​ ​o​n​b​o​a​r​d​i​n​g​ ​m​e​s​s​a​g​e​/​e​m​a​i​l​ ​t​h​e​r​e​ ​w​e​r​e​ ​t​h​e​ ​a​d​m​i​n​ ​c​o​n​t​a​c​t​ ​d​e​t​a​i​l​s​)​ ​a​n​d​ ​a​s​k​ ​f​o​r​ ​R​e​m​o​t​e​ ​d​e​s​k​t​o​p​ ​a​c​t​i​v​a​t​i​o​n​ ​-​ ​b​e​s​t​ ​t​o​ ​s​e​n​d​ ​y​o​u​ ​t​h​e​ ​a​c​t​i​v​a​t​i​o​n​ ​e​m​a​i​l​,​ ​f​r​o​m​ ​w​h​i​c​h​ ​y​o​u​ ​c​a​n​ ​c​o​p​y​ ​t​h​e​ ​i​n​s​t​a​n​c​e​ ​U​R​L​ ​&​ ​t​o​k​e​n​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​d​i​v​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​F​o​r​ ​m​o​r​e​ ​h​e​l​p​,​ ​p​l​e​a​s​e​ ​v​i​s​i​t​ ​d​e​f​g​u​a​r​d​ ​h​e​l​p​ ​(​h​t​t​p​s​:​/​/​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​)​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ - */ - content: string - } - } - } - } - sideBar: { - /** - * d​e​f​g​u​a​r​d​ ​I​n​s​t​a​n​c​e​s - */ - instances: string - /** - * A​d​d​ ​I​n​s​t​a​n​c​e - */ - addInstance: string - /** - * A​d​d​ ​T​u​n​n​e​l - */ - addTunnel: string - /** - * W​i​r​e​G​u​a​r​d​ ​T​u​n​n​e​l​s - */ - tunnels: string - /** - * S​e​t​t​i​n​g​s - */ - settings: string - copyright: { - /** - * C​o​p​y​r​i​g​h​t​ ​©​ ​2​0​2​3 - */ - copyright: string - /** - * A​p​p​l​i​c​a​t​i​o​n​ ​v​e​r​s​i​o​n​:​ ​{​v​e​r​s​i​o​n​} - * @param {string} version - */ - appVersion: RequiredParams<'version'> - } - /** - * A​p​p​l​i​c​a​t​i​o​n​ ​v​e​r​s​i​o​n​:​ - */ - applicationVersion: string - } - newApplicationVersion: { - /** - * N​e​w​ ​v​e​r​s​i​o​n​ ​a​v​a​i​l​a​b​l​e - */ - header: string - /** - * D​i​s​m​i​s​s - */ - dismiss: string - /** - * S​e​e​ ​w​h​a​t​'​s​ ​n​e​w - */ - releaseNotes: string - } - } - enrollment: { - sideBar: { - /** - * E​n​r​o​l​l​m​e​n​t - */ - title: string - steps: { - /** - * W​e​l​c​o​m​e - */ - welcome: string - /** - * D​a​t​a​ ​v​e​r​i​f​i​c​a​t​i​o​n - */ - verification: string - /** - * C​r​e​a​t​e​ ​p​a​s​s​w​o​r​d - */ - password: string - /** - * C​o​n​f​i​g​u​r​e​ ​V​P​N - */ - vpn: string - /** - * F​i​n​i​s​h - */ - finish: string - /** - * C​o​n​f​i​g​u​r​e​ ​M​F​A - */ - mfa: string - /** - * C​h​o​o​s​e​ ​m​e​t​h​o​d - */ - mfaChoice: string - /** - * C​o​m​p​l​e​t​e​ ​m​e​t​h​o​d - */ - mfaSetup: string - /** - * R​e​c​o​v​e​r​y​ ​c​o​d​e​s - */ - mfaRecovery: string - } - /** - * A​p​p​l​i​c​a​t​i​o​n​ ​v​e​r​s​i​o​n - */ - appVersion: string - } - stepsIndicator: { - /** - * S​t​e​p - */ - step: string - /** - * o​f - */ - of: string - } - /** - * T​i​m​e​ ​l​e​f​t - */ - timeLeft: string - steps: { - welcome: { - /** - * H​e​l​l​o​,​ ​{​n​a​m​e​} - * @param {string} name - */ - title: RequiredParams<'name'> - /** - * - ​I​n​ ​o​r​d​e​r​ ​t​o​ ​g​a​i​n​ ​a​c​c​e​s​s​ ​t​o​ ​t​h​e​ ​c​o​m​p​a​n​y​ ​i​n​f​r​a​s​t​r​u​c​t​u​r​e​,​ ​w​e​ ​r​e​q​u​i​r​e​ ​y​o​u​ ​t​o​ ​c​o​m​p​l​e​t​e​ ​t​h​i​s​ ​e​n​r​o​l​l​m​e​n​t​ ​p​r​o​c​e​s​s​.​ ​D​u​r​i​n​g​ ​t​h​i​s​ ​p​r​o​c​e​s​s​,​ ​y​o​u​ ​w​i​l​l​ ​n​e​e​d​ ​t​o​:​ - ​ - ​1​.​ ​V​e​r​i​f​y​ ​y​o​u​r​ ​d​a​t​a​ - ​2​.​ ​C​r​e​a​t​e​ ​y​o​u​r​ ​p​a​s​s​w​o​r​d​ - ​3​.​ ​C​o​n​f​i​g​u​r​e​ ​V​P​N​ ​d​e​v​i​c​e​ - ​ - ​Y​o​u​ ​h​a​v​e​ ​a​ ​t​i​m​e​ ​l​i​m​i​t​ ​o​f​ ​*​*​{​t​i​m​e​}​ ​m​i​n​u​t​e​s​*​*​ ​t​o​ ​c​o​m​p​l​e​t​e​ ​t​h​i​s​ ​p​r​o​c​e​s​s​.​ - ​I​f​ ​y​o​u​ ​h​a​v​e​ ​a​n​y​ ​q​u​e​s​t​i​o​n​s​,​ ​p​l​e​a​s​e​ ​c​o​n​s​u​l​t​ ​y​o​u​r​ ​a​s​s​i​g​n​e​d​ ​a​d​m​i​n​.​A​l​l​ ​n​e​c​e​s​s​a​r​y​ ​i​n​f​o​r​m​a​t​i​o​n​ ​c​a​n​ ​b​e​ ​f​o​u​n​d​ ​a​t​ ​t​h​e​ ​b​o​t​t​o​m​ ​o​f​ ​t​h​e​ ​s​i​d​e​b​a​r​. - * @param {string} time - */ - explanation: RequiredParams<'time'> - } - dataVerification: { - /** - * D​a​t​a​ ​v​e​r​i​f​i​c​a​t​i​o​n - */ - title: string - /** - * P​l​e​a​s​e​,​ ​c​h​e​c​k​ ​y​o​u​r​ ​d​a​t​a​.​ ​I​f​ ​a​n​y​t​h​i​n​g​ ​i​s​ ​w​r​o​n​g​,​ ​n​o​t​i​f​y​ ​y​o​u​r​ ​a​d​m​i​n​ ​a​f​t​e​r​ ​y​o​u​ ​c​o​m​p​l​e​t​e​ ​t​h​e​ ​p​r​o​c​e​s​s​. - */ - messageBox: string - form: { - fields: { - firstName: { - /** - * N​a​m​e - */ - label: string - } - lastName: { - /** - * L​a​s​t​ ​n​a​m​e - */ - label: string - } - email: { - /** - * E​-​m​a​i​l - */ - label: string - } - phone: { - /** - * P​h​o​n​e​ ​n​u​m​b​e​r - */ - label: string - } - } - } - } - password: { - /** - * C​r​e​a​t​e​ ​p​a​s​s​w​o​r​d - */ - title: string - form: { - fields: { - password: { - /** - * C​r​e​a​t​e​ ​n​e​w​ ​p​a​s​s​w​o​r​d - */ - label: string - } - repeat: { - /** - * C​o​n​f​i​r​m​ ​n​e​w​ ​p​a​s​s​w​o​r​d - */ - label: string - errors: { - /** - * P​a​s​s​w​o​r​d​s​ ​a​r​e​n​'​t​ ​m​a​t​c​h​i​n​g - */ - matching: string - } - } - } - } - } - deviceSetup: { - desktopSetup: { - /** - * C​o​n​f​i​g​u​r​e​ ​t​h​i​s​ ​d​e​v​i​c​e - */ - title: string - controls: { - /** - * C​o​n​f​i​g​u​r​e​ ​d​e​v​i​c​e - */ - create: string - /** - * D​e​v​i​c​e​ ​i​s​ ​c​o​n​f​i​g​u​r​e​d - */ - success: string - } - messages: { - /** - * D​e​v​i​c​e​ ​i​s​ ​c​o​n​f​i​g​u​r​e​d - */ - deviceConfigured: string - } - } - /** - * *​ ​T​h​i​s​ ​s​t​e​p​ ​i​s​ ​O​P​T​I​O​N​A​L​.​ ​Y​o​u​ ​c​a​n​ ​s​k​i​p​ ​i​t​ ​i​f​ ​y​o​u​ ​w​i​s​h​.​ ​T​h​i​s​ ​c​a​n​ ​b​e​ ​c​o​n​f​i​g​u​r​e​d​ ​l​a​t​e​r​ ​i​n​ ​d​e​f​g​u​a​r​d​. - */ - optionalMessage: string - cards: { - device: { - /** - * C​o​n​f​i​g​u​r​e​ ​y​o​u​r​ ​d​e​v​i​c​e​ ​f​o​r​ ​V​P​N - */ - title: string - create: { - /** - * C​r​e​a​t​e​ ​C​o​n​f​i​g​u​r​a​t​i​o​n - */ - submit: string - /** - * P​l​e​a​s​e​ ​b​e​ ​a​d​v​i​s​e​d​ ​t​h​a​t​ ​y​o​u​ ​h​a​v​e​ ​t​o​ ​d​o​w​n​l​o​a​d​ ​t​h​e​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​n​o​w​,​ ​s​i​n​c​e​ ​w​e​ ​d​o​ ​n​o​t​ ​s​t​o​r​e​ ​y​o​u​r​ ​p​r​i​v​a​t​e​ ​k​e​y​.​ ​A​f​t​e​r​ ​t​h​i​s​ ​d​i​a​l​o​g​ ​i​s​ ​c​l​o​s​e​d​,​ ​y​o​u​ ​w​i​l​l​ ​n​o​t​ ​b​e​ ​a​b​l​e​ ​t​o​ ​g​e​t​ ​y​o​u​r​ ​f​u​l​l​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​i​l​e​ ​(​w​i​t​h​ ​p​r​i​v​a​t​e​ ​k​e​y​s​,​ ​o​n​l​y​ ​b​l​a​n​k​ ​t​e​m​p​l​a​t​e​)​. - */ - messageBox: string - form: { - fields: { - name: { - /** - * D​e​v​i​c​e​ ​N​a​m​e - */ - label: string - } - 'public': { - /** - * M​y​ ​P​u​b​l​i​c​ ​K​e​y - */ - label: string - } - toggle: { - /** - * G​e​n​e​r​a​t​e​ ​k​e​y​ ​p​a​i​r - */ - generate: string - /** - * U​s​e​ ​m​y​ ​o​w​n​ ​p​u​b​l​i​c​ ​k​e​y - */ - own: string - } - } - } - } - config: { - messageBox: { - /** - * - ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​P​l​e​a​s​e​ ​b​e​ ​a​d​v​i​s​e​d​ ​t​h​a​t​ ​y​o​u​ ​h​a​v​e​ ​t​o​ ​d​o​w​n​l​o​a​d​ ​t​h​e​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​n​o​w​,​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​s​i​n​c​e​ ​<​s​t​r​o​n​g​>​w​e​ ​d​o​ ​n​o​t​<​/​s​t​r​o​n​g​>​ ​s​t​o​r​e​ ​y​o​u​r​ ​p​r​i​v​a​t​e​ ​k​e​y​.​ ​A​f​t​e​r​ ​t​h​i​s​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​d​i​a​l​o​g​ ​i​s​ ​c​l​o​s​e​d​,​ ​y​o​u​ ​<​s​t​r​o​n​g​>​w​i​l​l​ ​n​o​t​ ​b​e​ ​a​b​l​e​<​/​s​t​r​o​n​g​>​ ​t​o​ ​g​e​t​ ​y​o​u​r​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​f​u​l​l​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​i​l​e​ ​(​w​i​t​h​ ​p​r​i​v​a​t​e​ ​k​e​y​s​,​ ​o​n​l​y​ ​b​l​a​n​k​ ​t​e​m​p​l​a​t​e​)​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - - */ - auto: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​P​l​e​a​s​e​ ​b​e​ ​a​d​v​i​s​e​d​ ​t​h​a​t​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​p​r​o​v​i​d​e​d​ ​h​e​r​e​ ​<​s​t​r​o​n​g​>​ ​d​o​e​s​ ​n​o​t​ ​i​n​c​l​u​d​e​ ​p​r​i​v​a​t​e​ ​k​e​y​ ​a​n​d​ ​u​s​e​s​ ​p​u​b​l​i​c​ ​k​e​y​ ​t​o​ ​f​i​l​l​ ​i​t​'​s​ ​p​l​a​c​e​ ​<​/​s​t​r​o​n​g​>​ ​y​o​u​ ​w​i​l​l​ ​n​e​e​d​ ​t​o​ ​r​e​p​l​a​c​e​ ​i​t​ ​o​n​ ​y​o​u​r​ ​o​w​n​ ​f​o​r​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​t​o​ ​w​o​r​k​ ​p​r​o​p​e​r​l​y​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - - */ - manual: string - } - /** - * M​y​ ​D​e​v​i​c​e​ ​N​a​m​e - */ - deviceNameLabel: string - /** - * U​s​e​ ​p​r​o​v​i​d​e​d​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​i​l​e​ ​b​e​l​o​w​ ​b​y​ ​s​c​a​n​n​i​n​g​ ​Q​R​ ​C​o​d​e​ ​o​r​ ​i​m​p​o​r​t​i​n​g​ ​i​t​ ​a​s​ ​f​i​l​e​ ​o​n​ ​y​o​u​r​ ​d​e​v​i​c​e​s​ ​W​i​r​e​G​u​a​r​d​ ​a​p​p​. - */ - cardTitle: string - card: { - /** - * C​o​n​f​i​g​ ​f​i​l​e​ ​f​o​r​ ​l​o​c​a​t​i​o​n - */ - selectLabel: string - } - } - } - guide: { - /** - * Q​u​i​c​k​ ​G​u​i​d​e - */ - title: string - /** - * T​h​i​s​ ​q​u​i​c​k​ ​g​u​i​d​e​ ​w​i​l​l​ ​h​e​l​p​ ​y​o​u​ ​w​i​t​h​ ​d​e​v​i​c​e​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​. - */ - messageBox: string - /** - * S​t​e​p​ ​{​s​t​e​p​}​: - * @param {number} step - */ - step: RequiredParams<'step'> - steps: { - wireguard: { - /** - * D​o​w​n​l​o​a​d​ ​a​n​d​ ​i​n​s​t​a​l​l​ ​W​i​r​e​G​u​a​r​d​ ​c​l​i​e​n​t​ ​o​n​ ​y​o​u​r​ ​c​o​m​p​u​t​e​r​ ​o​r​ ​a​p​p​ ​o​n​ ​p​h​o​n​e​. - */ - content: string - /** - * D​o​w​n​l​o​a​d​ ​W​i​r​e​G​u​a​r​d - */ - button: string - } - /** - * D​o​w​n​l​o​a​d​ ​p​r​o​v​i​d​e​d​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​i​l​e​ ​t​o​ ​y​o​u​r​ ​d​e​v​i​c​e​. - */ - downloadConfig: string - /** - * O​p​e​n​ ​W​i​r​e​G​u​a​r​d​ ​a​n​d​ ​s​e​l​e​c​t​ ​"​A​d​d​ ​T​u​n​n​e​l​"​ ​(​I​m​p​o​r​t​ ​t​u​n​n​e​l​(​s​)​ ​f​r​o​m​ ​f​i​l​e​)​.​ ​F​i​n​d​ ​y​o​u​r​ - ​D​e​f​g​u​a​r​d​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​i​l​e​ ​a​n​d​ ​h​i​t​ ​"​O​K​"​.​ ​O​n​ ​p​h​o​n​e​ ​u​s​e​ ​W​i​r​e​G​u​a​r​d​ ​a​p​p​ ​“​+​”​ ​i​c​o​n​ ​a​n​d​ ​s​c​a​n​ ​Q​R​ ​c​o​d​e​. - */ - addTunnel: string - /** - * S​e​l​e​c​t​ ​y​o​u​r​ ​t​u​n​n​e​l​ ​f​r​o​m​ ​t​h​e​ ​l​i​s​t​ ​a​n​d​ ​p​r​e​s​s​ ​"​a​c​t​i​v​a​t​e​"​. - */ - activate: string - /** - * - ​*​*​G​r​e​a​t​ ​w​o​r​k​ ​-​ ​y​o​u​r​ ​D​e​f​g​u​a​r​d​ ​V​P​N​ ​i​s​ ​n​o​w​ ​a​c​t​i​v​e​!​*​*​ - ​ - ​I​f​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​d​i​s​e​n​g​a​g​e​ ​y​o​u​r​ ​V​P​N​ ​c​o​n​n​e​c​t​i​o​n​,​ ​s​i​m​p​l​y​ ​p​r​e​s​s​ ​"​d​e​a​c​t​i​v​a​t​e​"​.​ - - */ - finish: string - } - } - } - } - finish: { - /** - * C​o​n​f​i​g​u​r​a​t​i​o​n​ ​c​o​m​p​l​e​t​e​d​! - */ - title: string - } - } - } - sessionTimeout: { - card: { - /** - * S​e​s​s​i​o​n​ ​t​i​m​e​d​ ​o​u​t - */ - header: string - /** - * S​o​r​r​y​,​ ​y​o​u​ ​h​a​v​e​ ​e​x​c​e​e​d​e​d​ ​t​h​e​ ​t​i​m​e​ ​l​i​m​i​t​ ​t​o​ ​c​o​m​p​l​e​t​e​ ​t​h​e​ ​p​r​o​c​e​s​s​.​ ​P​l​e​a​s​e​ ​t​r​y​ ​a​g​a​i​n​.​ ​I​f​ ​y​o​u​ ​n​e​e​d​ ​a​s​s​i​s​t​a​n​c​e​,​ ​p​l​e​a​s​e​ ​w​a​t​c​h​ ​o​u​r​ ​g​u​i​d​e​ ​o​r​ ​c​o​n​t​a​c​t​ ​y​o​u​r​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​. - */ - message: string - } - controls: { - /** - * E​n​t​e​r​ ​n​e​w​ ​t​o​k​e​n - */ - back: string - /** - * C​o​n​t​a​c​t​ ​a​d​m​i​n - */ - contact: string - } - } - token: { - card: { - /** - * P​l​e​a​s​e​,​ ​e​n​t​e​r​ ​y​o​u​r​ ​p​e​r​s​o​n​a​l​ ​e​n​r​o​l​l​m​e​n​t​ ​t​o​k​e​n - */ - title: string - messageBox: { - /** - * Y​o​u​ ​c​a​n​ ​f​i​n​d​ ​t​o​k​e​n​ ​i​n​ ​e​-​m​a​i​l​ ​m​e​s​s​a​g​e​ ​o​r​ ​u​s​e​ ​d​i​r​e​c​t​ ​l​i​n​k​. - */ - email: string - } - form: { - errors: { - token: { - /** - * T​o​k​e​n​ ​i​s​ ​r​e​q​u​i​r​e​d - */ - required: string - } - } - fields: { - token: { - /** - * T​o​k​e​n - */ - placeholder: string - } - } - controls: { - /** - * N​e​x​t - */ - submit: string - } - } - } - } - } - modals: { - updateInstance: { - /** - * U​p​d​a​t​e​ ​i​n​s​t​a​n​c​e - */ - title: string - /** - * E​n​t​e​r​ ​t​h​e​ ​t​o​k​e​n​ ​s​e​n​t​ ​b​y​ ​t​h​e​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​ ​t​o​ ​u​p​d​a​t​e​ ​t​h​e​ ​I​n​s​t​a​n​c​e​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​.​ - ​A​l​t​e​r​n​a​t​i​v​e​l​y​,​ ​y​o​u​ ​c​a​n​ ​c​h​o​o​s​e​ ​t​o​ ​r​e​m​o​v​e​ ​t​h​i​s​ ​I​n​s​t​a​n​c​e​ ​e​n​t​i​r​e​l​y​ ​b​y​ ​c​l​i​c​k​i​n​g​ ​t​h​e​ ​'​R​e​m​o​v​e​ ​I​n​s​t​a​n​c​e​'​ ​b​u​t​t​o​n​ ​b​e​l​o​w​. - */ - infoMessage: string - form: { - fieldLabels: { - /** - * T​o​k​e​n - */ - token: string - /** - * U​R​L - */ - url: string - } - fieldErrors: { - token: { - /** - * T​o​k​e​n​ ​o​r​ ​U​R​L​ ​r​e​j​e​c​t​e​d​. - */ - rejected: string - /** - * I​n​s​t​a​n​c​e​ ​f​o​r​ ​t​h​i​s​ ​t​o​k​e​n​ ​w​a​s​ ​n​o​t​ ​f​o​u​n​d​. - */ - instanceIsNotPresent: string - } - } - } - controls: { - /** - * U​p​d​a​t​e​ ​I​n​s​t​a​n​c​e - */ - updateInstance: string - /** - * R​e​m​o​v​e​ ​I​n​s​t​a​n​c​e - */ - removeInstance: string - } - messages: { - /** - * {​n​a​m​e​}​ ​u​p​d​a​t​e​d​. - * @param {string} name - */ - success: RequiredParams<'name'> - /** - * T​o​k​e​n​ ​o​r​ ​U​R​L​ ​i​s​ ​i​n​v​a​l​i​d​. - */ - error: string - /** - * I​n​s​t​a​n​c​e​ ​f​o​r​ ​g​i​v​e​n​ ​t​o​k​e​n​ ​i​s​ ​n​o​t​ ​r​e​g​i​s​t​e​r​e​d​ ​! - */ - errorInstanceNotFound: string - } - } - deleteInstance: { - /** - * D​e​l​e​t​e​ ​i​n​s​t​a​n​c​e - */ - title: string - /** - * A​r​e​ ​y​o​u​ ​s​u​r​e​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​d​e​l​e​t​e​ ​{​n​a​m​e​}​? - * @param {string} name - */ - subtitle: RequiredParams<'name'> - messages: { - /** - * I​n​s​t​a​n​c​e​ ​d​e​l​e​t​e​d - */ - success: string - /** - * U​n​e​x​p​e​c​t​e​d​ ​e​r​r​o​r​ ​o​c​c​u​r​r​e​d - */ - error: string - } - controls: { - /** - * D​e​l​e​t​e​ ​i​n​s​t​a​n​c​e - */ - submit: string - } - } - deleteTunnel: { - /** - * D​e​l​e​t​e​ ​t​u​n​n​e​l - */ - title: string - /** - * A​r​e​ ​y​o​u​ ​s​u​r​e​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​d​e​l​e​t​e​ ​{​n​a​m​e​}​? - * @param {string} name - */ - subtitle: RequiredParams<'name'> - messages: { - /** - * T​u​n​n​e​l​ ​d​e​l​e​t​e​d - */ - success: string - /** - * U​n​e​x​p​e​c​t​e​d​ ​e​r​r​o​r​ ​o​c​c​u​r​r​e​d - */ - error: string - } - controls: { - /** - * D​e​l​e​t​e​ ​t​u​n​n​e​l - */ - submit: string - } - } - mfa: { - authentication: { - /** - * T​w​o​-​f​a​c​t​o​r​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n - */ - title: string - /** - * P​a​s​t​e​ ​t​h​e​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​c​o​d​e​ ​f​r​o​m​ ​y​o​u​r​ ​A​u​t​h​e​n​t​i​c​a​t​o​r​ ​A​p​p​l​i​c​a​t​i​o​n​. - */ - authenticatorAppDescription: string - /** - * P​a​s​t​e​ ​t​h​e​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​c​o​d​e​ ​t​h​a​t​ ​w​a​s​ ​s​e​n​t​ ​t​o​ ​y​o​u​r​ ​e​m​a​i​l​ ​a​d​d​r​e​s​s​. - */ - emailCodeDescription: string - /** - * F​o​r​ ​t​h​i​s​ ​c​o​n​n​e​c​t​i​o​n​,​ ​t​w​o​-​f​a​c​t​o​r​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​(​2​F​A​)​ ​i​s​ ​m​a​n​d​a​t​o​r​y​. - */ - mfaStartDescriptionPrimary: string - /** - * S​e​l​e​c​t​ ​y​o​u​r​ ​p​r​e​f​e​r​r​e​d​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​m​e​t​h​o​d​. - */ - mfaStartDescriptionSecondary: string - /** - * U​s​e​ ​a​u​t​h​e​n​t​i​c​a​t​o​r​ ​a​p​p - */ - useAuthenticatorApp: string - /** - * U​s​e​ ​y​o​u​r​ ​e​m​a​i​l​ ​c​o​d​e - */ - useEmailCode: string - /** - * U​s​e​ ​t​h​i​s​ ​m​e​t​h​o​d​ ​f​o​r​ ​f​u​t​u​r​e​ ​l​o​g​i​n​s - */ - saveAuthenticationMethodForFutureLogins: string - /** - * V​e​r​i​f​y - */ - buttonSubmit: string - openidLogin: { - /** - * I​n​ ​o​r​d​e​r​ ​t​o​ ​c​o​n​n​e​c​t​ ​t​o​ ​t​h​e​ ​V​P​N​ ​p​l​e​a​s​e​ ​l​o​g​i​n​ ​w​i​t​h​ ​{​p​r​o​v​i​d​e​r​}​.​ ​T​o​ ​d​o​ ​s​o​,​ ​p​l​e​a​s​e​ ​c​l​i​c​k​ ​"​A​u​t​h​e​n​t​i​c​a​t​e​ ​w​i​t​h​ ​{​p​r​o​v​i​d​e​r​}​"​ ​b​u​t​t​o​n​ ​b​e​l​o​w​. - * @param {unknown} provider - */ - description: RequiredParams<'provider' | 'provider'> - /** - * *​*​T​h​i​s​ ​w​i​l​l​ ​o​p​e​n​ ​a​ ​n​e​w​ ​w​i​n​d​o​w​ ​i​n​ ​y​o​u​r​ ​W​e​b​ ​B​r​o​w​s​e​r​*​*​ ​a​n​d​ ​a​u​t​o​m​a​t​i​c​a​l​l​y​ ​r​e​d​i​r​e​c​t​ ​y​o​u​ ​t​o​ ​t​h​e​ ​{​p​r​o​v​i​d​e​r​}​ ​l​o​g​i​n​ ​p​a​g​e​.​ ​A​f​t​e​r​ ​a​u​t​h​e​n​t​i​c​a​t​i​n​g​ ​w​i​t​h​ ​{​p​r​o​v​i​d​e​r​}​ ​p​l​e​a​s​e​ ​g​e​t​ ​b​a​c​k​ ​h​e​r​e​. - * @param {unknown} provider - */ - browserWarning: RequiredParams<'provider' | 'provider'> - /** - * A​u​t​h​e​n​t​i​c​a​t​e​ ​w​i​t​h​ ​{​p​r​o​v​i​d​e​r​} - * @param {unknown} provider - */ - buttonText: RequiredParams<'provider'> - } - openidPending: { - /** - * W​a​i​t​i​n​g​ ​f​o​r​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​i​n​ ​y​o​u​r​ ​b​r​o​w​s​e​r​.​.​. - */ - description: string - /** - * T​r​y​ ​a​g​a​i​n - */ - tryAgain: string - /** - * T​h​e​r​e​ ​w​a​s​ ​a​n​ ​e​r​r​o​r​ ​d​u​r​i​n​g​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n​.​ ​U​s​e​ ​t​h​e​ ​t​r​y​ ​a​g​a​i​n​ ​b​u​t​t​o​n​ ​b​e​l​o​w​ ​t​o​ ​r​e​t​r​y​ ​t​h​e​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​p​r​o​c​e​s​s​. - */ - errorDescription: string - } - openidUnavailable: { - /** - * T​h​e​ ​O​p​e​n​I​D​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​i​s​ ​c​u​r​r​e​n​t​l​y​ ​u​n​a​v​a​i​l​a​b​l​e​.​ ​T​h​i​s​ ​m​a​y​ ​b​e​ ​d​u​e​ ​t​o​ ​a​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​i​s​s​u​e​ ​o​r​ ​t​h​e​ ​D​e​f​g​u​a​r​d​ ​i​n​s​t​a​n​c​e​ ​i​s​ ​d​o​w​n​.​ ​P​l​e​a​s​e​ ​c​o​n​t​a​c​t​ ​y​o​u​r​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​ ​o​r​ ​t​r​y​ ​a​g​a​i​n​ ​l​a​t​e​r​. - */ - description: string - /** - * T​r​y​ ​a​g​a​i​n - */ - tryAgain: string - } - errors: { - /** - * S​e​l​e​c​t​e​d​ ​m​e​t​h​o​d​ ​h​a​s​ ​n​o​t​ ​b​e​e​n​ ​c​o​n​f​i​g​u​r​e​d​. - */ - mfaNotConfigured: string - /** - * C​o​u​l​d​ ​n​o​t​ ​s​t​a​r​t​ ​M​F​A​ ​p​r​o​c​e​s​s​.​ ​P​l​e​a​s​e​ ​t​r​y​ ​a​g​a​i​n​ ​o​r​ ​c​o​n​t​a​c​t​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​. - */ - mfaStartGeneric: string - /** - * C​o​u​l​d​ ​n​o​t​ ​f​i​n​i​s​h​ ​M​F​A​ ​p​r​o​c​e​s​s​.​ ​P​l​e​a​s​e​ ​t​r​y​ ​a​g​a​i​n​ ​o​r​ ​c​o​n​t​a​c​t​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​. - */ - mfaFinishGeneric: string - /** - * C​o​u​l​d​ ​n​o​t​ ​f​i​n​d​ ​i​n​s​t​a​n​c​e​. - */ - instanceNotFound: string - /** - * L​o​c​a​t​i​o​n​ ​i​s​ ​n​o​t​ ​s​p​e​c​i​f​i​e​d​. - */ - locationNotSpecified: string - /** - * E​r​r​o​r​,​ ​t​h​i​s​ ​c​o​d​e​ ​i​s​ ​i​n​v​a​l​i​d​,​ ​t​r​y​ ​a​g​a​i​n​ ​o​r​ ​c​o​n​t​a​c​t​ ​y​o​u​r​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​. - */ - invalidCode: string - /** - * T​o​k​e​n​ ​h​a​s​ ​e​x​p​i​r​e​d​.​ ​P​l​e​a​s​e​ ​t​r​y​ ​t​o​ ​c​o​n​n​e​c​t​ ​a​g​a​i​n​. - */ - tokenExpired: string - /** - * A​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​t​o​o​k​ ​t​o​o​ ​l​o​n​g​ ​a​n​d​ ​t​i​m​e​d​ ​o​u​t​.​ ​P​l​e​a​s​e​ ​t​r​y​ ​c​o​n​n​e​c​t​i​n​g​ ​a​g​a​i​n​. - */ - authenticationTimeout: string - /** - * E​r​r​o​r​:​ ​Y​o​u​r​ ​l​o​g​i​n​ ​s​e​s​s​i​o​n​ ​m​i​g​h​t​ ​h​a​v​e​ ​b​e​e​n​ ​i​n​v​a​l​i​d​a​t​e​d​ ​o​r​ ​e​x​p​i​r​e​d​.​ ​P​l​e​a​s​e​ ​t​r​y​ ​a​g​a​i​n​. - */ - sessionInvalidated: string - } - } - } - } -} - -export type TranslationFunctions = { - time: { - seconds: { - /** - * second - */ - singular: () => LocalizedString - /** - * seconds - */ - plural: () => LocalizedString - } - minutes: { - /** - * minute - */ - singular: () => LocalizedString - /** - * minutes - */ - plural: () => LocalizedString - } - } - form: { - errors: { - /** - * Field is invalid - */ - invalid: () => LocalizedString - /** - * Enter a valid E-mail - */ - email: () => LocalizedString - /** - * Field is required - */ - required: () => LocalizedString - /** - * Field requires minimal value of {min} - */ - minValue: (arg: { min: number }) => LocalizedString - /** - * Field cannot exceed maximal value of {max} - */ - maxValue: (arg: { max: number }) => LocalizedString - /** - * Field value must be above zero - */ - aboveZero: () => LocalizedString - /** - * Min length of {length} - */ - minLength: (arg: { length: number }) => LocalizedString - /** - * Max length of {length} - */ - maxLength: (arg: { length: number }) => LocalizedString - /** - * At least one special character - */ - specialsRequired: () => LocalizedString - /** - * Special characters are forbidden - */ - specialsForbidden: () => LocalizedString - /** - * At least one number required - */ - numberRequired: () => LocalizedString - password: { - /** - * Please correct the following: - */ - floatingTitle: () => LocalizedString - } - /** - * At least one lower case character - */ - oneLower: () => LocalizedString - /** - * At least one upper case character - */ - oneUpper: () => LocalizedString - /** - * Device with this name already exists - */ - duplicatedName: () => LocalizedString - } - } - common: { - controls: { - /** - * Back - */ - back: () => LocalizedString - /** - * Next - */ - next: () => LocalizedString - /** - * Submit - */ - submit: () => LocalizedString - /** - * Cancel - */ - cancel: () => LocalizedString - /** - * Close - */ - close: () => LocalizedString - /** - * Reset - */ - reset: () => LocalizedString - /** - * Save - */ - save: () => LocalizedString - } - messages: { - /** - * Unexpected error occurred! - */ - error: () => LocalizedString - /** - * An error occurred: {message} - */ - errorWithMessage: (arg: { message: unknown }) => LocalizedString - /** - * Token has expired, please contact your administrator to issue a new enrollment token - */ - tokenExpired: () => LocalizedString - /** - * There was a network error. Can't reach proxy. - */ - networkError: () => LocalizedString - /** - * Configuration for instance {instance} has changed. Disconnect from all locations to apply changes. - */ - configChanged: (arg: { instance: string }) => LocalizedString - /** - * Detected that the {con_type} {interface_name} has disconnected, trying to reconnect... - */ - deadConDropped: (arg: { con_type: string, interface_name: string }) => LocalizedString - /** - * No defguard_proxy set-cookie received - */ - noCookie: () => LocalizedString - /** - * Context is not secure. - */ - insecureContext: () => LocalizedString - clipboard: { - /** - * Clipboard is not accessible. - */ - error: () => LocalizedString - /** - * Content copied to clipboard. - */ - success: () => LocalizedString - } - /** - * Your Defguard instance "{instance_name}" version is not supported by your Defguard Client version. Defguard Core version: {core_version} (required: {core_required_version}), Defguard Proxy version: {proxy_version} (required: {proxy_required_version}). Please contact your administrator. - */ - versionMismatch: (arg: { core_required_version: string, core_version: string, instance_name: string, proxy_required_version: string, proxy_version: string }) => LocalizedString - /** - * The identifier (UUID) of the remote Defguard instance "{instance_name}" does not match the one stored locally. Because of this, some features may not work correctly. To resolve this issue, remove the instance and add it again, or contact your administrator. - */ - uuidMismatch: (arg: { instance_name: string }) => LocalizedString - } - } - components: { - adminInfo: { - /** - * Your admin - */ - title: () => LocalizedString - } - } - pages: { - client: { - modals: { - deadConDropped: { - /** - * {conType} {name} disconnected - */ - title: (arg: { conType: string, name: string }) => LocalizedString - /** - * Tunnel - */ - tunnel: () => LocalizedString - /** - * Location - */ - location: () => LocalizedString - /** - * The {conType} {name} has been disconnected, since we have detected that the server is not responding with any traffic for {time}s. If this message keeps occurring, please contact your administrator and inform them about this fact. - */ - message: (arg: { conType: string, name: string, time: number }) => LocalizedString - controls: { - /** - * Close - */ - close: () => LocalizedString - } - } - } - pages: { - carouselPage: { - slides: { - shared: { - /** - * **defguard** is all the above and more! - */ - isMore: () => LocalizedString - /** - * Visit defguard on - */ - githubButton: () => LocalizedString - } - welcome: { - /** - * Welcome to **defguard** desktop client! - */ - title: () => LocalizedString - instance: { - /** - * Add Instance - */ - title: () => LocalizedString - /** - * Establish a connection to defguard instance effortlessly by configuring it with a single token. - */ - subtitle: () => LocalizedString - } - tunnel: { - /** - * Add Tunnel - */ - title: () => LocalizedString - /** - * Utilize it as a WireGuard® Desktop Client with ease. Set up your own tunnel or import a configuration file. - */ - subtitle: () => LocalizedString - } - } - twoFa: { - /** - * WireGuard **2FA with defguard** - */ - title: () => LocalizedString - /** - * Since WireGuard protocol doesn't support 2FA/MFA - most (if not all) currently available WireGuard clients do not support real Multi-Factor Authentication/2FA - and use 2FA just as authorization to the "application" itself (and not WireGuard tunnel). - - If you would like to secure your WireGuard instance try **defguard** VPN & SSO server (which is also free & open source) to get real 2FA using WireGuard PSK keys and peers configuration by defguard gateway! - */ - sideText: () => LocalizedString - } - security: { - /** - * Security and Privacy **done right!** - */ - title: () => LocalizedString - /** - * * Privacy requires controlling your data, thus your user data (Identity, SSO) needs to be on-premise (on your servers) - * Securing your data and applications requires authentication and authorization (SSO) with Multi-Factor Authentication, and for highest security - MFA with Hardware Security Modules - * Accessing your data and applications securely and privately requires data encryption (HTTPS) and a secure tunnel between your device and the Internet to encrypt all traffic (VPN). - * To fully trust your SSO, VPN, it needs to be Open Source - */ - sideText: () => LocalizedString - } - instances: { - /** - * **Multiple** instance & locations - */ - title: () => LocalizedString - /** - * **defguard** (both server nad this client) support multiple instances (installations) and multiple Locations (VPN tunnels). - - If you are an admin/devops - all your customers (instances) and all their tunnels (locations) can be in one place! - */ - sideText: () => LocalizedString - } - support: { - /** - * **Support us** on Github - */ - title: () => LocalizedString - /** - * **defguard** is free and truly Open Source and our team has been working on it for several months. Please consider supporting us by: - */ - text: () => LocalizedString - /** - * staring us on - */ - githubText: () => LocalizedString - /** - * GitHub - */ - githubLink: () => LocalizedString - /** - * spreading the word about: - */ - spreadWordText: () => LocalizedString - /** - * defguard! - */ - defguard: () => LocalizedString - /** - * Reach out to our community via - */ - githubDiscussions: () => LocalizedString - /** - * Support Us! - */ - supportUs: () => LocalizedString - } - } - } - settingsPage: { - /** - * Settings - */ - title: () => LocalizedString - tabs: { - global: { - common: { - /** - * (seconds) - */ - value_in_seconds: () => LocalizedString - } - peer_alive: { - /** - * Session timeout - */ - title: () => LocalizedString - /** - * If active connection exceeds given time without making an handshake with the server. The connection will be considered invalid and disconnected automatically. - */ - helper: () => LocalizedString - } - mtu: { - /** - * MTU (Maximum Transmission Unit) - */ - title: () => LocalizedString - /** - * MTU sets the largest packet size sent through the network. Lowering it can improve connection stability in restrictive or unreliable ISP networks. The default value on most systems is 1500. Try lowering it to 1300-1400 if you encounter ISP-related issues. 0 = default. - */ - helper: () => LocalizedString - } - tray: { - /** - * System tray - */ - title: () => LocalizedString - /** - * Tray icon theme - */ - label: () => LocalizedString - options: { - /** - * Color - */ - color: () => LocalizedString - /** - * White - */ - white: () => LocalizedString - /** - * Black - */ - black: () => LocalizedString - /** - * Gray - */ - gray: () => LocalizedString - } - } - logging: { - /** - * Logging threshold - */ - title: () => LocalizedString - /** - * Change will take effect after client restart. - */ - warning: () => LocalizedString - options: { - /** - * Error - */ - error: () => LocalizedString - /** - * Info - */ - info: () => LocalizedString - /** - * Debug - */ - debug: () => LocalizedString - /** - * Trace - */ - trace: () => LocalizedString - } - } - globalLogs: { - logSources: { - /** - * Client - */ - client: () => LocalizedString - /** - * VPN - */ - vpn: () => LocalizedString - /** - * All - */ - all: () => LocalizedString - } - /** - * The source of the logs. Logs can come from the Defguard client or the VPN service/extension that manages VPN connections at the network level. - */ - logSourceHelper: () => LocalizedString - } - theme: { - /** - * Theme - */ - title: () => LocalizedString - options: { - /** - * Light - */ - light: () => LocalizedString - /** - * Dark - */ - dark: () => LocalizedString - } - } - versionUpdate: { - /** - * Updates - */ - title: () => LocalizedString - /** - * Check for updates - */ - checkboxTitle: () => LocalizedString - } - } - } - } - createdPage: { - tunnel: { - /** - * Your Tunnel Was Added Successfully - */ - title: () => LocalizedString - /** - * Your tunnel has been successfully added. You can now connect this device, check its status and view statistics using the menu in the left sidebar. - */ - content: () => LocalizedString - controls: { - /** - * Add Another Tunnel - */ - submit: () => LocalizedString - } - } - instance: { - /** - * Your Instance Was Added Successfully - */ - title: () => LocalizedString - /** - * Your instance has been successfully added. You can now connect this device, check its status and view statistics using the menu in the left sidebar. - */ - content: () => LocalizedString - controls: { - /** - * Add Another Instance - */ - submit: () => LocalizedString - } - } - } - instancePage: { - /** - * Locations - */ - title: () => LocalizedString - /** - * - Currently you do not have access to any VPN Locations. This may be temporary - your administration team maybe is configuring your access policies. - - If this will not change, please contact your administrator. - */ - noData: () => LocalizedString - controls: { - /** - * Connect - */ - connect: () => LocalizedString - /** - * Disconnect - */ - disconnect: () => LocalizedString - traffic: { - /** - * Predefined traffic - */ - predefinedTraffic: () => LocalizedString - /** - * All traffic - */ - allTraffic: () => LocalizedString - /** - * Allowed traffic - */ - label: () => LocalizedString - /** - * -

    - Predefined traffic - route only traffic for networks defined by Admin through this VPN location
    - All traffic - route ALL your network traffic through this VPN location -

    - */ - helper: () => LocalizedString - } - } - header: { - /** - * Locations - */ - title: () => LocalizedString - /** - * Edit Instance - */ - edit: () => LocalizedString - filters: { - views: { - /** - * Grid View - */ - grid: () => LocalizedString - /** - * Detail View - */ - detail: () => LocalizedString - } - } - } - connectionLabels: { - /** - * Last connected from - */ - lastConnectedFrom: () => LocalizedString - /** - * Last connected - */ - lastConnected: () => LocalizedString - /** - * Connected from - */ - connectedFrom: () => LocalizedString - /** - * Assigned IP - */ - assignedIp: () => LocalizedString - /** - * Active - */ - active: () => LocalizedString - /** - * Never connected - */ - neverConnected: () => LocalizedString - } - locationNeverConnected: { - /** - * Never Connected - */ - title: () => LocalizedString - /** - * This device was never connected to this location, connect to view statistics and information about connection - */ - content: () => LocalizedString - } - LocationNoStats: { - /** - * No stats - */ - title: () => LocalizedString - /** - * This device has no stats for this location in specified time period. Connect to location and wait for client to gather statistics. - */ - content: () => LocalizedString - } - detailView: { - history: { - /** - * Connection history - */ - title: () => LocalizedString - headers: { - /** - * Date - */ - date: () => LocalizedString - /** - * Duration - */ - duration: () => LocalizedString - /** - * Connected from - */ - connectedFrom: () => LocalizedString - /** - * Upload - */ - upload: () => LocalizedString - /** - * Download - */ - download: () => LocalizedString - } - } - details: { - /** - * Details - */ - title: () => LocalizedString - logs: { - /** - * Log - */ - title: () => LocalizedString - } - info: { - configuration: { - /** - * Device configuration - */ - title: () => LocalizedString - /** - * Public key - */ - pubkey: () => LocalizedString - /** - * Addresses - */ - address: () => LocalizedString - /** - * Listen port - */ - listenPort: () => LocalizedString - } - vpn: { - /** - * VPN Server Configuration - */ - title: () => LocalizedString - /** - * Public key - */ - pubkey: () => LocalizedString - /** - * Server Address - */ - serverAddress: () => LocalizedString - /** - * Allowed IPs - */ - allowedIps: () => LocalizedString - /** - * DNS servers - */ - dns: () => LocalizedString - /** - * Persistent keepalive - */ - keepalive: () => LocalizedString - /** - * Latest Handshake - */ - handshake: () => LocalizedString - /** - * {seconds} seconds ago - */ - handshakeValue: (arg: { seconds: number }) => LocalizedString - } - } - } - } - } - tunnelPage: { - /** - * WireGuard Tunnels - */ - title: () => LocalizedString - header: { - /** - * Edit Tunnel - */ - edit: () => LocalizedString - } - } - editTunnelPage: { - /** - * Edit WireGuard® Tunnel - */ - title: () => LocalizedString - messages: { - /** - * Tunnel edited - */ - editSuccess: () => LocalizedString - /** - * Editing tunnel failed - */ - editError: () => LocalizedString - } - controls: { - /** - * Save changes - */ - save: () => LocalizedString - } - } - addTunnelPage: { - /** - * Add WireGuard® Tunnel - */ - title: () => LocalizedString - forms: { - initTunnel: { - /** - * Please provide Instance URL and token - */ - title: () => LocalizedString - sections: { - /** - * VPN Server - */ - vpnServer: () => LocalizedString - /** - * Advanced Options - */ - advancedOptions: () => LocalizedString - } - labels: { - /** - * Tunnel Name - */ - name: () => LocalizedString - /** - * Private Key - */ - privateKey: () => LocalizedString - /** - * Public Key - */ - publicKey: () => LocalizedString - /** - * Address - */ - address: () => LocalizedString - /** - * Public Key - */ - serverPubkey: () => LocalizedString - /** - * Pre-shared Key - */ - presharedKey: () => LocalizedString - /** - * VPN Server Address:Port - */ - endpoint: () => LocalizedString - /** - * DNS - */ - dns: () => LocalizedString - /** - * Allowed IPs (separate with comma) - */ - allowedips: () => LocalizedString - /** - * Persistent Keep Alive (sec) - */ - persistentKeepAlive: () => LocalizedString - /** - * PreUp - */ - preUp: () => LocalizedString - /** - * PostUp - */ - postUp: () => LocalizedString - /** - * PreDown - */ - PreDown: () => LocalizedString - /** - * PostDown - */ - PostDown: () => LocalizedString - } - helpers: { - /** - * Click the "Advanced Options" section to reveal additional settings for fine-tuning your WireGuard tunnel configuration. You can customize pre and post scripts, among other options. - */ - advancedOptions: () => LocalizedString - /** - * A unique name for your WireGuard tunnel to identify it easily. - */ - name: () => LocalizedString - /** - * The public key associated with the WireGuard tunnel for secure communication. - */ - pubkey: () => LocalizedString - /** - * The private key associated with the WireGuard tunnel for secure communication. - */ - prvkey: () => LocalizedString - /** - * The IP address assigned to this WireGuard client within the VPN network. - */ - address: () => LocalizedString - /** - * The public key of the WireGuard server for secure communication. - */ - serverPubkey: () => LocalizedString - /** - * Optional symmetric secret key for enhanced security. - */ - presharedKey: () => LocalizedString - /** - * A comma-separated list of IP addresses or CIDR ranges that are allowed for communication through the tunnel. - */ - allowedIps: () => LocalizedString - /** - * The address and port of the WireGuard server, typically in the format "hostname:port". - */ - endpoint: () => LocalizedString - /** - * The DNS (Domain Name System) server that the WireGuard tunnel should use for name resolution. Right now we only support DNS server IP, in the feature we will support domain search. - */ - dns: () => LocalizedString - /** - * The interval (in seconds) for sending periodic keep-alive messages to ensure the tunnel stays active. Adjust as needed. - */ - persistentKeepAlive: () => LocalizedString - /** - * If enabled, all network traffic will be routed through the WireGuard tunnel. - */ - routeAllTraffic: () => LocalizedString - /** - * Shell commands or scripts to be executed before bringing up the WireGuard tunnel. - */ - preUp: () => LocalizedString - /** - * Shell commands or scripts to be executed after bringing up the WireGuard tunnel. - */ - postUp: () => LocalizedString - /** - * Shell commands or scripts to be executed before tearing down the WireGuard tunnel. - */ - preDown: () => LocalizedString - /** - * Shell commands or scripts to be executed after tearing down the WireGuard tunnel. - */ - postDown: () => LocalizedString - } - /** - * Add Tunnel - */ - submit: () => LocalizedString - messages: { - /** - * Error parsing config file - */ - configError: () => LocalizedString - /** - * Tunnel added - */ - addSuccess: () => LocalizedString - /** - * Creating tunnel failed - */ - addError: () => LocalizedString - } - controls: { - /** - * Import Config File - */ - importConfig: () => LocalizedString - /** - * Generate Private Key - */ - generatePrvkey: () => LocalizedString - } - } - } - guide: { - /** - * Adding WireGuard tunnel - */ - title: () => LocalizedString - /** - *

    To establish secure communication between two or more devices over the internet create a virtual private network by configuring your tunnel.

    If you don’t see options like Table or MTU it means we do not support it for now, but will be added later.

    - */ - subTitle: () => LocalizedString - card: { - /** - * Setting Up A new Tunnel: - */ - title: () => LocalizedString - /** - * -

    1. Import Configuration File

    -
    -
      -
    • Click on the "Import Config File" button.
    • -
    • Navigate to configuration file using the file selection dialog.
    • -
    • Select the .conf file you received or created.
    • -
    -
    -

    2. Or Fill in Form on the Left

    -
    -
      -
    • Enter a name for the tunnel.
    • -
    • Provide essential details such as the private key, public key, and endpoint (server address).
    • -
    -
    -

    - For more help, please visit defguard help (https://docs.defguard.net) -

    - - */ - content: () => LocalizedString - } - } - } - addInstancePage: { - /** - * Add Instance - */ - title: () => LocalizedString - forms: { - initInstance: { - /** - * Please provide Instance URL and token - */ - title: () => LocalizedString - labels: { - /** - * Instance URL - */ - url: () => LocalizedString - /** - * Token - */ - token: () => LocalizedString - } - /** - * Add Instance - */ - submit: () => LocalizedString - } - device: { - /** - * Name this device - */ - title: () => LocalizedString - labels: { - /** - * Name - */ - name: () => LocalizedString - } - /** - * Finish - */ - submit: () => LocalizedString - messages: { - /** - * Device added - */ - addSuccess: () => LocalizedString - } - } - } - guide: { - /** - * Adding Instances and connecting to VPN locations - */ - title: () => LocalizedString - /** - * In order to activate this device and access all VPN locations, you must provide the URL to your defguard instance and enter the activation token. - */ - subTitle: () => LocalizedString - card: { - /** - * You can obtain the token by - */ - title: () => LocalizedString - /** - * -

    1. Invoking Remote Desktop activation process yourself

    -
    -

    - If you have access to your defguard instance (either you are at home/office where defguard is accessible), go to defguard -> your profile -> "Add device" and choose: Activate Defguard Client. Then select if you wish to have the token sent to you by email or just copy it from defguard. -

    -
    -

    2. Activating remotely by your administrator

    -
    -

    - If you do not have access to defguard - please contact your administrator (in your onboarding message/email there were the admin contact details) and ask for Remote desktop activation - best to send you the activation email, from which you can copy the instance URL & token. -

    -
    -

    - For more help, please visit defguard help (https://docs.defguard.net) -

    - - */ - content: () => LocalizedString - } - } - } - } - sideBar: { - /** - * defguard Instances - */ - instances: () => LocalizedString - /** - * Add Instance - */ - addInstance: () => LocalizedString - /** - * Add Tunnel - */ - addTunnel: () => LocalizedString - /** - * WireGuard Tunnels - */ - tunnels: () => LocalizedString - /** - * Settings - */ - settings: () => LocalizedString - copyright: { - /** - * Copyright © 2023 - */ - copyright: () => LocalizedString - /** - * Application version: {version} - */ - appVersion: (arg: { version: string }) => LocalizedString - } - /** - * Application version: - */ - applicationVersion: () => LocalizedString - } - newApplicationVersion: { - /** - * New version available - */ - header: () => LocalizedString - /** - * Dismiss - */ - dismiss: () => LocalizedString - /** - * See what's new - */ - releaseNotes: () => LocalizedString - } - } - enrollment: { - sideBar: { - /** - * Enrollment - */ - title: () => LocalizedString - steps: { - /** - * Welcome - */ - welcome: () => LocalizedString - /** - * Data verification - */ - verification: () => LocalizedString - /** - * Create password - */ - password: () => LocalizedString - /** - * Configure VPN - */ - vpn: () => LocalizedString - /** - * Finish - */ - finish: () => LocalizedString - /** - * Configure MFA - */ - mfa: () => LocalizedString - /** - * Choose method - */ - mfaChoice: () => LocalizedString - /** - * Complete method - */ - mfaSetup: () => LocalizedString - /** - * Recovery codes - */ - mfaRecovery: () => LocalizedString - } - /** - * Application version - */ - appVersion: () => LocalizedString - } - stepsIndicator: { - /** - * Step - */ - step: () => LocalizedString - /** - * of - */ - of: () => LocalizedString - } - /** - * Time left - */ - timeLeft: () => LocalizedString - steps: { - welcome: { - /** - * Hello, {name} - */ - title: (arg: { name: string }) => LocalizedString - /** - * - In order to gain access to the company infrastructure, we require you to complete this enrollment process. During this process, you will need to: - - 1. Verify your data - 2. Create your password - 3. Configure VPN device - - You have a time limit of **{time} minutes** to complete this process. - If you have any questions, please consult your assigned admin.All necessary information can be found at the bottom of the sidebar. - */ - explanation: (arg: { time: string }) => LocalizedString - } - dataVerification: { - /** - * Data verification - */ - title: () => LocalizedString - /** - * Please, check your data. If anything is wrong, notify your admin after you complete the process. - */ - messageBox: () => LocalizedString - form: { - fields: { - firstName: { - /** - * Name - */ - label: () => LocalizedString - } - lastName: { - /** - * Last name - */ - label: () => LocalizedString - } - email: { - /** - * E-mail - */ - label: () => LocalizedString - } - phone: { - /** - * Phone number - */ - label: () => LocalizedString - } - } - } - } - password: { - /** - * Create password - */ - title: () => LocalizedString - form: { - fields: { - password: { - /** - * Create new password - */ - label: () => LocalizedString - } - repeat: { - /** - * Confirm new password - */ - label: () => LocalizedString - errors: { - /** - * Passwords aren't matching - */ - matching: () => LocalizedString - } - } - } - } - } - deviceSetup: { - desktopSetup: { - /** - * Configure this device - */ - title: () => LocalizedString - controls: { - /** - * Configure device - */ - create: () => LocalizedString - /** - * Device is configured - */ - success: () => LocalizedString - } - messages: { - /** - * Device is configured - */ - deviceConfigured: () => LocalizedString - } - } - /** - * * This step is OPTIONAL. You can skip it if you wish. This can be configured later in defguard. - */ - optionalMessage: () => LocalizedString - cards: { - device: { - /** - * Configure your device for VPN - */ - title: () => LocalizedString - create: { - /** - * Create Configuration - */ - submit: () => LocalizedString - /** - * Please be advised that you have to download the configuration now, since we do not store your private key. After this dialog is closed, you will not be able to get your full configuration file (with private keys, only blank template). - */ - messageBox: () => LocalizedString - form: { - fields: { - name: { - /** - * Device Name - */ - label: () => LocalizedString - } - 'public': { - /** - * My Public Key - */ - label: () => LocalizedString - } - toggle: { - /** - * Generate key pair - */ - generate: () => LocalizedString - /** - * Use my own public key - */ - own: () => LocalizedString - } - } - } - } - config: { - messageBox: { - /** - * -

    - Please be advised that you have to download the configuration now, - since we do not store your private key. After this - dialog is closed, you will not be able to get your - full configuration file (with private keys, only blank template). -

    - - */ - auto: () => LocalizedString - /** - * -

    - Please be advised that configuration provided here does not include private key and uses public key to fill it's place you will need to replace it on your own for configuration to work properly. -

    - - */ - manual: () => LocalizedString - } - /** - * My Device Name - */ - deviceNameLabel: () => LocalizedString - /** - * Use provided configuration file below by scanning QR Code or importing it as file on your devices WireGuard app. - */ - cardTitle: () => LocalizedString - card: { - /** - * Config file for location - */ - selectLabel: () => LocalizedString - } - } - } - guide: { - /** - * Quick Guide - */ - title: () => LocalizedString - /** - * This quick guide will help you with device configuration. - */ - messageBox: () => LocalizedString - /** - * Step {step}: - */ - step: (arg: { step: number }) => LocalizedString - steps: { - wireguard: { - /** - * Download and install WireGuard client on your computer or app on phone. - */ - content: () => LocalizedString - /** - * Download WireGuard - */ - button: () => LocalizedString - } - /** - * Download provided configuration file to your device. - */ - downloadConfig: () => LocalizedString - /** - * Open WireGuard and select "Add Tunnel" (Import tunnel(s) from file). Find your - Defguard configuration file and hit "OK". On phone use WireGuard app “+” icon and scan QR code. - */ - addTunnel: () => LocalizedString - /** - * Select your tunnel from the list and press "activate". - */ - activate: () => LocalizedString - /** - * - **Great work - your Defguard VPN is now active!** - - If you want to disengage your VPN connection, simply press "deactivate". - - */ - finish: () => LocalizedString - } - } - } - } - finish: { - /** - * Configuration completed! - */ - title: () => LocalizedString - } - } - } - sessionTimeout: { - card: { - /** - * Session timed out - */ - header: () => LocalizedString - /** - * Sorry, you have exceeded the time limit to complete the process. Please try again. If you need assistance, please watch our guide or contact your administrator. - */ - message: () => LocalizedString - } - controls: { - /** - * Enter new token - */ - back: () => LocalizedString - /** - * Contact admin - */ - contact: () => LocalizedString - } - } - token: { - card: { - /** - * Please, enter your personal enrollment token - */ - title: () => LocalizedString - messageBox: { - /** - * You can find token in e-mail message or use direct link. - */ - email: () => LocalizedString - } - form: { - errors: { - token: { - /** - * Token is required - */ - required: () => LocalizedString - } - } - fields: { - token: { - /** - * Token - */ - placeholder: () => LocalizedString - } - } - controls: { - /** - * Next - */ - submit: () => LocalizedString - } - } - } - } - } - modals: { - updateInstance: { - /** - * Update instance - */ - title: () => LocalizedString - /** - * Enter the token sent by the administrator to update the Instance configuration. - Alternatively, you can choose to remove this Instance entirely by clicking the 'Remove Instance' button below. - */ - infoMessage: () => LocalizedString - form: { - fieldLabels: { - /** - * Token - */ - token: () => LocalizedString - /** - * URL - */ - url: () => LocalizedString - } - fieldErrors: { - token: { - /** - * Token or URL rejected. - */ - rejected: () => LocalizedString - /** - * Instance for this token was not found. - */ - instanceIsNotPresent: () => LocalizedString - } - } - } - controls: { - /** - * Update Instance - */ - updateInstance: () => LocalizedString - /** - * Remove Instance - */ - removeInstance: () => LocalizedString - } - messages: { - /** - * {name} updated. - */ - success: (arg: { name: string }) => LocalizedString - /** - * Token or URL is invalid. - */ - error: () => LocalizedString - /** - * Instance for given token is not registered ! - */ - errorInstanceNotFound: () => LocalizedString - } - } - deleteInstance: { - /** - * Delete instance - */ - title: () => LocalizedString - /** - * Are you sure you want to delete {name}? - */ - subtitle: (arg: { name: string }) => LocalizedString - messages: { - /** - * Instance deleted - */ - success: () => LocalizedString - /** - * Unexpected error occurred - */ - error: () => LocalizedString - } - controls: { - /** - * Delete instance - */ - submit: () => LocalizedString - } - } - deleteTunnel: { - /** - * Delete tunnel - */ - title: () => LocalizedString - /** - * Are you sure you want to delete {name}? - */ - subtitle: (arg: { name: string }) => LocalizedString - messages: { - /** - * Tunnel deleted - */ - success: () => LocalizedString - /** - * Unexpected error occurred - */ - error: () => LocalizedString - } - controls: { - /** - * Delete tunnel - */ - submit: () => LocalizedString - } - } - mfa: { - authentication: { - /** - * Two-factor authentication - */ - title: () => LocalizedString - /** - * Paste the authentication code from your Authenticator Application. - */ - authenticatorAppDescription: () => LocalizedString - /** - * Paste the authentication code that was sent to your email address. - */ - emailCodeDescription: () => LocalizedString - /** - * For this connection, two-factor authentication (2FA) is mandatory. - */ - mfaStartDescriptionPrimary: () => LocalizedString - /** - * Select your preferred authentication method. - */ - mfaStartDescriptionSecondary: () => LocalizedString - /** - * Use authenticator app - */ - useAuthenticatorApp: () => LocalizedString - /** - * Use your email code - */ - useEmailCode: () => LocalizedString - /** - * Use this method for future logins - */ - saveAuthenticationMethodForFutureLogins: () => LocalizedString - /** - * Verify - */ - buttonSubmit: () => LocalizedString - openidLogin: { - /** - * In order to connect to the VPN please login with {provider}. To do so, please click "Authenticate with {provider}" button below. - */ - description: (arg: { provider: unknown }) => LocalizedString - /** - * **This will open a new window in your Web Browser** and automatically redirect you to the {provider} login page. After authenticating with {provider} please get back here. - */ - browserWarning: (arg: { provider: unknown }) => LocalizedString - /** - * Authenticate with {provider} - */ - buttonText: (arg: { provider: unknown }) => LocalizedString - } - openidPending: { - /** - * Waiting for authentication in your browser... - */ - description: () => LocalizedString - /** - * Try again - */ - tryAgain: () => LocalizedString - /** - * There was an error during authentication. Use the try again button below to retry the authentication process. - */ - errorDescription: () => LocalizedString - } - openidUnavailable: { - /** - * The OpenID authentication is currently unavailable. This may be due to a configuration issue or the Defguard instance is down. Please contact your administrator or try again later. - */ - description: () => LocalizedString - /** - * Try again - */ - tryAgain: () => LocalizedString - } - errors: { - /** - * Selected method has not been configured. - */ - mfaNotConfigured: () => LocalizedString - /** - * Could not start MFA process. Please try again or contact administrator. - */ - mfaStartGeneric: () => LocalizedString - /** - * Could not finish MFA process. Please try again or contact administrator. - */ - mfaFinishGeneric: () => LocalizedString - /** - * Could not find instance. - */ - instanceNotFound: () => LocalizedString - /** - * Location is not specified. - */ - locationNotSpecified: () => LocalizedString - /** - * Error, this code is invalid, try again or contact your administrator. - */ - invalidCode: () => LocalizedString - /** - * Token has expired. Please try to connect again. - */ - tokenExpired: () => LocalizedString - /** - * Authentication took too long and timed out. Please try connecting again. - */ - authenticationTimeout: () => LocalizedString - /** - * Error: Your login session might have been invalidated or expired. Please try again. - */ - sessionInvalidated: () => LocalizedString - } - } - } - } -} - -export type Formatters = {} diff --git a/src/i18n/i18n-util.async.ts b/src/i18n/i18n-util.async.ts deleted file mode 100644 index ee74471d5..000000000 --- a/src/i18n/i18n-util.async.ts +++ /dev/null @@ -1,27 +0,0 @@ -// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. -/* eslint-disable */ - -import { initFormatters } from './formatters' -import type { Locales, Translations } from './i18n-types' -import { loadedFormatters, loadedLocales, locales } from './i18n-util' - -const localeTranslationLoaders = { - en: () => import('./en'), - fr: () => import('./fr'), -} - -const updateDictionary = (locale: Locales, dictionary: Partial): Translations => - loadedLocales[locale] = { ...loadedLocales[locale], ...dictionary } - -export const importLocaleAsync = async (locale: Locales): Promise => - (await localeTranslationLoaders[locale]()).default as unknown as Translations - -export const loadLocaleAsync = async (locale: Locales): Promise => { - updateDictionary(locale, await importLocaleAsync(locale)) - loadFormatters(locale) -} - -export const loadAllLocalesAsync = (): Promise => Promise.all(locales.map(loadLocaleAsync)) - -export const loadFormatters = (locale: Locales): void => - void (loadedFormatters[locale] = initFormatters(locale)) diff --git a/src/i18n/i18n-util.sync.ts b/src/i18n/i18n-util.sync.ts deleted file mode 100644 index fe0ba74f6..000000000 --- a/src/i18n/i18n-util.sync.ts +++ /dev/null @@ -1,26 +0,0 @@ -// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. -/* eslint-disable */ - -import { initFormatters } from './formatters' -import type { Locales, Translations } from './i18n-types' -import { loadedFormatters, loadedLocales, locales } from './i18n-util' - -import en from './en' -import fr from './fr' - -const localeTranslations = { - en, - fr, -} - -export const loadLocale = (locale: Locales): void => { - if (loadedLocales[locale]) return - - loadedLocales[locale] = localeTranslations[locale] as unknown as Translations - loadFormatters(locale) -} - -export const loadAllLocales = (): void => locales.forEach(loadLocale) - -export const loadFormatters = (locale: Locales): void => - void (loadedFormatters[locale] = initFormatters(locale)) diff --git a/src/i18n/i18n-util.ts b/src/i18n/i18n-util.ts deleted file mode 100644 index a4a293240..000000000 --- a/src/i18n/i18n-util.ts +++ /dev/null @@ -1,38 +0,0 @@ -// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. -/* eslint-disable */ - -import { i18n as initI18n, i18nObject as initI18nObject, i18nString as initI18nString } from 'typesafe-i18n' -import type { LocaleDetector } from 'typesafe-i18n/detectors' -import type { LocaleTranslationFunctions, TranslateByString } from 'typesafe-i18n' -import { detectLocale as detectLocaleFn } from 'typesafe-i18n/detectors' -import { initExtendDictionary } from 'typesafe-i18n/utils' -import type { Formatters, Locales, Translations, TranslationFunctions } from './i18n-types' - -export const baseLocale: Locales = 'en' - -export const locales: Locales[] = [ - 'en', - 'fr' -] - -export const isLocale = (locale: string): locale is Locales => locales.includes(locale as Locales) - -export const loadedLocales: Record = {} as Record - -export const loadedFormatters: Record = {} as Record - -export const extendDictionary = initExtendDictionary() - -export const i18nString = (locale: Locales): TranslateByString => initI18nString(locale, loadedFormatters[locale]) - -export const i18nObject = (locale: Locales): TranslationFunctions => - initI18nObject( - locale, - loadedLocales[locale], - loadedFormatters[locale] - ) - -export const i18n = (): LocaleTranslationFunctions => - initI18n(loadedLocales, loadedFormatters) - -export const detectLocale = (...detectors: LocaleDetector[]): Locales => detectLocaleFn(baseLocale, locales, ...detectors) diff --git a/src/main.tsx b/src/main.tsx deleted file mode 100644 index 96d5cc633..000000000 --- a/src/main.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { error } from '@tauri-apps/plugin-log'; -import { StrictMode } from 'react'; -import { createRoot } from 'react-dom/client'; - -import { App } from './components/App/App'; -import { errorDetail } from './shared/utils/errorDetail'; - -// Forward uncaught JS errors to the Tauri backend log -window.onerror = (message, source, lineno, colno, err) => { - const detail = err?.stack ?? `${message} (${source}:${lineno}:${colno})`; - error(`[uncaught error] ${detail}`); - // returning false lets the error propagate to the browser DevTools console - return false; -}; - -// Forward unhandled promise rejections to the Tauri backend log -window.addEventListener('unhandledrejection', (event) => { - error(`[unhandled rejection] ${errorDetail(event.reason)}`); -}); - -const rootElement = document.getElementById('root') as HTMLElement; - -const root = createRoot(rootElement); - -root.render( - - - , -); diff --git a/src/pages/client/ClientPage.tsx b/src/pages/client/ClientPage.tsx deleted file mode 100644 index 5f0a97e2c..000000000 --- a/src/pages/client/ClientPage.tsx +++ /dev/null @@ -1,232 +0,0 @@ -import './style.scss'; - -import { useQuery, useQueryClient } from '@tanstack/react-query'; -import { listen } from '@tauri-apps/api/event'; -import { useEffect } from 'react'; -import { Outlet, useLocation, useNavigate } from 'react-router-dom'; -import { shallow } from 'zustand/shallow'; -import AutoProvisioningManager from '../../components/AutoProvisioningManager'; -import { useI18nContext } from '../../i18n/i18n-react'; -import { DeepLinkProvider } from '../../shared/components/providers/DeepLinkProvider'; -import { useToaster } from '../../shared/defguard-ui/hooks/toasts/useToaster'; -import { routes } from '../../shared/routes'; -import { clientApi } from './clientAPI/clientApi'; -import { ClientSideBar } from './components/ClientSideBar/ClientSideBar'; -import { MfaModalProvider } from './components/MfaModalProvider'; -import { DeadConDroppedModal } from './components/modals/DeadConDroppedModal/DeadConDroppedModal'; -import { useDeadConDroppedModal } from './components/modals/DeadConDroppedModal/store'; -import { useClientFlags } from './hooks/useClientFlags'; -import { useClientStore } from './hooks/useClientStore'; -import { clientQueryKeys } from './query'; -import { type DeadConDroppedPayload, TauriEventKey } from './types'; - -const { getInstances, getTunnels, getAppConfig } = clientApi; - -export const ClientPage = () => { - const queryClient = useQueryClient(); - const [setInstances, setTunnels, setClientState] = useClientStore( - (state) => [state.setInstances, state.setTunnels, state.setState], - shallow, - ); - const navigate = useNavigate(); - const firstLaunch = useClientFlags((state) => state.firstStart); - const [listChecked, setListChecked] = useClientStore((state) => [ - state.listChecked, - state.setListChecked, - ]); - const location = useLocation(); - const toaster = useToaster(); - const openDeadConDroppedModal = useDeadConDroppedModal((s) => s.open); - const { LL } = useI18nContext(); - - const { data: instances } = useQuery({ - queryFn: getInstances, - queryKey: [clientQueryKeys.getInstances], - refetchOnMount: true, - refetchOnWindowFocus: false, - }); - - const { data: tunnels } = useQuery({ - queryFn: getTunnels, - queryKey: [clientQueryKeys.getTunnels], - refetchOnMount: true, - refetchOnWindowFocus: false, - }); - - const { data: appConfig } = useQuery({ - queryFn: getAppConfig, - queryKey: [clientQueryKeys.getApplicationConfig], - refetchOnMount: true, - refetchOnWindowFocus: false, - }); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - const appConfigChanged = listen(TauriEventKey.APPLICATION_CONFIG_CHANGED, () => { - queryClient.invalidateQueries({ - queryKey: [clientQueryKeys.getApplicationConfig], - }); - }); - const instanceUpdate = listen(TauriEventKey.INSTANCE_UPDATE, () => { - const invalidate = [ - clientQueryKeys.getInstances, - clientQueryKeys.getLocations, - clientQueryKeys.getTunnels, - ]; - invalidate.forEach((key) => { - queryClient.invalidateQueries({ - queryKey: [key], - }); - }); - }); - - const verionMismatch = listen(TauriEventKey.VERSION_MISMATCH, (data) => { - const payload = data.payload as { - instance_name: string; - instance_id: number; - core_version: string; - proxy_version: string; - core_required_version: string; - proxy_required_version: string; - core_compatible: boolean; - proxy_compatible: boolean; - }; - toaster.error( - LL.common.messages.versionMismatch({ - instance_name: payload.instance_name, - core_version: payload.core_version, - proxy_version: payload.proxy_version, - core_required_version: payload.core_required_version, - proxy_required_version: payload.proxy_required_version, - }), - { lifetime: -1 }, - ); - }); - - const uuidMismatch = listen<{ - instance_name: string; - local_uuid: string; - core_uuid: string; - }>(TauriEventKey.UUID_MISMATCH, (data) => { - const payload = data.payload; - toaster.error( - LL.common.messages.uuidMismatch({ - instance_name: payload.instance_name, - }), - { lifetime: -1 }, - ); - }); - - const locationUpdate = listen(TauriEventKey.LOCATION_UPDATE, () => { - const invalidate = [clientQueryKeys.getLocations, clientQueryKeys.getTunnels]; - invalidate.forEach((key) => { - queryClient.invalidateQueries({ - queryKey: [key], - }); - }); - }); - - const connectionChanged = listen(TauriEventKey.CONNECTION_CHANGED, () => { - const invalidate = [ - clientQueryKeys.getLocations, - clientQueryKeys.getConnections, - clientQueryKeys.getActiveConnection, - clientQueryKeys.getConnectionHistory, - clientQueryKeys.getLocationStats, - clientQueryKeys.getInstances, - clientQueryKeys.getTunnels, - ]; - invalidate.forEach((key) => { - queryClient.invalidateQueries({ - queryKey: [key], - }); - }); - }); - - const configChanged = listen(TauriEventKey.CONFIG_CHANGED, (data) => { - const instance = data.payload as string; - toaster.info(LL.common.messages.configChanged({ instance })); - }); - - const deadConnectionDropped = listen( - TauriEventKey.DEAD_CONNECTION_DROPPED, - (data) => { - openDeadConDroppedModal(data.payload); - }, - ); - - const deadConnectionReconnected = listen( - TauriEventKey.DEAD_CONNECTION_RECONNECTED, - (data) => { - toaster.warning( - LL.common.messages.deadConDropped({ - interface_name: data.payload.name, - con_type: data.payload.con_type, - }), - { - lifetime: -1, - }, - ); - }, - ); - - return () => { - deadConnectionDropped.then((cleanup) => cleanup()); - deadConnectionReconnected.then((cleanup) => cleanup()); - configChanged.then((cleanup) => cleanup()); - connectionChanged.then((cleanup) => cleanup()); - instanceUpdate.then((cleanup) => cleanup()); - locationUpdate.then((cleanup) => cleanup()); - appConfigChanged.then((cleanup) => cleanup()); - verionMismatch.then((cleanup) => cleanup()); - uuidMismatch.then((cleanup) => cleanup()); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - // update store - useEffect(() => { - if (instances) { - setListChecked(true); - setInstances(instances); - } - if (tunnels) { - setListChecked(true); - setTunnels(tunnels); - } - }, [instances, setInstances, tunnels, setTunnels, setListChecked]); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - if (appConfig) { - setClientState({ appConfig }); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [appConfig]); - - // navigate to carousel on first app Launch - useEffect(() => { - if (!location.pathname.includes(routes.client.carousel) && firstLaunch) { - navigate(routes.client.carousel, { replace: true }); - } - }, [firstLaunch, navigate, location.pathname]); - - useEffect(() => { - if (listChecked && instances?.length === 0 && tunnels?.length === 0) { - navigate(routes.client.carousel, { replace: true }); - } - }, [navigate, listChecked, instances, tunnels]); - - return ( - - - - - - - - - - - ); -}; diff --git a/src/pages/client/clientAPI/clientApi.ts b/src/pages/client/clientAPI/clientApi.ts deleted file mode 100644 index ac14da39a..000000000 --- a/src/pages/client/clientAPI/clientApi.ts +++ /dev/null @@ -1,191 +0,0 @@ -import type { InvokeArgs } from '@tauri-apps/api/core'; -import { invoke } from '@tauri-apps/api/core'; -import { debug, error, trace } from '@tauri-apps/plugin-log'; -import pTimeout, { TimeoutError } from 'p-timeout'; - -import type { NewApplicationVersionInfo } from '../../../shared/hooks/api/types'; -import type { - CommonWireguardFields, - Connection, - DefguardInstance, - LocationStats, - Tunnel, -} from '../types'; -import type { - AppConfig, - ConnectionRequest, - GetLocationsRequest, - LocationDetails, - LocationDetailsRequest, - ProvisioningConfig, - RoutingRequest, - SaveConfigRequest, - SaveDeviceConfigResponse, - StatsRequest, - TauriCommandKey, - TunnelRequest, - UpdateInstanceRequest, -} from './types'; - -/** Extracts a human-readable message from Tauri command rejections. */ -const getInvokeErrorMessage = (command: TauriCommandKey, e: unknown): string => { - if ( - typeof e === 'object' && - e !== null && - 'message' in e && - typeof e.message === 'string' - ) { - return e.message; - } - - return `Invoking "${command}" failed due to unknown error: ${JSON.stringify(e)}`; -}; - -// Streamlines logging for invokes -async function invokeWrapper( - command: TauriCommandKey, - args?: InvokeArgs, - timeout: number = 10000, -): Promise { - debug(`Invoking "${command}" on the frontend`); - try { - const res = await pTimeout(invoke(command, args), { - milliseconds: timeout, - }); - debug(`"${command}" completed on the frontend`); - trace(`"${command}" returned: ${JSON.stringify(res)}`); - return res; - // TODO: handle more error types ? - } catch (e) { - let message = getInvokeErrorMessage(command, e); - trace(message); - if (e instanceof TimeoutError) { - message = `Invoking "${command}" timed out after ${timeout / 1000} seconds`; - } - error(message); - return Promise.reject(message); - } -} - -const saveConfig = async (data: SaveConfigRequest): Promise => - invokeWrapper('save_device_config', data); - -const getInstances = async (): Promise => - invokeWrapper('all_instances'); - -const getLocations = async ( - data: GetLocationsRequest, -): Promise => invokeWrapper('all_locations', data); - -const connect = async (data: ConnectionRequest): Promise => - invokeWrapper('connect', data); - -const disconnect = async (data: ConnectionRequest): Promise => - invokeWrapper('disconnect', data); - -const getLocationStats = async (data: StatsRequest): Promise => - invokeWrapper('location_stats', data); - -const getLastConnection = async (data: ConnectionRequest): Promise => - invokeWrapper('last_connection', data); - -const getConnectionHistory = async (data: ConnectionRequest): Promise => - invokeWrapper('all_connections', data); - -const getActiveConnection = async (data: ConnectionRequest): Promise => - invokeWrapper('active_connection', data); - -const updateLocationRouting = async (data: RoutingRequest): Promise => - invokeWrapper('update_location_routing', data); - -const deleteInstance = async (id: number): Promise => - invokeWrapper('delete_instance', { instanceId: id }); - -const updateInstance = async (data: UpdateInstanceRequest): Promise => - invokeWrapper('update_instance', data); - -const parseTunnelConfig = async (filename: string, config: string) => - invokeWrapper('parse_tunnel_config', { filename: filename, config: config }); - -const saveTunnel = async (tunnel: TunnelRequest) => - invokeWrapper('save_tunnel', { tunnel: tunnel }); - -const updateTunnel = async (tunnel: TunnelRequest) => - invokeWrapper('update_tunnel', { tunnel: tunnel }); - -const getLocationDetails = async ( - data: LocationDetailsRequest, -): Promise => invokeWrapper('location_interface_details', data); - -const getTunnels = async (): Promise => - invokeWrapper('all_tunnels'); - -// opens given link in system default browser -const openLink = async (link: string): Promise => - invokeWrapper('open_link', { link }); - -const getTunnelDetails = async (id: number): Promise => - invokeWrapper('tunnel_details', { tunnelId: id }); - -const deleteTunnel = async (id: number): Promise => - invokeWrapper('delete_tunnel', { tunnelId: id }); - -const getLatestAppVersion = async (): Promise => - invokeWrapper('get_latest_app_version'); - -const startGlobalLogWatcher = async (): Promise => - invokeWrapper('start_global_logwatcher'); - -const stopGlobalLogWatcher = async (): Promise => - invokeWrapper('stop_global_logwatcher'); - -const getAppConfig = async (): Promise => - invokeWrapper('command_get_app_config'); - -const getPostureData = async (): Promise => invokeWrapper('get_posture_data'); - -const getProvisioningConfig = async (): Promise => - invokeWrapper('get_provisioning_config'); - -const getPlatformHeader = async (): Promise => - invokeWrapper('get_platform_header'); - -const setAppConfig = async ( - appConfig: Partial, - emitEvent: boolean, -): Promise => - invokeWrapper('command_set_app_config', { - configPatch: appConfig, - emitEvent, - }); - -export const clientApi = { - getAppConfig, - setAppConfig, - getInstances, - getPostureData, - getTunnels, - getLocations, - connect, - disconnect, - getLocationStats, - getLastConnection, - getConnectionHistory, - getActiveConnection, - saveConfig, - updateLocationRouting, - deleteInstance, - deleteTunnel, - getLocationDetails, - updateInstance, - parseTunnelConfig, - saveTunnel, - updateTunnel, - openLink, - getTunnelDetails, - getLatestAppVersion, - startGlobalLogWatcher, - stopGlobalLogWatcher, - getProvisioningConfig, - getPlatformHeader, -}; diff --git a/src/pages/client/clientAPI/types.ts b/src/pages/client/clientAPI/types.ts deleted file mode 100644 index 9b8f26709..000000000 --- a/src/pages/client/clientAPI/types.ts +++ /dev/null @@ -1,154 +0,0 @@ -import type { ThemeKey } from '../../../shared/defguard-ui/hooks/theme/types'; -import type { CreateDeviceResponse } from '../../../shared/hooks/api/types'; -import type { ClientConnectionType, DefguardInstance, DefguardLocation } from '../types'; - -export type GetLocationsRequest = { - instanceId: number; -}; - -export type ConnectionRequest = { - locationId: number; - connectionType: ClientConnectionType; - presharedKey?: string; -}; - -export type RoutingRequest = { - locationId: number; - connectionType: ClientConnectionType; - routeAllTraffic?: boolean; -}; - -export type StatsRequest = { - locationId: number; - connectionType: ClientConnectionType; - from?: string; -}; - -export type SaveConfigRequest = { - privateKey: string; - response: CreateDeviceResponse; -}; - -export type UpdateInstanceRequest = { - instanceId: number; - response: CreateDeviceResponse; -}; - -export type SaveDeviceConfigResponse = { - instance: DefguardInstance; - locations: DefguardLocation[]; -}; -export type SaveTunnelRequest = { - privateKey: string; - response: CreateDeviceResponse; -}; - -export type LogLevel = 'ERROR' | 'INFO' | 'DEBUG' | 'TRACE' | 'WARN'; - -export const availableLogLevels: LogLevel[] = ['ERROR', 'WARN', 'INFO', 'DEBUG', 'TRACE']; - -export type GlobalLogLevel = 'ERROR' | 'INFO' | 'DEBUG'; -export type LogSource = 'Client' | 'VPN' | 'All'; - -export type ClientView = 'grid' | 'detail'; - -export type LogItemField = { - message: string; - interface_name?: string; -}; - -export type LogItem = { - // datetime UTC - timestamp: string; - level: LogLevel; - target: string; - fields: LogItemField; - source: LogSource; -}; - -export type InterfaceLogsRequest = { - locationId: DefguardLocation['id']; -}; - -export type AppConfig = { - theme: ThemeKey; - log_level: LogLevel; - check_for_updates: boolean; - peer_alive_period: number; - mtu: number; -}; - -export type PlatformInfo = { - client_version: string; - platform_info: string; -}; - -export type ProvisioningConfig = { - enrollment_token: string; - enrollment_url: string; -}; - -export type LocationDetails = { - location_id: number; - name: string; - pubkey: string; - address: string; - dns?: string; - listen_port: number; - peer_pubkey: string; - peer_endpoint: string; - allowed_ips: string; - persistent_keepalive_interval?: number; - last_handshake?: number; -}; - -export type TunnelRequest = { - name: string; - pubkey: string; - prvkey: string; - address: string; - server_pubkey: string; - allowed_ips?: string; - endpoint: string; - dns?: string; - persistent_keep_alive: number; - pre_up?: string; - post_up?: string; - pre_down?: string; - post_down?: string; -}; - -export type LocationDetailsRequest = { - locationId: number; - connectionType: ClientConnectionType; -}; - -export type TauriCommandKey = - | 'all_instances' - | 'all_locations' - | 'connect' - | 'get_posture_data' - | 'disconnect' - | 'location_stats' - | 'last_connection' - | 'all_connections' - | 'active_connection' - | 'save_device_config' - | 'update_location_routing' - | 'delete_instance' - | 'update_instance' - | 'parse_tunnel_config' - | 'save_tunnel' - | 'update_tunnel' - | 'all_tunnels' - | 'tunnel_details' - | 'delete_tunnel' - | 'location_interface_details' - | 'open_link' - | 'get_latest_app_version' - | 'start_global_logwatcher' - | 'stop_global_logwatcher' - | 'command_get_app_config' - | 'command_set_app_config' - | 'get_provisioning_config' - | 'get_platform_header'; diff --git a/src/pages/client/components/ClientSideBar/ClientSideBar.tsx b/src/pages/client/components/ClientSideBar/ClientSideBar.tsx deleted file mode 100644 index 7e8a9c946..000000000 --- a/src/pages/client/components/ClientSideBar/ClientSideBar.tsx +++ /dev/null @@ -1,209 +0,0 @@ -import './style.scss'; - -import { getVersion } from '@tauri-apps/api/app'; -import classNames from 'classnames'; -import { useEffect, useState } from 'react'; -import { useMatch, useNavigate } from 'react-router-dom'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { IconDefguard } from '../../../../shared/components/icons/IconDefguard/IconDeguard'; -import SvgDefguardLogoCollapsed from '../../../../shared/components/svg/DefguardLogoCollapsed'; -import SvgDefguardLogoText from '../../../../shared/components/svg/DefguardLogoText'; -import SvgIconNavConnections from '../../../../shared/components/svg/IconNavConnections'; -import SvgIconNavVpn from '../../../../shared/components/svg/IconNavVpn'; -import { Divider } from '../../../../shared/defguard-ui/components/Layout/Divider/Divider'; -import { IconContainer } from '../../../../shared/defguard-ui/components/Layout/IconContainer/IconContainer'; -import SvgIconPlus from '../../../../shared/defguard-ui/components/svg/IconPlus'; -import SvgIconSettings from '../../../../shared/defguard-ui/components/svg/IconSettings'; -import { routes } from '../../../../shared/routes'; -import { useClientStore } from '../../hooks/useClientStore'; -import { useAddInstanceStore } from '../../pages/ClientAddInstancePage/hooks/useAddInstanceStore'; -import { ClientConnectionType } from '../../types'; -import { ClientBarItem } from './components/ClientBarItem/ClientBarItem'; -import { NewApplicationVersionAvailableInfo } from './components/NewApplicationVersionAvailableInfo/NewApplicationVersionAvailableInfo'; - -export const ClientSideBar = () => { - const navigate = useNavigate(); - const { LL } = useI18nContext(); - const [selectedInstance, instances, tunnels, setClientStore] = useClientStore( - (state) => [state.selectedInstance, state.instances, state.tunnels, state.setState], - ); - const tunnelPathActive = - selectedInstance?.id === undefined && - selectedInstance?.type === ClientConnectionType.TUNNEL; - - return ( -
    -
    navigate(routes.client.carousel, { replace: true })} - > - - -
    -
    navigate(routes.client.carousel, { replace: true })} - > - -
    -
    -
    { - navigate(routes.client.carousel, { replace: true }); - }} - > - -

    {LL.pages.client.sideBar.instances()}

    -
    - {instances.map((instance) => ( - - ))} - -
    - -
    -
    { - setClientStore({ - selectedInstance: { - id: undefined, - type: ClientConnectionType.TUNNEL, - }, - }); - navigate(routes.client.base, { replace: true }); - }} - > - -

    {LL.pages.client.sideBar.tunnels()}

    -
    - {tunnels.map((tunnel) => ( - - ))} - -
    - - - - -
    -
    -
    - ); -}; - -const FooterApplicationInfo = () => { - const { LL } = useI18nContext(); - const [appVersion, setAppVersion] = useState('-'); - - useEffect(() => { - const getAppVersion = async () => { - const version = await getVersion().catch(() => { - return ''; - }); - setAppVersion(version); - }; - - getAppVersion(); - }, []); - - return ( -
    - ); -}; - -const SettingsNav = () => { - const { LL } = useI18nContext(); - const navigate = useNavigate(); - const pathActive = useMatch(routes.client.settings); - return ( -
    { - navigate(routes.client.settings, { replace: true }); - }} - > - -

    {LL.pages.client.sideBar.settings()}

    -
    - ); -}; - -const AddInstance = () => { - const { LL } = useI18nContext(); - const navigate = useNavigate(); - const resetStore = useAddInstanceStore((s) => s.reset); - return ( -
    { - resetStore(); - navigate(routes.client.addInstance, { replace: true }); - }} - > - - - -

    {LL.pages.client.sideBar.addInstance()}

    -
    - ); -}; -const AddTunnel = () => { - const { LL } = useI18nContext(); - const navigate = useNavigate(); - return ( -
    { - navigate(routes.client.addTunnel, { replace: true }); - }} - > - - - -

    {LL.pages.client.sideBar.addTunnel()}

    -
    - ); -}; diff --git a/src/pages/client/components/ClientSideBar/components/ClientBarItem/ClientBarItem.tsx b/src/pages/client/components/ClientSideBar/components/ClientBarItem/ClientBarItem.tsx deleted file mode 100644 index 59492fb91..000000000 --- a/src/pages/client/components/ClientSideBar/components/ClientBarItem/ClientBarItem.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import { autoUpdate, useFloating } from '@floating-ui/react'; -import classNames from 'classnames'; -import { isUndefined } from 'lodash-es'; -import { useMemo } from 'react'; -import { useMatch, useNavigate } from 'react-router-dom'; - -import SvgIconConnection from '../../../../../../shared/defguard-ui/components/svg/IconConnection'; -import { routes } from '../../../../../../shared/routes'; -import { useClientStore } from '../../../../hooks/useClientStore'; -import type { ClientConnectionType } from '../../../../types'; - -type Props = { - itemType: ClientConnectionType; - itemId: number; - label: string; - active?: boolean; -}; - -export const ClientBarItem = ({ itemType, itemId, label, active = false }: Props) => { - const instancePage = useMatch('/client/instance/'); - const navigate = useNavigate(); - const setClientStore = useClientStore((state) => state.setState); - const selectedInstance = useClientStore((state) => state.selectedInstance); - const itemSelected = useMemo(() => { - return ( - !isUndefined(selectedInstance) && - !isUndefined(selectedInstance?.id) && - selectedInstance.id === itemId && - selectedInstance.type === itemType - ); - }, [selectedInstance, itemType, itemId]); - - const cn = classNames('client-bar-item', 'clickable', { - active: itemSelected, - connected: active, - }); - - const { refs, floatingStyles } = useFloating({ - placement: 'right', - whileElementsMounted: (refElement, floatingElement, updateFunc) => - autoUpdate(refElement, floatingElement, updateFunc), - }); - - return ( - <> -
    { - setClientStore({ - selectedInstance: { - id: itemId, - type: itemType, - }, - }); - if (!instancePage) { - navigate(routes.client.instancePage, { replace: true }); - } - }} - > - -

    {label}

    -
    - -

    {label[0]}

    -
    -
    - {active && ( -
    - )} - - ); -}; diff --git a/src/pages/client/components/ClientSideBar/components/NewApplicationVersionAvailableInfo/NewApplicationVersionAvailableInfo.tsx b/src/pages/client/components/ClientSideBar/components/NewApplicationVersionAvailableInfo/NewApplicationVersionAvailableInfo.tsx deleted file mode 100644 index 1e21bb20b..000000000 --- a/src/pages/client/components/ClientSideBar/components/NewApplicationVersionAvailableInfo/NewApplicationVersionAvailableInfo.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import './style.scss'; - -import { shallow } from 'zustand/shallow'; - -import { useApplicationUpdateStore } from '../../../../../../components/ApplicationUpdateManager/useApplicationUpdateStore'; -import { useNewAppVersionAvailable } from '../../../../../../components/ApplicationUpdateManager/useNewAppVersionAvailable'; -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { clientApi } from '../../../../../../pages/client/clientAPI/clientApi'; -import SvgIconDownload from '../../../../../../shared/defguard-ui/components/svg/IconDownload'; -import { useClientStore } from '../../../../../client/hooks/useClientStore'; - -const { openLink } = clientApi; - -export const NewApplicationVersionAvailableInfo = () => { - const { LL } = useI18nContext(); - const { newAppVersionAvailable } = useNewAppVersionAvailable(); - const checkForUpdates = useClientStore((state) => state.appConfig.check_for_updates); - - const dismissed = useApplicationUpdateStore((state) => state.dismissed, shallow); - const setValues = useApplicationUpdateStore((state) => state.setValues, shallow); - - const [latestVersion, releaseDate, releaseNotesUrl, updateUrl] = - useApplicationUpdateStore( - (state) => [ - state.latestVersion, - state.releaseDate, - state.releaseNotesUrl, - state.updateUrl, - ], - shallow, - ); - - if ( - dismissed || - !checkForUpdates || - !newAppVersionAvailable || - !latestVersion || - !releaseDate || - !releaseNotesUrl || - !updateUrl - ) - return null; - - return ( -
    -
    -

    - {LL.pages.client.newApplicationVersion.header()} {latestVersion} -

    - openLink(updateUrl)} - /> -
    -
    -

    setValues({ dismissed: true })}> - {LL.pages.client.newApplicationVersion.dismiss()} -

    -

    openLink(releaseNotesUrl)}> - {LL.pages.client.newApplicationVersion.releaseNotes()} -

    -
    -
    -

    {LL.pages.client.newApplicationVersion.header()}

    -

    {latestVersion}

    - openLink(updateUrl)} - /> -
    -

    openLink(releaseNotesUrl)}> - {LL.pages.client.newApplicationVersion.releaseNotes()} -

    -

    setValues({ dismissed: true })}> - {LL.pages.client.newApplicationVersion.dismiss()} -

    -
    -
    -
    - ); -}; diff --git a/src/pages/client/components/ClientSideBar/components/NewApplicationVersionAvailableInfo/style.scss b/src/pages/client/components/ClientSideBar/components/NewApplicationVersionAvailableInfo/style.scss deleted file mode 100644 index eb3983246..000000000 --- a/src/pages/client/components/ClientSideBar/components/NewApplicationVersionAvailableInfo/style.scss +++ /dev/null @@ -1,84 +0,0 @@ -#settings-new-application-version-available { - flex-direction: column; - width: 100%; - background-color: var(--surface-frame-bg); - - @include media-breakpoint-down(lg) { - background-color: transparent; - } - - & > .new-version-header { - padding: 20px; - padding-bottom: 0; - display: flex; - justify-content: space-between; - align-items: center; - - @include media-breakpoint-down(lg) { - display: none; - } - - & > .new-version-download-icon { - cursor: pointer; - } - - & > h3 { - margin-right: 5px; - @include typography(markdown-h6); - color: var(--text-body-primary); - } - } - - & > .new-version-subheader { - display: flex; - padding: 20px; - padding-top: 8px; - justify-content: space-between; - color: var(--text-body-primary); - font-weight: 300; - font-size: 14px; - - @include media-breakpoint-down(lg) { - display: none; - } - - & > p { - cursor: pointer; - @include typography(app-copyright); - font-size: 12px; - } - } - - & > .settings-new-application-version-mobile { - display: flex; - flex-direction: column; - align-items: center; - margin-bottom: 20px; - background-color: var(--surface-frame-bg); - padding-top: 10px; - padding-bottom: 5px; - - @include media-breakpoint-up(lg) { - display: none; - } - - & > p, - & > div > p { - text-align: center; - @include typography(app-copyright); - color: var(--text-body-primary); - } - - & > svg { - height: 32px; - width: 32px; - cursor: pointer; - } - - & > div > p { - cursor: pointer; - line-height: 11px; - margin-bottom: 5px; - } - } -} diff --git a/src/pages/client/components/ClientSideBar/style.scss b/src/pages/client/components/ClientSideBar/style.scss deleted file mode 100644 index ad97b1956..000000000 --- a/src/pages/client/components/ClientSideBar/style.scss +++ /dev/null @@ -1,296 +0,0 @@ -#client-page-side { - z-index: 2; - position: fixed; - inset: 0; - height: 100%; - max-height: 100vh; - max-height: 100dvh; - overflow-x: hidden; - overflow-y: auto; - width: 70px; - background-color: var(--surface-nav-bg); - border-right: 1px solid var(--border-primary); - display: flex; - flex-flow: column; - - @include media-breakpoint-up(lg) { - width: 270px; - } - - & > .logo-desktop { - display: none; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - height: 108px; - column-gap: 7px; - border-bottom: 1px solid var(--border-primary); - cursor: pointer; - - @include media-breakpoint-up(lg) { - display: flex; - } - - :nth-child(2) { - path { - fill: var(--text-body-primary); - } - } - } - - & > .logo-mobile { - display: flex; - height: 70px; - flex-flow: row nowrap; - border-bottom: 1px solid var(--border-primary); - width: 100%; - align-items: center; - justify-content: center; - box-sizing: border-box; - cursor: pointer; - - @include media-breakpoint-up(lg) { - display: none; - } - - & > svg { - width: 40px; - height: 40px; - } - } - - & > .items { - display: flex; - flex-grow: 1; - height: 45vh; - flex-shrink: 0; - flex-flow: column; - align-items: flex-start; - justify-content: flex-start; - box-sizing: border-box; - row-gap: 15px; - - &.flex-end { - justify-content: flex-end; - - @media (min-height: 600px) { - padding-bottom: 70px; - } - } - - @include media-breakpoint-up(lg) { - row-gap: 0; - } - - @media (min-height: 600px) { - padding-top: 70px; - } - - & > .client-bar-item, - & > div > .client-bar-item { - display: grid; - box-sizing: border-box; - width: 100%; - grid-template-rows: 40px; - grid-template-columns: 40px; - align-items: center; - justify-content: center; - - @include media-breakpoint-up(lg) { - grid-template-rows: 24px; - grid-template-columns: 24px 1fr; - padding: 0 10px 0 32px; - height: 58px; - column-gap: 18px; - justify-items: start; - align-items: center; - justify-content: start; - align-content: center; - } - - & > svg, - & > .icon-wrapper { - margin-bottom: 20px; - grid-column: 1; - grid-row: 1; - width: 40px; - height: 40px; - - @include media-breakpoint-up(lg) { - display: flex; - width: 24px; - height: 24px; - margin-bottom: 0; - } - } - - & > p { - grid-row: 1; - grid-column: 2; - width: 100%; - max-width: 100%; - text-align: left; - user-select: none; - - @include text-overflow-dots; - @include typography(app-side-bar); - - color: var(--text-body-tertiary); - - display: none; - - @include media-breakpoint-up(lg) { - display: block; - } - } - - & > .instance-shorted { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - position: relative; - width: 40px; - height: 40px; - background-color: var(--surface-main-primary); - grid-row: 1; - grid-column: 1; - border-radius: 25%; - - @include media-breakpoint-up(lg) { - display: none; - } - - & > p { - @include typography(app-side-bar); - text-transform: uppercase; - color: var(--text-button-secondary); - } - - & > .connection-icon { - position: absolute; - right: -1px; - top: -2px; - } - } - - & > .connection-icon { - display: none; - - @include media-breakpoint-up(lg) { - display: block; - } - } - - .connection-icon { - path { - stroke: var(--surface-important); - } - } - - &.active { - & > p { - color: var(--text-body-primary); - } - } - - &.connected { - .connection-icon { - path { - stroke: var(--surface-positive-primary); - } - } - } - - &.clickable { - cursor: pointer; - } - - &:not(.active) { - &:hover { - & > p { - color: var(--text-body-primary); - } - } - } - } - - #instances-nav-label { - display: none; - - @include media-breakpoint-up(lg) { - display: grid; - } - } - - #settings-nav-item { - // margin-top: auto; - } - - #add-instance { - @include media-breakpoint-down(lg) { - display: grid; - grid-template-rows: 40px; - grid-template-columns: 40px; - align-items: center; - justify-content: center; - padding: 0; - } - - & > .icon-wrapper { - display: flex; - - svg { - width: 15px; - height: 15px; - } - } - - & > p { - display: none; - - @include media-breakpoint-up(lg) { - display: block; - } - } - } - } -} - -.client-bar-active-item-bar { - width: 2px; - height: 58px; - display: block; - background-color: var(--surface-main-primary); - content: ' '; - z-index: 3; -} - -#footer-application-info { - width: 100%; - padding-top: 20px; - padding-bottom: 20px; - - & > p { - @include typography(app-copyright); - color: var(--text-body-tertiary); - text-align: center; - - @include media-breakpoint-down(lg) { - padding-left: 5px; - padding-right: 5px; - } - - & > a { - color: inherit; - cursor: pointer; - } - } -} - -.client-bar-bottom-menu-container { - display: flex; - flex-direction: column; - width: 100%; - margin-top: auto; -} diff --git a/src/pages/client/components/MfaModalProvider.tsx b/src/pages/client/components/MfaModalProvider.tsx deleted file mode 100644 index 624f535f0..000000000 --- a/src/pages/client/components/MfaModalProvider.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { listen, type UnlistenFn } from '@tauri-apps/api/event'; -import { type PropsWithChildren, useEffect } from 'react'; -import { isPresent } from '../../../shared/defguard-ui/utils/isPresent'; -import { MFAModal } from '../pages/ClientInstancePage/components/LocationsList/modals/MFAModal/MFAModal'; -import { useMFAModal } from '../pages/ClientInstancePage/components/LocationsList/modals/MFAModal/useMFAModal'; -import { ClientConnectionType, type CommonWireguardFields, TauriEventKey } from '../types'; - -type Props = PropsWithChildren; - -export const MfaModalProvider = ({ children }: Props) => { - const openMFAModal = useMFAModal((state) => state.open); - // listen for Rust backend requesting MFA - - useEffect(() => { - let unlisten: UnlistenFn; - - (async () => { - unlisten = await listen( - TauriEventKey.MFA_TRIGGER, - ({ payload: location }) => { - if (isPresent(location)) { - location.connection_type = ClientConnectionType.LOCATION; - openMFAModal(location); - } - }, - ); - })(); - - return () => { - unlisten?.(); - }; - }, [openMFAModal]); - - return ( - <> - {children} - - - ); -}; diff --git a/src/pages/client/components/modals/DeadConDroppedModal/DeadConDroppedModal.tsx b/src/pages/client/components/modals/DeadConDroppedModal/DeadConDroppedModal.tsx deleted file mode 100644 index 6a488f80b..000000000 --- a/src/pages/client/components/modals/DeadConDroppedModal/DeadConDroppedModal.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import './style.scss'; - -import { useMemo } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { Button } from '../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { ModalWithTitle } from '../../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import { ClientConnectionType } from '../../../types'; -import { useDeadConDroppedModal } from './store'; - -export const DeadConDroppedModal = () => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.modals.deadConDropped; - const isOpen = useDeadConDroppedModal((s) => s.visible); - const payload = useDeadConDroppedModal((s) => s.payload); - const [close, reset] = useDeadConDroppedModal((s) => [s.close, s.reset], shallow); - - return ( - - - - ); -}; - -const ModalContent = () => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.modals.deadConDropped; - const payload = useDeadConDroppedModal((s) => s.payload); - const close = useDeadConDroppedModal((s) => s.close, shallow); - - const typeString = useMemo(() => { - switch (payload?.con_type) { - case ClientConnectionType.LOCATION: - return localLL.location(); - case ClientConnectionType.TUNNEL: - return localLL.tunnel(); - default: - return ''; - } - }, [localLL, payload?.con_type]); - - const message = useMemo(() => { - if (payload) { - return localLL.message({ - conType: typeString, - name: payload.name, - time: payload.peer_alive_period, - }); - } - }, [localLL, payload, typeString]); - - if (!payload) return null; - return ( - <> -
    -

    {message}

    -
    -
    -
    - - ); -}; diff --git a/src/pages/client/components/modals/DeadConDroppedModal/store.tsx b/src/pages/client/components/modals/DeadConDroppedModal/store.tsx deleted file mode 100644 index f794d8511..000000000 --- a/src/pages/client/components/modals/DeadConDroppedModal/store.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { DeadConDroppedPayload } from '../../../types'; - -const defaultValues: StoreValues = { - visible: false, - payload: undefined, -}; - -export const useDeadConDroppedModal = createWithEqualityFn( - (set) => ({ - ...defaultValues, - open: (val) => set({ visible: true, payload: val }), - close: () => set({ visible: false }), - reset: () => set(defaultValues), - }), - Object.is, -); - -type Store = StoreMethods & StoreValues; - -type StoreMethods = { - open: (payload: DeadConDroppedPayload) => void; - close: () => void; - reset: () => void; -}; - -type StoreValues = { - visible: boolean; - payload?: DeadConDroppedPayload; -}; diff --git a/src/pages/client/components/modals/DeadConDroppedModal/style.scss b/src/pages/client/components/modals/DeadConDroppedModal/style.scss deleted file mode 100644 index 310c3c4e3..000000000 --- a/src/pages/client/components/modals/DeadConDroppedModal/style.scss +++ /dev/null @@ -1,32 +0,0 @@ -#dead-con-dropped-modal { - .content { - padding: 20px; - - @include media-breakpoint-up(lg) { - padding: 20px 30px 40px; - } - - & > .message { - min-height: 100px; - - p { - @include typography(app-input); - color: var(--text-body-primary); - padding-bottom: 30px; - } - } - - .controls { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - - .btn { - height: 50px; - width: 100%; - max-width: 280px; - } - } - } -} diff --git a/src/pages/client/hooks/useClientFlags.tsx b/src/pages/client/hooks/useClientFlags.tsx deleted file mode 100644 index 0b92a1969..000000000 --- a/src/pages/client/hooks/useClientFlags.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { createJSONStorage, persist } from 'zustand/middleware'; -import { createWithEqualityFn } from 'zustand/traditional'; - -const defaults: StoreValues = { - firstStart: true, -}; - -/*Flags that are persisted via localstorage and are not used by rust backend*/ -export const useClientFlags = createWithEqualityFn()( - persist( - (set) => ({ - ...defaults, - setValues: (vals) => set({ ...vals }), - }), - { - name: 'client-flags', - version: 1, - storage: createJSONStorage(() => localStorage), - }, - ), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - // Is user launching app first time ? - firstStart: boolean; -}; - -type StoreMethods = { - setValues: (values: Partial) => void; -}; diff --git a/src/pages/client/hooks/useClientStore.tsx b/src/pages/client/hooks/useClientStore.tsx deleted file mode 100644 index fca2b30f7..000000000 --- a/src/pages/client/hooks/useClientStore.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import { isUndefined, pickBy } from 'lodash-es'; -import { createJSONStorage, persist } from 'zustand/middleware'; -import { createWithEqualityFn } from 'zustand/traditional'; - -import { clientApi } from '../clientAPI/clientApi'; -import type { AppConfig, ClientView, PlatformInfo } from '../clientAPI/types'; -import { - ClientConnectionType, - type CommonWireguardFields, - type DefguardInstance, - type SelectedInstance, -} from '../types'; - -const { getInstances, setAppConfig } = clientApi; - -const persistedKeys: Array = [ - 'selectedInstance', - 'selectedLocation', - 'selectedView', -]; - -// eslint-disable-next-line -const defaultValues: StoreValues = { - instances: [], - tunnels: [], - selectedInstance: undefined, - selectedLocation: undefined, - statsFilter: 1, - listChecked: false, - selectedView: 'grid', - // application config stored in app data json file, ONLY interact with it via store methods. - appConfig: { - log_level: 'INFO', - theme: 'light', - check_for_updates: true, - peer_alive_period: 300, - mtu: 0, - }, - platformInfo: { - client_version: '', - platform_info: '', - }, -}; - -export const useClientStore = createWithEqualityFn()( - persist( - (set, get) => ({ - ...defaultValues, - setState: (values) => set({ ...values }), - setInstances: (values) => { - if (isUndefined(get().selectedInstance)) { - return set({ - instances: values, - selectedInstance: { - id: values[0]?.id, - type: ClientConnectionType.LOCATION, - }, - }); - } - return set({ instances: values }); - }, - setTunnels: (values) => { - if (isUndefined(get().selectedInstance)) { - return set({ - tunnels: values, - selectedInstance: { id: values[0]?.id, type: ClientConnectionType.TUNNEL }, - }); - } - return set({ tunnels: values }); - }, - setListChecked: async (values: boolean) => { - return set({ listChecked: values }); - }, - updateInstances: async () => { - const res = await getInstances(); - let selected = get().selectedInstance; - // check if currently selected instances is in updated instances - if (!isUndefined(selected) && res.length && selected.id) { - if (!res.map((i) => i.id).includes(selected.id)) { - selected = { id: res[0].id, type: ClientConnectionType.LOCATION }; - } - } - if (isUndefined(selected) && res.length) { - selected = { id: res[0].id, type: ClientConnectionType.LOCATION }; - } - set({ instances: res, selectedInstance: selected }); - }, - updateAppConfig: async (data) => { - // don't emit event bcs this updates store anyway - const newConfig = await setAppConfig(data, false); - set({ appConfig: newConfig }); - return newConfig; - }, - }), - { - name: 'client-store', - storage: createJSONStorage(() => localStorage), - partialize: (store) => pickBy(store, persistedKeys), - version: 1, - }, - ), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - instances: DefguardInstance[]; - tunnels: CommonWireguardFields[]; - statsFilter: number; - selectedInstance?: SelectedInstance; - selectedLocation?: number; - // launch carousel page if there is no instances or/and tunnels for the first time after launching application - listChecked: boolean; - selectedView: ClientView; - appConfig: AppConfig; - platformInfo: PlatformInfo; -}; - -type StoreMethods = { - setState: (values: Partial) => void; - setInstances: (instances: DefguardInstance[]) => void; - setTunnels: (tunnels: CommonWireguardFields[]) => void; - setListChecked: (listChecked: boolean) => void; - updateInstances: () => Promise; - updateAppConfig: (data: Partial) => Promise; -}; diff --git a/src/pages/client/pages/CarouselPage/CarouselPage.tsx b/src/pages/client/pages/CarouselPage/CarouselPage.tsx deleted file mode 100644 index c98a6ecca..000000000 --- a/src/pages/client/pages/CarouselPage/CarouselPage.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import './style.scss'; - -import { useEffect } from 'react'; - -import { useClientFlags } from '../../hooks/useClientFlags'; -import { - InstancesSlide, - SecuritySlide, - SupportSlide, - TwoFaSlide, - WelcomeCardSlide, -} from './cards/CarouselCards'; -import { CardCarousel } from './components/CardCarousel/CardCarousel'; -import type { CarouselItem } from './components/CardCarousel/types'; - -const slides: CarouselItem[] = [ - { - key: 'welcome', - element: , - }, - { - key: 'twofa', - element: , - }, - { - element: , - key: 'security', - }, - { - key: 'instances', - element: , - }, - { - key: 'support', - element: , - }, -]; - -export const CarouselPage = () => { - const setClientFlags = useClientFlags((state) => state.setValues); - - useEffect(() => { - setClientFlags({ firstStart: false }); - // eslint-next-line-ignore - }, [setClientFlags]); - - return ( - - ); -}; diff --git a/src/pages/client/pages/CarouselPage/cards/CarouselCards.tsx b/src/pages/client/pages/CarouselPage/cards/CarouselCards.tsx deleted file mode 100644 index e3f6f97bb..000000000 --- a/src/pages/client/pages/CarouselPage/cards/CarouselCards.tsx +++ /dev/null @@ -1,236 +0,0 @@ -import './style.scss'; - -import Markdown from 'react-markdown'; -import { useNavigate } from 'react-router-dom'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { IconDefguard } from '../../../../../shared/components/icons/IconDefguard/IconDeguard'; -import SvgDefguardLogoText from '../../../../../shared/components/svg/DefguardLogoText'; -import { GitHubIcon } from '../../../../../shared/components/svg/GithubIcon'; -import { discussionsUrl, githubUrl, mastodonUrl } from '../../../../../shared/constants'; -import { Button } from '../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { Card } from '../../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { defguardGithubLink } from '../../../../../shared/links'; -import { routes } from '../../../../../shared/routes'; -import { clientApi } from '../../../clientAPI/clientApi'; -import twoFactorImage from './assets/slide_2fa.png'; -import instancesImage from './assets/slide_instances.png'; -import securityImage from './assets/slide_security.png'; - -const { openLink } = clientApi; - -export const WelcomeCardSlide = () => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.carouselPage.slides.welcome; - const navigate = useNavigate(); - - return ( - -

    - {localLL.title()} -

    -
    -
    navigate(routes.client.addInstance, { replace: true })} - > -

    {localLL.instance.title()}

    -

    {localLL.instance.subtitle()}

    -
    - - -
    -
    -
    navigate(routes.client.addTunnel, { replace: true })} - > -

    {localLL.tunnel.title()}

    -

    {localLL.tunnel.subtitle()}

    - -
    -
    -
    - ); -}; - -export const TwoFaSlide = () => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.carouselPage.slides.twoFa; - return ( - -

    - {localLL.title()} -

    -
    - -
    - {localLL.sideText()} -
    -
    - -
    - ); -}; - -const GithubButton = () => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.carouselPage.slides.shared; - return ( - - ))} -
    - ); -}; diff --git a/src/pages/client/pages/CarouselPage/components/CardCarousel/components/CarouselControl/style.scss b/src/pages/client/pages/CarouselPage/components/CardCarousel/components/CarouselControl/style.scss deleted file mode 100644 index 70b1163f2..000000000 --- a/src/pages/client/pages/CarouselPage/components/CardCarousel/components/CarouselControl/style.scss +++ /dev/null @@ -1,45 +0,0 @@ -.carousel-control { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - width: 100%; - height: 40px; - gap: 0; - - & > button { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - width: 40px; - height: 100%; - position: relative; - overflow: hidden; - cursor: pointer; - border: 0px solid transparent; - background: none; - - .dot { - display: block; - content: ' '; - height: 14px; - width: 14px; - background-color: var(--surface-scroll-inactive); - transition-property: background-color; - transition-timing-function: ease-in-out; - transition-duration: 50ms; - border-radius: 50%; - - &.active { - background-color: var(--surface-main-primary); - } - } - - &:hover { - .dot { - background-color: var(--surface-main-primary); - } - } - } -} diff --git a/src/pages/client/pages/CarouselPage/components/CardCarousel/style.scss b/src/pages/client/pages/CarouselPage/components/CardCarousel/style.scss deleted file mode 100644 index fe4c11292..000000000 --- a/src/pages/client/pages/CarouselPage/components/CardCarousel/style.scss +++ /dev/null @@ -1,28 +0,0 @@ -.card-carousel { - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - row-gap: 30px; - min-width: 900px; - overflow-x: auto; - - & > .card-wrapper { - display: block; - width: 100%; - max-width: 1200px; - - & > .card { - width: 100%; - max-width: inherit; - min-height: 720px; - overflow: hidden; - box-sizing: border-box; - padding: 60px; - display: flex; - flex-flow: column; - align-items: center; - justify-content: flex-start; - } - } -} diff --git a/src/pages/client/pages/CarouselPage/components/CardCarousel/types.ts b/src/pages/client/pages/CarouselPage/components/CardCarousel/types.ts deleted file mode 100644 index bde2adf38..000000000 --- a/src/pages/client/pages/CarouselPage/components/CardCarousel/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { ReactNode } from 'react'; - -export type CarouselItem = { - key: string; - element: ReactNode; -}; diff --git a/src/pages/client/pages/CarouselPage/style.scss b/src/pages/client/pages/CarouselPage/style.scss deleted file mode 100644 index 5c38f6f49..000000000 --- a/src/pages/client/pages/CarouselPage/style.scss +++ /dev/null @@ -1,222 +0,0 @@ -#carousel-page { - .card { - box-sizing: border-box; - padding: 60px; - - .github { - height: 60px; - width: 270px; - - p, - span { - @include typography(app-button-l); - text-decoration: none; - } - } - - a { - text-decoration: underline; - cursor: pointer; - } - - .more { - @include typography(app-body-1); - } - - ul { - margin: 0; - } - - h2 { - font-family: 'Poppins'; - font-size: 48px; - font-style: normal; - color: var(--text-body-primary); - line-height: normal; - text-align: center; - width: 100%; - font-weight: 400; - min-height: 72px; - } - - strong, - b { - font-weight: 700; - } - - .row { - width: 100%; - display: grid; - grid-template-rows: auto auto; - grid-template-columns: 1fr; - align-items: center; - justify-items: center; - row-gap: 20px; - column-gap: 10px; - - @include media-breakpoint-up(xxl) { - grid-template-rows: auto; - grid-template-columns: 1fr 1fr; - column-gap: 40px; - row-gap: 0; - } - - & > .image-box { - width: 100%; - height: 301px; - border: none; - border-radius: 15px; - box-shadow: var(--box-shadow); - background-size: cover; - } - - &.between { - @include media-breakpoint-up(xl) { - grid-template-columns: auto auto; - grid-template-rows: 1fr; - justify-items: space-between; - } - } - } - - .text { - display: flex; - flex-flow: column; - align-items: flex-start; - justify-content: flex-start; - row-gap: 20px; - max-width: 650px; - - @include typography(app-welcome-2); - text-align: center; - - @include media-breakpoint-up(xl) { - text-align: left; - } - - strong, - b { - font-weight: 700; - } - - &.centered { - justify-content: center; - } - } - } - - #welcome-slide { - h2 { - padding-bottom: 40px; - display: block; - } - - & > .row { - padding: 0 60px; - } - - .wireguard-logo { - path { - fill: var(--text-body-primary); - } - } - - .logo-container { - width: 100%; - height: 85px; - display: flex; - align-items: center; - justify-content: center; - flex-flow: row nowrap; - column-gap: 13px; - - :nth-child(1) { - width: 40px; - height: 100%; - } - - :nth-child(2) { - width: 159px; - height: 46px; - - path { - fill: var(--text-body-primary); - } - } - } - - .inner-card { - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - background-color: var(--surface-frame-bg); - border-radius: 15px; - box-shadow: var(--box-shadow); - min-height: 415px; - box-sizing: border-box; - padding: 64px; - width: 420px; - overflow: hidden; - user-select: none; - - h3 { - @include typography(app-body-1); - margin-bottom: 20px; - } - - p { - @include typography(welcome-h2); - text-align: center; - color: var(--text-body-tertiary); - margin-bottom: 45px; - max-width: 100%; - } - } - } - - #factor-slide, - #security-slide, - #instances-slide, - #support-slide, - #welcome-slide { - min-height: 750px; - } - - #factor-slide, - #security-slide, - #instances-slide, - #support-slide { - justify-content: space-between; - row-gap: 25px; - } - - #support-slide { - .text { - max-width: 600px; - user-select: text; - - p { - margin-bottom: 20px; - } - } - - .logo-container { - height: 118px; - width: 100%; - display: flex; - flex-flow: row nowrap; - column-gap: 18px; - - :nth-child(1) { - height: 100%; - } - - :nth-child(2) { - path { - fill: var(--text-body-primary); - } - } - } - } -} diff --git a/src/pages/client/pages/ClientAddInstancePage/ClientAddInstnacePage.tsx b/src/pages/client/pages/ClientAddInstancePage/ClientAddInstnacePage.tsx deleted file mode 100644 index e42d6f0f4..000000000 --- a/src/pages/client/pages/ClientAddInstancePage/ClientAddInstnacePage.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import './style.scss'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { AddInstanceFormCard } from './components/AddInstanceFormCard/AddInstanceFormCard'; -import { AddInstanceGuide } from './components/AddInstanceGuide/AddInstanceGuide'; - -export const ClientAddInstancePage = () => { - const { LL } = useI18nContext(); - return ( -
    -
    -

    {LL.pages.client.pages.addInstancePage.title()}

    -
    -
    - - -
    -
    - ); -}; diff --git a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/AddInstanceFormCard.tsx b/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/AddInstanceFormCard.tsx deleted file mode 100644 index 48e4f19f9..000000000 --- a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/AddInstanceFormCard.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { Card } from '../../../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { AddInstanceFormStep } from '../../hooks/types'; -import { useAddInstanceStore } from '../../hooks/useAddInstanceStore'; -import { AddInstanceDeviceForm } from './components/AddInstanceDeviceForm/AddInstanceDeviceForm'; -import { AddInstanceInitForm } from './components/AddInstanceInitForm/AddInstanceInitForm'; - -export const AddInstanceFormCard = () => { - const currentStep = useAddInstanceStore((s) => s.step); - return ( - - {currentStep === AddInstanceFormStep.INIT && } - {currentStep === AddInstanceFormStep.DEVICE && } - - ); -}; diff --git a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceDeviceForm/AddInstanceDeviceForm.tsx b/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceDeviceForm/AddInstanceDeviceForm.tsx deleted file mode 100644 index e91f4c35e..000000000 --- a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceDeviceForm/AddInstanceDeviceForm.tsx +++ /dev/null @@ -1,204 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useQuery } from '@tanstack/react-query'; -import { fetch } from '@tauri-apps/plugin-http'; -import { error } from '@tauri-apps/plugin-log'; -import { hostname } from '@tauri-apps/plugin-os'; -import { useCallback, useMemo, useState } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { useNavigate } from 'react-router-dom'; -import { z } from 'zod'; -import { useI18nContext } from '../../../../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Button } from '../../../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { useToaster } from '../../../../../../../../shared/defguard-ui/hooks/toasts/useToaster'; -import { isPresent } from '../../../../../../../../shared/defguard-ui/utils/isPresent'; -import type { - CreateDeviceRequest, - CreateDeviceResponse, -} from '../../../../../../../../shared/hooks/api/types'; -import { routes } from '../../../../../../../../shared/routes'; -import { errorDetail } from '../../../../../../../../shared/utils/errorDetail'; -import { generateWGKeys } from '../../../../../../../../shared/utils/generateWGKeys'; -import { clientApi } from '../../../../../../clientAPI/clientApi'; -import { useClientStore } from '../../../../../../hooks/useClientStore'; -import { ClientConnectionType, type SelectedInstance } from '../../../../../../types'; -import { useAddInstanceStore } from '../../../../hooks/useAddInstanceStore'; -import type { AddInstanceInitResponse } from '../../types'; - -const { getInstances, saveConfig } = clientApi; - -type ErrorData = { - error: string; -}; - -export const AddInstanceDeviceForm = () => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.addInstancePage.forms.device; - const toaster = useToaster(); - const setClientStore = useClientStore((state) => state.setState); - const platformInfo = useClientStore((state) => state.platformInfo); - const navigate = useNavigate(); - const [isLoading, setIsLoading] = useState(false); - const response = useAddInstanceStore((s) => s.response as AddInstanceInitResponse); - const resetAddInstanceStore = useAddInstanceStore((s) => s.reset); - - const { url: proxyUrl, cookie, device_names } = response; - - const { data: instancesCount } = useQuery({ - queryFn: getInstances, - queryKey: ['instance', 'count'], - select: (data) => data.length, - }); - - const schema = useMemo( - () => - z.object({ - name: z - .string() - .trim() - .min(1, LL.form.errors.required()) - .refine((val) => !device_names.includes(val), { - message: LL.form.errors.duplicatedName(), - }), - }), - [LL.form.errors, device_names], - ); - - type FormFields = z.infer; - - const defaultValues = useCallback(async (): Promise => { - const name = await hostname(); - return { - name: name ?? '', - }; - }, []); - - const { control, handleSubmit } = useForm({ - defaultValues: defaultValues, - resolver: zodResolver(schema), - mode: 'all', - }); - - const handleValidSubmit: SubmitHandler = async (values) => { - if (!proxyUrl) return; - setIsLoading(true); - const { publicKey, privateKey } = generateWGKeys(); - const data: CreateDeviceRequest = { - name: values.name, - pubkey: publicKey, - }; - - const headers = { - 'Content-Type': 'application/json', - Cookie: cookie, - CLIENT_VERSION_HEADER: platformInfo.client_version, - CLIENT_PLATFORM_HEADER: platformInfo.platform_info, - }; - try { - await fetch(`${proxyUrl}/enrollment/create_device`, { - headers, - body: JSON.stringify(data), - method: 'POST', - }).then(async (r) => { - if (!r.ok) { - setIsLoading(false); - const data = (await r.json()) as ErrorData; - const details = `${data?.error ? `${data.error}, ` : ''}`; - error( - `Failed to create device. Check enrollment and Defguard logs, details: ${details}. Error status code: ${r.status}`, - ); - throw Error(`Failed to create device, details: ${details} `); - } - const deviceResp = (await r.json()) as CreateDeviceResponse; - saveConfig({ - privateKey: privateKey, - response: deviceResp, - }) - .then(async (res) => { - setIsLoading(false); - toaster.success(localLL.messages.addSuccess()); - const instances = await getInstances(); - const selectedInstance: SelectedInstance = { - id: res.instance.id, - type: ClientConnectionType.LOCATION, - }; - setClientStore({ selectedInstance, instances }); - setTimeout(() => { - resetAddInstanceStore(); - }, 250); - navigate(routes.client.instancePage, { replace: true }); - }) - .catch((e) => { - const detail = errorDetail(e); - error(`Failed to save device config: ${detail}`); - toaster.error( - LL.common.messages.errorWithMessage({ - message: String(e), - }), - ); - setIsLoading(false); - }); - }); - } catch (e) { - setIsLoading(false); - const detail = errorDetail(e); - error(`Device form submit failed for proxy ${proxyUrl}: ${detail}`); - - if (typeof e === 'string') { - if (e.includes('Network Error')) { - toaster.error(LL.common.messages.networkError()); - return; - } - toaster.error( - LL.common.messages.errorWithMessage({ - message: String(e), - }), - ); - } else { - toaster.error( - LL.common.messages.errorWithMessage({ - message: (e as Error).message, - }), - ); - } - } - }; - - return ( - <> -

    {localLL.title()}

    -
    - -
    -
    - - - ); -}; diff --git a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceDeviceForm/style.scss b/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceDeviceForm/style.scss deleted file mode 100644 index fe83d8a73..000000000 --- a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceDeviceForm/style.scss +++ /dev/null @@ -1,4 +0,0 @@ -.controls { - display: flex; - gap: 10px; -} diff --git a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceInitForm/AddInstanceInitForm.tsx b/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceInitForm/AddInstanceInitForm.tsx deleted file mode 100644 index 98ebf7917..000000000 --- a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceInitForm/AddInstanceInitForm.tsx +++ /dev/null @@ -1,290 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { invoke } from '@tauri-apps/api/core'; -import { fetch } from '@tauri-apps/plugin-http'; -import { debug, error, info } from '@tauri-apps/plugin-log'; -import dayjs from 'dayjs'; -import { useMemo, useState } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { useNavigate } from 'react-router-dom'; -import { z } from 'zod'; -import { useI18nContext } from '../../../../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Button } from '../../../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { useToaster } from '../../../../../../../../shared/defguard-ui/hooks/toasts/useToaster'; -import type { - CreateDeviceResponse, - EnrollmentError, - EnrollmentStartResponse, -} from '../../../../../../../../shared/hooks/api/types'; -import { routes } from '../../../../../../../../shared/routes'; -import { errorDetail } from '../../../../../../../../shared/utils/errorDetail'; -import { useEnrollmentStore } from '../../../../../../../enrollment/hooks/store/useEnrollmentStore'; -import { clientApi } from '../../../../../../clientAPI/clientApi'; -import { useClientStore } from '../../../../../../hooks/useClientStore'; -import { ClientConnectionType, type SelectedInstance } from '../../../../../../types'; -import { AddInstanceFormStep } from '../../../../hooks/types'; -import { useAddInstanceStore } from '../../../../hooks/useAddInstanceStore'; - -export const AddInstanceInitForm = () => { - const setPageState = useAddInstanceStore((s) => s.setState); - const toaster = useToaster(); - const navigate = useNavigate(); - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.addInstancePage.forms.initInstance; - const [isLoading, setIsLoading] = useState(false); - const initEnrollment = useEnrollmentStore((state) => state.init); - const setClientState = useClientStore((state) => state.setState); - - const schema = useMemo( - () => - z.object({ - url: z - .string() - .trim() - .min(1, LL.form.errors.required()) - .url(LL.form.errors.invalid()), - token: z.string().trim().min(1, LL.form.errors.required()), - }), - [LL.form.errors], - ); - - type FormFields = z.infer; - - const { handleSubmit, control } = useForm({ - resolver: zodResolver(schema), - defaultValues: { - url: '', - token: '', - }, - mode: 'all', - }); - - const handleValidSubmit: SubmitHandler = async (values) => { - const url = () => { - const endpoint = '/api/v1/enrollment/start'; - let base: string; - if (values.url[values.url.length - 1] === '/') { - base = values.url.slice(0, -1); - } else { - base = values.url; - } - return base + endpoint; - }; - - const endpointUrl = url(); - - const headers: Record = { - 'Content-Type': 'application/json', - }; - - const data = { - token: values.token, - }; - - setIsLoading(true); - fetch(endpointUrl, { - method: 'POST', - headers, - body: JSON.stringify(data), - }) - .then(async (res: Response) => { - if (!res.ok) { - setIsLoading(false); - error( - `Enrollment start returned non-OK status ${res.status} for URL: ${endpointUrl}`, - ); - const errorMessage = ((await res.json()) as EnrollmentError).error; - - switch (errorMessage) { - case 'token expired': { - throw Error(LL.common.messages.tokenExpired()); - } - default: { - throw Error( - LL.common.messages.errorWithMessage({ - message: errorMessage, - }), - ); - } - } - } - // There may be other set-cookies, set by e.g. a proxy - // Get only the defguard_proxy cookie - const authCookie = res.headers - .getSetCookie() - .find((cookie) => cookie.startsWith('defguard_proxy=')); - if (!authCookie) { - setIsLoading(false); - error( - `Enrollment start response for ${endpointUrl} is missing defguard_proxy set-cookie header`, - ); - throw Error( - LL.common.messages.errorWithMessage({ - message: LL.common.messages.noCookie(), - }), - ); - } - debug('Response received with status OK'); - const startResponse = (await res.json()) as EnrollmentStartResponse; - // get client registered instances - const clientInstances = await clientApi.getInstances(); - const instance = clientInstances.find( - (i) => i.uuid === startResponse.instance.id, - ); - let proxy_api_url = values.url; - if (proxy_api_url[proxy_api_url.length - 1] === '/') { - proxy_api_url = proxy_api_url.slice(0, -1); - } - proxy_api_url = `${proxy_api_url}/api/v1`; - setIsLoading(false); - - if (instance) { - debug('Instance already exists, fetching update'); - // update already registered instance instead - headers.Cookie = authCookie; - fetch(`${proxy_api_url}/enrollment/network_info`, { - method: 'POST', - headers, - body: JSON.stringify({ - pubkey: instance.pubkey, - }), - }) - .then(async (res) => { - if (!res.ok) { - const detail = `network_info returned status ${res.status} for instance ${instance.uuid}`; - error(`Failed to fetch network info: ${detail}`); - toaster.error( - LL.common.messages.errorWithMessage({ - message: detail, - }), - ); - return; - } - invoke('update_instance', { - instanceId: instance.id, - response: (await res.json()) as CreateDeviceResponse, - }) - .then(() => { - info('Configured device'); - toaster.success( - LL.pages.enrollment.steps.deviceSetup.desktopSetup.messages.deviceConfigured(), - ); - const _selectedInstance: SelectedInstance = { - id: instance.id, - type: ClientConnectionType.LOCATION, - }; - setClientState({ - selectedInstance: _selectedInstance, - }); - navigate(routes.client.base, { replace: true }); - }) - .catch((e) => { - const detail = errorDetail(e); - error(`Failed to save config during instance add: ${detail}`); - toaster.error( - LL.common.messages.errorWithMessage({ - message: String(e), - }), - ); - }); - }) - .catch((e) => { - const detail = errorDetail(e); - error( - `Failed to reach network_info endpoint for instance ${instance.uuid}: ${detail}`, - ); - toaster.error( - LL.common.messages.errorWithMessage({ - message: String(e), - }), - ); - }); - } - // register new instance - // is user in need of full enrollment ? - if (startResponse.user.enrolled) { - //no, only create new device for desktop client - debug('User already active, adding device only.'); - setPageState({ - step: AddInstanceFormStep.DEVICE, - response: { - url: proxy_api_url, - cookie: authCookie, - device_names: startResponse.user.device_names, - }, - }); - } else { - // yes, enroll the user - debug('User is not active. Starting enrollment.'); - const sessionEnd = dayjs - .unix(startResponse.deadline_timestamp) - .utc() - .local() - .format(); - const sessionStart = dayjs().local().format(); - initEnrollment({ - userInfo: startResponse.user, - adminInfo: startResponse.admin, - endContent: startResponse.final_page_content, - proxy_url: proxy_api_url, - enrollmentSettings: startResponse.settings, - sessionEnd, - sessionStart, - cookie: authCookie, - }); - navigate(routes.enrollment, { replace: true }); - } - }) - .catch((e) => { - setIsLoading(false); - const detail = errorDetail(e); - error(`Failed to initialize instance: ${detail}`); - if (typeof e === 'string') { - if (e.includes('Network Error')) { - toaster.error(LL.common.messages.networkError()); - return; - } - toaster.error( - LL.common.messages.errorWithMessage({ - message: String(e), - }), - ); - } else { - toaster.error( - LL.common.messages.errorWithMessage({ - message: (e as Error).message, - }), - ); - } - }); - }; - - return ( - <> -

    {localLL.title()}

    -
    - - -
    -
    - - - ); -}; diff --git a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceInitForm/style.scss b/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceInitForm/style.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/types.ts b/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/types.ts deleted file mode 100644 index d078e3168..000000000 --- a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type AddInstanceInitResponse = { - url: string; - cookie: string; - device_names: string[]; -}; diff --git a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceGuide/AddInstanceGuide.tsx b/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceGuide/AddInstanceGuide.tsx deleted file mode 100644 index d029378b3..000000000 --- a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceGuide/AddInstanceGuide.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import './style.scss'; - -import parse from 'html-react-parser'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import SvgVpnLocation from '../../../../../../shared/components/svg/VpnLocation'; -import { Card } from '../../../../../../shared/defguard-ui/components/Layout/Card/Card'; - -export const AddInstanceGuide = () => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.addInstancePage.guide; - return ( -
    -
    -

    {localLL.title()}

    -

    {localLL.subTitle()}

    -
    - - -

    {localLL.card.title()}

    - {parse(localLL.card.content())} -
    -
    - ); -}; diff --git a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceGuide/style.scss b/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceGuide/style.scss deleted file mode 100644 index 294fffd03..000000000 --- a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceGuide/style.scss +++ /dev/null @@ -1,43 +0,0 @@ -#add-instance-guide { - display: flex; - flex-flow: column; - align-items: center; - justify-content: flex-start; - row-gap: 50px; - - p { - @include typography(app-body-2); - - color: var(--text-body-primary); - } - - #instance-guide { - * { - text-align: center; - width: 100%; - } - - h2 { - padding-bottom: 20px; - } - - p { - max-width: 500px; - } - } - - #token-guide { - display: flex; - flex-flow: column; - align-items: flex-start; - justify-content: flex-start; - row-gap: 20px; - box-sizing: border-box; - padding: 20px 25px; - - & > div { - box-sizing: border-box; - padding-left: 20px; - } - } -} diff --git a/src/pages/client/pages/ClientAddInstancePage/hooks/types.ts b/src/pages/client/pages/ClientAddInstancePage/hooks/types.ts deleted file mode 100644 index 29bd4099d..000000000 --- a/src/pages/client/pages/ClientAddInstancePage/hooks/types.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum AddInstanceFormStep { - INIT, - DEVICE, -} diff --git a/src/pages/client/pages/ClientAddInstancePage/hooks/useAddInstanceStore.tsx b/src/pages/client/pages/ClientAddInstancePage/hooks/useAddInstanceStore.tsx deleted file mode 100644 index 52e7a68ff..000000000 --- a/src/pages/client/pages/ClientAddInstancePage/hooks/useAddInstanceStore.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; -import type { AddInstanceInitResponse } from '../components/AddInstanceFormCard/types'; -import { AddInstanceFormStep } from './types'; - -const defaults: StoreValues = { - step: AddInstanceFormStep.INIT, - response: undefined, -}; - -export const useAddInstanceStore = createWithEqualityFn((set) => ({ - ...defaults, - setState: (values) => set((old) => ({ ...old, ...values })), - reset: () => set(defaults), -})); - -type Store = StoreMethods & StoreValues; - -type StoreMethods = { - setState: (values: Partial) => void; - reset: () => void; -}; - -type StoreValues = { - step: AddInstanceFormStep; - response?: AddInstanceInitResponse; -}; diff --git a/src/pages/client/pages/ClientAddInstancePage/style.scss b/src/pages/client/pages/ClientAddInstancePage/style.scss deleted file mode 100644 index 37cc5ecbc..000000000 --- a/src/pages/client/pages/ClientAddInstancePage/style.scss +++ /dev/null @@ -1,80 +0,0 @@ -#client-add-instance-page { - h1 { - @include typography(app-title); - color: var(--text-body-primary); - } - - h2 { - @include typography(app-body-1); - color: var(--text-body-primary); - } - - form { - & > * { - width: 100%; - } - - .controls { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - - .btn { - width: 100%; - max-width: 200px; - } - } - } - - & > header { - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - padding-bottom: 15px; - - & > h1 { - text-align: left; - } - } - - & > .content { - width: 100%; - display: grid; - grid-template-columns: repeat(auto-fit, minmax(450px, 1fr)); - align-items: start; - justify-items: center; - column-gap: 25px; - row-gap: 25px; - - @include media-breakpoint-up(xl) { - column-gap: 50px; - } - - & > * { - width: 100%; - flex-grow: 1; - } - - & > .card { - box-sizing: border-box; - padding: 32px 64px; - - & > h2 { - width: 100%; - text-align: center; - padding-bottom: 42px; - } - - form > .controls { - padding-top: 42px; - - .btn { - height: 47px; - } - } - } - } -} diff --git a/src/pages/client/pages/ClientAddTunnelPage/AddTunnelGuide/AddTunnelGuide.tsx b/src/pages/client/pages/ClientAddTunnelPage/AddTunnelGuide/AddTunnelGuide.tsx deleted file mode 100644 index ff8ccd80d..000000000 --- a/src/pages/client/pages/ClientAddTunnelPage/AddTunnelGuide/AddTunnelGuide.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import './style.scss'; - -import parse from 'html-react-parser'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import SvgVpnLocation from '../../../../../shared/components/svg/VpnLocation'; -import { Card } from '../../../../../shared/defguard-ui/components/Layout/Card/Card'; - -export const AddTunnelGuide = () => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.addTunnelPage.guide; - return ( -
    -
    -

    {localLL.title()}

    - {parse(localLL.subTitle())} -
    - - -

    {localLL.card.title()}:

    - {parse(localLL.card.content())} -
    -
    - ); -}; diff --git a/src/pages/client/pages/ClientAddTunnelPage/AddTunnelGuide/style.scss b/src/pages/client/pages/ClientAddTunnelPage/AddTunnelGuide/style.scss deleted file mode 100644 index 0d352ac92..000000000 --- a/src/pages/client/pages/ClientAddTunnelPage/AddTunnelGuide/style.scss +++ /dev/null @@ -1,55 +0,0 @@ -#add-tunnel-guide { - display: flex; - flex-flow: column; - align-items: center; - justify-content: flex-start; - row-gap: 50px; - - p { - @include typography(app-body-2); - - color: var(--text-body-primary); - } - - a { - @include typography(app-body-2); - - color: var(--text-body-primary); - } - - li { - @include typography(app-body-2); - - color: var(--text-body-primary); - } - - #tunnel-guide { - * { - text-align: center; - width: 100%; - } - - h2 { - padding-bottom: 20px; - } - - p { - max-width: 500px; - } - } - - #setup-guide { - display: flex; - flex-flow: column; - align-items: flex-start; - justify-content: flex-start; - row-gap: 20px; - box-sizing: border-box; - padding: 20px 25px; - - & > div { - box-sizing: border-box; - padding-left: 20px; - } - } -} diff --git a/src/pages/client/pages/ClientAddTunnelPage/ClientAddTunnelPage.tsx b/src/pages/client/pages/ClientAddTunnelPage/ClientAddTunnelPage.tsx deleted file mode 100644 index 2d173a1a2..000000000 --- a/src/pages/client/pages/ClientAddTunnelPage/ClientAddTunnelPage.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import './style.scss'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { AddTunnelGuide } from './AddTunnelGuide/AddTunnelGuide'; -import { AddTunnelFormCard } from './components/AddTunnelFormCard/AddTunnelFormCard'; - -export const ClientAddTunnelPage = () => { - const { LL } = useI18nContext(); - return ( -
    -
    -

    {LL.pages.client.pages.addTunnelPage.title()}

    -
    -
    - - -
    -
    - ); -}; diff --git a/src/pages/client/pages/ClientAddTunnelPage/components/AddTunnelFormCard/AddTunnelFormCard.tsx b/src/pages/client/pages/ClientAddTunnelPage/components/AddTunnelFormCard/AddTunnelFormCard.tsx deleted file mode 100644 index 64bfd814d..000000000 --- a/src/pages/client/pages/ClientAddTunnelPage/components/AddTunnelFormCard/AddTunnelFormCard.tsx +++ /dev/null @@ -1,358 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { pickBy } from 'lodash-es'; -import { useEffect, useMemo, useState } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { useNavigate } from 'react-router-dom'; -import { z } from 'zod'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { ArrowSingle } from '../../../../../../shared/defguard-ui/components/icons/ArrowSingle/ArrowSingle'; -import { - ArrowSingleDirection, - ArrowSingleSize, -} from '../../../../../../shared/defguard-ui/components/icons/ArrowSingle/types'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { Card } from '../../../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { Helper } from '../../../../../../shared/defguard-ui/components/Layout/Helper/Helper'; -import { useToaster } from '../../../../../../shared/defguard-ui/hooks/toasts/useToaster'; -import { - cidrRegex, - patternValidEndpoint, - patternValidIp, - patternValidIpV6, - patternValidIpV6WithPort, - patternValidWireguardKey, -} from '../../../../../../shared/patterns'; -import { routes } from '../../../../../../shared/routes'; -import { generateWGKeys } from '../../../../../../shared/utils/generateWGKeys'; -import { validateIpOrDomainList } from '../../../../../../shared/validators/tunnel'; -import { clientApi } from '../../../../clientAPI/clientApi'; - -type FormFields = { - id: null; - name: string; - pubkey: string; - prvkey: string; - address: string; - server_pubkey: string; - preshared_key: string; - allowed_ips?: string; - endpoint: string; - dns?: string; - persistent_keep_alive: number; - route_all_traffic: boolean; - pre_up?: string; - post_up?: string; - pre_down?: string; - post_down?: string; -}; -const defaultValues: FormFields = { - id: null, - name: '', - pubkey: '', - prvkey: '', - address: '', - server_pubkey: '', - preshared_key: '', - allowed_ips: '', - endpoint: '', - dns: '', - persistent_keep_alive: 25, // Adjust as needed - route_all_traffic: false, - pre_up: '', - post_up: '', - pre_down: '', - post_down: '', -}; - -export const AddTunnelFormCard = () => { - const { LL } = useI18nContext(); - const { parseTunnelConfig, saveTunnel } = clientApi; - const toaster = useToaster(); - const navigate = useNavigate(); - - const localLL = LL.pages.client.pages.addTunnelPage.forms.initTunnel; - /* eslint-disable no-useless-escape */ - const schema = useMemo( - () => - z.object({ - id: z.null(), - name: z.string().trim().min(1, LL.form.errors.required()), - pubkey: z - .string() - .trim() - .min(1, LL.form.errors.required()) - .refine((value) => { - return patternValidWireguardKey.test(value); - }, LL.form.errors.invalid()), - prvkey: z - .string() - .trim() - .min(1, LL.form.errors.required()) - .refine((value) => { - return patternValidWireguardKey.test(value); - }, LL.form.errors.invalid()), - server_pubkey: z - .string() - .trim() - .min(1, LL.form.errors.required()) - .refine((value) => { - return patternValidWireguardKey.test(value); - }, LL.form.errors.invalid()), - preshared_key: z - .string() - .trim() - .refine((value) => { - return value === '' || patternValidWireguardKey.test(value); - }, LL.form.errors.invalid()), - address: z.string().refine((value) => { - if (value) { - const ips = value.split(',').map((ip) => ip.trim()); - return ips.every( - (ip) => patternValidIp.test(ip) || patternValidIpV6.test(ip), - ); - } - return false; - }, LL.form.errors.invalid()), - endpoint: z - .string() - .min(1, LL.form.errors.required()) - .refine((value) => { - return ( - patternValidEndpoint.test(value) || patternValidIpV6WithPort.test(value) - ); - }, LL.form.errors.invalid()), - dns: z - .string() - .refine((value) => { - if (value && value.length !== 0) { - return validateIpOrDomainList(value, ',', true); - } - return true; - }, LL.form.errors.invalid()) - .optional(), - allowed_ips: z.string().refine((value) => { - if (value) { - const ips = value.split(',').map((ip) => ip.trim()); - return ips.every((ip) => cidrRegex.test(ip)); - } - return true; - }, LL.form.errors.invalid()), - persistent_keep_alive: z.coerce.number(), - route_all_traffic: z.boolean(), - pre_up: z.string().nullable(), - post_up: z.string().nullable(), - pre_down: z.string().nullable(), - post_down: z.string().nullable(), - }), - [LL.form.errors], - ); - const handleValidSubmit: SubmitHandler = (values) => { - saveTunnel(values) - .then(() => { - navigate(routes.client.tunnelCreated, { replace: true }); - toaster.success(localLL.messages.addSuccess()); - }) - .catch(() => toaster.error(localLL.messages.addError())); - }; - const { handleSubmit, control, reset, setValue } = useForm({ - resolver: zodResolver(schema), - defaultValues, - mode: 'all', - }); - - const [generatedKeys, setGeneratedKeys] = useState(false); - - const handleConfigUpload = () => { - const input = document.createElement('input'); - input.type = 'file'; - input.multiple = false; - input.style.display = 'none'; - input.onchange = () => { - if (input.files && input.files.length === 1) { - const reader = new FileReader(); - reader.onload = () => { - if (reader.result && input.files) { - const res = reader.result; - const filename = input.files[0].name; - parseTunnelConfig(filename as string, res as string) - .then((data) => { - const fileData = data as Partial; - const trimed = pickBy( - fileData, - (value) => value !== undefined && value !== null, - ); - const parsedConfig = { ...defaultValues, ...trimed }; - reset(parsedConfig); - }) - .catch(() => toaster.error(localLL.messages.configError())); - } - }; - reader.onerror = () => { - toaster.error(localLL.messages.configError()); - }; - reader.readAsText(input.files[0]); - } - }; - input.click(); - }; - - const generateKeyPair = () => { - const { privateKey, publicKey } = generateWGKeys(); - setValue('prvkey', privateKey); - setValue('pubkey', publicKey); - setGeneratedKeys(true); - }; - - useEffect(() => { - const onPrvKeyChange = (e: Event) => { - const input = e.target as HTMLInputElement; - if (generatedKeys && input.value !== defaultValues.prvkey) { - setGeneratedKeys(false); - } - }; - - const prvKeyInput = document.getElementsByName('prvkey')[0]; - if (prvKeyInput) { - prvKeyInput.addEventListener('input', onPrvKeyChange); - - return () => { - prvKeyInput.removeEventListener('input', onPrvKeyChange); - }; - } - }, [generatedKeys]); - - const [showAdvancedOptions, setShowAdvancedOptions] = useState(false); - - const handleToggleAdvancedOptions = () => { - setShowAdvancedOptions(!showAdvancedOptions); - }; - - return ( - -
    -

    Tunnel Configuration

    -
    -
    -
    -
    -
    - {localLL.helpers.name()}} - /> - {localLL.helpers.prvkey()}} - /> - {localLL.helpers.pubkey()}} - /> - {localLL.helpers.address()}} - /> -
    -

    {localLL.sections.vpnServer()}

    - {localLL.helpers.serverPubkey()}} - /> - {localLL.helpers.presharedKey()}} - /> - {localLL.helpers.endpoint()}} - /> - {localLL.helpers.dns()}} - /> - {localLL.helpers.allowedIps()}} - /> - - {localLL.helpers.persistentKeepAlive()}} - /> -
    -

    {localLL.sections.advancedOptions()}

    - {localLL.helpers.advancedOptions()} -
    - -
    -
    - {localLL.helpers.preUp()}} - /> - {localLL.helpers.postUp()}} - /> - {localLL.helpers.preDown()}} - /> - {localLL.helpers.postDown()}} - /> -
    -
    -
    - -
    - ); -}; diff --git a/src/pages/client/pages/ClientAddTunnelPage/components/AddTunnelFormCard/style.scss b/src/pages/client/pages/ClientAddTunnelPage/components/AddTunnelFormCard/style.scss deleted file mode 100644 index a05b47159..000000000 --- a/src/pages/client/pages/ClientAddTunnelPage/components/AddTunnelFormCard/style.scss +++ /dev/null @@ -1,32 +0,0 @@ -#add-tunnel-form-card { - & > header { - display: flex; - flex-flow: row wrap; - align-items: center; - justify-content: flex-start; - padding-bottom: 10px; - gap: 10px; - - h2 { - text-wrap: nowrap; - } - - .controls { - margin-left: auto; - display: flex; - flex-flow: row nowrap; - gap: 10px; - align-items: center; - justify-content: flex-start; - - & > .btn { - min-width: 135px; - - span { - display: block; - padding: 0 1px; - } - } - } - } -} diff --git a/src/pages/client/pages/ClientAddTunnelPage/style.scss b/src/pages/client/pages/ClientAddTunnelPage/style.scss deleted file mode 100644 index 81ee24b10..000000000 --- a/src/pages/client/pages/ClientAddTunnelPage/style.scss +++ /dev/null @@ -1,125 +0,0 @@ -#client-add-tunnel-page { - h1 { - @include typography(app-title); - color: var(--text-body-primary); - } - - h2 { - @include typography(app-body-1); - color: var(--text-body-primary); - } - - h3 { - @include typography(app-side-bar); - color: var(--text-body-primary); - } - - form { - & > * { - width: 100%; - } - - .controls { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - - .btn { - width: 100%; - max-width: 200px; - } - } - } - - & > header { - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - padding-bottom: 15px; - - & > h1 { - text-align: left; - } - } - - & > .content { - width: 100%; - display: grid; - grid-template-columns: repeat(auto-fit, minmax(450px, 1fr)); - align-items: start; - justify-items: center; - column-gap: 25px; - row-gap: 25px; - - @include media-breakpoint-up(xl) { - column-gap: 50px; - } - - & > * { - width: 100%; - flex-grow: 1; - } - - & > .card { - box-sizing: border-box; - padding: 32px 64px; - - form { - & > .client { - border-bottom: 1px solid var(--border-primary); - margin-bottom: 10px; - } - - & > h3 { - margin-bottom: 10px; - } - - .advanced-options-header { - display: flex; - align-items: center; - gap: 5px; - margin-bottom: 10px; - - & > button { - background: none; - border: none; - padding: 0; - margin: 0; - } - - .arrow-single { - width: 22px; - height: 22px; - margin-left: auto; - } - - .underscore { - flex-grow: 1; - border-bottom: 1px solid var(--border-primary); - margin-right: 10px; - } - } - - .advanced-options { - display: none; - transition: opacity 0.5s ease; - } - - .advanced-options.open { - display: block; - } - - > .controls { - padding-top: 42px; - - .btn { - height: 47px; - } - } - } - } - } -} diff --git a/src/pages/client/pages/ClientAddedPage/ClientAddedPage.tsx b/src/pages/client/pages/ClientAddedPage/ClientAddedPage.tsx deleted file mode 100644 index 65ef7ab37..000000000 --- a/src/pages/client/pages/ClientAddedPage/ClientAddedPage.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import './style.scss'; - -import { useNavigate } from 'react-router-dom'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import SvgVpnLocation from '../../../../shared/components/svg/VpnLocation'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../shared/defguard-ui/components/Layout/Button/types'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { routes } from '../../../../shared/routes'; -import { ClientConnectionType } from '../../types'; - -type Props = { - pageType: ClientConnectionType; -}; - -export const ClientAddedPage = ({ pageType }: Props) => { - const { LL } = useI18nContext(); - const navigate = useNavigate(); - const [localLL, navigateRoute] = - pageType === ClientConnectionType.TUNNEL - ? [LL.pages.client.pages.createdPage.tunnel, routes.client.addTunnel] - : [LL.pages.client.pages.createdPage.instance, routes.client.addInstance]; - - return ( -
    -
    - -
    -

    {localLL.title()}

    - -

    {localLL.content()}

    -
    -
    -
    -
    - ); -}; diff --git a/src/pages/client/pages/ClientAddedPage/style.scss b/src/pages/client/pages/ClientAddedPage/style.scss deleted file mode 100644 index e50bc5b93..000000000 --- a/src/pages/client/pages/ClientAddedPage/style.scss +++ /dev/null @@ -1,47 +0,0 @@ -#created-page { - h2 { - @include typography(app-body-1); - } - - display: flex; - justify-content: center; - align-items: center; - overflow-x: auto; - - & > .content { - display: flex; - flex-flow: row wrap; - align-items: center; - justify-content: center; - - @include media-breakpoint-up(xxl) { - justify-content: flex-start; - } - - & > .card { - box-sizing: border-box; - padding: 32px 64px; - max-width: 700px; - min-width: 300px; - display: flex; - - & > .card-content { - display: flex; - justify-content: flex-start; - align-items: center; - flex-direction: column; - gap: 50px; - - & > p { - @include typography(app-body-2); - text-align: center; - } - - & > button { - width: 260px; - height: 50px; - } - } - } - } -} diff --git a/src/pages/client/pages/ClientEditTunnelPage/ClientEditTunnelPage.tsx b/src/pages/client/pages/ClientEditTunnelPage/ClientEditTunnelPage.tsx deleted file mode 100644 index ab36b147d..000000000 --- a/src/pages/client/pages/ClientEditTunnelPage/ClientEditTunnelPage.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import './style.scss'; - -import { useQuery } from '@tanstack/react-query'; -import { useEffect, useRef } from 'react'; -import { useNavigate } from 'react-router-dom'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import SvgIconCheckmarkSmall from '../../../../shared/components/svg/IconCheckmarkSmall'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../shared/defguard-ui/components/Layout/Button/types'; -import { routes } from '../../../../shared/routes'; -import { clientApi } from '../../clientAPI/clientApi'; -import { useClientStore } from '../../hooks/useClientStore'; -import { clientQueryKeys } from '../../query'; -import { ClientConnectionType } from '../../types'; -import { EditTunnelFormCard } from './components/EditTunnelFormCard'; -import { DeleteTunnelModal } from './modals/DeleteTunnelModal/DeleteTunnelModal'; -import { useDeleteTunnelModal } from './modals/DeleteTunnelModal/useDeleteTunnelModal'; - -const { getTunnelDetails } = clientApi; - -export const ClientEditTunnelPage = () => { - const { LL } = useI18nContext(); - const navigate = useNavigate(); - const submitRef = useRef(null); - const selectedInstance = useClientStore((state) => state.selectedInstance); - const openDeleteTunnel = useDeleteTunnelModal((state) => state.open); - useEffect(() => { - if ( - selectedInstance?.id === undefined || - selectedInstance.type !== ClientConnectionType.TUNNEL - ) { - navigate(routes.client.base, { replace: true }); - } - }, [selectedInstance, navigate]); - - const { data: tunnel } = useQuery({ - queryKey: [clientQueryKeys.getTunnels, selectedInstance?.id as number], - queryFn: () => getTunnelDetails(selectedInstance?.id as number), - enabled: !!selectedInstance?.id, - }); - return ( - <> -
    -
    -

    {LL.pages.client.pages.editTunnelPage.title()}

    -
    -
    -
    -
    - {tunnel && } -
    -
    - - - ); -}; diff --git a/src/pages/client/pages/ClientEditTunnelPage/components/EditTunnelFormCard.tsx b/src/pages/client/pages/ClientEditTunnelPage/components/EditTunnelFormCard.tsx deleted file mode 100644 index 437a6245f..000000000 --- a/src/pages/client/pages/ClientEditTunnelPage/components/EditTunnelFormCard.tsx +++ /dev/null @@ -1,322 +0,0 @@ -import { zodResolver } from '@hookform/resolvers/zod'; -import { error } from '@tauri-apps/plugin-log'; -import { useMemo, useState } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { useNavigate } from 'react-router-dom'; -import { z } from 'zod'; -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { ArrowSingle } from '../../../../../shared/defguard-ui/components/icons/ArrowSingle/ArrowSingle'; -import { - ArrowSingleDirection, - ArrowSingleSize, -} from '../../../../../shared/defguard-ui/components/icons/ArrowSingle/types'; -import { Card } from '../../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { Helper } from '../../../../../shared/defguard-ui/components/Layout/Helper/Helper'; -import { useToaster } from '../../../../../shared/defguard-ui/hooks/toasts/useToaster'; -import { - cidrRegex, - patternValidEndpoint, - patternValidIp, - patternValidIpV6, - patternValidIpV6WithPort, - patternValidWireguardKey, -} from '../../../../../shared/patterns'; -import { routes } from '../../../../../shared/routes'; -import { errorDetail } from '../../../../../shared/utils/errorDetail'; -import { validateIpOrDomainList } from '../../../../../shared/validators/tunnel'; -import { clientApi } from '../../../clientAPI/clientApi'; -import type { Tunnel } from '../../../types'; - -type Props = { - tunnel: Tunnel; - submitRef: React.MutableRefObject; // Add submitRef prop -}; - -type FormFields = { - id?: number; - name: string; - pubkey: string; - prvkey: string; - address: string; - server_pubkey: string; - preshared_key?: string; - allowed_ips?: string; - endpoint: string; - dns?: string; - persistent_keep_alive: number; - route_all_traffic: boolean; - pre_up?: string; - post_up?: string; - pre_down?: string; - post_down?: string; -}; -const defaultValues: FormFields = { - name: '', - pubkey: '', - prvkey: '', - address: '', - server_pubkey: '', - preshared_key: '', - allowed_ips: '', - endpoint: '', - dns: '', - persistent_keep_alive: 25, // Adjust as needed - route_all_traffic: false, - pre_up: '', - post_up: '', - pre_down: '', - post_down: '', -}; -const { updateTunnel } = clientApi; - -const tunnelToForm = (tunnel: Tunnel): FormFields => { - const { - id, - pubkey, - prvkey, - server_pubkey, - preshared_key, - allowed_ips, - dns, - persistent_keep_alive, - pre_up, - post_up, - pre_down, - post_down, - ...commonFields - } = tunnel; - - return { - id: id, - pubkey, - prvkey, - server_pubkey, - preshared_key: preshared_key || '', - allowed_ips: allowed_ips || '', - dns: dns || '', - persistent_keep_alive, - pre_up: pre_up || '', - post_up: post_up || '', - pre_down: pre_down || '', - post_down: post_down || '', - ...commonFields, - }; -}; - -export const EditTunnelFormCard = ({ tunnel, submitRef }: Props) => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.addTunnelPage.forms.initTunnel; - const navigate = useNavigate(); - const toaster = useToaster(); - - const defaultFormValues: FormFields = useMemo(() => { - if (tunnel) { - return tunnelToForm(tunnel); - } - return defaultValues; - }, [tunnel]); - - const schema = useMemo( - () => - z.object({ - id: z.number(), - name: z.string().trim().min(1, LL.form.errors.required()), - pubkey: z - .string() - .trim() - .min(1, LL.form.errors.required()) - .refine((value) => { - return patternValidWireguardKey.test(value); - }, LL.form.errors.invalid()), - prvkey: z - .string() - .trim() - .min(1, LL.form.errors.required()) - .refine((value) => { - return patternValidWireguardKey.test(value); - }, LL.form.errors.invalid()), - server_pubkey: z - .string() - .trim() - .min(1, LL.form.errors.required()) - .refine((value) => { - return patternValidWireguardKey.test(value); - }, LL.form.errors.invalid()), - preshared_key: z - .string() - .trim() - .refine((value) => { - return value === '' || patternValidWireguardKey.test(value); - }, LL.form.errors.invalid()), - address: z.string().refine((value) => { - if (value) { - const ips = value.split(',').map((ip) => ip.trim()); - return ips.every( - (ip) => patternValidIp.test(ip) || patternValidIpV6.test(ip), - ); - } - return false; - }, LL.form.errors.invalid()), - endpoint: z - .string() - .min(1, LL.form.errors.required()) - .refine((value) => { - return ( - patternValidEndpoint.test(value) || patternValidIpV6WithPort.test(value) - ); - }, LL.form.errors.invalid()), - dns: z - .string() - .refine((value) => { - if (value && value.length !== 0) { - return validateIpOrDomainList(value, ',', true); - } - return true; - }, LL.form.errors.invalid()) - .optional(), - allowed_ips: z.string().refine((value) => { - if (value) { - const ips = value.split(',').map((ip) => ip.trim()); - return ips.every((ip) => cidrRegex.test(ip)); - } - return true; - }, LL.form.errors.invalid()), - persistent_keep_alive: z.coerce.number(), - route_all_traffic: z.boolean(), - pre_up: z.string().nullable(), - post_up: z.string().nullable(), - pre_down: z.string().nullable(), - post_down: z.string().nullable(), - }), - [LL.form.errors], - ); - - const handleValidSubmit: SubmitHandler = (values) => { - updateTunnel(values) - .then(() => { - navigate(routes.client.base, { replace: true }); - toaster.success(LL.pages.client.pages.editTunnelPage.messages.editSuccess()); - }) - .catch((e) => { - const detail = errorDetail(e); - error(`Failed to update tunnel: ${detail}`); - toaster.error(LL.pages.client.pages.editTunnelPage.messages.editError()); - }); - }; - - const { handleSubmit, control } = useForm({ - resolver: zodResolver(schema), - defaultValues: defaultFormValues, - mode: 'all', - }); - - const [showAdvancedOptions, setShowAdvancedOptions] = useState(false); - - const handleToggleAdvancedOptions = () => { - setShowAdvancedOptions(!showAdvancedOptions); - }; - - return ( -
    - -
    -

    Tunnel Configuration

    -
    -
    -
    - {localLL.helpers.name()}} - /> - {localLL.helpers.prvkey()}} - /> - {localLL.helpers.pubkey()}} - /> - {localLL.helpers.address()}} - /> -
    -
    - -

    {localLL.sections.vpnServer()}

    - {localLL.helpers.serverPubkey()}} - /> - {localLL.helpers.presharedKey()}} - /> - {localLL.helpers.endpoint()}} - /> - {localLL.helpers.dns()}} - /> - {localLL.helpers.allowedIps()}} - /> - - {localLL.helpers.persistentKeepAlive()}} - /> -
    -

    {localLL.sections.advancedOptions()}

    - {localLL.helpers.advancedOptions()} -
    - -
    -
    - {localLL.helpers.preUp()}} - /> - {localLL.helpers.postUp()}} - /> - {localLL.helpers.preDown()}} - /> - {localLL.helpers.postDown()}} - /> -
    -
    - -
    - ); -}; diff --git a/src/pages/client/pages/ClientEditTunnelPage/modals/DeleteTunnelModal/DeleteTunnelModal.tsx b/src/pages/client/pages/ClientEditTunnelPage/modals/DeleteTunnelModal/DeleteTunnelModal.tsx deleted file mode 100644 index cfb0274e6..000000000 --- a/src/pages/client/pages/ClientEditTunnelPage/modals/DeleteTunnelModal/DeleteTunnelModal.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { error } from '@tauri-apps/plugin-log'; -import { isUndefined } from 'lodash-es'; -import { useNavigate } from 'react-router-dom'; -import { shallow } from 'zustand/shallow'; -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { ConfirmModal } from '../../../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/ConfirmModal'; -import { ConfirmModalType } from '../../../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/types'; -import { useToaster } from '../../../../../../shared/defguard-ui/hooks/toasts/useToaster'; -import { routes } from '../../../../../../shared/routes'; -import { errorDetail } from '../../../../../../shared/utils/errorDetail'; -import { clientApi } from '../../../../clientAPI/clientApi'; -import { useClientStore } from '../../../../hooks/useClientStore'; -import { clientQueryKeys } from '../../../../query'; -import { ClientConnectionType } from '../../../../types'; -import { useDeleteTunnelModal } from './useDeleteTunnelModal'; - -const { deleteTunnel } = clientApi; - -const invalidateOnSuccess = [clientQueryKeys.getTunnels, clientQueryKeys.getConnections]; - -export const DeleteTunnelModal = () => { - const { LL } = useI18nContext(); - const navigate = useNavigate(); - const setClientStore = useClientStore((state) => state.setState); - const [isOpen, tunnel] = useDeleteTunnelModal( - (state) => [state.isOpen, state.tunnel], - shallow, - ); - const [close, reset] = useDeleteTunnelModal( - (state) => [state.close, state.reset], - shallow, - ); - const toaster = useToaster(); - const localLL = LL.modals.deleteTunnel; - const queryClient = useQueryClient(); - - const { mutate, isPending } = useMutation({ - mutationFn: deleteTunnel, - onSuccess: () => { - toaster.success(localLL.messages.success()); - invalidateOnSuccess.forEach((key) => { - queryClient.invalidateQueries({ - queryKey: [key], - refetchType: 'active', - }); - }); - reset(); - setClientStore({ - selectedInstance: { - id: undefined, - type: ClientConnectionType.TUNNEL, - }, - }); - navigate(routes.client.base, { replace: true }); - }, - onError: (e) => { - toaster.error( - LL.common.messages.errorWithMessage({ - message: String(e), - }), - ); - const detail = errorDetail(e); - error(`Failed to delete tunnel "${tunnel?.name}" (id: ${tunnel?.id}): ${detail}`); - }, - }); - - return ( - close()} - afterClose={() => reset()} - loading={isPending} - submitText={localLL.controls.submit()} - cancelText={LL.common.controls.cancel()} - onSubmit={() => { - if (tunnel) { - mutate(tunnel.id); - } - }} - onCancel={() => close()} - /> - ); -}; diff --git a/src/pages/client/pages/ClientEditTunnelPage/modals/DeleteTunnelModal/useDeleteTunnelModal.ts b/src/pages/client/pages/ClientEditTunnelPage/modals/DeleteTunnelModal/useDeleteTunnelModal.ts deleted file mode 100644 index 60a0a05f1..000000000 --- a/src/pages/client/pages/ClientEditTunnelPage/modals/DeleteTunnelModal/useDeleteTunnelModal.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { Tunnel } from '../../../../types'; - -const defaultValues: StoreValues = { - isOpen: false, - tunnel: undefined, -}; - -export const useDeleteTunnelModal = createWithEqualityFn( - (set) => ({ - ...defaultValues, - open: (tunnel) => set({ tunnel, isOpen: true }), - close: () => set({ isOpen: false }), - reset: () => set(defaultValues), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - isOpen: boolean; - tunnel?: Tunnel; -}; - -type StoreMethods = { - open: (tunnel: Tunnel) => void; - close: () => void; - reset: () => void; -}; diff --git a/src/pages/client/pages/ClientEditTunnelPage/style.scss b/src/pages/client/pages/ClientEditTunnelPage/style.scss deleted file mode 100644 index f1fb0c9e3..000000000 --- a/src/pages/client/pages/ClientEditTunnelPage/style.scss +++ /dev/null @@ -1,119 +0,0 @@ -#client-edit-tunnel-page { - h1 { - @include typography(app-title); - color: var(--text-body-primary); - } - - h2 { - @include typography(app-body-1); - color: var(--text-body-primary); - } - - h3 { - @include typography(app-side-bar); - color: var(--text-body-primary); - } - - & > header { - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - padding-bottom: 15px; - - & > h1 { - text-align: left; - } - - & > .controls { - margin-left: auto; - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - gap: 20px; - - .btn { - width: 100%; - min-width: 130px; - } - } - } - - & > .content { - form { - & > * { - width: 100%; - } - - display: flex; - flex-direction: row; - justify-content: space-between; - gap: 50px; - align-items: flex-start; - - @include media-breakpoint-down(xxl) { - justify-content: flex-start; - flex-direction: column; - } - - & > .card { - box-sizing: border-box; - padding: 32px 64px; - } - - & > .client { - border-bottom: 1px solid var(--border-primary); - margin-bottom: 10px; - } - - & > h3 { - margin-bottom: 10px; - } - - .advanced-options-header { - display: flex; - align-items: center; - gap: 5px; - margin-bottom: 10px; - - & > button { - background: none; - border: none; - padding: 0; - margin: 0; - } - - .arrow-single { - width: 22px; - height: 22px; - margin-left: auto; - } - - .underscore { - flex-grow: 1; - border-bottom: 1px solid var(--border-primary); - margin-right: 10px; - } - } - - .advanced-options { - display: none; - transition: opacity 0.5s ease; - } - - .advanced-options.open { - display: block; - } - - > .controls { - padding-top: 42px; - - .btn { - height: 47px; - } - } - } - } -} diff --git a/src/pages/client/pages/ClientInstancePage/ClientInstancePage.tsx b/src/pages/client/pages/ClientInstancePage/ClientInstancePage.tsx deleted file mode 100644 index b6d40cf33..000000000 --- a/src/pages/client/pages/ClientInstancePage/ClientInstancePage.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import './style.scss'; - -import { useQuery } from '@tanstack/react-query'; -import { isUndefined } from 'lodash-es'; -import { useCallback, useEffect, useMemo } from 'react'; -import { useNavigate } from 'react-router-dom'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { ButtonStyleVariant } from '../../../../shared/defguard-ui/components/Layout/Button/types'; -import { routes } from '../../../../shared/routes'; -import { clientApi } from '../../clientAPI/clientApi'; -import { useClientStore } from '../../hooks/useClientStore'; -import { clientQueryKeys } from '../../query'; -import { ClientConnectionType, type DefguardInstance } from '../../types'; -import { LocationsList } from './components/LocationsList/LocationsList'; -import { StatsFilterSelect } from './components/StatsFilterSelect/StatsFilterSelect'; -import { StatsLayoutSelect } from './components/StatsLayoutSelect/StatsLayoutSelect'; -import { DeleteInstanceModal } from './modals/DeleteInstanceModal/DeleteInstanceModal'; -import { UpdateInstanceModal } from './modals/UpdateInstanceModal/UpdateInstanceModal'; -import { useUpdateInstanceModal } from './modals/UpdateInstanceModal/useUpdateInstanceModal'; - -const { getLocations, getTunnels } = clientApi; - -export const ClientInstancePage = () => { - const { LL } = useI18nContext(); - const instanceLL = LL.pages.client.pages.instancePage; - const tunnelLL = LL.pages.client.pages.tunnelPage; - const instances = useClientStore((state) => state.instances); - const tunnels = useClientStore((state) => state.tunnels); - const [selectedInstanceId, selectedInstanceType] = useClientStore((state) => [ - state.selectedInstance?.id, - state.selectedInstance?.type, - ]); - - const selectedInstance = useMemo((): DefguardInstance | undefined => { - if ( - !isUndefined(selectedInstanceId) && - selectedInstanceType && - selectedInstanceType === ClientConnectionType.LOCATION - ) { - return instances.find((i) => i.id === selectedInstanceId); - } - }, [selectedInstanceId, selectedInstanceType, instances]); - - const navigate = useNavigate(); - - const isLocationPage = selectedInstanceType === ClientConnectionType.LOCATION; - - const openUpdateInstanceModal = useUpdateInstanceModal((state) => state.open); - - const queryKey = useMemo(() => { - if (selectedInstanceType === ClientConnectionType.LOCATION) { - return [clientQueryKeys.getLocations, selectedInstanceId as number]; - } else { - return [clientQueryKeys.getTunnels]; - } - }, [selectedInstanceId, selectedInstanceType]); - - const queryFn = useCallback(() => { - if (selectedInstanceType === ClientConnectionType.LOCATION) { - return getLocations({ instanceId: selectedInstanceId as number }); - } else { - return getTunnels(); - } - }, [selectedInstanceType, selectedInstanceId]); - - const { data: locations, isError } = useQuery({ - queryKey, - queryFn, - enabled: !!selectedInstance, - }); - - useEffect(() => { - const isDefguardInstance = selectedInstanceType === ClientConnectionType.LOCATION; - const isTunnelInstance = selectedInstanceType === ClientConnectionType.TUNNEL; - - if (isDefguardInstance && !selectedInstance) { - navigate(routes.client.addInstance, { replace: true }); - } else if (isTunnelInstance && tunnels.length === 0) { - navigate(routes.client.addTunnel, { replace: true }); - } - }, [selectedInstance, selectedInstanceType, tunnels.length, navigate]); - - return ( -
    -
    -

    {isLocationPage ? instanceLL.title() : tunnelLL.title()}

    -
    - - {isLocationPage && ( - <> - - {selectedInstance && ( -
    -
    - - - -
    - ); -}; diff --git a/src/pages/client/pages/ClientInstancePage/components/LocationUsageChart/LocationUsageChart.tsx b/src/pages/client/pages/ClientInstancePage/components/LocationUsageChart/LocationUsageChart.tsx deleted file mode 100644 index a21d79e20..000000000 --- a/src/pages/client/pages/ClientInstancePage/components/LocationUsageChart/LocationUsageChart.tsx +++ /dev/null @@ -1,193 +0,0 @@ -import './style.scss'; - -import dayjs from 'dayjs'; -import { sortBy } from 'lodash-es'; -import { useMemo } from 'react'; -import AutoSizer from 'react-virtualized-auto-sizer'; -import { Bar, BarChart, Line, LineChart, XAxis, YAxis } from 'recharts'; - -import { NetworkSpeed } from '../../../../../../shared/defguard-ui/components/Layout/NetworkSpeed/NetworkSpeed'; -import { NetworkDirection } from '../../../../../../shared/defguard-ui/components/Layout/NetworkSpeed/types'; -import { useTheme } from '../../../../../../shared/defguard-ui/hooks/theme/useTheme'; -import type { LocationStats } from '../../../../types'; -import { LocationUsageChartType } from './types'; - -type ChartBoxSpacing = { - top?: number; - bottom?: number; - left?: number; - right?: number; -}; - -interface LocationUsageProps { - data: LocationStats[]; - type: LocationUsageChartType; - hideX?: boolean; - barSize?: number; - barGap?: number; - heightX?: number; - margin?: ChartBoxSpacing; - padding?: ChartBoxSpacing; -} - -const parseStatsForCharts = (data: LocationStats[]): LocationStats[] => { - const filtered = data.filter((stats) => stats.download > 0 || stats.upload > 0); - const formatted = filtered.map((stats) => ({ - ...stats, - collected_at: dayjs.utc(stats.collected_at).toDate().getTime(), - })); - return sortBy(formatted, ['collected_at']); -}; - -const totalUploadDownload = (data: LocationStats[]): number[] => { - let totalDownload = 0; - let totalUpload = 0; - for (const locationStat of data) { - totalDownload += locationStat.download; - totalUpload += locationStat.upload; - } - return [totalUpload, totalDownload]; -}; - -export const LocationUsageChart = ({ - data, - hideX = false, - barSize = 2, - barGap = 2, - heightX = 50, - type, - margin, - padding, -}: LocationUsageProps) => { - const [totalUpload, totalDownload] = useMemo(() => totalUploadDownload(data), [data]); - const getFormattedData = useMemo(() => parseStatsForCharts(data), [data]); - const { colors } = useTheme(); - - const getMargin = useMemo((): ChartBoxSpacing => { - const defaultMargin: ChartBoxSpacing = { - top: 0, - left: 0, - right: 0, - bottom: 0, - }; - return margin ?? defaultMargin; - }, [margin]); - - const getPadding = useMemo((): ChartBoxSpacing => { - const defaultPadding: ChartBoxSpacing = { - bottom: 0, - right: 0, - left: 0, - top: 0, - }; - return padding ?? defaultPadding; - }, [padding]); - - if (!data.length) return null; - return ( -
    -
    - - -
    - {type === LocationUsageChartType.BAR && ( - - {(size) => ( - - - - - - - )} - - )} - - {type === LocationUsageChartType.LINE && ( - - {(size) => ( - - - - - - - )} - - )} -
    - ); -}; - -// FIXME: hack with spaces to avoid tick overlapping -const formatXTick = (tickData: number) => - dayjs.utc(tickData).local().format('HH:mm:ss '); diff --git a/src/pages/client/pages/ClientInstancePage/components/LocationUsageChart/style.scss b/src/pages/client/pages/ClientInstancePage/components/LocationUsageChart/style.scss deleted file mode 100644 index bceb6df2a..000000000 --- a/src/pages/client/pages/ClientInstancePage/components/LocationUsageChart/style.scss +++ /dev/null @@ -1,23 +0,0 @@ -.location-usage { - display: grid; - grid-template-rows: auto 1fr; - grid-template-columns: 1fr; - width: 100%; - row-gap: 8px; - - & > .summary { - grid-row: 1; - grid-column: 1; - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: space-between; - } - - & > .chart-wrapper { - grid-row: 2; - grid-column: 1; - width: 100%; - } -} diff --git a/src/pages/client/pages/ClientInstancePage/components/LocationUsageChart/types.ts b/src/pages/client/pages/ClientInstancePage/components/LocationUsageChart/types.ts deleted file mode 100644 index 4dd9e8dc8..000000000 --- a/src/pages/client/pages/ClientInstancePage/components/LocationUsageChart/types.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum LocationUsageChartType { - BAR, - LINE, -} diff --git a/src/pages/client/pages/ClientInstancePage/components/LocationsList/LocationsList.tsx b/src/pages/client/pages/ClientInstancePage/components/LocationsList/LocationsList.tsx deleted file mode 100644 index 3c1546abb..000000000 --- a/src/pages/client/pages/ClientInstancePage/components/LocationsList/LocationsList.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import './style.scss'; - -import { useEffect } from 'react'; -import Markdown from 'react-markdown'; -import { useNavigate } from 'react-router-dom'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { useToaster } from '../../../../../../shared/defguard-ui/hooks/toasts/useToaster'; -import { routes } from '../../../../../../shared/routes'; -import { useClientStore } from '../../../../hooks/useClientStore'; -import { - ClientConnectionType, - type CommonWireguardFields, - type DefguardInstance, -} from '../../../../types'; -import { LocationsDetailView } from './components/LocationsDetailView/LocationsDetailView'; -import { LocationsGridView } from './components/LocationsGridView/LocationsGridView'; - -interface LocationsListProps { - locations: CommonWireguardFields[] | undefined; - isError: boolean; - selectedDefguardInstance: DefguardInstance | undefined; -} - -export const LocationsList = ({ - locations, - isError, - selectedDefguardInstance, -}: LocationsListProps) => { - const { LL } = useI18nContext(); - - const selectedView = useClientStore((state) => state.selectedView); - const selectedInstance = useClientStore((state) => state.selectedInstance); - const toaster = useToaster(); - const navigate = useNavigate(); - - const isTunnelType = selectedInstance?.type === ClientConnectionType.TUNNEL; - - useEffect(() => { - if (isError) { - toaster.error(LL.common.messages.error()); - } - }, [isError, toaster, LL.common.messages]); - - useEffect(() => { - if ( - locations?.length === 0 && - selectedInstance?.type === ClientConnectionType.TUNNEL - ) { - navigate(routes.client.addTunnel, { replace: true }); - } - }, [locations, navigate, selectedInstance]); - - // Listen for rust requesting MFA for connection - - // TODO: add loader or another placeholder view pointing to opening enter token modal if no instances are found / present - if (!selectedInstance || !locations) return null; - - return ( - <> - {locations && locations.length === 0 && ( -
    - {LL.pages.client.pages.instancePage.noData().trim()} -
    - )} - {locations.length === 1 && selectedView === null && !isTunnelType && ( - - )} - {(selectedView === 'grid' || selectedView === null || isTunnelType) && ( - - )} - - {selectedView === 'detail' && !isTunnelType && ( - - )} - - ); -}; diff --git a/src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardConnectButton/LocationCardConnectButton.tsx b/src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardConnectButton/LocationCardConnectButton.tsx deleted file mode 100644 index 1b4168766..000000000 --- a/src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardConnectButton/LocationCardConnectButton.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import './style.scss'; - -import { error } from '@tauri-apps/plugin-log'; -import classNames from 'classnames'; -import { useState } from 'react'; -import { useI18nContext } from '../../../../../../../../i18n/i18n-react'; -import SvgIconCheckmarkSmall from '../../../../../../../../shared/components/svg/IconCheckmarkSmall'; -import { Button } from '../../../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import SvgIconX from '../../../../../../../../shared/defguard-ui/components/svg/IconX'; -import { useToaster } from '../../../../../../../../shared/defguard-ui/hooks/toasts/useToaster'; -import { errorDetail } from '../../../../../../../../shared/utils/errorDetail'; -import { clientApi } from '../../../../../../clientAPI/clientApi'; -import { type CommonWireguardFields, LocationMfaType } from '../../../../../../types'; -import { useMFAModal } from '../../modals/MFAModal/useMFAModal'; - -const { connect, disconnect } = clientApi; - -type Props = { - location?: CommonWireguardFields; -}; - -export const LocationCardConnectButton = ({ location }: Props) => { - const openMFAModal = useMFAModal((state) => state.open); - const toaster = useToaster(); - const [isLoading, setIsLoading] = useState(false); - const { LL } = useI18nContext(); - - const cn = classNames('location-card-connect-button', { - connected: location?.active, - }); - - const mfaEnabled = - location?.location_mfa_mode && - (location.location_mfa_mode === LocationMfaType.INTERNAL || - location.location_mfa_mode === LocationMfaType.EXTERNAL); - - const handleClick = async () => { - setIsLoading(true); - try { - if (location) { - if (location?.active) { - await disconnect({ - locationId: location.id, - connectionType: location.connection_type, - }); - } else { - if (mfaEnabled) { - openMFAModal(location); - } else { - await connect({ - locationId: location?.id, - connectionType: location.connection_type, - }); - } - } - setIsLoading(false); - } - } catch (e) { - setIsLoading(false); - toaster.error( - LL.common.messages.errorWithMessage({ - message: String(e), - }), - ); - const detail = errorDetail(e); - error( - `Error handling interface for location ${location?.id} (${location?.active ? 'disconnect' : 'connect'}): ${detail}`, - ); - } - }; - - return ( -
    - - ); -}; diff --git a/src/pages/client/pages/ClientInstancePage/modals/UpdateInstanceModal/style.scss b/src/pages/client/pages/ClientInstancePage/modals/UpdateInstanceModal/style.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/pages/client/pages/ClientInstancePage/modals/UpdateInstanceModal/useUpdateInstanceModal.ts b/src/pages/client/pages/ClientInstancePage/modals/UpdateInstanceModal/useUpdateInstanceModal.ts deleted file mode 100644 index 9bdcc3ce4..000000000 --- a/src/pages/client/pages/ClientInstancePage/modals/UpdateInstanceModal/useUpdateInstanceModal.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { DefguardInstance } from '../../../../types'; - -const defaultValues: StoreValues = { - isOpen: false, - instance: undefined, -}; - -export const useUpdateInstanceModal = createWithEqualityFn( - (set) => ({ - ...defaultValues, - open: (instance) => set({ instance, isOpen: true }), - close: () => set({ isOpen: false }), - reset: () => set(defaultValues), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - isOpen: boolean; - instance?: DefguardInstance; -}; - -type StoreMethods = { - open: (instance: DefguardInstance) => void; - close: () => void; - reset: () => void; -}; diff --git a/src/pages/client/pages/ClientInstancePage/style.scss b/src/pages/client/pages/ClientInstancePage/style.scss deleted file mode 100644 index 2806226d5..000000000 --- a/src/pages/client/pages/ClientInstancePage/style.scss +++ /dev/null @@ -1,38 +0,0 @@ -#client-instance-page { - & > header { - width: 100%; - display: flex; - flex-flow: row wrap; - align-items: center; - column-gap: 30px; - row-gap: 25px; - padding-bottom: 30px; - - @include media-breakpoint-up(lg) { - padding-bottom: 60px; - } - - & > h1 { - @include typography(app-title); - color: var(--text-body-primary); - } - - .options { - display: flex; - flex-grow: 1; - flex-flow: row nowrap; - align-self: center; - justify-content: flex-start; - column-gap: 20px; - - .btn { - margin-left: auto; - } - } - - .select-container { - height: 40px; - width: 134px; - } - } -} diff --git a/src/pages/client/pages/ClientSettingsPage/ClientSettingsPage.tsx b/src/pages/client/pages/ClientSettingsPage/ClientSettingsPage.tsx deleted file mode 100644 index f4e53092d..000000000 --- a/src/pages/client/pages/ClientSettingsPage/ClientSettingsPage.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import './style.scss'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { GlobalLogs } from './components/GlobalLogs/GlobalLogs'; -import { GlobalSettingsTab } from './components/GlobalSettingsTab/GlobalSettingsTab'; -import { InfoCard } from './components/InfoCard/InfoCard'; - -export const ClientSettingsPage = () => { - const { LL } = useI18nContext(); - const pageLL = LL.pages.client.pages.settingsPage; - - return ( -
    -
    -

    {pageLL.title()}

    -
    -
    -
    - - - - -
    - -
    -
    - ); -}; diff --git a/src/pages/client/pages/ClientSettingsPage/components/GlobalLogs/GlobalLogs.tsx b/src/pages/client/pages/ClientSettingsPage/components/GlobalLogs/GlobalLogs.tsx deleted file mode 100644 index e24d149e1..000000000 --- a/src/pages/client/pages/ClientSettingsPage/components/GlobalLogs/GlobalLogs.tsx +++ /dev/null @@ -1,200 +0,0 @@ -import './style.scss'; - -import { listen, type UnlistenFn } from '@tauri-apps/api/event'; -import * as clipboard from '@tauri-apps/plugin-clipboard-manager'; -import { save } from '@tauri-apps/plugin-dialog'; -import { writeTextFile } from '@tauri-apps/plugin-fs'; -import { error } from '@tauri-apps/plugin-log'; -import { useCallback, useEffect, useRef } from 'react'; -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { ActionButton } from '../../../../../../shared/defguard-ui/components/Layout/ActionButton/ActionButton'; -import { ActionButtonVariant } from '../../../../../../shared/defguard-ui/components/Layout/ActionButton/types'; -import { Card } from '../../../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { Helper } from '../../../../../../shared/defguard-ui/components/Layout/Helper/Helper'; -import { errorDetail } from '../../../../../../shared/utils/errorDetail'; -import { clientApi } from '../../../../clientAPI/clientApi'; -import type { - GlobalLogLevel, - LogItem, - LogLevel, - LogSource, -} from '../../../../clientAPI/types'; -import { GlobalLogsSelect } from './GlobalLogsSelect'; -import { GlobalLogsSourceSelect } from './GlobalLogsSourceSelect'; - -export const GlobalLogs = () => { - const logsContainerElement = useRef(null); - const globalLogLevelRef = useRef('INFO'); - const logSourceRef = useRef('All'); - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.instancePage.detailView.details.logs; - const { startGlobalLogWatcher, stopGlobalLogWatcher } = clientApi; - - const handleLogsDownload = async () => { - try { - const path = await save({ - filters: [ - { - name: 'Logs', - extensions: ['txt', 'log'], - }, - ], - }); - - if (path) { - const logs = getAllLogs(); - await writeTextFile(path, logs); - } else { - throw new Error('No path selected'); - } - } catch (e) { - const detail = errorDetail(e); - error(`Failed to save logs to file: ${detail}`); - } - }; - - const clearLogs = useCallback(() => { - if (logsContainerElement.current) { - logsContainerElement.current.innerHTML = ''; - } - }, []); - - // Clear logs when the component is unmounted or locationId changes - useEffect(() => { - return () => clearLogs(); - }, [clearLogs]); - - // Listen to new logs - useEffect(() => { - let eventUnlisten: UnlistenFn; - const startLogListen = async () => { - eventUnlisten = await listen( - `log-update-global`, - ({ payload: logItems }) => { - if (logsContainerElement.current) { - logItems.forEach((item) => { - if ( - logsContainerElement.current && - filterLogByLevel(globalLogLevelRef.current, item.level) && - filterLogBySource(logSourceRef.current, item.source) - ) { - const utcTimestamp = item.timestamp.endsWith('Z') - ? item.timestamp - : `${item.timestamp}Z`; - const dateTime = new Date(utcTimestamp).toLocaleString(); - const messageString = `[${dateTime}][${item.level}][${item.source}] ${item.fields.message}`; - const element = createLogLineElement(messageString); - const scrollAfterAppend = - logsContainerElement.current.scrollHeight - - logsContainerElement.current.scrollTop === - logsContainerElement.current.clientHeight; - logsContainerElement.current.appendChild(element); - // auto scroll to bottom if user didn't scroll up - if (scrollAfterAppend) { - logsContainerElement.current.scrollTo({ - top: logsContainerElement.current.scrollHeight, - }); - } - } - }); - } - }, - ); - }; - startLogListen(); - startGlobalLogWatcher(); - - //unsubscribe on dismount - return () => { - stopGlobalLogWatcher(); - eventUnlisten?.(); - }; - }, []); - - const getAllLogs = () => { - let logs = ''; - - if (logsContainerElement) { - logsContainerElement.current?.childNodes.forEach((item) => { - logs += `${item.textContent}\n`; - }); - } - - return logs; - }; - - return ( - -
    -

    {localLL.title()}

    -
    - { - globalLogLevelRef.current = level; - clearLogs(); - stopGlobalLogWatcher(); - startGlobalLogWatcher(); - }} - /> -
    - { - logSourceRef.current = source; - clearLogs(); - stopGlobalLogWatcher(); - startGlobalLogWatcher(); - }} - /> - -

    - {LL.pages.client.pages.settingsPage.tabs.global.globalLogs.logSourceHelper()} -

    -
    -
    -
    - { - const logs = getAllLogs(); - if (logs) { - clipboard.writeText(logs); - } - }} - /> - -
    -
    -
    - ); -}; - -const createLogLineElement = (content: string): HTMLParagraphElement => { - const element = document.createElement('p'); - element.classList.add('log-line'); - element.textContent = content; - return element; -}; - -// return true if log should be visible -const filterLogByLevel = (target: LogLevel, log: LogLevel): boolean => { - const log_level = log.toLocaleLowerCase(); - switch (target) { - case 'ERROR': - return log_level === 'error'; - case 'INFO': - return ['info', 'error', 'warn'].includes(log_level); - case 'DEBUG': - return ['error', 'info', 'debug', 'warn'].includes(log_level); - default: - return true; - } -}; - -const filterLogBySource = (target: LogSource, log: LogSource): boolean => { - return target === 'All' || target === log; -}; diff --git a/src/pages/client/pages/ClientSettingsPage/components/GlobalLogs/GlobalLogsSelect.tsx b/src/pages/client/pages/ClientSettingsPage/components/GlobalLogs/GlobalLogsSelect.tsx deleted file mode 100644 index b635b12d1..000000000 --- a/src/pages/client/pages/ClientSettingsPage/components/GlobalLogs/GlobalLogsSelect.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import { useCallback, useMemo, useState } from 'react'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { Select } from '../../../../../../shared/defguard-ui/components/Layout/Select/Select'; -import { - type SelectOption, - type SelectSelectedValue, - SelectSizeVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Select/types'; -import type { GlobalLogLevel } from '../../../../clientAPI/types'; - -type Props = { - initSelected: GlobalLogLevel; - onChange: (selected: GlobalLogLevel) => void; -}; - -export const GlobalLogsSelect = ({ initSelected, onChange }: Props) => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.settingsPage.tabs.global.logging.options; - const [selected, setSelected] = useState(initSelected); - - const options = useMemo((): SelectOption[] => { - return [ - { - key: 0, - label: localLL.error(), - value: 'ERROR', - }, - { - key: 1, - label: localLL.info(), - value: 'INFO', - }, - { - key: 2, - label: localLL.debug(), - value: 'DEBUG', - }, - ]; - }, [localLL]); - - const renderSelected = useCallback( - (value: GlobalLogLevel): SelectSelectedValue => { - const option = options.find((o) => o.value === value); - if (option) { - return { - key: option.key, - displayValue: option.label, - }; - } - return { - key: 0, - displayValue: '', - }; - }, - [options], - ); - - return ( - { - setSelected(res); - onChange(res); - }} - /> - ); -}; diff --git a/src/pages/client/pages/ClientSettingsPage/components/GlobalLogs/style.scss b/src/pages/client/pages/ClientSettingsPage/components/GlobalLogs/style.scss deleted file mode 100644 index 8dd7cd38e..000000000 --- a/src/pages/client/pages/ClientSettingsPage/components/GlobalLogs/style.scss +++ /dev/null @@ -1,60 +0,0 @@ -#global-logs { - & > .top { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - gap: 10px; - box-sizing: border-box; - padding: 10px 20px; - border-bottom: 1px solid var(--border-primary); - - #selects { - display: flex; - gap: 5px; - flex-grow: 1; - } - - .select-with-helper { - display: flex; - gap: 5px; - flex-grow: 1; - align-items: center; - } - - svg { - path { - fill: var(--surface-icon-primary); - } - } - - .select { - width: 100%; - max-width: 110px; - margin-left: 10px; - } - - :nth-child(3) { - margin-left: auto; - } - } - - h3 { - @include typography(app-side-bar); - } - - & > .logs-container { - contain: paint; - height: 300px; - max-height: 300px; - max-width: 100%; - overflow: auto; - box-sizing: border-box; - margin: 20px 5px 20px 20px; - - p { - @include typography(app-code); - color: var(--text-body-primary); - } - } -} diff --git a/src/pages/client/pages/ClientSettingsPage/components/GlobalSettingsTab/GlobalSettingsTab.tsx b/src/pages/client/pages/ClientSettingsPage/components/GlobalSettingsTab/GlobalSettingsTab.tsx deleted file mode 100644 index 824976065..000000000 --- a/src/pages/client/pages/ClientSettingsPage/components/GlobalSettingsTab/GlobalSettingsTab.tsx +++ /dev/null @@ -1,279 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation } from '@tanstack/react-query'; -import { useCallback, useEffect, useMemo, useState } from 'react'; -import { - type SubmitHandler, - type UseControllerProps, - useController, - useForm, -} from 'react-hook-form'; -import { z } from 'zod'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { FormCheckBox } from '../../../../../../shared/defguard-ui/components/Form/FormCheckBox/FormCheckBox'; -import { FormInput } from '../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { FormSelect } from '../../../../../../shared/defguard-ui/components/Form/FormSelect/FormSelect'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { Helper } from '../../../../../../shared/defguard-ui/components/Layout/Helper/Helper'; -import { - type SelectOption, - type SelectSelectedValue, - SelectSizeVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Select/types'; -import { - availableThemes, - type ThemeKey, -} from '../../../../../../shared/defguard-ui/hooks/theme/types'; -import { - type AppConfig, - availableLogLevels, - type LogLevel, -} from '../../../../clientAPI/types'; -import { useClientStore } from '../../../../hooks/useClientStore'; - -type FormFields = AppConfig; - -type FormMemberProps = { - controller: UseControllerProps; -}; - -export const GlobalSettingsTab = () => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.settingsPage.tabs.global; - const currentConfig = useClientStore((s) => s.appConfig); - const setAppConfig = useClientStore((s) => s.updateAppConfig, shallow); - - const { mutateAsync } = useMutation({ - mutationFn: setAppConfig, - }); - - const schema = useMemo( - () => - z.object({ - theme: z - .string() - .min(1, LL.form.errors.required()) - .refine( - (value) => availableThemes.includes(value as ThemeKey), - LL.form.errors.invalid(), - ), - log_level: z - .string() - .min(1, LL.form.errors.required()) - .refine((v) => availableLogLevels.includes(v as LogLevel)), - check_for_updates: z.boolean(), - peer_alive_period: z - .number({ - invalid_type_error: LL.form.errors.required(), - required_error: LL.form.errors.required(), - }) - .gte(120, LL.form.errors.minValue({ min: 120 })), - mtu: z - .number({ - invalid_type_error: LL.form.errors.required(), - required_error: LL.form.errors.required(), - }) - .lte(65535, LL.form.errors.maxValue({ max: 65535 })), - }), - [LL.form.errors], - ); - - const { - handleSubmit, - control, - reset, - formState: { isDirty, isValid }, - } = useForm({ - defaultValues: currentConfig, - mode: 'all', - resolver: zodResolver(schema), - }); - - const handleValidSubmit: SubmitHandler = async (values) => { - const newConfig = await mutateAsync(values); - reset(newConfig); - }; - - return ( -
    -
    -
    -
    -

    {localLL.versionUpdate.title()}

    - -
    -
    -

    {localLL.logging.title()}

    - -
    -
    -

    {localLL.theme.title()}

    - -
    -
    -
    -

    - {localLL.peer_alive.title()} {localLL.common.value_in_seconds()} -

    - -

    {localLL.peer_alive.helper()}

    -
    -
    - -
    -
    -
    -

    {localLL.mtu.title()}

    - -

    {localLL.mtu.helper()}

    -
    -
    - -
    -
    - ); -}; - -const ThemeSelect = ({ controller }: FormMemberProps) => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.settingsPage.tabs.global.theme; - - const options = useMemo((): SelectOption[] => { - const res: SelectOption[] = [ - { - key: 0, - label: localLL.options.light(), - value: 'light', - }, - { - key: 1, - label: localLL.options.dark(), - value: 'dark', - }, - ]; - return res; - }, [localLL.options]); - - const renderSelected = useCallback( - (theme: ThemeKey): SelectSelectedValue => { - const option = options.find((o) => o.value === theme); - if (option) { - return { - key: option.key, - displayValue: option.label, - }; - } - return { - key: 999, - displayValue: '', - }; - }, - [options], - ); - - return ( - - ); -}; - -const LoggingLevelSelect = ({ controller }: FormMemberProps) => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.settingsPage.tabs.global.logging; - const appConfig = useClientStore((state) => state.appConfig); - const [showWarning, setShowWarning] = useState(false); - const { - field: { value }, - } = useController(controller); - - const loggingOptions = useMemo((): SelectOption[] => { - const res: SelectOption[] = [ - { - key: 0, - label: localLL.options.error(), - value: 'ERROR', - }, - { - key: 1, - label: localLL.options.info(), - value: 'INFO', - }, - { - key: 2, - label: localLL.options.debug(), - value: 'DEBUG', - }, - { - key: 3, - label: localLL.options.trace(), - value: 'TRACE', - }, - ]; - return res; - }, [localLL.options]); - - const renderSelected = useCallback( - (val: LogLevel) => { - const option = loggingOptions.find((o) => o.value === val); - if (option) { - return { - key: option.key, - displayValue: option.label, - }; - } - return { - key: 999, - displayValue: '', - }; - }, - [loggingOptions], - ); - - useEffect(() => { - if (value !== appConfig.log_level) { - setShowWarning(true); - } - }, [value, appConfig.log_level]); - - return ( - <> - {showWarning &&

    {localLL.warning()}

    } - - - ); -}; - -const CheckForUpdatesOption = ({ controller }: FormMemberProps) => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.settingsPage.tabs.global; - - return ( - - ); -}; diff --git a/src/pages/client/pages/ClientSettingsPage/components/GlobalSettingsTab/style.scss b/src/pages/client/pages/ClientSettingsPage/components/GlobalSettingsTab/style.scss deleted file mode 100644 index 5e6c57d34..000000000 --- a/src/pages/client/pages/ClientSettingsPage/components/GlobalSettingsTab/style.scss +++ /dev/null @@ -1,69 +0,0 @@ -#global-settings-tab { - position: relative; - display: flex; - flex-flow: column; - align-items: flex-start; - justify-items: flex-start; - - .spaced { - padding-bottom: 32px; - } - - .select-container { - margin-bottom: 32px; - } - - .input { - padding-bottom: 32px; - } - - & > section { - display: flex; - flex-flow: column; - align-items: flex-start; - justify-items: flex-start; - row-gap: 20px; - - & > header { - display: flex; - flex-flow: row nowrap; - column-gap: 10px; - align-items: center; - justify-content: flex-start; - - .helper { - width: 20px; - height: 20px; - } - } - - h2 { - span { - @include typography(input-label); - color: var(--text-body-secondary); - } - } - - .warning-message { - @include typography(app-body-2); - color: var(--text-important); - } - } - - .select-container { - min-width: 250px; - } - - & > .controls { - display: flex; - width: 100%; - flex-flow: row; - align-items: center; - justify-content: flex-end; - - .btn { - width: 100%; - max-width: 120px; - } - } -} diff --git a/src/pages/client/pages/ClientSettingsPage/components/InfoCard/InfoCard.tsx b/src/pages/client/pages/ClientSettingsPage/components/InfoCard/InfoCard.tsx deleted file mode 100644 index bb7fde198..000000000 --- a/src/pages/client/pages/ClientSettingsPage/components/InfoCard/InfoCard.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import Markdown from 'react-markdown'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { GitHubIcon } from '../../../../../../shared/components/svg/GithubIcon'; -import { - discussionsUrl, - githubUrl, - mastodonUrl, -} from '../../../../../../shared/constants'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { Card } from '../../../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { defguardGithubLink } from '../../../../../../shared/links'; -import { clientApi } from '../../../../clientAPI/clientApi'; -import cardImage from './assets/hero.png'; - -const { openLink } = clientApi; - -const GithubButton = () => { - const { LL } = useI18nContext(); - const localLL = LL.pages.client.pages.carouselPage.slides.shared; - return ( -
    - - ); -}; diff --git a/src/pages/enrollment/steps/ChooseMfaStep/style.scss b/src/pages/enrollment/steps/ChooseMfaStep/style.scss deleted file mode 100644 index 17c87f344..000000000 --- a/src/pages/enrollment/steps/ChooseMfaStep/style.scss +++ /dev/null @@ -1,30 +0,0 @@ -#enrollment-choose-mfa-step { - width: 100%; - max-width: 650px; - padding: 50px 40px; - display: flex; - flex-flow: column; - row-gap: var(--spacing-m); - - .choices { - display: flex; - flex-flow: row wrap; - width: 100%; - align-items: start; - justify-content: space-between; - column-gap: var(--spacing-s); - row-gap: var(--spacing-s); - - & > div { - width: calc(50% - (var(--spacing-s) / 2)); - } - } - - .controls { - display: flex; - flex-flow: row wrap; - align-items: center; - justify-content: center; - gap: var(--spacing-s); - } -} diff --git a/src/pages/enrollment/steps/DataVerificationStep/DataVerificationStep.tsx b/src/pages/enrollment/steps/DataVerificationStep/DataVerificationStep.tsx deleted file mode 100644 index 7139a90aa..000000000 --- a/src/pages/enrollment/steps/DataVerificationStep/DataVerificationStep.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useEffect, useMemo, useRef } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { FormInput } from '../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { MessageBox } from '../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { MessageBoxType } from '../../../../shared/defguard-ui/components/Layout/MessageBox/types'; -import { EnrollmentStepIndicator } from '../../components/EnrollmentStepIndicator/EnrollmentStepIndicator'; -import { EnrollmentStepKey } from '../../const'; -import { useEnrollmentStore } from '../../hooks/store/useEnrollmentStore'; - -const phonePattern = /^\+?[0-9]+( [0-9]+)?$/; - -type FormFields = { - phone: string; -}; - -export const DataVerificationStep = () => { - const { LL } = useI18nContext(); - const submitRef = useRef(null); - - const nextSubject = useEnrollmentStore((state) => state.nextSubject); - - const userInfo = useEnrollmentStore((state) => state.userInfo); - - const [setEnrollment] = useEnrollmentStore((state) => [state.setState], shallow); - - const pageLL = LL.pages.enrollment.steps.dataVerification; - - const schema = useMemo( - () => - z.object({ - phone: z - .union([ - z.string().length(0), - z.string().trim().regex(phonePattern, LL.form.errors.invalid()), - ]) - .optional() - .transform((e) => (e === '' ? undefined : e)), - }), - [LL.form.errors], - ); - - const { control, handleSubmit } = useForm({ - defaultValues: { - phone: userInfo?.phone_number ?? '', - }, - mode: 'all', - resolver: zodResolver(schema), - }); - - const handleValidSubmit: SubmitHandler = (values) => { - if (userInfo) { - setEnrollment({ - userInfo: { ...userInfo, phone_number: values.phone }, - step: EnrollmentStepKey.PASSWORD, - }); - } - }; - - useEffect(() => { - const sub = nextSubject.subscribe(() => { - submitRef.current?.click(); - }); - - return () => { - sub.unsubscribe(); - }; - }, [nextSubject]); - - return ( - - -

    {pageLL.title()}

    - -
    -
    -
    - -

    {userInfo?.first_name}

    -
    -
    - -

    {userInfo?.last_name}

    -
    -
    -
    -
    - -

    {userInfo?.email}

    -
    - -
    - -
    -
    - ); -}; diff --git a/src/pages/enrollment/steps/DataVerificationStep/style.scss b/src/pages/enrollment/steps/DataVerificationStep/style.scss deleted file mode 100644 index fefa18a4c..000000000 --- a/src/pages/enrollment/steps/DataVerificationStep/style.scss +++ /dev/null @@ -1,59 +0,0 @@ -#enrollment-data-verification-card { - padding: 0 20px; - - @include media-breakpoint-up(lg) { - padding: 50px 40px; - } - - & > h3 { - margin-bottom: 15px; - } - - & > .message-box { - margin-bottom: 15px; - } - - & > form { - box-sizing: border-box; - width: 100%; - padding: 25px 0; - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - row-gap: 36px; - - & > .row { - display: flex; - flex-flow: row wrap; - align-items: flex-start; - align-content: flex-start; - justify-content: space-between; - width: 100%; - row-gap: 36px; - - & > * { - width: 100%; - max-width: 250px; - } - - & > .item { - & > label { - user-select: none; - display: block; - @include typography(app-wizard-1); - - color: var(--text-body-tertiary); - margin-bottom: 8px; - padding: 0; - } - - & > p { - @include typography(app-input); - - color: var(--text-body-primary); - } - } - } - } -} diff --git a/src/pages/enrollment/steps/DeviceStep/DeviceStep.tsx b/src/pages/enrollment/steps/DeviceStep/DeviceStep.tsx deleted file mode 100644 index 3d67e1ff2..000000000 --- a/src/pages/enrollment/steps/DeviceStep/DeviceStep.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import './style.scss'; - -import classNames from 'classnames'; -import { useEffect } from 'react'; -import { shallow } from 'zustand/shallow'; -import { EnrollmentStepKey } from '../../const'; -import { useEnrollmentStore } from '../../hooks/store/useEnrollmentStore'; -import { EnrollmentNavDirection } from '../../hooks/types'; -import { DesktopSetup } from './components/DesktopSetup/DesktopSetup'; - -export const DeviceStep = () => { - const deviceName = useEnrollmentStore((state) => state.deviceName); - const vpnOptional = useEnrollmentStore((state) => state.vpnOptional); - - const [nextSubject, setStore] = useEnrollmentStore( - (state) => [state.nextSubject, state.setState], - shallow, - ); - - const cn = classNames({ - required: !vpnOptional, - optional: vpnOptional, - }); - - // biome-ignore lint/correctness/useExhaustiveDependencies: jsx - useEffect(() => { - const sub = nextSubject.subscribe((direction) => { - switch (direction) { - case EnrollmentNavDirection.BACK: - setStore({ step: EnrollmentStepKey.PASSWORD }); - break; - case EnrollmentNavDirection.NEXT: - if (deviceName) { - setStore({ step: EnrollmentStepKey.MFA_CHOICE }); - } - break; - } - }); - return () => { - sub.unsubscribe(); - }; - }, [nextSubject, deviceName]); - - return ( -
    -
    - -
    -
    - ); -}; diff --git a/src/pages/enrollment/steps/DeviceStep/components/DesktopSetup/DesktopSetup.tsx b/src/pages/enrollment/steps/DeviceStep/components/DesktopSetup/DesktopSetup.tsx deleted file mode 100644 index 52fa40d77..000000000 --- a/src/pages/enrollment/steps/DeviceStep/components/DesktopSetup/DesktopSetup.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation } from '@tanstack/react-query'; -import { error } from '@tauri-apps/plugin-log'; -import { isUndefined } from 'lodash-es'; -import { useMemo, useState } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { Card } from '../../../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { useToaster } from '../../../../../../shared/defguard-ui/hooks/toasts/useToaster'; -import type { CreateDeviceResponse } from '../../../../../../shared/hooks/api/types'; -import { errorDetail } from '../../../../../../shared/utils/errorDetail'; -import { generateWGKeys } from '../../../../../../shared/utils/generateWGKeys'; -import { EnrollmentStepIndicator } from '../../../../components/EnrollmentStepIndicator/EnrollmentStepIndicator'; -import { EnrollmentStepKey } from '../../../../const'; -import { useEnrollmentStore } from '../../../../hooks/store/useEnrollmentStore'; -import { useEnrollmentApi } from '../../../../hooks/useEnrollmentApi'; - -type FormFields = { - name: string; -}; - -export const DesktopSetup = () => { - const { LL } = useI18nContext(); - const toaster = useToaster(); - const stepLL = LL.pages.enrollment.steps.deviceSetup; - const { - enrollment: { createDevice }, - } = useEnrollmentApi(); - const deviceName = useEnrollmentStore((state) => state.deviceName); - const [userInfo, userPassword] = useEnrollmentStore((state) => [ - state.userInfo, - state.userPassword, - ]); - const setEnrollmentStore = useEnrollmentStore((state) => state.setState); - const [isLoading, setIsLoading] = useState(false); - - const { mutateAsync: createDeviceMutation, isPending: createDevicePending } = - useMutation({ - mutationFn: createDevice, - onError: (e) => { - const detail = errorDetail(e); - error(`createDevice mutation failed during enrollment: ${detail}`); - }, - }); - - const schema = useMemo( - () => - z.object({ - name: z.string().trim().min(1, LL.form.errors.required()), - }), - [LL.form.errors], - ); - - const { control, handleSubmit } = useForm({ - mode: 'all', - defaultValues: { - name: deviceName ?? '', - }, - resolver: zodResolver(schema), - }); - - const handleValidSubmit: SubmitHandler = async (values) => { - if (!userInfo || !userPassword) return; - const { publicKey, privateKey } = generateWGKeys(); - const deviceResponse = (await createDeviceMutation({ - name: values.name, - pubkey: publicKey, - }).then(async (res) => { - if (!res.ok) { - error( - `Failed to create device during the enrollment. Error details: ${JSON.stringify( - await res.json(), - )} Error status code: ${res.status} `, - ); - } - return await res.json(); - })) as CreateDeviceResponse; - toaster.success(stepLL.desktopSetup.messages.deviceConfigured()); - setEnrollmentStore({ - deviceResponse, - step: EnrollmentStepKey.MFA_CHOICE, - deviceName: values.name, - deviceKeys: { - private: privateKey, - public: publicKey, - }, - }); - setIsLoading(false); - }; - - return ( - - -

    {stepLL.desktopSetup.title()}

    -
    - -

    M$i6yT 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

    ); diff --git a/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx b/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx index 1876b814c..c7962ba6f 100644 --- a/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx +++ b/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx @@ -8,7 +8,10 @@ import { ScrollContainer } from '../../../shared/components/ScrollContainer/Scro import { SizedBox } from '../../../shared/components/SizedBox/SizedBox'; import { FullPage } from '../../../shared/layouts/FullPage/FullPage'; import { useAppData } from '../../../shared/providers/AppDataContext'; -import { getLocationsQueryOptions } from '../../../shared/rust-api/query'; +import { + getLocationsQueryOptions, + tunnelsDisabled, +} from '../../../shared/rust-api/query'; import type { InstanceInfo } from '../../../shared/rust-api/types'; import { ThemeSpacing } from '../../../shared/types'; import { isPresent } from '../../../shared/utils/isPresent'; @@ -59,7 +62,10 @@ export const OverviewPage = () => {
    - +
    {
    - + {!tunnelsDisabled(instances) && } ); diff --git a/new-ui/src/routes/full/_default/add/tunnel.tsx b/new-ui/src/routes/full/_default/add/tunnel.tsx index 0950e243c..51aa88cac 100644 --- a/new-ui/src/routes/full/_default/add/tunnel.tsx +++ b/new-ui/src/routes/full/_default/add/tunnel.tsx @@ -1,6 +1,16 @@ -import { createFileRoute } from '@tanstack/react-router'; +import { createFileRoute, redirect } from '@tanstack/react-router'; import { AddTunnelPage } from '../../../../pages/full/AddTunnelPage/AddTunnelPage'; +import { + getInstancesQueryOptions, + tunnelsDisabled, +} from '../../../../shared/rust-api/query'; export const Route = createFileRoute('/full/_default/add/tunnel')({ + beforeLoad: async ({ context }) => { + const instances = await context.queryClient.ensureQueryData(getInstancesQueryOptions); + if (tunnelsDisabled(instances)) { + throw redirect({ to: '/full/overview' }); + } + }, component: AddTunnelPage, }); diff --git a/new-ui/src/routes/full/tunnel-wizard.tsx b/new-ui/src/routes/full/tunnel-wizard.tsx index 6a5e7f51e..c49963b20 100644 --- a/new-ui/src/routes/full/tunnel-wizard.tsx +++ b/new-ui/src/routes/full/tunnel-wizard.tsx @@ -1,6 +1,13 @@ -import { createFileRoute } from '@tanstack/react-router'; +import { createFileRoute, redirect } from '@tanstack/react-router'; import { TunnelWizardPage } from '../../pages/full/TunnelWizardPage/TunnelWizardPage'; +import { getInstancesQueryOptions, tunnelsDisabled } from '../../shared/rust-api/query'; export const Route = createFileRoute('/full/tunnel-wizard')({ + beforeLoad: async ({ context }) => { + const instances = await context.queryClient.ensureQueryData(getInstancesQueryOptions); + if (tunnelsDisabled(instances)) { + throw redirect({ to: '/full/overview' }); + } + }, component: TunnelWizardPage, }); diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardConnectButton.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectButton.tsx index ee8edd0f2..9891a6fbc 100644 --- a/new-ui/src/shared/components/LocationCard/components/LocationCardConnectButton.tsx +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectButton.tsx @@ -1,6 +1,6 @@ import { useMutation } from '@tanstack/react-query'; import { api } from '../../../rust-api/api'; -import { LocationMfaMode } from '../../../rust-api/types'; +import { shouldStartMfa } from '../../../utils/mfa'; import { parseConnectError } from '../api/connectError'; import { useLocationCardContext } from '../context/context'; import { LocationCardViews } from '../context/types'; @@ -46,7 +46,7 @@ export const LocationCardConnectButton = () => { connectionType: location.connection_type, locationId: location.id, }); - } else if (location.location_mfa_mode !== LocationMfaMode.Disabled) { + } else if (shouldStartMfa(location)) { startMfa(); } else { connect({ diff --git a/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx index a3aa5cf59..b0d2d9891 100644 --- a/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx +++ b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx @@ -12,9 +12,10 @@ import { useConnectModal } from '../../../pages/full/OverviewPage/components/Con import { api } from '../../rust-api/api'; import { getAppConfigQueryOptions } from '../../rust-api/query'; import type { InstanceInfo, LocationInfo } from '../../rust-api/types'; -import { LocationMfaMode, MfaMethod } from '../../rust-api/types'; +import { MfaMethod } from '../../rust-api/types'; import { ThemeSpacing } from '../../types'; import { isPresent } from '../../utils/isPresent'; +import { shouldStartMfa } from '../../utils/mfa'; import { Divider } from '../Divider/Divider'; import { parseConnectError } from '../LocationCard/api/connectError'; import { ConnectButton } from '../LocationCard/components/ConnectButton/ConnectButton'; @@ -78,7 +79,7 @@ export const OverviewLocationCard = ({ location, instance }: Props) => { return; } - if (location.location_mfa_mode !== LocationMfaMode.Disabled) { + if (shouldStartMfa(location)) { useConnectModal.getState().open({ view: mfaMethodToConnectModalView(location.mfa_method ?? MfaMethod.Totp), location, diff --git a/new-ui/src/shared/providers/TauriEventProvider.tsx b/new-ui/src/shared/providers/TauriEventProvider.tsx index 1ba84d8bb..d6d8a46c5 100644 --- a/new-ui/src/shared/providers/TauriEventProvider.tsx +++ b/new-ui/src/shared/providers/TauriEventProvider.tsx @@ -17,6 +17,7 @@ import { type LocationInfo, MfaMethod, TauriEvent, + type TunnelsDisabledPayload, } from '../rust-api/types'; import { useAppStore } from '../store/useAppStore'; import { decideLocationMfaMethod } from '../utils/decideLocationMfaMethod'; @@ -162,6 +163,18 @@ export const TauriEventProvider = ({ children }: PropsWithChildren) => { listen(TauriEvent.SessionStateChanged, () => { void queryClient.invalidateQueries({ queryKey: ['session-state'] }); }), + + listen(TauriEvent.TunnelsDisabled, (event) => { + void debug(`UI Received event TunnelsDisabled: ${JSON.stringify(event.payload)}`); + void queryClient.invalidateQueries({ queryKey: ['instances'] }); + void queryClient.invalidateQueries({ queryKey: ['tunnels'] }); + }), + + listen(TauriEvent.TunnelsEnabled, () => { + void debug('UI Received event TunnelsEnabled'); + void queryClient.invalidateQueries({ queryKey: ['instances'] }); + void queryClient.invalidateQueries({ queryKey: ['tunnels'] }); + }), ]); return () => { diff --git a/new-ui/src/shared/rust-api/query.ts b/new-ui/src/shared/rust-api/query.ts index eaf79d39a..dbf02caba 100644 --- a/new-ui/src/shared/rust-api/query.ts +++ b/new-ui/src/shared/rust-api/query.ts @@ -2,7 +2,19 @@ import { queryOptions, skipToken } from '@tanstack/react-query'; import { isPresent } from '../utils/isPresent'; import { api } from './api'; -import type { ConnectionArgs, LocationDetailsArgs, StatsArgs } from './types'; +import type { + ConnectionArgs, + InstanceInfo, + LocationDetailsArgs, + StatsArgs, +} from './types'; + +/** + * Single source of truth for the OR-across-instances "tunnels disabled" rule: + * tunnels are disabled when any enrolled instance has the flag set. + */ +export const tunnelsDisabled = (instances: InstanceInfo[]): boolean => + instances.some((i) => i.disable_tunnels); export const getAllActiveConnectionQueryOptions = queryOptions({ queryKey: ['alive-connections'] as const, diff --git a/new-ui/src/shared/rust-api/types.ts b/new-ui/src/shared/rust-api/types.ts index dd3dd49f5..f6fc68fd0 100644 --- a/new-ui/src/shared/rust-api/types.ts +++ b/new-ui/src/shared/rust-api/types.ts @@ -166,6 +166,8 @@ export const TauriEvent = { MfaOpenIdError: 'mfa-openid-error', MfaMobileComplete: 'mfa-mobile-complete', MfaMobileError: 'mfa-mobile-error', + TunnelsDisabled: 'tunnel-disabled-by-policy', + TunnelsEnabled: 'tunnel-enabled-by-policy', } as const; export type TauriEventValue = (typeof TauriEvent)[keyof typeof TauriEvent]; @@ -190,6 +192,11 @@ export type AddInstanceEventPayload = { url: string; }; +/** Payload for the `tunnel-disabled-by-policy` event. Mirrors `TunnelsDisabled` in events.rs. */ +export type TunnelsDisabledPayload = { + names: string[]; +}; + export type ActiveConnectionSummary = { id: number; name: string; @@ -222,6 +229,7 @@ export type InstanceInfo = { pubkey: string; client_traffic_policy: ClientTrafficPolicy; enterprise_enabled: boolean; + disable_tunnels: boolean; openid_display_name: string | null; }; diff --git a/new-ui/src/shared/utils/mfa.ts b/new-ui/src/shared/utils/mfa.ts index 9179ce26f..c29b07d6c 100644 --- a/new-ui/src/shared/utils/mfa.ts +++ b/new-ui/src/shared/utils/mfa.ts @@ -1,4 +1,10 @@ -import { MfaMethod, type MfaMethodValue } from '../rust-api/types'; +import { + ConnectionType, + type LocationInfo, + LocationMfaMode, + MfaMethod, + type MfaMethodValue, +} from '../rust-api/types'; const mfaMethodLabels: Record = { [MfaMethod.Email]: 'Email', @@ -19,3 +25,13 @@ export const mfaMethodApiValues: Record = { }; export const mfaToApi = (factor: MfaMethodValue): string => mfaMethodApiValues[factor]; + +/** + * Whether connecting this location should trigger the MFA flow: only for + * server-managed locations (never bare tunnels) that have MFA enabled. + */ +export const shouldStartMfa = ( + location: Pick, +): boolean => + location.connection_type !== ConnectionType.Tunnel && + location.location_mfa_mode !== LocationMfaMode.Disabled; diff --git a/nix/package.nix b/nix/package.nix index 9b5420928..6099188da 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -20,7 +20,7 @@ categories = ["Network" "Security"]; }; - pnpm = pkgs.pnpm_11; + inherit (import ./versions.nix pkgs) nodejs pnpm; buildInputs = with pkgs; [ at-spi2-atk @@ -89,7 +89,7 @@ pname = "defguard-client-new-ui"; inherit version pnpm; src = ../new-ui; - fetcherVersion = 3; + fetcherVersion = 4; hash = "sha256-MGwjt5tV4Uhn0VvEouAij6ldgLR7Qj47TzbUVOTtlx8="; }; @@ -98,7 +98,7 @@ pname = "defguard-client-new-ui"; inherit version; src = ../new-ui; - nativeBuildInputs = [pkgs.nodejs_24 pnpm pnpmConfigHook]; + nativeBuildInputs = [nodejs pnpm pnpmConfigHook]; pnpmDeps = newUiPnpmDeps; buildPhase = '' runHook preBuild diff --git a/nix/shell.nix b/nix/shell.nix index 428c640c0..f3d5f7fa3 100644 --- a/nix/shell.nix +++ b/nix/shell.nix @@ -26,6 +26,8 @@ --config imports_granularity=Crate,group_imports=StdExternalCrate ''; + inherit (import ./versions.nix pkgs) nodejs pnpm; + craneLib = crane.mkLib pkgs; defguard-client = pkgs.callPackage ./package.nix { @@ -55,6 +57,8 @@ in desktop-file-utils xdg-utils just + nodejs + pnpm ]; shellHook = with pkgs; '' diff --git a/nix/versions.nix b/nix/versions.nix new file mode 100644 index 000000000..37e1357cf --- /dev/null +++ b/nix/versions.nix @@ -0,0 +1,16 @@ +# Single source of truth for the Node.js + pnpm versions used by both the +# Nix build (newUiDist in package.nix) and the dev shell (shell.nix), so the +# two can't drift. +# +# Node is derived from new-ui/.nvmrc - the same file nvm/fnm and CI read - so +# non-Nix developers, CI, and Nix all track one version. .nvmrc holds the +# major (e.g. "26"); Nix maps it to the matching nixpkgs attribute. The +# concrete patch version still comes from flake.lock's nixpkgs pin. +pkgs: let + nodeMajor = builtins.head ( + builtins.match "[^0-9]*([0-9]+).*" (builtins.readFile ../new-ui/.nvmrc) + ); +in { + nodejs = pkgs."nodejs_${nodeMajor}"; + pnpm = pkgs.pnpm_11; +} diff --git a/src-tauri/.sqlx/query-2d9b3c0595f2d385336d0a86cfdae1a4c327622977707117bf88b6a43e9e8f96.json b/src-tauri/.sqlx/query-76adc350233d50db611cc827bd0f7537a9ed4111c1401021fe3813cb3cafc6ee.json similarity index 83% rename from src-tauri/.sqlx/query-2d9b3c0595f2d385336d0a86cfdae1a4c327622977707117bf88b6a43e9e8f96.json rename to src-tauri/.sqlx/query-76adc350233d50db611cc827bd0f7537a9ed4111c1401021fe3813cb3cafc6ee.json index 13579fc7c..730494fa0 100644 --- a/src-tauri/.sqlx/query-2d9b3c0595f2d385336d0a86cfdae1a4c327622977707117bf88b6a43e9e8f96.json +++ b/src-tauri/.sqlx/query-76adc350233d50db611cc827bd0f7537a9ed4111c1401021fe3813cb3cafc6ee.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", client_traffic_policy, enterprise_enabled, openid_display_name FROM instance ORDER BY name ASC;", + "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", client_traffic_policy, enterprise_enabled, disable_tunnels, openid_display_name FROM instance ORDER BY name ASC;", "describe": { "columns": [ { @@ -49,8 +49,13 @@ "type_info": "Bool" }, { - "name": "openid_display_name", + "name": "disable_tunnels", "ordinal": 9, + "type_info": "Bool" + }, + { + "name": "openid_display_name", + "ordinal": 10, "type_info": "Text" } ], @@ -67,8 +72,9 @@ true, false, false, + false, true ] }, - "hash": "2d9b3c0595f2d385336d0a86cfdae1a4c327622977707117bf88b6a43e9e8f96" + "hash": "76adc350233d50db611cc827bd0f7537a9ed4111c1401021fe3813cb3cafc6ee" } diff --git a/src-tauri/.sqlx/query-0b161da55e36df9d0a10a52474a8cd49d4659d2d6faafdd2de0c985679d0703d.json b/src-tauri/.sqlx/query-8d99d5b737d20d54afb6e0708d7d1747a306bcd437b9adbad38b3627910a6185.json similarity index 55% rename from src-tauri/.sqlx/query-0b161da55e36df9d0a10a52474a8cd49d4659d2d6faafdd2de0c985679d0703d.json rename to src-tauri/.sqlx/query-8d99d5b737d20d54afb6e0708d7d1747a306bcd437b9adbad38b3627910a6185.json index 0f1dbfc0f..f2b6d853e 100644 --- a/src-tauri/.sqlx/query-0b161da55e36df9d0a10a52474a8cd49d4659d2d6faafdd2de0c985679d0703d.json +++ b/src-tauri/.sqlx/query-8d99d5b737d20d54afb6e0708d7d1747a306bcd437b9adbad38b3627910a6185.json @@ -1,12 +1,12 @@ { "db_name": "SQLite", - "query": "UPDATE instance SET name = $1, uuid = $2, url = $3, proxy_url = $4, username = $5, client_traffic_policy = $6, enterprise_enabled = $7, token = $8, openid_display_name = $9 WHERE id = $10;", + "query": "UPDATE instance SET name = $1, uuid = $2, url = $3, proxy_url = $4, username = $5, client_traffic_policy = $6, enterprise_enabled = $7, disable_tunnels = $8, token = $9, openid_display_name = $10 WHERE id = $11;", "describe": { "columns": [], "parameters": { - "Right": 10 + "Right": 11 }, "nullable": [] }, - "hash": "0b161da55e36df9d0a10a52474a8cd49d4659d2d6faafdd2de0c985679d0703d" + "hash": "8d99d5b737d20d54afb6e0708d7d1747a306bcd437b9adbad38b3627910a6185" } diff --git a/src-tauri/.sqlx/query-7b9e30e8f67a024fb1ad94f76d16a22e221bdffc8ee37b777f26d02988f69bb1.json b/src-tauri/.sqlx/query-c598f6e45f80389d4ceaf24a1d2fc854f048ef3679e8d07964cd7acefd8709d0.json similarity index 83% rename from src-tauri/.sqlx/query-7b9e30e8f67a024fb1ad94f76d16a22e221bdffc8ee37b777f26d02988f69bb1.json rename to src-tauri/.sqlx/query-c598f6e45f80389d4ceaf24a1d2fc854f048ef3679e8d07964cd7acefd8709d0.json index 3b65dac09..e511e531e 100644 --- a/src-tauri/.sqlx/query-7b9e30e8f67a024fb1ad94f76d16a22e221bdffc8ee37b777f26d02988f69bb1.json +++ b/src-tauri/.sqlx/query-c598f6e45f80389d4ceaf24a1d2fc854f048ef3679e8d07964cd7acefd8709d0.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", client_traffic_policy, enterprise_enabled, openid_display_name FROM instance WHERE id = $1;", + "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", client_traffic_policy, enterprise_enabled, disable_tunnels, openid_display_name FROM instance WHERE id = $1;", "describe": { "columns": [ { @@ -49,8 +49,13 @@ "type_info": "Bool" }, { - "name": "openid_display_name", + "name": "disable_tunnels", "ordinal": 9, + "type_info": "Bool" + }, + { + "name": "openid_display_name", + "ordinal": 10, "type_info": "Text" } ], @@ -67,8 +72,9 @@ true, false, false, + false, true ] }, - "hash": "7b9e30e8f67a024fb1ad94f76d16a22e221bdffc8ee37b777f26d02988f69bb1" + "hash": "c598f6e45f80389d4ceaf24a1d2fc854f048ef3679e8d07964cd7acefd8709d0" } diff --git a/src-tauri/.sqlx/query-c4a6b8e1c94eefc619c768ff4aac9aa248baf9553cea4f47ca9b1f6499bedaa3.json b/src-tauri/.sqlx/query-d72c4c19cf9ed8247137d760a64c2c182ff2958180096fc0c85425fe6279138d.json similarity index 55% rename from src-tauri/.sqlx/query-c4a6b8e1c94eefc619c768ff4aac9aa248baf9553cea4f47ca9b1f6499bedaa3.json rename to src-tauri/.sqlx/query-d72c4c19cf9ed8247137d760a64c2c182ff2958180096fc0c85425fe6279138d.json index ec67166eb..28ce0735d 100644 --- a/src-tauri/.sqlx/query-c4a6b8e1c94eefc619c768ff4aac9aa248baf9553cea4f47ca9b1f6499bedaa3.json +++ b/src-tauri/.sqlx/query-d72c4c19cf9ed8247137d760a64c2c182ff2958180096fc0c85425fe6279138d.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "INSERT INTO instance (name, uuid, url, proxy_url, username, token, client_traffic_policy , enterprise_enabled) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING id;", + "query": "INSERT INTO instance (name, uuid, url, proxy_url, username, token, client_traffic_policy , enterprise_enabled, disable_tunnels) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING id;", "describe": { "columns": [ { @@ -10,11 +10,11 @@ } ], "parameters": { - "Right": 8 + "Right": 9 }, "nullable": [ false ] }, - "hash": "c4a6b8e1c94eefc619c768ff4aac9aa248baf9553cea4f47ca9b1f6499bedaa3" + "hash": "d72c4c19cf9ed8247137d760a64c2c182ff2958180096fc0c85425fe6279138d" } diff --git a/src-tauri/.sqlx/query-157a0344c45c1b0567e8815c3f7b3667b753fb0b4b4c10d9d497b8f403ccb89d.json b/src-tauri/.sqlx/query-eaac354b13bef778b251addee9a8b91fce670a426d535f10de9f308a7db95484.json similarity index 83% rename from src-tauri/.sqlx/query-157a0344c45c1b0567e8815c3f7b3667b753fb0b4b4c10d9d497b8f403ccb89d.json rename to src-tauri/.sqlx/query-eaac354b13bef778b251addee9a8b91fce670a426d535f10de9f308a7db95484.json index 67d032fff..e93482981 100644 --- a/src-tauri/.sqlx/query-157a0344c45c1b0567e8815c3f7b3667b753fb0b4b4c10d9d497b8f403ccb89d.json +++ b/src-tauri/.sqlx/query-eaac354b13bef778b251addee9a8b91fce670a426d535f10de9f308a7db95484.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", client_traffic_policy, enterprise_enabled, openid_display_name FROM instance WHERE name = $1;", + "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", client_traffic_policy, enterprise_enabled, disable_tunnels, openid_display_name FROM instance WHERE name = $1;", "describe": { "columns": [ { @@ -49,8 +49,13 @@ "type_info": "Bool" }, { - "name": "openid_display_name", + "name": "disable_tunnels", "ordinal": 9, + "type_info": "Bool" + }, + { + "name": "openid_display_name", + "ordinal": 10, "type_info": "Text" } ], @@ -67,8 +72,9 @@ true, false, false, + false, true ] }, - "hash": "157a0344c45c1b0567e8815c3f7b3667b753fb0b4b4c10d9d497b8f403ccb89d" + "hash": "eaac354b13bef778b251addee9a8b91fce670a426d535f10de9f308a7db95484" } diff --git a/src-tauri/.sqlx/query-fa461f6de14068995ec4ed0bddcc6837e5029ca20131c35901be3e898dbefb1e.json b/src-tauri/.sqlx/query-fa461f6de14068995ec4ed0bddcc6837e5029ca20131c35901be3e898dbefb1e.json new file mode 100644 index 000000000..734a9188d --- /dev/null +++ b/src-tauri/.sqlx/query-fa461f6de14068995ec4ed0bddcc6837e5029ca20131c35901be3e898dbefb1e.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT disable_tunnels as \"disable_tunnels!\" FROM instance", + "describe": { + "columns": [ + { + "name": "disable_tunnels!", + "ordinal": 0, + "type_info": "Bool" + } + ], + "parameters": { + "Right": 0 + }, + "nullable": [ + false + ] + }, + "hash": "fa461f6de14068995ec4ed0bddcc6837e5029ca20131c35901be3e898dbefb1e" +} diff --git a/src-tauri/.sqlx/query-3a157b6bcdba07c456e924798f797cdbdd6290ef6fa0420ddc0682ab10e14727.json b/src-tauri/.sqlx/query-fb2ca29fd032be5e176379bd4da7fbab71aaa4c42fe8d8cde418708077622408.json similarity index 79% rename from src-tauri/.sqlx/query-3a157b6bcdba07c456e924798f797cdbdd6290ef6fa0420ddc0682ab10e14727.json rename to src-tauri/.sqlx/query-fb2ca29fd032be5e176379bd4da7fbab71aaa4c42fe8d8cde418708077622408.json index 79b463d4e..b75001f10 100644 --- a/src-tauri/.sqlx/query-3a157b6bcdba07c456e924798f797cdbdd6290ef6fa0420ddc0682ab10e14727.json +++ b/src-tauri/.sqlx/query-fb2ca29fd032be5e176379bd4da7fbab71aaa4c42fe8d8cde418708077622408.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token, client_traffic_policy, enterprise_enabled, openid_display_name FROM instance WHERE token IS NOT NULL ORDER BY name ASC;", + "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token, client_traffic_policy, enterprise_enabled, disable_tunnels, openid_display_name FROM instance WHERE token IS NOT NULL ORDER BY name ASC;", "describe": { "columns": [ { @@ -49,8 +49,13 @@ "type_info": "Bool" }, { - "name": "openid_display_name", + "name": "disable_tunnels", "ordinal": 9, + "type_info": "Bool" + }, + { + "name": "openid_display_name", + "ordinal": 10, "type_info": "Text" } ], @@ -67,8 +72,9 @@ true, false, false, + false, true ] }, - "hash": "3a157b6bcdba07c456e924798f797cdbdd6290ef6fa0420ddc0682ab10e14727" + "hash": "fb2ca29fd032be5e176379bd4da7fbab71aaa4c42fe8d8cde418708077622408" } diff --git a/src-tauri/client-cli/src/commands/connect.rs b/src-tauri/client-cli/src/commands/connect.rs index 8bc847662..72e16d5cc 100644 --- a/src-tauri/client-cli/src/commands/connect.rs +++ b/src-tauri/client-cli/src/commands/connect.rs @@ -53,6 +53,10 @@ pub async fn handle( let target = resolve_connect_target(&spec, &state.pool).await?; + if matches!(&target, ResolvedTarget::Tunnel(_)) { + Instance::ensure_tunnels_enabled(&state.pool).await?; + } + // Idempotency: if the target is already connected, report and exit 0. let (target_id, target_connection_type, target_name) = match &target { ResolvedTarget::Location(loc) => (loc.id, ConnectionType::Location, loc.name.as_str()), diff --git a/src-tauri/client-cli/src/commands/instance.rs b/src-tauri/client-cli/src/commands/instance.rs index 8b5415d90..7abe6c048 100644 --- a/src-tauri/client-cli/src/commands/instance.rs +++ b/src-tauri/client-cli/src/commands/instance.rs @@ -140,6 +140,7 @@ mod tests { token: None, client_traffic_policy: ClientTrafficPolicy::None, enterprise_enabled: false, + disable_tunnels: false, openid_display_name: None, } } diff --git a/src-tauri/client-cli/src/commands/list.rs b/src-tauri/client-cli/src/commands/list.rs index 3666cce1a..3d3eb2f32 100644 --- a/src-tauri/client-cli/src/commands/list.rs +++ b/src-tauri/client-cli/src/commands/list.rs @@ -16,7 +16,11 @@ const MIN_TUNNEL_NAME_COL_WIDTH: usize = 4; pub(crate) async fn handle(state: &State) -> Result { let instances = Instance::all(&state.pool).await?; let locations = Location::all(&state.pool, false).await?; - let tunnels = Tunnel::all(&state.pool).await?; + let tunnels = if Instance::tunnels_disabled(&state.pool).await? { + Vec::new() + } else { + Tunnel::all(&state.pool).await? + }; Ok(ListResult { instances, locations, @@ -194,6 +198,7 @@ mod tests { token: None, client_traffic_policy: ClientTrafficPolicy::None, enterprise_enabled: false, + disable_tunnels: false, openid_display_name: None, } } diff --git a/src-tauri/client-cli/src/commands/tunnel.rs b/src-tauri/client-cli/src/commands/tunnel.rs index 9fa069c7b..dc09f9444 100644 --- a/src-tauri/client-cli/src/commands/tunnel.rs +++ b/src-tauri/client-cli/src/commands/tunnel.rs @@ -1,4 +1,4 @@ -use defguard_core::database::models::{tunnel::Tunnel, Id}; +use defguard_core::database::models::{instance::Instance, tunnel::Tunnel, Id}; use serde_json::{json, Value}; use crate::{ @@ -11,11 +11,13 @@ const MIN_ADDR_COL_WIDTH: usize = 7; const MIN_ENDPOINT_COL_WIDTH: usize = 8; pub async fn handle_list(state: &State) -> Result { + Instance::ensure_tunnels_enabled(&state.pool).await?; let tunnels = Tunnel::all(&state.pool).await?; Ok(TunnelListResult { tunnels }) } pub async fn handle_show(state: &State, name: &str) -> Result { + Instance::ensure_tunnels_enabled(&state.pool).await?; let tunnels = Tunnel::find_by_name(&state.pool, name).await?; let tunnel = match tunnels.len() { 0 => { diff --git a/src-tauri/client-cli/src/resolve.rs b/src-tauri/client-cli/src/resolve.rs index 49a4a0775..f05366b0b 100644 --- a/src-tauri/client-cli/src/resolve.rs +++ b/src-tauri/client-cli/src/resolve.rs @@ -168,6 +168,7 @@ mod tests { token: None, client_traffic_policy: ClientTrafficPolicy::None, enterprise_enabled: false, + disable_tunnels: false, openid_display_name: None, } } diff --git a/src-tauri/client-cli/src/tests_daemon.rs b/src-tauri/client-cli/src/tests_daemon.rs index 8e404515a..7f298616d 100644 --- a/src-tauri/client-cli/src/tests_daemon.rs +++ b/src-tauri/client-cli/src/tests_daemon.rs @@ -170,6 +170,7 @@ async fn test_active_state_lists_interfaces(pool: DbPool) { token: None, client_traffic_policy: ClientTrafficPolicy::None, enterprise_enabled: false, + disable_tunnels: false, openid_display_name: None, } .save(&pool) diff --git a/src-tauri/core/src/database/models/connection.rs b/src-tauri/core/src/database/models/connection.rs index 4ea2d0076..9cb87d079 100644 --- a/src-tauri/core/src/database/models/connection.rs +++ b/src-tauri/core/src/database/models/connection.rs @@ -182,6 +182,7 @@ mod tests { token: None, client_traffic_policy: ClientTrafficPolicy::None, enterprise_enabled: false, + disable_tunnels: false, openid_display_name: None, } .save(pool) diff --git a/src-tauri/core/src/database/models/instance.rs b/src-tauri/core/src/database/models/instance.rs index 1b3a91e2a..38c03d587 100644 --- a/src-tauri/core/src/database/models/instance.rs +++ b/src-tauri/core/src/database/models/instance.rs @@ -1,7 +1,7 @@ use std::fmt; use serde::{Deserialize, Serialize}; -use sqlx::{prelude::Type, query, query_as, SqliteExecutor}; +use sqlx::{prelude::Type, query, query_as, query_scalar, SqliteExecutor}; use super::{Id, NoId}; use crate::proto; @@ -17,6 +17,7 @@ pub struct Instance { pub token: Option, pub client_traffic_policy: ClientTrafficPolicy, pub enterprise_enabled: bool, + pub disable_tunnels: bool, pub openid_display_name: Option, } @@ -39,6 +40,7 @@ impl From for Instance { token: None, client_traffic_policy, enterprise_enabled: instance_info.enterprise_enabled, + disable_tunnels: instance_info.disable_tunnels.unwrap_or(false), openid_display_name: instance_info.openid_display_name, } } @@ -51,9 +53,9 @@ impl Instance { { query!( "UPDATE instance SET name = $1, uuid = $2, url = $3, proxy_url = $4, username = $5, \ - client_traffic_policy = $6, enterprise_enabled = $7, token = $8, \ - openid_display_name = $9 \ - WHERE id = $10;", + client_traffic_policy = $6, enterprise_enabled = $7, disable_tunnels = $8, token = $9, \ + openid_display_name = $10 \ + WHERE id = $11;", self.name, self.uuid, self.url, @@ -61,6 +63,7 @@ impl Instance { self.username, self.client_traffic_policy, self.enterprise_enabled, + self.disable_tunnels, self.token, self.openid_display_name, self.id @@ -77,7 +80,7 @@ impl Instance { let instances = query_as!( Self, "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", \ - client_traffic_policy, enterprise_enabled, openid_display_name \ + client_traffic_policy, enterprise_enabled, disable_tunnels, openid_display_name \ FROM instance ORDER BY name ASC;" ) .fetch_all(executor) @@ -92,7 +95,7 @@ impl Instance { let instance = query_as!( Self, "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", \ - client_traffic_policy, enterprise_enabled, openid_display_name \ + client_traffic_policy, enterprise_enabled, disable_tunnels, openid_display_name \ FROM instance WHERE id = $1;", id ) @@ -108,7 +111,7 @@ impl Instance { let instance = query_as!( Self, "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", \ - client_traffic_policy, enterprise_enabled, openid_display_name \ + client_traffic_policy, enterprise_enabled, disable_tunnels, openid_display_name \ FROM instance WHERE name = $1;", name ) @@ -143,7 +146,7 @@ impl Instance { let instances = query_as!( Self, "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token, \ - client_traffic_policy, enterprise_enabled, openid_display_name \ + client_traffic_policy, enterprise_enabled, disable_tunnels, openid_display_name \ FROM instance \ WHERE token IS NOT NULL ORDER BY name ASC;" ) @@ -151,6 +154,30 @@ impl Instance { .await?; Ok(instances) } + + /// True if ANY enrolled instance has `disable_tunnels = true`. + /// False when there are 0 instances (no policy delivery path, so tunnels are available). + pub async fn tunnels_disabled<'e, E>(executor: E) -> Result + where + E: SqliteExecutor<'e>, + { + let flags = query_scalar!(r#"SELECT disable_tunnels as "disable_tunnels!" FROM instance"#) + .fetch_all(executor) + .await?; + Ok(!flags.is_empty() && flags.iter().any(|v| *v)) + } + + /// Hard-refuse guard for tunnel operations: returns `Error::TunnelsDisabled` + /// when any enrolled instance disables tunnels, `Ok(())` otherwise. + pub async fn ensure_tunnels_enabled<'e, E>(executor: E) -> Result<(), crate::error::Error> + where + E: SqliteExecutor<'e>, + { + if Self::tunnels_disabled(executor).await? { + return Err(crate::error::Error::TunnelsDisabled); + } + Ok(()) + } } // This compares proto::InstanceInfo, not to be confused with regular InstanceInfo defined below @@ -164,6 +191,7 @@ impl PartialEq for Instance { && self.username == other.username && self.client_traffic_policy == other_policy && self.enterprise_enabled == other.enterprise_enabled + && self.disable_tunnels == other.disable_tunnels.unwrap_or(false) && self.openid_display_name == other.openid_display_name } } @@ -177,8 +205,8 @@ impl Instance { let proxy_url = self.proxy_url.clone(); let result = query!( "INSERT INTO instance (name, uuid, url, proxy_url, username, token, \ - client_traffic_policy , enterprise_enabled) \ - VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING id;", + client_traffic_policy , enterprise_enabled, disable_tunnels) \ + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING id;", self.name, self.uuid, url, @@ -186,7 +214,8 @@ impl Instance { self.username, self.token, self.client_traffic_policy, - self.enterprise_enabled + self.enterprise_enabled, + self.disable_tunnels ) .fetch_one(executor) .await?; @@ -200,6 +229,7 @@ impl Instance { token: self.token, client_traffic_policy: self.client_traffic_policy, enterprise_enabled: self.enterprise_enabled, + disable_tunnels: self.disable_tunnels, openid_display_name: self.openid_display_name, }) } @@ -216,6 +246,7 @@ pub struct InstanceInfo { pub pubkey: String, pub client_traffic_policy: ClientTrafficPolicy, pub enterprise_enabled: bool, + pub disable_tunnels: bool, pub openid_display_name: Option, } @@ -295,6 +326,7 @@ mod tests { token: Some("token".into()), client_traffic_policy: ClientTrafficPolicy::None, enterprise_enabled: false, + disable_tunnels: false, openid_display_name: None, } } @@ -416,5 +448,97 @@ mod tests { assert!(instance.enterprise_enabled); assert_eq!(instance.openid_display_name, Some("OIDC".to_string())); assert_eq!(instance.client_traffic_policy, ClientTrafficPolicy::None); + assert!(!instance.disable_tunnels); + } + + fn new_instance_with_tunnels_disabled(disable: bool) -> Instance { + let mut inst = new_instance(); + inst.disable_tunnels = disable; + inst + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_tunnels_disabled_zero_instances(pool: SqlitePool) { + assert!(!Instance::tunnels_disabled(&pool).await.unwrap()); + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_tunnels_disabled_one_on(pool: SqlitePool) { + new_instance_with_tunnels_disabled(true) + .save(&pool) + .await + .unwrap(); + assert!(Instance::tunnels_disabled(&pool).await.unwrap()); + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_tunnels_disabled_one_off(pool: SqlitePool) { + new_instance_with_tunnels_disabled(false) + .save(&pool) + .await + .unwrap(); + assert!(!Instance::tunnels_disabled(&pool).await.unwrap()); + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_tunnels_disabled_mixed(pool: SqlitePool) { + new_instance_with_tunnels_disabled(true) + .save(&pool) + .await + .unwrap(); + new_instance_with_tunnels_disabled(false) + .save(&pool) + .await + .unwrap(); + assert!(Instance::tunnels_disabled(&pool).await.unwrap()); + } + + #[sqlx::test(migrations = "../migrations")] + async fn test_tunnels_disabled_all_off(pool: SqlitePool) { + new_instance_with_tunnels_disabled(false) + .save(&pool) + .await + .unwrap(); + new_instance_with_tunnels_disabled(false) + .save(&pool) + .await + .unwrap(); + assert!(!Instance::tunnels_disabled(&pool).await.unwrap()); + } + + #[test] + fn test_instance_from_proto_disable_tunnels_none() { + let info = base_info(); + let instance: Instance = info.into(); + assert!(!instance.disable_tunnels); + } + + #[test] + fn test_instance_from_proto_disable_tunnels_true() { + let mut info = base_info(); + info.disable_tunnels = Some(true); + let instance: Instance = info.into(); + assert!(instance.disable_tunnels); + } + + #[test] + fn test_instance_partial_eq_detect_disable_tunnels_flip() { + let mut info = base_info(); + info.disable_tunnels = Some(true); + let instance = Instance:: { + id: 1, + name: info.name.clone(), + uuid: info.id.clone(), + url: info.url.clone(), + proxy_url: info.proxy_url.clone(), + username: info.username.clone(), + token: Some("tok".into()), + client_traffic_policy: ClientTrafficPolicy::None, + enterprise_enabled: info.enterprise_enabled, + disable_tunnels: false, + openid_display_name: info.openid_display_name.clone(), + }; + // Model has false, proto has true → not equal. + assert_ne!(instance, info); } } diff --git a/src-tauri/core/src/database/models/location.rs b/src-tauri/core/src/database/models/location.rs index b46fefd62..297ecf179 100644 --- a/src-tauri/core/src/database/models/location.rs +++ b/src-tauri/core/src/database/models/location.rs @@ -593,6 +593,7 @@ mod tests { token: None, client_traffic_policy: ClientTrafficPolicy::None, enterprise_enabled: false, + disable_tunnels: false, openid_display_name: None, } } diff --git a/src-tauri/core/src/database/models/location_stats.rs b/src-tauri/core/src/database/models/location_stats.rs index 36d57432b..305157541 100644 --- a/src-tauri/core/src/database/models/location_stats.rs +++ b/src-tauri/core/src/database/models/location_stats.rs @@ -256,6 +256,7 @@ mod tests { token: None, client_traffic_policy: ClientTrafficPolicy::None, enterprise_enabled: false, + disable_tunnels: false, openid_display_name: None, } .save(pool) diff --git a/src-tauri/core/src/error.rs b/src-tauri/core/src/error.rs index 60b68484b..79fd8f1bf 100644 --- a/src-tauri/core/src/error.rs +++ b/src-tauri/core/src/error.rs @@ -42,6 +42,8 @@ pub enum Error { CommandError(String), #[error("Core is not enterprise")] CoreNotEnterprise, + #[error("Tunnels are disabled by the server administrator")] + TunnelsDisabled, #[error("Instance has no config polling token")] NoToken, #[error("Failed to lock app state member.")] diff --git a/src-tauri/core/src/events.rs b/src-tauri/core/src/events.rs index 2d3e1a69e..b09159472 100644 --- a/src-tauri/core/src/events.rs +++ b/src-tauri/core/src/events.rs @@ -21,6 +21,8 @@ pub enum EventKey { MfaOpenIdError, MfaMobileComplete, MfaMobileError, + TunnelsDisabled, + TunnelsEnabled, } impl From for &'static str { @@ -45,6 +47,8 @@ impl From for &'static str { EventKey::MfaOpenIdError => "mfa-openid-error", EventKey::MfaMobileComplete => "mfa-mobile-complete", EventKey::MfaMobileError => "mfa-mobile-error", + EventKey::TunnelsDisabled => "tunnel-disabled-by-policy", + EventKey::TunnelsEnabled => "tunnel-enabled-by-policy", } } } diff --git a/src-tauri/enterprise/config-sync/src/commands.rs b/src-tauri/enterprise/config-sync/src/commands.rs index d2992353b..12d70ab2f 100644 --- a/src-tauri/enterprise/config-sync/src/commands.rs +++ b/src-tauri/enterprise/config-sync/src/commands.rs @@ -68,6 +68,7 @@ pub async fn do_update_instance( } instance.client_traffic_policy = instance_info.client_traffic_policy.into(); instance.openid_display_name = instance_info.openid_display_name; + instance.disable_tunnels = instance_info.disable_tunnels.unwrap_or(false); instance.uuid = instance_info.id; if response.token.is_some() { instance.token = response.token; diff --git a/src-tauri/enterprise/config-sync/src/lib.rs b/src-tauri/enterprise/config-sync/src/lib.rs index 3a1bbe649..909a308e0 100644 --- a/src-tauri/enterprise/config-sync/src/lib.rs +++ b/src-tauri/enterprise/config-sync/src/lib.rs @@ -194,6 +194,19 @@ pub async fn poll_instance( ); if has_active_connections { + // add dedicated override to disable tunnels without waiting for a disconnect + if let Some(ref info) = device_config.instance { + let new_tunnels_disabled = info.disable_tunnels.unwrap_or(false); + if new_tunnels_disabled && !instance.disable_tunnels { + debug!( + "Tunnels were disabled for instance {}({}) while a connection is active, \ + persisting the flag immediately.", + instance.name, instance.id + ); + instance.disable_tunnels = true; + instance.save(transaction.as_mut()).await?; + } + } return Ok(PollInstanceResult::ChangedWhileActive { version_mismatch }); } @@ -520,6 +533,7 @@ mod tests { token: token.map(str::to_string), client_traffic_policy: ClientTrafficPolicy::None, enterprise_enabled: false, + disable_tunnels: false, openid_display_name: None, } } @@ -600,6 +614,7 @@ mod tests { token: token.map(str::to_string), client_traffic_policy: ClientTrafficPolicy::None, enterprise_enabled: true, + disable_tunnels: false, openid_display_name: None, } .save(pool) diff --git a/src-tauri/migrations/20260724000000_disable_tunnels.sql b/src-tauri/migrations/20260724000000_disable_tunnels.sql new file mode 100644 index 000000000..5094975e8 --- /dev/null +++ b/src-tauri/migrations/20260724000000_disable_tunnels.sql @@ -0,0 +1 @@ +ALTER TABLE instance ADD COLUMN disable_tunnels BOOLEAN NOT NULL DEFAULT FALSE; diff --git a/src-tauri/proto b/src-tauri/proto index 053e83dc4..cbb798774 160000 --- a/src-tauri/proto +++ b/src-tauri/proto @@ -1 +1 @@ -Subproject commit 053e83dc45f0effe19e4f7faad6ccba2c458c241 +Subproject commit cbb798774a48e77940de33b8d6df7dae519541a4 diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index e95355f91..efd634f47 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -55,7 +55,7 @@ use crate::{ DB_POOL, }, error::Error, - events::EventKey, + events::{EventKey, TunnelsDisabledPayload, TunnelsEnabledPayload}, into_location, log_watcher::{ global_log_watcher::{spawn_global_log_watcher_task, stop_global_log_watcher_task}, @@ -166,6 +166,7 @@ pub async fn connect( return Err(Error::NotFound.into()); } } else if let Some(tunnel) = Tunnel::find_by_id(&*DB_POOL, location_id).await? { + Instance::ensure_tunnels_enabled(&*DB_POOL).await?; debug!( "Identified tunnel with ID {location_id} as \"{}\", handling connection...", tunnel.name @@ -269,6 +270,39 @@ pub async fn disconnect( } } +pub async fn disconnect_all_tunnels(handle: &AppHandle) -> Result<(), Error> { + let state = handle.state::(); + let tunnel_ids = get_connection_id_by_type(ConnectionType::Tunnel).await; + if tunnel_ids.is_empty() { + debug!("No active tunnels to disconnect, emitting TunnelsDisabled event anyway"); + TunnelsDisabledPayload::emit(handle, Vec::new()); + return Ok(()); + } + + let mut names = Vec::new(); + for tunnel_id in &tunnel_ids { + let name = get_tunnel_or_location_name(*tunnel_id, ConnectionType::Tunnel).await; + debug!("Tunnels are disabled, disconnecting tunnel {name}(ID: {tunnel_id})"); + if let Some(connection) = state + .remove_connection(*tunnel_id, ConnectionType::Tunnel) + .await + { + disconnect_interface(&connection).await?; + stop_log_watcher_task(handle, &connection.interface_name)?; + info!("Tunnel {name}(ID: {tunnel_id}) disconnected (disabled by server administrator)"); + names.push(name); + } + } + + TunnelsDisabledPayload::emit(handle, names); + handle + .emit(EventKey::ConnectionChanged.into(), ()) + .map_err(tauri_err_to_app_err)?; + reload_tray_menu(handle).await; + configure_tray_icon(handle).await?; + Ok(()) +} + #[tauri::command(async)] pub async fn disconnect_locations(location_ids: Vec, handle: AppHandle) -> Result<(), Error> { debug!( @@ -433,6 +467,10 @@ pub async fn save_device_config( info!("New instance {instance} created."); trace!("Created following instance: {instance:#?}"); + if Instance::tunnels_disabled(&*DB_POOL).await? { + disconnect_all_tunnels(&handle).await?; + } + let locations = push_service_locations(&instance, keys).await?; handle @@ -542,6 +580,7 @@ pub async fn all_instances() -> Result>, Error> { pubkey: keys.pubkey, client_traffic_policy: instance.client_traffic_policy, enterprise_enabled: instance.enterprise_enabled, + disable_tunnels: instance.disable_tunnels, openid_display_name: instance.openid_display_name, }); } @@ -921,10 +960,15 @@ pub async fn delete_instance(instance_id: Id, handle: AppHandle) -> Result<(), E } } + let was_disabled = Instance::tunnels_disabled(&*DB_POOL).await?; instance.delete(&mut *transaction).await?; transaction.commit().await?; + if was_disabled && !Instance::tunnels_disabled(&*DB_POOL).await? { + TunnelsEnabledPayload::emit(&handle); + } + reload_tray_menu(&handle).await; configure_tray_icon(&handle).await?; @@ -985,10 +1029,15 @@ pub async fn delete_instance(instance_id: Id, handle: AppHandle) -> Result<(), E ); } } + let was_disabled = Instance::tunnels_disabled(&*DB_POOL).await?; instance.delete(&mut *transaction).await?; transaction.commit().await?; + if was_disabled && !Instance::tunnels_disabled(&*DB_POOL).await? { + TunnelsEnabledPayload::emit(&handle); + } + client .delete_service_locations(DeleteServiceLocationsRequest { instance_id: instance.uuid.clone(), @@ -1026,6 +1075,7 @@ pub fn parse_tunnel_config(filename: &str, config: &str) -> Result, handle: AppHandle) -> Result<(), Error> { + Instance::ensure_tunnels_enabled(&*DB_POOL).await?; debug!("Received tunnel configuration to update: {tunnel}"); tunnel.save(&*DB_POOL).await?; info!("The tunnel {tunnel} configuration has been updated."); @@ -1037,6 +1087,7 @@ pub async fn update_tunnel(mut tunnel: Tunnel, handle: AppHandle) -> Result< #[tauri::command(async)] pub async fn save_tunnel(tunnel: Tunnel, handle: AppHandle) -> Result<(), Error> { + Instance::ensure_tunnels_enabled(&*DB_POOL).await?; debug!("Received tunnel configuration to save: {tunnel}"); let tunnel = tunnel.save(&*DB_POOL).await?; info!("The tunnel {tunnel} configuration has been saved."); @@ -1059,6 +1110,11 @@ pub struct TunnelInfo { #[tauri::command(async)] pub async fn all_tunnels() -> Result>, Error> { + // Soft-hide: report no tunnels (rather than erroring) so callers render an empty + // list. Mutating/connecting commands hard-refuse via `ensure_tunnels_enabled`. + if Instance::tunnels_disabled(&*DB_POOL).await? { + return Ok(Vec::new()); + } trace!("Getting information about all tunnels"); let tunnels = Tunnel::all(&*DB_POOL).await?; @@ -1087,6 +1143,7 @@ pub async fn all_tunnels() -> Result>, Error> { #[tauri::command(async)] pub async fn tunnel_details(tunnel_id: Id) -> Result, Error> { + Instance::ensure_tunnels_enabled(&*DB_POOL).await?; debug!("Retrieving details about tunnel with ID {tunnel_id}."); if let Some(tunnel) = Tunnel::find_by_id(&*DB_POOL, tunnel_id).await? { diff --git a/src-tauri/src/events.rs b/src-tauri/src/events.rs index be4a2874f..2ff829ef6 100644 --- a/src-tauri/src/events.rs +++ b/src-tauri/src/events.rs @@ -68,6 +68,42 @@ pub struct AddInstancePayload<'a> { pub url: &'a str, } +#[derive(Clone, Serialize)] +pub struct TunnelsDisabledPayload { + pub names: Vec, +} + +impl TunnelsDisabledPayload { + pub fn emit(app_handle: &AppHandle, names: Vec) { + let payload = Self { names }; + for name in &payload.names { + if let Err(err) = app_handle + .notification() + .builder() + .title(format!("Tunnel {name} disconnected")) + .body("WireGuard tunnels have been disabled by the administrator.") + .show() + { + warn!("Tunnels disabled notification not shown. Reason: {err}"); + } + } + if let Err(err) = app_handle.emit(EventKey::TunnelsDisabled.into(), payload) { + error!("Event TunnelsDisabled was not emitted. Reason: {err}"); + } + } +} + +#[derive(Clone, Serialize)] +pub struct TunnelsEnabledPayload; + +impl TunnelsEnabledPayload { + pub fn emit(app_handle: &AppHandle) { + if let Err(err) = app_handle.emit(EventKey::TunnelsEnabled.into(), Self) { + error!("Event TunnelsEnabled was not emitted. Reason: {err}"); + } + } +} + /// Handle deep-link URLs. pub fn handle_deep_link(app_handle: &AppHandle, urls: &[Url]) { debug!("Deep link received."); diff --git a/src-tauri/src/periodic/config.rs b/src-tauri/src/periodic/config.rs index 30672e6c2..ad7b6ad5f 100644 --- a/src-tauri/src/periodic/config.rs +++ b/src-tauri/src/periodic/config.rs @@ -25,6 +25,8 @@ use sqlx::{Sqlite, Transaction}; use tauri::{AppHandle, Emitter}; use tokio::time::sleep; +use crate::{commands::disconnect_all_tunnels, events::TunnelsEnabledPayload}; + const INTERVAL_SECONDS: Duration = Duration::from_secs(30); /// Tracks instance IDs for which we already sent a version-mismatch notification, @@ -39,6 +41,7 @@ pub async fn poll_config(handle: AppHandle) { debug!("Starting the configuration polling loop."); // Polling starts sooner than app's frontend may load in dev builds, causing events (toasts) // to be lost; you may want to wait here before starting if you want to debug it. + let mut last_tunnels_disabled = false; loop { let active_instance_ids = match active_instance_ids().await { Ok(ids) => ids, @@ -103,6 +106,24 @@ pub async fn poll_config(handle: AppHandle) { if let Err(err) = handle.emit(EventKey::InstanceUpdate.into(), ()) { error!("Failed to emit instance update event to the frontend: {err}"); } + + let currently_disabled = Instance::tunnels_disabled(&*DB_POOL).await.unwrap_or(false); + + match (last_tunnels_disabled, currently_disabled) { + (false, true) => { + info!("Tunnels disabled by server administrator, disconnecting any active tunnels"); + if let Err(err) = disconnect_all_tunnels(&handle).await { + error!("Failed to disconnect tunnels after tunnels were disabled: {err}"); + } + } + (true, false) => { + info!("Tunnels re-enabled by server administrator"); + TunnelsEnabledPayload::emit(&handle); + } + _ => {} + } + last_tunnels_disabled = currently_disabled; + if config_retrieved > 0 { info!( "Automatically retrieved the newest instance configuration from core for {config_retrieved} instances, sleeping for {}s", From 8130f7fa7f46880fb952ed8d2cfa89732ebf5d2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20W=C3=B3jcik?= Date: Mon, 3 Aug 2026 07:44:32 +0200 Subject: [PATCH 131/155] chore: update Nix hash --- .github/workflows/update-pnpm-hash.yaml | 3 +++ nix/package.nix | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/update-pnpm-hash.yaml b/.github/workflows/update-pnpm-hash.yaml index 34460a140..c7b935ef1 100644 --- a/.github/workflows/update-pnpm-hash.yaml +++ b/.github/workflows/update-pnpm-hash.yaml @@ -4,6 +4,9 @@ on: pull_request: paths: - new-ui/pnpm-lock.yaml + - new-ui/.nvmrc + - nix/package.nix + - nix/versions.nix concurrency: group: pnpm-hash-${{ github.event.pull_request.number }} diff --git a/nix/package.nix b/nix/package.nix index 6099188da..5e42ddcef 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -90,7 +90,7 @@ inherit version pnpm; src = ../new-ui; fetcherVersion = 4; - hash = "sha256-MGwjt5tV4Uhn0VvEouAij6ldgLR7Qj47TzbUVOTtlx8="; + hash = "sha256-xhCc4laf+iuvZn5o0v/pzYa15ZqhF7TDwJDhN9xY17s="; }; # Pre-build the new UI frontend so Tauri can serve it as WebviewUrl::App("compact/") and "full/". From 65933798d2cbcfd7155a2583ea9fb3d8f6e316e4 Mon Sep 17 00:00:00 2001 From: Maciek <19913370+wojcik91@users.noreply.github.com> Date: Mon, 3 Aug 2026 09:22:19 +0200 Subject: [PATCH 132/155] show Edge communication errors for posture-check-only locations (#1074) * add service error to posture checks * trigger connection error in both views * split on error type --- .../src/shared/components/LocationCard/api/connectError.ts | 4 ++++ .../LocationCard/components/LocationCardConnectButton.tsx | 2 ++ .../components/OverviewLocationCard/OverviewLocationCard.tsx | 5 +++++ src-tauri/core/src/error.rs | 2 ++ src-tauri/enterprise/posture/src/posture.rs | 5 ++++- src-tauri/src/commands.rs | 3 +++ 6 files changed, 20 insertions(+), 1 deletion(-) diff --git a/new-ui/src/shared/components/LocationCard/api/connectError.ts b/new-ui/src/shared/components/LocationCard/api/connectError.ts index 828f64bb0..8f8913960 100644 --- a/new-ui/src/shared/components/LocationCard/api/connectError.ts +++ b/new-ui/src/shared/components/LocationCard/api/connectError.ts @@ -5,6 +5,10 @@ const connectErrorSchema = z.discriminatedUnion('kind', [ kind: z.literal('postureCheckFailed'), message: z.string(), }), + z.object({ + kind: z.literal('serviceUnavailable'), + message: z.string(), + }), z.object({ kind: z.literal('other'), message: z.string(), diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardConnectButton.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectButton.tsx index 9891a6fbc..c079c8784 100644 --- a/new-ui/src/shared/components/LocationCard/components/LocationCardConnectButton.tsx +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectButton.tsx @@ -23,6 +23,8 @@ export const LocationCardConnectButton = () => { ) { setPostureError(connectError.message); setView(LocationCardViews.PostureCheckFail); + } else if (connectError?.kind === 'serviceUnavailable') { + setView(LocationCardViews.ConnectionError); } }, meta: { diff --git a/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx index b0d2d9891..a76ee16c2 100644 --- a/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx +++ b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx @@ -53,6 +53,11 @@ export const OverviewLocationCard = ({ location, instance }: Props) => { view: ConnectModalView.PostureCheckFail, postureError: connectError.message, }); + } else if (connectError?.kind === 'serviceUnavailable') { + useConnectModal.getState().open({ + location, + view: ConnectModalView.ConnectionError, + }); } }, meta: { diff --git a/src-tauri/core/src/error.rs b/src-tauri/core/src/error.rs index 79fd8f1bf..d869511b0 100644 --- a/src-tauri/core/src/error.rs +++ b/src-tauri/core/src/error.rs @@ -56,6 +56,8 @@ pub enum Error { HttpError(String), #[error("Posture check failed: {0}")] PostureCheckFailed(String), + #[error("Service unavailable: {0}")] + ServiceUnavailable(String), } // we must manually implement serde::Serialize diff --git a/src-tauri/enterprise/posture/src/posture.rs b/src-tauri/enterprise/posture/src/posture.rs index 583a8221b..2c05b112d 100644 --- a/src-tauri/enterprise/posture/src/posture.rs +++ b/src-tauri/enterprise/posture/src/posture.rs @@ -50,7 +50,7 @@ pub async fn authorize_posture_session(location: &Location) -> Result { @@ -76,6 +76,9 @@ pub async fn authorize_posture_session(location: &Location) -> Result Err(Error::ServiceUnavailable(format!( + "Unexpected proxy response: {status}" + ))), status => Err(Error::HttpError(format!( "Unexpected proxy response: {status}" ))), diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index efd634f47..f6bd7141d 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -78,6 +78,8 @@ use crate::{ pub enum ConnectError { #[error("Posture check failed: {0}")] PostureCheckFailed(String), + #[error("Service unavailable: {0}")] + ServiceUnavailable(String), #[error("{0}")] Other(String), } @@ -86,6 +88,7 @@ impl From for ConnectError { fn from(error: Error) -> Self { match error { Error::PostureCheckFailed(message) => Self::PostureCheckFailed(message), + Error::ServiceUnavailable(message) => Self::ServiceUnavailable(message), error => Self::Other(error.to_string()), } } From 2c015130dc1918a365d9be0f4ebe34103ef88a76 Mon Sep 17 00:00:00 2001 From: Kuba <78603704+jakub-tldr@users.noreply.github.com> Date: Mon, 3 Aug 2026 13:04:11 +0200 Subject: [PATCH 133/155] Change component in APT (#1076) --- .github/workflows/update-repositories.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update-repositories.yml b/.github/workflows/update-repositories.yml index 6d9483084..9f610a2e6 100644 --- a/.github/workflows/update-repositories.yml +++ b/.github/workflows/update-repositories.yml @@ -46,9 +46,9 @@ jobs: - name: Upload DEB to APT repository run: | if [[ "${{ github.event.release.prerelease }}" == "true" ]]; then - component="pre-release" + component="pre-release-2.0" else - component="release" + component="release-2.0" fi for deb_file in debs/*.deb; do From e5b71ab0f6f9506357645463c158b5a18c374087 Mon Sep 17 00:00:00 2001 From: Jacek Chmielewski Date: Tue, 4 Aug 2026 11:24:21 +0200 Subject: [PATCH 134/155] Posture check authenticates the device with polling token (#1075) * posture check authenticates the device with polling token * bump proto * fix CVE * chore(nix): update new-ui pnpm deps hash --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- new-ui/pnpm-lock.yaml | 208 ++++++++++---------- nix/package.nix | 2 +- src-tauri/enterprise/posture/src/posture.rs | 8 + src-tauri/proto | 2 +- 4 files changed, 115 insertions(+), 105 deletions(-) diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index 05b25e098..3d6835bfe 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -31,7 +31,7 @@ importers: version: 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/router-plugin': specifier: ^1.168.20 - version: 1.168.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(rolldown@1.1.5)(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) + version: 1.168.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(rolldown@1.1.5)(supports-color@10.2.2)(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) '@tauri-apps/api': specifier: ^2.11.1 version: 2.11.1 @@ -100,7 +100,7 @@ importers: version: 3.5.0(react@19.2.7) react-markdown: specifier: ^10.1.0 - version: 10.1.0(@types/react@19.2.17)(react@19.2.7) + version: 10.1.0(@types/react@19.2.17)(react@19.2.7)(supports-color@10.2.2) rehype-raw: specifier: ^7.0.0 version: 7.0.0 @@ -109,7 +109,7 @@ importers: version: 6.0.0 remark-gfm: specifier: ^4.0.1 - version: 4.0.1 + version: 4.0.1(supports-color@10.2.2) rxjs: specifier: ^7.8.2 version: 7.8.2 @@ -143,19 +143,19 @@ importers: version: 6.0.3(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) autoprefixer: specifier: ^10.5.3 - version: 10.5.3(postcss@8.5.19) + version: 10.5.3(postcss@8.5.25) globals: specifier: ^17.7.0 version: 17.7.0 stylelint: specifier: ^17.14.0 - version: 17.14.0(typescript@6.0.3) + version: 17.14.0(supports-color@10.2.2)(typescript@6.0.3) stylelint-config-standard-scss: specifier: ^17.0.0 - version: 17.0.0(postcss@8.5.19)(stylelint@17.14.0(typescript@6.0.3)) + version: 17.0.0(postcss@8.5.25)(stylelint@17.14.0(supports-color@10.2.2)(typescript@6.0.3)) stylelint-scss: specifier: ^7.2.0 - version: 7.2.0(stylelint@17.14.0(typescript@6.0.3)) + version: 7.2.0(stylelint@17.14.0(supports-color@10.2.2)(typescript@6.0.3)) typescript: specifier: ~6.0.3 version: 6.0.3 @@ -1685,8 +1685,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.15: - resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -1762,8 +1762,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.19: - resolution: {integrity: sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==} + postcss@8.5.25: + resolution: {integrity: sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==} engines: {node: ^10 || ^12 || >=14} prettier@3.9.5: @@ -2201,20 +2201,20 @@ snapshots: '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.7': + '@babel/core@7.29.7(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helpers': 7.29.7 '@babel/parser': 7.29.7 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -2239,19 +2239,19 @@ snapshots: '@babel/helper-globals@7.29.7': {} - '@babel/helper-module-imports@7.29.7': + '@babel/helper-module-imports@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -2276,7 +2276,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/types': 7.29.7 - '@babel/traverse@7.29.7': + '@babel/traverse@7.29.7(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 @@ -2284,7 +2284,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/template': 7.29.7 '@babel/types': 7.29.7 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -2753,11 +2753,11 @@ snapshots: seroval: 1.5.5 seroval-plugins: 1.5.5(seroval@1.5.5) - '@tanstack/router-generator@1.167.19': + '@tanstack/router-generator@1.167.19(supports-color@10.2.2)': dependencies: '@babel/types': 7.29.7 '@tanstack/router-core': 1.171.15 - '@tanstack/router-utils': 1.162.2 + '@tanstack/router-utils': 1.162.2(supports-color@10.2.2) '@tanstack/virtual-file-routes': 1.162.0 jiti: 2.7.0 magic-string: 0.30.21 @@ -2766,14 +2766,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.168.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(rolldown@1.1.5)(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0))': + '@tanstack/router-plugin@1.168.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(rolldown@1.1.5)(supports-color@10.2.2)(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/template': 7.29.7 '@babel/types': 7.29.7 '@tanstack/router-core': 1.171.15 - '@tanstack/router-generator': 1.167.19 - '@tanstack/router-utils': 1.162.2 + '@tanstack/router-generator': 1.167.19(supports-color@10.2.2) + '@tanstack/router-utils': 1.162.2(supports-color@10.2.2) chokidar: 5.0.0 unplugin: 3.3.0(rolldown@1.1.5)(vite@8.1.5(@types/node@26.1.1)(jiti@2.7.0)(sass@1.101.0)) zod: 4.4.3 @@ -2790,13 +2790,13 @@ snapshots: - supports-color - unloader - '@tanstack/router-utils@1.162.2': + '@tanstack/router-utils@1.162.2(supports-color@10.2.2)': dependencies: '@babel/generator': 7.29.7 '@babel/parser': 7.29.7 '@babel/types': 7.29.7 ansis: 4.3.1 - babel-dead-code-elimination: 1.0.12 + babel-dead-code-elimination: 1.0.12(supports-color@10.2.2) diff: 8.0.4 pathe: 2.0.3 tinyglobby: 0.2.17 @@ -2915,20 +2915,20 @@ snapshots: astral-regex@2.0.0: {} - autoprefixer@10.5.3(postcss@8.5.19): + autoprefixer@10.5.3(postcss@8.5.25): dependencies: browserslist: 4.28.6 caniuse-lite: 1.0.30001806 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.19 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - babel-dead-code-elimination@1.0.12: + babel-dead-code-elimination@1.0.12(supports-color@10.2.2): dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/parser': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -3021,9 +3021,11 @@ snapshots: dayjs@1.11.21: {} - debug@4.4.3: + debug@4.4.3(supports-color@10.2.2): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 decode-named-character-reference@1.3.0: dependencies: @@ -3185,7 +3187,7 @@ snapshots: '@ungap/structured-clone': 1.3.3 unist-util-position: 5.0.0 - hast-util-to-jsx-runtime@2.3.6: + hast-util-to-jsx-runtime@2.3.6(supports-color@10.2.2): dependencies: '@types/estree': 1.0.9 '@types/hast': 3.0.5 @@ -3194,9 +3196,9 @@ snapshots: devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-mdx-expression: 2.0.1(supports-color@10.2.2) + mdast-util-mdx-jsx: 3.2.0(supports-color@10.2.2) + mdast-util-mdxjs-esm: 2.0.1(supports-color@10.2.2) property-information: 7.2.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.21 @@ -3388,14 +3390,14 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - mdast-util-from-markdown@2.0.3: + mdast-util-from-markdown@2.0.3(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.2 + micromark: 4.0.2(supports-color@10.2.2) micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.1 @@ -3413,67 +3415,67 @@ snapshots: mdast-util-find-and-replace: 3.0.2 micromark-util-character: 2.1.1 - mdast-util-gfm-footnote@2.1.0: + mdast-util-gfm-footnote@2.1.0(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: - supports-color - mdast-util-gfm-strikethrough@2.0.0: + mdast-util-gfm-strikethrough@2.0.0(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm-table@2.0.0: + mdast-util-gfm-table@2.0.0(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm-task-list-item@2.0.0: + mdast-util-gfm-task-list-item@2.0.0(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm@3.1.0: + mdast-util-gfm@3.1.0(supports-color@10.2.2): dependencies: - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@10.2.2) mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 - mdast-util-gfm-strikethrough: 2.0.0 - mdast-util-gfm-table: 2.0.0 - mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-gfm-footnote: 2.1.0(supports-color@10.2.2) + mdast-util-gfm-strikethrough: 2.0.0(supports-color@10.2.2) + mdast-util-gfm-table: 2.0.0(supports-color@10.2.2) + mdast-util-gfm-task-list-item: 2.0.0(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-expression@2.0.1: + mdast-util-mdx-expression@2.0.1(supports-color@10.2.2): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.2.0: + mdast-util-mdx-jsx@3.2.0(supports-color@10.2.2): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 @@ -3481,7 +3483,7 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -3490,13 +3492,13 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdxjs-esm@2.0.1: + mdast-util-mdxjs-esm@2.0.1(supports-color@10.2.2): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -3709,10 +3711,10 @@ snapshots: micromark-util-types@2.0.2: {} - micromark@4.0.2: + micromark@4.0.2(supports-color@10.2.2): dependencies: '@types/debug': 4.1.13 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -3752,7 +3754,7 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.15: {} + nanoid@3.3.16: {} node-addon-api@7.1.1: optional: true @@ -3828,13 +3830,13 @@ snapshots: postcss-resolve-nested-selector@0.1.6: {} - postcss-safe-parser@7.0.1(postcss@8.5.19): + postcss-safe-parser@7.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.19 + postcss: 8.5.25 - postcss-scss@4.0.9(postcss@8.5.19): + postcss-scss@4.0.9(postcss@8.5.25): dependencies: - postcss: 8.5.19 + postcss: 8.5.25 postcss-selector-parser@7.1.4: dependencies: @@ -3843,9 +3845,9 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.19: + postcss@8.5.25: dependencies: - nanoid: 3.3.15 + nanoid: 3.3.16 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -3879,17 +3881,17 @@ snapshots: dependencies: react: 19.2.7 - react-markdown@10.1.0(@types/react@19.2.17)(react@19.2.7): + react-markdown@10.1.0(@types/react@19.2.17)(react@19.2.7)(supports-color@10.2.2): dependencies: '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/react': 19.2.17 devlop: 1.1.0 - hast-util-to-jsx-runtime: 2.3.6 + hast-util-to-jsx-runtime: 2.3.6(supports-color@10.2.2) html-url-attributes: 3.0.1 mdast-util-to-hast: 13.2.1 react: 19.2.7 - remark-parse: 11.0.0 + remark-parse: 11.0.0(supports-color@10.2.2) remark-rehype: 11.1.2 unified: 11.0.5 unist-util-visit: 5.1.0 @@ -3912,21 +3914,21 @@ snapshots: '@types/hast': 3.0.5 hast-util-sanitize: 5.0.2 - remark-gfm@4.0.1: + remark-gfm@4.0.1(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0 + mdast-util-gfm: 3.1.0(supports-color@10.2.2) micromark-extension-gfm: 3.0.0 - remark-parse: 11.0.0 + remark-parse: 11.0.0(supports-color@10.2.2) remark-stringify: 11.0.0 unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-parse@11.0.0: + remark-parse@11.0.0(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@10.2.2) micromark-util-types: 2.0.2 unified: 11.0.5 transitivePeerDependencies: @@ -4047,33 +4049,33 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - stylelint-config-recommended-scss@17.0.1(postcss@8.5.19)(stylelint@17.14.0(typescript@6.0.3)): + stylelint-config-recommended-scss@17.0.1(postcss@8.5.25)(stylelint@17.14.0(supports-color@10.2.2)(typescript@6.0.3)): dependencies: - postcss-scss: 4.0.9(postcss@8.5.19) - stylelint: 17.14.0(typescript@6.0.3) - stylelint-config-recommended: 18.0.0(stylelint@17.14.0(typescript@6.0.3)) - stylelint-scss: 7.2.0(stylelint@17.14.0(typescript@6.0.3)) + postcss-scss: 4.0.9(postcss@8.5.25) + stylelint: 17.14.0(supports-color@10.2.2)(typescript@6.0.3) + stylelint-config-recommended: 18.0.0(stylelint@17.14.0(supports-color@10.2.2)(typescript@6.0.3)) + stylelint-scss: 7.2.0(stylelint@17.14.0(supports-color@10.2.2)(typescript@6.0.3)) optionalDependencies: - postcss: 8.5.19 + postcss: 8.5.25 - stylelint-config-recommended@18.0.0(stylelint@17.14.0(typescript@6.0.3)): + stylelint-config-recommended@18.0.0(stylelint@17.14.0(supports-color@10.2.2)(typescript@6.0.3)): dependencies: - stylelint: 17.14.0(typescript@6.0.3) + stylelint: 17.14.0(supports-color@10.2.2)(typescript@6.0.3) - stylelint-config-standard-scss@17.0.0(postcss@8.5.19)(stylelint@17.14.0(typescript@6.0.3)): + stylelint-config-standard-scss@17.0.0(postcss@8.5.25)(stylelint@17.14.0(supports-color@10.2.2)(typescript@6.0.3)): dependencies: - stylelint: 17.14.0(typescript@6.0.3) - stylelint-config-recommended-scss: 17.0.1(postcss@8.5.19)(stylelint@17.14.0(typescript@6.0.3)) - stylelint-config-standard: 40.0.0(stylelint@17.14.0(typescript@6.0.3)) + stylelint: 17.14.0(supports-color@10.2.2)(typescript@6.0.3) + stylelint-config-recommended-scss: 17.0.1(postcss@8.5.25)(stylelint@17.14.0(supports-color@10.2.2)(typescript@6.0.3)) + stylelint-config-standard: 40.0.0(stylelint@17.14.0(supports-color@10.2.2)(typescript@6.0.3)) optionalDependencies: - postcss: 8.5.19 + postcss: 8.5.25 - stylelint-config-standard@40.0.0(stylelint@17.14.0(typescript@6.0.3)): + stylelint-config-standard@40.0.0(stylelint@17.14.0(supports-color@10.2.2)(typescript@6.0.3)): dependencies: - stylelint: 17.14.0(typescript@6.0.3) - stylelint-config-recommended: 18.0.0(stylelint@17.14.0(typescript@6.0.3)) + stylelint: 17.14.0(supports-color@10.2.2)(typescript@6.0.3) + stylelint-config-recommended: 18.0.0(stylelint@17.14.0(supports-color@10.2.2)(typescript@6.0.3)) - stylelint-scss@7.2.0(stylelint@17.14.0(typescript@6.0.3)): + stylelint-scss@7.2.0(stylelint@17.14.0(supports-color@10.2.2)(typescript@6.0.3)): dependencies: '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) @@ -4086,9 +4088,9 @@ snapshots: postcss-resolve-nested-selector: 0.1.6 postcss-selector-parser: 7.1.4 postcss-value-parser: 4.2.0 - stylelint: 17.14.0(typescript@6.0.3) + stylelint: 17.14.0(supports-color@10.2.2)(typescript@6.0.3) - stylelint@17.14.0(typescript@6.0.3): + stylelint@17.14.0(supports-color@10.2.2)(typescript@6.0.3): dependencies: '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) @@ -4101,7 +4103,7 @@ snapshots: cosmiconfig: 9.0.2(typescript@6.0.3) css-functions-list: 3.3.3 css-tree: 3.2.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) fast-glob: 3.3.3 fastest-levenshtein: 1.0.16 file-entry-cache: 11.1.5 @@ -4116,8 +4118,8 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.19 - postcss-safe-parser: 7.0.1(postcss@8.5.19) + postcss: 8.5.25 + postcss-safe-parser: 7.0.1(postcss@8.5.25) postcss-selector-parser: 7.1.4 postcss-value-parser: 4.2.0 string-width: 8.2.2 @@ -4242,7 +4244,7 @@ snapshots: dependencies: lightningcss: 1.32.0 picomatch: 4.0.5 - postcss: 8.5.19 + postcss: 8.5.25 rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: diff --git a/nix/package.nix b/nix/package.nix index 5e42ddcef..d801112b4 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -90,7 +90,7 @@ inherit version pnpm; src = ../new-ui; fetcherVersion = 4; - hash = "sha256-xhCc4laf+iuvZn5o0v/pzYa15ZqhF7TDwJDhN9xY17s="; + hash = "sha256-UfOXEXdeCsx5gmdcmXG30db8fndQWKs6/0IzQFvRR5U="; }; # Pre-build the new UI frontend so Tauri can serve it as WebviewUrl::App("compact/") and "full/". diff --git a/src-tauri/enterprise/posture/src/posture.rs b/src-tauri/enterprise/posture/src/posture.rs index 2c05b112d..90d7bb60c 100644 --- a/src-tauri/enterprise/posture/src/posture.rs +++ b/src-tauri/enterprise/posture/src/posture.rs @@ -34,12 +34,20 @@ pub async fn authorize_posture_session(location: &Location) -> Result Date: Tue, 4 Aug 2026 15:07:03 +0200 Subject: [PATCH 135/155] run sccache earlier (#1077) --- .github/workflows/build-macos.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-macos.yaml b/.github/workflows/build-macos.yaml index 88d64f604..d1ff71290 100644 --- a/.github/workflows/build-macos.yaml +++ b/.github/workflows/build-macos.yaml @@ -72,12 +72,12 @@ jobs: with: targets: aarch64-apple-darwin,x86_64-apple-darwin - - name: Install tauri-cli - run: cargo install tauri-cli --locked - - name: Run sccache-cache uses: mozilla-actions/sccache-action@v0.0.10 + - name: Install tauri-cli + run: cargo install tauri-cli --locked + - name: Set build number run: | sed -i '' "s,@BUILD_NUMBER@,${{ github.run_number }}," swift/extension/VPNExtension.xcodeproj/project.pbxproj From dc21e9c34765864a6d51521b26f6ed7fad2d8bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= <102536422+filipslezaklab@users.noreply.github.com> Date: Thu, 6 Aug 2026 09:47:15 +0200 Subject: [PATCH 136/155] fix tunnel events (#1082) fix disconnect tunnel from connection watcher --- .../ConnectionWatcher/ConnectionsWatcher.tsx | 37 +++++++++++++++---- .../shared/providers/TauriEventProvider.tsx | 2 + 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx b/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx index 99a9c687e..7a1ab3b99 100644 --- a/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx +++ b/new-ui/src/shared/components/WindowHeader/components/ConnectionWatcher/ConnectionsWatcher.tsx @@ -14,7 +14,8 @@ import { } from '@floating-ui/react'; import { useMutation, useQuery } from '@tanstack/react-query'; import clsx from 'clsx'; -import { useEffect, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; +import { Snackbar } from '../../../../providers/snackbar/snackbar'; import { api } from '../../../../rust-api/api'; import { Direction, ThemeSpacing, ThemeVariable } from '../../../../types'; import { isPresent } from '../../../../utils/isPresent'; @@ -28,7 +29,10 @@ type Props = { export const ConnectionWatcher = ({ placement = 'bottom-start' }: Props) => { const { mutate: disconnect } = useMutation({ - mutationFn: api.disconnectLocations, + mutationFn: api.disconnect, + onError: () => { + Snackbar.error('Failed to disconnect.'); + }, }); const { data: connections } = useQuery({ @@ -41,6 +45,25 @@ export const ConnectionWatcher = ({ placement = 'bottom-start' }: Props) => { const [floatingOpen, setFloatingOpen] = useState(false); + const disconnectAllPromise = useMemo(() => { + return () => + Promise.all( + (connections ?? []).map((connection) => + api.disconnect({ + locationId: connection.id, + connectionType: connection.connection_type, + }), + ), + ); + }, [connections]); + + const { mutate: disconnectAll } = useMutation({ + mutationFn: disconnectAllPromise, + onError: () => { + Snackbar.error('Failed to disconnect all locations.'); + }, + }); + useEffect(() => { if (!connected) { setFloatingOpen(false); @@ -114,7 +137,10 @@ export const ConnectionWatcher = ({ placement = 'bottom-start' }: Props) => { className="connection" key={con.id} onClick={() => { - disconnect([con.id]); + disconnect({ + locationId: con.id, + connectionType: con.connection_type, + }); }} > {
    From f207a1da6fcb167e07cfbc48584114ab57f1bee3 Mon Sep 17 00:00:00 2001 From: Kuba <78603704+jakub-tldr@users.noreply.github.com> Date: Tue, 18 Aug 2026 12:19:38 +0200 Subject: [PATCH 146/155] Show correct "active mfa" label (#1114) --- .../LocationCard/context/context.tsx | 13 +++++-- src-tauri/Cargo.lock | 38 +++++++++---------- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/new-ui/src/shared/components/LocationCard/context/context.tsx b/new-ui/src/shared/components/LocationCard/context/context.tsx index c7cc59f32..e9ae26d32 100644 --- a/new-ui/src/shared/components/LocationCard/context/context.tsx +++ b/new-ui/src/shared/components/LocationCard/context/context.tsx @@ -12,6 +12,7 @@ import { api } from '../../../rust-api/api'; import type { InstanceInfo, LocationInfo } from '../../../rust-api/types'; import { ConnectionType, MfaMethod, type MfaMethodValue } from '../../../rust-api/types'; import { useAppStore } from '../../../store/useAppStore'; +import { isPresent } from '../../../utils/isPresent'; import { LocationCardViews, type LocationCardViewsValue } from './types'; interface LocationCardContextValue { @@ -50,7 +51,8 @@ export const LocationCardProvider = ({ children, }: LocationCardProviderProps) => { const conTypeSetOnce = useRef(false); - const { setConnectionMethod } = useAppData(); + const mfaStarted = useRef(false); + const { connectionMfaMethod, setConnectionMethod } = useAppData(); const [autoConnectOpenid, setAutoConnectOpenid] = useState(false); const [previousView, setPreviousView] = useState(null); const [postureError, setPostureError] = useState(null); @@ -81,6 +83,7 @@ export const LocationCardProvider = ({ ); const startMfa = useCallback(async () => { + mfaStarted.current = true; const appConfig = await api.getAppConfig(); setAutoConnectOpenid(appConfig.auto_start_openid_mfa); switch (mfaMethod) { @@ -120,11 +123,15 @@ export const LocationCardProvider = ({ location.connection_type !== ConnectionType.Tunnel && !conTypeSetOnce.current ) { - conTypeSetOnce.current = true; - setConnectionMethod(location.id, location.connection_type, mfaMethod); + const key = `${location.connection_type.toLowerCase()}-${location.id}`; + if (mfaStarted.current || !isPresent(connectionMfaMethod[key])) { + conTypeSetOnce.current = true; + setConnectionMethod(location.id, location.connection_type, mfaMethod); + } } if (!location.active) { conTypeSetOnce.current = false; + mfaStarted.current = false; } }, [location.active]); diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 473996d99..664d45602 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -128,7 +128,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -139,7 +139,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -1958,7 +1958,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.2", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2233,7 +2233,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -2910,9 +2910,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.15" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" +checksum = "a9f37a958b41b3b19ee2707c06439c0e9e547e847223eb791ecb0cb821c65e27" dependencies = [ "atomic-waker", "bytes", @@ -3463,7 +3463,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -3713,7 +3713,7 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a1886916523694cd6ea3d175f03a1e5010699a2a4cc13696d83d7bea1d80638" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4044,7 +4044,7 @@ dependencies = [ "png 0.18.1", "serde", "thiserror 2.0.20", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -4237,7 +4237,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4797,7 +4797,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.45.0", ] [[package]] @@ -5436,7 +5436,7 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -5918,7 +5918,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -5977,7 +5977,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6444,7 +6444,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -7481,7 +7481,7 @@ dependencies = [ "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -8056,7 +8056,7 @@ dependencies = [ "png 0.18.1", "serde", "thiserror 2.0.20", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -8113,7 +8113,7 @@ checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" dependencies = [ "memoffset", "tempfile", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -8735,7 +8735,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.48.0", ] [[package]] From 2fe15ba0df7020cfefffc86199a53988be003b62 Mon Sep 17 00:00:00 2001 From: Kuba <78603704+jakub-tldr@users.noreply.github.com> Date: Tue, 18 Aug 2026 16:54:31 +0200 Subject: [PATCH 147/155] Display correct routing labels in CLI/UI (#1116) --- .../LocationCardConnectionTiles.tsx | 16 +- .../views/ConnectedView/ConnectedView.tsx | 8 +- .../OverviewLocationCard.tsx | 6 +- src-tauri/client-cli/src/commands/list.rs | 48 +++-- src-tauri/client-cli/src/commands/location.rs | 164 ++++++++++++++---- 5 files changed, 186 insertions(+), 56 deletions(-) diff --git a/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/LocationCardConnectionTiles.tsx b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/LocationCardConnectionTiles.tsx index fa31c17de..a0331475b 100644 --- a/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/LocationCardConnectionTiles.tsx +++ b/new-ui/src/shared/components/LocationCard/components/LocationCardConnectionTiles/LocationCardConnectionTiles.tsx @@ -2,7 +2,12 @@ import './style.scss'; import clsx from 'clsx'; import { useMemo } from 'react'; import { useAppData } from '../../../../providers/AppDataContext'; -import { type LocationInfo, LocationMfaMode } from '../../../../rust-api/types'; +import { + ClientTrafficPolicy, + type InstanceInfo, + type LocationInfo, + LocationMfaMode, +} from '../../../../rust-api/types'; import { isPresent } from '../../../../utils/isPresent'; import { mfaToText } from '../../../../utils/mfa'; import { BoxIcon } from '../../../BoxIcon/BoxIcon'; @@ -11,11 +16,16 @@ import { Icon, IconKind } from '../../../Icon'; interface Props { variant: 'compact' | 'full'; location: LocationInfo; + instance?: InstanceInfo; } -export const LocationCardConnectionTiles = ({ location, variant }: Props) => { +export const LocationCardConnectionTiles = ({ location, instance, variant }: Props) => { const { connectionMfaMethod } = useAppData(); + const routeAllTraffic = + location.route_all_traffic || + instance?.client_traffic_policy === ClientTrafficPolicy.ForceAllTraffic; + const mfaMethod = useMemo(() => { const key = `${location.connection_type.toLowerCase()}-${location.id}`; const method = connectionMfaMethod[key]; @@ -30,7 +40,7 @@ export const LocationCardConnectionTiles = ({ location, variant }: Props) => {

    Allowed traffic

    - {location.route_all_traffic ? 'All traffic' : 'Predefined traffic'} + {routeAllTraffic ? 'All traffic' : 'Predefined traffic'}

    {location.location_mfa_mode !== LocationMfaMode.Disabled && diff --git a/new-ui/src/shared/components/LocationCard/views/ConnectedView/ConnectedView.tsx b/new-ui/src/shared/components/LocationCard/views/ConnectedView/ConnectedView.tsx index bfade887e..7b1b0c30e 100644 --- a/new-ui/src/shared/components/LocationCard/views/ConnectedView/ConnectedView.tsx +++ b/new-ui/src/shared/components/LocationCard/views/ConnectedView/ConnectedView.tsx @@ -7,12 +7,16 @@ import { LocationCardConnectionTiles } from '../../components/LocationCardConnec import { useLocationCardContext } from '../../context/context'; export const ConnectedView = () => { - const { location } = useLocationCardContext(); + const { location, instance } = useLocationCardContext(); return (
    - + diff --git a/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx index a76ee16c2..a224906f8 100644 --- a/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx +++ b/new-ui/src/shared/components/OverviewLocationCard/OverviewLocationCard.tsx @@ -128,7 +128,11 @@ export const OverviewLocationCard = ({ location, instance }: Props) => {
    {location.active && ( - + )} {!location.active && ( diff --git a/src-tauri/client-cli/src/commands/list.rs b/src-tauri/client-cli/src/commands/list.rs index 3d3eb2f32..9228ebf9f 100644 --- a/src-tauri/client-cli/src/commands/list.rs +++ b/src-tauri/client-cli/src/commands/list.rs @@ -1,6 +1,11 @@ use std::collections::HashMap; -use defguard_core::database::models::{instance::Instance, location::Location, tunnel::Tunnel, Id}; +use defguard_core::database::models::{ + instance::{ClientTrafficPolicy, Instance}, + location::Location, + tunnel::Tunnel, + Id, +}; use serde_json::{json, Value}; use crate::{ @@ -44,10 +49,10 @@ impl CommandOutput for ListResult { } fn json(&self) -> Value { - let instance_names = self + let instances_by_id = self .instances .iter() - .map(|i| (i.id, i.name.clone())) + .map(|i| (i.id, i)) .collect::>(); let instances = self @@ -63,15 +68,25 @@ impl CommandOutput for ListResult { let locations = self .locations .iter() - .map(|l| LocationEntry { - id: l.id, - name: l.name.clone(), - instance: instance_names.get(&l.instance_id).cloned(), - address: l.address.clone(), - endpoint: l.endpoint.clone(), - mfa_enabled: Some(l.mfa_enabled()), - mfa_method: Some(mfa_label(l.mfa_method).to_string()), - route_all_traffic: Some(l.route_all_traffic), + .map(|l| { + let instance = instances_by_id.get(&l.instance_id); + let route_all_traffic = match instance + .map_or(&ClientTrafficPolicy::None, |i| &i.client_traffic_policy) + { + ClientTrafficPolicy::None => l.route_all_traffic, + ClientTrafficPolicy::DisableAllTraffic => false, + ClientTrafficPolicy::ForceAllTraffic => true, + }; + LocationEntry { + id: l.id, + name: l.name.clone(), + instance: instance.map(|i| i.name.clone()), + address: l.address.clone(), + endpoint: l.endpoint.clone(), + mfa_enabled: Some(l.mfa_enabled()), + mfa_method: Some(mfa_label(l.mfa_method).to_string()), + route_all_traffic: Some(route_all_traffic), + } }) .collect::>(); @@ -131,11 +146,18 @@ fn format_list_table( )); for location in locations { let mfa = if location.mfa_enabled() { "yes" } else { "no" }; - let route_label = if location.route_all_traffic { + let route_all_traffic = match instance.client_traffic_policy { + ClientTrafficPolicy::None => location.route_all_traffic, + ClientTrafficPolicy::DisableAllTraffic => false, + ClientTrafficPolicy::ForceAllTraffic => true, + }; + + let route_label = if route_all_traffic { "All-traffic" } else { "Predefined" }; + lines.push(format!( " {:>4} {:3} {route_label:<11}", location.id, location.name, location.address, location.endpoint diff --git a/src-tauri/client-cli/src/commands/location.rs b/src-tauri/client-cli/src/commands/location.rs index 503e07a7c..139ac4dc7 100644 --- a/src-tauri/client-cli/src/commands/location.rs +++ b/src-tauri/client-cli/src/commands/location.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use defguard_core::database::models::{ - instance::Instance, + instance::{ClientTrafficPolicy, Instance}, location::{Location, LocationMfaMethod}, Id, }; @@ -20,15 +20,23 @@ const MIN_INST_COL_WIDTH: usize = 8; pub(crate) async fn handle_list(state: &State) -> Result { let locations = Location::all(&state.pool, false).await?; - let instance_names = Instance::all(&state.pool) + let instance_details = Instance::all(&state.pool) .await? .into_iter() - .map(|inst| (inst.id, inst.name)) + .map(|instance| { + ( + instance.id, + InstanceDetails { + name: instance.name, + client_traffic_policy: instance.client_traffic_policy, + }, + ) + }) .collect::>(); Ok(LocationListResult { locations, - instance_names, + instance_details, }) } @@ -93,6 +101,11 @@ pub async fn handle_show( let ResolvedTarget::Location(location) = &target else { return Err(CliError::NotFound(format!("Location '{name}' not found"))); }; + let client_traffic_policy = Instance::find_by_id(&state.pool, location.instance_id) + .await? + .map_or(ClientTrafficPolicy::None, |instance| { + instance.client_traffic_policy + }); Ok(LocationShowResult { name: location.name.clone(), @@ -102,7 +115,11 @@ pub async fn handle_show( allowed_ips: location.allowed_ips.clone(), dns: location.dns.clone(), mfa_method: mfa_label(location.mfa_method).to_string(), - route_all_traffic: location.route_all_traffic, + route_all_traffic: match client_traffic_policy { + ClientTrafficPolicy::None => location.route_all_traffic, + ClientTrafficPolicy::DisableAllTraffic => false, + ClientTrafficPolicy::ForceAllTraffic => true, + }, keepalive_interval: location.keepalive_interval, }) } @@ -127,9 +144,14 @@ pub(crate) fn mfa_label(method: Option) -> &'static str { } } +pub(crate) struct InstanceDetails { + pub name: String, + pub client_traffic_policy: ClientTrafficPolicy, +} + pub struct LocationListResult { pub locations: Vec>, - pub instance_names: HashMap, + pub instance_details: HashMap, } impl CommandOutput for LocationListResult { @@ -137,7 +159,7 @@ impl CommandOutput for LocationListResult { if self.locations.is_empty() { "No locations configured. Use the desktop app to enroll an instance first.".to_string() } else { - format_location_list_table(&self.locations, &self.instance_names) + format_location_list_table(&self.locations, &self.instance_details) } } @@ -145,15 +167,26 @@ impl CommandOutput for LocationListResult { let locations = self .locations .iter() - .map(|l| LocationEntry { - id: l.id, - name: l.name.clone(), - instance: self.instance_names.get(&l.instance_id).cloned(), - address: l.address.clone(), - endpoint: l.endpoint.clone(), - mfa_enabled: None, - mfa_method: Some(mfa_label(l.mfa_method).to_string()), - route_all_traffic: Some(l.route_all_traffic), + .map(|l| { + let details = self.instance_details.get(&l.instance_id); + let route_all_traffic = match details + .map_or(&ClientTrafficPolicy::None, |details| { + &details.client_traffic_policy + }) { + ClientTrafficPolicy::None => l.route_all_traffic, + ClientTrafficPolicy::DisableAllTraffic => false, + ClientTrafficPolicy::ForceAllTraffic => true, + }; + LocationEntry { + id: l.id, + name: l.name.clone(), + instance: details.map(|details| details.name.clone()), + address: l.address.clone(), + endpoint: l.endpoint.clone(), + mfa_enabled: None, + mfa_method: Some(mfa_label(l.mfa_method).to_string()), + route_all_traffic: Some(route_all_traffic), + } }) .collect::>(); json!({ "locations": locations }) @@ -162,7 +195,7 @@ impl CommandOutput for LocationListResult { fn format_location_list_table( locations: &[Location], - instance_names: &HashMap, + instance_details: &HashMap, ) -> String { let name_col_width = locations .iter() @@ -179,9 +212,9 @@ fn format_location_list_table( let inst_col_width = locations .iter() .filter_map(|l| { - instance_names + instance_details .get(&l.instance_id) - .map(std::string::String::len) + .map(|details| details.name.len()) }) .max() .unwrap_or(MIN_INST_COL_WIDTH) @@ -192,22 +225,34 @@ fn format_location_list_table( "ID", "LOCATION", "ADDRESS", "ENDPOINT", "INSTANCE", "MFA", "Routing" )]; for location in locations { - let instance = instance_names - .get(&location.instance_id) - .map_or("?", String::as_str); + let details = instance_details.get(&location.instance_id); + + let instance_name = details.map_or("?", |instance| instance.name.as_str()); + let instance_traffic_policy = details.map_or(&ClientTrafficPolicy::None, |instance| { + &instance.client_traffic_policy + }); + + let route_all_traffic = match instance_traffic_policy { + ClientTrafficPolicy::None => location.route_all_traffic, + ClientTrafficPolicy::DisableAllTraffic => false, + ClientTrafficPolicy::ForceAllTraffic => true, + }; + + let route_label = if route_all_traffic { + "All-traffic" + } else { + "Predefined" + }; + lines.push(format!( " {:>4} {:3} {:>11}", location.id, location.name, location.address, location.endpoint, - instance, + instance_name, mfa_label(location.mfa_method), - if location.route_all_traffic { - "All-traffic" - } else { - "Predefined" - } + route_label )); } lines.join("\n") @@ -322,11 +367,21 @@ mod tests { } } + fn make_instance_details( + name: &str, + client_traffic_policy: ClientTrafficPolicy, + ) -> InstanceDetails { + InstanceDetails { + name: name.to_string(), + client_traffic_policy, + } + } + #[test] fn test_list_human_empty() { let result = LocationListResult { locations: Vec::new(), - instance_names: HashMap::new(), + instance_details: HashMap::new(), }; assert_eq!( result.human(), @@ -337,11 +392,11 @@ mod tests { #[test] fn test_list_human_with_data() { let loc = make_location(1, 10, "office", "1.2.3.4:51820", false); - let mut names = HashMap::new(); - names.insert(10, "acme".to_string()); + let mut instance_details = HashMap::new(); + instance_details.insert(10, make_instance_details("acme", ClientTrafficPolicy::None)); let result = LocationListResult { locations: vec![loc], - instance_names: names, + instance_details, }; let s = result.human(); assert!(s.contains("ID")); @@ -350,11 +405,46 @@ mod tests { assert!(s.contains("1.2.3.4:51820")); } + fn routing_column( + route_all_traffic: bool, + client_traffic_policy: ClientTrafficPolicy, + ) -> String { + let mut location = make_location(1, 10, "office", "1.2.3.4:51820", false); + location.route_all_traffic = route_all_traffic; + let mut instance_details = HashMap::new(); + instance_details.insert(10, make_instance_details("acme", client_traffic_policy)); + LocationListResult { + locations: vec![location], + instance_details, + } + .human() + } + + #[test] + fn test_list_human_force_all_traffic_overrides_location() { + let table = routing_column(false, ClientTrafficPolicy::ForceAllTraffic); + assert!(table.contains("All-traffic")); + assert!(!table.contains("Predefined")); + } + + #[test] + fn test_list_human_disable_all_traffic_overrides_location() { + let table = routing_column(true, ClientTrafficPolicy::DisableAllTraffic); + assert!(table.contains("Predefined")); + assert!(!table.contains("All-traffic")); + } + + #[test] + fn test_list_human_no_policy_keeps_location_setting() { + assert!(routing_column(true, ClientTrafficPolicy::None).contains("All-traffic")); + assert!(routing_column(false, ClientTrafficPolicy::None).contains("Predefined")); + } + #[test] fn test_list_json_empty() { let result = LocationListResult { locations: Vec::new(), - instance_names: HashMap::new(), + instance_details: HashMap::new(), }; let json = result.json(); assert_eq!(json["locations"].as_array().unwrap().len(), 0); @@ -364,11 +454,11 @@ mod tests { #[test] fn test_list_json_with_data() { let loc = make_location(1, 10, "office", "1.2.3.4:51820", false); - let mut names = HashMap::new(); - names.insert(10, "acme".to_string()); + let mut instance_details = HashMap::new(); + instance_details.insert(10, make_instance_details("acme", ClientTrafficPolicy::None)); let result = LocationListResult { locations: vec![loc], - instance_names: names, + instance_details, }; let json = result.json(); let locations = json["locations"].as_array().unwrap(); @@ -458,7 +548,7 @@ mod tests { assert_eq!( LocationListResult { locations: Vec::new(), - instance_names: HashMap::new(), + instance_details: HashMap::new(), } .exit_code(), 0 From 8b22847b57993b210d99e753aaeed513ef3ae448 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 19 Aug 2026 09:38:00 +0200 Subject: [PATCH 148/155] Block connect button (#1115) --- new-ui/biome.json | 2 +- new-ui/package.json | 12 +- new-ui/pnpm-lock.yaml | 272 +++++++++--------- .../ConnectButton/ConnectButton.tsx | 5 +- .../components/ConnectButton/style.scss | 9 + .../components/LocationCardConnectButton.tsx | 10 +- .../OverviewLocationCard.tsx | 12 +- nix/package.nix | 2 +- 8 files changed, 173 insertions(+), 151 deletions(-) diff --git a/new-ui/biome.json b/new-ui/biome.json index 1881e96ff..13c5e22ac 100644 --- a/new-ui/biome.json +++ b/new-ui/biome.json @@ -1,6 +1,6 @@ { "root": true, - "$schema": "https://biomejs.dev/schemas/2.5.7/schema.json", + "$schema": "https://biomejs.dev/schemas/2.5.8/schema.json", "vcs": { "enabled": false, "clientKind": "git", diff --git a/new-ui/package.json b/new-ui/package.json index b4e4239a0..a19a5ba1d 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -17,9 +17,9 @@ "@floating-ui/react": "^0.27.20", "@stablelib/base64": "^2.0.1", "@stablelib/x25519": "^2.0.1", - "@tanstack/react-form": "^1.33.4", + "@tanstack/react-form": "^1.33.5", "@tanstack/react-query": "^5.101.4", - "@tanstack/react-router": "^1.170.25", + "@tanstack/react-router": "^1.170.29", "@tauri-apps/api": "^2.11.1", "@tauri-apps/plugin-clipboard-manager": "^2.3.2", "@tauri-apps/plugin-dialog": "^2.7.2", @@ -32,7 +32,7 @@ "byte-size": "^9.0.1", "chart.js": "^4.5.1", "clsx": "^2.1.1", - "dayjs": "^1.11.21", + "dayjs": "^1.11.23", "motion": "^12.43.0", "p-timeout": "^7.0.1", "prettier": "^3.9.6", @@ -49,18 +49,18 @@ "rxjs": "^7.8.2", "sass": "^1.102.0", "zod": "^4.4.3", - "zustand": "^5.0.14" + "zustand": "^5.0.15" }, "devDependencies": { "@tanstack/devtools-vite": "^0.8.3", - "@tanstack/router-plugin": "^1.168.29", + "@tanstack/router-plugin": "^1.168.32", "@types/byte-size": "^8.1.2", "@types/node": "^26.2.0", "@types/react": "^19.2.18", "@types/react-dom": "^19.2.4", "@vitejs/plugin-react": "^6.0.5", "autoprefixer": "^10.5.4", - "globals": "^17.9.0", + "globals": "^17.11.0", "stylelint": "^17.14.1", "stylelint-config-standard-scss": "^17.0.0", "stylelint-scss": "^7.2.0", diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index 735721652..4e07e6b86 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -21,14 +21,14 @@ importers: specifier: ^2.0.1 version: 2.0.1 '@tanstack/react-form': - specifier: ^1.33.4 - version: 1.33.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + specifier: ^1.33.5 + version: 1.33.5(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@tanstack/react-query': specifier: ^5.101.4 version: 5.101.4(react@19.2.8) '@tanstack/react-router': - specifier: ^1.170.25 - version: 1.170.25(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + specifier: ^1.170.29 + version: 1.170.29(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@tauri-apps/api': specifier: ^2.11.1 version: 2.11.1 @@ -66,8 +66,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 dayjs: - specifier: ^1.11.21 - version: 1.11.21 + specifier: ^1.11.23 + version: 1.11.23 motion: specifier: ^12.43.0 version: 12.43.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -117,15 +117,15 @@ importers: specifier: ^4.4.3 version: 4.4.3 zustand: - specifier: ^5.0.14 - version: 5.0.14(@types/react@19.2.18)(react@19.2.8)(use-sync-external-store@1.6.0(react@19.2.8)) + specifier: ^5.0.15 + version: 5.0.15(@types/react@19.2.18)(react@19.2.8)(use-sync-external-store@1.6.0(react@19.2.8)) devDependencies: '@tanstack/devtools-vite': specifier: ^0.8.3 version: 0.8.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(vite@8.2.1(@types/node@26.2.0)(jiti@2.7.0)(sass@1.102.0)) '@tanstack/router-plugin': - specifier: ^1.168.29 - version: 1.168.29(@tanstack/react-router@1.170.25(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(rolldown@1.2.3)(supports-color@10.2.2)(vite@8.2.1(@types/node@26.2.0)(jiti@2.7.0)(sass@1.102.0)) + specifier: ^1.168.32 + version: 1.168.32(@tanstack/react-router@1.170.29(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(rolldown@1.2.4)(supports-color@10.2.2)(vite@8.2.1(@types/node@26.2.0)(jiti@2.7.0)(sass@1.102.0)) '@types/byte-size': specifier: ^8.1.2 version: 8.1.2 @@ -145,8 +145,8 @@ importers: specifier: ^10.5.4 version: 10.5.4(postcss@8.5.26) globals: - specifier: ^17.9.0 - version: 17.9.0 + specifier: ^17.11.0 + version: 17.11.0 stylelint: specifier: ^17.14.1 version: 17.14.1(supports-color@10.2.2)(typescript@6.0.3) @@ -308,8 +308,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.7': - resolution: {integrity: sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==} + '@csstools/css-syntax-patches-for-csstree@1.1.8': + resolution: {integrity: sha512-CpMLjAvwQg3BL5S0IeqsZNMH7EQrEWi0kLKOC13ZBF0ZwERiLWlibNPJr8G1kdU3Ms/r2KiNrF81pUh2HwAHdg==} peerDependencies: css-tree: ^3.2.1 peerDependenciesMeta: @@ -397,12 +397,12 @@ packages: '@kurkle/color@0.3.4': resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} - '@napi-rs/wasm-runtime@1.2.2': - resolution: {integrity: sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==} + '@napi-rs/wasm-runtime@1.2.3': + resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} peerDependencies: - '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.3 - '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.3 + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -546,8 +546,8 @@ packages: '@oxc-project/types@0.120.0': resolution: {integrity: sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==} - '@oxc-project/types@0.143.0': - resolution: {integrity: sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==} + '@oxc-project/types@0.144.0': + resolution: {integrity: sha512-nuhZIOLuI6TFQ32I/WnUx+SCPY7SdSKwgnFHydAuoS1+Z4BRcaP+RRJmGzl9lw+0OFF7UmaESf7KQRXaNLHypg==} '@parcel/watcher-android-arm64@2.6.0': resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==} @@ -631,92 +631,92 @@ packages: resolution: {integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==} engines: {node: '>= 10.0.0'} - '@rolldown/binding-android-arm64@1.2.3': - resolution: {integrity: sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw==} + '@rolldown/binding-android-arm64@1.2.4': + resolution: {integrity: sha512-jHC2cnyKz5xU2fhECtFl8OZ83cYNt13GZQD+0uMJ/X3o+ijmd56okHhTUwxVSHPx1IRVIJEZ1/1pPzeLCU6XKA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.2.3': - resolution: {integrity: sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA==} + '@rolldown/binding-darwin-arm64@1.2.4': + resolution: {integrity: sha512-Dc5mPD8F5F/FS8i01syd7FTF6yB2fVthH/TRkjwJkzUK6EpoxHtqvZQP5Zwq80/5z19TWYHIg1KOHboCgVx/aQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.2.3': - resolution: {integrity: sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA==} + '@rolldown/binding-darwin-x64@1.2.4': + resolution: {integrity: sha512-fpDm4oBo6SqLvWUYCmFhdde3U9KH2fRNNMeAnAPAIwxRL345xutL0EtEUcuoxsoazdJGv/MuDBQHlCDrtbvqOg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.2.3': - resolution: {integrity: sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg==} + '@rolldown/binding-freebsd-x64@1.2.4': + resolution: {integrity: sha512-rSJoreDE/HoIzoaib6MTp5jQtCTdMHKIvItAKT/ImS6Y6Ww76oUaeMyp4Vc/fAgd/ehji068IxetHXAnqUwN9A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.2.3': - resolution: {integrity: sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.4': + resolution: {integrity: sha512-/jm8OGHgn7oGaJu3i/qZI9spUGcJ+y/lk43ttQ/iO1tOd9NissG6o97bighBCiL+BKRngmcDuR6ikfwYdJmVuQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.2.3': - resolution: {integrity: sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw==} + '@rolldown/binding-linux-arm64-gnu@1.2.4': + resolution: {integrity: sha512-tIP06BeD9EqvECBrPZ+sqdPlYrT+aYaAiu1wYziVx5elRK/ftm33JxVDy2bXGbr6J0CrtirCkR87/X5a2euEng==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.2.3': - resolution: {integrity: sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q==} + '@rolldown/binding-linux-arm64-musl@1.2.4': + resolution: {integrity: sha512-Ql1Q0EQqVThvn9VAVlwNzsUvbSFtCMGjLpRRi4pk5i7NZZ4n5ISiLMjHYtus4VQ2PvkSw24zyaCVsiS+sXPj1w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.2.3': - resolution: {integrity: sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w==} + '@rolldown/binding-linux-ppc64-gnu@1.2.4': + resolution: {integrity: sha512-GjbjXD4XXfN19D0LZNbmiCBUoDiRACsYHr0yaIbbn8aFsXjHZifcYqu/W5Er5X2X990WjHXFrxarn5chzItorQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.2.3': - resolution: {integrity: sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg==} + '@rolldown/binding-linux-s390x-gnu@1.2.4': + resolution: {integrity: sha512-p5WR0NOwaRmJ/B1b6IjEFLLivwEsf3PrdBIhRbhTCQisbo2SvHHpG4ELB/+FgQNnB88LTOF86upmJmbvZdQ2lw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.2.3': - resolution: {integrity: sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w==} + '@rolldown/binding-linux-x64-gnu@1.2.4': + resolution: {integrity: sha512-4/GyVjmhR+Tc6HLJvwc1sOhPqAZtySiSMesOZyX6JQ5XBxoTDEMKQzvo07NIK6nTon/SivlZqvhzvuVBNQhObQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.2.3': - resolution: {integrity: sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A==} + '@rolldown/binding-linux-x64-musl@1.2.4': + resolution: {integrity: sha512-l9eeLsCNvPpmSXUej0etw/J1eqV0Jj1D5G/xG6YTijmE6dkv6E2QezgWbTfQk63v952DPqrjOCoiqxq7Bw0YUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.2.3': - resolution: {integrity: sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug==} + '@rolldown/binding-openharmony-arm64@1.2.4': + resolution: {integrity: sha512-e0F355MSTMm3+UOqtV3L24gFUp2N5m1f8L/7d56deik6va+AXdrt9F8LbzGpeWGWRbZEDq4m8NVnJDeBtf9DZg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-win32-arm64-msvc@1.2.3': - resolution: {integrity: sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw==} + '@rolldown/binding-win32-arm64-msvc@1.2.4': + resolution: {integrity: sha512-AWLi0uBRYh6QlE7OKhiz+phZC0qwtij2QZmhmOdsLdFn64m7oMpooE9ICE3lhm9xMb4SpDo2WbHcxX1iFLFtqw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.2.3': - resolution: {integrity: sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg==} + '@rolldown/binding-win32-x64-msvc@1.2.4': + resolution: {integrity: sha512-UwSDJOg3dqCAejWdxclJjCsh3Qq4vLYMDxmyHqo1btz3stK2VqgwNd3mm5tuIwzSlGIQ/1H9Hr+Zn09mrezNqQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -781,8 +781,8 @@ packages: peerDependencies: vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@tanstack/form-core@1.33.4': - resolution: {integrity: sha512-nqNaVAS+FfdWq6pfVqLC7SkgvRFyQEM9UEruIMTQULQ5SGF2X6+7RduFgr5ofpHftAHw/2yVs2vvIafx4WCVGQ==} + '@tanstack/form-core@1.33.5': + resolution: {integrity: sha512-3dfx9MBP0aq5sXKteikG629X9oviptrQj0IFRk9YGcb+lB7Kv5x8S17oOSk1wUWgjQZ4xVJEMbKwOAODymocgA==} '@tanstack/history@1.162.1': resolution: {integrity: sha512-DR9t6lfLVdrjgCwpglrR9DR7Ok8/HlXjcOE+goWXF3zyuLUO/ug7vMbSFxTqrQTtbRghJfyhmIZ0S6LhPIy44w==} @@ -795,8 +795,8 @@ packages: '@tanstack/query-core@5.101.4': resolution: {integrity: sha512-gNwcvOJcRbLWPOLG/2OBm+zM+Yv+MKsXKEOWC57USuZDEsI71hEErQsiEGx5wX9rzWWkfwM0fVSPoiIFSsxfiw==} - '@tanstack/react-form@1.33.4': - resolution: {integrity: sha512-EnPxwYq+QPmW+BovL58IW9ioSGPmpkLZk2zpEZKj11n2TleonJ/ASZAEb6tsdzTkHTX2JFKwJv8cpYozYnNZXw==} + '@tanstack/react-form@1.33.5': + resolution: {integrity: sha512-LlRB28qJwO/QCGaHvWnbdh4haBgTFiZVmzA2uzxSBS3YA7/IqrQ6HOBK70CkFQ+DbflZ7NawsmSln13h5iIdTA==} peerDependencies: '@tanstack/react-start': '*' react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -809,8 +809,8 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-router@1.170.25': - resolution: {integrity: sha512-XiWYvkLAGhcZHhV2xUvicpF/VfTVSnewP6CqviDONAjmD50tBob5x/93u2W8QZAc/JgkPd+jijCmu6t4NCzmew==} + '@tanstack/react-router@1.170.29': + resolution: {integrity: sha512-xQwakR0ReaUGu3xeXEl2CqzlIXk4i9vxaf/zqdzoELMY0mDZgMOr+xobiA5cQdn8cnovqZgqqUxcwXhsruC+NA==} engines: {node: '>=20.19'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -828,20 +828,20 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.171.21': - resolution: {integrity: sha512-t6xUHBO94nQDrPHPh6ag5UuKHWIkVjq9s63q2ctbxgzq3vtSoGKmAIdLD5o+NU6JUS1ppXRHgL0YGzEHvH32Ng==} + '@tanstack/router-core@1.171.24': + resolution: {integrity: sha512-+j+8NmV4QOS+ILNLdXFlLTdKPPbBQIy6mXDZ0QWEKYZ0xQOdlnOCXVHPflyGanD2SWSxjqGkw8CsW0CXXP7fLg==} engines: {node: '>=20.19'} - '@tanstack/router-generator@1.167.27': - resolution: {integrity: sha512-bfV44Nyy7XeSCCuvQWGc3qudqXfOqAwKiWXNymAuK+hy24vs3E75Aw1zMz97ajHXMjxm4nFVVjEnwZ/cDR74ug==} + '@tanstack/router-generator@1.167.30': + resolution: {integrity: sha512-Tf9TJfdpP0yL3k1D1ke6hR1dvPCgKShTik3HcBRDeTK5eNrp9/X0Q0YApN8thE6pVcXL6a78O3ZE7XN7s7KwNw==} engines: {node: '>=20.19'} - '@tanstack/router-plugin@1.168.29': - resolution: {integrity: sha512-h1ZbnIvbAKIFeQ6JBRJ/xBP17tBdwjwzPBKVKUdVNYiob07SkrQLhqz+s41WtbNmHey5kQWN3HqP16Vl062bqg==} + '@tanstack/router-plugin@1.168.32': + resolution: {integrity: sha512-P+qYIY9b/K+ZGUPNiyLqsd20vN/1abgmSNG0Ch9KTKldag3icR7TlrJgnM2km86yuRdXa4nJ5YT7+JLV5rJRZg==} engines: {node: '>=20.19'} peerDependencies: '@rsbuild/core': '>=1.0.2 || ^2.0.0' - '@tanstack/react-router': ^1.170.25 + '@tanstack/react-router': ^1.170.29 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0' vite-plugin-solid: ^2.11.10 || ^3.0.0-0 webpack: '>=5.92.0' @@ -966,8 +966,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + ansi-regex@6.3.0: + resolution: {integrity: sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==} engines: {node: '>=12'} ansi-styles@4.3.0: @@ -998,8 +998,8 @@ packages: bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - baseline-browser-mapping@2.11.13: - resolution: {integrity: sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==} + baseline-browser-mapping@2.11.14: + resolution: {integrity: sha512-JyJ954WzuIR8/FFzX0o5krdSTrBAkcCSRfWSleRsIHSWV+cZe2FI1PKggVkFke1hBldRs+LRxUczzE9iPmgZww==} engines: {node: '>=6.0.0'} hasBin: true @@ -1106,8 +1106,8 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - dayjs@1.11.21: - resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} + dayjs@1.11.23: + resolution: {integrity: sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==} debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} @@ -1136,8 +1136,8 @@ packages: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} - electron-to-chromium@1.5.404: - resolution: {integrity: sha512-3WJtd7/lVq2Jnuz6wed1l9+1ZD2u2Tet1/1NBc4Iedkmgbu+I7YuAqdAQ8T+VZtnwysMsAf3IqSq9D1gyZjA2g==} + electron-to-chromium@1.5.408: + resolution: {integrity: sha512-SLoprcYpJ/OH2v2ps0+N5biv9H4/KBT3+YmmDew64TwK5y9j2wv7pMOFY7IorVkyMtEyLSCRlXKLsNlakeAlPw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1248,8 +1248,8 @@ packages: resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} engines: {node: '>=6'} - globals@17.9.0: - resolution: {integrity: sha512-m/MvAW61QVU5VDNF1Vj8axt016h8w7L5TU1e9zlab7XIttAT2YAlCwl75K1fOqvMM9apmD7lbCIRhpfkhmxhCg==} + globals@17.11.0: + resolution: {integrity: sha512-Z2I8hM+PbJDXQDq3Icgpzv+mPdwr68iZUU9d5WW4FuXfDUQfkZaZuvjMv42/5crNyw154+9+VWXbYrUgDXbxNw==} engines: {node: '>=18'} globby@16.2.3: @@ -1844,8 +1844,8 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown@1.2.3: - resolution: {integrity: sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A==} + rolldown@1.2.4: + resolution: {integrity: sha512-rSr7irW0K7QRWzjdJXqZowkcRdDtjRduh43rBltnVKd0VFq839l1lJoDvGJb6gl7+4rTTCrPWu+YfujUL8Ug7w==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -2164,8 +2164,8 @@ packages: zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} - zustand@5.0.14: - resolution: {integrity: sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g==} + zustand@5.0.15: + resolution: {integrity: sha512-MpSEjRiBkA9crSYeOUH32rJC7SVqAbm0Fqcqge/bUi2PPoLcBWKOsG+C8mevmpr8TwXHBVkChbbJiyvkE+i/3A==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -2343,7 +2343,7 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.7(css-tree@3.2.1)': + '@csstools/css-syntax-patches-for-csstree@1.1.8(css-tree@3.2.1)': optionalDependencies: css-tree: 3.2.1 @@ -2432,7 +2432,7 @@ snapshots: '@kurkle/color@0.3.4': {} - '@napi-rs/wasm-runtime@1.2.2(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: '@emnapi/core': 1.11.1 '@emnapi/runtime': 1.11.1 @@ -2501,7 +2501,7 @@ snapshots: '@oxc-parser/binding-wasm32-wasi@0.120.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@napi-rs/wasm-runtime': 1.2.2(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -2518,7 +2518,7 @@ snapshots: '@oxc-project/types@0.120.0': {} - '@oxc-project/types@0.143.0': {} + '@oxc-project/types@0.144.0': {} '@parcel/watcher-android-arm64@2.6.0': optional: true @@ -2577,46 +2577,46 @@ snapshots: '@parcel/watcher-win32-x64': 2.6.0 optional: true - '@rolldown/binding-android-arm64@1.2.3': + '@rolldown/binding-android-arm64@1.2.4': optional: true - '@rolldown/binding-darwin-arm64@1.2.3': + '@rolldown/binding-darwin-arm64@1.2.4': optional: true - '@rolldown/binding-darwin-x64@1.2.3': + '@rolldown/binding-darwin-x64@1.2.4': optional: true - '@rolldown/binding-freebsd-x64@1.2.3': + '@rolldown/binding-freebsd-x64@1.2.4': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.2.3': + '@rolldown/binding-linux-arm-gnueabihf@1.2.4': optional: true - '@rolldown/binding-linux-arm64-gnu@1.2.3': + '@rolldown/binding-linux-arm64-gnu@1.2.4': optional: true - '@rolldown/binding-linux-arm64-musl@1.2.3': + '@rolldown/binding-linux-arm64-musl@1.2.4': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.2.3': + '@rolldown/binding-linux-ppc64-gnu@1.2.4': optional: true - '@rolldown/binding-linux-s390x-gnu@1.2.3': + '@rolldown/binding-linux-s390x-gnu@1.2.4': optional: true - '@rolldown/binding-linux-x64-gnu@1.2.3': + '@rolldown/binding-linux-x64-gnu@1.2.4': optional: true - '@rolldown/binding-linux-x64-musl@1.2.3': + '@rolldown/binding-linux-x64-musl@1.2.4': optional: true - '@rolldown/binding-openharmony-arm64@1.2.3': + '@rolldown/binding-openharmony-arm64@1.2.4': optional: true - '@rolldown/binding-win32-arm64-msvc@1.2.3': + '@rolldown/binding-win32-arm64-msvc@1.2.4': optional: true - '@rolldown/binding-win32-x64-msvc@1.2.3': + '@rolldown/binding-win32-x64-msvc@1.2.4': optional: true '@rolldown/pluginutils@1.0.1': {} @@ -2693,7 +2693,7 @@ snapshots: - bufferutil - utf-8-validate - '@tanstack/form-core@1.33.4': + '@tanstack/form-core@1.33.5': dependencies: '@tanstack/devtools-event-client': 0.4.4 '@tanstack/pacer-lite': 0.1.1 @@ -2705,9 +2705,9 @@ snapshots: '@tanstack/query-core@5.101.4': {} - '@tanstack/react-form@1.33.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@tanstack/react-form@1.33.5(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@tanstack/form-core': 1.33.4 + '@tanstack/form-core': 1.33.5 '@tanstack/react-store': 0.11.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) react: 19.2.8 transitivePeerDependencies: @@ -2718,11 +2718,11 @@ snapshots: '@tanstack/query-core': 5.101.4 react: 19.2.8 - '@tanstack/react-router@1.170.25(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@tanstack/react-router@1.170.29(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@tanstack/history': 1.162.1 '@tanstack/react-store': 0.9.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@tanstack/router-core': 1.171.21 + '@tanstack/router-core': 1.171.24 isbot: 5.2.1 react: 19.2.8 react-dom: 19.2.8(react@19.2.8) @@ -2741,17 +2741,17 @@ snapshots: react-dom: 19.2.8(react@19.2.8) use-sync-external-store: 1.6.0(react@19.2.8) - '@tanstack/router-core@1.171.21': + '@tanstack/router-core@1.171.24': dependencies: '@tanstack/history': 1.162.1 cookie-es: 3.1.1 seroval: 1.6.2 seroval-plugins: 1.6.2(seroval@1.6.2) - '@tanstack/router-generator@1.167.27(supports-color@10.2.2)': + '@tanstack/router-generator@1.167.30(supports-color@10.2.2)': dependencies: '@babel/types': 7.29.8 - '@tanstack/router-core': 1.171.21 + '@tanstack/router-core': 1.171.24 '@tanstack/router-utils': 1.162.2(supports-color@10.2.2) '@tanstack/virtual-file-routes': 1.162.0 jiti: 2.7.0 @@ -2761,19 +2761,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.168.29(@tanstack/react-router@1.170.25(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(rolldown@1.2.3)(supports-color@10.2.2)(vite@8.2.1(@types/node@26.2.0)(jiti@2.7.0)(sass@1.102.0))': + '@tanstack/router-plugin@1.168.32(@tanstack/react-router@1.170.29(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(rolldown@1.2.4)(supports-color@10.2.2)(vite@8.2.1(@types/node@26.2.0)(jiti@2.7.0)(sass@1.102.0))': dependencies: '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/template': 7.29.7 '@babel/types': 7.29.8 - '@tanstack/router-core': 1.171.21 - '@tanstack/router-generator': 1.167.27(supports-color@10.2.2) + '@tanstack/router-core': 1.171.24 + '@tanstack/router-generator': 1.167.30(supports-color@10.2.2) '@tanstack/router-utils': 1.162.2(supports-color@10.2.2) chokidar: 5.0.0 - unplugin: 3.3.0(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(jiti@2.7.0)(sass@1.102.0)) + unplugin: 3.3.0(rolldown@1.2.4)(vite@8.2.1(@types/node@26.2.0)(jiti@2.7.0)(sass@1.102.0)) zod: 4.4.3 optionalDependencies: - '@tanstack/react-router': 1.170.25(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@tanstack/react-router': 1.170.29(react-dom@19.2.8(react@19.2.8))(react@19.2.8) vite: 8.2.1(@types/node@26.2.0)(jiti@2.7.0)(sass@1.102.0) transitivePeerDependencies: - '@farmfe/core' @@ -2898,7 +2898,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.2.2: {} + ansi-regex@6.3.0: {} ansi-styles@4.3.0: dependencies: @@ -2930,7 +2930,7 @@ snapshots: bail@2.0.2: {} - baseline-browser-mapping@2.11.13: {} + baseline-browser-mapping@2.11.14: {} braces@3.0.3: dependencies: @@ -2938,9 +2938,9 @@ snapshots: browserslist@4.28.8: dependencies: - baseline-browser-mapping: 2.11.13 + baseline-browser-mapping: 2.11.14 caniuse-lite: 1.0.30001809 - electron-to-chromium: 1.5.404 + electron-to-chromium: 1.5.408 node-releases: 2.0.53 update-browserslist-db: 1.3.1(browserslist@4.28.8) @@ -3014,7 +3014,7 @@ snapshots: csstype@3.2.3: {} - dayjs@1.11.21: {} + dayjs@1.11.23: {} debug@4.4.3(supports-color@10.2.2): dependencies: @@ -3036,7 +3036,7 @@ snapshots: diff@8.0.4: {} - electron-to-chromium@1.5.404: {} + electron-to-chromium@1.5.408: {} emoji-regex@8.0.0: {} @@ -3126,7 +3126,7 @@ snapshots: kind-of: 6.0.3 which: 1.3.1 - globals@17.9.0: {} + globals@17.11.0: {} globby@16.2.3: dependencies: @@ -3949,25 +3949,25 @@ snapshots: reusify@1.1.0: {} - rolldown@1.2.3: + rolldown@1.2.4: dependencies: - '@oxc-project/types': 0.143.0 + '@oxc-project/types': 0.144.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.2.3 - '@rolldown/binding-darwin-arm64': 1.2.3 - '@rolldown/binding-darwin-x64': 1.2.3 - '@rolldown/binding-freebsd-x64': 1.2.3 - '@rolldown/binding-linux-arm-gnueabihf': 1.2.3 - '@rolldown/binding-linux-arm64-gnu': 1.2.3 - '@rolldown/binding-linux-arm64-musl': 1.2.3 - '@rolldown/binding-linux-ppc64-gnu': 1.2.3 - '@rolldown/binding-linux-s390x-gnu': 1.2.3 - '@rolldown/binding-linux-x64-gnu': 1.2.3 - '@rolldown/binding-linux-x64-musl': 1.2.3 - '@rolldown/binding-openharmony-arm64': 1.2.3 - '@rolldown/binding-win32-arm64-msvc': 1.2.3 - '@rolldown/binding-win32-x64-msvc': 1.2.3 + '@rolldown/binding-android-arm64': 1.2.4 + '@rolldown/binding-darwin-arm64': 1.2.4 + '@rolldown/binding-darwin-x64': 1.2.4 + '@rolldown/binding-freebsd-x64': 1.2.4 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.4 + '@rolldown/binding-linux-arm64-gnu': 1.2.4 + '@rolldown/binding-linux-arm64-musl': 1.2.4 + '@rolldown/binding-linux-ppc64-gnu': 1.2.4 + '@rolldown/binding-linux-s390x-gnu': 1.2.4 + '@rolldown/binding-linux-x64-gnu': 1.2.4 + '@rolldown/binding-linux-x64-musl': 1.2.4 + '@rolldown/binding-openharmony-arm64': 1.2.4 + '@rolldown/binding-win32-arm64-msvc': 1.2.4 + '@rolldown/binding-win32-x64-msvc': 1.2.4 run-parallel@1.2.0: dependencies: @@ -4033,7 +4033,7 @@ snapshots: strip-ansi@7.2.0: dependencies: - ansi-regex: 6.2.2 + ansi-regex: 6.3.0 style-to-js@1.1.21: dependencies: @@ -4073,7 +4073,7 @@ snapshots: dependencies: '@csstools/css-calc': 3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-syntax-patches-for-csstree': 1.1.7(css-tree@3.2.1) + '@csstools/css-syntax-patches-for-csstree': 1.1.8(css-tree@3.2.1) '@csstools/css-tokenizer': 4.0.0 css-tree: 3.2.1 is-plain-object: 5.0.0 @@ -4088,7 +4088,7 @@ snapshots: dependencies: '@csstools/css-calc': 3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-syntax-patches-for-csstree': 1.1.7(css-tree@3.2.1) + '@csstools/css-syntax-patches-for-csstree': 1.1.8(css-tree@3.2.1) '@csstools/css-tokenizer': 4.0.0 '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/selector-resolve-nested': 4.0.1(postcss-selector-parser@7.1.5) @@ -4198,13 +4198,13 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - unplugin@3.3.0(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(jiti@2.7.0)(sass@1.102.0)): + unplugin@3.3.0(rolldown@1.2.4)(vite@8.2.1(@types/node@26.2.0)(jiti@2.7.0)(sass@1.102.0)): dependencies: '@jridgewell/remapping': 2.3.5 picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 optionalDependencies: - rolldown: 1.2.3 + rolldown: 1.2.4 vite: 8.2.1(@types/node@26.2.0)(jiti@2.7.0)(sass@1.102.0) update-browserslist-db@1.3.1(browserslist@4.28.8): @@ -4239,7 +4239,7 @@ snapshots: lightningcss: 1.33.0 picomatch: 4.0.5 postcss: 8.5.26 - rolldown: 1.2.3 + rolldown: 1.2.4 tinyglobby: 0.2.17 optionalDependencies: '@types/node': 26.2.0 @@ -4265,7 +4265,7 @@ snapshots: zod@4.4.3: {} - zustand@5.0.14(@types/react@19.2.18)(react@19.2.8)(use-sync-external-store@1.6.0(react@19.2.8)): + zustand@5.0.15(@types/react@19.2.18)(react@19.2.8)(use-sync-external-store@1.6.0(react@19.2.8)): optionalDependencies: '@types/react': 19.2.18 react: 19.2.8 diff --git a/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx b/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx index 9990f2770..55c63e884 100644 --- a/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx +++ b/new-ui/src/shared/components/LocationCard/components/ConnectButton/ConnectButton.tsx @@ -4,14 +4,17 @@ import clsx from 'clsx'; interface Props { active: boolean; onClick: () => void; + disabled?: boolean; } -export const ConnectButton = ({ active, onClick }: Props) => ( +export const ConnectButton = ({ active, onClick, disabled = false }: Props) => (
    diff --git a/nix/package.nix b/nix/package.nix index c84f472e1..6b32856ad 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -90,7 +90,7 @@ inherit version pnpm; src = ../new-ui; fetcherVersion = 4; - hash = "sha256-VJwrc7TtuwwLWyQw2VaVZdb868JR0rLVLSs8qwn1LdQ="; + hash = "sha256-Ka76Vy52+5ZpHAc7EEFXjJJVc1dTuIH4HBvrzU0CPW0="; }; # Pre-build the new UI frontend so Tauri can serve it as WebviewUrl::App("compact/") and "full/". From cb01e9b1c09ceb85ac35fc355490158ea2e7736e Mon Sep 17 00:00:00 2001 From: Kuba <78603704+jakub-tldr@users.noreply.github.com> Date: Tue, 25 Aug 2026 16:45:58 +0200 Subject: [PATCH 149/155] Enable "What's new" screen (#1120) --- e2e/wdio.conf.ts | 1 + new-ui/src/pages/welcome/WelcomePage.tsx | 8 +- new-ui/src/pages/welcome/assets/whats_new.mp4 | Bin 0 -> 2284259 bytes .../pages/welcome/assets/whats_new_poster.jpg | Bin 0 -> 20979 bytes .../pages/welcome/components/SlideVideo.tsx | 4 +- .../WelcomeCarousel/WelcomeCarousel.tsx | 4 +- .../components/WelcomeCarousel/style.scss | 9 +- new-ui/src/pages/welcome/components/types.ts | 1 + new-ui/src/pages/welcome/config.ts | 32 ++---- src-tauri/client-cli/src/commands/status.rs | 2 +- src-tauri/core/src/version.rs | 96 +++++++++++++++++- src-tauri/src/gui.rs | 19 ++-- src-tauri/src/window_manager/mod.rs | 2 +- 13 files changed, 125 insertions(+), 53 deletions(-) create mode 100644 new-ui/src/pages/welcome/assets/whats_new.mp4 create mode 100644 new-ui/src/pages/welcome/assets/whats_new_poster.jpg diff --git a/e2e/wdio.conf.ts b/e2e/wdio.conf.ts index 2965e24d9..bf8c3cb5e 100644 --- a/e2e/wdio.conf.ts +++ b/e2e/wdio.conf.ts @@ -98,6 +98,7 @@ export const config: WebdriverIO.Config = { stdio: ["ignore", "inherit", "inherit"], env: { ...process.env, + DEFGUARD_CLIENT_WELCOME_SKIP: "1", XDG_DATA_HOME: path.join(dataDir, "share"), XDG_CONFIG_HOME: path.join(dataDir, "config"), XDG_CACHE_HOME: path.join(dataDir, "cache"), diff --git a/new-ui/src/pages/welcome/WelcomePage.tsx b/new-ui/src/pages/welcome/WelcomePage.tsx index 8b8b620b7..09000c436 100644 --- a/new-ui/src/pages/welcome/WelcomePage.tsx +++ b/new-ui/src/pages/welcome/WelcomePage.tsx @@ -4,7 +4,7 @@ import './style.scss'; import { IconKind } from '../../shared/components/Icon'; import { IconButton } from '../../shared/components/IconButton/IconButton'; import { IconButtonVariant } from '../../shared/components/IconButton/types'; -import { Snackbar } from '../../shared/providers/snackbar/snackbar'; +import { api } from '../../shared/rust-api/api'; import { ThemeSpacing } from '../../shared/types'; import { WelcomeCarousel } from './components/WelcomeCarousel/WelcomeCarousel'; import { welcomeSlides } from './config'; @@ -21,13 +21,13 @@ export const WelcomePage = () => { }} >
    -
    -

    {`What's new`}

    +
    +

    {`What's new`}

    { - Snackbar.default(`Close Welcome view`); + void api.closeWelcomeWindow(); }} />
    diff --git a/new-ui/src/pages/welcome/assets/whats_new.mp4 b/new-ui/src/pages/welcome/assets/whats_new.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..d5d4b05e3585ab4567119a1d9c8c20126342703d GIT binary patch literal 2284259 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
      ;ec8Dwg0mzAt?iObkmC&!j|;5>=3el02;J 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�g%(i_j-$tJ(e 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≶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
      Ok?TvmgM&ZjoUK_L! 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

      V5nT!~)QD@~nTa2nU9SykCTm0_K@oxeID_ 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

      {#s;X|86CyLhb7R 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≀yzLlJlnz61 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�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

      UC1|c0uiDc?#38 z!-KW@ttiS93mXvob+iMGd+-EW}n415=Gw=}PfLqFEd3{o8*h$AQJ z(1Z#nEfq}(Rt;~qB#p4rMqty|-2X7_`e{dF1Q&_xAz-Iw>a;~sVcWd(97Jw`YCUrF zBcCSn;(nX@;bFEz8z7r&SCIzl&<3`q`^*1s>h+FAFXouQTHJy~F3^8uzTA zu8>EmdK*@{A=s_pnObO?j=@_QR2@O(4ml+-spwJGN1qe z0kHv|$!-q`Ur!<=_LY*HdGmmd-JMyTyjBYQLDk0bgehmme_Lcy-J3EC5gk+2 zx$I4#Z>h8dKtk1UR(ZYWTYDK+aN_2xEvxMEQdrKNj;3zC6Y0q!j1dt-Kk5QSmAl$* z9;Ey#=2@yBV}`@RV!o_i8<#yf=Z*?rfTn;D*Bky>x)IlO4_p?`<_y9Yyum^B-+ehu z)Xz0S#YC9gP5%?pjGKm-8@|>Jr-Lc@t+!u@{1x6X9M*E@h?!@mwsr?#@nQ{-mJ8tc zV>|IF%yL-OJ??mHY z$f7Oq6rT}V2sq7+vo+6*D?%(k>oTdMwC(D7=|I42O_h3mMAoJqPK$99vTX^h006%i zuB|lC$G8mn*CWOvURGJKa--DiSu)HW6B-?bEnb??EX?dLzLDaa7lhAh|BLanTCrx7 z1%aY`BEAo#2SL!Z^}f$&({m93053{Gn$0{ROJvGm6aS1CQ)`n(V!&)2yE+cif9+c@ ze~a79+v9A%*Qz;yUrm>i(NXPo@Vp*~Bi>@gHKIrYak3JwEH~4u*Lg6!a2^T#2QooB zfB#JvxZHu lU`Q_DiBm-u48?>B-YRdYxo)*S#MbEIh^78c@*F5&#^RcC=O0!|SE z9i3ihgPfn?Px^k>oEk~D^NS%JgEG(He;?2kwt{GKG*;|hb?(TAVT{T%pmI96JoV;(M8{`U#mbeWQ)cLG1>c7j$8?{jr5=O~FE}*=q)Uu$O=hBs zQS@kDUh`;pA64%DjolP3aM-2Oda*8>c6)Y-TJBX+3b;C`gtYdMvU?P8?H#K=W&Hhi z5kTVc@1WPeWS)9{(1;4wBr}Psh(rp@S=au$7mwZ>ADW{u+Z;Rfrk%hcMq@9C;)Tdc zj77q<7h#9}bfwEb6$!KPkBVFnlJ|Esz!5I?bmHn#5jj3i%FB!5&eN;FL=G@1#=3Z0 z4VmwmQ*tof)$PAkfh$OFwt@3Y=Mx@FLT1wWx1ST-nQOM=&6`)@&jHdl93N#`rvFK%R5`1mm?W`xW3z*6djdFI#vZCDCXD_&}scai@-11!>Vt0KFv%gGFMRjcly5v(dAg7I$ z;wpn;R2wgPl@vm07?=84Nn7pRUkW>N4`NX3ZRB?DiZl3SG{#JCRAtLfU9`T9KC`3M zUx62g0Db9*M$8w_0hHk^ZA6A#ul&**=8!$JbG57O1x0X`*>ca9S@?=j=>aGbrPHNe%)VH zt-pF!=0=!G%=c!$rgvEylG@0AmlHquclCl(euwq%OW!JRB=hM}2(rO19GAp8EG`M6 zRJU}4AS#Nk$xRsTV}gJdv5SVidXaFZ=+OhL7n|&oi)|tr4LB`ZhGXQOpEB@p4gM!F ziWW86(nA?To(gF9-ky*lrvWhab<8-Zk%}ss%(@W_Qkk%^ay~hF(Q$R@d*1&X^c6yvcflH7#xN~3M7CG!_`NR!BDW#iXM{Zq|N3!s& z1ITH7C{btH%!VP50!#X$T*uzVj^p4kO`x8yWl3IqFdeOco6+64sShkRY<2n&u~;YF z6Myh!Hby@J^I&Zw%UufA>jw6>xOH6?X``ksS?K`?c2H`Tz*wpKRIsiChE&*!hitD^ zGAsUtJ~8AGvRZ7!n=o^lOUN5%b;D10xI5n<#viHdNk814x3gFaV={b4jYJ9MRH$qWVEZ22Rnkr|duNmkpe|%On=7NlpSl2YvV8M#^yJ>_>`KJRZqzRz>u=TGLC%bJdlT2V;}Y+~ zfV@%u@Q?*qB)`q!5~4c#06GBP0&hGaZIO%^1DRIwyOn<#3_+qp2bf)pI%BJfD*|oU zWKC6g-x427UBQT1+Zp9izrvtKuplOsj91$?J)Abz{8 z-fC`ER&9?$4=={`?-#6ODw`$rI6F$t1u+xxk(vgD#kcYFi9f*$pb;_Bztb#*`FO$~PGGMA3@zQIh4r`1q*}iu61mf3y!8)oe7!oO z@GHt;^ft~l#?&1C@IDMHlyaTUhO8mdEpkO#90SAc3&nfWN{F3xE@*Np7M8cZSGXJ@ zCGgxm)Wci>)nqu#cJgqV)Lq8t z`tTo3*~Am5sq`b8pGGGrj9I3_(v9d;?Y~zoV|KebH$MM*T|)JmS(xI5@Xf#!^#HQHV0|&+r^VGMQ);GuDqt@kU2GYL>E8b0z=8*0&<38$SHjVUrd%z6re1 zQwHYLNYoNjk)){+BGuyuz5op>Jf|N^h{+#`IpS49`xqsSdOdVj*hNTl(vk9)F9{WJZlT__uGr@9CtY;ez-E#bt{&~9oi%p7qM3#N6y5wDItK`Fjj9vQ8 zH*61teKRN!hEIuMO;hljV4-rn*Emlq-onuwiXK6I!>ClJPCLFUd)rqtP%UdxhEoFM zrHTHbVS-QFUMgB3$eAfwYH{CIl{_aR000#WJ3M28O92f7%rTB>s0l(1Jgku#18KyL zaP*w~cMqk~2PIx1{(Y5vN^>F}V#!147o_(VKj7%FHTEEGC!k)6#*9lPp8*&(_RjH& z6l!R2Rovlc`nXTV?$ixiqzvYgNXBR;|DZ(HrtT8qPGr?belIC9wEW3?$3Se{tKk0 zaNc+7K(Y6w=3E(P6jv;6yo;lftuqGMjjKkI@}BduT!m;>a9_B-sse!N-cHB7Zj!@ns?GZ~gmr8)%YVu< zVe$%^9V;h1eOzup3aTKIu5PE+dqQ=ati ziUuDmY#?XW-@dIEcK2J73)4N{%|h5_$M3{+!rA?4ooFH%OG;>@P#@xJ3s+Ju=WaFu|l zd!57NmA`C;C5W?=a@s1r9e$YvkRi zyvdRFO=@~O*8YGg{nZyQb47^;K)!Wko!WpGKeD?d4B3R(i}e zLVgv6V(D#JV7&M8mqB83Fr+Dm{QN7Ph08rxHtm~2_w9W#d34PudfWHh*lu()lK59F z0LglpWBtB8W;avdiuZ5G3lwgHUYB0?Iu^6LUar2f1A5KY>;bJ#k?eq~>@CFy;MV&- z)j$H}eE_W*q~ugucxxw_i_ckKe#(Wok<*vAEJ`IPA+LNe>x_38{r;ewfu3)>rb8Oc zzdS=?o>gTPEu_(rsIuIQ#B%1mJ-!RWclzvhz>j*sC55)iO;Mf9jdP&k4weH3#z@F# z=UGc&E^O)G=!;G13A*XPDdH zrMF9utk47#8SnogeQE^A(m4RGLB$q`Kl`bQs=b&N+Ae|i%?h7^XqdBiBTKC`OV z3cC1v@OWod3FwM|8{s$H{{BP54q4w*5BP(E*6nO^JOK~1D<$$0>+gtL3vhb&3OJ~8 zQ`8&kE!8^S+6K$e?bixEGaor26tn22XMDn^7zv%Xp|0C$?)*glz z4E(s082t-1q7zN%k^Y(k22%#4chAEMn^UPR;SK)Kc4HGmAX{>X*q>DAGSfRh%(PK5 z?F#uW?EtqgQfB0_oZkwO>3Ri>8fD|M@da=zxsw`~PPDa^2PxXyZQ<@caS@fQ!s@vd za;0`3%^#?igHskvTqo+pZYNsKA^nUa1dvmwG$0n&`R4y2iBZIkWcmA2bic1=mi8fP z<04kHR<-7cjVrAV%4}bcl{K^GS2@x8gH>o$a&POE%?!z|e9ER#xG1F3p8-6Jsh(#1 z1X8v%-=y_tSz}WoEh&&|y{sudJ4~qqV2wKL?>RRkDg!|N$rsr~`#EdhnjyHEuWR1D z9i(eKfp;5ZQde69Re1juchuEUj?7UZYYCNF+`P~n{cF;MW&>Be{J@MG|AgkB+3mae zX13y>hZ`_g%pK=mf`({dZMpT{Pl=wk1RIBiS~=laP9)Y9tRGaA)}bF_TNbo6MSl2X zxirAQP9E|=>?Ib@e_}4yWeu=H>7U2=SX_P>bDSC`Q zx5$g`OD(8{@+0>&fXwLf!$)4>(>%gxzK$(I#E)Z>4DkL(5A&mP zaZ`4ff1UD-7(|O}Fb!>&PzW}SKGXGbVk)2@09QtG7{Bn3sCy%+X#hn($oI{D#6QZd z^40z-UPCb-?OM-cUXzP-_rgWCuH`4Fj`RTO__9?jY9#`>HW$44U~#u{+o;bL&|Yw6 z?5XcF&Ttq0V^34uC%KT!`MHFN?EGs}t@c|-BHDTU-HkeyA6w$aVuj`O-9f1*IV|{M zGi)?-_Zsb6Y&fq_nShMvp0EN66r_Jkd^l;0%oC)FvrjC5h2&V}f25+O!m)s(MN+;0 zPQN6XO^gT%umZ)w!{PA`4nB)>lvlxQI20lcF+#id32OWD%g)VSGqN8m$JebO=xuT%ckKQQ-YE9)&3VxH)ra(cR@%u&_=KMr5aK{z6sHUmjaz5t+z7zo zlGpe0eNM~-Rn=ymNdq7&`*IU{9ZnHQb0f;mUo{%qbLAe{xl0lmXK4?HT+Q!3Ts}z_ zccI2|l>W%Z-G~_m#To{eT@Os3U%(T3(55@)FU5^QG8uko(qdz<`>Q?N083K8P$a`q z{;y`CHq}qfFqk#j%~8hZ4edqx&aTN+hnT!};S{=KlHIM{?99~sg3+LUsl}+}_x*B9 zow}v$!|Zatr?2o-N-|FF;WhBOp6%}J>H5DtN#dya$<3!)+ay5~XK+E^54Rz(&lc$d z$JGaFS-}*40oZC~i028Zqy|J^%XY)E4OQ#hk!wTICx3IlgyaqjpqLtrS?TQdNlq?s zwx>Dat1+Kx$u;SCteyk9fySOq8@!-0i_HO7wTodhBn;MPdl30_qKtxN4^oM~`0dR`&-XNTSx2g>f~zg9;5Z`&S`1_cPX9KSS; z^y*2Uda#OFqoeMkzpl#)z?mz@(^fxo=H$|@bpc{VIOM0>Pn)x_hYr}w>~BS(oa^3) zf?!E_exJ3au73wI(2S~p*{57K<$|kA1NPjZ^E%=e_rX1dopwv~wFHqjp@JKP{Zzu{ z;fH>w`~WO#N#fb|@=Gp4PvgQSc70pC_Bg^ucW}S%2R3e@op_^9yoSRi|vg;spJkp+^DPn6|4UP4H2l z^dot$4OFISK^KLe2|BB5c~^wl3=2xhep z2!I0>BN)>um9vahAJ6x2Lxda*2`t8k|EZZ2SF8bI8|gCm)hzs(r2L(~B^lXt$HOom({o@$iljsCEhwy!@G@tL`k(dct6-opA21*}{Xl;`G zHpTt4WFQMQIBM3-jf0r>+GTOO17XIi+QDa7t96iH$3vUV3B5pc#715uDUkC98%jjX z&QZ|j?@#8zbPb5WVtu-!?J^>#T&%wLNJYj$*;3^ai|L`RcO;2fUm8l*u82*zxW_l& zGm~4tm-}pcB=dL`VcHo!eFkG5yN*JXvnfYsB#K~{>_A2ir#+H(YJ*$4U7H#;=_X0a zzEWUuKj4l6)~-}}lR2DGXyk!EI|Z(5OB${9-XUk*tmhLvH*{|TwvZ1N#nYMEn*=Wr zlhFQsQh|UqTDB}Al=?%%VG=gjPDotM0}6{b?0sf5@N+t4EDE*VU_6vti;0SOF>&72 zNGY-pJYGPOR+&C;!DhH9DOJRTT%mvgwR0pu(~R80`DKH2ffed^#DkrR_x-DBQ~wp3 zeh-bN7sd}};YPw0at@A;Oz${U!>`<;n^`P*9w%b!H`Z&Kt3aVL3UCbm*mozm%VuNS^4yOeI;G~(@>c& zM!YF{ZgPF)B#FHT)u5h8)C{Le5h>E1*&|ZmSBPWIL<~u-6Xijra@M9jiHlajL+H$M zNQ4jepE`}7>#5b!k659L38nlZ`mfAkYQu*#Gq_aS-=bQh_s(O;TF zp#21s3&%|byc(3}x)eX+Z;j>Y@dm5;t!Wt77cpp#|9c$)14*<*5(U<`*hR+CgW&R- zg8a%a-Sstjb(GemW#Fq{B;ySaZAd>K{g+|StLjZ>`?3(FA$j?tHPB)z=4=7oe59H2 zvV?Rnyr4KTw)#?Fn`iqQ$w?^B9x6e{;p+N2bEczl%2JQ8JZCCmCcc=s$JR3zI^lBG z1gEfFvniInc+1=uNf~5OvB85XZOBNBTfstbC=9-7$wr25(O1f%0MwL{3$$ zsi<81^C0tfv+DT1tb${5Ma^5KR+ICn8%Q@oE+}2r)zI27R-GlQBVk}fT%Lqrqm7_B z`Xf`Z$z;=v<>vI$az6!ctKu)}&~2W@>i;j&gvH*Clm2%Yifbt8sSE#kt#gx9!l3^d z+_;pxx&_mo|w z;M<~~EGqV;`UDQ)+fz2u04daj8?0!y1Q0sm`tcPNiOoAxB#E0iOsfo?9*HN$S+dNB zpoSvg_BKIjFRWDeGK2Y%8S*vlA@!f>GK z$nrPJ<=iuEv7klao0UiEL+$NxLZ+sX9?u!Pn%(RO33oqCA&KC*eYS;(AC2_Eu@)vr z`WFm*)#N;)xSfh&g}^$&VQO7p3SCi-psWhkN)4?fV+xft@! z?H}MTP)#^!u(g9wiuJIrbFq7JTW!T({6aFfyF68pbfWWFcl&1_eFH#lGOCNoQcA_V z>1TsXV@Jgk!Gwwy#2?W3)VP=jvbeMs8Mp>eu?R)Fx>MrKJ7jsao)__He>c-sP(&Igf+kPh z-C~S)7((hD{T|X%_rTPmy}EJ^DxCj%P(*ovGd|9pz0jDi+g6o+E$1PfKDioHfgE+R ze|MFvy~Y)PI+V;w*wDAqp=AEdQfDlbnQ#D!t?1 z!{A=I7rx+8KOgq!VbpNpuF+3{sDzGwk(W?<&p`20&4C<_uuYE{cH4JVu=h${L%~_~ zfyRK8y>(mvv9IG1f$>v89F0d2pZ+IeAH`qA^lw+Lj=@;eX_eq5-}Xc1+clI*&sy%~ zc=f3*x-o3nPo43MS5iR4IBWkg*cj(ew)i=Zzsw92-I+o3G)K{2kg-3+l62O*8RZ6OnC#<5_7pv!>9qrP??l_MWA-AWDjB$X*w= zhVfd;p_=UVLJVM%_hWn06^a;IU1A5Os)F3bBGpdAZrMe_vg-ulelk`TR09NSfJJ&~ zL+N0^#Ijt?7g^okaDV0?Gfiq0s9rKc`_X6hm-^H#h|D5#Yz}>R*Wy2GiI9g;=6BI@7+kE!z*c8tz^u@Tj>lQJ+UQle=lmh6+_jsv%=+a z^>wamgInpIZb&6BNOM8U9Bp{H?Ty_|4Cp`wNotKmur=mmqgl)>{ih2kaa7s$>#}Io&8JkzQLh_}bu0A&vbLxJu`M!QmLBbIa$m7u5cZMn(9VFmSDR zLVe|wM)jNEdFICi2r>-7PC!M19B0?I^Duv#pXUXGksdrTgj786Ty)-Q?YhN|IuF;JCzMcF$#qrW#;4P12X4U^joxM?9ethiW-q_{b)0yp0 zdemQbXSVbw%XhY=(W@C;S~^d}mE@;h{#~CgDEwT1eT~a< z3(NN0=Cx*#3v?JBUwh86Zho#gD(0A0D24U_$bqrkDzmD1;Osf)w#aVcv!|-z)>?p?_c-1E8UW$XvH-fg zF#bqgNOTBZ^;3kxxJ09qPXXJR_mv}3A#?Dv%U)BC_@}VB?716g<$TN)Q`cznmvio& zl{c~huw^J>@L*3}65^`bJQx~9U|8zsKSB9tePqH7Aw^CJ65G6sCOac6or|3uhG%gl zPOSzT!BSe9y4Fu`c`JZi7!dSYDfst|5iO6f_ISn`^M93HZ0Bn1h#4-nz>{N z;>{YFXWem$3Vt`)qiJ7fwSdQZ%cFnla28_t{1VO+2fIj=$?<^gL8KM~g7f_XOA4EH z=$YCI!COXI^uth^a6r0jikOzy;q+r&Mkz>2&p_xE z8(5Blb5I+xWsQK>$qCpgvwUpOr}_O>h{L%sg7JUyRD0&3H2UlsV*4MtBS*zbzsB=y ziO@s&z5wX|pnl_-LR9}mc&RO0vU^2PJ?2I*Gyy==jZQuhh^6l(!2Tq0AG6_dsrq(i zB8yky&~j2vCRqomKmk+!@X2hia3|?Bi*zp?xDHD-p?RtVhzv7KyyT)0@0ZR2gU@_f z)l&~z+i3pU7z^d2XSIE_V6Q+uR{F1!q5pneR$Z=;7zb3K<|~P|$;J05 z#7?+f*X82)JGqPxBI?XveTyW4hI6NLKS3n6sSssp*t5t=0((_;7?{dJ@XMl|CoB2L zr1H2tKRZ>KWUl=i>)DcArH^nJh0!7aIR#${)j~wxAg2p9_Kpg63Kr5Rq4wO3l~e4kzVWV}v*R%#R+~Z_=2wzw&Ax zNIRVez5Rk-CwF6cYY8%CecA|vC?oY6+ym}%xB*D(NZNG4>8H`Inkcvg9dlrf;tW~u z)7TsV>?YR^V_nXqd zMv=$HU34}f2DBj7OAfQbK))n!3P%x1oRlX&1}Juyj(5w&l6lHe?)~;N>$Ahy;^D70 z%Fl3_s=uClmTB9X8fRm8@E6p@EHhNQNxvR-|hs`|GijKOiz^7Ene<8@2D$I%T1ACmEbWTX^ zCN(7SL+OE07o|%>q-P0M!x(FXUC6k{2{R6)((W|V@(_?1GCzXbT_r%;K|kFK%;Z zRY)|O5Y%FQ%jt%UNO_D1PwFdC+?i)A-E03^Q~T4HVFNGhw}l$!0elN>zmw5h@_y=? zJ@KC=uI6kEjb({0p}Scm)MVhRs*Rr!w6ott zitz&DbF{@3&1zr{h&xV#sV7-S$H!6OR&^7dnb$GKYM7}`UI@G2X~TZN@C{sx=AdPK zH;fOB-so`)er)#8Q-2Ns-OdGQNM^eoW%8WO^QeBXt5FgG?sBrh?_YhxmM1os6~QL3 zdJRn0B-w+=9<~9+nB;sFl^tvs_D}3ngGRWY&az4UOa{=mygNYb!l}+8ZmRBmZ%xj8 zYH|;a%Gh}SzY;q|V?^00gkIf`^15`HkJU=$4>VG-=>daYd`7=;d5ibM!XYR#hfB`qLJt6W905v z)2QUFZNoTeKP_+YmS5mO*?)%f!B&La8!k&D%pL~bZo%+fH1Pf#?lX5hHyk^Xa$LRT zF(DA9fAL#^<R_Hw@LaUa%0j|R324aRes8PNViuj=|5QesWVB#lZzK!f&7$(wS^U*bpHbrCBy#8s(x4ZKF!8GOiz{43o9y)acM zvTW)o_yiL+iyUVtUuwh2L!-v4sv#4Se_N)3m>H({@(+~(jN5!Tt`2=0WUI(VgO1ma z{Vz*OhCPg=3iz_4}Ga`=zvf3%Y|c(N=NC-5+7bzi(EoLQL9V4t)ozkbg?sb2ZF zb9!&1<^exzekGCWl#jBo5Y2;#uNsC@(P9nuAt+IiULD5t&i3Fzju$(-2Qs&XgJ3_= zZ_$Fp5>wUMUqj!DdTb~XA2M8G)@LHNPUim=UBo7(ebYz(QQIWBWZ|yL>ANdkCh%wo zO?9T98D0mNV*LjzqgU(bx7mueV(C9pL#52t^z@yjF#e1(e;MX8z&cRFmXYsku#I)H zUcN&v&wPvgMP&FtXrWk%cte!G1*Je93fF9inwxiW?98|AsUkeQsRW-pUi&Dvyu1^9 z?%GR`EYZVfOHx|atJ4@80rhrJgaG+Si{S zSPI5|0Bw=({bij73c?`(j80?@i z9S2(IzjrHm!VN`F7MlpCWws}ZssoyEmr=%?IcL;>hW>VNO=&1ThZPr zJo+X+`X9N+!VPCf5>aQ+HsxEb<|VQQ8sSE+1{P?lxGAsrq*f-wi6 z4*m{6$|U6L&usBx%xZZL_uP27xWD6uZ2<_r&VIAEZE+fz?q>#bOs}w)nMTI-^TGC; zOB%lt{yCF^7xq@c6h~kC7wj9d14tm&_TDEHxhhG;vUJoo!6_Fv$gh%e)x-V@_)kbd0 zvY|Tusp6zi9Tk_|%J^lp_}_crrrUEnFfIr4Nea6un*%Yx-~_l2l9)iTkKc4Da&EGf zysAD2rE$(8kjy*}z3HXE-p&UkyHu@$45Cqv8v(M#8U4We_u(RsCk5O6mDi8@F^aI? zmE%RIzQUM!tT@8g&fX$;SnGFkHPKOhs|)})?8U*V|A0Ll8N zQ_@OYstj#KQ}sQh0~7T}K$<*V&@AuF2!1!-_2K~7snw&tm!FZaZv=YE(y@}WvqdKr z1PZt$N~_}W+2)SL#6K6Xt+e<~vS7k<^lP9or@d?+sp8l2#od`Y9oe88di-b|USjmF zv8`2PFvFc9a+#6n{i&qz&`m=fDg#&Ts|UQH$?c-u?ZTzOvy{yYjUf$0yVKE7A_9fO z48s$OMT64}^KD=9y16+G%>I3NjrfHOb`D5kN_TMX!K0N{A20v_1+zh$5j6-cQ8JhW zzY2?2A)Bpt9uO0_5iu+-$K-TU@dATQL3WfioXAN1@B8E}Xx)Z`xL}&b1~TZWpJGsGm4<3y}2Ixc(pkM4%JJ%68ickC|&_78U8F0o(dj8*vRsfG;L7>$KLw|8g zF#$aLCvz$ku1G!ga_8eu!;=AzIsgnrAe|B}KBbgHJYUeCcY5$I0pC_z$ zYa;V5xFI&X>`q8|=}Gpt6waa`_1>V9V@WDBNqiT3=Y&>jMiAO*{5yz$(6!WR(D3%U z?JOWn-DBQoZNSDe@Vi+vepoLq7K>~^wr*fm*KEfw0logusKx-bs#C;_{&MkZ%Pn9a z{)ui@_ugr15AuFvxpq_5P-&w>ud=8j9dOaW$fK$9kKnI)ttgJBcdhQ;=LuX&=KWnK zU)0?W#G{Zw6OYwh!M2eava@`+Vu$Q_1ZY!}fK{{IA*{>gOsRibk9cl)j)hcizz3!B zCc5DHvn1mN$2?!$l-p3o!T1bP;(HuGQRDAlVurMT{Qv6jdj`KdPQ!<~iRep89`V_O?W`nO$LNqMV8V(% zrz)&W-{s;z$xs6-;u7|9`WN;!NS?nCVjG;Ji!%WB)s>{ma0e9X^RE}&nKZ(LSnX3% zXygESK!(2rL3cFZhW>Q4%$Qs{gC_TLk&7iGW`F<*RB~lkeSZ1%RV0XO8W$LA;k_mR zV6u?M8tW4rmYLN=&?ZMZDCH7-a3B3!eg+AuLb;kInA`7JJ0n5YQdCeS2WkV*l7BDO z$_E>zc;FwF=Pkwha)qWUyRU;-OPN6=pAiVmWltiv`8q9(1gAylCBe|QaxG%F4oMF& z(5SQGWiLy+c$mUwt@Jf_m2}80roh=-P}HuP1jXa03l#U0z$umcbdlv@hRNK905<3l zHs;AI$`tkTNycU;nCQ9@ilD4%5ZeJsXs&mG&KK^Vn(~&@i90+8&~v0J0e~y3Cxy@G_07*U;p|3S>nXXcl8g9$*VddI}i; z?OX6}y$Z>JkZ1nCy-yXRh6HR;b)kmY%hxcZ4Uc5wECosTN7-}&0slz>Lp%ahTzMwP zOk>KXMI1e@@NB@Q>+-aJC~d>7FDf*Q($ySBE8O6S@8+=6t^jJDL4A0jT%CCT)WR|s zQwz3#Rg|X>3@Rm1tj1mV2*WoJ0Ow5P$MO#`z$l;7x<}JDkRLd?TK5Ufs&hB{+DW9a zYkr98XIB0A;=my8fK+~-Nbjob5@e{l+0hYXz&u`N%6)Z;%`(z`1D!Q}Z_vh}nnVrU z)f41&?V{?=ma-FK1j}Q=4x+j?;D|#UiXG62X&RlzpTx!{8t>S8S`wUa&mLGQhOSDA z9pO`ArhRrRwsFND4o2B!VfA=yXy3IOCu=*?Jcob1&tSpUHVyu;^%bWTpZV0q)m6;3hHqZF7athmO2v6a2@u9U(qZ2Z z^C(5F2n(z_tHDr(30qLK`$RwG@Z4nA0$6^a{JN1+j@a;uW)oK-8K5>87Qi%*UL&zy zeou4~@}a{A=({7kcvE!miAXijI00*ZleJk;arsYlWO$!+Z*5Xs1D1yVn0t83VW|KB z0d+y2FJzQtOh;;syQ6hIx{w0#;+^j49Xiwo1L2+76R+)0+xxv$B9JBeJr$C&(OeBn zVZly#!rD3C@>Z35L5J~Y>O2|D%t&q#-72&Ge6gJ<8eu>}td>p-as66hCKTBz{o4(N zS+d3VMS+q4wi?+sSuBih-S{Nq3bD68kxtQgaFiVb0jfIB`a`}29I`@pQlinyv5HGv zyrCt!AL?F@^0vL;6UI~IkzuVECc%%ploCA;k&m{WTuzg>lL+z#t=Bp263fxC`XpxA zJ_KC8!SCo)Nf_q{$ps#HsLcYj&hpoJG*1KR4k7v8xE$3WVC{c;dAA6r&~+wuwwi)@ zxp-=ojA3mG8*!Nwb#+~#hycj6*x#${^k5HJ>)S+az5p?5E@u|6Nu4rEEp@+x+Mkn2 ztKspp*X)`$IDmhmEdGy(nDS8Ad=Z9`f=e`{B9a4)%RlG;dl>w?0^qkF-+N2JH~Q(f z)Ox-Dpvl=qfT=M6006rIpH68Jp9OWKZAvm=5=H$}V!#jv7GO}MMd0_qxUoZL0_dbm zHGJDnVFa<(-S3sxCqWD1XQ-yd8u&*QY{+P}5e6#kyRwO%Ws#xl-tS6#QbiEd`ranX zC(L);5ohZ76VMS!jN`JDX#%q2(YqZoK7Q3lWbLTo+ zKJcNb`5FN=2wnP3I)s5UThtvzOT1jTN-!V?8D2K@s30o`8DZ>=uhdN|BSC7Jo2Obs zcEJDu1h+w(RW%4LsWO-ZzY2<z=|j`d>>SzOM%rZ-FN+~tkpkm;VYE#%fRoKFkHDgtqWd&0vDMX6 zFbZ3Mf9XD_vOxX=yY=&?U*k5nei}%r=miC!inyvYT-G+XSUQI;gQA8-V273>iIxDG ze-WZl2BjjkjtkjU4ckuzxb?Gu5fPV9h;9j9levIsyA*@RKTLEuv4t{JzZS@PD z6|h+!f^su+!txtH#ezncBjR~WWM9|OM5v`1DZrGEBvSsrkN6`jY7tj!ryl6O)V&G*g3Vwf0Uf=sV&!s!4Gi|2dG_}S*o)~QZ;6NL_Y-61Bh~P>>&(aG zIfTmq1*+>b<16xrr+#i4wt~|7rgQitk9q!{ViBK{+6*kjRjePfc$I?j2Bep?yf`y} zXphyzvks5otO0)Y6kbLNPO@H75mpQCIdEhsvx^+^gg%flpjWhOyocv|GEk=VyPjHh zlKQ0eE_vn{N8_w~o#k=;l-ugDuDUN?RxZX1RX#A`WL3cW9)$DLF@LZQRm6xp&0Ik{Cw8PG9Q;|Z;MxgejRS) zk;ut!9ZGxmIO<~}j|p^(<{s-Fog&`f6V49^ezy|d$541y$-MjFb`L?l8QC;of&p)* z!-w^{9I+0Gsyhy-dPIKSDAE}a)*wpy?gHO;ab4+p^%;uN%ifb|YF%?=wR6s@CUD44 zj|MjFmR-JbJPMV?F?qaTLs<-9_J6yrsYs@JB)o6($B@@$RW@66W=)PwPKCRd@NSHc zbZkXoOdJI>tT@$niupzpe|EIc=6!%AV~i393=9%9b}gscSka5jO^^u!CZWiRda-v3HiZ2+>PNpmr7Uv`keC{7u6*vRixOl+k^C*3^k2^-H`B z2-(JXzSxQMkit6TNf6@fPyhe{sX?D}WRyf)MIXTNxGxCpi zlcOYE^=IGU9bsmik#zO!EE1cz!fg&38mkJ@qRykTY6S{>P>Og1d9>!?Sz@)MStG9! zW8Wq3g~L{5&dYr(ZIs7cAS{g0D;k`BYg`Q(U*+5A;Zg+ms%90{=Hw=-J@a3^3De1k zgi+$6$(4QNw=(h|k-RaOyYU?Q5Z$}IksDGLYYtKwmbHjx3t-3AS9I#r3RD~uC&Hr9 z<1OEu2shD@s?W7B^E3ln|6D83SUM#dRt?G#XH(dV+5{SNr`>Y5V0ff`3RLMS_QcqJ5r+*C2=U2U4M!rodcOBkq+RF~+AzFI zRF`+*B&d*I08A3bj0r=)+Ma{@Tzn~DMlxwfxoYt}Tfx>RqMw>ql&z(nq`lG5^CWjY zOU%B0bI-Yk?>P*|i&D~qGi@mG==L8o6m3=7)=7x}c<%?MFWH)HH@2s13t0dF0B-@G zlx{|U0KOE%D_O@48yWwSVrT$FP5IaDAz5RA_4Wu-NjCL1oZ^MrBCOZt{5%P=q)#pb zV0AHQJf+}Ls%W)wj>HI`2Ew=wN5CU`TB%w1$+UeO0LnI+G5yIjKH5sMWPN|OvOl34 z&(&6W7XSbkfkB&@H3%)KGMEJa;D%o~98He(W4-o?+Nahn3O_Ik?US{;vh5H|3&T^87ejsh+fpH2ezsfzvQHru|RI zzoQ_6BoU1nr#9VD3NR79VYIP$y*TPqNFdA?u9#VX?$SSu`EX&MEUaPlI3qTU`@5N! zu+uDaOuATOan2j*7=RCR^Pw`hTxV~}>J7Qn-f1D}nCRUFm>E9ZH+LSecC&5ErR3&*f<+d--CZ}|@=rJVTAB#pkqj1$-lSW5;N7&lIDSAgcpEsEI*l-Fu#hDi zO!k6>jQjmbq$A`@v5+5Tq7hFTSiS>&Kt_&CPZBsFnD>|s-*`` zf6`Vh5tjpz-Mcq64~G@~YyxI@2>{=~*X|MBkOitZJ*`kcS31`H)Mg5hL5DM*h#&7z z75NpE`b76?Rf){>lF;5K-3iuD1x#0>t%*+nWk=( zqug_#uk<=;)`zqfoE*J_U=%efvQ_G8mp9C-uUm-Ut#^aUq~;7b1QddaqBwT&SBVXA z*8ZwC^7NiY+anoTB7Er zTHe9Xn722%u;DOd9Z)&JF$2|6x&e&5&TzPN)X-0arLkHYp1E8 z9rhf3aS0&SbAX;cTUzDff4urXYg61j?Vzn>jv?)ecg2 zYe?tPy~l=b@3Rt=#V_fBqWJqy$9m?PGF>^$GO}^94kv8hQ-kk z5f}WCcE89Qm3gXJtP7MG?_{_O?uwl}?qfznEw#Q_3GcYW&)2Pgm^fi8- zuuNHDTKHMV8cKRkGhmI1L z8B%OTBfBqKrqL>t^+UKWNL<~JhyRPiRD(wI7UD}!DNXWLL0%}H{FnRCWKsM)Oh>P$ z9syG?_}__fRacYB$d}8ov(cbW2XknLC~deaj}P)8KJyk!1Zp=3FIf^Jb@ie<6a(X$ z$Y9DfpuYoNwxc1!1Rbk<+XNS|Y56Qp^)Pil{8zm|eLcblQ=rtn#gn$RK{ke0a{Lt( ztxwg9g%PCy=ACg-ggG0m+y3Wynh@8v`wx7GTXtW*r&RR`T%E`TL z33D6f-qC6f8F6RD7%;FU6cm(YkIpER~z&Y0DpchlaV;P_&aw zf+gy+@(&6hqXb=~i6wcdot-0r!IES#d6y?)9_cbu?~dDMk@nH8&9qV_y%-nw%ELKY zBzyl-18jwxWq;O5DKiuMz@uqrHnvibsAy=4zvWl-eWjliO&a=~-u5Gz5!mLdg~~=r zy?Db~a`Il`*Rz;vVoz4frCu%kgsYH%_L5dKT_!h>&WZ%KJGa6Gn>&oB0my)D)7+ZC z>YLR<>aVfJj2XOiR^xo^OKw#2A~pQ6jd}^NA)*QH@4>bkq!l*AoKTRmSwh&LeKPUB zp@^Tp4e2o5v5=8F?mS5q2!$~Ssh)~0;X$!5(CHm}C|{lyMX={m=L<#p)*tM2nVYKV znJu@L)L<^)Wrbrz)e|3=Mef%^sjPJCcTLVpr*!!-MGMr(r+Ot55$3|zRDJUiWD&=b z;rv|^Kh)hIizw#y+jrxd+G9hOc!c}7g$gDrJBJOUsv_P>Vx@Ci+5sY=L2a^H3#XY_ z+}U#n+Ei3f)qLBqq_Ld;(fLoKf}>}Uc&td@JpOH@hezZ z{lC*1IOuV^7r~N*2u4{byPG#u+LUg${o8gTobth3T8N9rAC)wt1EPqamX zV+M~n{pn)5!=}6s+U*ROYsnVske&_+`@M5s&NgGyh*M092N(#gfEryvh={QhfC%q&%l-tg?W=RKx| z+k&O|QTs&4URW7UfNg?A%T!W=G`xkXJdz+Pc*!(c**v__%}4lwyB4PS)GW9ppU#Yf z6+Ze?!cceFft*(L;7-jR1{mo(9%p5_X#y!gudPsN!<>t(vqDg~3adYR3FY(K2*G_1 z)WS%zA0x#v5DHn7zd(&qGb0+Zr^tHi*H zDl-@z&VplFwmmb}nEjSL!^laT7tVizQ;VxFHUt@Dfox^qVbsARVQ1oc1% zw@Ax2wKR2~>kGp5&Pe>G0eRtAA9qwWv90pw`n6e+pT8zc-fHYRCmFSe2rt&(zDYXW zzVk4}9M0Hww}k5Zm9njP7k;0e0+MDxm3%hMZX_a7JJS;{bzquw&;`tp_Hamx&F~Ch zjfWf7#Rt+LZR$r6K-N`@+uodN=Na@(-SVmYb%=ozI0NyOd#qHYi{N3(W1!nS63%j1 z)MqbjUhcIf9?Xx> z!*BzyvPM6D3FRvk+y=SmEYsK2qW7s4UR6Ex(_$1oF*DY0lS=~Jxm*C(CqeT)=M1j*x11K;=TB!<#7vX zjc02%=fx_HV#2K&JlX--gNxfbJz(sU{%<-VTop{Kw{HO${{Gi2ZH8k$VHipHi#?Z|YI*gTnI2yKNtB8P~; z)jkVw`M%W!Kfh60@a%YVk(|y0HlhV5Eu?HK$vw1LlGjL9PQ-yzMGDNS>s74cg6QkGzixe z)akF$MA@dNEj`OhsdSL8SNi6Io=GiQ61E#lBeXwtIkH@ivvNhicFaj(n}Mbo*v!>p zqSvd#Ioa!ZDV@IREPlyQk8_DXzDFYqts=4-gwcsq5uz1SIM#!5*mM=zsZu@#dNg>! z;^Yv+`-48HGdF>eX6*22?_fE@fIi2XXvbf(uOp){o+7^s*m3x!AsbAwEU<#|g-4or zFn9V2cR0z!%`=weK*zy!=9abxFE(W!KI-BSou-s^$-emKM~u^Rr0lFmQ)jLuWu8YP zeLu)c^CM0sWY;vUSqG=66zWZ;`r4LQOupy4`rJ&3(m^+_gR)7d*ZNQ}( zKAnLtTpta@atpyHQvuWy8xGR)z|)!z`4lG!Ek?b24x{snT+Z+Kc?4(0Qz1H?I@AqVvi*lq|gdZpxqW7)@D@?nWK{yhk3-@5nh;bZcHNIK!eSOQbLQ5b)w z7Z|v1x#)6hsE2@8BKoC&r+nOp*(~JgLO`2}?XOr_A5-hj#!*E3G(b0+3k0X2O<=nv z-UuC^iGJ9Nai?#*)361&?w>CJ%)kG7B<$-nh_9s!U}|JfKXbo$MVnzjJ|R#P6JE7`duB_H+^~enysJ)i ziIO|9631u3OW{OXIKE$dYhXBG<437?ju(5DgfcR^$0ae3a zpw59G9RuVtc)lOTXadMu=eFu! zwsUO$z%=IY^LovTu@tjVg!?GD8mdvvK1lzy^RXB%p`mTK2x9Sa--y-KUJ$?|yWu*! z4KMR%8mGPsC)0fkuSKgoxEJFle(2}ZB4Ok4+iVWrzb%#F6UABOs_9yw^XxlSELE=2 zh%6&6<(Bwa%?gC2baqefdd<^C{8TE?_*ReFOI@Z&!I8Cve%Cm*yf+ zam5szN#{bVr5g;ftZ)BnXs$E<<8d=i32$@EZq8ygK-;#YTwSM5eFqXW>6fM&-6)Eh z>L0fD??J;lbfeGHW!jX$`4=z(X(@w3Gz$VSTx@Z{gtPfyJ_hCKgpxxBl{Tw8R@ z)g`ng`BcmzD~SkifP;1WbvA!78GpMpv*d@`Fl6U#T^MoRh8yf!0J}xfdlVDQtPVB* zr9?Is&~|0R5Eq;8ZqN;muklu8Y@Z6`R0V%4gNb77ZDu54UgqP@6s6t)l3~; z`ikAxZ%P^-BP%1?BWrR?H6uKTuC`m!B2?ABj&tu*F75coQtLbR${kOC+}XvW8zBeU z(mpXi1xzlk0V2#kzDKbN&wBeP2FcBm$>m%>2LLiL6K7eK{=pp@j;v{a$k-&1Xtxwu$kCk>Q3Ri69z9zGMw|9D$Lx#DbZ17U>&ZcX*5YNRW_)x+uHcd%d_>?->==H z*}9Nv=Vif#KOHmuRYD67><-<*+xIcJ4Ju|Op9aGfJXNB zTxU{#jP*O5;ZZ3!7RUQ7c*N*@#zVS^V)^=V4`lw=3aO+#r509lOkUdod5E=_wnekzsK+;} zF}O5)VWzKoe`<~6WTb=Nqs3B0L4fLYt4EtH=U6nGSCbjH#x_34f_Q(?9dZi5JEz!1 zbXa{=FVHH=|Lg*~{Dw)({|h2`oJC0qviS)9zRwl4(@k_4-hvy8)%;w5GB^ML1_(i) zw`7z=Tvyy(d<^Mez-OtXuA+pdh>P`5@06 z5;bwReMrnwQaQ#E8gse)`oTX-r#~6W7lMgtkkQQ(XMd5<*SRQYz%-&OS0O+fP{xKr z#@D4ojxV2VYA);QVDi3cAQh%;N~48dHMZqA4Rp zQy&;;4KC#{R_PHgIv4ODT_p%OZvM}lCf^kOpUrgrq@EeJ7?r(}NW~>@rCS#Z`*{;V z1ojX7C)u+gvSA>nsi?Z%y?X5g1E0)sU4C(WM(Tytb_V$HzK>Rx*uz=^_6ES4cpj_A z#djJ{+jWsJK9K+es2Z3&|{t(42;gc2sTkw|B9`lnZpu@mFzq3NON97iI={?S)_fR8g$wUq+ZkZ67g=1 zoK~auczotxwmv$djcff26?{w^pZ(jC)I32DtPRuNF;U6%5>h0mtHSkKe=%}NM(6(c zgd-7okhictxA3%Gal)A~49j=2b+xVCi_SJnAIj>~3}ActHYO2*DAgcg;3#6%dZr4C z!o19CxIpMu-0d;_%Inq{L{Qy)Im(g`S{4jg%qZA zpOIp(^Q{ur#w@FxKfqtUIaA~Xoa{H!`Y}TLV2_OsM>iN^`MBruhCpOD(7lSlfv0z* z$WyzVSvWL?K63|1DF~L6(*U5;OCHfQKPB+o2Td?Rojk_K7k~2Y+I0S8;wmSzQjo^~ z#7bxd!2-Ol-21Y_H<7J?57}d)OmH!r9Xbe@lVb$s(jB(g+FOKa+FBlMibW#?WbaUs zIkJ+ct@-#vtw+Yz2YxWx3~v~y^Ju7OxmV7JZGIOt#?PwCXu7KQ66epD)*c33NiGaCWz}eLjWE+socZ`qG9iPM2uu2HyJw)tZGx8P@60tw}IC&f&Eiq z#$XQ4?X7?mY|dJbvQQ$Uds?D_8e^y}?dtQVp7qp=4XFeAw>%Ao!hd)TAkQ&L&HEb- z`Q!_FfaDsBX6A;Ms0ZjhY~;sJG?=7J#IGB_%qwY3L+uxOBgbec)l`tKlSqgu7Lmm0HXn))@c!+3ND6lm`iSX z;0E~rnoi~=sV|1Xv;f==h92AYz{RxB)OHdUZ8;Q#;vM**MM zZbpCAU}Lrw->+}#$%O2I5V6-;ob^l6@qs0NsDr;04)55|*pnro9gTWc zHhWxTO_xZn$hPNynW?+ekvW#D4)MZ5D+IV?_QA5u4i=t z+-n*isq*}!(+g$oB)GT#$X0=*&iu$0C2BQUMOb9pntl$@ad5jAp=h4aNMGC@&B>a( zsnuQ16771W&888?t)j$OR}mJZBpQ&M-BnXX?Tci>EhGM0XSIl1vW;fro8ly5ZQk=Y zMk$h4+bbfBT2xx{LMvdnnwo-HK`o|O-2Oq8uqXnkO3DWr8;zyyZMB;%Aji{nvVsF+ zf5q2KjrXZ##I;0s>y*Gf=rmf>Fk*q82+$Y&D@s{ZCz@}S^Dm)IEkJRt6yTFRP^Gou zcUi+#JA=2kLO*&(fg`b@+Z^@a(c}g!wC(cwf^ZZI|I8W|tX9U}<9(?Fc9HtFj~%YD z-B;Fwe7bt3G4mNYPP>o%if+1p-V|F1LQnIJu0r{o8yjWna)t`ZDw{{8fgjDH1W0fJ zyCR4U0Cc2JgMj|dvzfw2$6n`-9aX5%x0p`|F0E}%5^33px!pI;*|ZuhI5$n(7*t*v z7R&E`9m&ZREzoHvbJbt;n$eW(dxjzP3*GoLvjXa!kv9z~rsqwps&6nAvRXep zwS8Zy;$+(B))Sdy!uCP%2xYR)ZI7-wO3-<2$K8Xk*4!3Xu%l!2-&a=Lh0c$5Y$ltL zC`VwtBHmFk000THL7Uq(2ra2Hm7{Ri?AH`!&r_+wO~9qei{9S`v!i&Z?d z?}|nVz;(>>_aQa~**wx47P3$$I4ndNFwuYC=Rz z{>X;iI$MHQv@oOE=@qQ+V&?!=r?JtXCE;{!!i|4a|EU*i%F@QcHcC~JV-2=xbLQ6 z)xrB0+KnFzC~#h|C0n#w1P<+w!N^h$@WrAY_Ie}xVH;&ij>f1@zAAHO9^zKu2El^U z-|4I4=kjb$%ac+VSaJ^I7&E|0h@u{J6kVdSbNxU9_Ki-QgPNDpJQ+vAJ4MY@57J=@ z_0mHWR>%ubz~7$d0kEj{gWY%4Xc|D$sgujI;zo3vW-->cSbH)my)u9^4>LRfp+{ql zAzHrkcz7U5Aa;2~&L?mst>w%QEESj&RbYpFo4!ge(Fs7gc-x+D!h{B{e9uN$lS{S+ z>N1mM+5OVNVm@=&wfw~V7Egh^zkoK8-^O}(dF2J>)Of^jAIcae$bczYy;XPt`~d-- zQ36C*cf_tQo)@fMsIJ*MM)@fm&X1+X$KO-w)E1XRs?RC0xCDfu7!;3mA*rrkj(7ns zkTDpFIaaAKcm>f^dO-pY!?U*pR^|`;Y7$4up00JcwkTOm#vC(Ve%As+a>KXuq6kcl zMwmO#GCoQ23F`r;GHxbC#j;9NRKta6DuY?0z?VC@p!#%1rR$GGbU+XSSieAbwp1KanZ2Yz=aKUHu4@z22ajRgBV1ievcEH5 zxr$sWH5*+}+upU}*qzLiW7!`f4RBJn!uN9*tyiHag}0Rc6BsbWN2O4d`0m?9i`UaK%A_gDzWJh6*$> zQk;vLb5STSYjluWs`Nd9&4gN7l{kMfoGg79-YA6n?k$}`cLc_J8X9Q5Aus>JZG?vI z8@@mIoYUr#UemdP&Ll+iaGMW}U<+R9nQNq0Mn*+0SE|#(e3S>Ge+lnc6u`t{+na*v z|G*ilym!~(C!A)p-gIu@d+ktABtDoh_2NIHFx~AxLztLu^~yNa+Up<*(uitVpPaOS z$U*SY?fMu5M-o-pexGsODkZ#?!R6=Vmi;1z(V@9E`aGQnC&F$*Jj?-oS7_xSrQ0wW zO!Uje|5vq=zn)W6Hvi%Q$0$tK>3@Vy&Nj5Ov7nVhwUt#5JKIk%xtefHeN|>I_XXy_ zvsLS3J!P}P?Z3O%7?WMjbt`RSBy7KZ{#j2T2mqI{HwDNh4{t*ywBgHp$zD~D`C$qO z%_*4ru8aW1n$bw^EX8tEOK;_CHW1&4dXf(mxKx0|9NQ@qvk4o&Z!5si*@+!5(CwLuR+ z?WJQpg|=yV*C{mYqJU*6D>3!ZunU<;%WB2TM59B)gXD?52?ot#(~osS#5=yhj=QyZ zX){T($|o%i3J-(pxj=UBA4z9UX~`M}iRaXtEfD+))vV;0Bh$kmMr|=~*{?`+g*O09 z6qG>X3Y+Fwpk}BR99L@Ghn;`9wn{~b`BX?IES;YQTb?K|Y4ro}@HW=YF5VWBU9J27 ze_21DV~x+hi&y5_e3P+W7a^j2VO_PQ)?I~V0fdE=?%QYA$o1b;cwbv9fKI!I=e^={ zsI6~j3z}m^8J_G%Ry>aLluoGpyBK%DeA$4GjU`b9JVA{Frt%k08s)rHSyx+rwX)k~eD*|H7(iectr5#;@^L&to zH?#A7dyJo_KEcR<&Fuyxw|Y*jSDmIO_~*dxa7iZ2UU@ObHhXyaK-pdeaAY(`Hzf_w z_VAh9+;>c`rws+PIlKR+pN0MLrQsD4AWWXhC|i{1cuj#tnoMVl;qkBw4yUEmj@x=t z_jj${(UL8yNnT)q?VDlo^Cx;7!?WvWm62Zy`tP6x$ zqmFe%nmIWF=kbiw50(lP@*2v=qIk>7$ged#f1*5zI+bw4>67I z69@=ZNk9}rdgp?0d;^n1rwGi~H;;1aYT3=#3b$5FVS}nk+l*2-*5l` z0Z0L#`ff&lvY7GX!Tb-gGC9qTpzMZMizrAq`W;`m+chs_Al)?gR|gW=XdGM#LXi4v zozsStP{BzUGgb^B|DJF zrpG}?$$M#UVt4i9pkVCARV*b6d6I#TD>rwSf~)5Jlhx`#S4@{T(McRM$K*Xjh{SHC zg3i5MTK71{Dt;70rKZuUT_onD{zd5P{)V^oc?)mwO=8#FZ;Ew};5N6K5f z>zR=`O#Sq|@NB|`_A08t8>4YU?OXFa7-YK(mDuU!2IlZ1gJ!0&)=1uTeml;X34#=rmo3OYfX{5&B`WXfO@|J`UdaW64C6$lz-yfI+Nc;W)S zMFPu8WfDMd!CqtQF>7waKa>sA;_PWMM1^)b`z(ERteL1~M}r7UQZMBklvaT3*=xkx z5@@NPKOhaClP)S=!vSm`&DZu`y?(D+#pz5V0639)<}TP}CD|iAL|#t(14rQn3BOJVD3Inz}Ih zih^5CT^EC+n~$L{tJ`L`?_3c79HrqqX@kGs4sj}k+zFg|KAQCPuz^S0R7>-*)Eem3 ze%{RLN-ienfv~teo8@(X6pi6?XQ%9ZAX;8OQrR<8Zt<8m!8M3=lka%3UJIYGM4^@z z0Q?ngg|=h-?nKYz$YkCU0X~M(({PL$m_1zn6uy#(W(JgB`^G$$*dy#Sd(m&y=I|pu zQxXooTPDNmdh#4SzVY1|5m*Bow=nTGgu?rJP0QRRx&yjXYek1n7n6^lA9?EV+ZY7*PsFSCN3h_&E# zc+OcWl6jEca52i9HH(=P=lng>)nk8^DQ@Dknr;MZ6bB}FLXQ!A!LkG$!!*PAySL`QUDqq z;-uPgFQlM|LJn+-Ds>#Bzl&Ruy&3x3!&%)u5$p`d?q2z#9~qxvaN;;^0um~PCsUy9 z;#Vl=H{mB~;gUQtJ~3fmw1F?pjvCCZ#tY^c<}=ji?L~ElkcS!;REn*u`gwnv`|rI# z7ZFHvv3)GywnZHLDrPz@=GC;plYfmL!nJhJ9x=8p?zWbfFQ<0Jm*~OU8A_9H{8gs+e*wHPGID&wz?{BA4yQLyO23qh+``>(i12~#MTqcbAw zotyDh+xnK3Mz8@6SnFzIpI5+HcH1#dGu}XBh-Dy1cCN+D3YacTj%6O5#W3f7@?se& zZLqOKZIs?J87LVrd9{ViHD|<{L))+TuU!;y))0YO$M9MnrR4m0_ybBDi>U5!$HwgN zk$em9EZ-3pF869opw;rinNUG0Ixquj_~CoP@Z0s;=V9*yD`$LTGIEE0a0lvIRP;r& z%}@G73G*xBXX{*)SBSIRkS@O4wU!qzs@vgz38-fdq9R;oQY4LC`~X2m@jg$Q&Wvhq zvv8lbM!OtpHu|V6Z?L!TVwP<&YW=-k&+AY}yyvlcYG(H})M@(DH2XO-hvO<8jZsjY z9{+;V^q1Ip?p4|ulv5`RuZG|KQK^#Q+vs(qAw2U)FT@-y!j8C9r};GyDzwBOAQ~Qt z>us3#>jz?{`7roTjL;PnAeo}(hM4MeLcreG$52zlPdH6rS5q=M!k+`S=CjDE-+r_df1ZutG`oV ziB55M5Swm*wXz)D70~oT_1%S2cb^#4{Z?>U_L+41czjPtcZzgY=8+HQw@!WekWOl= zzM()xx1XWFO)UDQC))dRgVu*T-pvQ#E!PI75$7YS%c5)HNVJTS`t&MwpQp) z7?zWdpp~qQBSu)xhWTq(-yMu3RmDmd1>o(Ek;~Ab7?E1OHFGBYnn@2tFKT8EMhzjm z+T0on-%_0C^9**b0gOp_1ye$R32mA!M-=p~c+GJA=Nkd9@AoJSzu+x|yFnpZggr9uLtFmnlD;3B_y z8_|Y4Oe;Rgn|66j{*q5w!oMlfQobfU7n;AN`MsfGbxZ;8!Sv_oTZ&V*84q`UJGC$c zN&VwIODZn9%Mzeproep&*@DIkf}bM~t8dm)bi3#9N<52QW|HEQu)E z+AJyfpAcN~u)*qDaYuT8JcAfT3EN>T!~Jq~RJ~(xCea$U`^L6y+n(6AZQIEN6Wg}! ziEZ1qt%>tx?{A-T>Qr_0zty$6`tDw`2AG80Ii09yK<3lCWUykPUDKX@L8PYmHApc2>cu?!sdzG2*&U&;_L zgNLG|XfHtk3>6PAgHWCCQsd+YNcqMMZbv9%_$=slf*TDPQYGdCR?{kEr4>nr{$4~} z+^B8Sx|q%z9~Zvt^9g0th_`^cg3dIdiIxo~vGcBA9t3SyILgDSe~^?(ip&#jfgnng zmWKzYqQDN4YFG`+BS1q2i3Dr<>0HJ+dv~U$D}vY2$bnjdZNMk2U)~6XvB;slF<7IS z=w#+UHB17q|MWX{W*+7EYFUlCVxo?rC)mF@L<4KN)joZ0d55hR{qXZsk;P|$*q;A& zw*sIW#ZCgz9M`KKEU+=#*N8Q^)(^&WUtVUmF}c_J=-k6^@MuC=8;XE6n4gkP@XS#BS1=;G{J7d)E*@j|C) zlTr;w<#W&|Ptv=rGsb<7NIdVWYyBf5u4wf$P0JTL;3F}C3nyl(HgWB1T|+N`W;}RD zc4Ih>q^hy1^c#{iY(D#)EK0wZS9KiMuky4z(!0eCL}7_}=v>;G60-s!My5rQOxMJJ zYy2Tj#fTXrCBhz(8tloqlStf{Z2%=6eM~$xFpAKlPAkUv+QkTmV@Q`7XNR&*k+JC* zGBLU`iX&xxwJ~e%6E;)dl2w+%Qp5(LChEO%*MAY#SVLJ@tSZq%oNEqsf$>kAY>wFV zy@7;&jjF>9IM()nRz(PLqKCWttWiXZ9+A5Oe6e~a9tek_5To9zjPH6H|F?4AlgI39-0m^6Zuh6hE zr08{Zj1 ztE#T{I@mL=25Jj7y}6UQgCBJa_Q=I#8PH_JjkZ!V4J#_iNpof?Wvq)96#0YjdtN9p z@x1@w)k(m|(jQ0H`07PTrS ze0Uznn6WPqY571^O$8MEc9$wX_)X2_%g;sg$bP~LkYwg&`Z&kRBJ4IWS5b5T&VV*q z9anCsrJ{jm+F&r%$iQ8`5uKR-2~9VG5dT-6dt*BE^c$FIl{LkAsnqzUu(}IROp>CS zfPok~Q0%En$^i)V?8Xl9vSz%hQux|WH>{L?jmC?7~T~= z0%3q-+8Epuk%>+J5qX43Z!Z;05`I$&J#gohVjpWtT*^uNOgi!l2oa*8B_YTMvT|rc zBj9^HP-)|F%kvMs+0oJva3+Zfpl!eaj>RuSX<|$;(ZMh$1^*J{ObxR=Xhvo;Hf6^5 za*Fd1`wFyfrL*b10i?9lh0I%mX*e!8A^`2)mLkB%;YgK^{c(aO?2}Seg_fMuvCsN& zU(c&Qu~RCi<4`-}AEViQR_Dhz8m9_Q?+QYcAGzxJ44CV!Eb-)vv)JT-Kob{{uF**G z@D4ZfA?l8DgvX(PSqQ($Y=1K55Jq>16T>p_xZKuSw=1Bkh^zkspltV9>JT8);||= zI~J)E{vgjit-HyL^0kkz=}7rcu_I27SjJur!Iu>undvfqSp#k+n7G`95UHL|HPv-u z2-6lpb&8?%_I66Nvdu|5p=M?l_MflO?kwn$X+i78-dhibqKdjkEKlc0CJP2tm0N^A zvhUeQaRPYtL$w|A89GOT)xQAOSw)HtRNUTY$HY{%ykjunLv)8 zeKV#qLf{pcL5@c^m-_M@&1TWt0-uX6cCqA>zy% zQx2O)^4Az6&zxrAc$(svYK+Ht*i_Er4;oT3a6%vxR3@!!8OX6xgt}>)Su5&rEQZDa z8e^-l_do!lsR8o}e(WCCl{Yq zuG;Tkdl^qv7ubVHA4`Ali0Y+FlT##Vp+h%P7{Gr|m1PsOEl)RwZ0e%D=MXiGQQ+I$ z#6G)&foecLehjcUB&vnk91bB*x!v_RXJxTgvqPBt0C&eFtP4@T8|TPlB~a_Mm!h6M z7x=4OHiPGBHf*+wdU&1&p*EKn3b#(kjd*W}5cGwa&k4_@&S;+k6?$CY^HWm;@Lzjy zfy$y_#0R}Y6vMHmlP@9($Hs~BUwK!VjNKoYQ>RuOdiAW9^=(OxaG@j>P-drSSZF?r zIhvk7k=sR%!2dkt#fVU%XmzbkG1CcovHuxar2Ra6@rJ9pXd!?+FDdt4_R|2fF`}98 z2_xs!S$i%nz({y1`(4oYcJkf1DnwYDm2b0iNJx*U0(k+;v<;E};EDG`4|60h@N^+d zg^9D1XyV#3L+hC0&tDsM8B&j-^*CPoS8RuBe=lje-}$}ni|A}ylr%2yMSdL2E@E^J zws!gTcr>+$Pz@Y{R8a%j8UiBmeWpN-8P#KQqs#l;E($Py`JA)7GF3$?2^jMSy1y@O zL2dAT=RFRo&Pmk<&4S?--Baf3F`+Y~=K4;yh2AirztHK(ArV7n$O^jTXI@0%63ADv%n&+7`^l zENefVEJzFmoyR1#)V}rP(xQK5Fjy$XFc$n(h`fSL` zW_c3@2*_|+!j6KCo##-@z0GwSZVS~*dT{EU#xLs2;lc$khmBp~^>kl#-NiEFkTiVW za*F67!@B=@oxOF%O2dME@ut1Qq4K2gLGg#)xJUJ>Fk&|@IuK`(k$nYXWPF0CwL?iQ z_+-3ng7;__VGC~|VGLtJJqiN^?mgr(zK5*`N(ByaZYWhtzT_Tdie=hZ;%yf=Ad~8Y zxq&v}OSYSM`7wSL4fzjM{2+64hxmu|kWR8P*+g;LnNdU18!25;8&E9CdOTbe_Fn0z zMe>e?J!r-Ra)K2Wif(nHadv>rCwlAno3d;0UcA`kiVpffH#B$g$4zW+G8#l5wqfwN z&Seq0l9i%^DnUSp*~#9hQTHHkv9MJ~{g&SYjeNm~t8O8YMQVw@%SeybW26bBW$e?? znPOrm?TVExzw@+%(Q}ygY^g^Vz)Nj~j5J3wC0E;ZiCnCHxV`jEM8|ME{C`7zKOmM_ zzZrVD?l=DqhAo$hh>JIXlPO z&bgC=9`D~G-I)?$(19LA)d6#*974=Ay{|0d?U7Qdq(gakJ!9O=R`TZt44kISf)GAl zbb7SGD3x)h7)nXF%~1-lM+aUCByNcNQHjFsQ1Q|!py;sc&N<#3S3oxPlKUIDkQDs` z28-^@afyF1Qd-ZJ1)wHj0LNojF24TOdME*UbNWxl0-lGh)rE zNhD#KW+;aWZw0*CrC=ZVu8u7_Q=>rp+21Rl3KP+pp}$y2d@l%X-;YR|J>c7YD6bhD z!$@hH!J-4wD*2yJ8Ul?LWa%c3%un)2}iyrqM++K7X*9eJ}&#W%~$wE zB2{$v2Xv(@n8Wvb|Y*);7l-od&?2R(g8MgMFI%NQehYRMX%cHn}L{Po&H{XVDCbEM^G49atc z#VrnXKO9~@7>?Gkf2^%dYaiPHYjQYJDlVE}z6xqfP-UAzAE1A8;uUoHxM_`!f?i6V zz`(z{(1DBFu*UzXgoOjQXAngq!fE5Q@@9k*|L`b@{f!Yp6R)XTU$ zVadsU)6xsmy3KYb8(WiMjW-Yd_^>nm-Sh4K-MUZ?z&B7h}DaTE0< z>w3hRW@cwD0MpjY?~Q34HJPmi3Z|t_JpGpjg@(TSMeW{{9@T?=kS}AlcZi`w*Dv{j zWeVFYQ~x1LH0GGymS}oh>OaOMSsK%6#qX3#V{UDKYk$v3=Q+OdWR67}>@83W??x~w zvzEo|#HFAkU z99uvW7Vd|(T+|=)MlWR<+i!2>u;)-Gb0T5F+~Be!P5ld%35gA(iqhk>3jGB%YD+u= z2J-h{Oo{`F$BE}f-dZCXzCq#%MLMDT4@s1^?y^`h5xgZJzK+i2KpnPt?@wER<9G;d z!$%%Jp+ZPTzrC;75?bd*icc*TW_En%x(t+)mS4&~o!C(MQU^cGkrgi~Y)h6*6{j5pJ=3KriHoe0vx|{Vq4ZXSziY*x%)JU@bPrff7C`a!n-vRLKMB#Hz3FQONg zx3%h-HXvneR^0`gYz`z@j9pGsH#|F4J`A@?je$)z$O>mMYT`9 z>uvX%acLG6c7iQ+s~(Pyu;f_&y zM*D{S@~kbE(156?*j{O>3XbZRoNmPp?2I`dM(DKFaq}332RdEfNM&NAm+ci=oCY`b z08RP3B~-(OCP$~BLu*H71<5 z;Zq|1%MO06&sp5O=d8+WREYGuB!iU-+=?(=ul9h>H2?roUNA%GrV{g@^;89_Mn-BWM|`bY-!%Y#-wZz-BAB;OV| zC;0pR_6sPUtuPQ0vm0j7vn}jTI9j|7G(J!kopBqs|ehZk|NThWa&p8N9((x9Pz?KPkCfV! zfY5ob#gpZaU&cvD>mJD$XJ|4gcWxUmBTU@msh{$ihP*D78<=KTP{*njcXIX!KXxJ< zgSNUea;Wp4=oY>2#<=pf+ot!7mpqB|O^d);`6t<}NH(AJcb6eMc+u6%Q&fW({FHj6 z(dCS@%T}N`^K7JKFetMq*EEoA^S%1%Yv9uz>Zg9@OPTBkEb1#5R>1~6n6xNJu6}Vi zSaA@~{bpRG`#`MF8MD&yumsVU<#Va~XgA1xJ9>e(=YiHHUhzkcrnxvy*Y^TnG*6bO`Mgk{Zc> zgWPGBZWS8Vv2i%wa+4t~IqU(Bp8IQgia_mvu}X-mT7c{@|Khl3|C51%$XZBG-$XS( z0^eEKber)CQ?r_V1{5Otq)zZmliZ*jJ4nrDvih-351!j&NI*&a5R-!Gxn*qn)6Cbe zk1)<(c~#6^sW*k)oOE3h`L(Lf^CE-znZtD8^pO{pVeyrArP4igj)6v-M)1FI`jDGo zS|HZQYajI=APr=6*!C_QO8?Mxf^T>iLHivWU+cB)-I|;DLJJWtOkBp9pu*n44f~g6 zk;)XK`)G%Ztx;^Y3IMNrMwCFSVb(=3oQ|=_ySZY#j-0z6SZ@ul6RcwBwXgkNH9&@T zM~r{`{6*QG`MQBPo0p&GMFeG+_)e@2gv~09ZdO>^_kIZ*v ztMKPt1d)9l*oWJ(Q{9H#d0(Li4#g!4VRD@)%j#n~-x$(@or`|yEbRs7*hM|`5Su1= zM~qpp-)jntChg(#6!?0|{Ok|Nfjhi++Ao&t8s?r$JNSicux?_`J^@Kh0DU)qdOpzS zzWQYLQcuYvvh(0RzJ}=X6WE*C$o6c4fhqbK>Pr{p0`N*tIMmo#hga%M?i?9-c)K{` zR%Cy+Q&^v~4Euu0Y{B>IX<>zq{Y=*{M##7QD8~9+(%`_*CG(AsEp4LkuEC2LPBdyF z1a!TBTbyszHp26CM8+m{TY7M&3#rkKuTwTYh~QRFDP&$-7L55IdOtLwaGOd`4>hL3 zBHoQJ)t>$l#Ufqnjjoc`p&5hNE(Kn(^P|dSaQ@u6nI{#^`@N}ltP6XUa})KUlk*tp zL=JNfd#U8+UQW5+QiLC0n6VwujWTVp`T3%M^c%-2JUNwgzBN5(TZZipYR6G+VJBlM zzgvhoxuC&E@#Zg=PgHckj5Th-)kT=Qz_I_*B;Qx0X66*>XL(enEE^(uo`?MJ(5C%H z&^A7j0OJnxTI3=Qb~*A+1_0;0W|^jnwD11@JUI_D$$-d_yY{{R?m>w>lpguOEn47B zwbuY!F2g#*_0Y663l|l+DZs0l5RtN|3EHNP0omnB`#IYl4c9HNFkAUK zQb3qWDGJ|83hz6T*FwR*BJVp{N+gouTg$|q08>ttCfTcC=RI&}Aaw($#emolhEr*> z81nZRDzA3$o|o)#S+6B*d-E&dhq8dFT1{sh@D-GiHNwfIQ5IbEi5nt(X-ib2q~Q5nwbh zjBcMdkMvkb{%Hk>B;w z#lbgLAR>oVbIXXp)$11!00wm_^nRXvwGt{5_nT5-reCgEJN8*MZeq_b@Lo8$R7>!-qg(%!{HXC8^_M9W0b)HW ziMxfstnNiikpwW^YyKBB2OW@7T5s%Syi(ZOju2-LT%DhN--2L{fk~2zjCz4T{=Z(& zwmVFl+(jY7M{ux+ER*W zrPCf(MBDX2p-PGqaDqU(BY!0s2eEHQ(BYe>3Kve03)_|jLNZXr1}(ci^itIv5Z5m` z3@7B3jm;2r93SPe=@RDEVor;c@Xm<2rhvX zvQpZk+Xky+|C;ODZV7wjyHxIGXzBm3;%g`}@}m-u+p#Na`GQi7YFLHbg-d^>8fXvI z(j}R{WD+eg0`K9yJ?CWZ^7XFR$9QB-C%}u5_j;87bjz1LW-Q5S*wUJ}&=>`QyQomv zK7w~NyFbH~cndm<0&8+EFHh7CPT7m^bbdUOT_#dIf1SG|>?ch-#fh5HQAEDUD#B4I zPx$^B<;MKh$Jf}^ncHoej9L4QFj(j~8;~9fHt;%5g||pgja!-wPb1X!>Kklt~(Uby`i?IvE}Zd(DWqbiKcj!!4;zBm^Qr=ptRDF4%qQsrW z58WU;;SWh#*ifSa&0|g*lJ@7!Bf7iR#=UaN3BXoXi9MQdu2jS|Rlk_fGbW%xcxi6E zXH10rx%+nK9#WPrB~C!SOspJEU4b``>Pn{*W|AP~THOISiD>&dP<~s(gPXUqS+|MsG|dp zIP?1*?k_hz=Tn!^7rBQ^pA4CeHVHoDT)vwLF)t5SKdZ3?Mxo450xb7sy_0jNEF6`A zk-m(8mY^6~76#eCEW_Dezrv}4H4d@v3=vpA9c4XI7TF1EV z6r>VrFhVK<3+pj50iCZ>G4$UrB^)Lj%~(OEg!Ndt(a9lRlT*4a*b3J36)zrn5V|y%7#R zHaEc$YSlX}xy>B@X&QtR9<*#V~O_r`Sl3c@b%cX8?~m77{^Vm%kKa z(p9f@8s{u$`cfW6!OW1V0OdB3yIJEciZs6~owzlh3`lyS#l^t8isdOMPJ0MzMv6O4 z)>L@mHhBVZdho&)hoEwk$Ve2c9BxGuDR($;LLsp zda4$YX$HuTQS0n02%t!;@YGZ3K-jfaSc)uw?zDCP#NTDnSNh7xU8{#VHmGa0VujGj%6P6<>jLpU*T+CcmnlW z#x?v`KC0Na_xqR8qZ9;*N$4B!Ob+Uyhm-c$88>1#3xnC^4g;x^aD9=AgeOR>i>;X% z-N%Ha*rrxz7~JA;A$frJQPcv`DkOI}Fd!tn>y4(YjWDD}KjKuLD2D9jz3#MyR(Y?R zCx`IB9R_Y>U!F{K#2MDZ8qQa-$uK{wlBG@an@0BP)u9gcsGK`U=@OAwFQFu)YL~1t zF}`qfVM9zG1f+@)k5rSLd8K3)^a0tzPW@>Sa?Z32F4gOitb>=QCyj+sIC$|ho`sSk zNaI{3-A$jYgl_Dr?Che`mo-hg=||!+pPJzpU0isoIxvntZRz$e>}P=~MIloo5mVL3rJAoY9sY}74qBo6 zdC4gzw>6utJD?m?be}$vSsrs=ycm+Mda?j_r+3tv{hkooQw(E_!WE_<}zbkt=`Cwxz9cvJjLK7Q1te-x67Etpxm`%Xu`GPXQDvF zc*+{pk?mkMg;ZYd2ApCG3mqg#nQ~0C{TFgjDTJwxEfD#V$M_v26f=%BobnGv;<-++ zd=?ae1+Ta%w{_*D2vr~65B^1GRu;8S?I)BEEiNeyddZEwv4t= z$8KL|&(D^VZJ%D7V26_Afmy!Io}*5`+a4IMl!Wt@j2Ch7|Amp~fq@3*dGB!V98zA& zCQQqHUKCt+>>UT+kbHM?_$!N5e(Jn`%rSr}r_zkniOw=gYlQc-5US1jtwjuwZL+YF z_v^<3{*KoO6N1*bc0=l4RfvuX#G;h`Z94vi!9U`O-zJ=|N3oi;7ASxH*Kt8Jqq`@^ z4J$UHJ?R)*z2+sV+ebWFZG~H?y^N>&n~&e;}s~P zh1CpHV$>-q71NuZq@#~-{g`sGy2$Ko_^|?G~|Axh5aBT={aj!zaB{-W5j; zP)4JG_3^-yBWturfr_}P&QAmigojxeE8L}S%SOO0--s6$ow23zXq)dxhw!0S_i>Sx z_Ybs?-_PvhzUiK%nHNa<#lx}VkFoj);h$m+8=Y_ zd*%koabH>NgHR%^5Qm=ku7aTrx4k<2e?`9<$fGpv#3(Egp|kX|>!OW-U!GnS|JJP9 z8DN(z?h6^Lb-lhiQa=R>JakaoP zYVt^K>yVo|0j43sG!B^&0a2`RRPZPONw~nFxcnE%(5&BinAz7q>9LkrF2hsPQJ$40 zXj_RdSi**HtH>aY^Oy1m(zx&>rUTdqzCLi;PGD(W>e%#J4U#M-0|(BCCifEn-hOZw zEF0Wf-9Y};ts#sXXy!Wui%%+^ajGV|fi zK#Z4Le@&oHvSji*i=R@!ByR?S5Gc&*q{^!>kR=EH<*ZMzW7pEEGCtER0<76tXo`^+ zX=n~IgF%(o^>pJfx9Qq6>E0AFh4+UxGFYy}+su`q6c{=3If!+Wun!F1S3Jp7 zip+HY%Dy;elGM~Q*PEL&al7Nrvl`UQ8Pg=DwXf>XN7pJg$P>ID!Bq6#9SmOEVAq|e z!B4njSum&QzkVR(v>xZ|MHETTkGMcgOXMqbtFP0bsC5jA*)fG}fQaoh+3e@EbTXDl z@g=AujMKL@MUlx4lUSvZL^PTKgDlM56;}jZFg-}@A@67pfVmBW{e7zu##{UfDUJJ# z)7uo2@h^pkVfE944y5e-$Dj+0Z(G@T-zB{2LD1(1RqwP7fp z*NJwF%RI`z1Q?wcVcGid2+;|Vo|qSYyJ&uyNI~n)WnatX{sC%diS5t2Jc6%IYdz(M z+s2!ov@&H~B!1s2(Igt^qKbfzAAl5okC}?|lm#=dD@zX4HoI<~t~s|^7(XrJC80dD zzMN~G=f6y7isY+Co!6i(-g}NUi&}T@5^%d9O_BVB?53^99z|B@UfB~~MReQ;_kEQ| z$}JTAeeq}4G@C(Yy^p5d-Xm}^?&3K+jwcrfRa!Irka-t;iTF9osanI9Z+x%EoncH- zcRr}h;=D+n`$DLx^|<3&yzI5T0oNg#%!IW*S<7k(Y_tJ3QEG~m!bbxGO!=XoVT@{} zbc9Cz5lAFn-7hGL%JFNdpHs{z`1T3ht&!pKzQ}4NiBpjarsB%E?EZ|3ye{8hx)Y+Q zA1;`W59uf3(F&9^@B>!Cd+Zxl*#;((WS0#h#d5$TjIADup6jY&uSWdX;Rj=4p3>uW zoe)W_CdI_o1FtHh9FBF1*d9mnL&Wl34$J-r!tV#%pJI#Ih;df!^h}vZn!&a$J9?q; za22Jpv6qEWy&Y>1QD%PL*)4>hcghB|qh}B-OdaA(K&42ccVq)H`IfbV?9B33LKL!( z6vf=#gZ$pMI)g|APb8KbBW^zqY^z!P7dP1~QFNl0eCEj6n8f9-hV8l{a6v<=jd`I+ zk!-_nK%U_@mJZCVfCT$(XM8JpR@it1^%m|$oaed@#=vI7)V z+4rHs>k7JlHCHfkC__1<0!XIKCNHZeFtJ6Twe#*71!7S#fGAk` z2CD`^c9=}o-j``V0-PQG{<92@MjTA@JEz(pmXv<@@ay#fm~>}AQPcMtNqlHtZ(b?B z<>J;r^-Cna*p%`Y+p6%dO)LekUylveR}dTu$x|XgTTz3XOkqc-$M>i?+rl5}%#}Mq z$Lj0-1m!@M1vAF~7YX|gwRck%?tu{Db=~F4x13M{kD&c=TC;L`%W2<-(I8VcG7jKXvdPI#~um(BaE~HCsWs^iyiBdxo=CWI}zhdholCA|tRt z5wHp??bo2et(KAFs=xih+}3W>b(1N@n)e7g5PExqwyD+joSya?K8<6=@{ch`$3Bm= zujOHf8j{h4n%TEGcsz(g$Gx=>24TSGGsqC}0MVF-<%FIL=)uGydwhtkd{}gkjpo>q zwT{orf3gk80a_%zfTJ&?W*z>8S(RO2(K|_F=GNypE;p-rgccdV^k6;)7vmj%T~Bhh z04%Zk0y#CTQSvsQ@IqekVK|aN%1*C;7{pQ!{e}-_rjo_33g{%;<^C3u{nLaTj7`Kk ztY)nqoEjyNQ=j`%(}V>h?cm1aENIlYO3kIrhf>e(!l{>_AQ}`J2>!d<=OtCWrJn$jI*dcP|==m zz-Ivn;n4)=U;QPy^3GK5_qEXXj<-oYP7vZ^u-c{~%k3f|UvMP4%6FBd-Q_@y#+ix( zIyY??cIOY3U^Ueh=sJCd-!Lem#BJjH3-Lh!47gZb8ZYFVZ8xx$QeM5OK;O<|O-o`r z!5Tj-Wb=NSL8%X_l@!>z>Aly{t(-|hHH;d=nB|_$ocq~``#vqmE%>FasEYLTTa!cp zjN4`nPr9w~xQ)EOPA7xttsXOtsDG(v;Tj54)Vx;)yiwX4Ct4Q#_oyUgHLrhO#qjhTayu-eELAjM>VdqNaKYL0xG7~&+c}gL0ks5-W?!` z3qlo`1N%wWM6CQavRHy~9OTVQ0A{RJO!&DMv!+7pew1^ z%F@OyKYl>Gu`aPNhj8T>3~GE*_y(*R?v2mZi1CIqyc;)tzQU@rMg9%tgBc@0)`T1lMJ_SjVlg!G^e`0gygOK(f(t-wiFU~bHl6*N|(BtKES{duL z$#}pZaBhjT2r*p$jM9RU+qlKW#)9uOl#scP=&)}p2JQz! zQv2aUJ!yyTz(n{wu$J~c_V9?yq|ZrEUzaJ=D?^wv$So<*y;L)gF%8NtL&B!4Q>wuM zV$5`|XU~)x3c*9$ua^~ca&bcZ@QGUtXHudQzozY{qLBi-F5nMZ>1mwADsV#JSAT(w z#FX-@@pyfhg}u81dW7p&M0&_grr7;|ZZ#1o7vg7~<+&P{{M(8dlBR&{bM#ZNUcr%K z6xo%oxa0Mx9uP{Z!uZ=-3=)O0{1y##Vk^>|aFM9x{stmz?)LSnq@7GA|1cOSY5FY} z|8-@2q!8H5`PYFl)g`cJ4&$UjswNaFMu3r-E-s~ZzatD;PkGIv?SgZQ*R$g$ta>7~6 zeObM*vxULW$#U4RFJ*6NcH9el)x1al14eet>jkLd9{ys>Yd@(rx&=Bw5UGm} z67|R8>G{$Z`2{p_e9qoUi_Wf8j&twDq{QiZ$uiM7dLM&lQi*&cCW-~$zY@@RHU#ly zM=x*VHAzHkuh24cWNvh2>|Q)97=_V&A#4IJ2_AalHAZalh9w$7Hx=b81fz~$qx&8_ z%vmt-DjYX1-M49n3*3Pt7PgT=SIzZ!L0RPsC%F5kVGSiP_TZW$m3@Ctq$wk^-~CEb zb5QPW?sFZ)cc%OvX*UFFmSbM}mesR0YtGd&G$Q^SlhL*Q_qqJOr-5*1{Vz+^CDrv`wV;HA{pp}c9 z;uPP_&-*_POU)PROcYT2573&F*|k4SZVe|24wbBFhYAQb>PukT_66t~KeYj^=`y?0 z%7W>+(!<)!FQ0Hf3DXV>swwf~$eex?ExESRbEKiT#G0Qf2} z0c0=#i~f)n8Z=geKfCZ~Uq^9P+M~VAkCDp_y6RL_ zs_K?hb#qzFuPsZr4$%W;((@b{nkezHT8#jCJQ?|4mLO-WgL&IWIo=F*Ef|Ta1V=hW zINs7dB=;KfXw4Klf&<&W8oyz>K*6&N?y*KJf)yR?OQvw_^3qv3s-N6_KJS zcE{hyS&z@ZW}gO`8VHs(x%I+^fE@SRXkR(Jou)PpsB9Lg(qsSNB||A{tKcNOB*nAirf7v5?}q|c(GTA2v*PxwXK>vQF~xgKP& zY=Op#RC@p%QHpru=-!jjKWsSU1Cv75T9z%nsfxrOM)9v6s{v|6TAryz5qFrK?PJ%V zS%E6+ z<7qDJV7bW_7AYxtZONUVS+WA<#{MW5sL7bNp04-5S`u*rw%Jf&@y$0!9SH&;<|xiO z$o3%re=-AV{29j#lpFv5*Q{EU#5ZA$QSU*LVImwapV%%uW8#*G*MF`FoaUw&{{jFY zX9#Ad{6F7R;jrF0wg8J_+!Qv!hnt*vL9Wn&>3;i`)-HQLd>opm4pqK`BAw}cD<22G z;?yPf%rXCF-5LYEU{x|*vO0Txu@;X-n+)c@nLyF{401pSUst5N?yq-HO>%yTZt}#z zYMnJc%lc7)XrB>+oK|`SeL>Iw63;~8d@OwD0GX3~E||wf`hT2`@j&)fM020OS$V71 zt^!$+Ov!W|KH(?HJ^HlN{BgO!9VhJ;VJ@9}ukzp1lTnh)6=0)6l=oXhsQfn2mbliJ zv)vBF+G>Hc#^4VAy#NKVg9pzV;cBS&sXd$S$Ee@o90N;fk3SI%@xz**d-2^bU@9*d2_wC-DJ; zc31`)-azeye7^^`gx@3rDe&w0&L&q=y6x^T{%dDl@3o@CL{WF)YMbhY7K?M1VDDe} zZnnoyvEvYl9 zJiFUetm;3Odq32JJvu)`BfomETYO6ApYhTW)Vn+#77Pqx2NAO#^Zk8*UR&4K5<|eL zi>Tg5J~ucgzc z+|p6+XY;Gkrp0*%xZIvWfT)uAS$omII3aAVreCzk$5R0%SlYz+(Qf)PAkL}$*{_(o#Fiw{x#(uaSwgw}G>MCg`rCpIk&!lYiCFh|{Ojk(mmmKPMRxBm{=Ol&A-kjc>>r3IJrZyQ#Vp z=@v^~aIwN>ObRN|(eX_ z1&Bv~dC;8S24SAgV1^mGabMwW(2s5#$MDJaEW)`c9TO2nJfh@ppB9`fb&tLJ5Aw~` zTR*H*i}ZzjDXFf)Su?Sb;?q!f5;aQUk{(toWkf>44Vp#PxGS_iRRA>tF0CTzQpON4 z#(!%{B5niea4$;K$SW*e%g@@_R7v|%c&69!3rxe_-IhSP)g~JS@LqZ`WS)itK*Ks=DWXe%_MpltgFHBZ6LJSmm?d0FkLCH zP6v_}&p&7Zft98ac~cBP>u3fuR4iFJJvnNT%ehFm>K7YE-U=v>48JgcIiT?S@;SI3 z)Ydo5CU|GyWZjJgyE=fn0?$OG*8!5>t#SheftEyGR;p_FYH{Lck5r*}g00}V*t4}T zwa(zdpO3KKTp>zm6D8o4b-sU5)^GHADXdi`^?}&llMl*aJdQy9ImHodjo7X06~OIY z+@2x0KQDAB+V9(4A>u5O;DChHmW5985=}~@$4QV?NQwEOo@0u(v^3J6IKRwq3nmFb z2@>6B=y=ETsGuXDs#V;|4CtN8>sGknC-m~_W6kDmo*|jeRrG1Lfz4gFVgCVwGz28V zWFGqm=A8bd*3~t}t4iK#MKqQD%#?Eh+^qb?0O!!l8ckf0+`&z+62Zg*c_MN|4K7|Q zfn$Ck)4`WrNzhn@fp@ozXG`CrK|6k4G#6RuZqZ1i%XR{4 z8#CTYkl}*i&B9*?n3+y8ncmJk&7)>oPf)b4;L?ViR94id6D54XX;X@o_w$M$k@OZ; zLn&?Y>ApT&*?%qe%9g5yFM;~;3-OF}@rIrxlTTUyn$kM(Mnl(gv5QjB@BP1li7D*> zn(g+0*DYAi#iPbfD5;Ox2HE?PfK`W*?R4C~kj4oyvWGd|3Te9N=b{AnaR% zi1$g!y{kvz^XDOb+uh=z_&g;Hjh~`T)R{(Sv6v_6M{)Z4c36*6Nx}N>RlVwXflVes zuLQk>>)qmN8nHu~@DNBbOMZZWI*=ayTKT#lC@KTfs?z`qzo0f#ZD-5c zM7oboytGta@!3k{Bkz zfomb6Zm6=Z?)}eHPratiS4i;DnDX3yad1f9I5piPRUjX=`vm9y6@P1hC|zI=_Xh#L zMO@G4%Qk0JS}PoHXP8(ID#(&g2GQ~0E#2zxxDs`4^vfMKt*sS3DH{yp@0m(} zCjqO_{XBS1o545WwG0;?$~2#0J1!N8dj7NGhQc@{R_6|t6bPBz2~cqGglEpyeTo2P z`zVj))HAwCqjX=B^~xpqlh;4F67y6<@6e7kV>)Eq%f*)mnJ^+FxPYkbY0GnJeAZ?a zNNjMPsZQmh*jm^*K(cofoqUA)bqR=ppj<#-r*c?ikD$psoG*cC!FUbS*?%fcaW*6D;vtd6Uk84_&4^6%#uNJZ$9+w^Pcu`7=Bg^;)Mez zK7scwYKXlXlV_)O{G+f|^{W8}ajr$#{R}+q*2L{`31V+%wO&XiXe|xVP1brh7gg}5 zZNElV%HMF1zH03#YwgY0rxu~IWxaj7^lbfVCMaT|l*v8n=Q1X|`5`&**_OFcSea@d z$}f4jfaoC{(YU;5k7&BR-D!ui0t&7o;G-K1=Y~G=6;OtQD+h1)8Fxxxakr|WyE25s zLzg-k+KgxkeBbgV3io~W4e*Xl+Y1q_`y=r83DgC|zCbbU^Hu_VwSYnm?rOE54o`dG zkD*QXiCLV>c|42q-jNN(ste`jn1GG!3n7pwjULY7YVp|Q&H|PkIofyxkotF&G!bIP z|5+sYoa&8sM5i&`3cy>_(Y$ZmK6;H4g9)Nv03&~C~jY_ZE1hU5Y&SlzL7JHoBN?0Gwt zJfEX@7M(^z+4%HDVeLQQEAmCMd8eO`s!k3i&^TVF%g&qOC(eneyINXN$@3VsC&g(J z!fZ==PCs)e23%@ReQgple6$~o!Kp~-DZP7Vxu(I`sA{Wdd_TMsGjevYg=O&>H@JNM zD!h4!+OcZAWbxqUG{qB@Ts*$DqT3UIhC@i_b71}hATR3v5>_EvzUY2LuIJZY9KUJt z<-WDg8*1ntNJgAGxAt9Gv!l3G(fMFfv>O3+Jyzq=znH1+KkFVU%mob{UI7;?b@7NF z6DL-GI2|NteAdrHi2Q{_4;_0;ww=>u6sd=VxpA*RcdV&6DT#-d_9rg3?Cmfsl5W*z9!#(v!*_l3MHO_BN%?G@^RAwsCfjqhsCE$qw%B zWmUi$(oOT>;az1=i3<4%avA*`A7=GtDmX(#zQZ&D4%Lhl1T|?)WT4|%f3a1nS;v!P zpQlyTHi(8d!b|6yjx9`M<*yeL&lu5q7b`4RKOE$0uFg3!>Hq@10di~)2&kI} z58>5p?|BprK}Zh12Eo^&ZGEpGi@gLGrze1#ss5A4O$~@IenWsJ6xd3u0?gt$ge_(7 zY^9ZnaakO528!OalEqc2dzPzhqNnYtW$%oiNsHH9!BiN1obf8b>AvH# ztjAYd=W&t#+fu^P!h#*cAE1TBl&LL);IeDe!Z!?ZiGQL$HRW-UhxB3fiK83>UOHyh zA_)|{n#oTK5MbxcuAc#)VXY1o1{=&X-K4**1&Hd1d16=LZCD$B! z(7g7B&TiHnv=OQf9*^8Oy?(E%%&!0f=X8qepq;psF>jLMYnPZ;SdSR_N7?EjG`PI{ zZ1jiWV;G8`+-X*j`LE6*@=Yw83ce^OFbqQ?)cVewm<{~Yc*MB-4I z2x|sI<=yyNs6F?EH5Vor@Rpk z`weGkafti&^!Z%RTqwiNXWNsqIHW95mrG(#D_IoiZjruh{yeJyGBs9YDrEx3H4z-Y zJ@)+Av@_gOu}{-aAzXhwyw`?v{1Ed$De;-AngW1epWpxh1_VK$v}BY-Tt{FCG{AW# z*(d>Mg?s`NaFtzD*(0y5$(BFDvvvK-z&O;W>uE^*w#+tSrPmL>F_!j zO0RQ4;CUB*HpY|ihDLG*AjSi4vHvSsee_{RXfqL&rDUqQhsoKCiq*&s(KrK3kz+io z0>qzsYMfd1SF^yc5sJh{9JOX4CmIJ}MSZt$pox!hR9zM|Bq6m*qw?vAFQz!3H&P|V z1RcS;7e9UeyQbO#V0Osgele&uvka5n`8CJdx^J0<3O7-yUicD-@nwZ4w8YI5>wqoM z=6B1+N`sWG_}XmetOvM#hayu}s*V;HdZ`0gTCVkgK1#=lbAv*I#oE2q8y)sN>$C$u z1|UyYh7&@0p{3o7NmF;=>ugJ)bkwcJB9@@Cfwe{(dk#JQ@#_?hu}7%75I+Opri|xI z8v2c&F6kFJ&zH#DJvA9Jukc;ZFs(&?-J9*ftT;VsG}-u7gD<#VS<`M;HWifE_I^== zsIoRRHCl9I>iD&RY$`diA`ABoU}E_5o9~{>feovn{;j{otufU3V$;yy-UH(fNR>)L zf3qn8(fV+E`nC0Ki)hp|vR3xqCu1oOR3u7`{17f2KyUHhK&3lAOqEeJf; zCc-Wqk0Occ>o;U^r&ms6;w_)}JXOM|R4iN%LVS#deIx*yB5?5@)q%&RM!TC>5jw;oZOeY30a-3ceFJpHnC zC7yY^A8h&J^8GwAcsEWL4pl6)twKv?7rz9-R@f_53YtuRd4;R+TzB4E%f0rTN4s0# zPrMdq@HlW=aa*J^&MJP)a~We4m1Pg!)I+gckFl^Y4vL}7|0cBUky!;7ZEBi?Er?k# zMr5kz_=oF{>EPz+jyfI2Eau+Hp^sj-0ZosC^vU$UM#)Q^NBZ*OA_~{RV(`@s-64Db z>|Sx%QeOsy-@$#r@h#p*^LJud`5sbfn@YQ0sa_v1l9LrP@*`EqW)@g)277)_f!x_Q zs0oagH9!YZ{E3D&(u(UDj#Ao6uwPX=xKe$JLE>Kv$vkl#+?iLHJf04_Ot=M^&GR)$ z3jkV-4=RC#rccG97>GsT{$OM>EjrXPXf! z)KtCI>S`JMRBcFRl?>o(LwoJM?x@HGlM*5el3^<8TrKodyIJ%$i;-nt43x^0*mC$t z{*r^*gbr+1jKWu`wWWSI#k50N9R|WlJh3Ow^O=(!6pShdn8;V7o1&noxUZr(ogHW# zn`MFuwqd`541!GrYoB*cB@pck3tR08seTKKN7X<>KQwKhvAFwUk)0MOjBhjrqUb)6 zqYd?fA}(+PeIbus z<}=|N_R|e_)}+>Gdm;*$oB4Ys(jbGvA$izJg0SWE09hp5+r4pv3*FsB;B)1`VbGcL zm=S>S@eRi6IbvuIKH;gDMf2X`KN}m1u_Rr!#pKMPK{agnRn^}tL?s2);`j^J#xNgI z;x1*0Fjf5UUjK;zD{=^< z1>w_cPfA*c2n133J1 zz`1g)RBaT(qp-6Td_}b}5Drd_BoeGQ2Z~NjH?i+B9@^OpI@I)XY6o40j;}T}Yk6`u ze~5`5VUyyApYx31z&zHhCaLlg%Z2cA0n4?AQz8MrhxCfad-vK|@~g@JBP7c%;&5*Y z)$9Ov$Vg`P+ZGVWdk%ph0eh1|xg3Rr&T1Ezs)w8(H{>y;LbFM&rFe(2!ygG=Q$ z8Fj=)h9pWb9t;H6%5xf(BzufZFJkj{vK7ZCUjzns{k+-g@;{y7y}NjIDTx>#{&UWx zb+?b3OLbt}aJqS%Y!k#2)mC+1|4C{l&+@$yr{!!s`vA{f%5^w8xa_=5pQc42q6S8Z zbdA5G!wM@0?qcP@gbGx?4k8wO{yK8i5=nyl)7z?1n8MUC9EYE$CLMS!&*(0YZ`$HP zsi}RIidn41Y`p9_DF73){4~q&6E!wF`d<@ySAwp~b;Cte(+0jCZN{X(-Azt!;F{}j zJljYKN4eAM&YNB6DwrvaAVxEb4B_w7`?3e<3et~cFudN2{kgZOY3OC!W=uAhC2h(M3%C8UVHEy+?F#!`Xyz*F zdsn+E;$rK)YpjPgqBWYnOaw6qF>J0p#rW+BY8pOF%)Ti>(U$+X=IDJR82#c%P}Yie zlxr40al#orC*mApn_(i<`pbC(SQfIx@@rSB$Z()7?d1Sq2$!+-xapF!qvqj!!9dc@ z)wDW5Y^3nwnu~35gCWlB|H+ZqJ3TZ;M51LR$W!+ysKs1W*bjW-U?VR`wCRn&?vFJ% zaE`89-@gn@-spFz)&tLSrx5opBIT9OCpD8H%RY3Alt4bI8)5EIR1Is&se}K(5J>y& zfA67%xd?2_k z;}Ef<9a0{_+ULCa{?7 z_KKspb+(bL!~jj>Pm}SRvhTFly693hj1)iC!rRYu zRG4(QymP6(i3{k2`ysfdPVyo8hPG;{I(Ee<3wt7e=(vvU9wnN8CxO>10n#}XCCvsa zr>N&yg#tvXXlS?F+L@kRtJh(ugJwC26|q5b%`x5XE#+1ucp9lal1JdDAzT8nyXNNc zlfyZk|3Rf_C+>;?8)JBMC!YTj4)5?aC!9~+$yy_U*MRLv(9Wt+fn}0+vy)*pd~RJH zpW`idJl^{JHa1Lq3ug#YQzGHX>_{TjzLTshfPU6JN0>cgIi9X{$Oe3 zA!$AHXtXFlh_hiTcG-=8#?YM3w_qhZHkUXyPo7HqIHjE$$_ym2%}C|x{Uq@ zy$*k5`2bN&+Guu-%y4BP%z$3dGsRNM>lO1$|Ie;oMU%4#T)5t$(~Bs+j}sr(qo*5{ z+b6+2rzrv(IV1Hdu>bnC1RJ=@{WXZNXY4}N*Ke3GLJbmzcqQ6%6ykgbH#ZY*KmWx< z7k3EBSS^5vl_^1XuLBvAv;Z}O3OsCV);z8H(wfFnQURi@=O@>#%1BIGv(xce@s)A0;u(km!Y)Zg%{L62V=-vO66jox z6#{Wq0L7Z0en%(6HXX3`Ir_)7j>!a}ghAeai_g+}}3Es!1ZV z=CH{HMcb;2bSNCa$DLhiJ=UIpKfEliXroGul2RqGvU`vZ5bJRiHLJxXov(x$NB*Ld zqY0kJ+i#YO_@yJaOD^CMD1k1$Y1tYows=t{zH!=OO@OW!Z%-dev~Z^i)X3L`OQEcp zWCxUo1EWyFU!tV)E2u@?fwFc~jCRjA8XUPAH2kX92pUP??j^VrMP(gv$0Oho&VPDu zHTDsdD_rQJQ{5gnQGsFzrYV_)cwt{l07i^tEuy|~pXq%5LVa?m(aXSn&MH8LU z!mJp`^Ghpv;_KPVxXWN7Nu@2S9C2nppj8^kU6M#EAfsl4p*LaDFn-2bP{cVco7UYD1#TUVXKUo9^|qMXAQ-IOjFlhB-pE99c`G1| zExkSGU#U7c<<>lrO^Edxbq1Bv9cua+r?IB&@C%l?uVMTyRl3oYb3SIRw3F=0wrOmX zh@{&q0?@L8^>&-C3g^J7&ELGDC$kE&13{?Ze)0LBtmXYs%llgc7iF-p3^xPMEppE`-j{-6Pl}v^{?n+5}~=AehWn2#no@7!1bEL`n7!iLCwi_mLZ=qmf4pyNx}91 zPd?ZvUr?d{DM5`DthQgHviQeW1guzG+ud;jPi>!ge6)B-gXAKvg^P!Aqf;v-={e(U93O-h@= zM20zuS?yt`xYb|*IrJ-j6^STH<-Ji_XqS)`U@fvvxHFCLU}VmH;ga{&do zL(p}ee9}I1-5C0PV=F)7d>_R~ZZk{8?+zr7r0@-VlUq)PQs+Hk|3pF23X~UuF=4!JZoLsftWU(qMg(9VF>uKWFAJe zA#gi(X=9W8yFgazPUNJ7^5x6IFu``N*VDQwCal<2FG0eq%kIVED&k!^u$&<&MVuV9 zKLiiw2~L&qxYT5vTvE~q8LmB6md2A*v13thkgdR9ie=V5X){BfFwa=SLRqsg3o>?h zz6pX>TT-TusP{_qbW&U7sJ1cRXGWrpSvG~Tp0;pxFRj1+bm&Y@) zfj*FR43PvWk8yA|FI9YtQN$_PTbEcjK5X8~c7^6=NwEg?3eR~TXJc1hjYzOG#p4in zQ-}J;!K$d)w`?)%gc1U`L}x}@eH!nN)a}+^hZbdc#jIP-(RnqCf6&4@y_-}wdkg19 zVGc*jqp-3*$!jWD>2kJe*H?dG4_a?=MH;i&Qo&#KV;`%jMZpiECeg7bvjw+{7%mF= zdys|IEB;aK&@wkI8)UW#oR8O4`!j_p@#Qt*w#pY4S&J~az<|T@mW5MUX(dpcmM_6I zJ=;wyL|5TtbqX|oh@~Dg zgdy2Zwk%o;%PYS>q^_bAeAC%LB5UH27Rk1ah9X9Xi74=CA>CZUVQ!tjRm-9&6(kWb z3TV1FP+q*zVwNlXsk?psb0&WFX(4;{%i>d=b_mB8(Z8lLvo>nYF;XO33{xBQ@8l&$ zv1u-PlBQQLZHw{r(L`1Yk^!ktuFGoatbEx1oY1rMaMISOGP38ZfeNg&hFTGR=%S75 zw^3z~z22-cTbtr)FBU#d8&)%PkD2cwEJD^%YL#^%?siVy{={ZA-{VTeHM`aR=&tq|+gayf9QXO|v?s*^&MJ^PBF7Ycd z4m(Tl`y>6Ba@jvn=(Djar>uqHSp56*9f5fGGh;IbWs2>l<`qQ}1fn&)z)V-=kDC5qv<`gEpf_p|kep__hcviX!24}~#)7=;ga#Ej% zQ|<-1jp({eZ8y>CX)XA295kLdol|@3*_0XJOs6d-YS6Pw^6dd=Tmk*dPDflumUA?o zALJjbmY9y~igijGPwDV+Zb@-8(`o&2ei;(Q7(P_>*zv)#rHy$(=iVcQr11KdGDd3T2|?8j#|Q<-QX7&d-&JjEf@>ia%>j#Yms&*Hwb?M% zR_$&p+G7$s?>MuKk-QcGtzK9R&56x&=~!B`8Mm*`D=Up3@6`8YDD4{!;m+u6K3jDa zLh|^5!mcwRTQeaF8+rx=xe`)peoO^(vnPq(wM+11E3=rbfy}1HsFp3-6N1trBRY7P9 zi5Y{JjCq6nHBY$Dt`NDO;De)SX_4ME_Xbp&wvu@Tw^4NMyege56R_Z>mt-d@7%7A|DzvrCS9<+JY0{-vXy(!*jK(ZH}gU9|_88`KYdqqiQ z-8K@kzteE24d9a;gr~u;U&A7F*BgU0|XxY4Br;eV7z8DA1MKcW$|3*x~q(l zOW4he)r-4L!;V7{@+=buqgPca=v=e};(CZ)Y~@@8A*?s(Fk*4%4nwQLJsjwq!n3&v zLR@(cuy3a}Zd&DC=-Ce{m(u|e8_v>zjFROeH_nA)rExDAo^1Mvn5h5&0`)pqKyK)5{nWs9=pztyh@$k*B8OjSZmo8+XIk70)ni zA%`d-(CE;f3kc=IL zcXF+I*8ohJk^o>9fv<`tK|44uKZt{mr+j%cLJ#~i&o1PZu}FXL zB_h~XEyWw+D_*4T^_Z`*a;&2beY*Aja{OXA(-tYPc)XV`ReWy!On}r`;s>xZt~f)_xirCFgK<8{k#^cHPyFl5ZYCZrAD&20CNO-h=@Vjirot`SPp zLje6ATbD-FvOoXoiuhb=9n*N(s1k%3i!8N_NCE^eQnbS^kQd@Pklh-#!FYJiy*@p0 zm=!k`S^JVsUQy^f?v2F-a7FljY2UY6l8m+lCajQcWwfS)RrXl;to`6W-oER=jRt-Z zGpmx!1x~cD?Vf>E;Yu;e zWpDnh8@oP;d@lD1;a&%6Fw6He5>%?_D*QauXQ;q2O@n!zNG>Hl3af^xor6@yW=5XE zf2~K?aUQV4ZAt6SJm5lU{>Ps>T%pD-jN%-$WG%Io7BR z%=|B@Gt-|)?!Dq8jiv+CK3b$S-;+aWrGaOEX~ThvR6Qhqw6$9+EVL!q&hxt_URdQ* zRddyi)}#=lM9NHJvu98&=c@v=ag31w009mGo)>8mpTi;fU%lZhAuY~g0i#lNC3JYA zhh-|+M1;~4lF;PcqTz-c*P!0XMm9rHCc|r@ZRliPrxH6)4>mH#!f&;xR}-A<;*9V1R=ZtXMbvNLOp)B&XFiA?!Fe;gR znJaWKf~zmU3d-P4=ttpl&Ea#U!2M+B_!y`c+-#g|uqaE<$3# zNDCM|z!NtsdUFM^@evz-j7D}JPOUgLrqhmfjurz|N|y1o$?t^xd$OxUA5$1Oxsn?Y zN}CCvyy_miRZ=NN%XPR(i{?jLSb$Dz6%AWr{kl%jy?o^_NGc4*u)c_VE;UUAp*z zw|k9=HY)maK_;#13`hfQzwh*J8>RlA+Mxn@z$dbTmkF+?i5M>@ZYZZ8z(Y2@-Dz_g zlQ4W$tl_yTOpmK14vOKf9w}H+ z#z3*=p(U+~Xf#7(a7gULcoY6G~Ld5A(2zX0nhmyKBJ@~S8e0lp+eN*1!TZt^kEC>$M@T$cx z^WRn6(RMK3T0gGKewL*)Yc_hvAHa=LuBemvwRfL{tb+@^*W zsDf+upOrcuB@w6nsSi=zR^*!PmsBoNy*oGzK8i)SRRYsv)#X<*{$N#C%wUa78AUhN zo`}l(J}jUM-B(Q#%L5d#Gtc^6+A`ZRKxG&}#o{8G{t!Jz&c~dPU(Vkn;ODC4Z@?H$ z>SP3KZy8c=o>+}-$xQI7`DIWI3@$hgGlY2!hOdql|*l*=rPQaxZV2!TF@vEAb=P@hm%j z3p+aG!SR{Ek@2g3KPN>DzZc(eJA^AbYfv#l(_mqV^3na7Slwk^2ENpm^b+vQ2r0V| zwbzw|;#oEFRK2!}zEqa9sj5S9(67NPxOdy~Uf8X2pGelZ#hp(@F&c!1B{3YBqH9$) z`0~;9fYSaEr`Hf|oQ>~?Ptu~us|Av`pr*-@bD&A3uX~?F6$3x04(bFh>DvB5$D*K53El4=;X4bV3i5%bC&clnW3Q}2$&pk`8ae-dm) z&yOS~;KLI>2Q8HQ;b$w1hubeQ>#mp5B3k!+ar55Wb{6o{-6}v8r$Q<7CeW6u%&{*X z`0|9sh$9uDArwq7;lg%xU*SU+^?BBo9{(JwzSgv}uGhy2Ggt3g&P21`*K9KL@k7Kz zuGgBk)O9gzcCCXLgBi(S-=ewv5+Td(3^}p>VTgCB{n~rYR^E@w0~!jLAov4nV5P>r z@qo41kF?}5>H@gVu`@?f_}$BYMLdZw@ADXM_d$Cm6L?Et@`-UJig#}n%jGOyB$f9+ zqx`X;ECQbLx`-vaKIc=JmCqR{H|)Nl$fY+=HRo_m*)PJv{Vu`01y(hP?@viN%-lhD ziK7(d?x`*W&($%gomF>7vp-F5Z|=D9}C+gJ}BRO1951Jc_|w<(MR3kcK1b46JpL)*vx7TFPb=v{-Py6ruA<%+^) zLb+{qT_E^D{0NO-6WJCU;hiQn$0P%n=BqAv2ag;Q`4d|9O1(bBYLTdZZ)~)ctEz}J zorCJqa$U-uIR}xNm2-!>>ehB3ndZLt8oa;HWgoDvw|bdct=?-xcR81FVD+oo`VY|0 z1Z5AG;#u!&92`LcnKH->%BT-QuaY5B&C(EdAcm@O+Ae4<MzpPcXAU>UGOJ&IXTt)g0^ET`k`=1j zL8FipWp)=GyJ&fJQk$fAhShp_C$DRnFQm*WD1k_^z7Y+RH7DMKa%3RVr=h*ggOoS9FEzU z!!v4UliySBOs_2&)}2e;ye%Gr5!>ps1ls5|`1)6!BWO^vyOiYzb?`_%YDR@?+GSpR zCwM1JpJ>A47r$;GwIQE0vtM~njpq;p1yyjBzAx6aP|lx(veSB=bu)D1u785+Vj(qo zcZq;uuf*276T?a9f?vu*q?J0GY|sBxmq9Q)9`MYRW&v}c?gLXsYoWzS)JOl)p*w$O zU{QQwilC_*V~+I=%amCr9p^i{e?!K(H}pqB&EH;TCa>;l%V%3KGs~O^i%)7f3GVHt zE9#k)xwc#1r2w~zkD{=#W6x>b94~l6I#DT9Jq9LxO9FTzbjJg`X)D(vbH2SMpTSAe z{^P4W6pSwFI$X;JxcywAcuV;jGgeGMLhF%p%ay>a)X;+OQnoLTVjFwT&2!dfJm8i&1nqN&~lN>Z9P zmg3mSCyjJxn{V@e{pov;e?M9j!E1|Z2^mMx7dvualAqTd&d{54B*}e)y7^bn0==AS zgzHj-kaJ`ST|fS3%DfZ^=RlVbAWIWSIuinTqNGk3Ng##5U34HT1hyjW z-Ca4&#eL0qi$h`@!M@ee=MDGdsFHpvsD4jFwW*~=&NJCP*rWu=p2^p2o+_ftaJCtkzTx~xt@C&p_twyHTB(W^Y`vDfKMnGU?b zJ?ML?ODJ~4kMt>^OKo?#1d)%sVi_`m9Kcdsh-e1fwAiz1_)z=sf^7%o3U1?jZ806R ziZU`#|2J3TlvZc1BN+Ce9>&~jioyTX3$vAD;XKP+h(MIp!`z|GMxI#kU@)y*DYA9$ z0pDjZ{(`v!!EO4)3`hRARR*x8#|AE*ZQMjLLIPO#P@i1tDqAEtJ9i6V)+)^BnhRCA zf!~XQ?(uhMdmXC(08qMJojyq|tcy7*vh^~hZDofdz0?yFj)&Em3&2_`!!|tczUoL z^-Lj5>t^qD^g=p+`2Gp66_Yjw__5VuvyO&wSw?xF9d!LWbgR!+d@Pszc`&a;lHOJs zGL{QLp&Th*+ltPYh=x$40S+qsaH{u#pKfQ8DevI&72o!=LZ9)Dqsaqr07Ch6h1h=s{^X6b{GWUL+Eoc39n&yhb7NQ0P z%>|6eDw#c3wyNvVvqeF`zb7W)f_dONi(;mEH1#7T5 z2T-5@00Rp_o;+lfL|jKui3=n=7+nD9-<2ak6W>TBaE9ei6efc~VbPQ}{@mM!MVLr= zWV^Bb3n)DN_jCSi5FuqBThWWy8gn0v0-jm06=y?ub}u|k1K*M8Egw^KbK*2Im_A>C}lfEkTw}2_dLF;i#C(1o)|R%6v(cX`LO^19NJ0EXjsi3 zrXQ|%TGA||qHu6Xmi+pif&O$9|E60Q!*U+)cC$5Lkx@T5X>hIdBgP4^682@TJ1pt# zN1)C0~wg4lTlY@OX*YJ-J#_~yF>$50`KYMJq0VY%7K;E;o)&eeqrkCJfOuIgG-oR0rxQ<_05QxJhZ4bKq zZib%{xu32Tzh^YbCPd%;Z@~;1KPncP)#iHXH4B#167NC$2_(;uVUgnfbOuL-eLSu? zpaxevX(q5sjryzOD)i^24l&uOAS4qu0qgayCl>+yq9{6+13!I%fL-TL^;gDcZ7T;- zBI~+PW(PZ;AXm!@FT<;Y%Le6~arJ;JWJ_}W9V!EWbgf8vfNatM;uS&uiW{wHvpc^H z>{cI4%0y8riqMenfIeGEWZ_j$n9mJ^rO5`1S4`GQ^!nW^S3UZOQrv1%Vw- z|4xDJN`v)rh8?IQ*U=sx05?#s>}$SshEE=q!@C5L&+Y*rNXFEosbO6unQxR*49AFM zj1hxf(QWR5(!0AuuTgXCVz~KacRvSdwT!H+@mo8iRk0cQ+-%Vhi8s)uFN!mq?=Tv! zny9mbdQ|`b0T}_FTWJxWR-Yl18@)s9 zMd%=!cGYjN8O3?Yls3f9V{SUOAyrfS6idJ>3IF+gwEIb*InM5;wXaS`0+a%=9r#_m z>aANsa|@B(q+r8{lo2_pFys?w4d?Y6p3Tk0n?cHFdqEiG18s1f$6>6v(ywz&V+e4C zuz|nMd-*ETvU*2m^4hw%t&c!@(#rG>4nX6eIwKF(L3y^1+x35$nHOyJ_ETO$K(yg+ zQyl!)*h?Kt!A6y>_4vQ^X4?iUZUg@9<;l_j|0&=A006K7o?UK6e^^nN2Vw^(4adt) zFcP4l)CSsGcn}qFkBe;$hG~rz>M164e%TU0kkGQVnCuh89{us&p7=QyAd89{Y>%I+ zegb(>h>?U~?|vK4ogxvVY}+%sh9BR<#C3O}DVnN)+Fq%#`OMRcpD;a<0Ti|n(wC!9 z`T@7OLx||oz>hy8Np8?*n{T4uY|LKD^jf?%=Kb58T^f z%@u$E00$94nn5)PEvYh?1pi)O?E*oHCx@{Cj9wH zT2zoGxpLcdb|iJj{xh4tSQg_^gEeFF^Zo&cLn(r!6T|&ao=w~SetA%-m_Py&RSa|! zv>F2s)F)S7q$O!@x#`K^8+5x+_2QkmhOzOz)-2mR3CAqs^!Z|daXqY@kEP#K`cO~b zEb#v8=6G4s(SY)nJ8V1uXwUrZ^3)LtFY%0TFhfn~KgFgDFpO>F!-%igJo15O5e#WU1f%kb z5ezxmcaQxtR1@Rsbt73gR$^)A(mAAe^h3_hxOCp`M@whk1lmg3*LJ&t#8QdmYrL=> za!~6JJMH+kUxd-7To+rK>D+Ql`!kmDq#|u5@uM?|pn~^=cNBM7ZqJ`7!9{px>C=&= zkoa0)w(yQOH{cu%Y2`zxv(V3~??7EOj!i?srVyI4o6n_3cP9W;T$uhDV{kiC#y=@( zCFkjGFr7m%J0sv1BPhe+c~HQ@bTv6T(M0_}0^gb_G%!~xXn={e=2#@21TZBX>EEM$ zx*(Os>f@9mD{Yy!zaoLO6k+mnSq!4nP2711jIb0>dws%iA(_XSX)_@_wodA%B0c$6 zrf6k-uSU=*K=U^=?xrzmB0wq;M~MXR)o2_3r9h?+RcR`urfy(`#8ev{0v`pJq-efo zgWMhN`Ky3Alv6AXHCvnJDTK~)E>7|$aVNyJ*zlZsh#36+%AV?%z!Rn!eb>KGORLBY zxjxtjFMa?W;~sgy$}%JLM@_~%!d%S{Qk7BI-@=2a<>%U7;%VM)Vap2U144j83kV!;$i~v z;IHvalg<&3<$o3BJ2QGGWrfz;l;{8f2Cn6bhe0jOOH7FitQR9&Q^p?8f@i~OPJ|oN zs9C5cnHm8DL1V$9IQ+`~E2tArs7UwDL>U|+-iFqVGLUfb_UXCuS~I3K-a&>V{#b|G zyUP+x1@C^hLI+9U-F4mZ`i(9iLkDmNKbr<`=&c1VW?-bbysQWF?~w_)JoO_{XuS7R zwixPL<~}9VA54o_}U&XHmr)@aFIM+|>cU3x&+ z!Y?4xYj%F*wRwoW#?q_^d#QbReFSn&VUA`!XCRVTmQKyl%1pwRkNULNKd!=~%u;E3 zK81Bv+)>thvjI;r7nKJgbdIQ3F{YZ-)i&*hhL1Vc^{my=*c<}O)kqj{#Z5PnZ)M{t zfR;yYxcTE%Y=Bt%X*Q@dHusXQ$%4Ni5F3#FTK|`pA<=AqXVP@v?CD4G@W!pW%*l=<(szK_S zg>8SQyRO0DRuu=k-L>$CM#M-V$=2P>0G3cBx)}N4x;?D&WxLPXtD|F1%I?{YS z6|5{5c{H{Cn+6PlC>4#0EKfY5Op|z0?U^Q9xqHwtSmLHJodKT6QT!K7GDRIQjBeA! z6Pmk&nds>GBr?pKV=)hL<0tFV!p+}c+`PR)dYw3;y}uJN=HQZ7ks&-0g;L2~&_?C!##nLXtm7?Y=&feA*t7^HHqqLo{xuT(j1 zU)>f1^G0Vpt`r2=#5|(iwAQnME=K|DuKPW$TEOH@oTtB1o2BGF;0X;jxf<}Gt9e>| zr6LfHF-wEF@)5mU{K7<7Z>GD!&@AMpO7-dTmcFXjq4a9H7&Z?AW6-ZihjgKZ66uZ! z%vh>7I97cKY80ptos=lj_Sop8h!k$sX=k3p6EJb!IzPm`)ax^8UK_Vw5Y%0L;Rl-H)Ge`Rw(}@Z^&`!q{klN6b5=ovRA^Y zMaMg=?u%Ert}#CC9Zi@IBCLd~*>lP!Qt-tp|7D+NJky3E^zwbIF$E;9x_;L~Tt}~H z#H)%!`-ho9mQ#4GqDNOpzS%zHxEhJjF^XoZ>|P#`B=_|c$tIRW4$({Kk3pY358GD% z;Sz8M^q!)qYM_=5Wo_@3Ht?5Ai5b3xCZfYmQkmWXpnuQ+z!fOR{|CXq&Ly42hlRi} zK<#293S3s`_iDG_{tqp9PjK@QU|gm2e^3*D1PFX`2QS~>X&$PaOuxs{D5 z-WSP%n13vIHVUmq~@}$G0n#FkGltQ>e4G7n&m1wkcRnuWy@TLAAxkLH3F-aSAF-M zg?HRJDL0wGxR{Lr&31;}I4Z-SgA%ksU>t;JC}IoWl@k zq7`=eYgI7ER7^c*^F9cb3aB+driL+zCW&h--tiGC_^=;yeZTsyBM>%e_E1k}8@nZ> z>9^dRhAzv!SoWDgdo}7>LR18FmBv9yiYKR)eg3#Rg;VlTo2<94nd@aI zg~E5X{W@K|#HuBr&$}fJz1OvP0=gr5{npVjtTpd6I3=g1gNquY1JY}e*1O~D!dDChgAwU}N;M5Mxs%@EEnpi9eWr4djUpV01ShA@b;!dIpTO?nC?{JV? zti%h(<8Gyjy*9r7tV-R>e9#_IunuIv;jf4 zxfJ|)Mnqv&fwY2v?}|qL;Sv9^;zmDso=79lN&PiVZe>fCu&$X~Ys5oBTep}jnk4@1 zBw2uez6VF{@9=mSBa3D5d6Ib2voo^|;!UhCpbQC4LuzB5dThQ~4d+oMqg)(q9nl$h zh`Z|rKrdJ3da%R7#0QghqT^ovcb9o*wkeWfTqY!KK5$Myoa|uC+8_X_pa}MAOC4v4 zoWgZUl#os)sy*RX6i^;uts%`wgxw{gGVEpcRxGVttKS4sj9XP)zBvak+G?#FJ|etg z4Pj&P8)fyCC5N}(VJ^8-BFx07ZyN52xv9bnoY)-J9xwDdAZr!HQJ*lBFe9WR0S3x5 zZSo@V1YkatWLZ+aklO7?19t}s5qYHJ0N>ui19R5N!ew<{aU({Q10B>zqGUIOkM9}R zMf7RNa^RuKg%R%d5QNRVnYRitV|bb_-+5)iO*vZO|jKGxQhk!DJq@JWkYFj-3 zx9cF&Y#?H?M6Nn&8#n!^sY}40X(%X(cJzTth0J;1{C+5ko6n3YmpbFt;ie{zUo&b@ z(Wi~1Gqq)=rWIzUQP=Xu26sE~cQ&n6HrAP#vJeOOJ?eCz5HIV>gR z-KxH!IBPw&BvBAM;q@r9@cAifyTxr#E^>|omxAKRWRlPm)o20%Q@>Ayo?W4h0~%t_ zp?pQ(8NM*Cao8d9Du4XU3t4)|o4l@OqUu785BuoIy2KZ;~P zTP=XKI$#uroZINj`4;$YuTBq`Mm6w=Sw^MAAUo}VW(1OrPn+y{mGMH4rD_E#)1@#e z2J_u77U;&)@x(m{s^~Lb&I{zhRCUMI_$?%zwyd@&BnV9ic8FuAE1iZNDPJ!GkXd0W zF9tif=aR;XgVl9?RZBF*5>E0vCWg3~?LKK(MB?UKgNKrShdVmFX52nkFtY1a@NP^K zssCZ&TWRl3N7v{c_OzQX1?&)fsvoxGvPb?!oGGf*4=3&g?{Y}5H@Kxla@hQLqzr|T(?%&_5Pm2y z=}pLY;PE8%nyJx@qtp0hPu8RVIYz&VJ3R$s@@GQ6QU4=N z!twU#!*ox`&A%2YdOH2wSvLc9E$DD_9Btv0jisCn`)d?bEgPG9dZ6;Oy0m|Tf|Zqc zxtBZ?MzIKNVD?OtL=|IDl+^TXk76urgeU-yL=_glXZoTp2hpTs5e%<*XN}2=g>TNt zG8y}MESpXdafw1iSc+1X*RrhcdT<6U0qJkOgbVC$ULY9^zE8&K^B(fH$<%WpJtpS& zlQGH=OK9QIU;V}vPXERd)mz1Duz1AAbV6>*4537RF2K*iYgN?}{m?)bf;ol%Wksz@ z1!n`rCN<`Z-JW7VkJR#@Uz&De7&NndnziwJsdq9gp-sMSRyz+leQ7oUig+G{HyjjB zQ;UbGboR(7&!TZ2b2^bl+j)i(mZB?)ACE@R6Upr?5peGalX!&lVT?DkeA(22a;*YJ zYJt;xjkP(A+0<&@F=`?*6H6IJK4r%{Gk(a@4$g2FSq?MN-Cndj;+E8~646f5p1hTW zmJu+#(xUhBi#z7lTIXQZ{%2u|5NCwxp*Xi(x-m|{-qhJS!f%O-vt8Q8UJN|;*&bT* zDSqNu6SW!F42BOaQ1CF{+sg#MSY(1i3~f3726oYcE!DA>78$tVtcVn;N1~Ysw*s%D zfgs&6D3#u@yL0F7{fkLv40Z#nj@p*TjHW&$Gw$0jJcqwjv|YIm{}Aa zUEx_B!U_jN3On2M28MAOR^6ak2qi3nGnWYu%3kgy=$*K>&!zmqWItvJ13#1-40yYl zcZ*LR)TUc+N~UvS`>Oi@pC%5z3M6bGyN~d=N3u>OQ;yw6NcwoZmA5A%|7`xPb5eX? z5$ZU^U%tdVREDUbBjSzucobUJNMT4dC=lq3;6^KpwK^DR>Jvj@)I;OX> zz`(P#L>c2F?*leG!2wQj_LpMmftCAF;j(uwKAz{cwz+G{i1;sBU_l!C#l#R#I?u%n z?Y3U^MPdqhETAWa>m6_9(1IXSobgZ=Ds#7e-0ehSlX*|HksSw4@g9~Nuiok#5_{SE zwsx^u#Oxq+!Jlqw0p$$+Ku@p+5Y?VgQm;Rh<6}M;x^7#F_5g<$J&jPmFO)*epf%DyZ zqi$!X?kPoP^U%>u#*9fu>uP&RGY-tscSq( z2BI*&>IQNEgr0RE5CaTS2*Zq)Hc_-$v74tkjUFWHNZAbWK%_H+`~~VwXbGj>R(v6C ziA@7u!X^gWyKNijf;hogJFm>1Rfdex0wG(p3|@WOV2OJHJ9)X-hMT78uwJEjmy zu3Xp9_NQS_+e&y&iS&#m_{{oShvBC^_3EEPhn?)sip#xyi-b@+Oy^L8FnR*Hy1k1D zAC&}CbQ1)@Sw>8Y%=a;ea;uRneWet543;wEXY1sR7qQ^N)|3Oh^gtg7uy&O9*$v;# zidmDmSv`ZlQGd&MzJ^S0lasOY5gk4BzIBzPJf#AkSb3?)he6S@|C2Am8!W&ooE|!K z=ND-RR{2{+IK1{%WeoOgiM56|Ou{dE=xw&djFQjU==3-elp|-kx%qaY>5^D367zCyS&Dli z-Y#FjFBumzpXuFs*~45wW3}&=Gn-X8IkY0*Ov+4j)wxH!(oMC9R&_8febcyi*li;? z&n7vdwen3}Z!PKq=6y{V28kkahec5SgArP8>y5tFz3;wf)P?xJ5(e~YA0-79CYZk%n ziH#Hh2rlwz$IEHhE={^K{Ai>ug0Dv1@GS88=KF4osFip`FfN&1Q1b~D902t}m`nsPdz63Mj{%5*^ zeFHUFT~z}txW9|mbDhzFIz3Rf2W^Q$LvT|Yq{=t`LV{FOn|7xRjaX|7w90^f1;9$A zEd_G3KvL->W7%kCLCNw60+v`AfY0a+0;PMx{Az-gu*|> z3)Lh#1e?oag|s#KEP7xk*+0Aky2h#Gy9^g#vf12=uHZpUfBrzOU@rB4gHU?+rDD?Z zX!nI*&g7A;sU5Kn{m@tgU0*CapW$0Vz;S&3DS^;7%O zKZS3(RAqaocI<}RQguIMZgp2!pF5Q)GSG2mlms3E5i#=OVs{goKe1Lp3`DrCXHO%= zNvCZnunWEmX6^zJAwUTL6a|2QAOrwF zLByp$ubUIhRQR7zf%pd2tc^Be2!~ZzrCsBR+?#W1MOr!W3LOHMaRr|K_##%(+lmRM z;JA-ZV;JfhG-yu&`_8vRT>b-3{a}2ENL29>@@3t#1_E^^^aog}M}eU&z9dQxE53x! z#U{I-&cfnfJQW8u#w({bG>`4B7yTy~Iq{90G^Zn35bbeeq!uFUij$v3H!u8wwYObEEUe)}$$*GtU;$|C_)4r+I32^ec)a}7c?2x|}$11_0!4gi#1 zumYH3m3q5Rb|3HOjj4i}3I98C{|%r3j1PJ|#f~pl2XTJm-Wag>SvHEa5%D%KfiCh3-4qlPucs89 zl%%CjP%ANzPc1GTC2^rU-7pFfJ`S1c-2=bO$U!)?NY?HLk9nZqnu1#RoS{sao zB!BQNAXYH5L3R&XTgj9GCI+C^P+S zPC4n(tD!e62p(Oe>0{<0i*`5f>Srd!mzE;z0ssM^yX+N-+V2}9z~etH$`{OBkllk% ziAe5){!fd5g)O2~p=OQ~3C7apFKRe=P@|6_KT z*!FwH%Q(Z>+b}akKMjtO%YGQutz^NyX2M4@{zno2e@qzgB;WD-0DwlxK-}jaMX?~k z%xBp>gko}K0O>cJl**2P&{3)bE56_hC;-F~Iy?==!u?xV4(3(yN6n4zeqOgXyQb&( z*7POl`!ZRuwQM_^8y^KC_E3~*F(jXYrjyZ?wauJn13-!%kjC|ZX8IFwX0j>6--VgUR@Vc zfxuVIDxSWMH;)kC!f5WLqH#;y_^Is+r&}IBx5>^!9}L(rkTEmqPtZnqCw`(f#~IjDR=btBL@8VMx3aTFGuG?_ws= zc=%&VE+tKd`3oNk>U98DWpVJQyK4V37di;6~_=o0Md08gMYGSX@o0 zJ~tT;0KfPg133s?bvlbijCAedG#HFx^*|AOeg>4Lmq$V{q zTNI8>o5!3mHT|ZPPMu%95P20vcQi3In&iDdGUgY#u~OHBGYSo43hV&v`&)v3V9>Kx zgtCM+BzA92E4;jBDzKzw_z75Gu0CIIwpt;-bA;twO=9i`uZ6}fHffgC{^c-UjMQd| zZFfZv6r@E{q{{V7#;G&H-!dYLWhu0CKkI5SvY}?Xv3MJ8h1`5@-Ht9RC!71JF+Qdu zBHE55$7rf%+U!8SIM%W@5{aB*9m~2U7lr{8Uv)XH0$}CB2A`YzX9S@iHx zJpe1I|4y&-uHnSQNSMRm{QhP-z36huHAmN>P)?y`qGyNQE?>}QfZXn z;<>Yx7hvtl)!|uq21-+B-a$>LFYL|}pYc(PMBleOu2wOnjhy<#f z84aP!aWX!gV(m0f1HN~eh;&T+%SEqhE}^_UihdNi;{^Ug>|zfjz2w6-nY?gt1^trf zMB<~W`I+R)%J=UbETl~l`vyEvQaQGT*isL}OLFP~aTN*^jqI0#_p3MdovC6T8xQ4e zi@*qd;t-1u1hVlU)~KU98BM_7+FR3vF}Z6u5g}Z+@{d&q92cf+@h1O+i7)M0v?r0r z(?;Deo%1y@Vn_E%KAkBmf=`EST?|8BL^(g1LBJG_)Lk1M zLQSPWEQXGs8E~zCbPf)&Ay9wlh{BZ2S_%0fSZ4)SFG%M?m2X+*@?NLZa@oTYSdseD zX6y^t!|TZQ$K$1&cDPcx!yn-@G>*uPcYRSrm}wF5+09>39p-XsRAVnAg)svs|8kV+ z+5e*PJX09hj(T(1HTN=qx+c_=n#`cd!~F<^=LmlN9fr7KWkWNYQ6~yX8=0wP$#^Wbqa4sczh@ zytFXj(`NfH2L`@|w0QPS4y-kC+~W=(tzD8h?ZARD4{z%HB#ZGz&mc-mRMCS}KNI;7 zKR|!BA+Qv|95j<;6&dj!pWvt!e_K%CBb7U-eLP$PqgnSy81F_n4|U;t9>76S({g!X zH<)4&6^I;EPR-<#wVP8ouIzIKAD=|Hr38tk)HsPZXlrP*9Z^QGBm>rWK#5GuHr7wk(B|PPC68#M6o!k|d$ZUQYi(yN zA;+6Ow`obnL!JyaW6h0F(;2h-#dLdx)b+M;Kcp~>D_E-FNm6LF zZ_us>zJ7QC>xNkyx6s)9$&BY|6W;BJJpXYNNJwV_yqVPTW}h(T=TsI#`@^mIPYR5a z!~bRv24vnDta{Xo)VFt9E%{FN-}bK?J_B$8L@AkzE2YOzg#=E5G%B`pwOe<{Z!b_2 ze>m1;W==xbRP6LF<8He?g1Jnp+<<)%`4AsJjxN|9^OS3b?@AyGY2w&SXGi}IsmxQ^ zP`ASHmrdv7#Xo4R-yVbo|FHiiOMDVT`~EgIVq4-}0-yC3ab7wZv`9SuF?;Ju?nz{U{uMC#G5fd1ne{!j{7e#~Z7m^8O zN?Bt=9QMaFkSp!o4LOKtrf1q!HIP9LU*vt^h+1?cqU)P4fR*A){aVHe^P|AZCl1XS z7w4Q8W8okMob-ALNHZ4Tr|V`U*Fm2*}X&sQX=FWLcolZboq@G}<9wPUS+LRqX=II1!9T zr!+_7>&}qwP4@h*knM%*JL9$7H=v+Fv*l4C)Nus5KY=F@FO3DZ+I~i|R^xG~8D>%0A^3(+|#847bskSQZ&P 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%0D0_6RE#iT3DW!dhk+# z8BADaoERM*JU+DN`MR^COoEzW&qm)^ZwICXw+X z(A7SGiw&31(Y|CA7KSh8Tz*U<@&pLGMI? zB&P2)AbZzZrr)*WDg>uYVx1hU2O$zpJX*JHhs)6wCz^;GU!XQ>drlYIRN7l)ZVN1y zFA6~Bh;L^=xp+06d!$M~_?BgVVRCnqH?eRiv-h&9JISp>IuVEAmy3P7XaSO&`V`Wv!(g1trj^FV+)j ziD61A4*evRq9t_PNLJNlU@Mo#@WBa*?^#C5f9IWRX(!1k{m^CA4$6 z1YfBy9Hv7kgRP73L|~cyMXc{@oos*rw2!V@8jU&7VZP%5ZRsZ^JE7SCr^1DiR|rx& zM~2>G;gG5K;SB~$KHVF*zP3XjzIB*KrUVGj!rGwqnp~)ugb`^;-E9nNLk{taGgV5H zmd2Nw@eq$BCwt0+0}ysT+~3!!3}V;oNI71sHcsCMQvcsK1e^n5Op09R)P;+1v}DW%IrEY6 z&Y7V(UC$#I`0)RxMH&9g6xe<-m%iphXT0MKjy}|eH?Xj?ZwSpVBXhb1usmMMs<^se zQ`_ZEW8%q9&2!5OW!H!PC6(K|{VPtnCUEpHo6O!qWNz*4exya7Wwk`GR` zj7;nKTarGK2rGrRCx1|{iA$8*Z8nCZNy4bbHi0w*|9_HuQ;4*hVRPF^v7PkDFHF!0 z10&>1fY!!+7rL1E!WO?Ytk&4-f}FK%Ps^nF>-A*b*uc=d+q|+K_$s3=>IX7e!tT!Z z-$~>bgw3GLAts)hrb&hbMgaGr-*L`*K_le^s2v*jQqTxZiy^uUP~Jx45KqZM>AT@w z!(ygCGRD%yU66dQ=6Z(^d6ldzYnFMlfN9s`!;SwKIvoLiTh5hueb-LNQN=FRFIFR) z&pG(v9BZm?0s>8bjDZE|CWs-fN)_8HX6O^VM5LLhnb;^!8N8{xgC$D84&`OU|} zNsZ5RGU8MsY^Co|SlcjM3|{tF0HCQM&AGi{`a{^F9clJ_jI@iW!15!a?~qf({$tgZ zzyzxL&sH=!>T|BA#@X5=g(TxC+1T{0BxHwspvw`b%P2fxH+TD zoi7h(k-6Lkf7X%fq4RvXudZ>*Z}k9w`}}}tK5%=E8a$8HW=_#B@J%s+$IqmB7X@#; zgB+wTS9dpqVqmv7^~r20+7{Lfeh)Q>t9P;G&^*Gegu9r9ppj z(gGummGxw3`Q?Hzgsi+>Y554pQq&HdGeKg%JttbzV!}@vGW}S;)w_7BdCpU>KwQ{n z{TPOe`;CN+WB00_Pl7|f05&ZVBSHn&d>RUg1l)i@O!)HhWQLBLg!u4Eb$m-1-s6`k zepA2+po{r}>U6xA=1KK_r$jTQcJD@OeO3s5vL&KVv8@f(ECGZ(k8u1~kx^g=sQ&a1n5 zqquGmshWOKHnz5!URz&JP=+@JI9WL zV{fN30m!4x629bh__XTv)R$Yiu;Ef6dkP)p6f@e>H`)m0bQk@%5d1yrDTk z5J%V26!2LkYoI@QG)8m6?pS+`vcYE#dJkbzb4cPrWmNJ+*_Z;d<#d*Q4Ln-tc(@e| zs&%#P-Hxp7OgSqCd>kN9>wz4rj?`VTIff6}u4#1DS z#1JRSA_=RX-)yX#J010g94Z41zKy?|&Y%7s7Odz09cGK*)?9E*U|^T4;#I$`p>?>l zgj=)cmYKqcA^ree#we(lF%eixTpDGo@QvHsOMvidB8^QEM8!wKCcZ6cbDd;}!fAv| zB9oaC!-Pcio5sAIm9lJN*CX0Am~UrJj)J}cAFI8!sp+r=T%val8O(635s5W5_@7(NuKn<+LQW$HPZM;sKH z+WNu!Eh{tu`Y1XLXTu-y-B`ou7N1T13^% z1L7WpL6~46J9ZhAJBW6y_S~)mUc18wg2DuyVu*UAM&w#77_;rPvJC!MO2B7=JOhk{ z7991t41G@8!<$_BsGn|?RP>Musftg02L zeF!2sGH@|U_w2arN>mwSIHNG8LZs>j2ogM#Ez4x2x9U!@1ztt>kWxk zu;DI8awKoB*UELJ4ci&fxp}!8z-rDFQ2954uUJBa+-jw!5y~d@fal0Q7e4fG7u?Fl0yR8dkmF<4X6kU54^FIuAM@GqgcoZ z@%C89Ad91w9OR^OPPcO4Ih8gr@DWNdkOA+2Kxa@RwSo4i3RKIU7P~QEocpAHBS~^RDLhN9C=Ze&h1RXlZi=XQ2nZf5~oJW>N8_^1yFIpfvQUO=rJh z`E36zTdVU1TcCqtf!`|B#62rslsvFD@O8re!nd32yz%XfbcT$1Hpwsk2^WR&2BbgV zY|=yla(4<=eU%AR@=7a&)= zDKK#~z4Vbc=>~ypb032&**CQ?v#H2JZ*&zy3x^Pl+eTEkI$_Wri6FT*lo|K@V>2N%2YV!jD|O-*1HgdQD|!yfySq4kEOi zoU13f`5tL_2v^Lo)IutkiaK|6R&Uq4x&!v#@G>&m2=|OOo#~dd(g-W-=bCinA?)F2 z*$8~S+hv2&tzr`yD-&Q;x-$RyyFESF{Ygxh5I2+EUf`ixrd4z?a1-z+HDHd${r`=I zg+w=RY#3Odu`{aAOQ5k(?0ZUjk+}TBzqe=kMW)|YKVj%?R(f8B2@~6cG74Mw6RRQU z8Ppi0>wXz6vLwMD>6=eEfg5I(_dBZb|9O6s;bNeG9Y*&O$6gHoM$C(;?I7>nH&#mr zboA`7|CT)l7ts8E9Z|722Z-aMR@ENWL+JoGn}|z>6w(@^`#_F17pz9LbeFKMQLe-Y z>QWo5Yi^Zy!CwM>sZG)_)HBl?L(WOs>`a=RGKa&i7)*C|EVGSP;0AsSfIW*$G+919 ztz5X}8w4(-n4i~}w~Wx0gWD!t!}e)z2_F1VF|(*Jlu~hYp~;28b~kNlKNY8xZc5l0 zFy|{4W{0lS#c|9PrrQFjdbTN~SKC?0Opr^}0Sx&*5f;Nz78QxYxe(4Y#kAVFf3UwCd~J-={oIe^%GwE_HplblkeAXlN!ZKL%)B0FX=n@ z^W7PVnEl9qNqd^mzeE;d>=lNZWa>1*;b{~1R8bNb%I>790XlwRCGSkeJIQ+15A0e^ zN>JqhT0o`0@ak)5@sHaLyx0q?{27J;-@N5O|9CwicG+x^kID&&>7^7wfgq5#8&kJ% zCX=_S5-nGm;^lvp8WD3;$kVAG(sCqX{P^?XRW!Z;cQv0sH=htgU?^KNW(@iqF~Sv~ zVz2;GB=lvsQBg*YA-v51NdZ(oJf>4OXQ#LksUXAf32T8V1_H%Iy?_k@+!A*s=DO}I z+>rjJeE!}Xi4Htgjm_+Lf=FH3w!2en**>&0Z2va9jdI>%)wRuLtl7IRFA@sH%aQ}d zHsn@c-JH;T%kOt(gaXvYZjyps{AKd$HV15VT1EPByvQzv(i~#>q$UYPGmAvaP0cK?zBPS2zl6_7(+*=m!rD%kn^C`YRYS&7#jpioq z!W|g1ZomPCO2M&AP@wWT>n}XB(|VWm2bX$2lyr^-lucY=4^pxa4%ONaQ`AeF1AFYY zj!WgLSTcBJKAUJm=a|*^67eb~yPq|tf$`g$LrcvgDpV3D6lh9S#d2}|sk8U|e>3F5 z@7{EfoOs51w<)N{TW_tj4`Ku+#RNN}CqMX`v8`p&`PtyRPJea@A135an5FF&^%H*v z>By7MTOo4!Ayw}y4ql#*_*|}JQ-eUzfda4W;edjLeC7v)$mTeC<$kN zWv{o}OyHGX4Zi$fWdqAd&#XIs;=N){`8HxZx4mMcMhI-bjEnqLW7LLh7t`AYZ68Jr zDkgW5_B6>0s1`6KqM6A`0q5Oi>Y_mE$t%-9QC?~ldZK$n8yo38#z;vAv@`F#zv$cL zCld_hwAy5C{MaP8=U`!j`~_E>zT%*5$|T6;Wgw>U0uTy;5cs_c3G0vmADN5C{TjGu zZT{h3|K6$Pk*#=(zjf+;)^l0?ino)5uj1KhyBG~1k2a|I9uyQ zIILS6Ms!$Hu$-q9Arr9C#>-_B;$tM4JvLfoTK!V52;Pj55~18Gwy*ebBqdLIbAWtXizQ%-d!7sZi-GLUJp-|H5Z*qcE4aBc&)>YXW&vzPm02W!M##O^@Nu-=uH`f}p%%LAdc z+^%7qkYNp(@?z7GuXYfQihcw`Wr`U<+ULdD>R;W+FmId%<~}Pt52ERXwPHkzx#5<; zSDVILS=zF0jnx|)Fdk!fIi)=N-k1yWnK?7lY5JkI)v$I|W`U;*qNa|5b ztS!+KVO|h(hb4yI&DxQD9#IpBE#a{9*CF4Yx?X*#l%>~t+DrR`@_e~I=+l0z0vFgT z>+Gg{7U9Zr40KMHc;@E!(@>`Xc;4WQKc;4U$rQY$<)>`;vlIJyj|A;eQ(AnfUA8E% zve0(3#gtO6)Gl>u5Yt-;g+jB+6Rho|5pFXy8$_vEjp`1T`< zXKX3!pPvs+U>!hW)B)SopxuH6LvkT6X<1T;bM`)b!++PiYEe&9W3nN!hr>4V1ASm;XZ?n`&R5 z9V@T%su#Wuzip9B*Yn21&g^>rU&HN6GMj%1Y$kGSQjlNTl_B&1NpZSU3C?J&rfZzV zFLzW?9!X?)#z7$*to3TeBbhG#-aK5lFgr6WvHl>%52(O$`%QD7pmgqEdM|2=fJ_G|G z#T01+q;Qs@rmbMmwnxE_NCqoeXk!giB)1H(K<p$JH;G0!Nff=l@rajJoJmx>CroaN?| z6yL8^i=_4=t66T2>>_u&M`+~cn}F3df&*||!zC)-C5Eb{U(feGB|p z@u#K_WXyWwdm$0hAB<~UGwq>OVPc>l>7jDw`60sjkV;S!-D+ul#}@X}Ej*fSaU1PC zywRSJ#2-t7Sa(sZk6I@A+)lW*06lQpF^|4|F`rFxsorYk2{J*5?$QhE35^x3h@(;Z}_M49Drba`#utZ z-&ixy$&#DzT+cu*tK|50Ras6XmhQ9pec?-d6GL&Hl3R_Py4GeK4$uzki7c}73DbRt zAPtMCSQ+GK!jd-HNE@(AmUJALvmQ(|h)b^L6A^|IO4m5C+Jjn*GZT!ZP8B{@7x)w4 zDQ*=9gaS^ss-PVL&@c&)3O%c!m7Xtl!LbY=nGN617p8LAUFh`FGg@5wfaWz{N*psc zn9?gZcxf9`vw<8HTifcoN+S}xiK<%%#~ShG-nZtM_E?h@!H7|NXvuR^ztgv8$4SsYHJuH=ZvFd$yKCD{gldc~%qx>FM5(g56@IxrOciro^UT=w3y3p5a4woSX~pB z4-_G6aJfID`KQSpOt`v*$@;V^cDrDo#aZ%;fFzp~lt_Ttoz)c;G)x^?8*#84dO>)v z|8qmX^=@A>JlQw<_R74OJyq^I|LeVL(iO86q8WBvmC+ZFA!wdvR`|C*M&D30_k_4n zS_+m#QdtV>HT0m>qGmjldBZvc?EbTQqBg}a*BPNiS^@?mL^B+=tL}(#Gavx1!YChR z*7*XZlK?edgC^QO8ca1sdS0bBE>P4r;T`T_Rjear+Dcdvu^;lq&6)0v;ybs@{X4|t zJg_ZE9#*S3*^LXdMC<@5UjtSOi++R7yTTBP08R|w;M1_G&TGgBnl2I&xS1_(d#75JK7@E&vDuzEZmDXurh&x-0sLi1erT$ ztjb`;+mz-P#LxX`L*sBQoPH?Mjqee#@Bmp^hL5$9QKeDI27Lb6_&`xHy{rcPx}QTW zTw~KeT+AvR11FM}bwa&i%ipP_vdhuxGJb>Up z#@U@2yQ9UAo&JY3#U&GbNFV>WKTwhMpOFK*L^ylE#o;OQpeT}MwTuMUzOy7)6yze)o3; z{9;GEt*%y6aKwQGx7sRew1Ygg=yMle2wh<%t6Q2`iq{mgC+pid&vZo2;shOE1%@my zm$SR@ImUPd3^%AYl76%?;eK5GBJDFn3A(-0*KcAY)6Rr(5RrL zjmDV@vi%Y@cc2-EWVJ>FjK>HhE2I9p9_K3s?n{-d)COA)x+CVz!m&HxhOn_*UxAkM35|^NZZ)K(NL>9s6N|< z=S@df$$JJhHoPmj%b&FwwniUT&#CNhTABD7q>x!tH-Q4v!He6x+ESe!_bCIF&Z#^{ z;71SuSxtO)-db-LclOcJP8DfZ3p8C%9>kLj!uuzi>`+tAjcDjRzun`5X@u z`*?-hIG4g*&57qTVTMaOC@Kv87oVBVKZhJDic`9IdePvVXo$>ajY$WR4n;Kw4E?VP z>Mv^$jVE)d$kZvAy1xQxCwWX1Hf6o-Kcdj(C|E3{GfO{17;+8RN))}*pHByu(aqTe z{n@Tfz+~>-+MB)pLr-nU=QtBZ;oA$*jK3n?E|&nnHDN5F3=dI!REEgeF6Yq%dUL~aMj9eDG? z(F2sCjdQeekH=ZrAPa0zqD`&Y4hw4eL62)v^pmZz(@yXh3XEavHRp7=oLIlDpvp91 z3JHzjJBYpRaR_M^5S52Ev}^G1R}%IH{K5q>9U6QTMozRekm%-rf~JNwPei7f=9#Kx z*ff5AD(JVUUBe7oTsle{ytVP_;}u89I^IAZFM!Xd(xuom$XZ2+OitW98Ux?(ir{*g zPT6o@f@<70U@{x{j!hceM+aZV0N7eaY;5VgtHcVVS03+SRmJEm!mqZsK^VI7p z$0o}N#7AKYcPu|pm4*pUmvCy!%kaoz5@$LO=(<8Xy!Am#EODqao0qEQSDTDpYBlZ?ZOQ;dq*+6?5ILK8B*uazxBD=3=ht3 zj}&yOrCalbDKEBApFShE&?=WFsl?Kk+5LRG^GxTt&wNzRNHhmK~hj%Jiv32?<~Ec4K= z7pCMzc9(+u{MsxslXz@R&yVy&6nM5Y`B5U#T6De|10iqmRsvJ=6@D3od|BtIU5JTz z+(HD*@}Tzwbdql#3W)<2;Zv!r|GSiVXY;?ZCjW;g=U=-%7m4_~1hnp!R=olr?HkU@ z5-U3~LD4PvH%!htyLazho1^Ab4|VZaB+DWEa9Zij!cyoj`q(9#e6QgI)y;-rJk?2) za?|P+BRADw`gxK3pPcB+qq_AE_Gm%WyHNi}$xuu19D`1LPXi^~1-*&ktLboiPfE9> zr3ASq26oXFl&B+RR=2#)7Zq>%k6j(V7=R+pFT-_bna?3O<6rP3f6|j@rbF^!E!RCw zBU9rUdYixbR5U=GCE+wlmBl*&%l)6`wL0PXO~Q55vj?G}C8rZ<>F=Wh<18ytLA zyXN;~p}&#vcj*$2SO_pwoos(CD_)SB?2j7cC&u^JX$C%Am*c%$k}dJK%Um*kfXVre z=g^~rCoV25*qT9b*9u-VK_LAV3SQ20wf7 zAo-Hv`J=^y=cg(UTA(E8g8%D)wC;+skwHxS*33XI6Zj7aqr*cH~~fnbT5 zQHjwF&pow)+clLZicd+GKb=tTp`<)Q=zl%1csUFmF^~V>{$`3vY%D=@=^$3m0?25p zIBA;-+Tcd}YA07vPC0y^mx$~2I)z)E-f|X|?T1;RdH0V`c=l1Xu~J{t{Ki*e!sV6! zW3Bu)t1@s157sbJ3XcwClaNW`3lPtHuIlnyPykj#`vJXMN(5ho4vCJ+2E37V@yf?( zPAP)u3>96febhMqB)ain<8o|Fn$+s*dOPdDY;d950Ze0giiD{ntxSf|CkfU)lqX!d zvOfa3jT#|PXiO*xOX5_N#ibdSCFL?c@~C~(NW2Z*vVFQF&-l8RD*j$!|GkozIO2-L4r&K}=!r)oJv@nPRSw>gIm6P!qa4T(MWT?C2de3tRM0%6TG z+jMAC^6ArtwxO2>_@IgP_@=kEGgHp#>E1Q0Awgl7VF2Bc`~TL=?DHJb12S*w%qR-@ z4@4G~8L&%zhTLzsw0-Gwz2o1NJ*>L6Ayc&0 zK{pG_eE)vN$Hnr`ui~^Haoh&U#=Cl+L_YqxC$;AxZ}yrboV5wS^PSdAX$<+85mxk$ z%uJb4EAEj8?v0YGLTZ5-BmSn{z>A9J7&!jP9?4dy>?RWuCQeY!%#H>pm{+Y|RQ9(y zq8Z59Hr3KP@5p=V#r|4B0&HO?g$aW?Y>DWAk%lhi%Qz%_Ue=g1{4M8vMr_fuu3hKQ z%|4;C@Wg$Fzpz+CEx9JYZY0XbEuoTKjNt^j6SBGf<%n)AjCXF+_QZ^L3Y5*n;hB%z zU1qI`+_x2tc7_vw$YpeK7&GR_yCj*x=ErH?$sj`|niJXktY*Wmj{mE9i`WV+LIo<_ z)E-NjAZ3fxDmE95659&!Dpn_aqkPL{7f@|hXXXWY211_*FFOQ#y!WlTOuQ7WOz)~) z>b{8Fk*3fiE8Vgnir%N-2582Kn`et70RXk2#^5Dz8$W-ZtMP`olmwv=O|XMNUw(L| z(yR1mx%#ap5`Wdk7}J2hlmBAmcP^59`{^zNx2VuU=5pDwK zXOVC~DC$n$j~m<`59Z8=Q2h;KL2vk8Uc}b%MxyVy&3|NQq?`Hm#QP52OAELGmJ!{(VSbb@aJx{Zs1 zR=#t&WiZ>LV)7Vqq#ZH%5pn)&V9Ydp!<~mh$&krl z|9B$G^yT?9PvU(pzqFq^x@1@#j2_3~&0d743Xet(s9H`?I8@t%%l^06-$mTs;f5!pD;$51@O@4 z^iFy@ORytm>__bBU_NNZ!<^wX8a9=03Du|*!@JKJGP2O8lLT)+|MV95ujFhCgPk6q ziK_F+V`SypdD{Gp#Vl$>q5`5`bWw}iQ55?pMH*&fi6c?mslACyEV8gA(LHQkuvY|V zCQ{DVecrNW>YR!+&QP+fy+SGZGZ7$^K_)@ zNIKz)uAPZ!FyYkn;g8bOH8Dy%!GBY2653^ zcFbn#`?;?7h=Ntr+;@kFzWBQ{ZQHL75d+AIph4-qmSd>7?tRg3rx+jL}F|4`BTd~#=jFXK# z6%w^#2Q98o z$b;9q&+7M?xAownMrJ{?78F(&sfEZIwOq?-5Tth z4G@6>=_#_zG3{McWG7Dvh-wP!hHSuwL;)f@5i2M05K{7n%IWTzz}j))Z7*J09RttA zPoO@!gr~a%LZ%p1ZLwQFWkFc=p+RzKht0g)m zlC$h$bJ;m&G9=9FrzZF07bG~@=`fsXy*Ura=gcuktNxg!492D)kHp`*wR7{WOVySp zXo%t+C^MO-L^P+WIj~Fmmx=R}mv8ziMB1+MFuD2K61`ZeZAH3H7!|QR2Pe}E8F=Ae zY;{Wb`xTbXu9#J80@;3o|Gu0~E&J*aZzreG-jXeEe1{!8Av>hFhI$)q6s2;LGITTI03Gkhn zScGT8Y((sZoOKiGplQLvX{@q>Y67Bb=aRz`Jk+Z68sD<*@ZVvkiwgE>wsUnCK8XF| zo^gnwC_jNFHfZT$Ncp;kSYF$F3fM8v{soFA1 zqI>ZAY5>L+sya+J{|A4=_EBQ0|dR=zFtN&F4N zd{y(@5PI#EIl}@CRJc~ym2lG>hr_x>b?FX21P2<)8$Gr@f2pVLEGuJpQ-{KCt!WA< zTM$U&yT+JZf)--HLb$m%akk_foN8knUA!;Xj_|nnfv#_B@Z2djPi{GpH*ML3QQdg{ z)th9Z*ITqLJ96i-V*2yBF0t0QpyVd^=852?{+K^DhweL<` zjI>qmly&QV$f6G+>+3?g9}Nj|p8Dfzkv?!7H`+yKZ1#shoaRzY5($=HTPl}-tFK*H zrLmPJ!o7;<{`r`UTaLq`>g2u^7KONM-d&I^q`}=<5)gZ_vcz$XVy2n^-2FDCGqT6& zzMs7;?V_$g<|fF(o=w?f^t-RVw6Z1YV?e+_Bxf3X5|c-qvwGd%T&)75jekvqMuSUu zl?Vae#RR!lWQ0Mn#Qf+XB19=9XI&)E)>IP4bJW$09fwrIXsBJGjC6ib#Mcm(K+wEQ zVJ+4&tzm}DV))`D@^m;h$?%QuD_|O9gx|Z*nP*fP;SRb&*Ic{DlQ9Cm)C>MlDBqd{oHXp|3ljpF{OO=~$Egls1 zqh$EAz07vKdF?9Tl|mVjrr5DJz5d8%A=VjRik45^_;>%y<1s^FIJ#ugDl_>IDLn zrdc)fL%&s+kj8f70YQJwKYhXYD@He*Ub;6Z0gFN9S9X$Bx(&}F&9T^O$Ct7sF(3;) znf_BKyoflJ$6>(m>LUaP(03Dq9wtx5} zEiH8F1rnH0+l1hf7s7lzi`moP^cI|G{3yAwd$Mlm0o=fJCyJczi zqt9IWcrN`U_$%ez(;ttWlci{c4;_}HZb++n3IaBH#ZTQ=Et-dYaiQE~?et6ZT`mDp zsfPl6rFM_30h8*4vIaM-{K<&_s{@yz^zi1bQE^04dF!|YD|Qr}k03&0?RPH*PK$0q zN^D8gJVY{6qRdBSwGsjxZOB9+Cj8;*C!&6!Rq%|&Z!QC8!0^VyUEEYG04LP~9|6Yt zGVQ5wtFL&AXrII{bPNP<)H9rwCMA$wNc8 zSc*H`kX4l$U8#?`Xo(6%UAvBVK1cld6(Zq$JamTrC_8=R*JWhio@Sr?ADBNB-<-Jg ze|5H0k8$nrRzh}E0*oDw?O`Scmb)CVPvF_6<4os5*N4zcC?;kWlXiA6sF}eZBlZ?! z!nF;?u=+#5E+a`u5;dMuj#7#8zrQf&>#tOeTMe+4rTRFY*#I{bw;)@;ueq=9@yafn zEM;mrl@_vp1V525rbZu60(u6VRR`e_0&P*qUHFzsqT`IGC!6Hc?0Bh`C`RuhlBxsN zdysa7b@fRPGS@<>_ke(DK^Cf? zOQEb->O06mQge1VU-hBE^ z3OzyayIdWC;4MdO2YcsA@^~m!a;pNYC6pk--WkmK()5m<#Xg$ zgaWUqs=BGvu$w#Q{Qt}tXUR0+R1l8>VHFIaB3`eY6!1Sw$pEN9ewsoSY5V56E#tk0 z{~58^!M>K{VZw#6!DRS?sYCr+kW9(lO`+FfCiP!_lt=5Oq&)kwuS|@h1*D$wz{$Cx zy_1{7tBv49Nu?~IHLxDjU8h195Jo}l|EzX%aHCzFMrZKQTy{R^0{B-PsWebJCdWq4 zh<^Z)!L-+Gp38A=M!;R3ygEo-=k3Kxjib>VcSk37Pev@E?j}=Ln2WG(LsB-D?ZFwt;JNIO^+GrYolk5?BlLbKwok(rwY_8y9b^xNPBsF&PM8bPQ(PqUn zo0e`hMSO0cOF({8Mdn40W3ghHg-9vabR_ZsXCx_F*4xB+gTBHo-txnSWz{qDCCZ61 zfvkdGd9v*7U*lYl%;YzYo(jO7ruoxLiH`wF7&&=LZs*BK(ZG^HjsWAH(8Ry1A*Td- zrR(`}<+=W2T(zg7)>}T&l$XC%iqe~a%#^BD=p3gT^nuu#QNM=EPrjh}Rx6mu(aIbN z;wp3RWVFOSj$N_sQNLjv_)bHieWW<(vCxZ_7TO#@w>q-sb&k2N%X$rZuSGl2j!dAe z9_|4;+EF#649Bn=%h>!hSU<<)3vU=_K3~WweX-ir5#o=-Yw?f)bjQjS+YI;LB2${& zSIq3i&@e3U32@sny2V1Y`)1nz2eCt8$TczrpQSJvauwkDffq&Ky&rXCNgY;uZ$L`ZU}1J z^NQ&WjmL$_5Mdce{M$t!_*xak6P5-6!VIY#3}qw&L=W1>H* zPjaCkF4l58`A;me$CuB8y4-@^4hn}E4efwLeB(h%dyJyO zkDC!s|c;p&OFgXw8a`^}@He#iPd47RF9z`BF}2=gqVFP1BOYvLy*A(IIq=eHGJV8GgfQ?ny}ichFV*zXeh61pBO z(<(Q5gcg*s&a7X+$9*-n zc7D0(hWtsA*~t_ekL#^K=>#){Is77xLcWE{h>CwW;vW|NbuvT$1K}<-LO&@SGth8* zXc#QEBE+Jm(^H;n@BBxEl>r9MVp1Dq(^Ey7j8m|!*Oh}f+{XC%{grMmX24JY00RI3 z0{{R601=CrwXfR9$egm?)p#g;3dVGb+5M!$nh?uaiB#o@=4C-k>cCvUOROt&Pp*E% z+q*N)^AQd5qxAmZ-^2~qQtzLw*v!|1q`}%{T$YRK5t6v%RWWB&v8mTDoBP^ z?~_WxH>hY(xetkz*V9ehVK?@MBb>8)4%YO9cJ9ESIuyyF8z+}>@=)lLLR%S2j`&j$ zKpBi3s9fbvn<@JFB+$dWRe`L|xRnk>%}nN@-fd~5antjQ`6{-R&`kST@J+qZy=28K ze`MT4Rvt}wp zSbM1&Xp{B-7dM&IHfM6IVqbOsQ{7Z=>EH1KO&BU zprt(bdh9uY!t*)=iOdOcg-e2GfbzKKe3Cz5>jsX~m=}eT5?Mo@#arJI)j%25Ol&e& zLQAK<{6qI1c$6H;flzzIbsBQ&i=B=VaBty~Vx_h-j<+AY@ z=q$nQNq$Yh8;E>Gle3O?_HmiD_S z2Y;DV=$AuN!3vhHiCR7jLb!${WZ zLUZ5$fqhT=XU!XK8{Wl%+%;=k5Zmkt0p7^eIA060nju>}SQOLC(~KXaNlNw8xrxdMRtRPu!Ix@~Rt=dw3y;cacy8I-Hx$ z2nMbJGs{e|jh2%65%WBy8%REXmZUFBx51hWfo`Y55xb<5T7NWYPSe0?HMlbKJKwOd zs&77qmRUE{!fG%xmsEJoUq}4(hBjrMq63;i0BFm{1%h&DmlOx(q0GxML&P*6!VB5e zG>cQfCL8_212=$AmJFF~`=001BSL7Fc-A^9?x3MMcARaJW7 zlD~R^jXb>^@0S&PCH1Jmx%J23Vg$^t;suSYK=hq%?>5Y36i^h|wCOA1L_wj7mV6&6 z2?NHuRLnP0srIJb;!=Dzg_eN6-_UcEEWrc^!|4s`xCe1n}!LH|khx^wbID~_x< zr_NWEGD;;UkN@9Sau!Jc$sHoTF&c-UZcH=eEJPAebf9Z$1L*=06hk*nQsY@*X% z$K$f$pyl^mG+Tmtacu9R>vT!9WV+q@kv6f=V3UWp1l$Wh^15HhpymtYD6zN$Le#^~WwGOS`OCmqA4e~Jt~sO98`AhdS_m=Ea)_z~Yf!70XAgKS zM${uvy`zvR-e)=jSKnD zw`Py7I8fbeqY_L1wBEqeXv%#^5!#{0fOaqW$N;`{?=|4w;Vi46^jix837yi9LSwBH zgec0=LLk`@o;U^M(}g0EurTsU6?g3&O1hobh-TB{a@=9mXm~MRZk&2>HeTG5)2fyj zy`Dn{)WN3uy%wuxB0ba$t|NrLO>Bj>j*^CrC*!2MAi?U5R5j6#OVY4TQ~+APc@LHE z^exY0&gbJu<7XYVxL+DpG5BpPu0g%57fuD`BE7p)o<1jPEKYt%U53x1e%&B1sWBT) z@3i(oAd+|Nf~R~vuoo1UK8Nxn^6RNLriuG+xyAd@{uHTc3O5bU47$Qsk#%SVUCQy? zrXNdow$A3(RV)yE%B`9bNlwWb(hq*~muaC=IxP1_^cav0Dm!ADA2W z+AsU=+M@0^f_CZHWbuDrB*kvaH629@)&D=dFe-Xh5@a>We~^YS8>Y4hwh1_879@p* zfe5utDeFH!&Vf}em82)`cg^Qd3LCR3UeN=b-{xpC-wg%`W~sGqQfMWz*U1~RtA;7X z3P}caKIAXSfiVS);M(`8+asUskzsTDuae~kyUEY_w}CX~;*6T(){87pQ#^h6?95eN|$ zr1fMPqkxyI2rnWb%lE09$(I#kL3@zoD;aYYN0pMzcK7oI@@>=rN?plBeIx{%I+;=7 z6bS*|C{Ul?vN&ZAiOfcS>Vfx|QtId~C`Qy<74QNN6newb%ku5eT2!ZagaD1Tp$RBz zxpM!75pm!qJ&+OF2`}H-dz6}-hvwIRQ6HCm7>&xmfuSV%1#_WidKT9mTYC=IVz9%? zWhG-54-U@(n1yjNh2x)n94OQSf9-H{^*w?uk*^R_6x*ZLR_|pGvde0>9^B3*NssUZ z)|F~+#YLt=ZZlbUTW&nTCngqt+Nxcm)GZzfPJRXa$gzZ19S&Ic*RR*TgWa4zhJHo zYIC{+bYH|5L%%Jy%DghuoEIk&>HZbeZa*)Dc5_x_Xj?f2!UfZMq&n+B#McH=ugIr8LSGvF=)KMnRjoJmpZJ!qB9wh6Emt_h2AC!yH{{+#VbRp-IIz_pLzyDFu!{`+4&c`iiO9I0~)^e(M=^V*|F z)JW5@oo;KJ`De_>=IsWJV_=(X;yBIZgxP8D-TQ+%Z-^cQo4?ijmS{%WcG8yBF*iqgfF<({Na*)dq^rdbmp$LzP^qy*%B&c0T$fn_gVmcRVr@9`UOvlwZ#JQ;oQHCQ= zw)vjSV@wFwAE#_c7(`9$7`jaH59M>LzV=l`&IZ}i3K6t@vRhm2sLUw7xN zudwQJ(L$4sKZpHbuwj`1GBB&^oFBH%>OOP>PMI%{rRMMlM(2f?l$VB6*OS--fJKVb zyM!>bG8dv_$zN2Xxped!+t9Uo_P!T-NlUhM*iaq|_36tqeNG+!_TWQGJeEK0T+ zDVK2I@?)AD+-U^y*$_c-VfR)Tz6vHhbRWxv;ido+x*feHJGb;B(y`j6643Sw?i?~l z7FQ2ksH&Shu7N##+x#ToPM@PTuw&c{l1LYM#ePWNTHxmZv9^ZXfIQ?#)M~E*`0h?? z7a$Aaakn@F98e02u*i$p;@dTDBqi=dHI=nr3_-OouR4V>`PeWg_-$Lck}X5T7I4@z zSH`sPdp94sZV?e{CY4Imm8q~N9<`DX(R<~@z~P*$q$~A%=kOWKLp4kq{AUg@qkikI zKy3B1eq0LzVB$&Yi}LG7WnHeQKFh3B+Z6jbcL3;>I$ArP{;MdnlTgp%ACkm_ zS&Id;RcEnk08`}M>2@)`WE?u*X=d0`TkHm)AJieeklm!nI}y&f>7QL5Rb)-NRaC^6 zp>Jh6(MbsWY1?Yw0dE*P<4Cv$BRiLyDj(MMAPPB%qt%&`H&-mmZ|Qi?vYFE#=|$sZ zCT$A+4h_L&|14|h4^wF(ZuK66JWGeMis|8KZ5Q?rhCR$Yg`oXE+7kshEv#D{{4mp% z-`Sr`Y&%6Z2$@WX3M6a(#$>yqW@Z>P=I_Nbu!d^ndR$+hE6g`d)hNZqk#Y3E){NY} z(_;xDa>=-AkU3$G#W3BJQ;Q(7E;i+gHf542OJ)E50+I8i>(Tn?k+feoj`!XSjEEFK z{lG5z!fwZZ|BY288)_efy+9d@E#aMm9t`|xLq#w@4`m}!X6t||oOH&Ex1OuxI4}20 zRL~7n_#IJpSNo))BGhSxoUJt=pETysvJmEPE65boVKN5=CT&@G-CksBEF`7xBnrX+ zw*ExBOx+lU6m_CzioQD7S;AMKr6CpG>3mI%O*PAZxD@P6R!w1U|XHg zPU%yOG_{An-2uFCm#uV5i6LJR#&O^p9~KG{&OptTUin3Zs{WM=N za!OQ}6uLY}a;sJwda1UbBc4~{@#Jwf48`jz>>n_ZoO$IiFfwi&W;OGJe&iUMG695GSo+O;;(kh1XWzPj#D z8@SYS4J`8Ptb;xmz4@_yl8RXryoI7@EElk1ao!$>`siuTim-~6zK!ij^q|0Jhz~?4 zfiimRR&qvRIkD4b9T$S1wP$o{zC4;orU^ht9D&~y^WhBE=a>u#=}6dZyg(5RS4pDR z@e>(QH7JL)p5k|w00I|GR57!78Y+R}kuM^it&Zct8zb+=r=b7S9*`FV(ZRG7Xq@{D3>ms_4E;4pI&&H>;=T#K0T?%m}!QO zG+I^%L)N_Z@h=jg%ie>I!#v0|mtpTxtGW#jvBcR-8%L8f-jPF4Kt{)2*x3k$Dc1kQ zw;d8eXf>tB1pg~RPeY`+-ajp6&4vF^a-sx1vf|F- z_5MVvq{*D8zsO$t)rSn~W7lYTYUKp}Or^Dp{gbw+6#XLzIQyU#r$y44+i9t6qPqJ6 z<6}#_y@d4nFUvc$JKw^5EInfMn`PWWSLAoPTI!sg2T$s0cUQJrQ!mRdYaunjN=Fk~ z+%(z$s^wX15NRc;Kt;B}dOC|TF}Gs4Z-I!@4mQ4vo9nzP;6Lvbd_b2(h&dfhGfyx^ zH7$h(`$J}9&=6Yr;L$Z*D#{szya(9E;_O@A8;`#9=yVw)!($)g$2eb~zHA$3Y!mYV z!sQB^CBk@a-?uhsu9>m3B+?!U0tEk>e)m?V+oo%ydA8On62zsRHh^$?>+sJtDK%%`VYP$g!&v<2H{t%&wLc3tWkG zSY@k!gRQ8h#Jh9lcmNP}3oRjARfL8I?I1-*&L+Ig;F zp)$bw>Bj4_V;xiFp$8XM?!Qg)YrdV%>Nu)zqP=!Ar4zI!m(_>Kb>v#nZ?r5O^rrdD z+=TZg^@raQn5=5v^I*vWyK1I@UN*?zw!NvFZp%p zOu!i$O*vSeK1#N>HQr=88qy^AEF3cxqdAXNHL?_t;_Xf+z&o%M^;&E9oHsydEr>N$ zGM;hao+_uk4Sn;Ui^0x{6RdGQccC~cKWUi1ZO3j za=$0WkXDVaa`I}_{EduaXaWD*Ja5F_v>irW?*_%BA9Cv+L=I&BSc7tJdxNmMN6g&! zZkIa3Sw+g7V1A34VYhst)OW^)Ao866WzX9cG}g@Vyj1V*~d)qXcPg zNY~ypI=D9$Ccpeic3w{{*Su=YNadl^saUpsM|U#WHQ1wSH-@~dx%78UmSIYAA8?OR z-o#=L4GR&K=rd7^aoyJskMbo2{$y>R=*Bg5n;$ zyo#GYnMZYZR&8J1r$I~mJ;cUj-4ATTvG5;~kGfxv<%z6B7n2?S_<=#_5Gj5`b;RAk z$ejWum*XAQOBr)pEbniI1|QAX*;m<71^actrtp%IJ&hkEVo;dtT>Yc_Fa`bY< zo1y0lEU@qyb7a<8jx$7Dg}A(Kkioi{qhZ7eF9*G&UkV zbeMya9EAs6(^c;FB(N+OwVEu5jm1x%@Q@+@MXVDq8*NTsIq(sfsBt?puMiP`*#yL5 zk2x&h@8d7vOK$<8&*bX70pca_4rb(@mGov{M00F_y4HJA>(*iHOOt~i83z|SKk z_5AC)`EQ}1Xo7z^p4SA~2%E0SfCebDv(;+DX_&MInuV$&HU8~nrv&dKlDbwM?Q2WT zzt_@DP|=}jfsy*4J(6lA)kz^cjk!6Y7-<}gsZn@92TBMquV*(S1^T!-Bcq^)KI3uW zx@`N5=X@hu1AzS1`mOr}goYL`s6~w3qORLbCQD;vq{5)OhtMqX3jF$}+nj&lGJDoL z_IbO|R8K-8oI0l=hcYCaMtJT@J#Zm0FF_|C@RyX;Rzygy)AthwraECpBL&j6_bu8n zi|61VM6PP(*_77*awoc^-G#kR%zu;4Mp@-#ORl-iE{p*xG9~-pUs-FB&{Q~c!-xD= zA941?>Lk1x_2)zJKd$3uwg%_x!qg=Zw6Oddm+AC9+k{grRPNI6e#_qis#P}tzs(Gy z*kgdauhU<2#!rqtU$Dbmj^o?R7PFY{;-Qs4La|VO|MFBV2vq5A1GKZt<~r>nF`*ji zK;q(E=6UF=fYUL0iTEzq8@%Uq7@ppZvC8CjQ$sqRuM2M-dub%FfWJrk->0j25Max+ zJx~l*!NT>Ap1jcfO$}LtDOtseQCRAD!xG$=8Gr!Zu zcAl`a*;>e);LRCj1Ne^^6h1%6&NJ7w!K4doIa)mES5Fo}{Rh~vgGhnXe8ZIU$Nw~q zkJ^>KeYrb*i7yr^lRCg<&p5X;(~4Uv)wjl#Y0ewRlL}quUwu^(yV2XVmrYVNhx0)l z2(VUwiB!2t2cog$w*Md2blmq?v_w#6{)s7)L6k>8ABzUo&diK$>jaNcT^%fu$4g=v zKbc&mbpT9%b6iz=;OhP5Kv8V9IYNE5{@(4S`6Allq^Dn95fJ4Yb2_6Kbi;uPKoS0$mxDH^ zC&?DbDDsFMA3E1^c@s#O5w9=atgRTCTdc>S(Fa8v+qM3#g&au_OR%K!>DtHPZlvi~ zRW>3OxVOo0RkVS#NmreAXtwpiTEr)F2l_iWaHqj*LBsdj)DYsQaZl}>Zjhn~R*!!w ztOWmMzgLnyeA|ocL<3F68YlP8ED!(x{buJZI>W)&^P1WTr>0r1(hguuGHB#sKD!k} z)Y=J5sgL8N7=Eeo6IGA5d>F3DzzmxC;PKytjAj6q42e#-VM z6aVX^JQ68VT|&OnO1xXm=k3_wnqY)DQP@lxRe6iGScU5CThs$+FZF?fVjqO&%ExT4 zd-k2rR+L6H&{XBM?8lK;*11^&G$n}{G;J89ReZhkjoZ?8&{sbKiTD2Jweved5CX;2 zS*mRhtOK{!x;*8`88)D05xDgx?oDiG44Zr&C@6hSs6w%6y<)D)BJe~+?M)wE@ZGQ| zKw1i(S@r*)*jv-QfWvKt&kOb(;{P|Y{t)N(;0RTz09s$VW>?J(h*?Y&KN9{rMV zv{`rR#348)*8ce7+FqWuTLj>7=3!KnYBu3>*TO@!uouj}-8NbSbl4flE1Ntq(;q61O z9|EBu5hcHY+#d@Q#~y;zeM+EHzlL-W+$b^<<*fL7#KZirrj62MKcThNeGM}!ZGWD? zY-RMWi~uTno@kO*md{5JXldpJvp&Qv3bQ;%aQpEJh;f2Q=hC%1JdGidunU?nP}AOq zQP4VqC#yXwUx$79ksAZP;a6<<432REE_Cr&vViX|HMaaU`pm-0iv6UTk~f>{_7hF+ z%QnsFf6CLs!4BNvi?*QH<6o(EQ*xz6^V}Jf?eDd8gzWs|-3pMdC+$Ia{=oGKsr%^A}xE#>$ zveBHl!lx~~JN~+lu4xA3L<9>ao8}RSB?SY$cW1PND(YOP5PnI$!hX%FcKc*;(Ke+Q zjqDUsiF$BpUkjtk@$-6eNHl@v240+KhHYQ(W!J`A*RRszlF5ztgAcRGu{d*V^GC_H zp8W$Fzt7Qbz8l=W^ZJC5J{B9AT; z?Rsi5s7*xmD^5>l11#$=#|i-Ie&^l=Zrkzt>qVqF(HL#!o>=sb6i5op0P1C#pbBz# zUYBXZyrMtI>m|-J|8Iy*qs?J&Zozv zyzu`xY|d%R49OF!Z}I+om<>`ue>jt?THGjNhs~VIF@7#&^@Vw1gfIVDLAn^;rLlwg z$a7nF#B5z=lsSNDCv4IL+mQF;RS2x??KVWYCDZyhpm95+ddNyk0M2XPzAC6Rrf*c| z--hJBtn`wv?Jd$~gemrWEHo<06sw@dtYo=swHzn(Wa0aKJov+45hXE;=ZSs5k5ph^ zuIb$;e|!t4vSB}K5>M;-tB;}fX+SFGnVa+_g!o$NE^7k}pH|Mtvr%NA%X9w-2SA7b z{{(^(aQVms`CrJ-Iv`lbzhfthcnay$UtnLI_&f41o?;>y~=M(R(9`c zqMg~C26Pr|JcnV&{G?P_MxTz>=PSz3!n$#Eqyde4{1U#nxG%&VRQ4`&P&EdEaBtMk zk}ZMCPVgZ(v7c2wPQF*g;ajUsij!1*9t{i1X0FD>8+cx_!%LThJo$`dBW5I>(fY^Y_%3k*%MBsRWY$!P zdHt*ZGS`;ZNSEeW+_cahe=&}Q=e@1fAhYO#V#5F<`cnf0v15Un)g2*bzt+xM*Er>0 z!dpiHF7xxggcIPVV*|=yoM&5IrfRoPDUYjGbfCwNCtv_kMh3XUde?N6+UE+S>2;ay z7aM{C$&_>k2F67wfdBvna{-=CZcG2eQ8AJ-G=w)&8@fR)OM$(OI1}7CN0un@w9frwvWu#S)f7;^! z8Xu!gkEqPWht$DhrN93Aj5)PCy$BN4H!|B2q;V^GJ3Omw6Y2}-k`G3Zf}<#rV~=ML zo4svn@G80$zTv|`u%*$=U?OGzR3Mm7R{dI6z>*_73@LuJ(}(B55ELaWY|4b2#DYf5 zg5crxw3_@bIQ&pk`)I-_0d>d>%JHPBo0Y{|>V@pe$u{Q95V*bRYp8uO0Xz^8b_G8g z=#<50J{OP!CbH*UJYOLM#}Ec2xCK>rbKEqZ-)4Sc9=7apvIOEmIZoQE$&+qyR6F;O z_L<$AUff__@oaF-UNtaWqnr(D5aE1=!mZ*)o7sk98D!VakA^Jxc3GBZ=9LE=?NwD# zhIQ?9k*(lJSuCYHd>S)w71`;NF13`n3Y?zk)g1PxGGVZ8tOG5!#D?=d%Gk)Ng)|lH_dEGRRKL z&Cy;${0a+w?FmA*YX3}tM?~FX`#TQa#EKNv+ztATxAQ3wp=}MV*7mS9cx4)=J-z^5 z7Bwd3qMqMZbQz=UK)K9D128d$Tq{q?Dv@0pFo-L^m_$xS7vBj* zDOU9R!3=Q38GwU9tw)ckatx!=cnvYGUeoWUfO_er0bWQ296C8nu>(J1fdGpsR@%+R z=y1k4b58|^fK7%)jR$oMmM3_zbGBoBm?$Ud>>-V{$`dKWBw%VFyzq^SUQ!dX%8QK< zOR(I)by+R4WhPP8W^}*xBnS@KHl`lDAX#9~Lig6Pt+Chp)8=bU8uv=RL z5sBr%0KY8BVP?wVw%%+_3@!pa&fj;Rn*2>MqLzk5~dk>2stWDo&Vf)B_-w{D0Sx*2c_e-^fNn;UWyn}(_>61d|RLaPf*0=GIhF; z+LsB%F{>+{x9g$Vk|#%q69n#>@BU;DPsW*Gcopl{KtJD%;A3V7G&00XC$|HRcO3RL zS9P)8&@T0~O#G60OUe@{(?M(P)U7pd0$93H=|O{wUe8&;HU+rJG#}BLBAu@jFe#`j zpz9#hVdQrJaE~HT_PO7SO8$qGW3sH({uEX0W<{Ar0OAWhJ#}$O!Y#lLDF2Vb?#5<4 z#@wp>?S?`QFcB*D>LNtPjF=(r%d%IEs&nBiW#QKKju*LZpHKI@REA-+ByMwUAr8zU z0rS5+Lj?u>vE4X<8IaG0rV^{lrN3VxUL`y~%M-K-5RwxkgnqmB z_Fs1%;o=Kc&M$+hoZ)-`PP1R>vH~}bO5I+U=e9E<-J73roC>=cPO!Xz9u}3=;Ai6R z5FFM`s|tXABt&2`z`-~emGVq#*_Tz1^w2(+)f4>3>-RQSv{G~qjeyMqXHqJaU zn-vbMtifxJlr>v7_JOb$G5xfe4qk(O2fap+R_~?6K_GYM}@c{lftz&;P>5hvotw` z9~9W$l-g$lD|?(whjT=4Jod9^0CREQO`>}=R<5{E9Uy8%!XaymCYoKm8#zA8q1}3P zK_CMX28@G%RE)_rJ8bV9M+CP?%s1CuUsC+F^{4S6*cu{Kfy+uLjisRLQ?xnLQ`^#t zZ2$MUqgJXMyDgR`h!Ofjw9f&}OX_XGIt*m=6Dh|9oDNH-sI@+rz2j0d7B`p=TzWM_ zIp=sFMgU3G50T)wArsgLj9NB;lShMlO!2#B9-z^chWUx5QOEoPI}fK?qRn5uw8je} znd=?;4`#4@xqYjM<%`@PH#x*7l>1tS28gXEFMG5f1T#NgBr|}J(A>b-bV;yL{$9(4 zvWWA$mC~0`m;2(Qx8QbhR|Sr?)?EEV!E8*V3MtA+{||5vikV!dII zcLI04Igl=HJOc>;s~(8p{*hE@6IVY!)Hc+!H@2cei`1|JgtZZe%8xhH*E3|}S)R35 z=MtFKJDP}WO{)ClY@ z+P*HOM}Fs{G(3Z~>xAHFg{uhS{!)572ds9EF54E*{#99 zxn3?+?F@&k$RLvpW;q_H1&ft1;nKoKqg}0>R<nL%P~NDu8}rICNl>%xo}Vy|UQedKRh zyC21gb=#ArJ&&DLm94ph4+*Ifs*gLy-pk42hc$y!e0)&w;Jrdu*Z3`(6}QD!`v+pdB7ym-+N# z%8F;4S&5t1ov>A@1=Ohg+|@Aep7*~nU&tP|k_1Y$Dg9M|9F(G`on54NWQ`<6;%}&T z8b$zGq7CH}N>yYnMzI!hbo^YOBQ|ty?6)n)sFx)9(w@jld@BypZ2GG^`5M;s7{vy@L;q%ZJv>+tKetbUHqk6iH3ihP9|DSq zsv9y;K7$Wgan&Q3;{g$p$ormhz+^;kn>6idah^|7b72TR(nc#MCH(jGdecZ)T9HUE zBKk_9-?fwA1^0Py}=g z^d|s=tPM_=&QH-)+W?N@LkdOp6M8Fu;qcy-i7=RYv)wjx4HTXBCH|YO;@8lf5l((R z%ddy_)jrwyoR9UVV;@{1t`J<|KNKz5^w5$bS3N)p*;le<>Asrr28ejPr+M~vcw6*8iqHrVd3m|1HNZ8OyS_X z1{y^1XiQHzV_IAqY~kp5)YHx)54M-%)w|nJ;AD17l}l!;D9be{1CS6 zdpUQMCiS>0qq%&r|10p((a;_nnSFsqb3jlDU5~S^FP%c4zF4M&LGV*11QsYiJ{_XY zf<<~Jqk<3{B}8;9yI1kOPwglgKDQ2LIQnL23r%dNE})@AciG+0egbrgGe_{Wj6P*J zs`WO7Fj)0wVx9zXb6yA+h;W*DJ&g@g23QDxNB*IwXeRsagU32F4-Q%>feTAia0p0f zE+q-gHF>9^saQnKKTYC|BFNMT{74nvDKJnYY4(Xf3)LtxLB@!^rIh8|hKm+$Mdmz* zhrPQIIhA5e}-`pn)BZR;Dzz}+(S$#tG&*d0greqUQZ-cRw&7IfcfIjvMIIzbWMk8^{b z+Dz_b>lW?*J081TYzmX7rjpA`%eYfgSnk%KEnk}pUVfXCK#`A7SIg&b180!ujh~Am zYnH_-s%+wY8uGf;g*~%H3f~Ddog*esu!nkej)It${-*ss7i*{?lbk~S* zjdZcsV-G}SGbB-&ryj)wWZ_>|klmz-4s;uIZ)!_T?e+y6a^7NZ2rS9?O6!{uCURkG z#O{}m%&ro2dGG3vy@KVxB$&5BPjCxJJpC#pqKZMA6?_okZ6eE#lKk8l0gzf4Gdh-e z!g)T0#hO!N&GIi2s{ICmQ7#RM_@O>ZrNaPaJjSRH5AZMU?O_^m{Qz#bIqlXBU{y36 zRB10*eT@fjpxdvczJ5*=t%_iS;F#usbG6%}>>s0D|5;((WxnO>W}4SGOuG#hxp&G1 zoRd=qu}b^P2MkuUdrZ?7YvOCTWX1~vN36S!KRah<76<+rg+^9_Y9ZD-#w5Zyc7Gw*1HIotfQ^{E}cC~~Tw zuO6J}0{EkSuCrayAbmggUIw}_#|)D)MTAuao37nYX1LJEJ;pdmTkLAxjmds3g2zro zsw)Av#R8QalUCnkq}5{1m}}TD%^EP$-gW)Vgu!bN8Gjs}W|scQF;j_2)$~0TJtGf- zS$UTw^*RlZV!iGUc@}9nMW^r#p+gQbgtBWbn?`X@{TdSp1N^kR z7|x1?4&J!$%`yY4u@5r_#1*LjQby;{!kbI?hk++svETkS;6U=XwNgZjj!v-gqQy*98h;`91#1zsKP7=;?Y7puJ81p7 zHJYktSO4K)NvQ@!lWtBiKQMx>o>u`x+zAki1<8;ooq7jF;NAY%S!|$#XAqe<7s}r@ zU4P&PYQh$AOiLEO%T0XCB+5E{n-?7|D2MAliz0^GkD3`N=WwLEn6tG%l3nLp(;Dtw zv!oTp8THZDru7!THrIn8g{Rsa>zJt1C=jH1!N4dw@qSqS{>SWj)|NH$B`HrnthYbi z+B0Xg1}65hqIeCy2hYAwhcM)q{eqZ_BJ+7WBsaTLJ|b(Ua}thanEj}GA+|vGZNg zPsM+_P$>xJxu~mPG=z(M?N8b9Uoyo&Li`^e3Ny##J0fR`xrZ>1JEu#mgH!Sr#>Z4y8@5R@^)Mtoh`zH%~g_nnDaXjY|ch zM#p=-JfmC&rShc+Toxg|n7Wv$YB-9ri1=Nlv8oWOKgx$-Di-dr7{XiJv`E_ty2;2C z=0!(rQqV58Dd%x@UF|8Iz#n9#u6b)xi2X%@qSNPon#Vc zPJ{#s9=v|C`Wni6=hteN=Q&-%Z;>sALDYnX>Dt6j*C@m%1d6hdN{=%5>Clmp6+HvT z1F1(|^eBe5ouH_|D&`qQ*>^$FP$$nTdX74pXfUWeY);!rXKbf`cCqv0%a3#FFx4># z2O!f!*!MgC*IbOPLln|RmIdy^3l}^(-eMfV=U9L?%KbeyC8l51M0Q;}d*CI*z@NRl z*ChR|8JZjkcpZO{JK(*9(hAyg)uXJL<$N!GWGrmduN59;R)BKzUL&1(sUMnbRhca1 ze}*nzacqD-g9;c2B6wX)HntE~`#2U{eNo^Ec>OLIFem^7CeTA5)Ht8u`o)j;1>|lu zhXpb!@xS{ux|8r+vy~lcf^qqzQH%Eht|DAxkT1f@jl26ar_kWMJB<=%nOB$~XQnLTf^A+r~ z2KLG3LlfNR_g%Glo3;XPDGIm_rmNOcje{w?;;z_WJ~oSg$Jy>D27KPkzYP4NM(9gI z9%^SR{4-kbg>C%se|hKs6$E~^x}l;iuJtPNHY_UnAE*TV&2~Lu1jE~)bV;|{Yk#tN zn<(H;b&o_(?^C{YO`=&{z`L9CUBd9-%7Z20Su&sauIDG4UcQ8O#^a}ig_UpT za)0u=lfh;H?bv9;t^#Hi4&Jc{I`hf70S>j>#pnSK-zV9b^nn}+La5ah&JuU}`8s7v zaw_`gcWq|ZK7#=mw}Kw-KF-XLbu|h1g^b(OW$)hj(sIpLAiWU7FEbQq83k6F zhxIug{2eZ0?h~i;7gOUULG8T!R$xAeS<1qn8LoM?jM91&t=1l}>Rj|sHcMigr*qcQ zu3@XFxbub-($Ps(M`h#~YTxqNRkS*7ez2UbK_HTPKQX1PK4VQWt&C^NjHuFU*Gf@= z^l5@dos5(GE-2P4Xyx&z%m9Sb6#f)yY7s2y1Dv%d447y~x2680JvB#$AH9+aoAv-1 z>x7q-Sa@ZT;GttAIz>-Sd49dMYH_793_;?pMApk>QKc5T{l;CCLSj%TSiCSJnlR2_ z6YK(_KFlns7C-Gf0LyRUu?}ZZxbJy6(g7Z?KuM2B52wbEfY%?JJsKSh_(6jPhlt^G zr5SDlfe>p0OtAUl)-_5G^MZxVZ2`u+_)SbiEB9|QGHcw&eGxDCAL23qcgmF<-8ZWr z3%}(QCSL{JRw%W7XFFhQMGjIcWNoGkT(8;ipa*m>8oo*@Uw>q~&0Ea=$+$uHG3|6g zJ45eLtDOgEW=VLCM)M_Sw%9~!Z^z>a$r|4UO(QL&u_S=#!NV(JlMr7qcq+Us4$FQk zvUzhIV(XN!kuLmkz(v=%luZGx#aiYxmvp)uGz=ex5BBOl0ycp;NOF|;c_p+CNp`}M z!MzMEpBckTbK^q^j=gXHNStN0%~mcaBwqKFzTNE?RamhQ^6|UbRFnVQj`XCw6!Gmf zV8>TP06AOgLNknoaLM1~Nh}$*f}uV8^;ILba=D@WNlv0fL4y0$laSb33PW7K`6DMq->_a*bKbfW z63WWJWK=Oi&HWq>aBu6^yoP6iA-X*q#3#7!=1;|Tk!JimDQoKWfB=fL@Nh?_zV)iv z!6Lb3q zN$z;Ypti9NRrv?-C0W@;EvVnE+ML@>6pzHbw&hz(aa&JbISjE<71?_eRQ8GkFmqs+ zK7*sVcXqsO`1EAESIpNraP(MHtQ^hUJP7 zLXut!qc-4n8~DJL#&n$em87f5G(-ye5!VJ@V(yv;uco}^$#lw*G#yZ@HjHt(SFsVA zoku%8l?S|V#A)3OXwDzYRgWO6!<46AW$Q;Hdj7Er$WyJllBOZ4F(OS)g_^?EOM}G? zZq0E!BU@lFO63CTN>PV*Yc;wQ06FikyJKZqs)~}QZQ@5CGu-qYkvQhRslUatMk6FH zcRU4!F)*%BTn!F;ITYoAhRV0czL)<8%t;p8F0~Wz+rAkl+YPJE>fIv14{e+P}w|*E4bp!z(p{5=6I6Ys&~NEoH^u zmnWcvp8kYrSsXYc7%-}SRtRSRY(C5rM~niKa}9d)EyQ4@k&v691{^cIZY2omQ|f1?35)}e{dY@j%OE&= zQPo_1Q40C{2L}h}(L%dQvk`h{02?DE9UG7h2u_dO*%~wj1M^PXGyoG3xT36FYs!0u zdOVt0v`)ed5It79(3tZzxDC_@4N6(%O7tl>k0_o-bw4J`ISc{0<@wK%n%- zCXVI5Kd59oRVM8&TaXyYT^UoKd zC8w@{QVqeqnsiYj1=qu4Hr%lm;8;)yXE>_TX7lYu6Wbq#kI~Gja?I)OA3&yHi6@cD z$TK}&bY8n8+?gaWSSF)PZMqgG&LH1pz@Pk$6tXr}x`eU&^FU5zSw>D1hqnBEJWk8X z*Gpo*jZN-D-Z16jIUvs>ol0zA41}CtQ%4)`jxO+_$8P3RGPb#SAUy7f4{}Ib)aOxF zA>a;B5#{X+9*FHs!ydI%yhmiDedMi*_4SnasV+m1SaetBI@N@}w%({4te6BIK+GQXKS-q8ANvYEk1baX^+NVrxtyXF86R`|scAmZ?X3yUpS0%0TU$7FX zqI`TKJ3R@|4WFo(b5B`#&5q?@E!EUOft5sAjQ@-eRjU|VxqcrUxOukXW-eIjswFxG zZ1ZKO`DA|J4qebFX0BU;znHPdJ1m6i(Ndr?Z z)X)xNJ@xmvACx;Q0TTkCW1`=QeyG|Orbjk84PA$UnE+x9jkI3e+yooN>`nAX!y5!e zq~m5X4|#iiO5fwf^>!WQV-YRtl1sW8Wo+F6J&0~SQ%cF>;wHT#=j}C#bd>K!h@PXQ zCK?Y_GD;cWQau+~c%~z?&k1G^)UC$N-?ffes!_3CfGRVGzbdYr%^vqBHW(oq!Hsbo zi`+5w0gVW_XYK@5rrZ)(ATOSI8TTZT4ZCQHax1Ux)puJb7?IO!mqA zHQwsEwUY#fA&mO}6bE{=$!Lc82m`L+@wwB=C-HPhSEHn!G-|fmuw>63S>-d77IG zmN}rn1)!N+w|G=d@v&s%Zn1&)Zms|cR(H#QH>{Wx;&BQUg3AR?rW|gvEg_*3ck}nb z5$+m+0d4On=f%`ofeDq~)~!1pr-ZWP*+;E}j1N)>jTW%#E~1YN^y<^{NQsmGO*Fu2 zS?RVeZh~>xuM)-!ZZ|HA*j@XA6EgG5L&_;ydUk8PP=-pd%s@(I3hqnSz_kDmsYO!s zh`Q$p*Iv2s?-0>~ic7qSL3gNg*>vF!d3+ILwX zZhcRDbTE~x&GUrie0ca_QtjutfZl#$vzU1 zg_7BIsnaau*&BwzDRMM5eSlC`jZ$lfsJ0^^c_nIfrw z#hkRJz7-wKH@bPf9hAIn=tM5f&N&2&ik5UA!Teh^c|oc}ydbf#iizT@$kb**8viY93IYf-;a_Go+2s~b{$a6kPH~Ps_7sC6s zW6IQ}Z@~PnUcwirx+?xYqU~Yj90*9TymNvfEerT z&AOJzXRp_2PCdc?#xxC?+uH#8JGswXyevgQ9%oq`tR{Xta$-<9a%#mbeUN<(?IS!k z{bJlp8}|xW-mmi6_SO&hJM$^(1gPi4v{$Yuww~^k*JLXsVF=afQIrT`>Vqa&227KS z!Wiq;0IFJ+4`~IUm6C2tM3O|FfwNB4kLRhsuqUM(q8pl1rM~}HNJqX+1 zRAXKAa&713CgH7g))~{oxgBYbAYr>Fr~Q{?%P7uJn)PS;z-{`U@u)XHU>vt4I|0L|*f9 zteB)p<4Wl2EHrycrS`Pv?%Mct80Wi98?a$kNooU;k!=K*tVo^g8LS2f@;HP)g+@g) zt$}Tc>PFp;0Q+|hYTt(A!$ueqK*UpYPoQ1Gbt5o_r?A6sq#7c%j@Oxf+GUrZC9W5h zRISvuNc)tU=aOc-KbR)38NfEV9X4X*^De>miV@ALhnD*h4S+kuG{HipKy$WA{yFQa zhf8!VmXPb&!id$JL7+3jq67|I+*j0HlQ(MtYVxEGu@WsC=jYXwo7Uext>aY}>UgVY zG}>M)2sPM;#>va=?oV0~8y5NRcz_-d=oF{oI->u#k}{?NSmL6TagWfeLc|-xwCIj; zr9mt>wc>XjCJ%vece}jGQZVM&U)~Pk%&NDwMgkE&eZ9ePr%>0Edy$3KT@+lLq?e+B zcDCJGzW{N*3W?(#I3#wXl3IGWOi?y~byF7qPDlFVr@rISQ;}Q)`|x*9kNvr>E6>6h z%Ez~Pn3I?42!N;oSH@Qda9ul!BK;Te&S^LbSQ^VQYXs?a!*ip+(7tdl1ZtM}{GV{k zxzESpnv~fa(Ky4%CAtw@olDMp9v&UHqLzC;5(^w))!iZVUtNB$NU09MvnYo&YTY>{ zgo2nJnL=g`h_6cnf;9*xK0j7?enx@oXPmL-Fvp)gE7NFD$c6bxHxEh?eiLBwvD~81 zfCD2K83G3FSIRpEDmv9B*md67%(Sx!4(`=(6Q%jwt9IOj_?N-*-T#|kM` zt%Iu;k&k7-LW!kjF>>xim7Kmp4syHyKtoMKuj00&-zoxoFI~`F9V)llDbnf`u&j_-k?t0;%Zx z|4^HC3>QyD1%VxHGCtf&53GWkHGG(tel>)L!QUv;nu8VDZlF@c{-I=8K%0r)me>;4 zTmnn5yaXj1Ag0=n!|^8;ffq@Tgu~)44Xo5c0=P<^lxxe;Q(J9ZfyU|g83Q*ur>}9!gv;2Im=)jR@Au>-^d2b}z(0yKd!D zKUD8dXr)FcAZto+^mFQIeiq3904d`^nsq!O z`7)RUzrWi=208Jdd)xVn|JC!H>*5@jI1L3zOzBY#!JV+-^ev&pGG&z+XP zdc|tj!d#_iw_p#pfHPQ z%O=*T2#TUv@;7)Mw|}jU%23Psf)Vj{ta04JTEyt;vdRSxlyY_(ddL23sXpr#Aa02~ zelW=e+X)9YF7eXMnGDI4r%0n|!lX6_mY`rxrrR)#OubBreEcCO$jh`*8$T;dVonJg zyDgRP5k={@7l}okKR|?Vfsp>*L;#$aRK@DX1C!Zdu(p&}|L}`r zl7Vz@Xzh{uE@uZuerW~z!KiaI<5O@)>xPRfQ;{KJs1^7Rb^UkkPoZ7-@rx4Q)EeZ( zb`z@eaAEGUuQz&IjnMZ6B-;U=GU~f6S)aDQ9J^x7u?Lz{s*RRi93USDknNrYA50> zTqBt8^G!W>lpWFS34_GSJ$g^W)V?C3-KSa2e1RDqAQ^VTPXtj8(XlXu3a}q^26A(7i+_*=Ue*sS{=?K39Muu?g(qhCqtnE1>@(i>~%5)kRP#dEKkJOv^5PDjc>3r3sJw%I2RSSNpgc7E?v%jM)yr z4$^W@8hW4(t_61^p9${IZU*S8$d?Mq5a!oDNNDdy>8*;x$hhV;Q6Y_}8yUPu+OmU{sr&yGI>EO%^ z^nRGXZL(Aj%bbz?^<}~I$_((C`d9i_ z2%fD#3sF5rpd;7NLEHrv6`g`Y)CwwUkf>N--wK$3AoqK1o5TPP;;BI7?!rzE7J?owOSgihOXbpdf-us6I~yciXe* zRG7ZDapEv1e@@jP5JhK}`v1sQV_UO*TG8ZI${ns7_{bsQcJIFpnOXDeq$#n(sT~oaTcoI!YloOWc%kOHL$H z>Z5CFMNkpra$pjLqZs*4Q&pxYI8+h5CHqKgPB zz)s3pT$yE8UtGvNHP`K{u?73RJNXMYzKH%B)ReW}y++k@ zf)}CiM7de1dXOcG+9vo{Kf=pQw3@rS^ZzW??LQ?`tH>p1GR6Ct zoI#s{<#-4%46nB$3$0{??Y_E-`YFI+r?8LP4FLR?L)_y%N18J|lahWCog9}-iV~;( zpdhXNgQwO_G*ePGb;V222mOyrzmSCk`d%ontfvyBSwI< z^tGL2FXb=X>Q-ZQV5G&S4S6;gMor}@c|L62eFHGrj?)N!1`eW@;opY9-*Sv4fU57c zX}c8*z@$ZDtU?%0j(WvaXUlu|P={WrLAM~?>jr=JL`3WI5t>0W7)e-cdmYO76Ob zgXDR>dXD>a(XMURsOSf1g^He04f^(fXVj(Mp(#abJk$lmM7xji@V{UQ7y67Zx1lE1 zN&CPTQ1V<+C!4dmFgVKWvMU^T&q0GuKv|b_D6S91D3j6o4vKb)8M`d<3-@s;5u2|eD~IV}Aq?udYRFS6Zv4&`SX&39s_>?9WGKN7ah+4e?zLU|?d z-f4}e{JJn8(bxPbS6A24So!ir0cZFSQ9#{2ALFLv`2M3-Hn`hYh$&3h>TV*|1kHRS z!IoT+O3dTmQnO9jA0pB_%To(vRXf8X0up?#zUzNbqPU-JqTt#L+1Jfhw|W^Qme6nW z;-2}e_Xbja1nnVU>^Uq@nmj#AP)avut2j0>t+C?*MpY~&g99f8<|xpA8Uf_70Z1AC zqXVd%CAt_;{W|Fk?U->qT9YP&KuYfk4Cl&XL01-_l7s`(1XzZT&sJv5$`Mw;rnd{` z#cKt(`l62y)@WJ$##oi=lDZN1cWGUsMKqxF>m|rOG`>t7Cwi3hjViBJ)%b`&;7Cg? ztI=K-2cd>*11WIXYt10p5hq|mGeE4pM#L(wB9P&LEs~=!PQ>2eG@66P&>2Y6814oxC|s+GgOPJNQ-g?xL1`3Uoh?8YshwLs zhJ~&GDPhcA)}p(0k%d(KXs3vRE)wci((CepfNM$x0%8%VR0<>+wZkfv`Ohy}%<)4d zLGzhLv}n#hskA_ReD|!r?)4+c#udgX);O7Ien8HS0?4XVuOBgA+Gy1r1jNlb-!-oU zWZZzLzRyahU3E+0M_}0r?)IQntw~{TlUpg-QgHJ;2CAZ;JQh**Yb~5c|dSz}fx zluKV8t3+!LKBZD&W5Q-Cc=gY&G($=Ez#rDHkbDv)wI?UO)~=p$bR4ZxIK?a1Q{T^4 zxw3fck)@9VNW}{bWn*Mp(=isY@DJVx?(QypOJOOnwb{^N754lzAG0w3RXB}E+FIN8 z4_UyxtKI%+PATVuXZDJIe2le=XGdZ2OUAAv2>t~n^yd>y;9o+ROeCyJIL*b6>oyS z7OAUKD_T*tPnmuEF&Vx2Q?8s5b9B^w(B~#r^J;Jd2DEPn+;kJsUaLJsam-q?Ic}Y?z75;)P z6z+`Ag4;yf)#HXtqi_e6)M{~DH;zY@vAEatb11U6LH!ha1~>E+r)0Xo7f;6bHl##W zg#5<^OCODynkZ=50+!szk zeBvW+jn~Aa2ugA~%1wsvJ0%wbgY%xlx6v4Cy7{GHmALH)m`?9X^5L%de04r%zfn!~ z9H1APfj7Dq%b^Tbq9-F1^f*CaO;#NU)G&Zb>6CivnJr=8(RU$$jTz1HT)K-ruE%t} zqXu;r_gn{c*lM79DrZSY)gQc-(S2c_ksybkxYmuef_J{%9{z&7ONBh5u>p~MJ<4vX zy6ShJYlYrx2R%MGycRk`sZUo)*W<382mE`&^e4CyLG2kUq2u^xhZ1&BG@x1>%KBH( zRI^|o(^1G`Lgj2(Hjjl#1m>d*7g0V};faCSpzC}bYsZQo(Og6oZcV82n+w7(-q7$H ze|1J1I)=biL+Eht=_PN);r3@~D&X%(U0`I6ZihL=)34z>3jC#u2@V~L0pT)?_-Q51 z=ot0T{VDo^geN8GfPDx(&AL}o)i1v0xpVh`7%MEr;9G<5%o_v%hhH@sF{tq>p#q&~ zi`B4*9(lE8hIz@W7hjWvR6Ulwro1bl=WwZB9aQ{zUmzk0aM|y1EjP(D>%(a0PcdFi zNn5)kF5}Abm`Q|egNWY+bK;uonP^6r9J~F?T4Kh z-Wzu5ua%odnzu3wP+bufG#1SOZFifW>iiDRgxoGns2ui9 zU+oaSbJktlA2o(;S6$DGg*e+}Vd2J{Rm3uJeuDvNwOzalOmj&j><<4Bo!ooIY-3I@ ztGcdNs_{qJG9QYTD&efRVo_<6puVROl(19JcvGLBvt`9Oce1M}E1j<)Ow zLUL6r(RzU@4UP^0q=q&$2t`u>Ku?{iXkbtF>8B&R1$2{IMX~i3+=&kYyZqzyMk73vn=DOU$EM4*3m)Lu@{%GPV(W zl>Q1apMd zJ?cFBa4p$vUw{^LxL=Tiu~!c#A%Z$!AoNdz_v2lrN}lSlk%rlO0TC)U(vF=n$pf9y z=!T*E>cs0l#U%!x^E}=5xJNkBe0Anebv_*R!O#Du&a`U~x~ntFg&W6;<#y`v#~163 zQDYdAoWHH=#o&WIn`??nq|Q*1b(dPW9%sJCqw^ms740sM|2?%%0MrFld6+CE2i1*0nD zAM<~ONgEPi zrZCA3q+{K@r&`EV?3K00S7~}wH@9!NQxZ7SCp0n>S2h*0MS;|DOCOlq3b8MRIIHqK zAU3~y<&(=AN>U6??;TgcAYo%QjAUNLj+%elt^E7D0CqT#Ne)HQRr6nrbH%Ve!GcGn z`zJ`_XYZ8ECQXhf%(w6^0G2;Y0Q zu^2cs?7!(eWHy)xxYi#+!NRt4#+sc_aD6mKV&RmqMazhCBRaMb-TozmR-Yt4c3@@(_+_#IUGVFf=oFX{aIAmvh!LJAT6o>9715_ zAc|>sXDS|@D89c`fiT~e;CMaSWn$4Ngr+qqSjrKHR*g)w<5Owx;lLFNy+PgfH{T0+ zcHDGNkN1svnv>z**aLH!MRB<^%JA&YlOyckWbb!M>u?f~RPadt?W1%nDEvpWFsheq=ubw^a800@9PM%72L}qw^WC#opB) za;UWFPT1PQ^95fftH+{H?beR!q*zta0Pr_?vOj*6f3~cu;ID99Ip-Q|5>ryWS3i8G z-uBF(x%f?f@<4uoi853h$jApXr${zX+RjPFPHnDP-g0?}30eW5O{+W)Rr1E$8SiEN zOe9|Couf6nXZBtfit~+yc{5z0U}HUdXy!$~zPz);E^8QV#X_3QBOj+}BkRo$Qv|pKma$25z?9x}Z6EBZC8LVlh81tZCjN32ZC6>5a>jS?K%Z zBmUI9dAaO{>o!7Q&8~1^+KC-K!blyY>(bTFx_*zCo z_nEAoBeWsz9hCe{?1HCLQ^P$_ln^PB^=n{mh={##=<>el>y+8eG%g>9AuGcm20&Bg zzYZ%V67u|%C`PG7pBnfjj1U)i^8lhwU*xIQi_@AyrhX(xRIn zJX%J}D<8V0md;B(aLCr){Ru|u`RP681&MFb|b5=ytFjk4rt&RH>uGa zct~Mhly_@dTZkM^MLdoI3(6?OD%6C&b*FK{d1kVdnJ zHa8Wa`ZM?dJd*^bX-CO$?J90lUzkWf(`BbIIfld>tna_<4Qb*uRE-8+a=Vi(UrOH*5+2)Xq z>!9#fU*u4AMbqM9*A0s#e&r8^>rrZRQ4oBugdgHKpX<9Ii(DSYmUAn4P>|KQtFN(B z&1y$S>LcKc_NsCHwGO%dt=|#C*XD%-kDLA~z9k-2*(FhVXa~@}XxIiSjid02FK^fR zTRZGNR(VK!;BwOlyibQ8lkC15Ql6tx#w^+kN@L-0E(Fhm!V;k2cwW`b$cKbK0NtZN zE>%f9>aRwVG@7)_O%F-I+;F(fjA6K5%dJ72gzCt}6)bD<rwS z;zr65_f+k*!$ylDm`9FadBs!pdr?f|*)g@v;&!IN7iZGU9OGWII3o-aEwARmHXh}y zPypJXVV3jzWRdX5KdO}qX;VJy>}wCN?bz=(*c0$7UQsN&M(|@#f{)UIcbhWU6pOjO>(JUK7&ey;< z(brEDao3;0aH`o#Zu=01evIxpN{XL=h~?&t?WTWc;;Z?VfHsYz5aea-5iRb>t@Lh!R7QVxJh z5ZIN`|HW!d1YmM!QSRXHS}IrjC(c=L=HU*_sJwiyq(mb} z71!jiY)OlE8nE2J#y5DJ%p{#I^rvwRN$PJ=@koo(0I1&nVCQaf7r8fCtpJ94YX4;w z@CTM7cPiaThr>YmZp_Ru9(rcDdy%N!)P_B+V$iU=8^y-_sAqL=zlaMR`3NBtm=`yB zq#Nmw*T`xhlv`GI(|E=<_FD%{qt*G^*g>F1!`5ERaA$|$>eTGVw$|_0?Oj%xDE(iQ zk-GlGRhq}9z!5aVV~DYF6;8vPGsByNv_vN%t*rgaOKoNs$lCoHkG|ynOmMs}>Fk=C zm1y`%s9wJnH9+r&9oVbgn-GJ2S#}6Tq;J%^Spen4D7!w!ShvPe8y9TwurvvcGqR>F zyBrTJp{>we6dO51liW0q$Y)H#1psjo=Zd`>UlyY{D*5P!DCrn~1#AF#{ZMrF zCBzwi{sCPYC%M2M;ZroSCUlD3z?ujxp^8Q^ysDmvj3MMn9YrsOX0N?lD6dJ_t?E$8 zo8c3q2P-KQuI#+65l`w;AfZzKt%%BL`{Jst#sMM=Kcq|@GCu!7gC#j(*j3s{| zFN^9K_J}&5mZ={cwm7r>&)%0ul1O{6@M{fZ+f#92V3aN&F(77q&N)rPe-OFPbF^$A z*O6ci!QoREv3oOiPW3tk9_BL9@hTtys!2jgHl{Se#cy;;ZLzam@uxLP8ml$kubjlc z4V8l<&Sck53nc&q(B9?>f=BkG$nw;PImR_J%mhZXoo>MTJ2EugT%|B1n)s#Re%Ln_ zDyVNrvuDkb#dZT5o;?>}4F0XuPAH zG5Sc86Dya{(=mfXG+Wad_#Ahgso}!JlG$HF;VB&4gnvq~jpCyfExgD+3cQLJNCAZD z7%#UGv^(uC-;}}wI0LT?5`WX7d9Z|cgNZs6mbRXO@mB$ko`N14el38yODb#mzGs8C zsf{9<3IrR#?>DJU2D%s|%hnxS0DcDnXAcQi?OOyu#DX^tmVTRKBjyja>znq484_nE zRhPOXDFIY-H^RD4Rh=p@)3gQAZv4b}i39cGY45VN;YsB_QyI*DSI5S%%R|e{Ht~t7 z&M*dO-!1puRR@3uxHH3{--jvtzX%h0xRsXTA`P$?K^M57lWI)@4Yo$x6xs3fkB$k& z7m0?b4t`NImjhMnG7G_(+iv>}A;T>oR|A50Le66(Jx4SwXoX?khlL2WQB}Eufm|{A zkc2v1?=_|`v|^QDIfJ0uzJgByq*UCGNyPB~2KgFtXTSYP^-W)F9DxLll%QCcRikyn z1RgZ%|4*zGEQmM^*1~@Jv32E*-r^q_ByIuJ_q)M>(a~jbc?-4u-Xf%`1!5WjfYw9_ z^d7z==65CBSkCI9(6>_W1ddb@H3?l;ECsiyobh-HS$z{9>9FMbGrL!BXvbFEQ#yJG zkn*ryQ1DXt;k~+&wBiv8nPD*|7;yZsKtY$_G}b@pYB77sr!i`vq6fqsZdb_9y#tkG zZ&Y0Nx1fZy6?>{3qO<|bNA2fm&hoB9SyIP@$nw$}F&`aToZM)9LFp09 z;&g8d67DW=c&Zx~_ul_GBhH+scmF>fO!WP3uf*MqT0n!2ABEmSNw;vPww=(GO#3M@ z$@bcya!x+B*Y^zTGLU7&eq2W%YJts2!mF__sWfgvOL&(vX`2Eg8)|K4oJJY~eyCg}>|Gp5Tc?DmQF3{iZ*A5ROlbJS) znY>IG6QP|Nr(uZp9)8c|d_mg+Tl@5>`d8!r>A)o?{Q$f@0?N<;y9El(`i*nZZ(Md? zJ#H;p!h}E)Gn1eX`KOEDr4`J78JGfGxq)?RIMcN(~ zBN12X{}0bvk~EKkxHDzqcKS{D<#E9dXK1rQSS$&zEd3w;HKU_%(QIWTN$CVnnb&9Z z150_uR{-ZfwwX+y!x$IUt-iCQpWl!R07d=9&UjFZ-5(nEg_gI@1#Vt?KekM+9;%|c zMPT^WCxvJdC4>zMJ#gDq@hm)LHM_ioaFUix`(>|2i>;m#@9%K~;`h$J$AvsP@ zaw04v+{G1K^m;trE0XU!9!9OG4X%bB?M1d~_-41$)qeP;!^mPQFEnMUim@01k@9(G z*kkSq8<)7w6nkI_TDR8~=JzP6w8W=_72IwacV=r5$F~Ct;KY4K@mrd2(yT5AX08`L zQ%Yr}9g@3q4v(&oV14l}o27z_uUtlM6PU(OjH2~Fd^%0Tb;~#4!Ms!{^$AKhUhgYQ z6aP2xMFF9#YV;JyOukK41?H1?Mh`(hkYQ%+=ythar~z=7nfFR5W)t1QzAE1ORz zKvp#-y_k>&{3V#EZpsHN;3|cB?r<%J@`7FWNrsudH)igZoSaZ+P zH^};MGendSemDH33jIwQT^vwcntNa;xmCr~6F82p&e{V^QDZ@QkEba_?O=OjwW2EZ zS>c=~se-+{F(Gr^O$!|gQa?ky1eZa;pe4f!SBA~?wXCvM)d`mp6pNTv=e%&}i^^xq z($F_e5V7MvlqTo;cm?AkgW_xdy2Qu~l|SgkYfoxoA`L zZikQ6Ka^o|vJ6N$9klUF(Tl$5G6k?v0As%o4t^819$0&m$<&8zW{>HUC@(rPhept??aZf;e0; zj^EPuT)yK4avYuDCdLVoL~ zzy{3z3aI7hm>voCewlO89`P_P1}RjrNCQ=4Q^;q|^G7rzWge=8@ zqK47QN-ljPg#?sepSG@Ao)V!%2@y0)N?X@@k2?|our%B<26QD?{De+sDsffl?nZAf zw4@mz8z@<%P`OXnuYzLkvC{Ao}eArS860QTLHLj=oQ5pk9MS*8abq1J#gSAP>aPu5-tpR?4oX1eCs=^kvDG3 zodz;0e8xR~bJh{6$xmz_REhmE44;gn)z-&*zxTzBsKQy4!69$4c>!@wk+IMa%n}pO z6J)AwP8S0q@ zE$L5t!jU2#ogki`A40;gcO#r9Qi68O9Z^s1Y(E#TK^@#|uFGIpV;0Jj3;UoTQAr&A z^efgG4J{$v8+Q|R&${kR<(W$yaOkS5zwE>PUu@Me{Jm1^r8bAC?|}bxvgL8LKpv6k zq>z{?^FR+G=I~XVJV0L$YriF3>PmCXe1zwTpligyavZ7TG(BNdP2E|uVaWu#9G<;& z3=`_Gf2*pU+$2kr_Uy)<2b=^=x8jDO5~WLbzn$nq+`^!qQAr|Lt11 zc1xr&NpjxNuP7-1jZWIlithEiP)R+REAh~v{>ig5EhPF$>-pOp?m6b}&;!Vu)7WjA&T}~dxm=n3ZEVfdLvTNL8>1($DB6vcscenyMB@t&T*7`2K zzTi{slKf6RzNxUj0fSYyv$TsAV9)Qml2iqc+Tk<+IRr#^i1wY(l$qz=5b`*<46!!a5rdsuty!3 zr*?l6IAbe=9mya700_rHo|9yhR7}6wU2YL|gQRKdL?{F!*6|`pgyENG)*wV7LM|?H zw6o7}G%DGSj9~y0ny;?-56Wa~SidHl%>R%1u;+l@Jh{}6r*xNA@GUKC)7r!a^H%=@c+IjJ}Q(tq8r zF4}e#JUJoAM+f+%>g5|Jsobu6IbTbm1 zU)JE^uO2KuuDhxL+8t>?LXJFsJ%+2T)z011{{Ru=1%jGxOHo&9*o9qmj z8BP&5gGtgfzb?N9+7%d1Y@MYeD+R0j0JXARh_{qv8NPfqH1E)WOg>Zf^tPr42l4XF z*|-5tCMGTQ)_X0_+KtWOYwTG;F31`3(b)lC8M!dyk9}f%ghUuHnJ!0h{jQ4ukU!a5Jx?AF@A;SPs9;?dwqI+HcG&*ho}zQetxkbVjsuc|cgMCyo2Y5K|4gbvEL43${ zVk?Ex(*=0F&n&5AWHf?Q19Zl`x!@yomia_WM3QLhpch@aPzB$aq2CLXzrnQ9U0 z2;Bm6nQmr**i6S(6A5Wm_1U7r-Ceku&T|ye^T$=lDT`#oA3X)SetBO0<)y0QJrp*j zE8jM-0=O-h!~yOpqbL8JU%~WAuK=Vmys1ui@0R3BbI}ysF}ng7f{;uC2CpN}y}muK z5K8`sj~tFxj@Vycajuh(i%BLLgrJ7(SeiuW92zgFz}T!t;g{|xLak~4O)(~)z2iNtV-{Tc0w=jn2+ zY2!`?VW6&^1G^#B9@1*7z zo4pV=j53)msJs0(@!H4vI~*~=xf@#qwj>oBPMEN84avZj#(dE{RWSTOh;4x7OUieA zfXbmTbsGnkkKnZ_)|| z1*b!~HOoC68rO+*pifSDePQ*>cZWqVtA1(E^*)xPpTwNx>?U6|iRfv!oV-R%KXFY! zL|A##!2O-DsV;W6*bxzs^Qr)URj2N0#~nQ~@ZpCxtan3Ja8d*SNm7@lfry)`H)pq@ zPnH`N$tMF*XKJiSC8{x?yHmtxf6Ks6*qFk=4GsHfq23BS0w|Ot!KSRxvUov4={UZ9 z{5iLn_1EmKHOKDdcVy~~0N?=~%j;}LvokWstR*uD1_>y8!8Z6AuoU9y%eoz=ZE+VC ztoOmn&Rq87zg9S>PpC7H4-5o|GAf+QoKh>i3tsWp0<;i@mfFiXPCgLqsZ$ksLm^k| z7}aD+a0bu(g*Nj(YT2r8&Yoj&Y#_6BkL136lrla{>(){Q3LiCl{BnZUvb?wD zR?x>q4gmZ}Z+_UH+ICYoDLfHl8km)S#(GWS>6JYY9^sd-rqejww+Ntz4Db^0`Zjo~ z1-52?FXgHu03(52bVlf%GZ}Gzw=UVAczb9;u5vA<9K4xBlApvuY+iF<2k0k%3qntK ziDQW8RxFUvmus%V@+dtt$WZ`a1ddA?+L9m3OaACU& zv=zj#(AfHQvB^O*#y)N8hU65cIY+!z@fUXVn9p-aF0UK(TQ+w)2<|`$b2tuEl%j2+ zQ!}q8T*2qdALHH{eVNRe){Xyo9qDigHsOfSXi>XV7F3is3|Dz40>)XT z{K)g-k#Yr6*(y=oyFcWc_v)`-8S`M+crZrYA4HqdhIAoR3d#pc?ohtWo=db0ThMIJ z&#E^>Ez+FgJF^%HXBBi1WOmd-62gku|8N{ z$`AnaJ5+DsD!P9HU`kFK^lQz~e5B+(5aF8~Pa6ZYgLh%b9UY(qz{R3^|GXFdU=JYz z(o!EFu=GYx0uBm3ba(LLI1a(ISfggKRfd;UH6>5z1tDk&?$*G5483~*aJ&t!>CJZ0 z_)2VsFPOECZEaU8N_sUezH-94Mut%k5P37&2T#`1x#c50L_)^M%FB+EP3>E{{sC;O zWKZL8=jOoYB{iZDwa-hgAzCSNW8pLGLty-$Sz&Dn603ej5JRXs2guG+U>g@GTP+#v zU`)TE4;}D)004lo01yb>9zo?cn$gruPKhKt``uNEi%ap97v+&x@m|m-V9+^+He`I^ zv|@nxb~7lP#V9vkr3J_Oeh*dM9uD68;t#|IMQfP*!vs}yUxBRnC6#a#Gp-t6d(xyO z4wDy1C&(%`IAgHLnlej7#cFFUQF>B3Z&Lo`j#;wY{DH~d z0q;x--?OY&vZ@ZJHkIn(VHP3An0^&dPr|bukJFhfZw>y5PITKZEN;+k4PU;-lWOPp zc!GQllJ|Y7+bC=Rvg-KHue0F5=xS)-dpPb#TdSvKaOE;);U5k13-ZR)t)PT#e<%Jg zJr#JSkL5cf>JNi~1k87UVo`Er27yN2c;W_y#A=F0p@#iddn|GEin#_~<8L80 zcFuc8#U=qL*3-EgHO8fOXZRtXBY_E*R(IKBM~*&D@k?tX03p3KQyH(`pcwXsli{l5 z7j>d}Yapj=@iz>jAgkkpiaE?_Rj*mNg#KhzP-qeQi2++gGwiiE_>c9gJG?EOjZRCmXzS%CPOj;H~q5=FS}AT_NpCdR^MpsKp24 zn)_IbD~_cmW(V#LY$hkIj>|mwWu!NA0UBVI+Cmyviw2Tu6M|%>nf#41?jDfs7yjIt zgx@E~Oda#GXhK}>hq`QG-PZ@uN_teu`F1ODAbB&7GEHlAE`|^flLD~KENF;lR{|c# z(pAsg$!QOIVH9Xu)Fdwy@}GC|sehR1C{lW%PFjCE*}(-#GBoKEtv5Fz%LD&(H)>K> z1o7nvkT{PhvU*iIKW{v4XdE!gY_$4)bf_W0BiO^BFOsUbbF#?bM29?FqTdxArcu1V zs37YY6+PW7@oe)F1&`ViZ~R`7k9&DI9ni$~v!fN0zWjua6cs4mIO9 zmF=m&3qt*jB*%D{*@fwabRXy`4cwkLG`e_Zj7cdAKs{BIY2%C7NU|dCmmJGO>Ea50 zyPFz?@{k_Ko4F*mFYpD_aN%3od|}ZPV5PC)rKXo+skv&8YdBC2Z6nyb#%uJo8of;D zS0#9n*88hD;7)m;aAqV?f?IeWH#e)~RJ)v@OdOpZQza!CAY&X1^y=7&c$aR&#m_4n z5Zz>yuA%AVz~tnB2q)Arzs1TsSBVe=dFStlKYBHB1|Fx{NzWP(-TDw3S3AYZbb(nC z?h4Fme-|vX`;)c3h)=G*4$^ym3lvEW8ipyJk77y(|6z&RSm+n|^CK4^mLAgCfC~Q{ zeib|VuTFpK?^GIHJB;t00?(tVz2zXm({@^2-!*PIybv7stC@Jz_UaSHrWQ(NB~j4a zE`#+D9maGxO_Pas>Ug5xloxmSyk&T(NW^5F6{tF@5w)ZIqu;zarV~_!V8!mO+o5Lm zIvF0V&v;+a>+{WJ2t#V7?KsbaC72l_d~P~Edjz!ZITTDf!>5z@X~rIzr;YWy&20Cb z_9T=SKYnAlSnDy?@@<_nOhu@S<&y#IUpS^7>V-+DqV=EV-!3ry%!d}0rj%h}BeQyx zw7#=k^S-r* z<9ma1-2qw8B63bzW^a#Bn|NG+c>a1XqOEhH>5^Dgpzi$F`m0BzmWFEECY|goC>UHX zRfv<8x7_zf#Tv0<)3GVp4GGpMq_P7F=OvFA-7VKqACg33vOg#_ruV=A0410~nz=Oy zEo91I5&vJ}yI@Ttp9&BUt`(XFgY6I1m!5`y&E~j+8)D!KUky zIPvxQcT2f2wbiO*YnXsH$lH6>JElGQeBn88{VS#EYc!;0(upd>p`qB(eK>6GGS5II z&%n+@!#U9jkf`0>aC}b0GlHB`;(R{Hr1V46MBKgSR2PkJh!jnp_zX=ticOVjc$ z$Le8Ay1Xz=LjAqRxbG7$M!!u{V%PW5(*~WPaJN<~G%pUcvyPtGw`m(PmSEIT3#)=i zmjBD@>D2w;WNcUc(9bZY{H6=3!OkC5{2lsOuDb0;WHmP0{?b-y*6G0mNJGZXy~Re; z9}eOi(z-(QqealrdwPnq0{#kZ^YHZF9O@%9VM-3Kn^zrA%11njrDRjmV=MSaj< zC-v72CIvOlD&j3JaEfwj+ z+f)|5Ce4g2l)^(wX|2DKV$v4wb(y~(I5-RWHi8CKdNeKVE3c~Kl7psb4woyp33nxj zgfXB-u&sVHZ98GSeVEf3y!?p)#p>-jWeh7hoJavnW-6&U_QU;jUK$m*TB|T^iOMk4^Ia=eA%Cz%C0TW68zapT-t^f0I62^ zS(rn@k&3JAQYNRnHFF0BK(tCo9)Oavlc=Q!jf9t0R93*otZK(XAvoF;&2Qe*^*GpF zNx9FH1&a{T0a<~7M%zQFv{{-2M96n_m;pKhLb*5A&E)ycreMRN`!%gh;QJ<;zN)1t z7P3nb=$yN>7Ni>w?XPl*A<9`UE*;^j3PSU(Y}RV=t}pngG6=k$7F?Hm5SO_<)oMYq z1xuh?`ICS6P;vqoc7n{zlQQlOP(Vb5a^YY9j>-&M8VShhU8qa z8CU~V0_skWI33IaIzFZ1NsUc+-f*jO5{mR9P|yK#gwlgqZyF8%k1k}FG&IVq1gks> zi;D35z-`ME+teD#XVZY4?E|V4PCG7~`_F)Fxe(B%oFw zQn4wP5=e%Z<;B;j;S*56-2H=`1+Z);xQ8?01x06KhGWI+VgMLf3@DQ=IcMG%A8x-N z?}fm{;6(Ccm^yYPnh@4vuO`<~qyUst~{p|1f?)zuzLP*3cNN_QYS2 z;{3H&A~Z!NV^mD2{21kkC6oM-lzeEUye1tV?#GWnEII&2K)JsyiCXVq49ZT&ZDru= zR`YTSrvCS}ze`nb-de1xKRE&p*A=~Yt!w;Xr|6qT4g?1*pibcDp=g_iN{Mj6D$O;hX}G37abQX`GXTRYPi_Ui1L7yo#jJNa*ires0x9AYiUT7goCEJiWDW55 zb*zVE6@sWyr6sSEE3GNc*XJZASpP1-iG_2P5lwWq3BEY>E3CL~1M|L(>FQO{E~M9~ z!Y2IRyAAhByAl5sH@&w8UP4djhO*nQ*@ZQX_~Cm{U|(Q zHy8ZDE}YO-jRDyE>bsmC8zCo)I2G9UeQ^FAKlpa5b{(61RD?Xr_Z3xdvlkNaevn845X#R$?b)}!on^W57`tP zN{ne!5RvU+sq1I@;msi*Q+G)sdG3?LH^GKfrIc)=1oeI@w|zH>1v7PxmnK7>C=|UR z#aU=1CJXT&``x#E`~3u!9*E7H$ElF7=s0q4U-j2Eo+-La&zq2+K)v0QP$IToM%Q?pjK~I6oc8xxQq_z?c422ml}Cv#ySSo57C`EY zznymN_lc!(=3s-{fYr7`2-+H035EYz9 ztBHeJGj8ZKqpJIek-TSigY_n$C#R|3lY9k0rz9m>j&7v^d#7;qWEF!19S$+%bpyD0 z&S6IR6?v>ER=?q3hSGnCc|hies1#DD!`nRg+m6w{LeLsgl>o;%!l*0#u@M1>huU0!V^_sY)YW=?WG(L(9M^7?i~M`lyL_7RWsYS!FIg(TI~+mE0&DsVf;BZfJmv5^y^8`3v$0!0EJA0bz`{SO~?_=~gG_ zhUqRq1W6J4Ijn%)O`+%Ja!sm7Ipq_fh1(%X07NtlHK;=Mc;~Z{c5BVWZAbt2^D1>2 z)qQMp)q7B!b!H&|S~p`fNlp_vY@;&V`N)*#VsP+;4OqYmP3^wxE#0wsfL1EYyvb8_ zu$k}$=)7(rC(H(iZf?=a4r#8NPa4lBwkdMhEvlX@)zIWZ`?>#ZL4Y?c9vRhhbCU|$ znD&o~!b_IPhM9}@>*K`~I^lR;@lbyd(0cB{gVP+TJMChevBQ+5oe89}WMi_#GkREm z?5Vp7GEJ-!2O&7aV9l(SRTxcV-B&k>^NUvyC`W_)*rg13{Yo@9pRb*cl5gGxg|LAS zVA@r1r_*thl=F!enf}2;DvH5t-7TGGIX!W^cqJ*JGqpm(=L;q#SZR(zD^iZF&pkI0|fOO6M{_fLJBcqiH60jM`i#Pj(w;n#E;%;x1R4bF66_t(&s)FRj!e$ zDlu_q9+E1%;itZC{MnJ*PP_1=MvwKFVc ztS`i!K<{xqIKFByGIk4ylkX!Ih-I77hBMxb?f58j_79{=vW+d1u1cOSa!sSh!pPLz)OcVfM3m+2%> zkioB$OW*PeQ`3-dQ|UtD9#G0CIKZb2Q^89>l@i$B8+J{nC#PZ-`y^=kIGlPwehH&) z*H4zNxqO7ZI)cP|KBYa=P@qM0P5@#}2~PhuT!a-lCS8ts<^9q37cUhu@ZMjUvY z-0XfcNdH1^a<>*jsY|GiR8^6%(xU02P zHZXSSw*GjYOzG$WE8Ey0(-xTztVum2)-h4rRF^aVMn_uqLNgmh!7@~lM6W>QA7F@z z@YaPm+^TTmDz99CD>(9|r4(1`q@A|=j2z$W1Y_`zW7H*ygSB4w@CY)cs#|SA zvg@m&-1(z%Gtud{l$KAYaZ=dR1-n-lI|{o^?;z9BFhxn)O2}kq(F^F7A}-qQx8`ob zX$aIHd9wL%Mz=^R=y?cZ3g>Tm(1YFhLezmu**V;(@q&1t@0bIkX+Meum1jy~+A)Tzw!1P567rb^1i{!f(#?4f-7(->7Q zlN`xeGOR^{kJ!#r#d!BU&aGDube{)RG@okM}YTKx@GLcv4IzCm~z_@ z*zCf_u^%ic^D{e=H!bk8fQB*_Q@0Tz)dkwyWLHS@wTpyHamNEF-|#;g~x( z=dnGMqN`D}vxvf`wlo@662bSFFs^DU_m!`XilW+OFm6@uvIoOi=^sCwd{N(b|5k^4 z`u>Nz*r`){mQy`i$>DUTM$rfFAV!{0d@WXEDeNFrA973mKP56mo3Ha21=#CxEwlIohU;?^TswDhSOK6%SYQ}20QM+hi)zWh$&7~{O z`NOvGcFarJJI*m$m0pGmAd)O;avE{qdtYcQoQahi)-4tc+4+5&!68Z>bzBzzEu|Ci z&**|)B;t|#aOLD&Plx*-6hf3zaUZ`%fRSv5hH-{ds97V>9HO5U7+zt-5p0O#^j53a z-PUPP+(Iao{u>lF`%C|@HnImgTY)1FJMj9jVB-j@YNFhBUL{d%L7ir4brSEKCFBer z8S_#0oHrB~61Z+R4&T`T$|hph%}^L#?Whq(6}q~FDqMf2d5UUML@jg=7}EJZykr-*nP0GKF^eYtcmAiU|zeot))hxB=uiJo|o zHWq!;XOx zWO19SL0t8>Y1^oofXZ3&jd&7kF&fRF%+lYLG4FP-M>0^pOMe)IuN7hbxp<-2xzu)} zd>Hc3_OsZfmxc+Dr?BL)>X;04Gst!%*JCewbt#+UA~C75uz5x}+Pw$pi0GV+XN3z; zi)AV1yRo6j-21g4O2yI{2+QYoed46Mz-(&<`rp$Qr1pLzuV{?NMrE~1J*2EyT zda#)Pw@ZpQ@C$B}sA;i()O$0p8ZMZ%an(vm-G#g6k~=26=n+btRPhb4|g2 zrch)UqV(S1~bpD=3r`cDG|fbM>Q_>pNyw@jE|;X2n* zE;KG)%})eGR#59?ln*XwPec_eLz;dqfj?*@`YGpdB`RUcj|kJ6-p3Yv;Oz@=DF=&g zI`xh>Z+5>1pT1~FKp1K~IPw^vsU)m!gYN&xjnUn81ayq+&Q}LQN<5mtjGW@(rPqWw zQ{ZKf21={{9V}xTwAwn{jA|_la9lJ#1W3+=5W~h|M?{vkacs86D4sM$T^uC`Yqdvx zv?++MU$z?-Vy?JMYD(*|2d_}vsAHv-V^uo^%{Z5@&{8lL)YLF@aj8}1$>{^{g-g)} zN?F8eT}e%+#=~u{fgmda2mMvxITf{k+8FfB)jPC*%-KW+6`EB zGA*JiXZlBJJOk9e$%VN!rk&pwM4RT0Z znBEH$E*?3x@sLfIOeHfVn@#-7t=FWj(3D8ca=9V5=cNLlV6%DYfgM#g%A+ULirqMb z+=MtVU=%71CuA$!ZhC~{P8366%^IE=PKZVM@-WCB{`ygT!cqpj_qO2jrd;de2$4Jl~GvxSG$P+SPlN7 z;dFxZji5)c7g3TrDJq`@h_ueVZv2abXKSNz1e)fTEb5K6#6-tmO`n9=Urx@wJPoX# z6QIuZO?+HAo)DH$V!{&qVEd)Kbg`PpQu+iP>SF z1U+s`^^TNMVBF&t`ml}d1jt>&{_cSW0Q@9;W|QS7ENgSjZ#%=YCL`NJVj;Hyh7_?4 zm44rmghacUBaR#UxU}=={%NLhT`}(s<38|faNr>@aP(<97Xodlt{j|ZE`O5T-NC-QRF&&hiLKf8 zEbu8oHl@T`yYnS!dbXtGILrx-pOEucsY2Cf?CK3zxSPTtSkrlL zi*A$1SKXPg>jg89Va#9+;aE+0DJ>lI`nbd}8VJ<=nkCftFi_`a>j82&D4jTwmagV zx8wlXI)Z*g{*u#k*xXQy=^6Tdvb7%wKb#KT>QPk#+dsX4#;6vKL$y@l*DMpfN2HKr z)6w2}YMKE{!8+nK?MQcsgVztP%dz%QwM(5}yq5O_l&^SQm)1Ua_ZGP~MLYHM481H> zxJ$ct=Of_DbJ8cZyB*bJO)Ax#1Fmny!X8KEI1dgb-YU1qt^t%dLv6ZP4l`~*Lc4ZPqsaJep{V^rTC}!W3 zq77aBU{&}7OQ?a1B;`Uu*}6lv*d+B;e5lW4DC#{Z#Kk$FMA0d>@TLtxY8q6h^*t`k zFwv?b6~ugNgPMISmcl~UQZB27K9W_Ij~F}?t2>|2g8KhOWS=+lK0TMo3_q+k^2XQSUe z4In3)Vn5?y;%d)31w4=l9y1^HF0t+wIJKVJ*A79#n$I@!o`Kk7>wQ8(rf-gITo#!l85j0mSB*oXS<#$}-WxRKIRLAR7Bf=~Y9gN1F~CV&W;MRbM11 zWHZ5&XN;fHDTBW+=!m$8ji}CPPeG4ygEsxB+}C+%k25-dsv8(W1v?ZzSsHVZG9lmw zg`l$#^Z-C2^2VWMcvm$@i?K2@I(y*k(Z35S@LB7t09H3tx!*=F+>r75enyjh<-vUk z1QNN>?jZ_)LfLh|#5;HlKmhw@of5 z=9Tft*Gmvz%kL1y2C6{@qU(X!FiD)Na~&+oi0&tvR09_Z>pZKinLg_bBikS5E#}_$ z17mUq$3u}k(wmelYIg8&0$;7yv-B{MgV-|d^#Zi zK>Wnq000K(L7vxSlvGTA^{>9K{X%i%Z|+YLa5wv2>SS(8d3r-mI-)F8K*zW%zu$a~ zPRMsQ@gFrn2J_$ZsHlbjz!pS0D)ImV2hDr{iHdAP-BZt2FDegD%^VYexE4mUa_;gq z*O+XgZ=2D8rH7fjOLcFVMUqM1P2}_&tNFe?bnLB?!*@B2m;yDoSWi)b#I!t^dDyx$ zCKye7=U9`JVz!xH_Dpd8Y;~bN@%-%O9RR1^U?DxINq5lUa{6SVUk$>YC9D(n)5!^7 z8~7OwFx54ihm9M6#mr%l(fHOEe=_qb^#njMRaR~~B&tNGeB=sL#9(WzG+M$(&Zn$) z!FK>Gz9oX_AM;vk+?&~qWju_cB^L8DUov>`!!@W(#`BK8TuO89VsdW9%ax@$1@x3W zAU&QX5(DEqgQL{C4@niKdr5XsE~4%W)fC-)6l1pQwHJj4bC_KgAnPA3uyCF)oa%8Ff>OFR@_+yfn8&%192R)C-8SQ6(|$QU~@ zoRyz$${fVVAG%hNDbAKoNLIbj2db)qj`3B zL;f%_V@SlDU>~=9JaAuekwxW(S#tR~e?(b70KndP8k9dBx2%YWV120zlg@J$uuLre znGO98#<3IL`SbTCR1#;9X4=ikcx6#|S;Z@#GW-p{6Q`7k6uYi?{VU< zIJE&ium=)HZjK}ppW@&IaGS|u%VvF?GoB!#^i2?5%!kBx6{DSUA}PNa2fu}in#PEY zILv_p|9-0^$)FUgB)e@HJv|jgnn@Pe-EbQ5TA*WTz>kVx`kI7G;F;W~X4b#vvVd$? z;z^EZiGc;TVtk#Xzy|(-v(1;hH|6WzKK1v|(X88B5W?u|_ebC~7m}=y)tTH{!IFnF zT_V-@_~Kk%c#aBgEd)EZEHFSL;(p}kq8v?5*3F>YASxya!x(;Haj?+3)DM75ySRU+ z?IKy{YgdSVaZZUGR2RUyS(w*h19Mef_qDH35St~1o#&XEFJ*_C{SWK5unV(+1TGYV?;@6ZYSsjA2YYTG}@zL#d< zBjpv{K_Dg%{O2+vLCkNGe{Bbngr8XL%O4=$v?HuZ1agE4hmKpO9If4umj;zYboOx) zQ=o|ZliZjOG78w$oC6Wo$bNuKN8w&r^r*FwEkhKj2Tv2DV$;n84;O9n{C@%BaH`0G z@3jNNx(1iXIs=}QvVF;ZNs}#(@`auRRD5p+^V)WXED>I9W|Ycl&rZdOEcMS_KjUQXP*+5%X7aw zI#bhUl;Wf?(fr$bH1Rv68^o7dZJ9mQhwPM{e|~(A%$pmO_jH_4xU5mo{LT_Q#E2fi zq3+Q3nVF`hD|2J9W$!-;vIknil8G?_$E9Cfj)z4t3Jt;q_A)|Iuf4PJ>(N+J4CCN= zh0koUUOIRO-0e6r4_-VhL5{#>kTqboN**b^g6sW6fNFmvEd>@;umZmE`&V|oJGre* zThW6haR&sD(Mn_q3Mbqo->)(x6VHGDk9y?yUA?tF&!4$5={04C!4SwLJaC0I>_Elc znSr}rQ7VZr2$IQpKl|1hLcT%Wgza54P99fT({;i^k_j^!CFJ|(oJ@e%K7Gi@!t*X+ z?b1LIB|d1y3Q$E!)5yhUpn{F3u>>lU;TW2ss_&(06~UiO*c6qmw!mIz&+e*J_r#n< z;p8nLagF0+|L*-d4ZrsVxL+FCUHF&n>TamMPkuSD3|HS-LNYv`3wfgm1YrfPr7$*a zz&EB_q28CT2W;)_*(suiPQ?QWS@D%vweUvj2WZ`1n_#(T&NnL$} zBsKp6AVQNZSeeN1CbhLqh*S~*Q;(vq1lO~lZ<%zSe3Y=OiTLG#eZR_$Dy=Wg>rf&@ z;&s=$cQRc700f8up7v=GfAZ?wlh1-=#0Mj9cGrHBzDUMe5I4GRTdi9_$dV{mjDt2R zg?MxLU?%{cM3fbx#I|x2A;SAlCc z55tOib_N||N9f-gO;&`tp>UvGzG|JBA^&1au_V0RM~|KHThI8%<^Zr2Jj&9XLz@XI z#2tjNSzO%%obhS~(PC`&)yh{!C;`#D%Stdb0}_G#Y?t8KyHsBQB^GgXSAX{0ffVuxx5P;n&R@b;a!yzKLkttbX&>?rmNp}QwUJQ z+vmLd21Yz#(i9og%h{@P=JBk`HgZDQVX!Aw^_zLVo3B-R6@XqeH(bBkJ|B+C$&Z6J zFk{14p$x`7OVl5&L-uoN@xy{fId1p_+?j1ZwOgW%_cuCxl9P%GVAH>ws+3%&4)aSz z>#}9c;$F};d*bAPEElxg)I<)-W(TmPDEBC#PY8H~e;+&f$3jBNsuJj zW&jNN9Nlg`LeecSD0SjO0Z(QnLiX_q5B+1;<-!?{4dQBWK2Gv$(rL38;mBuST@NP5 zs>>gLZ0`>}XNd4e5+sd?o+;Ny4 zEe>a|E7MbUcF*DY7s=193YRzYDlt}K6d_7h+C4wLrFE@25urm*Cx`Qlqwq9e90bPK z)vTQ!Uzq!Py_N#(^l1+;%gEV~B!`X||B9g;4o*0(R_J!4p$?BCs{^IWjn$0HMRY_R zHAc!@V=vgJ9$hc{$aOd34FXO2KRFNzJoS+P00VFVp7?G>|4|-k^REPRJEr2*NouLc zQE&OTGPodKEKRZ#?KbeirtT20m{sV&)y8EY48*;_%i!dy+_S-@o&KR_6_5V|^$ai_ z7_vfDqj(ktewcM~gL!kSlf8U}#YIX|6W*9i5*N2BYR&0C-%JpYY%t9>AvVq4xXDPl zK5PBrT;)A`FvJCR;b$s7BCBY2POIBN%H2Fa!NPVD>)l}!>IG5+2+71bBRY1qx>x11 zamjnYcq;|vi8B4{9C7n#8^F33@TDPT7j$G)CKjCNNoN7l()uV{bk}3ci5kO&{dq_s zIIo#t)T;rx7USsbeV1yEU`#mfX6V9x^A+nNTF%E7vb?2-LlF5n6EZlWPsV@%1Rj7F zKWF&;AfrH?hCkA{N=u(EbB~-U(D48y^{#=AZV*W3x^@UOQ|GY_&(8`SJQo#Ksr=Eu|^QSSvvWlW@QOEIHo!31fYm#CO^ zV7F~9nE(*oy3G3+sl&v|ZWj9j%|SG*C*ldLY|7@8=|0k-&SLI3Sjdk@7mrt@dvaIy zw8|NYyi?INO)}QAgwuYndlFD*Z_diKTBv7apeP`bNK#%2C|=E}EK?E6H9;I`=ydy` zns7%JDi}R%VGd9y(E=ED4@e?l{4GrD^@e&S{0YFA`3e+eoi%?lj^@U%%7C|22R)NaiW*CpW)IS!+?^>X!M=f7W7*5| zzyh&8CrlDgtry7@b$eqCk96dEjw5ve8`E6?03&Kan*B8hEvYh?1YcDGhD`TigLDc% zlGZNnu6%eRz(B;|M4$eii1D$QuFYlP!&T<~4A-=*rDrPXg`Ieja?pAsFkOxgf%afI zhWLcPGn_MEcZus0-OJk>3SDt2xH@eyK_EnG3D(3E_&RB6)dp1G0yr^x$z%p-ob{ux z=}tRy-lWN^dPp{%zLmejR)_(5wxmx(qr$a|eL!t}29*R?rkxlTTcb_-b;fc_dTRj<4w8|{D>BrHuP%3$2)#|0Bj@RK8*?P{#{r*sKj z%(giBy{sPNnAj?L-*36h=4WM8vZd0UfLVfni-ykXZJ+9>POoh!nThyyHYBKC>^V@D zPvrF&&P^~^r>S9jSCZqilO!;I5(Ks;XXx>Mv&Ve~z=A48( zNwtqgl9@n+&7zEX)-}>H7xC~xCmJA7BUAwirADfI^>!jC2~V_7OaOuLzUWu@y-6eb zU5ztB5-@Fw4G?l=u97vQ^U(ugo3>!KoTa6COEt-UDq`EM`T13fV zi8~4J@_C|sCCIK5+CT{l1u5i^OJ<7;ovYzqdX6`Cl-6L|za*(|ii%_jyw3uSO`UXN zJ-AolD`wfFiAJoix96DzJ5wo@N8Z8#UcrnFhrzX3~`6F*6@2DI?T0oQG>9u>0kp^y|MiqF}Z(zCoCf5r8jv= ziD}%aryy&)boV~*w&b8l)Vg0 zV^&x;$&AUXR`j87OQIk(_v#20Y1CML*@e~A2Iec^sfBMKvBSBMT30!oU~fe!4ihfp zx*25N5v5{u;qF0qcg;D*R!d~!vG_QT?4alz7R@99IU!t@_u5q72K?SCJU`#>OTsPoebUa~z z(wXki4$2sLe`$-r^mQln$Kx2rHRoqT=?xP7@=d?Il+sUCV5YRGcbw=$Bn&J^2++1o zVEmOIOu8g!000937*=#L)4KXNq>FmXQy($Vj(r$(*n}0=n`&nKGp>$%AsZ^Tg%ben zgW|Gspxh8hKBTe_Lu4ZqinPJuCqFnyZZX(gxb?&_x$8+cZCI8aOjk0-#4Tal!|@)a zJG{9$IeW>Pn%oktSW0gTbX-Fwiu`k(z=r;$`UYwloIrfXj64*OKzXb~3$iqYC2*p$ z0+Pq+lJA%lT@Tm-2(}o{|1*r1lOzrlMvZ9bBHX;x*M`SZ?4=@iZf4$z6TW!48q`Kf z=`t~U{==FvNj1R!off~TL&kaeP?jxF%UE1}U!UjKpGo7t{>VGybk3lIjC^*G30?}- zpy6MXisCtE4*6hQ2!>ja10lO5SE)8u@7R#K5G#1g>(!C3Qw4e@@6rD_n2Is&N)W2X zzV*Sz38BdMebeLKm!3_p9T~zbI*P!oJh>#|W5K2Y!?k{{dFxE+)pkf$U(Ji#=ukNP z9b>9`rEJNsubVntMc6BJ{IaTl?^2;_e z(W=KYyJrd%3%jDpbxb#w_|~={o+c+_&n4tpA`ig-alt;OH$ATxG;9Ic$xzrQwW~wI z)ZY3{tm0AH^7&;WfXY+HHy9=7`VGU`M}y&b zC1-7I6m(0(5%2~K$?pH+RmP={;AR;e7}Wjr#DnHA55BO+%*%v8a3p$=E7JRl%l}8H zTCMu4;}h#s%qgo}!zjhLj=U&wq&H3za$J6a*Gc?Wk`4{groA>Cj#G zy0Vorh)5SvQZvNz_=w#6w>s71;iFzge24B>>*IAN@c6jG-n*TFuNG*sb1QLz%j-xh z0lopU7OaCgndGjM@Rl5dbw=PB_-KcpO{dZ~gz6UOE9vYg>=#Z%`vuv;!Y zd|HEAK1+m%cTo!0svsoJx_Kqe&S40lBArJtjc0K|`g~(44j&kGKc|Ih3869qF%$EWeTRuUd1+-N-q!ehVE<-iaKJAP}Nha9+!dbjk7Y#MSR| zV>WY0Y8-%oSAKuNlxE(?AwH}4xg{7oe&oTK5vUA2Ysd*rx*tlTB{(*8`jxY87}kyr zaMVjPz}NLlH_3(*e#Sgu%S&!|eTMPOVWFS@1Dx{LZ}h@0uXKn%t>H^9kz=by&BB9) zp0DN3{APU$!4z?uZ8TH;dnxf^`N0KP=jNT$6;ouAx)GZv#BHI zL1z)Rq3C9E^uw>pGsjCQqwhN5zz1WmAmJ$%*=#XqX;hCTqRdIfb(mv)pZ33jLkPZq zd5>3nK(FywE%?Ly!6YF|(=>S_R31azkWe`0xT^aNnYG2>ND)4wAdVZFO$3`}C{IUX zvV5&?IY^{-;uG3J7DBqiWbiaVH3fDROF-4^@#84_L44LRzruKWfjqt@D5YighICP* zZfJcfJ{)@p0@@>N5WQNpimhm$PcLWFWnBr^WnM|%HT#!C!@s`Tk&?xzmHY*28}8N5 zGb!2chO}Mo9S1$2D+0CxuDwo_+&BWo0at%kYfC!`P{}S7!D4RdN7E_1Cg@sd_3N=H z;-giBMumPq=-E!qOM*6z_5D1gdzHL5>aA!=Gy*aE!L^Yq1Z7kCgsxw1CQu@{cYs2Z zU-D?a;X)Kb!(>)_3p}~KIGGVJPSI-?l9vHUZ3;3x#KH3|W4Uu--JuJ;2W4LQ;W6<| z7TiE1wIp(=48@_V9V_C?)W0dlB3HYpl>*be?K0H0e?~V(v5)y#4nFDRa$dBN@cq9( zC@?iO`gq=3Mi)3XJPH)LWn0fcRTrFz$zxFH1y^kfW8M&k~WJFhT~**okhpJtW3T%EPZVGK!)6*nm+b(rNZ-c^Lk965?q zB8?w{3U)35z51(AG@DpVyMAAE>F0uDb^j%F<$?GYUZWFp^Z^t7aIFd7ff~KfN1>eO z%$P(CtxJ)fzh#0u^*ijZRn36pm@2N`$mep{Nm{Gz-V$>qj?)&S3u&TgnDV+RmjM2o zDQ=I8?=y_?UR)78tJy&gx)Iw)VYYNMLav+DIZvM5(vT&o?~wNjr(Bznoa2V0uf!Nt zfUt6eZ@cRAZ}3RNTQuPMMNyrr9RcaD`27A>3$Pwf;x0ReId5%Zo=l$74LT6mjc2MZ zC}PcZCvZ&nE$@|~+t9G5tps^p-qjE>LfSy6>6T@j%4e)SJT*0b)T%s^_LIptEuA4e zQ;}_Sugr@t2kly41=SKKmnQkcwdRz4^nuVmor6K)jH~nmBB`K^n z`&*LZn@kacsdc_+IL_6W0Xb9{!%?GRpI8&`#y2hU!Jj215(iP%`_gG32uX0~BFXdt z)h1Q8GIp*ma>r=6VTqNk4@>R~u!oWv0*74K&dFFpwt%w}(D1&g?_0-50{jy=DxdE- zWlj5yHz>FqZLp+9r_#9IPu~?zcD1GhiR0C`eW1#5t7aAtpDr9yM`%LCl>o3x7WN;t z>ndaM3O<+`7=Mb#L%3@(c*~V1l)>D=2?la)_`>hIf58JP0TLw7<r^rqDw?)0I^;mrI9PYl=MGB9FO?LpRi^td zcgknK#V}2DV=1ghaAYhs$DA1W%c^HFR5rD#6~DQhA$x?&)~JI78U}V#QL5v0 zNPVD)E(vAT5D+vAHGvu6LBknoYROQwN}AkVYR@L4zP z3c_-b0c{dcDSEV8KyG&ACINDWh%}ZXfDUnO6>oI}DL5znpZ^B{^d+@n(eF#-?9Kcr#f=Ju-%*!4}EKeh~O2!27e`3eP#e0odWA#8g zV?$dxpo{>tf0~NJ?A2!xT1|kG$c}a#lOO``hpQ5a+uRxoZ3OKvJ18m`B7Y0E7qOhD zPRQVV0% zG88{Qn~Bs%+z#td>0Phh28Ao8{SNk9`bF-`!i`fO$SU5^Llc`4I*J|}-4BPY8FK7{85J_#6>@mFzXv`L<``hV!!|L-k3pAHby z%oMy(t!uDuE#G_3Ro%BE;0CJA1r{(Y#C5x>MTXCW5UnIjS%6;0AXkLoc!x<>8%MHf@^T^1umNEglC*v5SuE+ZYDVj zLnk>Yv8G?w6>t9N!1O)j3!6nJ^Ug2c2rCFd=u;Iu^{=;X)^6372AfB#b_MZ$JfMrU z$?aoGxh<!Xg+&F&QKB{6y#5_B9l1 zYM!_%>Nj9P>Y?o&LWee!9)Y4P?b9(cJ=v+uo-kd;bU6};({OsCEG7fePNPWTTT_wa zT^0znw{O=pC;HiTffo8BANg{Q6Dr4%;BcM?_p&Sa;y%qSg*0^1E?Z%YZ6V*17yGPH z-!|QiA`}gV+VqT^EQy67Z=fquStj*oS0GY*x3zmgvk-=z_$XP*sfOJ zq+MZDazm@|j7$4LE$*q<&-Y}!d|%okg^dPYS@;6J z;18a}@Wkn)G|0_8D;)w|y}J}C&9$?)NNEN!kDJ@oM?QTFlej*}0s$=Nq~rb2q|`(8 zj)U>Cimj`Fyg(Qty>@|SiU<5eh}j%*gV$#ZIbI2gOi`bee5RHZ@5iTZCBu@;6bNtZ zq8Roj%uHi7=j9UVZmw4L1=a9?I$mDUDD2O@(FbRdOK(cF2TY&*=ZmX#zR;v-7={EX z?Y#oBjruw8-_)E~@49=)=N*9PU;P~q=1t`sQN1pU$XK8Sf+HNgHykw+eCjdX!7T8k zW#8<*Y_zA_Ys5`j%IUHk%klq8#P4A$Y8Ewu!EyR+Js;kcc)$?VPLi+X=Gr2<;(>*P zA75ftYTmLwVnV&GWnh+oU2FSzIb2SAj=&L3_!-scv7yF^g@+`4+2Q$7z10hEtX(*y zcJrD7>p7BG*E_0xAFndH;|4FWV)W)2=7vt3v3+w^hr*bj z8p{@PU@<7G&gAJDcYOh?n!1*03l}`oB&5;h0~dM$VR71ta3;3P_aAL&1jrP9It9pC zk5AklageCg>ezz#7iQw-Yk~;HyS|vn+%f22CTNOBa>n%b>nI;1C_Yc@qWI=zo&)qnO6xk`-{(cnmS%ni(Vm zRY>df!uKjG9{|4r@_^Zxo^a6gJNkw zAvN6msEiF~*b_Dm?V#-dG1ZHa0_le__h)w&S(3A9=`)C+&oZybi%n$dD@t8`@H{N6 z?3_8=39WXnYn8Ic4QshzTJ-8)yJ+|@>6ayZ99G;dqGmbC7f5Xvh+Cnn>8D_i}J)5ZX?C?VMnXAQ_aL5BK$f_pO?Gf-z z+hYukVuinpdL*VJ2F5v*&)A)>2i*>~Tq+}e^7c~#Hy$LP-s-O)0m!#Y5^(^q{zDMX zQ1D5<*hxZraw6_BR^h2QboZ|f%q*WmC0=&Dg8#|w!c-q{%2`HamvDbYGc1Y zPO;w)&%E+3{MNnq+0UOvvMSivksOjX+_n~Ig{?h$e200|WGN?CF|$vCmk6|2Zd$uF zMUoZO;S|1-JzJ!uS5d7AFvG>92uxcCC0 zUB7TjkrPP-(6xQZYCVmDJtk(^`sm(qp<$h*vN7!2-hqUss-C5EXvWTT@k(hPSr7k@ ze;wvfrSlJD0tA*W$EN2Y2rACx2_S!N7VBB6`s-$0B2UEs;-~l`M&@Uz5)nEPO=nH@ zk-p~GQVAqc98sR+zn98ETf6yH#)a`F-cJcM;{lw0$z2SR$Nw~gW#OZ$4whf2RjY}_ z%~m3Zx{)G()rZbNWU%uz3af>8V-N0`1pVyPuJJE=wFu=ex2v=!{QzYlu@h*RAwVZs zKvq?z#d?JFv~a+g!MaF@Ym^lfyP9l~i3m6;Qy*wNv{xgm9kdr8J#6D%yd$`X;8XOvlO5pK_yNIv1lGMIs<%&UDoQIMgH1O_N7V+kTMWm*G|+967Wz zvijzCz4fQ2&lQ)u|3m?bVM3^g=Mr012M7(Uc;5Chm&sjlmNBz3YV@iLi~gGFl|6m0 zqfXKQ-6xdrv@!frb?eXj>qcqQ7C1|mC&xR_i5{!%i0e0LL$mA519QPRx@ZCfHDx_7 zZ&F#c4n268_-+<}4B9OWaH3=UXl>*Q=~ z$t>rsoAacIZOq1xRiF%IZXBfFlX{j7csCdDCn=u`6BT1Ao_n?-d{et@W9Ih}9p4g! zRmRtHsM<*2@>?=}ezfG!gs}tufs?ciHuC!gt&o>U%SZ!Mg|jkIGS=v@deg;^lH_z(AqND8A?U;HSUvU~inJt&Uf`|Jz z+G%J^^34$SRr`myCE!v5D`|Mp5xJlPSU9HwZ^tx}GT%9y>zWc8ji)%s!7c^FD{^>9 zt69JRjMM-k6X}xxBPa8SD`=}JennL}ohVu*pFkUNkdY;BYojJLQ7`&dP&d{%x+63L z@*tT27-6x!IysP^__Nd zQSaNfiwY23Sfb{cLxJ1flTnr@`(DXgq)V8naU5)(I$@3;OBfsGci!?h2D&nhqZ@BK z9mCMyt5<^m+R@hc=N_v6QxjtXHa{OB37$iK@g5f8&yD2GbDjI^`TIn*B)6i*rn3k^h@Gw$N^PB$gTYp*$WTUtx>jXP*;Tc z41qS9wTAnp*G<+1PO<9e0NzfTNU3nPzses%H(CJcVV{CXR%p+?QK0YpxOOGFjN8Pc zrejT74j9gj2-%7SSkQ;h?d!!HKU>-3w*Xj@r>c#>e*V%JboWGF zcNKC$CdXr9V`d_;MpIB(ElIcMZO?g={liGIN>!aD3Z4jZcqIX7TiD7Kh_LTSscx?I zG1QMmgsZuM2Iy*!nf+#bY*h*A5R$tf6ljuB7v+jh1V(56)<^GapGeZX>%}EK?hrTA zoI4b}uV^G8b)LMrman1>wp?-*5<5FYR9-M}{jiFG$aSxo;5r!RN`b2z{BEGiaDF7# zy%q>ZB_H_03(4K`rde@)j0(EEf9`r~8Ai3<#Ml4x&qoR^nB=dHpWpxN<^v*|8i!~; z9G8YN094jf|4&%Z`?Lq;yt>w~k&D4bJAq$w>g#<)mulT9o>$a0eljqkwDExD-j*p0 z-S0LIL${;!EU@pC@Ui;X!sR^>1w}rjVs}}v@#qhXXXL4k0)qho+3s`oRpe(Fn$%PE z8Y=k_4FF!Fm_HpX1=1^Wn=UDT4?6D}SJYeUcjEa&p;+ZD!6h|BR&E95Os~7|tB@CD znutJK+m48w%dxBNWFbAFd=#L@R{%hcTd)o?b=$X~9T}JVyY^q!L${r%)q;8C2V!RE z%Dw)=5vgMAnuNgWjaKW%3i`S8t?;8b5^c6G3t#rkeCe;+AI&I!`@MG5{nu`03M8AS zk5&Sf#gJhVVx)}yHW_`C7Ep%QJjV%trUbHGatJ1+K&B{oNezc+nx{F275FaXhuwQ6 zbx_9!pH)GBd1D7umJuWMwha=1A+ar#S!Q67HC!EVIESY%q)ehqJX6{;6DQv|oheTQ z!w=2iN7jJf@gH`iKkT9wv=`t9dIxO&gTr`aC4Z9O)C3~r2#w+-UUYL`9~?!7huUF) zW&2E8ETo=YSj)9ksQebY;9sKpT13o;UPoyfqv!BTb;W4gSGRhn z^D^l=1$@>zSxjZf5Yp*6kOEott%XS*#KLN*UuAm3<>^jp>5#&yDm|)>OqiDJmb1=Q z6CR@nX(l=GsDsQ5Zfvnl?P*}4Ji)~N2mp{V852y%9;qhvr%66Sp@%-RFAoGU;` zB;pYHYon#%C8l(Ad6Qji3vMA`eS&Kl5x_Qh9Q&;XIxj!j2xZ6PoHk4&m9Jz@aQgWb z#cglQQm7;U{hS?z>{$PE+#MY<5#QVX^TD4Za#W^R7MEDQ5s^@M zI)|JjfbrWiyIfwKCx&%@RIfOp)Z_veytuK37Jdh9ueZ$D@lC^E=-RE9Y??#$x^ZOy z1vCHv1zJI$8)TG3Tu)a_=N432i+z1hHk_d$EuxLlp2r+Xy9~RF1Iq<@wW{`DTg&ug zi{mzGYvxOjLZwm<|E7rE_ju|$dZTT^Nf`O)cms=1dK&qf5Sgv_=dH4VAoRKIh7gDW zWL{MgOa-GIeG?UIu4?lJiBvX6V_dq-Zjljjm)}~Qe}aQX;(Q9gN+AaU6ud3lU~LX1 z66I4&Fu-!dfT%dk4fs_b-bR6JSoX>*g4iAx%;joecT<}q2KfpTb9cwnp>a`OtxKM zv~@o^y84IR6>&2^H}*v0^+k-&2ooi~BIq;C#ho%uu3L_@B-EGC#xN5hZ)cxjToUf4 zt(?0mSvKMU7<7RBYk>e^`xLt)_{}{#zf!an8Xb0GhipUI!)|l$ET2DUc|e~D)p&ek z8HD^d^F~=owdO4RW)#2Fp^jPaq`QlY{9>6=;Xp?H(kW5R>J=X6mwh5K;#iAsQ z2_c5l$^;`&qf}UbR%y?fHdid4?kntEqE7t{k?!?w1x<$p8jEBykvkljq(63g7`fzm zo5%$&6DOgz+$3NDt4W3`j`-REA6zHiKfgZ-=x20}?%L2$Nxk1>1sLFUQJim=m!~5XW?6|no+lv?6 zV7$n5AQRf|Aw(@3(sWoO=JT1c9qQz78k`8E%1<#hz72Qg|i{!~q%v7xc@r0Enc;{`ri5OouX*JK+xvN%LS5ovJ3Bj)wooTg< zF^P$;P(hP zLedRNu_PH$@46+Y(85FfhA6SE;7rp%000AA0iQZ)5q}{J4PjpsmGF z<|jJR&ihs2fTu2?OcI$vX%_*j{?!`AFSx!)Z*t-PNU0y>1uGjf6g`&EkA@Yo6XhVd zlrtmp8m2L9;^3b8vp{08{e6Zh62y&CQU26!(jJyk(3^D~diMrV>PVxD)=dT=Y*eN4 z>FpV8%b}0z7)+KrtGG~@kCcF|DMYI34o)&Z19Z1ezswxKCPI@k+%!9X^In+0E@UBJKt7ydQii zwdIhPY*F8j{$s!#TB*u<>i7Ar*h#*AX2opH>KaCMFpz^UhrzjQC6IInysP63Wf_f} zQy#F%ZTn&|rY?mG;a^?JVe(0KT~)WF z8C(hu^NXAHy3HMCBU6KFyOBehG;UMAaU|q4jz@hewfWVB*jJ-h zYv&;bDH$?7G!^Wrf1rhlno=FWb)*-Vem^Of6mfP$#CVOHhMX*&&Nbczy0*ycPUKM> zc6Tq20L9#|`^cRJpgo$X;Pk?G3-+?OVSvA*@-vjQFL@w-QaiLX5nAtvTSOCglxa;M z+L~9@K00J}=XLx(sSF2G>!45i^D;bnT-k$lnd-QNt4O~N&hAKXXXKwkm3rpVYZWYqTP6iMgKvSL#QE@ zwErc%fe5;VQ9Q%IVTLlWK-2(53dkXQmF~3U^HEo780G0h?3L5xId&T*8=W-}6 z12_s-0009A0iQf>PyaS>ydfGvW5jF@y_a+KMa!~zJjIGRSQC>Z3%fn7I5}DIT4BQ} zXne(Lev33yvbZr2N%pXq5v&Ub$F%UVo|e6F!Zu4TFB4`&BZcfGog5k|7(tOg(==K{ zFu%*lgFf`9{s{j~B5}84i?=UK?beFMJ*&<`r34qQ?__;hVpnmuQcK{XMs!}gSH>>N;w(47nCH+;Jn1?z3_ZfHgY3kS zHmtG33noWn$xaFZ2Req6szRd$BZEpd(lruglYI8Q9>1^_SALH){nE@_9eq>sK6a0dr=qlPibHS7Tb|j$2HCp&uj9T~*cwrGCTWJN5mK{j)n$NOvJ!N6`WW{o(tSo_9 zw+02h(gQUIOtFOrTO~tGm>7I-YpHQM&3%L}Ag;W#Z*Be`qhjED)!HiQE|?mKB1zHj z$TiI~(O<^w7N+QQ`{9BLrgFoqUn>W@S9Gat{!LCK;V{Uj!*Z>dJDLU%1<+b~vPGE% z*P!=}ifnj>q+N^+>Ah+i`W%qyp819Y2gppgZu=n&+TS&fQyRq;M08GSf$O|=+2d{E z#JbJB;zCFt{82j+Xu5oK#`)T9M1Glt+#Jq7M$edHISi}bXWmG!A^%ZM79JBe!`P?1 z_oYhQOu3NOcd~?!Lg4F%2lxo$fhhI}fooMPzVl{mr#Xkcun-^wxNrayLl?Ijm+6>4 zGM%Xa03Ufln;|s_EvYh?1W))9roS3X4q%^CFL6{r8hUr>lFy~Hs+f)Dp2;YI)kgi3 z-fC;1XfG8Subc5X^p4{d-8IV#b%uMRzS{lByv_+~*EE1@{Fx61x1pTqGOX#44p|?{ zH=!EQ3q2WyZhRF3Z*FRG?E0MKai&lBM{lg646c6BClLP@V)2{Pu)WDP!fEZ5yX&i% z*QweZXQ%B>Q<=sSE?4rQft3ssP)+HfDD;8#iI-kTlzTPh7V@xC=9OwM3yP zfv9Ta^+pWcdYd!r-C*h-2(Iw75Q+FL^EeWIeO7jPn3AjLDyoDKiMaxa+BTC{btP3E z3DrY>J(W75MsRQdv_q$3{6A9eD&kpfzY4vw+x7-V)2UGd) z&l3C*vc<(yrcj&IUXRZ^HEiqB0DD7+i1d z-g9oFlSC0UWMM;Qp25Fdll+aP;@uc8ESInh z?#pVpZ&i0}=i4)(6hyG&x%$V8y7n{l%goSWVPrW^!YjC3faprx~$f6I}M}5&CasS>^{%;#|r>VQ4}cgfGAX(}wYr;RD|v$LH`83V6Hi5mjSm(VDRYyZvS9@_c7o|AJQU_s;9pD?n+$aAJq@ zw=Vf+yd_9!3S0xqSxG!l(Xl++TxFc)8=?q9R*6kP&eJu3^sM33jAhuR1(BlfjCzJG z&wGb%<|Fdi=}DWIW4!~2KJ4EEzHa2T;N0aKDJZY;Lr1)}xJAnsaP$uxCJgz0doXa< zR)}C6hsh8NZG6-g2GMAwz*Decp1jG2e(-h3xmC-xd#L?yMDrBN1XT|Z2R_Dn7vNw6l8)$@ZtA;6H$2kWPir~O{& z1#`sQ?T0YL1GaDA1^EYIb~X2|f_U!uY$0SEzhyPDAYV?A*?Rbu#tQtoT1|U6^{u3R zP@uA4lq;${laS%#+sm?X>`|cO%KAIxdpFM?coLD|hBaLXLI&-8m5a9a4$#=V`QPfA zNXhMF2>W=wUJ13 zwZNi9`801@ux5a#NAso}ZrK6^$HF?LDd`>K3EWTXLsBy3Vh;K;%gL%(G)@8<&+{p_ zu$d;BKt~Fg6-zd$_2~%YUz`sV;8<4%hWQ>VKd7#^x>Ot46TLL{!B4K{=?1Tu;r@5~Ci=sMg|&R6oqsGu$A=5y?dXl}O@pX_M%m zP@VerBHx#nVJazo@d3504c$VJByl$feLgc}k?waDaILE`9R8IyQdN2-E zo`#6)i!{P^PBqfh%9;P_@Kd(Wrm|K#PE$JjvThghOC1pOi$ zK+cmM0{;x)Z-$fhkG6Qu6h};>-f$5A=;wtUMIXXIw`gN!oXAo5J?!>^9ST1b#m83H zBxEA4F$s**3&1)bTzg$j%fA)gL5G4s`8A6g1Dl6dWZBu6m7 zeXHs9^fGFSZN9OgW42!ik7Y{*=e9G?*Wj`Mz>PwRyA%9d_^jqW#bwzAP7>^G{p0Kh zEUxrFN1zZfCt+)!&$BVrbq419KQ;JunNa+8t#JgqZLIm&uKnzuytqB!9ZD4(ad3tuWqp3hGsMlV`&SDikl`OPrEl(XUhE& zM3ijBxgOVpQ-^#Pu_u8{Ni}mqzi-t->3?flEM<6Y(KN=E?1z#Xznx3THHdRUo=Fob zU?u)by{@A%dwf|o>}=5=lgWB4I)2u;qttof;z*K0WOb3BO7Fnm?2e{3gF@c^Xh7h> zliwJ!_p8P{_Ls&hcOY8^ue}sSpa1;1{rG+M@|l1hbEL%7{J7um4JvyP`LEaVPQl&J zrqN5TZai1vnZ$4J#zrDS_pKjp!*A8wMQ7&%|DC8$VJJ?WcqyeAW&`E0^1)lUxE3Vo ze$*~YaCF3Czeb|;B&b8b1a1(HJu-%k21=Gb+2ip%y6pPC=PvS-TxJfEzUdhVsDx^E z7!(!W8U6|?*#|Ags%U+2q56@#EFRY+^d|d!KPr@0DN!a+D2zOmT*gyG8T^BY_%F5$ zGk*ckbrpxoT#4+O$iTsv=`1?%nZHS-vsB56(R}oEF@Vbj>XvuP-yr<2s_&*-qe8?6^a=7yW=m=ML<{=Vfcn!q}9^`t$5-r8z z&o>*(ayhFdv!b2le@M#@fsf8NM%2`!iq-o8CWK>DIiNe;>_jLY#NXdW)lfkSiTw{$ ze}DaF=Dv!V`tl!{*eoR@yO! z&3uAVUXFmMAx)+|7Lq zc$x|dVnJQ$Kb#xiaD`{Q-6*S4=>+_3S%2oic4uOO2-R@9Y7A$v%Z(Yhe!a&7GMZ>K zEj}~^5j;8Ya4|eD?SHgKaEQ9mf&V#xRqMvtMx{l!O7ri8 zjy#hL@`f_GdtsSXz|khdK5LPl3^D1l1-_LGKmIX6}< z1Kgd-v)-$mrEi!LF@Uc8vxu7D1{7sx9zkky{L8_m#`-*5DBt0&6&Gl zOyE!!a6WO7_dSZ!zctW~578|NnQ<^;FVXe!JP{ha!)5w#RGbXyUPVVM$4x)EZtM(w zfx&IH=7}$%Xm%ny>Sz}&gQa)Q>UAf0n$38V0yeVl^Y~&Ah2XR+c$8XQ)@YYEv>qFHeIZ99f`)Zui+Qu-`b z>h@@3^@yV{zT9Uz(hHJ&rWl_y3WOBcCxR7hUUJ$8yDf_eh}C}99{Y}JYPz%*z^s)O zz>qIKP%B&ZL@{;XLB^a@38+<3GKq)!(Zx(O0lnyR?)JqiXhb&AxoU}l{i453kq>mmUPW4>Mg3}$o4>3awgN3;sn4nJ7e z*SR4b=h1ofP|%s{7T-TUaE-idK1|k|6hk#a>Gyj z3#Bsc7hjU#55o>OMm*90#qpP4OqSDhALz>nap+Ntxi?VieGOO~dQu~nj0Go+2dug~ zGQs`EYOJAChP>o&>Pymlwooc4r;tU*wFxLsSz=I}=s$zSSgZQ~tqs0fENr!~F~??P zxJC#WZY?MKZTI(&u4}Bb2sWfkM|m8E9fX&5lRk|@S?P^iR`t0_h`6uP6BF5eRHKAc zw@PgUT-Q7AVpfIQgrL)+cJ{QZ)cB;=pI+$ z^g~`iX1^+ZBgjG-_eQ^b+tyKZ18;-vb7YK*)}SJYZw|0x?YXc>UKVu@k1vLb#N#Kp zwVfD!l(i|nWKuzh4|Xl`wEN(bGq^{G|Ff|eg$;XF7tm|8WR7?~_9bym18}!yD}Qxg z{)vb8nW_{3YycZl7i82O^y#P5Gd9jzqaYooFTBSR_PNL)h&9q|m90(DsE_;@TtJ{xZ8vzW<(&^pn4w18<_HtVuW9r=ZLX<^^?EuscQ3fj{4>~;36 zpo~MS6HPGK4CoXygTpA)w*a>TQ#Os+^_)SRUBv zmv^Z#%Z>2h^k;(ujCwOYmYet4D8tt(u0vZ|suETp%EEX-GWbtzPgNBQZU!3pcTiuYB#s zXBB7W<3>u%Fyb2Q7W!g#XxjJ$2Wj<28D=}BKk}dH0#cRMI;0%<3xNq4((9ZYxKGA( z^*|~)HJgK^mbq)QVYV)CR>_0rOx{Nu&{G~N524Sa`vumom0-ueCAW29#gScEmp;A| zE9wvHFj~CsHjTz3lD44jVlvHKw-5KddV+`f8i2Y)NWedVO91PPS`C5Vo^V==I5krA z@sXo9a3Z7RoYnIz+L}J%~dMd}Qf2^`E~< zS|oT$BVle@uOWL9;G<0K|H>FBERxOLrWgZ91;IoJdUR&ul2h10gISq?NDV}_zhS-d zvcF+bIp>W3sJJlGnGma2<{?&3q3m6SbPA^sH6Tsl4;-Tk?aJwORthr!K*%$EzT26Y z-)RILFn@)^JI`2iaplla!f65LI7HZdV4NaO-8e1L=RK{EBuBPUb#IO zB`U?eg?YWfFG5$+6%p?=Bt6dZ6`&eepT&7Hd3m^wYke?{u^|x{n?$vZlFr5n}VC56q$!1M-pI&=%LD!A*3%KcOyIo6J zTRFc_)kc51+34PP+ykmhHt+cmwp_7=O%&8!9PKJ)c}RQ9wDiih=C%V51Ak_!w8v!oS~ z8v#QnD`;pBLl$%F`p4DFQbSbO+W0(4E!JnL%+>; zNqw_@T*_eb3D;?91d-0NVB70}DS!KKaZ)jtKrPlwAgPvz%bqCT`thD6tG9yyyFScp zx-jNPTEHwfzV$W7pMv(4sKn`5Fj6&4ZgTTVm}K3+2qHH{023QUXa63KnzQXI3YmtY z%co-Nmo@c*o=dToCIZZg1Q4fZ6a3d)ln#yxbQRLE%v~m+BVfHEDz`pmpc0YkM`2D) zZ7DUiUlRGyQL=-`1O@zpg{>^)<#_f`)Pu#HurKywEfi4aSo zK};X|(mNb}im+e!AG&*Puu+GiVbZgB_G}@wQMy2~gtv~Wqm^I~0wjI+VAbY>X1y@E z7KJOk@$mo$7#`&{Q0>{9$v5#QoKK@O4O5p~Z*rp~KdVD63T5ogDt@Rm8*w{g`K^$6 zO&M>>O7jS(8>rV(8!`AhHNocuRJHR{sAmVawY$5VD(EtnioS6S7XwtSwNtT6lJHj? z-69Ol>B;^`bNr?^w@hBYZ8hECVsn=X&Co{9kK%`eDtJLdcl?3-k;MmSE_h`jX*|<( zGdZrnlGu9j<7?H=#){9;e_}jnN!?;X*W`u0ZVo^UK=H9Vj_(Qjd7Y<{b3W4hq)Fos z1C7uLcG5t1wzy2GwyCcS+E!ge-pBuo$mX=?5^en8dOuHRF+?zC!F6BdlJp;Ico5O( z)3@WB$+f+#fd{aAGtG$-4l_aabKa+e0P$r5lgSx{fT7n!x(K zZw?cb3}}6mZi#qj14J9$ukkPvFk98UofDy=q#za4Jt#Ee)1$SR=mycUZ4zC*dHGNE zBa{aMW8sQP8sg*?cA`A$N+!fw!GfWrz5a@hp2}8o$_|f02(8VKQBKWLwp4)^UempB zaHB5Z*uWVKFrQ+i@F4~f&;FETm~aY{6eZ@jm*0F!{UvlfePfF^R1G8kF3KjkiYz3o zty`{1s4h8 z%F{vN%v5r6F^F+=adR{0PDX}0pXzC}@JyB28XY-j!v6U~Lh*0YlKP3!0{L(uQ#@e2kgbI^)y%_UE1FTPC%(MF>C_Wa!NbGXF~ zGCqD1%g5JpN=Hb*6_YjI*&D?dea;Ej6MBvup!)J>SmgF3RX5w~g!mQriNqVO%X~D7 zXWB+u{`Kw?B?c&hF>k+7RlCQ&(Nn0A5{&mb%SZbXe|jEwoi*EnBju-OiiF;CYVY|l z>X4C+jEe2@CxKEfCh~uV@ByC#4*H>0Pc^Jfd28Fw6v%!h9;55)ZKDDAS?Se)!$kTy z)5R3ncsMS1`evsWirrnej2*`igsnI+(sp!|)Y0;(G?BZrKw*17b1qe^CBNwyb@kL4 z{`gUzc_Zc)VPOZvxf}(I>)?n+70Ic<)-IKQIZ7RbjmLvwUbsH-+NxQL9=+jI#6{l} z=7p<&*W0-vlY1WKUCbu(p7kcezIo&~Ekq z!nXK6hJN7tB0-BKXxO?i;Kww9-sl}qnnY7JGo4@1QxH;W-Y9!>b8)xpzAgUPzuC;K zUD_o?b4qxt1(P@i`P`6bK>zGHgg%+OOwnpnR}T3sLap(URQOijft~U$x~fGeBh$`NXxp3BGrF8hm{L+2L$B1Iu${?S+ErJx%bem2i#zS^TYV^l3*zpf->850Uh zy|}L=&W&W8tRrXGp*^-bKvzZEW+pwypcxSZHWbKA1V*cfdh1=4mlmUT-g0{VDCRvHD^n&9htx`_9eZwWXYw4Kjh9Oi;G z%e;mJav9e!F(w`iO?b7E{%5W**UnJOZP1lMEi%?*c(W9Twhz+QVYOK2m;`i;n0dcm zi(v)2)9)YOdyGbaF_AV)3~P^~pQe>bAu^2P!yBJAUm^g*oj)RI)`0**6^fA9#VHs_ zrU2z#9IMP_+! z0h?5|JHd<*`lmsZQ)Ozs{X{=6p^|8iXjUFfyq%YmCUO^G&$~TrSUG7;Jl4E6 zG7h`BWo?Gg#O2y(PW}$7zBO8U^x}9ThBBHmYKW}#%#&=Qb8?uo7&pbvT|}5p8hi{v ziU2jB000CML7!h_ltf%#lRD3ZByKl#Yr&6Y%ZD^4s?-~zfaOcP$rxL}3x40Z z$Y`ej_boQ!#I&&W$Bl+GL6u+2-*S?qMm~fvAiCM{GQgM%TXcXvcj{N|+RyV+W7D?G z>4pocZ1;wy6zCnfKp*9N-0gDED(e>Jid&G+vR5*7m=-4>eV185DqUfpV>M+}Blg9W z+2YvC#F}_7Q`Q!Sk+jgKVKw)RUfpj~ze3t2(rt4JvRHfUcmJ4ULV^)-{vqFB)Np@%_yC?J5?}Wj8N8By$<|7({OaaUG@9?&k8JU&=MS28F6FM`lBhSGx zIv8Xao}u57FOfdH!*G6InkUfu_CzHX?h}qaH)K>5eT!%)?}3IgTr*+Y2~>{QSA$ZH zoDB4JDTLxZr~YWX33RF59e`OPt|!w^jkfleG|YGa(a{P82g+)qHxaUgOAugluBn{U zfn5QY2oJ*grQ%8?W{6A3wbEqP*y`yjb>f9Cp_p*7>W3A|RVI$V3KH-sa6y!9MT!Yv zXP~t533OTV;WyGX6*4Gv7`1V7#w&leX;ug5qcZm$qgss&*?>kCkvwq@N9Va)f1x=~ zvI?4o0QE56%Z;hRLHi41XO1W!s+rBih)zHWfgKIi@Er|wKrAC5l3*}yMb1J23@*WT ze(x8x)vT@#@opLwdK~&<9*3PP{zyVlj`9;{Zkoiy{X!NC#l!H`Ao!3d81-+C@py=t z8(gLtB-tB3eo`(X4=ZmS_?R~@?BBJy`16Y4S=OZYlO7NYHcZDaj0yfhNCQxuZ?qSo zns&2{4Z#)!Jr;RjyjYZ*q*CQ;?Q)0c%t%kKi4Cu^ZgnEWZlT>@t2k>b@f>MgK|+E37#{R08~UVr;rsMsbHi#htHyNLLUGkR3T#*BC-eA; zqsOZH`V~{v((j3#szSw5(Loi{$+Zrhpot0dtaGN_P?_O{2eKAL-WO}x+fmVWD07=* zHa>tIK)y9&?|Ve=fT{LHfv7i7gVhcQdHTxuIh|5zhTftF>FER|`Uv%%8}x?4%~c)D zfiJLyhQt=We~8oJHA2=Slpj8EKIvvtYA(z3I7Z;d+R$#!=9i6G?}F5zFGIu00?R zTU|adpEIT+z0!|q>kpH-E5QL``zSn3kh^v}e z09HV$zqY&tpJWk@n!CO@nnlX^*m^YtPK|O+GoyI`8?c2IP&i|dFPRo7W(~X$V8NqY z0IQ!ibhgx}r?u!Brbi23#3x3-KK8E{+Gl8GCck$Ou9~hGU$=Y|qnA((XeX@YZN?XC_gf<)~kVTBZpQTwGgMq2OAL8dPtF87rNh4Ly zy$`ZuQbT${T@9I|4?DuK!=PN2v@5bH$_Dt%5&r~8-}S0Z&IeY)7rnSh@J0`5K9Bq? zlGi-yhW2``(oOWpCx zTytbeIMv5mo3vQifM)9ZwH>;n_-Z=jr7AY>Btq!cc}%NwEAT+u0f2dEpX~;AZKm z*WSRxA%x|iV@rw02K!WLk=XPE3PJz?0x|)gU~W(UBd`Q+aNU}tQwwSC1P4JJv$({9 z@&$~R$Z4*Q6Npr^b#4=8Alaz-z_zkHh%DfBWpnhkNyfGXt9$NLFd^BOowv9FD6|sV zd3iUEWy903Hd+H2(V(p0$_6HE1W!GCQ`Gs&gW0U?WEO*2cr)C8=1yDd*1KB34ik7t z2$io}G=!`rT+>EihIG%sKC`PT0Ri*;NkNAU2CvxC#0?lMF_AUvs$4mw)43`~49{S7 z3sE8|bQO6ZY5X}jX&5)_cNWRuTS)+Yxl;BIEF|lCk=!+!#rMs8u1qQs_U0MqA_v_+ zaX1hq(J^4#Tl@W#`{as@elj%Q;i<%Cl8EbTQr@z7D-_|%O5?a0vBZv|HnUUvtfP$$ z*Wpor?tmeGgslZ3AGh_-^Z!!pk)G$UgU#9?4?PK7H|kuPj$^6uiy)DliA*JD5CGL&y@ zr$$wtjp#Au&sT1x>w5Sy`gvdxaCdic(B2t1L9%ry5k_Xm?AG982x_Ai^{!ztE?D+l z&3q7p1z(`jhbqX??(RQ9m zY-9(t(`#xwl$qVC>pa#zK>=K^g3`8^aJkya*p?OPC)XQ0;8Mdo*OwL%JxcyP()XuG zdM?4}7<1S6Cv^~&<)|V-000?rL7QbY2ra2Hm;`_GP}D&?(cT*R&hN6Q+p^#S=nl<* zMc#7rvs%>d<@4eDN8>j>4O)BoY% zvlMR)k^|b%2jG0j-1ophp#s!e1n3KOTKtzWM0706H7z$qGbcNQFl6~ca3gD(ZZzRe zO&=Sv-CjrUDSN{-wS6CBo`i*TzG2~FSY>8rQzuy!5HxqUR$;x{51j?awIr9!#|qYa z*)~Osr}|a4ujBD>tY$-hp9h}+LIF{Ch1uM_xuYFioCwpI13+#)!zBV&EKD$klck*S zBD>x2py(vfp7wuo$>2uVz?4fklm&T5PzAjos4f# zqqeZQk{Bm&a3SymFEzgt8d$d_epLMd_@`jEYWIXD$?fxw1E$LRjIr!U_&ovjbmyZ7D42HO{C1D(KJ+kyJfb5{Ho2F= zmf2{qwiR&7GH{vv54|k% zP#P`1%pV3j*ku+fV~l5vL$XeQr8)3s)itDS;&{06=XkGG5*6M!hhqf!ZN2L&`Lys+Kbzjr`h zFh<(*NwdP|p-8`nwo7v=iMPY@59CTA0Cf?YZz^)t_-I#a423+Rrs@Pz>CR$W>ww@y zC|gCOTrHwl*SH}1FECHDr*9xq`%&dnmK`eYr)<1k-B8n>s0ebtF{zSgaX)OvLW-94 z>}%KaX6hXqY?r-p%6c+ulFsi)fxohIDoS)VS_E*~bQ&74&lG_fJ9eP-f(0frztr}t z!d0p7dvVe!nlXk4Jg4UtS07L6ma$7_g!6lH!J93^FknU^!Y6EGYjj~0T9mT5J;iud z0x9<}*U|$_slG<#4PN(mo%siWR8)i9jDe$;BR-%LXZz36wBgXd(*X3gI62lM0>7lW z*O!>wa-HY&IVZnAR}7ws6BHw5|5fDC=*$xjS8N`7>MMDM!$@16_tq)cEDm4ka0F-l zNUclx;nBa}0QPbz%!Z|~xB%3^otNgcOqgzbEDZ)47fA>=eH+FvsZ3K77_stkAud`{ zA45(R?hhI1=OFMph^Q!sUN4Axz0a^H+61#Kkk)rp9*{~It{&zI^kyYhP^*k|I{Pir zK!R%gC{$v9Yr_Jzvon~EHo=XuF!qzdK0Dj9WY1SA0)c(_%qw9sNJa(8PS1-%PFKN` zv8C3-|3$TW88jE$SrP{HWG4t?rMs*e8hCka=M~E| zU2dazN0GOea)s03cb)u+r3K!h3OQUJ4}F(FQeBnTAyZtA3g@j?TaqM|sh1x!c~^IX z*qqbhls9#BxUfU|dH~Y9ANfr@C?KPUJG>&#p|;B7M&zpVC}Se+-!X=whHRSS!1np1 z`WQ>sak{D(O<=woe~>0lM?ZK0n#LER>;f(Og)=zpr<+>!6`o59%!B#JI5+AULC8s9 zD@J=gehk4*a#?0I^Y4c?ND+Lb?1-@bsi6>(FR~lBsQGTHMaiObCAmLK5}|KjYO;vg z35qBjiZK%&(@rgUjIxeR;1B?PJYhSDlKq~Ro;xuisBqB2{PHy3(0i1<4w=;*6yjPV zfNnThy})v5DX{e?k3kV%z60Esgy68a7O;#~W{j-FA{D_&mktO(4lj+>E&gGO>R$%8 z?YKlgl5}>k)SSagg>TQ$v|r*b$v=2{09%bFac`$eU$INYDfVkF+(X`}p-fuN!h{*s zD~WndF^`+wx;ct8ZOCR7PxG#!t`+m~^KI0d5k=Ki0P-g+&xG)pp{)85{i#ad`1J+w zGCxaIc-ke0z*auFK;)@{lo>2+Fm&#^vl4g%ao-zK1bkoJJ&3rhvI70>R)%{$_JPYC zT0?jak7ofKqk|iiQUNUPUggirD-+{T>xdM_#H8lVDWxW|s%YND@iaD~ z@VD@3nWn^sj6i-E)GPCnikV+MDjHG7C+$;b(t6Ygm0o`&683D8;o04MR3UiCtFK!R zlB$_JD(Ap#{eU-P3!B}!lKJ@-)3Reorg23}6B!u^lMm`4sROa0 z#Mu(zOzsP}1Mxo1^;{nxvGw?| zQADD~3=_rhw+8;HK(G zA#78705ww1MZ^0h3F7=@B#nks4KJ@UXu1ku1ysmaZ>Bin{*VPezWtbt>jvtS%Gmdu zhqof-u_~=CV8Rj$GU3_ux5}RXG& z|3yA~Ik)K=I5Kw6CDRd_HPSHuj8-@U?8nCkKs7vIk|S@3wa6^{KoYVYU51_iBvbfF zdTNR>$+;v9kH($>m zQ%)%d+)R-r4}!By=3Y>C1YT;88tIR~+x#WY+3%e7RXv-(DPVPljI?Z4)QKcg!U=Q_ znWMk7mpHa;w#K>1<-VRuh9++)DO2-qry-Ym4u*altJdk#D z+P9%zBvgzS7j@Jn3qh|c#iSJn^%q#=mQK3$$V0@4@7LTr>3C&vdQpvKpSV7!um^sf z3n|CHK+yeu1wHjG!2P>ZXL%;7Gh!Z65pkS&?)Wy|_To<8EqviXD$+WM;oc#(J2)0f z{jIF=&%E0SK~rIom)x|zL?9n;0h8m?OC^qY>%FBsXM!>R`yBj$4M-?Srpq`7(&O5j zTA3uiBI(@c7{p|pmC`Nbxwf55JXu_!`q?h5$g%3@waRGEkvqO|o1Fl+by%XQn*-@A zNaxS1nC>3FWbvn`cJcvlXxI^nZG_(w8J#jQwmsFWB9D2&FCgqu_!Ytx6hi_eCP?VLzyc9*4= zVW!EF36ATM*;B{;<!=YdH%1a;P=@Nc%1GKM=l?#tmxwH>2JecJ- zpMpotk@u~@Q_qVk&c~Y2BA%$l_))wNYY0ACWbv6DXMrqmo?Kl1%Mp~Ly(mJn!H#x>M7JTY$C7sT zFbG4s(*XDDLYZKK-no%+vS*k@WWQ z-I>~`sFeyp4GXJ_OF|j)lQ91HQVw$72#(#3nLC_?607D!<9D1QbfHa~ zQEe=s@t_5jt`ybd!s(1fVZ`2(4tS3gMO_BZ)Vdzz;3SQ0E*x|eXIk#HySFwtYlKOB zm!?TxPzt0i0B*fN2k*3rjfhtSW&vTMiXz+|w*I1v$)AGG91NxQV6GU>#Wa4J9lki2 zUcdLcs~%3;)um%JakloO@VF$FIKvSqvASfYb*ZTjHQl+#c$bMqC7o=L<(>(0?#g9? z<@dAm{L!@7RJciRPNXDxeV%BMph;TGy=|dlQ#(TU(BLnRg%Pi?3~cDKXC&h+^42+q z3rSU|*j0-agzW23D}xv@e~MVt&`?@DWf_8H7cE)`!_6RE*#tHbCbK#H(scq_nb$7% zzlaaLzV7z(%CV_+i<9ESZh+Gy(QdS5B$s&E(9U_^gMf~Zkg!akqQMBxNg6czw(p$Z z#G1w3e?V%C6z0p7nn3bL=~A6@7EVhxj(5*aTwhF^k?UlwM1jsMJ>bqN2df==XIasa z2hO0lW9RQ%0D*q|%tuoQD7})&9@)9|B7Xk_HmoVD8BXpj&i^48KO9*?tFff?duzzU zJcr13oOYiHs@(d?=$kc)$C9%of%_^-44X=!&vH_oaXCL8HCKo{OaVBQk4&!d(sLmZ z261Yb3T++ShK-@+vs!(Bg1IdpsBm)A6v3278$Rqbd8Jo?W=k{Q41_T9gu5-}pmj6B z*S@fy#oH71`IIL55)DfL<{(PB$M%d5fH&SAs0v1(y0^$HDY(tH23|Cv`*!4gUv=SPkH&t@0g)}#2IiUM@ z5@^(;zbft|fg@?;DA!!R3296``a^fR>kt+ne+l)i3zx2QR9n2nz`aW&h2*F}{PHuX zZNdyA@uG4$u4{kQE}soj-RRoh=4roaDji6k4&!tc>YD_vF_|xCxc*l!b%&Oj zBny3vX*JhQ)vX=2j`inxwymyeVqr%qHI5F>Afi}0J+WmeBL_(b%y?JNv{}jOUCt<% zSCl3vbg`UqE3vheez8_QpsVJr*nQwRUw?a78W)~vO`(5A@fKjkOB=enj8pv#-er`c;L}$cmciwiQ6A`0q+DaaJuSq8~L-pyDAq2 zfF0E#-1E#bgi!BH#Xd*&8MQgz+DQbYv%Vly6P{kk$&vu~Q#zg!1%u`KCICLWaXdCL z$FMwu9~ibgywGj}>YnDVOb@vT{6T>OojcRAxi`bJz<2IYI>PKFU@fLJT);q@AjHEL z&-AqC-Gb$VwqL&ioh=tV)%!Xo$3dncY??XR8~Q>TNW{9GmNt=)gNi;doRG>Y`K%+5 zH6>JP0SO?cQ8>F>^|~emGEh1!p-5j=XaKQwC!p~L%FjQ_ROZ5SG=VG<{R7yJe^XxH ze>R~;M_V4F2rczrD%%PBXvw8eGKJRme88vq7kv@-7w(oZ;uM25RcCl7&z6~a+w2&* zBbTF&77FFRWrmT#SYIIJS!KrO8eQMpR73au@c==i(_Laof}$|`z;4tdnV_1N9r-n|}wTNE3w`V@33%#FxC6eb|5dVapPWSf9l>Xo}*X*)l zv7+lK--4(?frbi~;KmMCB?RLK-s;9T%PdwF$#}ZIN;%3=L7KV(U*YX`k&mHp-@iV| zbgS25^G<7+7EBIgK(StrQ@jyA2t%?F5S6D7;*n3BeZ#qU#ek54Nw- zzSrKf$f(9lc6WFEtSl8e#{UfgOnEW1Q~^X&Dwwqxl|d)$$S|dh6YfoXrHW^WBo_x*>3+6Yoz%2utoOFG6GzMrodBUxW%s!TPhE*hMlC0K04JTRsp@bXTkK zlM(B)UMn%253z?-(vX$s%HJmV<|}P^9w%*?(72+*oCsfGllYT|Fc4M|&J=Etg&%u$ zX)w_~i$@^zXVETOs%Rzy_Wrj_X5$m2Ugu z1`}{`KKS~&H~SQ;8MUrW3rbd91OWD4rj zKZMbt2`8AI57CQdPXyVi87g+RRp1dqn9-J3Lc``iNlsH!dUk zY+4zNr_0lT_5n^LCqsdldVQWM7=Xk}ya+A6QyKK+*E&JwRa!`eAh;L3znErce;F6- zbF%DL^s%INrVcDDv{POqU$BFmaJWm~vuyc|V|l-jdQ8-L$adyaPrs+}q`&pLwR<8w z1ZQO#;;3fywa4GlfOCAIpE*1lnJL66yj?5^*wDVdD|}wYkxpD}vy=%JRTBP@8li$q z_AMXGWE|uI1-0#zW~{`8OULG7-fA#30e!!yZbJ10sQ>^2twEoIWRyf)PnVA$I{eTN zpghLnL?JQ*kxM#H6F_QJpi4Gr@RyN0zbNhS-6og$foq;vwQ+{UsS4_$Lta)4LS|Eq&fXCv2|U<1`d}^+%GaGzvcZ}w zot9C~=46L1>D)ZLo2`$3;9Ui0^l146Zc1ZC=12AiKf-*&?yc$-F0)SF<_jnVrZ}*K z3WJLNE#_eWSP^;0bwa@%HgiUa!N@FGd!rPBU9=>KNa8xrykf*IMGYKDaSiEwhS#X3 z&*5JCSBL#*ip;?+A=DH{S#pZdS+L7m{$4IjJZiYc)IkYLhNHXq)1j$atA-R*s4Hul zF0*X}PwF#7FWcQdDf^>!7yjCV44X^ci3uqP$}ia6RqU8nLzZ&uD(5fB4C&=|%3;S8 zAlbJy3uKTsTo5uYgtY)IJW>&DOj0)swua|y#-1~K121}XcrIniItrVk;If0%U&{2? zgieB)DL|#+tOVC>)dMbA8P0{2hYMh#6v&@2(wLa^+r(s1l(ifE zF*H^`6P;Ig5F9#cm%wpFD@V{inX`>)dC~dAn=+c!)NQ5!q`3i5KLK1sHeHqrB7Ld1 z1=?m-E>pZ+-FUGTD5AiYgsiCSIFodIsuLlKQ2Gv0R@;0{kMyi>y~H^*Bo0mrajt;i#?Xhn=<*ga3K`+b{Ds&ki=idA%^gJLwQ|EMf;jkW zo1xco&CI;VJ+RQ!O-}d_?zowWmidUz-OI;V%w#UCE$o%#uaVXCow!HY^*-0<8h$9; z7a1%#)HKmw!ClK{t5P*;M4HtB1FR?Z%z3E2a(6ZontxC>CV0=V&nl^$0CNtF;f(3a z1^pPsl4CBNYD$0|5CkC(xhG|T?AvNqaN-{_;j<@04)(U+K0!K5Fqi-U0y6=hqG=QV znLnw1$`COnow#y5X$rW(z`oQ|zm|WhhtEL)oUh2OTfr;@UqqWc(3dg?gO2fT(ri#hkQE;*&e8O5_^7y_8aqG)9#5leCBDl?vbNza$bj4k3}Qj9W% zSmo*-5r-W92GkEgZ(M^3q=lZAtYLRJ6WQ%au`Gm{mP})WNC0Y_>G^RcphYb`2~FE{ zO<9>Oo<-Dp1nd&+e#a)Xe5%O2nM9w3=ZO8$K>auUm(5ojjBpc}{zinynk2D0Z&QcN zcHhh(;x7KCCSJp?d{Wg)@~+Xkz+a+SYI;7^L&k1WWc|>@zPuKlnt9(GJ#jYI2H-Ta z^0W%T0*UuF;6Z#!;_MO)0U0QEn%xOLcQ~QEn?Ek?daKQf=Q~<8eL9BtzaZQ1>5kqF z*}wv^Pj<9)LO3N#(CtYQPrQGVoY5^tHx|av4lrZ+W=4cGZ^_Q-lVM|-eKKGUVT5WV zf9JlqP*de^SRb+ThWbVQm$df@f?M*Oi zFFDB0MSaN?We^B1Qn(iXq%u6#f0^6ha$@zLKvEufRgIy~@imt&UcazkH+F;!4nAck z1cX~ET9WI_HJ!Y1uNcTx)i0kEN`_?3o2h%a74YIIysyK9Zx60uPd zNT^uh#q#yUYZ>uwMo@xR0Y8(E1n7mxVicC@l+AT1F2Yc$oA6+SNc+9T*Vf1!w>Yh}j+3?5pnCBx$v|k< z-nzd94>g6w1?tSd zrl9@a)ZPQBkI8NN!Xmz!8^)$x(o~UH6}}Eu!Er592zKD@wzdt%f*jg+k=`xj+*u>3 zCDu-Nh%^WAqorUZBf|6x_3CJPK%7Sy!dm#Eiv7zMgaP@j zxu61p>xITNNFk@X7swti?CuD|0POjc))MXrfB=in-DDA;VTvO9ECZHb}}=djX2#G(>crz?8bMs}JOCnWErjDtDmRi5tCFqt{htJ4fceL=48 z6Zi2j#8JE>;o){QY!#c&{Aa{>nO2=tCw?H8PQwIbMcM|5ca?Q(464<7?PU56+S+_I zmracBG{3pz)W6h=39+RBCBLS+vgr<+sWhabMAN3_Wxb9tv(3A33Qz{JLqQ5VWb~;kLANse;{z}|V^(eq57KIXTL#zajBSuAylpcIPs{XiTYC%&C zwWyIw4%=A?OLpeEGSf;~0h}l*c0+0WKKP(z46GmEUy#VGzYrh#lIxN^Yxlx`6m2>M z8~2v>Uk>D;ehG*EHKf%3dpqOzEH(W{!P#*#?IU^+?b!(Foy3>#uK|cTANJr*yepM3 z;GjY!utS|2nTOw^w+X90=8=@%;~L-RI#Z7S5f>x%9JOGW3aK};BiHZ6s_!^qgU_DX}dPW19tw;7fHtqG{Fjc9> z9X4~ijA?6&qY$$<2vFDc58xMTAh-YwZE&>;(vI!$Bdy56we!?*r};%0!^H>i=w~e)SHC}sENI| zE?{*4Wy|5MyePWo8kvYs&iN%i;FC=Fo;p5IjQy9@aG5aY`WkB`t9z%8GPi_%NNbL zFI9BT)?cL?m2BCbzSeN`2lasWYol7)iE~JWkS`ZUh`kYiE5wd5EI+*RtRfm2j$$T$ zktu4NH0DYR9&-1lC2McLwJnC;Z3X!`C2(IxZ%|NbzF4qI@q0}=CGF)1^!@q&co7} z(RCtaggf_Ti@S&o>3Y@lsW`Zo((ZP_lG3Um5sC)Rkxr`^jkiD>cn(!d$!p_kx)_$^G^Z_FhgB?pV0*kn`W_ z&0`?LkHGVavKDrs0b7pQjDzJ(*bG(Jdya@O6|&b+yqbJz`>NzQk`?i;?Se>J*w3Wa z5a{B0`j?DVN$i(m&FX1ZVBk+(6;s{{p;Tv(--QkMwd-(IS&q-8P_LM;KFFl15}X$L z*+ELa(Z({&%t9mJ5p;znA7Gs{?EmAxYyY@J28CM_4Wl~7H=ft6``|RY2===&?6_j+ zHY)PV=XeuL5mV!*vTmamwAGbv zqv+af6hI811=N^5Bdx$SZHB1jbJ+Wo0$R&yur?-vCEsb!sp%)h$(e=8H(|Z+Y#jx> zi-HRnJXFJ$NKX#AUa5!xe)ohqDX5N!sFM;?(j!YTgd~$!k zueL8DX*ict*>x?pL0ZPRI6}+blzu{>eO4}8nvFav2NGW!_^Kz?)?aZ7tnbDxC1|g+ z*hVG@VnlkNk4gl-HHL17fDYnQulU$gMF}c8XA-dTwAL?cp+s01zQ0y~g7_Kz+JcsN z)3Ir8t~2A+lfA}t>n=+WkU6>Z3DVBHS^)5`Usg3M5Xeyh>ZR$~M7Qzagy6arD3gux z(QQa%L-(gTp1JLU3sOv$>~-KR8w_2H|M+bd6#p+VG4uG6swWo20*b{)kh#K7(?5a&x9`EK*v5D@0 z|6ZXuzuE%{s9D;PaFv zJu#dwp8OwBpgK|it7f|QO(>0iV5(pwBxTr?c6!=`Ldqj8c!r~)xc-3E00 zvm;!m2~Gao>fQp$pd5EQZ{av`V{@CM6sHEX3}v}-tyxi;-}Kwllmr)|d%vHeB+rAkJ&{^tqg) z0-u0a0W*EtZbi}W2Y4M%30>7{CWW-mDqCIlPidr1;>w94Z53)2t9cFy0tv8C=}et^4SRYCfB~KpkjEl1|)TNUN&~$JcuLo++@`>qGtw)+Xyy?XvR@ z8Zc3pTII|7GKR0S-tYJdj=u7q?0YfeeGh8Pd|3nHq`fC$N#;uW7yHxAAkjpigLvZCyn$xXKfg``Xn zgz&6iI#aJsFKXrQ@j-^8qA{AD-<3HG9>Zo0z#ad)9n5!tnxE&g)55ZjXvmhps$p$2@l>xy!@9Vb+fj3re8q9d6EKwJc*%lyY1@LJPkCK0Sn^06| zX!OB(1@*jNOCzLBc*|-t!ro^+o@eDjxeTKYulZ+2VPp-dT0=DkLNM>LV0R7Iq)3`B zKl$2N{3y@L=7hXgBKWpQG#n}oeOb5-M|^>r1J%Pu(Z`*<8yv4Mp5H#qoVGEm`$Y%o zl=oV+=f$uNIaY(#svGRpg~7ffw^ylS$xA(USs=?4}x9X4jFo8j%am1L+{NniuqBcbR}-MdY3gy%JoziKSP% zg+W3MC(SG0P=qvu;7~D2ga(X$0@6ry=#-J{1&uxRqJ-D-_3dMD9)d7ZLnh3MNJ8oR zPcMao($jAEAQ;_<-`;OBWhxXcvQ;#xF9B~^>$hkG`ebP*i~5*E<0JM4GvlNhvNLWx zDa&8jpcv$e%?MN71s|h6X|g+q_q^vk@_Ph_!Ti_fZ<6p< z*qPa=4ezVj&LagnozUj*p+7F_!45SFiZt8FUNKBw1DxO$8fHzN_G>T#L|g#3_T0EQ z(PQegsL`{a@6Ee!AV<*H^U->oDod_LKxP0A;U&^@3)Ig-M?<#I^|3RS56ntc`l>EE zF(#NIcS;V|Ky%k}EcbBPqu(|vP|Q4F7In8av0unXfeGWBFtEH7?Oxvy`8S03j%L)2J@A2O>w+Q^OzSL>_f7YQHhzx z^U^fF-4aT}O($=0J+0;U`K2;cB@{Q#a&SO{9_JaBt<{9iEJQMXwvzh0WGnw7sO|Cw zG^gXS9}PcuNp%}f?s4~_k()XnBb9@?!X^T4tdB-0i3-<803LSMalzaFYs4X7Den$f zwM>HlsiA<{b#UiEsq$KP&vs(7mBCuvDx?8(kn?81~?XPoe5d~AVleEI$&VVWN z_Q>z?Y5Y4hdr4B6fJ{Y0ZMkv(YEI4P=Zw~OBUVB^`9{C1*RM6@7A|g0#l^HoihI9% zv8s%2(N<<5WcqX!sNcGbxP^#7GbNrCmyB9?_j;&)!A-9rW6nfdq~FzoiZGd7_-F^~ z1f|`yD+`M|`Q>mf`#?ynPF`P3pDiaJfWz(j#7b;6PFRmZxUOx2MK?o}aM8(x#9hOtoR`iQK<0_s}pgW)pH+^$p5%O^xOFa&}!5Fr|r<@0?cngx91(C+kal?VIx|hQ%@{scJMJIgT`)GJ?_McQ*EZZiCXJFs zBrwzK+&&nkx2GG+cb_JOW(aQMx7+{qzUxUM9wLJG`!blf6-=2iUmVj8{qaT{_*P*>6H&m1se~&OsK3 zHXLRt|6x)UsinYvWd};gF;b->VJ1xjNBbIQCbH{)E2&)t)Z;)$&Zf;@`>m2A-|6@@(QLSwqqR*AW=*3t{t#tI=*lq_}m;R-^{N za2Sf|Y&-)4VR?o43*aW;^t|h~of>(71+|T`xm;26t^yB%1IW?*IsNuj@>3cyD#~B2 z@b>~zj)(&WG9P9J#TF_W)iX!3l%xF-J?_b#HXP0u!N4_qZfGV3Eh_jkuX4Wnq`1No z)-5^ZKjGA&y2_BF#S@-L>7T)5mLNqza@R53k`kuJOzK4X)qBw-qm3%}fTA9wD8brudDg!vI+Qw6x-IjkC9BaI9Y&{NI@{*dBcpmbbsz8KLI{lo7qz~adm>?%1O3h4O)#MoCcDM z_7ia(i(>E)D&_I2YPIc1L!cES3d%1q&J9k3T;bhwL}*fqCL#V8JGl9Jpi8azQh?p? zz`?-BVtNgfY2dyHy4wQs_zA~k0KyU~yL7Iu)5P$Wkvhy9I#B&aYc$cmK2DgP)>j{7 z=}-}Efn1cpKwN!o|_Ctb* z)h`&(Y_0{EZ%-7uSP2{ZO6w4H)rLDJEp7c|5wj7kp{=>f^*ZTQSNOM6C9oFye=AEN z{hpaZyc!JwJ+gRjxk%#cttMM`xyg+#QzibFOS>JwAvUCP2_x@kR}x~I|TSoe*2VFNHT~GBnw!rE7k0>;!jaY$5P-guPX^2km~){x zsYJ9-xEjHbhRv7!P1Ojko#ycIIAdpD4s6YVk{LbZx6n)2^5Db|`{#R>&6L~8`_wpE zjEPZl%ZEblbc#aH`yyB1IKp(C1lc$Yz$;}uYJ@Z*uq*)BAKwusW3H^6YOJR3?rjmu zqd_qNVwyHN*PvsuV8^d#z)6k#J=~%a76hgafz^$k`m+YCTY~BFJ{W8JPjNi0eZ*K_ z2icdr&qp}G2nXr+2Hbsd(ONi```Lt@8+XcDUHyGgoeb^dk4)$uKL{1?%MfXwE}^P&FhB}jY{!P83{pP3GDO(Y`PVhG^)A+%t04} zXpfI?c+?DT;DLMDgN?qh-Vv+4@@9~-9yILmW)?W(giqoLOEScu-a%7>S9bbQ0Isy}N2iwRY-+cL^Lh%i7aN;bS)UbzC{FcLh=Ys|x98hLg zGbVsVscBu!O(P7Jmp|bjZb%i0lQ5#W|3*K1D{BvkLQN~VS%E1A`B(pjQve% zzprdmU?!--gIS^u)kHXgd zk3&V0!YA`AMqmw5O_Erq*c(?pkzmUCct}*wE7l$e@gn|uioXG9uUD;2Q%u{4f(*# z$~qWRM4qxPDgP=LBoe;-PV(Y@&y&dyKsssVc}A-g5^icugLZ&9sA+Hbb8_Wknn`r4 zO51O`4`YsdIu zY*Y~H`_IDg9kDq!4O#?ad{wM8>?w^INu z-@%}H^@63bjJj|nK`M`%eRQhkuJAh0zAXsd-GfjpXFecMrEc>1&?b_>HvsoKR9-7- zBwtlDZ1H_kwTcE?(2&J3^DF9=@g$=w75b(u*8$J)+m1KhpQ1lw6tt<3x!H#)Wld7h zBXI?7rs0DFx5AmET&`tB`O|wCHPybJxAZ@Aw?pb`>S{PB-ZPy|g$rFbjegdm!n2x` z&~Y7;heGjyPtve!yeMLD2T;=lhk$r?@LD;2IZ!@g`Vx zd`r z0z9Jl^PS||g5~!OoEkXwsZcO!)AjPD@DY*Fa24ra-6a^NpH75nXIV$knrM+ljkQ6h z)MMCLtD@GoFI+~ZWjw&DPX)hG*|%hqD(p3Hd8YUPp)e)5^3TInDM77tlSsmz>(R2p zXt6+Zj)GI+`K05GEak#vkMM9h2Q_bma<5yq&*-jqgC_Up9q@(_$3)D7t%|+j8n*IW7Q>8c?bEEqz7b{2VQBT;0=hp`veFs?& zKQ$|Tu)&YOSeAdUm$XN=5m*@cbHvbhh;?+|gaR@}ZCR9cB{L)|fK~F&p6Diu&XwbW zRB)4E{bvACsg`1)lI(f7c4KdrlbDR9A0@-4J0%@l8t6LLFb+ioQUE%o)cEd}J%w%; zke%?v?fN&j1AAmqu4#>ZP{U%rS;a;xaTw8)KFjEO0`uv4+id-qJxdmYJFB z#}raP{S4h-a0J5-B97)IBLnRt#D5NZj{6`I^1vJjrPjNw2F_LO&rHnrQdZNt1iL(h z6apl|?;9;G40WC9EY$1nyi?p~(kbV`s~+>D<)A9oJlbR1VlJPjCP5!@WMBrd4k7zF zmsw@tVpzVw&8S$tfm3}P-05#KUJ8{*rDweA!VJE~^a@OJKqt%vd+yVH5nzbNU*4r2 zRcyfx$5#u>pBZ$O6oOz%;=-Sb`n-n;CJCA!g03Z+D<)B5hg}@_Z;+6NX_(L7;tAmZ z3`s=FQePTql+#s3=nuweO%1X*xPxaDN%iZcB^@EQnAp+jKsQGYU^@4tFP z{at4_6NEVZ>^|a(yFQPgF%U+Lo|49fk59I;sPK6>_uSZB>!rF7cW5`!cZ9aXAng3*J+m*bI(1zR=M_Rb zOjWQ5_7RXBLT!4TC!1h*dU;0EuS+?NRVY#&zkvSq*3T;PfY&d{(l5sMjj$&-VzU;* zlvD?M)ov62!sT3HX_LHB)kYqWMYs!_hV{7KhMPE`GR_4-Fgoa9%h2#FhUs<_1RzI? z$&~$_ydKpXq1PYNA+9liLF96G zTzAECptMvUm7HaUy>ViU#wfef;}coSCv5FgxWE&}f zeVMkx2+D-9YzL=pu_RI;Y$_4{HMlb&Lqu40JK2eEdNl$S*2GW&Q742W)(FaO-(OvZ z2+ftGc;o$(a<9~K8eh;?Mq?G^q^a2Z3wBfrQkgKd#SXo+D$0D*M>{ZoTT&< z#&|hjoZ-LROU-u34m(QIGqc@iWM~NkCV!b{Y?FOwf=-jBAiwE{O)q}~SoG4ruY1@K z#U#B&i%C*OR6FxXAJfu2s!(%q=$iU|?8FtWdb8h>FsQ62RpxT^0vH}K6<5c(i#Y!- zxx3Vp_7Q}2#tCIkHXH_EJGpOvj#dqv^=NWo-8FZ@+BJaOYX-On0+Y0;XJ1Jrhy6|q zJvxqr(C4EwES;!L!ARFH^3b{lH7-=iXbRP1)F4+A7RwkjGk{VT68Gs!C1Jik@|YJz zF1AI-ALo8l*P?_cZ2bbXiio+A@O9MRv_+&goisj0MTeg1h!4Rh#B?FmW2-nPJg!lC zANIm5szARd3~k0-QO;#=%MlvNI;1jKem};5ZG3onlJS0f@!0A(3y5nC4(d)9^D!Sc zBlRk<;^V_>pqz#*8wHJHEi41oTNv!@<}`6A1)wy>9mWfTJK_+0FQBDwrQ8DTIv^s_ z`G<=Mo~o(fdi4NSIt8TbU4ZoR@DecG^Nzcb&>5R*8j<8$tzW&$+KFD1|3vYjqYI|oG|THchUWVMeA>=?gp08m#~RPpgR2?=5^R$gB-c>(=^?bcbtalx+gh>>LPu9)F^Nx9zDYO|qIbd>R47JISqaYp)WLn)n3aD@tq=Bf1Sit}5t^`dTx;4dssrK~)Y{;Jw1JXbKR*>l>7 z9#|Rj38k6l@%-H%h$gmN>RnK|zoH12n&zE?XMSYkP22P-9|Jrx25hhhl6= zR?9Nsmonhp&cx#f#H|K@+8B2oWj|Gcx3d@8_9=TNVQzEoSC3no2Z3wzH%-<-WK39e z&^Fba29Q3>A5ro2dKsciK%p3l)Ti97V#HY-&PhrC8;D_POh5{K&G9<_ZM+%_!5&5E z=a^uuEI_U24si^;VK(b4ny zH%xPVtYD!1h>dW9472x|xERY7q^~ZJ$ag4Z*a$UD7?TTw2YBhto@M8SE2QLT0e!2? ze%Qs&bsQt$-Ei)Jd0f@!jz&O!{g!g|fowCi3Cff5gg3L8ifmdbVc9J9hNLPxslBqP zYk%pa*$;ONvHc}2ZD8+mq(F|whR^R&qIz$ZhoDLoNK#&!XJt++irucMtCEDzWW4SoFLG8P?vQuHlaC@Ua+C9=9o$+jo_VRQ+Z< zgc+!yF0Ays71^x!Z~+@07%3=<*{k~{0;i{`fIPQKhye1s5I5#5R78T6mu7W^$s0S~ zlZYe2Y9I*7j}Rn)%;DbU;`5Nc|4u#{h&-7mrpSKcl@L^9j+9BqctXd+(b@Bv!s2QU z;6$D}N@4d10W{O}<&C}*r+zkwMjsC}fu8ZYkIMK-p&umbn7Azh3efTG6P_DmQ@0cs zIb3nfi6m+YFba1}kE;_A``GBnUX|P}9Gz8mnXnZ@Vo%A)xu>$DV(!4G2#P~;ifK;r z-3({6PV&3XZ|unNLum*%EC#)wGym(T5$V-=Y&j~0C!){X;slu^(hIKM1{tMvetv~4 z`c(f&cMoJ3GCk{|&uE`rh+8~bz{MACN!jj|;|R4}9nYkwT%SF)a1beCk8JI&sMklQQ1LfCSieCMs9>zbL9nksM)$^=(jfXo|9<@ zZ*k&y1Cosr<=oR0UBUmJiWUgYDV-g<%AI=0Zkck^fQ=6|Sk){a?@ zt>JND5Epu9rKB&YN~h7 zi%=Jx-+uZQ_Fk5r52<|a$;HpmHCq_|@;(Cq_84XoS!}ZE+K?d`PFHb6I|w-xdRuVO ze)$*inH1-w?2o$k4yO*!3eQQM#%qn>jh&3pEpaI`~>~sPxL!zd5|1jH?=*Xd7fEoYFikzXw6LA3N zy2MCwqn8He0~I%6y%!D&L*INL;6|Li&v=0qblQ;$5N3vb*i`0AB1_v_jvE(W zSO{dRnPXeMII&L3TFtY4v4KT?-y7mKgd1_9ooL}Y=d&Fl?(POt4h4k#``3w=;+&_X zj_H@^W?WnI8V@3ZXb`!`T0buiQ`?@3m{heU$0IvW3rAT4pJX`X)!aDBdMx<+nDHK4Iqh?Bb z>F@QzVS7^)zE$oIbvaO5+NQ`=BGu;rwlW@HQM-^=&V!pz?C}%HdszahZJdVtoHFZU zL$rRbdhWvn;C7(Pm$Vv+?IA%NbyA+=p7y608AuQh7v@^dRTiEP`qM#Ky{Aud-x%`9 zh(g_Q`8PX@vZhpE_egwI#AlPllyrF?IHFu4DOldho^g!95e_rZ0xmYWLAdG}sFIMe;BbB_ddBn-4;E&Kg66%e-Ox-xPy zPsK;Ykm*LUgbBufxLG!Aw$}%!#!qQ^j|GJ(Q?gz7nyYkkR}c3S{o9MdY;t$}F|oXt za#fkttz8lvE5IMTwt!ou=VYt?BTy+Y!RN!d^F~3lITkvh!VoT~O1flZmxy@ARxRX(MiE{2X86LkTBj`zoraHt|gZOT(vc^`)w%4egqX+KX3t%g&;*X;-tt1i@c z%i|f;oKoyUtT(l|90d1)bwA9MgidWtUUVW}#q9hbTc`-w@L|?BTam&uUe64|5G>>^ z^ilkd#bf-H=aBZnTLvB-gaZTs&5)9IDwb&Kp0O~2?HO?zNxw~g+ce&Ds+g(OW*`tA zwNlv~vKh-kD{md8`x>le+d#_vD)@&vmK8q?hH5hGD*|V*8+qN8jMXh9Ee{7RbC(PNm~~Je%JXERE?vj2 z!@7wU!Lr%L5eJdJk4z7O7z!iW99(mDeO7!so{!NO18P-J7p33~1Z5Xc9ZQd=QLhw_ zKj{a)GFm6cmggo#7aD^2;zK>-{iPHVJq2<>gy*)C;Or*B)tZWKg73^vRK*;|qjIA^ z3mknSa=E8iSszU%+mO_rk-@o*GQ*@YlT?W-LJ38GPp>(N1t^!u!+c*lzhU`7UZ2;D zGyUfk*Z>V#YVZd{so-eBtceM^q)aKPH+IEKkiu~fCYoY(A7v~RqSmJA4w|aH4i(6X zw-7or1QtXyEDB#m_y2NYmro%uvqSy6MVXq`uSTXjMFa`@spnDS+4WY>Y>9(^6#x53 zUZaH=%V;u&92>EGg0cMXK+3z^)58>%V9bDBo=9=d9E5NAaD=lTjhKgzsd-{{9sr*W zmw%~m>2d=B_UhL349>HfW+&xN&TV2UAqC|0H`#oMSE51p3+yq%;dG;MJe%FzM4>fPY`m}d)(3QP9yo3-{47|c7Db(K+ag@*7?HoM}T&;aQ-O_k@#d zQ{05wdqYUgVnWFW*#H42vO=H$5n+v4qX+6n4d!2gk6acgFUu&%`hl4%_wN5z!wGn;}D7Dp+vPP7naB}bV zY_hl*RUfTho0lK5Cx~y&cj#}@$_M%|r$A>DZFS0Q-B^#d0mvUB&&$KsV0B&X+l{4s z2eWjPPH}~$dz?zAO$Z5A9^smJG1G*Pi=JY(?GGcgW<`f<8G7?K#1z~G*kXzMKVX?c2x=S#43+1d_(LQ0OTyM#y`nuJ)z{ zcqqiWv(bKGAAf;yj@{xe?h4Me_pzAb(NsPq;QQ<%#i{J#06hSw=m-$byo6N>-c(B@o&)aprbzl_ON?74(4K+as@g?kX zUG%SuKx3^-fWY>7gfPS9Zq)+4OCH$cUSS}Vd&22ON8q$u>E4u*-t@If(#%)7l^uO) zZU-sZ)+tm1ne7nvh5&^i< zn1G4TetgB~806VPbjw6Qd8J!7tlc7@MpB7#qZ7tK>1&qH2oITesf&{rHA6g$kBM`T zb#ssPELW343r7X{Kk&t;a4{PwJ=Y1Wg(8eT>&^BpbSIj;pJ%-drdCQ-j$u+Iny0DfiJ4TC)f%F2t4Mkz7s+rgV9O8E z9G|@tF#X3i>p&y6Jaa#5Q|KqA?x^F$-*34YXDQ`+!Ox}?!t);cN%CPes85HX#$*})_vD@$tkBQ zK#Ks}Ypvl(O}i$GGj)v2L(f)Lt(@cMKf7%w38PnNuf^wMTz0xstK~`?oX>Z1-a-+s zxb6Q+@dgLJF)9-a_=zhVE!z^?-?KQnG+R7BShy+oM=SCnJJ{6c+ZX@7owk(Y`(!X0 za0y>#GapO(v3C{S^vOIktwulo&T0i4ekZy-!XWxmJio!Gg*AyD%5hZie|zesjZ`dQ zRQbZIqbf?V_Vd@(lr>6)RA&zRy!IYi$0tvqf1)V4Mng6M4il={+_j?^YGv=SSH3ao zl~Vt#?peU&@``N|St&6q@iW(MGYdXQ;tXtf z@k`Ky=GTBY7RLkGeq&n&=!R(k(aOMtY$Iv#o|)sIcE$2o5qiI^y`udJfDh`TB50}& z#pOP)A#f|2`H(r7wB?;7g$H+cd<(41v9!ngsgb$*#pIlG$uKrD{;tK06GCo;9H8g5 z+a2RlY0$YLqeoeo%RZH|B~hnx#5D(PJU}nmZB=mHi>Jw$hm6P%V_}i#4U18l#5I44|7(%giq(#{EC$V{YVP5aBil0tkMAyU{@T#xgBVu?eAA$l2&FO3MLDhLaR z=Zgd^HMlC10f+7*h=}~7%c_qL=7zoEn1G4aIyI|Cmc6r6jJAwq{HO;?_*4B_Zga}$ zgog*?uX(j%4GY*)s2-lE0;v{i@t7b_cuMDSU5rAo`A-i|hIFSX|1U;D5!@dnff1oP zQ1?#w`{aP2Y=IkU2q!tP@s==^SI#pt&B}HI-o8rFK<=9OSkkMqNsMJwRUUeqDee!0Gm&#kZUmOlJ zX+Cl@Xb)5I^2Y(`Km;u3A8O>|9z{{byzM*0;R$izG);LlX~ZI8UNjkv-enQ1F3&$0 zoV!M+@@7<5?&)M=R!38nNJWmnCYSO4%v$a*QK)Ha)b!k|bT_>Ejx7Ms{7us_-l zMeR^@!vqbh43U$EiR{T;mT@G*OwiPN1O690LEllPK2m_G+TwX`$D6Ex^a5ej4ybKB zh4Kc>Lm+T_96TUm?8yvw;tbVndJ*%lb4Q#Ga8U|*HsF$@40#5nsW3;`^hUc#fZuMo zy#FzMgt=k0J!K+o%?35YcZ>6HxcEK%sxwS6BX?L7%Deya9pk}Jdma#E=Y4X%c=o5MCWQ|`u`K*TrM&8z0{xlzbk$^oo?U8kDE z$l!_zQyw0G3AO}}B2i>yOQH$w_-CWOX?Dd9BbbXB6U3FSFW>RrgIb?T|1 z_;rlora=8Ya2K^NmJx|8!s4vB?tqH`g78!q5=&1`CtjnfhBUF%b78`Jf$v~Gz0GY+ z@V4_(`wJE%K$LpE{R92fDabBujxp6PaiyC;_i1G4)wWe*DvR)(#gijKl*4iEOz%q_ za@TMYe?2GQyj|@J5`xByTwtI3o~!yEc+r4tPaaH@lz*jIl}trpbP443zH$CbK=|yJ zM*>A|LHMOtMhPVPKS7w=TYuQ%3KW+i69fQE?x7iM4#}%#=Jzc6;eh8A3!+k{4w(9 zXx>+N4J1p!x9aGmWI?zab&T-}km5i8j|Og~s|QT4!Ec5qtv6-$F$D6K zRn1+e{Ji((P9-=sUz=5h30+s~)%Sm7h!e%tu|c=ND8SuSK5gx1{^z^9u0uUH11ZX) zv?Q`?+o-)TE;dh6CIl z>w2UD8GpDqoZO1A=z zn?h7_^o=`}w5EPZ=#<7;d-*W%JkN=m`g;r{%atXHeBu%@U>-(uexYVHS3HRxnS=d> zsY<>MP{@xfOc7>vgo#_Ns)(2A)8bCJY|FRM2ZH~p8a z!6fBVDjkyqnp3ip-#Nu@A509zLU|kMTsvCb@A0VT9?6B6A$(`YPoQs+2CB^wtWsjb zOqy0(^IUg}9u)P(geSnO^?H-!ZA}hRpf(YelNAaqEmM-(*a6>f{u~&>h6`k{pdH`kE#s$yQRFI;x(EnLn}XeX%E|ip$e?0R>#__XrA%XiRHyJ2jVBlUo;87Cqol}`)*SagqNDzXRXsjr~e_GNpDy~Tx zK!=;z<)i*ZnQg53z1GHWlOzEuP3gH&c|PVXD25PlQ_Jv8l9a z_`nbiwbQ zcOJ0)rb+*%S1w4c(sPh0u_lhA4Sa5RYIXE2fcnZ@$c>ul=^!;e2CrLnSNCh&-71$j z*M3S|Utf?YJCX7H;$*%pR}ZUT0zOSm!=;KI9!vj<;e@jy4^KY7C6)_H|BKk{<$6a| zBqb)#^Q545cFKuWtEYia0PNa^CKHu|P7Rq6|Dpd)B5v5e-T_tV+1Gx&XR;*k|RUG)Q28M&8Bj2T?NtlJ&{sl3~=N7X3lLQ_l>T!565;{=%dScnMi7 z;{w72C=%5x)+S52(s?Tc{WMzoyCcj1DIov=4HrS0OHJVq@?|grC;#ME3D6l;ch^Sd zPv{BqWPa%7k4lj*oL1zb?d2D!bt;~b)rb0{MOtr((OXcrFDT*L2tKiZn&w{{CF1uL ziKP>Bc47_O0o5hF94Vz$ z*GQ`}{z}*=BBA#iN2Z_lg>ifQ^CY0=zJ@%NGs6gi2UjwYi&e5WH&4rjBt&=m+dKpo zj$A7+Z9Nif&au+UENPOr_&Z8+kglwylA&f8$K0RwLs5Db`48XHF=o{hYV2h*$xH8i zo%i9#5iwJo;FJqh){F@C|6JEIPS}5JCsL=XSUcq2aflvq?4-PFt%KCVHV#-E><72)yk{uLf%)@jfjNT~6 z9}PSdP&@zbQ0GY*-PQ;7Z!jV4Lm@7Si_l9BVx_AiDCzfFWt1=&GtYc z@1b2Hfb}r}8fKW^ZIHC#sZ>nrIYth)f&iv*XCeOv7?Yg5pti81+YWy;WG3s0w`}q! zgQMwkUL1B)S5OXZk%)|&(`HM83fI8lHhOVw)}0O|J{d0n>*|sVxcBZIH*c5-HiS2* zIO$yaNwsdyZ@#4>|Fmk-uKX_N8{Zrg(hNW^oivBGgj~qchx-5Mx<2`Nao-$B@U%hb z5&6i%W}r`kN(lm>Y{k$*^1cJC6(XYvzWTIWP0!pzEBdSDZ*^V3+6?SU>Hqv5GoUq& zT@x6T)jrv7hW8nRnR~4|l0^-GRl><^hf`FpkZ|W-kDF?=8Tnr9qH&Yi=HC5@kZf6k zvPKZquvPF?V%lKt;7EA32Z}xyL`I8Xa{V;3PV=LP;~@*@%5qO0Enpqty8)HgDOO(= zR;lSI8xmKX+Z*skjB;3*brio2UFh`3OmYwU-J?AY2Kv*F8p{*YI8fIBMccjn-E<%V z45GqN!CqcY@UCDDM)Pa#$2LUona-3%{40n-Pc6@tE; zK`{$!Q-pZdFCD>W7nJU^!ek?${0&4yAfRvLk#NHz;y?t^{-QH$Z10$#8#gKDyleoS zckopRo&rOUxQ*mfeiXfLlCsn9=6RR-(l0D{#Sa63z|`t+xLH7ii?n|qO&A_Pv4Or% zOKQ0a?|rc}Dl_C-=9P30bOK3!u@||5$XX*XrNFDaUFfZBX<^kac ztPyyFTf~Puyqz?EIJ>7~mvILDNKS9M_WUy=RH(*_e->{hBHqL?JkVm!`yf>>pJ%L- zPy0;jo$|yqa#y|9sA1QI^Phd1zMRx{@fY`}IbFgP#S1N;)F1T${TF@sNYggvSAA_Hj^dQDs4G0}v*nHs z1x%_xmLj}dwp{)GL-{8o7(;!^K%Q<@Brw5aB=Yrb+Gd~#i*}Z_VjgD;rT+UBwlD)t zsBjU$@rbR!9B=mOLIz*5;p%(5myQ6DkUt&4HN+sxd^R_K|8%WIgo6sqI*kf;{1Uk; znx-K+`)HWvfv}LdtOLtU^oP)D#=i+A_oKC+$=c*d*;}(#+jDAA)MY@7wPEoqo8^c? zd*vm{K?w-Oxj5xL6>YyNyXgu_EpVBlJiY~mTLTZjB&K6bgZ7=iMdMmK6 z!e5CVRJo3ffbgg?!rc@$oj0Bc&t*%g0CUF?G@*|Ns*yCERRMD-rGCOiKmy4jj54<1 zyBYR?9|EBKtaKcTnWu9tgqj{05E-E8LUyL6>Sah4tt>z{E64b7n=$aiw1jPuLMP6L zSo(R@D3OIHjk|IEg1N9psBZkBn@o*&-_7>;%yZ^ovAiqc%{f|WZNmLdv|_}ld9KHb zlk7xRY9)wd_g`wYUsGt@;-<1;7iPW$I%kn9Ecb7!<{^qc1wMgi5;gVc2=DL}jMdI4 zyN*q87#D0ezRD<1DwGFXe!s9$hY~=MUV~88)+u~-qZELgPrWl}sH_!|jDZhjRN;=_ z`PqJ|B9-D5-%4&hLHni(dwn&X+%1Utsr%1wH`A8o7rIDqF3bH?Y;rplnu=I(X#58_ z+;PPGWmGg9C}h%t`y8XK_x!k?(oR~uk%Sn*>eN`KZE8#OQVR~x)-xJw%0nESswpx+ zh4#BeJWW=dj4Rv)lZA(;e=n@T7rCs{K4lAmV(%lbTFo4RoB14Rqulwy=9mzJam2;K z&wz|Rxm{U35sn->HT{EvBWN$rJrEp%JB;r&mQVud}K9J4e>c+3e0&fVDE~#iR(kn|bI=;DRgbt44gru!4)n6i=CoN`N z*=r}H(HG}V7#O1I*OZZAIjlgr2EA+esZNRnAXgHS{z@AZ^M)>K_e!O2|2w6%{F{E{U$gn5oqkipF^ z1oQ^tyv;4gnfuCl0Ml`#2M?D3iBMsPSi6Pm5D3t9e@ebc%vzAUyF4g*#BdZ9`52}f5>?gydk1^TkH3>$PfbMX1^-Z7=uGfcS zKWPzJPSu`=Fn+pk(IA1BtDhJ5_d|EJ7ajB9fFG6Tckvfueyf5bD3vxDlI?>OOXff} zO9r8h+Ngz3Y(ql3=#iAOA)S*>Y;?7&O2BmmZbH7b*JsCr-!oQ;teHVwaZE_-mJr5# zauA}{^>sVyU=hEo0FrkTvZ)UvP?;Rs8VI5f`-1e$gfKq%9N0Y>CynIsfku%ub`N+x zip1)jUqf(34Eqq3D6eD!(Ol=7%m@r((prWzAjXl`ECYA{G?6M#qey}LYhub}o77T^ z@P}juR3US^3BF)9pv5rBw(`KNnhK$JX6Nl~3pTk6o>@dW@H0_+AJr+Ww+|e>L%sS& zga)HdZwlw;a3y;mfApPks?t&A{7g^nMWa_QH8*G$m92GYtJ7OnZnj~=K;;l4cDpBS z@6VFt*-j2!G}9abIxk;}ON6WS&MQm!Z)+8UN?MlGN-F|QvJkePIt|uE`+uT5?nr#6qNC$C~{KGcmXqx<6(sL57@-)(8B0m@9v%d(dy@-mMTDJjlQspwk zhcDrDE!*i!(>)fZC|~%s^t{W=j&y@wOii(^Rv`Ei-f}&_j<4l?iTnlgc*8E1Mbt{s zIwMw#HKCJDB+K9Q>sD3~LlfTg4G{K{Xe@XPzR=ln_S`|@D8U%a^b{+HZ!C5Idm&y0 zds94ViTMas05LquKGZp!BO-<59$Y@B_TWv~01?1Fgs|qxEiyx0ZC8z%Uqb^B>Et7xoH0QKj4WEh&B3`4s zjFToFMWYMxI3~UM3M&(<1ivAHfYg$Ytay#gWv7_bk^gp zv;Y7U8bO+EP2msnWiSO56A1tOh*tY>Dhiu^Ks#Ur7Zd4q7N7PWQL4PE3b@zat$qjq zTO3B}Wh9FgqMca^y7Wd*;&zK7`)?@G?K;yPZs@kx0Hfbah`l|lz2Aowi$dRwoMdafveM;Ku#4ysG{BL_@sK~AC zH0<2H2xsCtVSQ@`2YyA2@|px8owUpui_{^0t@x}0OE|=~9x1MlJ*EsSYwmA?D#Nm3 z`fTBju*_(s588)3=il@DHy)du z86nnvIXx_`7C4?Q;Z-y~lp6I_7g$$^*7nj@+~2%qRR!am5>JRZ3!qIvQEMSXc8c-(jB~u-55{|syTmW`?d7V0+_It+`?qqRlJZ8S z#x%{BuTEwFZ#slrVJP~2p5n2++SYktkPobgCzT)US>;8FpJZLB4_c22Ri2whFW9JY z-Nf?xv+}PN#sUnh(jv3%&yh;@tJPA;`ShcHrzo{Wfw@8}SsvJ0WABhxJ>^T^V{tOG&L0k7^8nPn} z|K8$i-sr}HzlglliEI zaTVf?=_4!SLjqp9?bambF&!aWX$hL1G~7!vu#dFgiJWnqmNTcmxH>}mZ>bKZf=|~3 zn5;$nr3Wz|_bqd*!Tub*P#JWD618(>>6xluJS=OiHfx)K;Wls?TT$(MdgiOu7<;2T&2R-JeLeQRH{jmx*7wV52jN=kfdJ*D7&gOtQX{ z){}G;FD|RF@FS6WGLdfI_qf7eaKjgz7(gYv;qLVkJ-s1$g9Qc_p4{(Q{o7{v%dgi@ zgB>D!XF{*R1oNwLwS)iVG#Gf1UrL5=u;WDtkLYef!mR-yOx3P(%=GbNZVlHi54T^U zDYPt?fA%8p>b8q{ zeTH)A)#K>47jcu>_?5g=?6^wU^VKGW`?hjwxFwIG`-kX9QWR&u(j$or*AmGsc)7^g z3giaDGUQktZS~>UMXo%RUqU6P+OGIwa~YrXxI56*Iosn>2!)7`+ejVZJ)dT1g ztJ^=YZsYPOH?lrI3ca5)l^vW;k3Mh~l9sIU2*g7)PYUHroL<+7_@JZpL810_av>cq znbmZsJ3mc^f%Ep8j%A~MtPC0QQ9CvgMIRl?%(~M=EX~(qinrQebSO#z& zMUk>6S>Uf{B_fcnl>nhxyZPXe1E{KV?zvHC)jppgT+e6nEv~O91ZOZULx~srpXb90 zs_Tl=N_0f&ZA*uEJNX<*v_J7d-Pg>~Z&1lrqNWrCi{>n3eiszWa+t_?i!!Pm=t&wG z$mmbNgZA7lNRXZ77-XfS4hZ3n&Fyb{v!bgHt!3X|RvkSo zX_ph~s?O_8dP#eeQvGRYY1vkxEeC;EoKMLGw$q=cG6R}6sefloCvuCrnM=VBD+a;q z2N2a+Jrr5))DrS|sCPJLPmS;K?7`c8R~ew4pvEuVBHH6=ZUc{f=TOrU*sR}S{*v!! z%D!0Q{Hnvy8F1W0dith#TKIwLUn^qM%)a=(;1J!D;vZB8X1aBcfYT^>s6-Wt8G*N(%%tiF++Ke~6mWMFJ~_{H^P=r8P>V$yxxqyQ$LBkGs%u0QvK;kMbULpPL1FoocwvA#`ZLeVYITLDam8&MhKupouf-z20&@;GmZY; zx**>j;~MvSOgNQWBPlXqYF@}1e=#u+?^1q~aPyRyE^R+5Om5XoM+_-%T!_~iP}Oni z^A9*}MbQuoK+e>kw(K6I(m!?ANVPN01^d`I4BLyi;YU^H1u>?z3`TDw;vW?*gfDo7 zsH9*AHEae81X|e|Vf3n6!<=9rgJ!2xqhiW~FW9SKoRCd(06f*|^y6!Vn(+QtY6cGh zXH=T!cPvNs?_XaT{BNK0Sc`scFxKq`V&SSV9vu%M$ZOn=y_xTgjW3 z0qCkV{tmPQvVhi3VG?3Q|Kk9`l=L-6m53#D+cFcwy3fQ~KKy2k;wgOj7m*4>e2niQ$4!=E(!+|?+jEzCB} zO{1zhmCs6_Q9)o<7{0^IRU_yFhV3ym7=HBLUxIm*tqB!GtSs+E#`7y((B#^DD9eoS zKQ(X~`Fi2Zi*d0rZ)%p~mE*cbY5?3ABq<$4z~8LCB^j62pN7-k+rzAs2UmCIGiOV- z+5fJrPzM5r4Q*1xXU9=P$gXNT-asjbd??jPVDY@DC&)jjeJC;?!>UcYKh-Gi(5qj* zU6jp1qlSa8`>&CpXJ?c7OjiN7G@N22BE~~Tw4Fj8seJ>F9yNIV1?&3B1JR-St=KB4 zTkV_fZ3>i$ag}?58cQz5>TX!`lK@#jroX9KTg?9U`EDz`bI(_QN~a;b|Ec@;b%gxi ztarcRcUx=HlfGpANl3Gyic31Oa^pSOSC{H_iZAB)LI#?{37zqLr>ET1Ox4Jdd0u56 zVQD-wuGr}_&6;xhom$9DM^?%qrZOXrrWHj{NhD(?rGsJ$^!&@lvogv+Xnf3J@6Z&y zD`pG#yon(NU|llf`xosNsT1;*=v!bSvM||t1N|vi>Usx)Z9ZB~=%`ata#_wCAAntn z#JX(B(y#Tu83e2Eru9T{6#Rb_jkgeDdhto9DvG5qhV_^f%ldO@wk))~&1tq%?UZ0x zlpiBKB+(enpmTxR;Z&}vcMlYcakG(MjyB!&M57NXL9$c)H3`R*J{GnDH6`dw?zzV8 zI8B;U0Mz{mWNI{RWpUf&Mk^mvhE=*5wZl>@Z(!e?G}yj>||~P7x?=JwmY%{9*aM z{jR+9>E?qiXR`CUt)TPu)7>~~-KvrQR_vUl8rrNz`NEtvrs;J)rI9`PMu89&-0Ln$ zUVP?(!UoXGas)(#dVSpNKm;iAoqA+^wpxdEWkyHztQ+eIPWq;ilLQ+nsA72J`d1B7 z@bQQdI`i1iqEOmVP*hbga7DFm>d@hm|qf*n`qyZxYx^ak_gI*QBfEv1IaHFu)oL4|0j0tBW?wn1U@ zOu>lM*!M;t)ri3mN2m_=SA#a6uVA#P0UbHwohD=+R31|7VWDRXjj55@%%J8$_at^a zh5!fmK(J?QLcM-oG{bw`NTmo`62>x{+WrOw{*!pzHo~34wmX}%#^Y(vRQ4wuN==@; z2CWg*qLlDTY~oc@JNrij1|T>F`9NSiHIlbb?|BZu-?c?)BxPB9YD)=lWH(Kk#Egqa z9fIAn;>KJ{Vf4SrS7=>7>NrX?a$WpDF?y_5{uCh}&`c$3l6SqfIPe`77qVmJ`5VX7 z|MT3N6y^NRZLrIpC)vwj27@A%)8B1Ue3*w1(o^diom7m#L>Z&Kl6=#(BF*a9ok79n z*n4E43C_7zh1zD*jX=vAy{r2Ns<4%X`uy{exi`D3k);c;xN@_=k+auY7s4PhQp@R< zEtoKT>Sd}X&oCz{<#F;UM&Q9wb-?n9)1okNCL8)%(8ro2JeG5Ah&}=>dBsrv#d9Ph zo{xiSH2W@q`kKg8YJnzAvcI*&Q%b$G1+$0f{kVbhAy>w;AVh8>n)GpfjU3cPUgeab zEiTr$p+tXMZ9LUREJu>fKO}BNCd~)ghz4>&>Q1|Qh}j5TS8od1Gi7E%3?VJ1-(FOe zl4Q$=ZIYqliHC@=w7`nt91#>mp9Bx_Vr*^pGNlTM0<2rbl0h!yH}XJ4RbDM;}6 zcMI>H*JFsKJ?7xvkK`g+JnRT;E7)@x5-f3$jd(`_2cccP@oU7*ZyKsLCX9_tig|Az zqm8%Milq@7=VM6&-3#(29ckK8eQhyZO9ZHO)en)YUkzRcy{UZd4w1j<)`KVh>C$~G z_z(+O;5>t9+Jj>9bmlyN^SJfko~-@$9x`)W;dNhdt)kjqpG>3o35L0|t;fPd>dPmh zWZN3EU&griHIPyZyU6gfbYg0VL(_YxeJqivi4hCe%3vg&;VrTjUTSG zR-#Y=o&F*rT_p=U6$AM9Z89utPc}NmufM#iNxa02O_b^C*1-k4?MTk za5ccv`nLw}W3mRin3JEYdn?40?c<7aUK7{5xN5KV$DH=<%{Ql+;QHhA;($}p0&8m` zm5>|g8&%yXDHaVmV58}_yXjjYG;H&VOnrOE0?*tHv~wP%pgaMC?2k9KB|&*fKAd5? z@VEjIefzmE=Sx;6YmqFIPL*NuUdS!T?=%cPdi?oKRgvMi4VsMt-7O`QT&k0-#*`MN zuI`s`6oE&9_IaTg7fumrUQBE8r$JOTpseAIq_K-%ak%AU?x>q>0jXA4W_D6iqd0|j zX#c|;o%=mVynHas`6Or}7DRa40T`j{e$RI>4$?G~{H`d)@c}JN&#oZ>wRk%{SY`ys;HIaf4?vBy_d?Q1jYs5TvJ=ylPSw({hd)- zVs8ZT6JxrK9BaVQwus3gM9!dlxr$xYqbFlWkigC~%&aUoa?EwKVlG^o0Y!V4e#IY< z6Itb|HM-X~DHzuowzS}PvBbbV`TX&m6XRfm)B&m4-BFdP?FCzMDx(;dBKwZ5RsKGz zUXnHnNfeCL!6v;(p;3LrJO*j0p2pfOM`}^AS>B|9Q?5fd>vQnlK;wZpSA5|)MY>Ad z!+_Ps2lL%{geV!;wIemzfx#V*5gM}+af>Q(Wj(E4B zhDy$YXkgk%z`(7xSzSWdY}u#_A0QpRMR5t7#%E;5HIb8yA%m6MMhZ&6Y-HuTBIEb& z0v*=I*O4EO)UPiNDa|jiV(3W^Ou-gR$6ebeF-8u39mRf#3~z!errF>Ug?NIC=jku-s4 z&#mDC6m@Su!BTtQe1=NDv|FkZa633mN6&4GoAeIu%b~yt-wb5)3t`mW^hzFCW}qUW z>~~JDS@p*IC`UHPj}F&^2y@%crGs4>^-hvs6lL^<1ffvUlnhFnn!liKUEzV>oxLU>sX6!=It=~aLh7;{9HqT+92aC|CucVCln z>Lx@dc+Q!dbRrQkUAob47+u#ph)2QMm9+`0UP%BjF>|^C3||KU#Y|XXS-O&@jI>Om z1oA+0@Law;3V^rP{2yiOt;Q2}3YXpgJx$RNS^L{m6eK0f9@L#F@@^JJcXXcW2D7}& zg$24J*p|0!G=1}Cb7u?6Z~|-%j&S*PRsJ^Sj>WE}l>W(_`JovBM;AQG+BOm_w!|Fq zd~2R6kfD%K37K>6ciGNT|IG_d;Lqd7g$-GMM6}GbW<~d6vmvruT-~wYS{gW)J|9ck z`3aQ;dP`%00008%0iKL*PyZOhXuuTD`5VAse>(sR*2#JWf*OCDPJNAJ`4lYILPG>g#%|Fr~JE$u7*T^WZbciWXOdtAfx_o2@WO;l%TpxBn zy;oQ?!k;c1T2yLHj?d81{wG0Hh4Tf#HQrB_-Affr7n3b4@=}Of4Ou=ekNldZ+%IS* z`H%z|TZ+?_o%BvKUrF)Om5`FrBF4%5u$c218XnfRJ;ANeP^5oE3PJ9^Hz!Ge?-RMn zRrga~iFboCnE2gs|M1T)LO1iFWymY6#?lj6C=h|ryK(_;dj(!F*q7NVso8?r~m*ZUO}3XJR$iqm;@*PZpGpGSopy) zL(g^!Ro#fxVAz0;Xx-i0F(X1z6#BenydKQQP0;Hr32R0EcnDvYRt|phj;SoQll=Yg zRYHqcqM##sF!K5TN=&W0Ko1P|5z986`D_da=N?xj{2(inmjLi_(iKQIpqu*$SP#-jlJi}~wJj{Au)Qiqw_z9w2Xs{@7n7s@Pv8>Z&{OSKN zMdyh)YRuDAJzFc#UbftvnSvfXSUy>0t>qX#mjs^ugQ!rD1Tk%Vy{UcGHbPT|AjEm>Mhd@}Rw6m$(IJ+lR zumIOYst3eN~;$AbbTKh`Yt>J(&t~ znA^i?5nyv+98gff;wU=%fJUhJk|tTzJ1;pmE>@{QYH3egLq=)F_N}w`KK|4-`_d)|I2h9zUATSUa?wCRVn-fs{vtn zK&T@O>^g96?VLYivkN)qcGT|ALU)Vvr`=v;BR$xeW)bNC$vC+j*o^CTI8oZ5k0htf z(L)G+YLocJ5w89ep{NB~QqnH+HTh$wjy3#u)2D|bqTM@qn40tak z!nAbMv*-Y^LR5i9_?LLOifp~=>^HGgNmhAoi9E~8HZ688q(mq`K52}~M%A2EfLN;$ zsNMZ}3TkBhGsuz(_^NnT4Mo~h&^ag8|DsgNOZ#)EsJP^?YSxSiV=9*AR84kMODe)e zW5V+Q_;ICzNf)b1Bh>iv@#;eXns}(}q?u7h%c3RRuw2rNW4VmPafxiL8e1uRITZ~< zBMUR?u3C~u%)OY_3gR+aI1J-@Y>OT0*@dnXy}6F5{Hbtsvdm)wR>ozo396NL87mhA zFx9g)iLl!C_(1dmraZx%SVE=pSg%Mt{M_93lG9da8bqBbLpD$@I<^xno={6?PG%A+ zDS~|djV+L63`8u!y>SglKMj7f;knl*IqJk(6V`uUS9EWj4gFd<|!JrlZ z9Tr|M!k5T~#c8LQbw1b1Rz$@7lnJwyqDJHkDQAz5$1cAAjE@%EXn#_~Uy-keqo#_~jSq3y+__;4dG7 z5ixeV88l|X1z)6`$%7 z(QD=e{)FUKu54mS_4l>{JfvjiK~tsgYYb0 zQvoXZ;uI?3ZNF)Y0S8UZ(%-hd!VufRyy{~|IJ3d;5EU6+c^K-VMo8QBB;e{8;~npn zKKxB2s#$3Rogu4*Yr0GC`@%oYf!&((%QXT>}Vq0pja+^ zMZG4sEd$>a%}&Beslj;xpKq_A-7a@F62**PHD__lNkGR?J(e7wft)yilCzD}jncBS zLPXcVoo!YW;O?4vEE#3O6fhjiEs?*I{k~^q^-gonoP9RH^8C$`>L0qe@BM z;c>BM878lA!a><)WO*mi>1=Dpft$^SQ}9C8t;QC}Dl-!J$|}OnC+8+dE8!UWF0VN8 z%iE4|uvr8%Rf(fw;3opG>_xkWExl^@T|F1O&>gic-sRt9v1{ zCKP%(+FDeVpAG#3Tpm8rqUw%spnX=CP1!Z=k{9{Bj#V>pk^$WPZ^K>2FdQ@Tib&f6 zMjLZm|0|8ys7b`CF=0M|bB|(_m>VtASevuRUWA2(7>Z-Vs#x9CM=o7W4mZ+_S%^X6CX-vl2sQ`18ZO`! z>nqt3Tz4pDW48z~b@6pjJq!CmIw#B!`TpvsH0k9C2JnIE{9k}Mu2gD6bgAQ{pkJO0 z5&N`v>;Sehs%}vIUS>;8Qnp#%$6*pWSmcr}rB?CBQlS@oXWOg}81U5JL-D!# zg5XRq=2Fqgg0SN!BBKa^By$!f)S*<52Mcvl|%{5If2|K#_yP^h6| z6r|>K@?d-#ud&jvxrgYL!_;wa*J-Cbkstk1j_YNeWwiQbvi*noEU z$HY)xr9;R$l-1?ia)?XNF7&ZwYABd>evvWG#wMN$U8h|>!P5dAvDQnt59$C}_)gT8 zoLQg2ApN$Sc4_BE*BA8$?(XY;Q*eySgzOH1k*|IQXA3qDbcgLDxebUFBj&RcKn*DFgf9QN$j$p!6Q#Z`C*U>WD|cGVM-SY7 zfS^CIXJ~OF8h-S*`T&t;F11+np-?}?hpUajCNpv;oV9`Rlv_@z?R27s>J=*B zz9G~U-2yW9Dce+KusGY{zWyT5Qt&4V5$D~z&owG{X5A~V9nvpw8P#U}`f}ip@iDgH z+taIivS4&+78)SA1-Bp^%k-QD7Rf8>XNX37cS^k%7+fHx?TBSfUVQ`;mAtJM;sZwJA zA+&_8gz#Bbr+J)umTyc{)1Rt2bQ!_x*v%{1t>n^Ypg#LzNEgNj*XEO2mr6U972BS|k z_=d)i1hcE;>?@)^s{I3Km;@gkUeJ2O%xktq{sf2@eV8ie8u+~{S6(l@n94}e%_?it zWKYmP`Rxi%I?>B9r{OdNCY$V1)}np8*jH^L?xx3-{>+!G_srHJ;|T-uW-vVV3?%{c zL_H*QPDGim*wsrF)x%#vKF_@T#O6OpZ9IDh6AA~4I#m* z_su^~H^)Z z(&x5=xaSHVo9)8Z3Fp%8=_RgjHGC&W*@1L+imF8_!iQ~s`s3}CB+&sIBtK11hFjVVs{`J;(e0mm&)T+vrYGlwPP~KBIRe}PYnoJz{?#~ z%MqxzQim2?AKy-#Eqtp(_1x!V&I{Z&Y4CiJ{?#|A!NwSNKLpRB<rdfru1JJm@a9`a-SGe9Ez4YFr5&~z@9E*3!_DZl%i!3cTSF5U1wG+Ta$W>Fea% zyYh5?q+0!Ik@6Ws8l-6RTq>_9+E$6bNo=(u+yKnNHuu@&!8wBFDgAa@p)y^r^&~Qg znw&kKfkZfPfSJXNnC>SDnmWc3Yyd30BKS367r5GfVuFj^1&y>3fActPFSj-2RG!1U z7(=FJFno_78TBdtBD7BgpsyzI*?~`nc%Wl#BkK*18b>QR(}TakO&*U??85EpiffNKh3?Ns<7KW{|94~kq5KaDoascoCZ0ZNqVu@_FCo);Z# zGc28_WJPL9YZLmEmGgffkrKl>fDDAhi)s>o^|mmYM+jTeKhQ?c{7Gyxf2<#zdT&|Let&({H5-;T{LwM_jWk z9yw$5_fzjtytlxcp;Q!&Oh}YRuxNYH>85|g8;-4eP+2{$6XSPKD|okpdzs5@%-uw z=C;R5$W2T~FK$Qw6nuKpFYr$^gxMIAxzUxw8pN$n&ZnkMznTFyE^|u-nQ0FgK8Z&t zYN{6gp9tfvdUatBUhbN1gw59!8vS-fl#JB)WG{?879+_`rWd@yQ4gddEhlMYBTe`7 zr2z=`qg^FWS?5MaUCn3R_Bqxe4pfoh&V}pF?K>F~?TM64Pny38+6L)`KOJi%;PX2ZIi9JpbDh!C2)1F zZP!FS>}^Rz$ee5nrUBn`47QXoQkMpAH_SGb48~2p&S7RjIDbGQI!uVm0Nb?>oR^Rq z_!e!||1m;}rN_XLbpsQ0_5+N)>kh^&ht0Yq^1->`kCH>UO!w3RlG)wGG z0jmJb(RX+jy-|`V6s}(UAGv^aW(4~)@)kt3)z7l6k@&M24!k+N@tZG!tLi{e8BaR> zCR>me!TAF4Fi$-s*+M;BO^&22R)>|=cvQy7Z({;3`1VbkCu9I5r;S#;1S)5TJ07sB z!TkPDNas!fvl&o(FAHDfUr-!p&rKfp>RxYxv3oqAEAJ2EHsBQBSYYsX*_Fi>wg7K) z_FO|Gi=I$0#o<%w1+&>y**)4)@kFkvp-%l{TeV;vrQ(^b}^QpZ)#@qr4Dn^FeA9U=1sJ;e#LECeDF+=wf8f55*P~O_$}l_028kl>f$YBkcL zHcr<==g`==&{)Mn+j)Yijhb5l$nY98^_s8xOUh)t?QSID`Px0y!+vO7w-5o0za(IB zN(-;3D4Uqp0+lfed8^`;rlXF78G%SC;+<--7Uag;z<^u2 z=|7`&z;lQ1rrbK9{(I)dIss3vdWaZ2x$yA?Xb%@KBFfyW5iOD8U;MOlMu$E8ugknG z!TTYVY-g9#6L_8MmuWA-KfiVT>B$42MoGmSNc;wgTXJ_)I#3FH{;#?Y!o2|L~MWS`A z#gcWKt)8R?6W{dRu18jfKr>{e}nWmk})sdvaP4+3Y_h|IUepKV@ zfTgy;REUBPLyZ5K14EydQkmuD@GHqCxQOM@be0&XkUdaC0IBQR#p>9Kd6Rb?>j69TxB~*a-AJeTU+D3wmN?{o9+)}4d zCZ0@N6K0su;Rb~R#G5&QRdtbRIQl(%Cf4|zQOT<1$ur=TZFWX$8#+yJ#ER?lp-<3< z4$DQ`6XBods4l*WE=_Q8<{8gXH+M(kb~#}drh4aE0d6TsHlu!0G!uDR;oPwlFf`Y& zb3DE8Yzev`jFst@epgQUY3=bE@Hl)`9JLMSqR19I9YM6xs7{Jt7nH(0UZ8z_VlZpJ zX;5VfpLufq<%67ZC5#KT!7;f%meC&`?i=$3AyUB)04S<5H7p{+S2 z;KSusXbl2Ura;RlebKB|@DZ>mR=rS5GF{~n$hPy(VWB1@vsAI$mW)+23cn45T8o2b zhVzevnFZ`W9o~p;w5TyDO$IVwYy9uoDYaGWoLGTyCAo(aJx9459S2VWOZr@V$bj&W z8G!kWoPsqGLkX$8gXz3Zi-8y?Tf$VEk&1!;T1bj8g^jTM%Q;&9bJ;3CqC0Jg9I1NPCHwmMA|YL1RmvqVW_iPA*lAZoeO1dajufW z=@uG@?E#>yS%_TZxfZD3Cd=Jbs~;AEYqG<#1^fo(2zxw^uumSnr|&Xq@hw)qr}LQD zoD*4q$QcV9Pa8gj~7?{JKF@$nO1?`P9A{-7nY5ULe1 zn*&4xSs<62FAM0)JoWx7rgNVnK?UXks%syCCj#nk#2wdY)+UH|FR?qfHFqk$Xrvm17WR*dN=`EWfO~uZXNx8rgj~2?w&W+ z3*-!seoqH#Fh{s*m-iF;>S{K64dxd`AaLE8@A zf-mP$tM3sKuKv;zu%w9ksG-RMhM9Iy-L~S)q=856nsI|Kcvb<-F;5C2NxTOPJd}9p zP+Tw}=HR}_k7yreSym?P56g_wmy3H#H+vYNbp&9#ib`mHL^Y`vaxe_OWL(Q^kCzFa z9SG84ZcY5?|9FK0T1sRAe3?CmH`om+C6VoX#w$4+?Syo9qPfe_LU+D&E(&5>N5){N z5bVCMN{~F?wDSOhnJ*e2veeLvDTDr@LN5zu=`FqGmHlOd$X8imq(JB%JH8$TYkc6F`QQwru0(SBkA2uMiGic#7wjdtcg4Y1TBpg za0UT19%s{J09#0oJ-g1rue^h063Yd-64Yz$vJ0sDqdWnLU-K^& zXtO1A;<_$PRB9W|?eeKkUn$}EwW)@#D=5uiqd0IMPofMKW(~K-Q}v46Rv|)MRM@r- z1|(CrI_vcy(BbSt)=;hAheDV4VeLw?#{Fwhk$308+za0A3>{8kGaCf(j z0~8?0&Awxn?Dzq`Ek5LuHGs;5^jw9$%F)g0j=ug(pi(?3=edsBP?A$4-to;m4a;`q zpGqP|c<-_!%HhVg$s4D(;5S5hICOnienmKD8{Hy+6XXtT1HZ~6yP^nBunucnqOi0w z`()>54xYrL*jExF9|m7K+0|h5|hLx6S4yK>eyR|Gd(>N!*Qx1&fEH7&}p4 zbA0qj4@H#lv`p7~xSk2$mmSh9%6jG!kN>!2Nb<5as6F2dv*ZH8EnZiR|W3?rU*Jp?qEHT&j4vfNV`50vK~TS9r=%#q00rb5OQsv z$m?w6zvuCPU}((XiJ0AbH;}CWMi)8=OPr@i z#oniFo#unySNh}tSf>aliRv)_EZ8s5!;vzf#KI$Ekxvp*xBfc{*!*5)wE~ciVLs6OwEykH_OEBzE>G5 zb~~)1a01>@TF0W$-U)+kHB; zaWSg3txYjd>LT7&N!eZ5vg6Ti(`mbIzeqc83*LnK5h~Mvha(wI1jPZyfzFfQDgY#= z?jJhcShKA)^LAl%Mk^fo=lqX+>L>oOq4RxHImw7vf@z71I8roTCr&Sjs!|-FI14F` zdHLcI!~}M5mr+=H4}^L?+E1a`Xf*`xuA?e>MDrAR-}lt5#gbMKeCz)F-6gzo(RuGo zsvYH}_EASm3Vn9nA!N^(JG$H6G<~kt*!J8OOy?t|NOe1E(oe~m=B{Nd+SJBLc89(o zT#%}$QtxU}7eRP2yKN$%2suS7oz0Wtr&dVWk(?9|R|`WEIzViSf-N;@APANxPVbTN z6dc46a$BZ8(w_#N+F1fz@Yt>({g*r9S#j&BnmOC*qHyF}SPSLWUls@Xr!X);F5`4X zqujNzoGTP@$ltgVe+}o=qyi#hi@Ecxk^T~YLI^ONjOpYbcc{;lW=fH%X<{!VLGKd#T{Rmn29Lv(>dh;A z6pKGQ3045E76T$`5Sjir{Lo=1FX!xqgHJE(`dFF~*D}|xIN3=v>^P}rd_5I_Cvc)H zc)bc7A+Ct8O5wNrm`iTAzG`E<^ISMiky~%?qpFKH9joZIWU(<6%WFMd6CHxGc*$OWj2 zyJhTmDGhSBR96yAzgLiEDYD;rt}hWw6cOMiTN(dLvxc}?^SHghq#EuEv)#wjSBiEU z7uV$G$O% zorG`X5zXY2?94rE(jmdeyIOC1d9F*hMAL1kZ=Pg*G!Fx;y#Q zGv#l!62HC95miJxtHgevF4P(3m*py@Q}Dpc7wwlo8_Ay#wqo)XEx-CHEm#(PzH;^x zPHB)8>vPD@&SGTx0E_6G@Gu09QgOx%-f2mc(KDKIox|R1JQ#vy--WN)DTeW#CB@TY zL50ec+*rB88*xNJp~F^cJA=5ZhlSWqoPjTNcTC0}_hdzQvw~G0b2+@6lPzmsBjYgL z;bDp+kMlEd2D|(o6YB>{mHg=4GWe5m2p!cWlGPjU0_Qul{N zWI-}8dR$fea*{J-B`Ew9rdG~s28OZK`mKKQOy9^AGKq3NCMmU$#} zUABR)y7eWYOtuJOaYeEShfLX3^bg4cbN*oi*W|`R0Btn>}g4G zo2hi+c&sEQf?IxO-^BYpBjH#?f&Bm6_svWG{MjvJ+dI(B#l;lJhb7d`_2Tr)SJscj z7ILwsFSQzh@%kWBEYu zR!16c@{S}KR2i2_>60vit<_<&=6~) zBX>X^FKH+&{IlN3OuIWHC(`|=H8k2o-Z00Wa9f!fnl&u zHQ7P5j;D5K-NtPY7a{AnW=6ES%Xecl$|D0pI?&bC(q4_e#I`m@Q@zA75<^L}!OyJW z;a|NLVeT(m%mZy&erGW*n6G1lyt64tS3!w z3+~`dU2Hu)RFS<2y#8(G`7s+To#f`Y>hF`$fuoD{0ZOCk_~UXf~(zOR`#Vx-nrYr zV%DxtIuntXKX6?rcbfDp*!Ah{zEozO#kK^gItderM~9u*JQsc48^*dU?VWe>3gp&0 zZ5Z|UQ3=B$cvQQrlN*~4L@$6bQBoBU3$n~@PaqJ%GPm8{yS8MfD^~i$nP;Z6j&-?A ztJt(OQ@Fpwde0}75%8*Jkgc{!(Foxy!126FtRFt}aMoJ5rA@VM&ogWA-@dxdIix}? z_l4Y|vmR)78It2!VmReJ#+6Y%cbd!C-lm>@KEjRlS1nPCx9s*Q*UoCh0YHci(|B+x zPl6_-%aiC}f|(ycRWMUsh1UN)y;Jgom{pMLNal*c&sRsXT- zdi#AQ9#{Zdh_;(EeWmk*SK%Zr%btsnVjISLzodcf>ams;+tI5(Y$-sK+2<5Gdcd%0 zAEn~+vf=${72F#Q=ga?^V!?u~o{VegB9q92;0Q;+8)Qab6|W2}+lLTxzH^@I5eukU z{eQ#2vSb%Rpp#qEqbUJtpa<^1A>kC)jKm`u;Asj76W?DkrEv|~d~zXJ?H~WW6l5d> zi>(XJ+^j-+zPbA;hfqKKb2}BK{=L7uHl1$p?d`A7>X-|*Fqr&g#)_yVjcm3&Br|hN#WUEc0O(b`Q)Juz9(EOf?bpviBaR+r$f}(~o)GcAyNiEYL%;?8(%)}5d#V{g)k{mGB0CvHl)&^#t zOL5sX%I}`Boa?=Bkv0IUW2!MyKdYAdf=K$57?cR$$w}vx@DTd{kfPicZK>s4+7==- z)+l0zODy3}B6e-QR9`qlr~G6H?Mo+Rr#+RMH<~I3uW!}AB*AySIo;T)g8kw|`&Tuo z@>R*X)YpN;_$>H001CB8+E}Up-Kt$?Ck9J7vd%bnyrS-IyU-Y-b}AU$o+)#>Bg>wK z!aV7UB+3^LUpzbp^R5VNGJS1CT{_bF7n)jH!iyhNNn^W}GQOnGjVgbn82>aoGwh=7 z4@91buCdjuQAbtKP65Roc^|2!7VBvIxzn5Oy0Wks_b!WNN&~KL3{xxGg&_(|>DY#= zsLfuRnR?L}hpVmf9d|LQOtO?qUET<0)?W4!RWYgT;?ZhcX7i@vfii{xgty;35K!VJ z&O>>AT9kdWFU9t@`u3ihzNs2Y`EzGkPHzVu`PG81Uw|BBh!^DFD23gY#xt-Mc^uvv z$NT9ZJ3?TiyFX_T6UUc!6b9gQ_0qvd@4?>4AzGRd2d2`r>HQ?NI8=>Px(0Rf)SZcqPQWIZLXbz6eK7oRxa23SwaL|5J=BM*8RKgZphZ_x>T zFb=F}{3=oZ{=S2T2}8MB)eC_re=Jb4$Ch3Wp#l`6_coeHbpeh2oq-pE#S_xC_9GV@ zUzR(&KadzG5w04)jf8T-`S&M*vF3L`|d#sS?)%|d+CGO(a)2~90c z8Y(p>Xj7cb{qB+8{>3GrLLQm4r?Y0ysG}onT)be=OjTa1=CTjCMyApzLqy^S9q;K$ zYy-1NRSh!r2W!`tz8tL>y+Vm5IpA5dbu-4g1cT5hp5}z^rsr-tmSmL!*yx-Y&J{v` z`~(WD+{H>E;MfA22&JzWah5h?4{xi7D%Siu%UBRH&0_jMT5{hYgY*BWzpESy+J1}g z4yf-fT|zehwD^gT-S(?AldWId--53T$7xv3=}(~ZAaK`3!^2HnHfg)_5#lcC8sDrX zPSO&}B}2l+ChVlF2s1&NtY4d%jztI=*sU|`4mEK;DTd^L|675^vgZzjtFH;Czokh` z_I-?yC}suKTkRa2Sm2Y;43b*}ATG4L+@i}l1ptw@)iyOgrrYp9-WC(|gc#wj)nO3z zZ+1M+ED7<`OB8peJR8s9^y_{Y{1YiEQQLSkbZn=0`kOq1uId?$<--;B*XDM&A>9bN zVn^*6k2>bFKNshR>g${Q0#TkHLv(5k<*KtV${aj__HlU=5-Aw4~^%?{DNTcX4nl#<`Vn}|h#KSZJPVDi-9 zHYy@u!Dn!SKj+^NRcgNd+iKeY(C_1W(ZTc}@N@>KIhD=?(HJwGl1%8HKIM~dE#25G z=%+}H2O+kw57jOpQJKvP3l*d2%x_z;4O?%)7D%v!=``p-(^;Vh8u!aS_Nxx);xd97 zY-KHY7*$jC-n$CIPHn@q7OeV1vdE~2RwhIKrS1|`ffewrac4ak-k@@9oSk^+wz8qa zpn6Q-hkq{vr#@cE$^C_Q`0Ew}VaLCVS-5zIhR$q#cXuNRqN5OERXCh_K19!w2x+v% z9gpIJsNB2cBaeaW*p)(L1=Xb-gNrbBeAq2{F zbxL*Fx+xb?H~=Jkk-@3yLGGT700s$4{U{o5W3NAlrJM?G(lb>!NTMJ98>|P%NO<9z z#5tos2l@Q#<*_l*38e*mjK!4Qj2DsJ{MWn0=`$ALl|P`n_>2POfyJG{;jK6t1QSnq z9kQ<(X?{U?(S@kd#V?b+j7haP%X8mN5hB23T9D$a?8N5k5;sUcmj?{N4h+3&?;IvypD3wQQi{rHw<0a{AlSsbPWIZFYEdq<72dz~XDKKFSSgjfG4T!P z`7PgBF7A2Q-5x-?a?|g;yH4ty%O+OU=)NnTOA5=#@;MxeQ|lM>ls@Y_ap&_^d}rQ0 z*|s1i*p^FF;IEai!|6)^cMOn7vk5Hjv?pi4XqZ*hor(S3JyS0bC4ZFYoeQylv5f9X z4HmdC_2KUx(ah3lBtf5^3T?DPc5<4G&`_vVQ*Zal7KU%1EKqf~Zo~g5SJ*$rEb(9x zv<_lQB`bO22JIHWV%aKs{`7XgAkQ-RRMI%u;7_@ES(7YLe|gZoHcb z*je@kNl$#d4ZA--+x3 zXWF`i>XV^p8_f>A0r8TxlOrv-51!YuzkhRwS_#D%-`U{u6Ii4La;zRg`qhpUbR&X) zDA2Zr{L&5&`=Y-RC7AqT(hBq6^-HLZKXyuoO&?qu485~;c9VA_?X10Li62BqV2_SI zIeF?$_OsdC3YEF?bvX!fhnKEf&DAWvvBZn%(A@or`>BSid^*ca=evHeY^Z2yERP|O zq)x-$XZKBdQBMvGD!3M0(SY`P9-^oH!pjr!T(Cqx?YL4N=+|)eAsNAdT1lhUmHGA* z$x*|>RG||SxOcVMYC+N`5e#Mi00;ij2A7s4H}a4eI}t))9}i}6Y^Ri=C|UNMlw`}7 zC%6LX9g&%!&W42)R*Z|7bSB#pE=di}{(zDz2wCVg9b`ZR6xC3TBC{31%}z<#3X|-W z6Kl8ZZNfGWopG8|&B#P1+3kfD!l*5yUtWYUwsiC@sVO5+o}+6$nCJ{K(^@EPqSS7* z56l{}L9^FhPJgGs*|!W2eQH178kHqfAJk*gK1-am#=XW#bK0raRe(Z$7oFgq2|!JY zGB^~;IFJ4I`g401jP-fri*XQZjYUZaN#5fJwJ5T#+-$b!_aRVYhDW0;e)ajsM?`&zSYkLTya4IPq z%TQp88AHF@n;3c%Ccf({0&+@9phg8}!HDWy{T`$p$)Qc?CbkZzVmo!#K*j(74XQz! z^-bXlTFI2a2v`691RL3DMs8%FWXIo2!v@7~V;83ifZ_KQt%w1%cUH&S7PC#uAEh2F zok#o|1iAhPtu@*DE2_~eCp4POIV1k3RhLp>+~)S^#26vPwxsGv(Zc)Ym^RpN8*mG&Ev>2 zURwHFEP{P<+IiRhJgnrzYtMH{^|G`SY{lNt6yl}+I71RzLPS zcp7}jjkd4;;8$kyC9(Hm{>m>YuwrpC)T7qvs=F}$C9Q6=*-QLz->*zfpdot8bs5Zx zCW#ZoltJb!4N8f0)8~2RCm_vhMmZFhN8uUObVnR*CJF5JAOl#%`s9QDz`a_tx3%mS zhUL!gIs2*VxF5Y3SIZI{V27ssMq{bi6HVgAZg?299N1wPxx%``2rz?;O8|&#Z;!|# zGL>7I<~uapu@@3pHj<^rP{I=QAU6D%Zx||eHL(JmY~;hR+cgB(`()qrwEcObulk!> zb7XlLwZo<}e&r#&AU4M1Ik{Foy#Az6T+dBkmvGY`(jZ(c?>7FnPXg_~@QlM5wifW$ zm5RC*(bqD^Iis@$*?{V8WYw9QkN}#ufAptZ0nbz++1s`?xZnI2pvcB;Ee6!tcaMt`9jFc!f``<$?RIiyzEoanM~JLm1AbuIx7iLGfaS;@WZ@;$Vq$Dr6M2} zvJ7+vnlS1Y*<`g$Z^JtWF0dVXOZ!RuJmKLlAXvj%2PMWjJcmFuT3a{nZ#qHaW;rlX zE|W~Oob%oI-6%%Z*`5aQt>tYymM&-G`L{02Ivcs8RvN1CEeoUhcM7=F(@?B2lz?1; zTUjV;m#MvTh;b{khQ<&~0>z$1V{8|Iljl1boQryp^frTF(dEG zEJvgfl2qj)c5bG()vgShNG5d|Ed@NN#N-lZ=lTbg!}o>;JLv++5P^ zcS82ekn6GTp4Uh{rgoVed6E=eK>Ost8J)2BA%d|)v;IapY$+0_2_|l{GWwTzr>EdZ zl3;3(k2(OK3|@?7DlKm)XeZJsR%-+oM)@ry2sk&4LtV;Uo@(# zGE;%~jRLE8jX$ypkzZba5=-2yc}*)?OiGgpP`QDoyjzW}9c7HtoUf1`n=|X~Awl;6 zaJv{(Lt|6&C*`jp;@_jq0ixM^B@p|PRBs?StSLC=g|?#>e4F28OAxQqTsZF(%`tlZ zi$iKk!2s!L%2^Uxvbo+|e0?3nWb##vi-Up@e6-3Wna=B_4>}dwKW!ua<5WkEs09w% ze6TnPg=x2TpYg%|zg`W6fO8*DS9krjEdcHQ;#rRznjOV@!9J=xCDr&ud?_=?_bJQm zm8~4}kKq=r;+0D;tT0oG%>f5=Rt~6I)7GPWnz@p-$5T}^Uzq@Par2EfM5~@61qz#h zOVd{s08%-&6tgZMa?=2g-Znx;0@>Q9$#}9SOBoVMvMLWrBV!H5X_R5O2}v zpek-@?G--~2v7*Ygpjxmd$}oeQj5_D$e&oX7B*uZ~Hh(8HxnN0ys@t z`Xg`mdJDI(w3fD^f|Y?~{zrhP;yvkSe>bSPU5yKosdb`FGEy+if1@vpWu6)bQm_E5 zZl8D8;@VO|m^$v)upWQ=TW=ftAF@{=Clmp2T8VLYNyX+6Yz}|!~=e~6^5IS3?{#B!JvUcRO1C;2?Vh-I0*trdUI=>mt)6c*aIjr zS;vQ-F%d0h6>9Kv>beFL1=#EAZRuwR87P;VSfhujSQ4&zQA_bc2PFW-h9yznU^7$G zbRZ!rdcTYfGzlob-f^x8x654Dquk#{0!T*H^ooLe&&_CH<520azN1q@D^cMyxr4%< zSTxr82`V0`ehx_;h(?CeRQT2~C0!-G4e)JykP?8?)^#f)v6Um4v*kN$zOI>?Jksp@ z?w!%DSh{bIw}a-L6AQgemHqvuMv&`denuQDW<2s4@SgN4dquQh>ZOQ*BWko!nEcLl zQ_P_4mfiMe{Y%|rRdq*wW^6c}NgbEsr(xli3T7AB_eGZ2sBt{N!YoL%p0@ySk zJu4dykuIE6+zBJMsbK(w%=nMWJgpsYn~-xsd^*IcXp|jV*({G}j_J2~yiX~88aoo% z5-tg>x*n4F$2FXnyZrxqLkq(6Q)f?w8Rg<{3A_D7j%{&C#gvDobYW;>_h(D82bS!w z3uG?{UP5FqMGpm`apUZ@{0cnBKsBa_ketX;KN|5U3e*IOct?ZB?!%nIFO?9N@SJ!6 zYtHKcw4f89f8(GK-j;~dJKxy9>blM3{jzDISYYDGh=Td(f-Dv4L6*rgM_SSG6Ou&4 z8Px&U=xJQB91v95So@)BsAfChJPPxjP}C56CFgV^ZZ`l0RhMFRYj*ave z5%7NX6l)B!WFt`Bw9|;3e5qx;!|;swSF1=U1HHY_-(wdef|p_)sl6Fg{%GqsX+uw@ z#B*Vohcc=0?K6fhm|-UP)+x9A^%ApY@y48?aKj1yhA@%~_NREH!S<5WCH(DuTEm`N z$3TdHz%hE7X%NzQx7)WZnJO$8>M}-b+5!OF96=Z_YiYnt(DH4QNB(=Ms_*Q^Cgy5a zy!@Oc=RfDbo*)3!R{>z(!2_;HYjTQT+$gA8?L>*DTO<_%pkci@ZQ)^DP`%9H_K@ zvO*~$A2`WlF91C;+%6wd#8-d3=SA?ws_N;r1tX6>0&;Y` zIhinPTPkRXS3KKdip4N2gXU6-<8BF8^kf0Wb&TMRt@yL>T++9{^N3lCz}tq@;2-`i zcIJ!LNXZD;tYy7gcu_CWr(Cw_BI(;#^7gp9uTEC%0G6N}`ZdCItXXjM{$ z5R{>gy}~%b{hxByO2I5r_secgYkhI;5Nd4nN-u3CY~G!Ku)X!y>RRBItF`7~)N;&C z5XlY?$lX6N zl{BOxXoqgPBUU!>`|7UXnouImfM~8@wz-pp8~4sO=ymCEuhX+*AqAjM&4}8>27eGN zCgcA|F)P2O5g%vj>h)-{%0|3nMQc1#%v8j($KTb(dVcdV8QnQ@8TySRhgOeg#5rAe zXUaBn?92OcCM^42p$b-eX-gkhU#tf*Y77v!feneow!U>T$aWFaX0pw=nC4Ua+yEVo zBs*f&ely0a>R>MmbF!?qltZHMlvdxU2R)z$e{j*YyH_S(KWc8@3hbOEMz?U*GDb28 z?^nL!%hTcGvj}zHpW4?xkjjglg&`w?S_*V_U_p@O;9z-leD+a@5B=$F@~CJ>u_6q} z46SyF3ha5z^!bSFy;HltJN0(pJy;1vT7|At-+1TRDJTlyw1*5d9RB7@tCFLutb7X3 zbcPBqt}AA1>beJ54&5oqDi7=%@Iq)5Kl-zZWRUzA*&BA&Pns7>%qJCCCF#;ug6BZM znI#ITyA-`-E2vXbaF;x{HxI0IP(K5`Z-|3nt6Gklswo*HHiqq&+ktbWy?Pp3JU<&2 z;R-@64`xRZwdRw56Jgx_uOfKSNfsqJ)KbC_BC)MB@Na}GAT&;i8*NbD{Q?hR2Y>D{ zZQsNLgYLYf?>W=K5BtA6j!rS^aIbR3$A^_T<8Q;FaBg$t(1}Yrfko`*j2%$t+r9Gl zu+^H!jUIgzmHwN+00051L7x+3lvMFQ6>|~cHi_ci%%BBR@3$6uc1yV73WAmn;eG0|?06n(_Lj!gzqwO1$xt}@Dq*L!AI9dC}g2NjC~EDLCO)VY=L zo@!2R%=cGN;RCkQDHr3VbLbcaYyp3wfyR$Y0f-_sr|@~_pq=xx#%2W-{0 zH)8p+cNudGWo4^= zj-e-pq9Pw$$I_!9J-NOXQ`i_A;@v~(|3HXb5zClHU&Wiv51X=-~G;UA-0*yjtN`B`#bR(=qr1Hsw z*_U=L*e(A)MqPvZ-LdEI@=LR%WQVAS(mK}Y#wKUWPVd6L#Hjz$_b3i@}+`3Q?mYb?NocJQg`#JzL&cmU+%JDMhJ=de{o=Q87NOar*DkJi5gK2 zxJLu-!Z-W;!< z<$7mB=_;U%-a>TYUpxL4T6lF`3F)GkHno}kCRo>4uNZ17Z3(#-ZZq#&Y=uu5r~5k& zl*Pcxf?gu3`p}4j4(1)It(Q=~U=9|XpgtD?FOPNY*)6-L8REGlSQW}-#vsD>L6+7{ zFn55n#$l7XHEklsoql9{Jokm$g)5`>GjT3w4+ttAc^)w#dE}hbKQy*?gC}!x@A%X` zCkb<&eR^xSqcC(|t~;H~)d*O}Y2#|(B`xcUX@=2)vKmB~I4hT2gf3Q|W zHux1qJy~*$(%>U>P_qr!vOEICE1lg7z9=F_BuLe9iB{nSt8GMj)ZtSf2G%{{Y6$vb zbWWv5M?#$i;8t}}P!fSFkJv-XKJ*dF<1n{<)J9Z6xW;=0ksM*EZ$Vb8@uLEL_(N0^ zw6Jm5Ju+oIrnYwnBjm@S6WXDNnv@$lJu1DT3! zy-V%XUJzj6`aRU}j%+_>pE({00^Ax>c*K-ip4VEt-r$7$x%X0}vg?cf9F8Yq|EJOY;#iS0K;<8_&>zc_$Un~$U7UFh)d*(CC- zI(Js0l^Mg~3kI7PN~v;^=B}PUiIbPtUi(I_3$wDbWtMFL;PoUm9$9k2UA&$!N2ogO znRAOX9DyDYZgW4E7*O+OMY*4L!YnWkiaJkOOHr#WMM^QKV@fWik<2`T~}S(AEOx6VsMgGlb40h|Km zO3i?67MdAb*<_lSyca6Ssk}=halXL@Ep%+4Vc#{+5Bz~GLSFnadtcSuqwMP z*%ZD77-u~dN^quRt7DHCjz1W3^uItF*SB;3aZ73+z~i5L*_%GK+au~(>&rI9N5=9FlQ{-#tI zp0p$-#5!HHe|`2tBk(vyXLUa#-y!X6ALfl*m^ht}eo`niHrXAErNr@*T0h5%Uc;7U znVt|g(;R%@)QD=X_snd`#P6eqKbiihqA)n4AtAVdO9&Pip{9_Us*ygA(!N`Q7y{zE z!UrqYtp#*<|KTKD@cKwxZXA%~S<&{nYuvD3;&KH6GktRFZh#4ra} z61;CUJh6-K`B=y53R{|biUBL06pf&8qn)XHzs0F5}DFIK5W|7iWo4D0J}sJ{pSL| zO@Bj{Jm`FPi&hd2ecwT#C3)csk*^Ibq04tT^}xP_Z{7l9vNLeVK!KBruA_N3PRqXXEhImNZ+B^F@L z7XU_J;h9btr_aqT&ZP%X4B8n6F{xa8%25kEffF}!7;~k6ZRvVH+z4o7q!H+;k9;^9K9p~7{&;20-o zm}Bm2HuMlzL}}Vs-2?yhLg5SgNxLyN5(g|QSoC;ddJ2t`rm<;M5r~dx&UQ98TnF}) zbdc^q%U{YOF_5rAZ}HgWGNs9FzE$b5NLX!&RKb|lrzgLe@!pyXUP&)In*Iy zKzIa!%d9w6;mV1U72?0V$teFBtfs7b1WXRXV0C$tY_yVrKlbIe{T5&=pUzgQ)kzryLEH~06;db{)O|I^b0xkj+9IOf-kMc1G#HH07SCgr zoj}z%UYEjrMK?P3RZk%xd69$1>?qKG_MHb^3Og3xr~|*s1PmM6nmXc^c@;hIcrV)u zV!Yt9JXy7>Ky{n5_fIIT$3LACK0!J(qT*FSoB zoj$&&;wVP_n}*h;3c(6ax9`g=@_3;O8*>9;nUM5I3Ws1U<21{!`qZaHQ9I_XST^9n zFHL~O+};=-V+eIrEIF{ebCJOoN)}Iezay&<|3Hj~=Hk?(OgYEXRpKL9a}y5XRDr-D z;S7*|T3~J$A3Os+sko9C5)?o|T~1M}u<8=oKCqlBpAQG>?2VL*BkG)btiv zzw(&ADGaD^a5LuMvNtp0@D>SJGj-dNpaQ#8`f6aZ9dI<1AtNgS*Zs_IWBE8CfN~1oyTXO%@y5JiE)mF1!E?) zrgUEaC*Tb}^GsiQB_y=V(8D{6j*B1+MFr#r^iwEG&D2GjGi3sh2%S33Rz0a?tnf*0 zxi)|K<8d?RVUF`sM5LmpZqU^r$P->5?TEF16JEQzAW>XacN&S2;-4_Eqc_Rb+OwA| zv%nS>eRlep5wM6BfiZ?{L8s!OQZM-;dQ3GLJ3LSRYbk<cQnrsoxlv+>5hj5$lA?U)(G13HJD!BDe-i0GBNWw%yH%@tgU$E^G}lj!q<&xrhb<^WiAAC70Gju=(=a%Tw@4pKl&y6L8hQJ z4<&4E8RrKdlZ&oXJgq2z000EgL7P`i;R;%!WiSF2|NK9Ax$I$o>dRcw37Si5-~opi zs;N%nU?vzPE5uOnIdclUuaB@E+!R8o=5W>jsH05I(k8Iv3~a<`1r<(DS|)}O`8|Aa z`%OgwRB$e8<$N7K8c5(0K)V~{PD0pNNT8d2=uo`R(Uu%|a#~xTIBu38WN)B-sOW8e zu-qS)L}s!^^EIu{fXCeXW>$_GxFwZ8PZhO+uant6_ehWGF+Ly=(rk#)h-q{e82g5R&0x*v1fV=wuwWw5L|)Hvbu+{zfD51W4qK$1trEfIAY(c`PHS*+?3_?qKw^t4ODN+EhZT zhjx}nK5+2GLeime+Q`2(b3kW!01FRaQISxm3SiB1Bef)Z@aZ@B&XD{Q`ogYB8iMe* zbe}{@cfg_mM^|)-8kfN9>-Ty!-NNj+==0PW<`+K+La#Ip2)AJC4D)&S!=tb2D; znC3&dVq5Hr`TE2zfcdaS8L)ExuIYt5q4tim~R7gk^uX#0TY@P#1pntOBs; z3Fz6u&b1z2693&8AY8Rc%7L&kVYw82XSn9PDfl66LFDc5jauaddIAC&0%Z6w6@v7s z2uF+z`@;9KsKPoX=lz;PM4BG0vB5dc4L90H9CcJ%meGlDI1yeO-mtI0sVXge${_xB zyfIVYu_xb|Kie77a*m=uVqt;t->oCoU*t25IdQ^-T$-DopIMbP8bV|!Naju&lT!@M zZ-(5PCT=57X$;vu?sBnX=u%E`ZAFt6VD|fz5me-ts#X=x2zHX1_=q8?pcrUNCU`(FE~Sd_lad3Yr%HpubqbJnoP`tob{GQimBOeax( z`9x&CW5etycOQs%fI^XIg(N3XxG!@I@;NR{T5RR_Q;r@ss!g{`=$@dd=PQ{4=+aw| zO!dj}g~equ9-W}FhgWv7WX}97e@EJ~ubd@u@uUtbU&0c+D;f9fmQWH=)Hrv8^}e5g zfu*d3jqps%y|m%%GQHr_j7X`){{wy!c2e2G^B9^|dGVuqY5r~Xk^{2nJCLX#&P&<* zK(~sK0005eL7RC^;SQFGl)w~J^Z$ncF`I?s{1S&iYzBnhR6DA0vvDX}(^C=>)}*le zo6oI}ewa!7-^h_IUz{rmNufO0?rIl?P)DKR0dPP96nT=_@mFrbgX^eJnfO%`$Vi`YRlw7cXK}o z2*0?}_1jY-oxjRUP>!7)D~3{A+^n#LkoMQl!9=IM$DCl2-mlbY;}Jd*`b0~6%#IV{ zmC}+kbI>2$m#Cdx-5-ZU$`C$=$e7jqHEwo*q*z5ma?MEXX_EIYe|#^vynrkC%J1-k zNt(<^@a34oi12(WstdC4k8=5-_ylJG&??>~iwKt!T`60*SMl$`Z^o&dA-j+fy2{;meNUogcX{p@dDXOCCk6&*kigL(dCn&T`8_mEJvEwl5tajno z%Ua^@ear6e-hiaV^R}+ZqS2l@=I4+SkX) zAsRQQp(b;tk&jDPYae?uADmGy5ir-Gq!7D0bC@6?hKs=iGDrcb6D3DC79|(ADsen8 zH7qy1p^X^k@7K~g1g2kE#hPqJcHjckAk?k-EAgOitT{xfjlN$}B~IgBNXlLEsV!v1 z_>l~7Wc)9>mV0e`oUh!{3KypaOv(_JfiFj@)O0nV`fI+wM}08o=<)TB^(~MA-9542 zFFexZqNhm*O-xjEK*z}heW|C&-Vsq+JhoCYxG@>}iJx4vxyzD^lpkf{voej&46^`$ zbe-FuY%-yUIrkBM+Z)tP6RRh#vuzFB-`7QbZ_Z36gYfyW%ZH|#fYpYGWCG@WdC#@9 z&Slwr;ZejBovcO3T?GeC%1+}9+RsH}kgSYU0%xgNH1Qfn*@m`iq$IU|Jrm4C@L#1z zjCL)XotiO}kredN7UQQgs9%tx3?~!`5H&f4^oS)l_G`+&{92Vl$-w{soW^B{ga9}H z{@y=ry-^$&$;|b>RLC##EA8A;Z-1oYl9Z>&Xm)@xOO@SDrk(*`IsorMgZtvP8FH0; zw^7nRAzmY3Js9et>3`kw&$ec%?& zKXGR2g=zAhM=cb5-1L>s5r}c9n$7hPuK$*r)wQ@@UQ^ ze5((n${NeTY}+h#=2o*yc3E}QlgvFG?e~|x8XE&ze=IZt9@_T#f5AR<32dfC`knJD zIAzyJ&H0J1V_*R!4}XLs0rM+X?E1Ak2qWCi_lCcs9+`WvJ`LG00yO(shZf;xkQzf% zc3-VztFmhA$^8C@U|A#XGuSD3k&i>r2}|jp-46GQyex7ATS2Xg=QZ#==j#G2vH7B9 zruBP9_)=NgDUj+9lc#&|SPO(oaT9oz&b1DW&7|R#;P+6BjeqxT1x7zNulDV<=J!hN zb9HXgCygWkb#%`YQXG?fxzZT5Tk*Sk!{rZMFz+V*2BgEXWOIng)rNFb%gl! z|9ug5QxshaF-x3lA5&?a;6Z8dow4 z(tLu0E)Fc* zm54z-xPtdGm@D@+Ws^NP&kq^8I|g?R-{=IRr(#LR`G!?W8=@Q127TMH!csX`yb~yF zd0E>|h4F6%DwpRsTY;zxfU?av-Dxcbne+G;jG}-gO-->H5j_ul=3IG_1bWpl;1&`% z+lo||b#7qSPz)w*Nt4!JuR>MpMJPS$@04IIB=1 zO-(7NFX*pZER{0rY`0k~e?wXLiRP_4;R*k5Nld{o8glsFRX@QeczyTv7 z73kmSK=7`5CE?DA9P6-Jc4yXwuiela0-rwoPz8tjhkqX%?;$Mzaz8?Iq5!exrLb77)IDPrpAHOA`tGfvAO9}tR;6k zp6|s~^o$}4H`2iSkpa97k@tZmt+)T;fQ{OB#Ke& zXv&X(cCLH8s_u$qmE#^>6aog^BThFB;+KAvD9W~=OOx$`jO$u(8oTv8fG)v*rT(m@nX-d7a0B5WKG z>%dRY@EMABr)Lt1c<&J-Llfmtq*l{X{t=}@jY!zUj=7PdkDabzdWn6B*j1T-ED6>3_YD;R<4WXS;%4;=yKAZjU zUZ&599M|Ec#&Pcr+A*Z6N5HKe_)Xq|9`&NW)7S(%%YEWMcGx!(3o z9)opTx1AUg_KTROQdIQYb4B4T?CV^cW-|V!l-z6&o zvx;Qy@3oWPfry!vf5pt3(|m6YAuUpKra0vH19dsUCevBgYa70kibP}|PpB_rAA6|iX)g1^x ztv92AW3eb4jf=MuY}R2P^a5`#$|hKAziY5rulG4^rSJ;uQa04CWd2aL;vCBpWW&?66NO6L9HZSul1g$tVk#ghm38}thlx*QvwYjuo zssYIV0pPo&3{)UhW{nDJjIERuqjzPSO497#3*m`;TJSN8pgs)J5M6TB7peq( zCHUcZ)^mzHb7y7pg)^_lkhbyxjqpw;;W2G9Q?dCx(yE_KghT$-hZ0YG^B`#=R0tIDH*f*b$H zCupjZxCX>_T~t0;$g|XXpn*%_hz+=7H@8~A@(-mcJ}_ir4Il*qI6`> zK}A8K=#hYeCzv-7S?V-w^WFAepGV4n%>L{*eH{yrr`O6>_AEoYSdod$p-BknV^Ch6 z@?~UW9TBY6Yc=~GccT-z+i=YBp@@o>CE`2Wb|w`|A17F)g1lX_Q>I!`*h~GXbUPZg za*UR4?YH63HpEN^tUKO3;PgDPw3BFkg62^No-*U0Ype?}S9;`)tDK|p#C=UB9bRYG zHwPpS$+PVleR~_PQVn=_+bq*l)b~fhyP{q}u19C8B%$?EmKc8{n&2Qnf;&nulEcd^ zpq4@{iC7eX;i;QhHSg;ZItPA0OG6D;w50?dQ7bM}&|Qju#3^lTkY?EY^VD)4e_V_r z$LXAP9*dPw1s-(7FKsH5#8{ctNs2fwU^JB|mk@vLr?1Py^>=A2nL_|AIo8dyR#1IL z$lj=6OAoajFHH7#g4n)ldUPiUFRPOY5mGXz`KC^Q6F9*#8}ki3=mQR9$z2K|9Tr@> zd+Wnbd6W=eI;WdX?ndiPFh$nhWH^jCmAis=k~K#PvwTk|k!ws-8ds(0BrZjeu(reA zf8&9P9K%HI2qc}p(?r(7&)2BIiG0-i85+p`Rya{fp=Pn2xbrTB2RjrSEL8jN=0_5< zD>b&i1ya|}5p zfbsLpgo)({K%ZFHEf0iWrO2JjjvVab&XsYp7JD&yG1x2Cu%9quMTid5XT>7?Vypd9 z-{KOf9MK6?`?AABaGgQyzQnoY=CpD zl*N!7Q)6(G0)X8#LHq>pG?x0eT_(MksJxb-7Qn$U6iZauqn`#{y801uvx9#)^0EtC z6UWEhxkT2dNt89#oVoBNre-upwE{9aK2Rwz!bO{lYr8bwl!hAxn1sSxvORkd)->W_E=D%=3llc6* zxC(d4R5aZ?8Jre+Hx(b_tMur3KLc3;2Eko|%fbB*T;o3BYs=?-iMPtNSrpud`Co|6 zZKp9MbDkM$8Wm z?h(x_D8&b7adNxz{eQA}a zk_a7DpuQW(QFPvSHn|G2(Eb_Pt{dE^Vm_^g5 zvfqPH6|rjp!(RA1qwszHCA>=7ls61_Fck>^UWSIr=E?tSq@?)gIhG>!Z6nd>yGN89 zRYh2EM9{2@CnuRWw*LKkWzWGHJqq^+?28zX? znAT#>t1W;n<5%3SM+c)e1m^Qn&h}2%jOH9sX+IA>y=gdHqf-&|<3h|*SObw1h z+iCxMUtoJdo~8;3V2VnI4v*p=N3fOU|k>5g4j`P#B`F zoUAQgu3H~O9<(sVg)$;}jj1wzWTR&6QhV)VX|JftrJfTkR$x+$u*zktQN0PG&MtW+ z9REF>$Q0;c7d&s`Li^Lc-(|jY?};Igc-dAjV~4+EUoybKb7aG#4?3|l%FwXQA7f*H z8))xWWYp@oz!H%5P#B)m`bfK;)Vy59#Ic8O>1JFl?NA!y@pYNqSQf%KBv}+q;#TP0 z^?bBajZZ#-bl?3lW*^Fl!?ZpAAlAYd@twnxr@o#8V}d`|)cY_Hq1KkjIkT!=$nXQwcMDgW!$L}6#{0TQ zh*$&h0lwef*8~ZC&Y0l5Q0fntULr!pu0dRiCpR*O^f%r}o{@LVMkY$UrJJd6lt3}W z9&zDt;{1x~4Z%{gTL}>U`nd3CchmyhZ-aXm-Il+|O@VMNCV#Z{GfjmhlmZsiM&@oO z*<>bo?PdQVf~r$o`48?16A~8R&-P%gO8Y+k_+Ki}(B=SkwXUzU7GPUVox5)>dy(f? zESUjeA}Z8#-A%kVD)`F2PVuJOj9z3XMj*8jcO2&_`$oZ(I4%rzK(~wUZ~xIYF5|6C zgm5JQ≫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�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�)6i<`DPK?hy5!qNTCM+biUqxqAm66r^Ne^>g?zq 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

      (9PpZ~9@XCqz{Qt;Y}hAK1+6HG6u=2vSiQbXh`T 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

      |D)3#?}FG*+J)RTk))a zDJ&3rUxBQg0ofUZUf^1_(v=ZuJ0=dkQ53pmkf-ebEXFdRQw9p^jVC7t{!Rc_~^}x+|9?Ai|Hgdmj3f9H#YQ&2tf53!01{-BBO=NTgu}dkx^)(oKxWBWB!Q1wUj7*5K#qr!tIXMfOZk5*@>(0RN;A%t}RSPFzHxT8ky-p zISp_XV9CRvGkq|-Q_sb ztb(HRVmhdScvydsf`K?fdvoHcj@|uMHptbwQ4at{kP5yRd3Z3{^q6AEQ=OYmD>`v* znZlX+vE`73NpZfbl>9F?Vfe81XH7+WqbYXol_7YKik^vkmTaY)(e*w*ItBaPi zWT9E)OEx12ge$nwnL;B16|ez17%rYt#p&Rvt_Xz8n}z&uTZSdn zY-dnjE-TynvX2WH3pwLA>Jyva*W-W32>A77Lor9>yJy75A9!K%=b4q7+!Ro&JSzcd ze`ZfsC>S}-DgTyQ(JO^YZ8vw8VdItr;{`J}oX$GeYM$v%&BAo?X6g|U1%9Vq?ymb= zQ*@cixFcDq`8$xVkW{OU>C5%kcS~L(!lo%F%b$;GmT7U};yJI@2%9^-fJw}%^Vg-U zxqu;yP;K)$PAj(sI$CC&Gf+gMEu>Szifz*(SAMQv^_th#Ts&v@Hgxg_`&i%1Zmmhf zI+-Ueyp`1_8Kt8fP>C`=v_Q1iifRpqq>lBY()l=NulUanhJ=^A|-z_gB)WyX$Pc8-Zh$9)6 zoY+%x6t%Du5eUaEL?uWU=?6)1Qt$kEzFS%3&Ht%zbgx)Gl;g^xjx*QesBnfV;L7-7 zQ4j0cw~b-K+dCebp=@3){3FpS8wh!QcQjF8bVzQFjN*`Opo!w=ps5h<-HLpVK(by$Z;q{K5$$FQ;=Aso z4|m{Ax2eWjBJYoxedqjMe$G`|b9?30zc+=)dm!K-+7Yh=v#8M$@-sNxBBbQ~IM0g( zl(ltD#A`P0B45!KE))iBS)O~iFQgQlNpgB|c2=B-#f(o=|KSyc{YT@;_8irOk{cW2 zDK9Uz6;sjw;S{Ws5J*fX=A;TTYWTdioTC~&Q2OdU8bXnosU8oF1M8)rODr8~i~nBx zBu{h1O!GtAujw?a43pOBP!L9E=%l_!f)Z?cw`dF>EistWM~#i0I= z==*+H>KC|{%(0P44^O4UDe6Dx6T??GU%GZjL{H?jgF_6-4bV!%<>fP1kM|wx5_jCH z8JV@4-VQ0T$Q+x=Z`S7Pg%v)>2*8KLTL@>!HfbDHm3a`32oB+7KrTjoSc}~`KPeg3fP=v!r4NGCuFrHTn zVQ`SwwiHpf4r>!(g|)gUx@5YNA4L zr>UvAbN*;%&D$lw5w=eBs`jk?fizM>_5M|fIDp9vI^{!qI_k|})br`NOShY+#{R~` zIk&`YgaYKAPH~%n@Y6|neaULQ{eYA#;5dGm*)-T&9p$L+88Y4HG@X$fEHowFqu{2u zgQemf2n6x>I66{8Qtm%X)*pM!vKkP8UBnxlerHPl}3D0W8XQuk{R2f?Ys$%r1~mGbiVTS3fK2T0cm+rYjGrYT*5-w z?yyVE+4Gn;=GOT^c)1;j1+MNBCkrdA(n(aJT5qRr^hOQ+R`ch<-@`F0crj>Qgt&gH zw0NR~;?9P1f4w)O0>34t-1rfY)WqqmYcWqC{db$qvR-jDDX6~&U{2)IoOs@nJ7CM; zbIb`$g`|^-v;BRWTX8M}UT@u@T;C?Ea6PK90ch=^73`F)r%ZoXMPfpu2VusBdWii? zlI}DJ4G!8d@f6ylm8>Yb%(Os90bd;Z<|pCfRA3<#q)k1l2zur@Q=UZK#^K99)OHE3 zRne3eh2hiVm%pE5Fhexjh?=|W*10=$#}kdhVt#pUn_6I4-~8qYZbV6tA_L|)AsPFa z(TrCcFXn)wU8jDGmE6IDAEfk`CGfHWZb+tnGghMqzi zCl3B3@ia9je5e92&f?RW`gMf<78$I#*%yf}Rb~@)&z&aN8@L7WDZ-!16G5GppcXpX zNSlFoSrLo2(U%6c7E%_r24&m&huuUGI66ByF_41$T06ER3gU#RtJUt3lBK9H6*0zv zy)|Q5^L^!Ou@wh`Qk_e*`H3uz|2uc?QkuvKG9ZoM`(xMJ5!AAnO zBo&|U(~**6z|oQQb+yrfEo7oC+5@51O%_SEkK!Q2tp$^G)IyS|3MIRxzAbc8yf;TJ zy?>|<2D$?8^r)I9qT1Hw~XB`_CP<;1@s|2sLnSVC>{o)~ zW6rF%e4Jg#n-tz(N2{hGkMYOf2J@1X-2;C3P%2<_gN+<7z7ljSy)Z+Ee5Nv*Y9k%% zir3_Cf&`);;WjFsoNaO$LDs={Wo1oqkv4k6pOih@txu291tZdQx@4HTO(aw+KLy|w zxB#ejPBFm{NP93uMGOj(zL}c*3jn|*z#?|0g+g)MbhBjVnN2z&#CA68Qu>||8+eD z8NJQ~A3#Qd1Jt;<CBle8p&92pg+P zVlz=X3vo`|#{O?k?SwOy!%Ow`cp4Y)I5$7nZ?v@NNt?h*Yv(hUFU+qd@nfLM-cDin zpMUfvcqvS1QAQ`tIhf}##QhJIs)D5^+@)Vxm>Zb~3d^3L&gQkK(Uw@a%43Y!!TGI6 zWh}8j4(7GTh)Cs%=r9kB{1+-fgCj!QrQqC+Ov&3I>pZC(-;2F&Sm*BC1~{MkA}Ze-dExh87x@tWp#XB(X;t63e#6jd zp)Lt74>qSfYR5>i+VNcEsr+fV1bp0KHkKYIQ9iP# z=kZq;msonOV6unoSC^*+Jo>{-5#MT!kzVG-xf5m@ zi$~<%%z!=5+g;%c%$o<8g$l=HXh9MJQqlzvawRVD_`w9xtPMa2@E8vi#AUIMj1#Q5oSzNn%C-o(pm zmZpSlC2ik*r?ZNbk(H(d{lW#~h>UVkdep1LHQd!*bbZptR#Nl5Si+)Rs+MCXJbcboswA3#wmQay@N?I8H$-rYg;WVZeHxu&u zuSEjTq}X!^pGYxgjNLEPIO9Oz&v#c~u506)iFW_`p&Q%i*W*wb8WqIeih{hG$~|)V zmPh#RFgyWPFa=OG3h1xFXEc4<`cs3@?)QmYJ@5&b9dP@E0g2ZK{}4tG4;>RLgwpiMJ1) zYWBhL0`r`an0UmRrSBI+_fr&aWsWYa;}afs*6it|JfbTO|; zK4MQ@rrygb2?9)XNGlo4mkfI277|T?Z7Xpz=B+^6PfL0f(pHw6l{!V4swZA?Baln5 zwn5h4Ng;@Z=!38AR)_LMie}y2Wi*8OEQrYr6@h``6FK^LEoLU?Y0rAJ|0xJd7B`fn zPXCNVpiRa_vda|+FEl^jSGf@}AeoR_LHA!RZV_- z{lLN-e%p^TRZ|xj1)P6IX#R0xVkN2Or1B~IQbT#s`%v_Spe7&F_%C_nPbO#z<_GR2 zHn(Ref=tG`$;({*6WyxEVXL;X^4wXOjo?OvgEhkDq*VN zG506m#=RF3Wm^A`x;an>C-6{8`syr4G+2!QE0hfp4))Y$BgSrX{L6+^9$Wt3l$-rE z2g`*b000kvL7KfhA^9?x1fR+bR{sUUhU?VeDxzi4oJPrmQ@mv* z3NfHT!DzI&s1FoZ4fjqM8YE$LIi;1pbGURYcc}s;sCn4ZJ6&T9E_6dA*u5|ib zQ8lVd{3wYREo9lUt)5t+4@pv!{+XC4LxE;%)xJH;zcqP$((ap@S^<%lkpywvC^`20 z+r9-t`_n%3UCa5NBhSVZwWGB>J&?X-5Z_-CGQ2W`30!mM)%@K-%pW@gbsu&sDwsV2 znTfN;(kyI!6{ylQbQxOS_RWybi+N-akAMt#K>wP7Gd=%dxj0>$!v~RduS}gyP6awV zdM_rINWt;s-wXSW?Jy{WLY&Lgt)td)ViK+kD&e%_Vn@`C+CSlsj6M}22GzNe-0hnx zQg=HR4rMvGR%wNQ3?{5|_#8TVE0<82dB)aR3P&fatPP)58w8%YBhX*s{%0-PBY1bb z?$0SDzub4&wS8GPii^VzmPUg1e!nv74Pd5r-~x*8dKrPJOs_!?dP-h?Z^Zu z)XY@4znS~Q_kB4)2wxVboCSR;z_b>mFM2x0_=kS;%vu1Gt&Se(E(<)OJs_LF{>k~@ zR^{%(ISEecF(SEm!}>!`i8tFc z1|5GX>gfrmZxpRB&bK=}_T)<^B;l$Hd8ygitXBNNtT#CdLy!hV8fx?zyy7GCj2)-E z8lisfah;A9@7oXOw!TFL!W>ZQxCjK5E3rPuSX>xFZRFCi>IOpxwu1GmUN$u+=UJRY zRp)+SuG_BzyXlQ88fi`K7bg^m_aiS5@v=u6rbgB<2(f?PIRug3)$8%!Of8m&Fh(pI zOQzREG8tp;?GQnXFcsli!oh>_zLt)WO>iIPXG<7jR9rt#;~M|syEyltgA#h6OpAAGQ5NLwJ==-VZ*GQbs+ zL&aO{08%}hdSr(u@(Y^-4C*-w?Ncvfjjau9BYM-gV=(>5z7xaOyo)W_Wa=nFPdf0+ z1(d;_geBSh9C06lO4pf?2wh+Q{eKS7VwCQ8sC@C9Fw{p0zD56g<)u5u@}5WFxm3=P zjP-%0u~Bo#J=LVwmW>sD7E1OYN);fc)(2oRGKR#_lj{q3g zWXjT!z*R%8{=6M#YURkL(BmNRJaQN1I%`iTTu_&0z>sN!(cI%@SQ*T*XdMhLar&jC(wklwaz)i&le|`_dbxi_$fx0IXNYTd5Dqz7(ZPnvm*k^*m3o)crt zLp&|nLF(lTyqJSO8cR4$L=@`OA$yE&_hySW z-}bHEV4ePqJ@*MO9UdG#B<=(tXxych1CfbvH;arLW&qxY`-mP}+JzNKj+}O)G4yET&&s+!0d!V- ztnoWc6^YSZFv#(U-IaM#TSLW+sR94_5OX%c08xy`K?lM{)r67fSn)b0;CRA-)99qHR8~j6%UUfN?_Oy zo|^E)m%ltxxejp{bJlVt^OLuDtxBbTi-6vLhU9ZL^bEEzNC+S;ln9jHn1o`>Kre>0ry+v>o-r5KAXr2n$+?(nGy8L}$LHw^H@ z_iA}ZnPH7mZ2$mwbs?T^LxlT`3c{;?+jAjr==uG#xF4YNJGEM_m`+xuMSg6i<*I0ks2BD^uniCoDCZWdA7hzojgkminMn*X_=Aaju;S!y!J-}Icuf8K03Rx0m za??Mg**23kSiPvPwMJ8I!Q%x`7NM|~Q1G9J5B5O#u4F^_(qsEQ+9daAb8FDM_(A@= zQu<9qwT7_+FnCia4f3kgY&&QnnxUa?6y_V3n*w2jpeM2z5}6VT(&N7ALrWeAau1Q* z5P?&J%|gHlgFG!HW|V&Z@rKV1#Z+#HQvpOIhM&hz9xdCD)Pj2sD+Q(D)ZS1Yp=&#}Bf+Fxx+iIJi1Ac12diyUQ7V1eN#`~vOe7y zAa7xJycb}DKUO(f2s+jrNB!uk7WVR|3!sCjv_`Id686L%aEVm@Q0<+>c^u8)Y|;3Y zH8|m4lw~OIcpivZn7rnspzw4>1lDX)zu(hs4I11?=8c$UcW!Fzi5#Gd9J-0 z4YRy$LYG4*bgcu9Ryjq=)4`I!zWDwWLUD3(Qw3smh3AK%O|)5Ak;U zhB&tC07*c$zw1iav74CO(Z(I5j$Iecy%Q+UgwqH3NgN8`8cs4MFfZ;(%J5m!mPw%- z6x5pXRWW-Z#n^=~Dz|m~-u>|YAc8luLu^P*1=}Scl)%>@mOz}-{yFms42xhi< zM?mHts6@?kg%DLpc-cY-*}{>xmp;tI7L2vGmT%Q<%d#AgdqLyM(;3}F{uUdwB#}{d ztSkW@wrqBr zBjlX!5k&7GCR-62mi%1#hO(lwN^rFZ{${t)5yz%NzqV%HtqI!_8ulh$(1ru!uuec- zVYK1Ut)TF|3{+MRmW#e1mK{UJ;$Ht*TZft%B_HLPGC|*#+(I`wgN}!rN?y)g&RykI z>&}#D1DKu~E2p@WZY1F=p8%HBy#f9=6#isCHffneVN&=jBun_;Q|QZWbw(c^^3f-=L*v7(F9N$I5K$N1!-cT2*w&!MWFde4$y zPtrcf9M8dLlb<(EJgS})Psnj|#?ZUw<;AXpduCf;@ULjC^56mV+-VuShiTXoq%3Sd z?*Zl_8KumrkfLbQ$!|e#I9qO!S^AnOm>B?fMA1m6f1hS}duUI+!<~iF6abT0p(y65 zz`S=jadkD*_jVg_c%m(2qV=*05=_JfX3nGThTU0a zj&MaW`$v^b-esCm>OV&3v_!IP=4qj_DlgSerpUUaYr5f@=&OH>q$*nw*PaUjK>=NDfk!|7o8@MrF)xT000K+L7v-WlvGTg z?!-u8aq;0a8D*py$^v?>ah_9wC9!_gn1%yY9E$U?CNYG=MXnT**ZSK9{Lv)0gzfidcDq1<3siWQ@IjMfM-&j|yj1R=xVYZJYu* zq7Xb6q80ZY+Ns}RrJ6ZMJV~{9b#aK(Ne zAe=sr+HmtSUqHaszw5j@0cK8JZjOBHulN9a}lIlZx@--7vZ54G#4)&5YqL2%O%R-w_^mS(XIV^g7hHN!AR z?W_JFqqs~7i}9wtsG-ON=~HM}lO6j5+g~9JdZ9$M8Tp{3Zjk7JbD~ubS64C`oi?K$ zAi3c}i~@e|QCgv@bf%eAq#J4ml79Gg0W2&CJCX(ocwazS!qY4CqkZd~Q?{5Ya`%~m zF#Oy?{7ojl&}~q{R%LlhD%c1ux-|i1Ty+eS+Js}SE&hjLDhfF+ATU^n^jWv6C+ZPp z-30W;^*X|otp-9cNi`zr2+Di>N5Nx$J5M)}i{+!r4fBCm&K+y)+nDDY(cWkn^L{uQ z7}ONx@}a9|DH)-OBFkCedHKj37DDFUWz{V2xcG$1GCI?XNi#$R=FREOkvzsv679R) zbC`o?KK2PtYsRvsnPmxB*@T(DyCZ~n<8e8Kj=>TummV3k*9;g%Vau*o^7Xgjy7WI~ z3iYv>HPx-A6%c!J7vuUeiEHr%2_)@3%m^Sv`0DuyKPE%PfC{(O^W1L_yl>^pMBh1r zZ@<@#2Gy0-`Gj$uBzD0eqv--mQ8tX-hk5CG)v>t)`AYmm01fCVt1 zzfpCbVNGsS&L-aAwjD(V6#KnW@DJmb*5@8!FrqHS%nGXlF$BW$t2xu14T4aamprad zW`JmGF^9Y+IYXTgXK@>KIbNAbA20oyVrjaU$f^dDNekb&{i1@Lt%Jm8dRVU--NFpP5)7 ze`~5ez-msa8VNA0s4{+@qRAhb*fz>G$iNWw5kTPp_n_eZv=0$Qm=4LEGPsjl!rJQ| zqmMGEd9{GYz)&yb=TJux+8&{0_#7BD0r2XwwwUEi|cpDOJi_@b2ONm8qlffLF zZxusKuKInau1i=7g}BJ)v!5bKSr&gjns0GE5{+0M`HC^tGbH8<0J;J|h7C zS2VankHIxNe%9)AgsYo4{Sxc$2517IRr;UV;FXg&@w7A@SO5->siYnu%;3I)3TP#z zAFaUh&p5e@4}=&b6>tTt=B04NB0ZICf>W!%$Hags^L- z-B=hC22_&I^e2~m(`#IGgKCVi-+>W@sJkB`lN`jpp(A{IW{ktxTDvz*9w>@IL-uQ) z>9Jh13{+Am+6G`eo|)`*(3Bc$THF=xUbT#js}>qmtAmXJc*Xaw3D1o7ahOvOxCI^i z&%xnPx9qZsyxV$J5Y1hXMo_`x%|ieH1i1m8 z`e_j#*Gsjm?05Py(w@jApX;kGweX`Dc7*BvqT{?kIzFY|17*@gqPX{Wi4A~5fvLZB z6=m=DG_82L_gM?GocDtl%x`H77D19RIT%ZG%|lB@Qf`CH-aV+G!3pypOd>`T=YcX! zcZMR6iv(w=*3_W&&FlfQ60gQ_q42KzeX%Ty&2VHd?J=ucY|VS=#vU91^V62h9q;oK z(8s(6#CqeqAv&{U2&0V2m)(Z@4YyTRr0R@DT=3EG5uqBBghVp4yt&IAK|P$h6qxg* zi;Gv21UEQ=H$HnTn!%SwS{`Tj^;v&{XcbP+YJOD!Q})cK{-hX8;cEbTyP^X1REQV<%LT3Hryq_{d{IUaJ8P3c(=MqfX-(M$a5VP}n6v0V*iAd>F^? z+no-1L?Ga`ZgN4MW^7p}J}b$C!7lhH2}b9UoK z-o9VKV|9gJKmZMyJ##bm$N5SYXfB}bzIr$lBF&N9N1?dYu)FJEWjw4p>=CHBMQ;An zV-r`T7(i$A$s<)gCM5UN~A0zc31SN~4K*4smVUw)}+=TVxck)2S!w8#b{RK5wJ$%0HLk4ha%` z233-z?o6!OUXdzW1PmHy^sOo^==Sq1!3sgkX#yB-^659|R>kcqS?8hdtWpzCeAJOt z=-hdtI}SG~21n43V^|Cug4_2W0Hc+oj*8r074JZc6#UC+pTedzQSSRqNNpLKg48>u zT8r2^Fv;#hwi$iP5CEUM$|CH2{4MqP>;a-#QoKwE_TAZSUcdp#E?3>K_rmaaj%mZ@kQ9pibAWKa{De~T&w%!^j0$%v-b39T{0qJTvDGo&rIK$ zPWSYw;HU~z6?f>qH8J19=jPk*FLbT5u&vYX_d(bu&-_}a%pgghqY@1g5ggr9^~K~= zu2p}?3sk2Qj)#>~ge`j~h4)PL{Z~G2w7j=mxF2ADLx}0aSMkw&A|jGrhQU+UH@A#O z0n>^M?(?O*=0*`XrS62|fFev(+Fd~PE{DI?74KiXR{mlmtq&B^c8F9B$J z)&A!1=>4@xfRfUYcfh;^{bRES{CJJSf%)VoCe+nN-AOB=Mmr_i$}&0U*Z#a^ks|4t zy{i#!ogFH)8K%7e00XoEp8Re}|BU#=zd_HMRAi&JPQG->bvUXWgULNQ;b=tyF#{Vm zbqkOi5@xWCkaWFV9gAwIsg07r$7x}T1he>CeHPdcmE^SpkG@n^sx&zB@+o5lN^5VQ-WepzxTWjC-# zoPT|O7q7M?a2B8!(T`{i5PgM&6xuhzICk>vt(5ZY+Q=i#K|ob?Z*&-g>pCT*#oMav z95;yxcqz2ryQec1-uu>HK%O>e%vFi=%3E{=_r#14{r`zlR_j@VNdJIN>b)As&&-Hy z8S|;+R-`x^1orHN*vcSAYPEu3H*-XEDRdnHCGXHw(!w-4r9GB3j4H>uK+Wjj2FeFx z@9c!s^DP3>w<&zjYAv{!3g(#Y!R((`iv})pjwNK_vI?F6NQH`o5NXK6goO(o=>s(`_`*NIdH^tr482od|Gtx>* z)*w7pJoX=0<1!X#E6~V2U@(@D0mTV1B}`V+^qDug2b#*ii;hY@H+jCirfMi43)6md zjjNsHWKgE#3z9W<A{ZV44^SiZg(oi z&&o4wy0N%#w7lf2>40l9`2eBPkO%ncyKeY6{kaSn;cNtO{3^=^$|_(X=1wSllT3uj zBX@0H0xCB^r>So{MLxi)qkUM^{n?ZwUU|TIr`&I}&^k9AX(G;Low=y#J~(7CMYsXA zyEHzCtzb+zFFnZuY(J6mvRPgwctyOftR(9Cf+?vzcFDob;PY0#oEV?#89^$J#UzFB zKqgVzm+}T_p=%ccstWqDJ_Ch?h`Kfb_sksLE01|v8Hb>b=fft@W?;6-%6$Po)6KSD zqS05{V&FeTcg%arvLEO!FPe`Iw))A9(sL2(68lcQJ`aWaSXkM4>F=yFWpm}{{Sy1% zRkax!|H9ets1l+}1yBR|Bx#|)!JPE7do;wNioXY?q}b*q(2g4;6AI(6Tw-2m5W^!x zP>APoaz|a-RF>Z4*2C>1PkWn0Xi3v;WsdmFWQ%K*)&#T9k=zgEx?^>l6hv?jx?Cb4ZunT z#sJ5LH-!QTJW4IM)6j%Ka}izHCi@Kgzq<{0SSz?Ax%S@Uq=>seFdg6WPU;!sGN51t zT1%=aGK6eRf`;~rZ$&+c8f=TvNG+tMi}{sRiKQ6xP%nN+anwBG+%DfsXwRm}L-*Ro z$>u~ML+pL9=87;VMU+O{m{?&Szd}`cvdK;;&dB^pXRciHle!@~+N0-J4LnQtBn8Lc z=v*r{q^Bkmye;&k`Coq}P!E7lls6rVBR6uT^tWE(DdxeiO@Ml&N7-NwLcZ7`>!}{n zLas1=x+7D=*R&Htpem|Z`@g9Tgvp~%54MN$`rPhtv|~sTKD|5a(c$Qp{ILB>#qaaP zPL}ASf=zYM9$u&o)s%L9Z7x}A1$yBXWs$XahdtUH+Su>_kSiw+wV=aiZ)I!gjH4s! zJidOnpMg)jOxgPm$H_s?_UqsYgkKD_N)RKvuUC`Y_G(X|7leWtdBQdyFm3yst_H@EKQctI+ zEWj%0*(~%yl+aP}mImz=mZ@wN{LtlGgN8;-+O0Ysspv(#;z2>E{=3K9Fk!@haAJ_9 zeCT0i*ohY0OeC|Rj&u}V?pfcwrQ#EftwZv%i^ZXM%)+QSMe())v@4+XQsj;;4yW}x z7WxUWE@D@}04EqiupfkwB)~Vev^pkBkQBum9C4MSEyt!0+?G@a3Q<1wTldN($EQDA zPU@_ex!V`C`D0BS?J8Ly3`EN&LohrkH=34u0kjUPBTz54U5Bb`ZgYwToOlduy5u1v zS#sHsEgL*Iy|>gSXfpS9kKb$@m}%c9f_}aBv>aQ+2%_;mcCD>+WI1sDE30O` zwop2{2tYMAE)WL&$%llf7DCj~wZO_CzkddK)A>75wUZF%7tes0p?FG`76mtMM4D_>Y^wYkmiI!^1(|(-?7}|3R@l#lay;EEYAqviT9DX zRXgvQ+cYg*&Ckq&IDpX72wLG*c`hg+NNY$Y)*{sgBgORKUAC6BuXa?zdT3v|V+DTY zZq{;l1zP%n0y9dRngDRO&xGG`jJ?Idf@;)Kt!eX$Qgrpo@}WZC&r0WX~I=z|wq`f$e9Nj1Jbif+>C1ry}8~RwoN?@{XA;OQ;<&!q9?h^lE8-CjA z;nZD<4Qdr|_V@rzv3Zu@uVfqq(Z;eEot%77SHn_UB>Gcu;5fsX%>+bKm%Y z>T-ND4Fv6Kmka2!SUA|&%U!%NVE64+k)Do{pvE&a088?d#3$+Plo=d^1rn%LgvGWO z3PxO;N+<9EIUb^IAya!luN)veG2*uJme+JSOqgHzmMitM;>TpN4d^4-QzA7&(HfGl z`C?+c6qg++K4rEH!7$pltI(FrQk&fQNlpfNJ1g8UEk82W(n32GRE$-LodiG^Ac@^z z-oHgPwLB^^W9pY-B*0>MM=)mn=ch(e17bjwg4#cCqr~9a@*=|!;vu6d>pEQCWY@b} zav9N1N~^3GuoAQm{ks2~=xF&CE}1w)ENQ2Ns~Kv`DJ(&}>S!Pp7X@wr2#e$)qW(7J z8YA@BURV(DCNwxSfQi_ZrZiq7sf4Z6_DtQ)HX)R-Yh)ph=PKi)C@R(!Y#-z$8dC9r zzfi_bLt4Ziv~}>MiyMDuwG)%-nEZ-gOtYtMEv;8=2z`2M6Jy}G4y%(yE2UVJ1EMU) zGuE-wZZD6``3EI>wzy*DvoemqNp>#LB1@p(Js8TW2K;Nbz->N7{xFb+_tEv+wS>*u z7j^leQzN1fXABfDPW&yhGh`+5b%<$L1z7XnR2VN=a4UUoOzrqaAMQS%__+IOI0B6M zWtX#t7gYLZMddbKu$o7Q;7 z2h~lkc92_5wT?*8Wy-VhL})817;EYn7-yvzD!%!|L#6HapBD-ZbYg=RdNMr zB>pAwGXS$^eth$;Z5ahu-}wd6RMT#V@0sE|Dti&5pq;I9-&~^DmglGnTD~^tk5{{q*6sCpZ9djV3m35FTl7*Y#1oi2_FN7;$&wv})9T{M85jlht zD-(W!5Jrm7%!vAD8$jB7d%7NBtmQpfdfIyufLKnGbfVIBCGO9QWM|+0;AtFP`N!4< zz+uil(_#N|d6a0Po4)Q-xi~ZC_WX|#OgXo0g?O(?thUfrKbpg$w;flaM=WUMSlbuZXc$;1yzNs*k zr+a`Mn?A@o$=U+p-V4U}oT_)Q_dp5pDgBBPt?B19SwFMSieISkH5Q_bUG@F`nVvv` zNd;08FrlJB98Xewl>csNL5q4KFs>G63TgVh`zN-{<9$++!@vCbH0hXs?OPgK|3*t* zsolx-rWVUtt<*v5012#Y{n7HInnwK_7z`eALewzK9U^M){WY{KHIM&ViMYkC;f_P7>i=gqQ;h`(c5^)5AK)k zgE=0SX9IOCM9`^AzD)AhKp^bIe06L(m3uzxag+)nB14N0%o{9wT%!5rW#qaEj2(NL zCh%WW))Dd&C+ypb6JsW;mUsN^Xn5XarGS&^<}1C2(@NM?V*&_@V`5A$&E-G}?7J(f zHb;NqVISmI!z^R&^-wqbk+t%QWFi-C78miY^)K!gq z*7vn_Nh-+Vbh&Ir-ZXjymo0!|HL3M)8Vx09>>aiXW2gFv3nJ2IQh5%y)N>Cu*hB#scsA zXu5}n^d%CxbEcEpQOH42+uP&|tAyxfu%PLp1GNCDQO7Wv!bTZB4L}GywHp+aE zU6M48;LQZ?8ONOa0?`KI>hH?^|DSX!o{n9{Dc$0XQ0`*nI(YItLc=CWo zDciEZ(EL64TdVo?jldD|@}>f|Cbcf~rA9H36@%zBn@;jz_Ny`aGr^d+aCG{-HkX0y z!)FW5j82j$$W`ugfAYIo(-v?m7PFnq5UxPgpU}}DUAGH{)zvn8o0=u~zGtS;?-hwu zWx!zMDuCk2nUq$ToF7#yEF)i_*d+o?{pu54F)kqzV<)I6-=qva{j+~WclfNPS(7m# z(-IioiIvnRbbf33MSy2O?S@pO8EUn_?%~o^S!)Zxjv;a{rsKc;Rf-20ne7l#aV@|P z7RVXyEM@ly9vdF>DGO^%{CRDrz``mP_8uso$N}yk{ zN#tvO;NRxb*7|pudlwzq*?L=Ft@$3rDCoHkROqLN{PojSy&=8w@cKArWFxqps zOYak!16<)a3S>4VEHcS|90NCNE=H%{sgHgzz*+bX$m%0o=x(q2zzDcc^)~LY;4)ZS zYsY5s0`Om~lvEVGx43ca!fCbbKaIyPD0VW8x56eOh ze)s%q>H;1@*A7lCGF%p#qjpk)qgZ`So$hi0qQ!?V?g~`^X;x&(rrP$q8kL#>YL1q2 zj!+DD{b_OjqW*!I2o#!uyt^HLYV}jypDa6E5d?2Xy1H{h-f#%5jmg7vxsu)!%H!W= zT$YeDcKkYdG4f_*b#NcIMqvEs9^G1&v#hLw4%Z1y?{)8y#;$`rML)s!gmi2CPC` z@88Rl3`LMrRHCmsHlQtPZyf=E$F@!}As)4TL54iT){K~r1<7Pf&uGz^3n&5tD)Bbv z3_2=E)WDcF^jZ148}mue>0~5EF90equGIEmTld$BEN%VK;Wu=Zyd{>4!Z!0=ht0BvvRVHXTg=vH5zK$hF&J^bwjsx;<=R1Fr#m=fjC)e+<(IF^ zQ7l!wn-U%wbOcxM;o|eXV?|3f;7JGFF(h5fb>m-Ab;V7KSDuQnF)1<7JDeBReI)Hk-?I_fDbJI0|n_sSxf*)|#IQ!zxA9o*cm`AlkyASS8X zu>mM%v@zG`;{*~GBy)kjnoo8x?bHyav3=lxguTOg+%=URJf|`Z(Fkv^zfWgW(~y8b z@ugz?J!_JIG2Gs7p$EYGhTX9FcfAhtd-P!MqfhAqM2%fU((z>d zI&h+Xn)4ad?}o4vl$q_|c%5u(EP?@a6LYOLGZ*<>t$gc1LyBO^iChq7P~r}ha}-%- zObVUL5qd_&SH5(143l3`0r>~u9mFyw7hd2gNAkcU&Og;ld2tkDG@I3e`dYFSi3qL;Q zHm;q4|jwcYUo&h z7<3rs*U9#zSz~hw$9X83-sA^*$X>WH@GY2-)Awlgk(DKA01<|}+v=$c@WcjM#Mvfu z;cP@(+4SqjS>GPNJz~ZeNe-?DL?k1==#4G6_g4Wkh9a*42ro7HO%>@o8_PZX5U^ZUZ?hH18}1a&^x|8;}}?p&%m#UR5o%`gwtO8f_hUJVKmpyLZ)@sdF?kl6}g(>t^15Gt0Hh z*SVsOVY|dCDf={E0_-u&t&CUG=V!&=R;fP8Co@hXdp2lIi-}YJ zpd6LKSq;|+^|po$M{9Ul^KoU0>JZ9*3GDPDxq%i<}vYEs3 zcWs$a0Qpv~3LhwK0IV}HCGPH^1r{-#{@5SaxF`NFAwRDKb9K5eJL-Jtb0RN_bKUCPEjZeDdLQN0)VgxG1cn+Dlt!!g zU1TA8%?0j8c2IHTl27HTe@HS7Dmx;O;|GSf3AIZZhlWpbRUQ2Lk3yJn4tv6y6{N2<@U@XT>C+P8Irago zj0YKOfit4%)cEQDk~epkbJF+w89~*tW>MYjDVcn6n>4=TT=K>@QPDGtz1or z)NV~g*9zcHQR)@Kv*!fSKq!nMZC!R$)P%>bZ}DrOSd)_75a((obMpOO1H8|tQkt{l z3f+DYElPmt?Xz)E+-HA|L5R7j>jAgzzztkG7J^VBSNVio841cN}WInc^2CF6?-k zHj1=(B~^?NA+HeCM>9F7kILu+DES|&`?-=A-6c5|%&!p)0ObdT>tF(| z5s}DW*rlPP*Pnq=!5b%FRWrXdn(9FU6iI_*iTwNx{6)>iH+-;Z-{ueFmoWQALBHZz z>$;>{6N$5r9cbIo}SiYnG- z0`+&8i*J*yY6h3An`lQR000T}L7O5q2ra2HmBR|_YjI=RWNwV6H0+gjtBZ2i(DNt$S972+0lP*kUJBXJMHdi@9oBeK zUQb<+wf^K712`Rv96zYPGzXO~1!;`6%d=&9f-Q-(qftkf#TTa4wW&XZV<0UdM)8bb zf8I_m4JwHQ)fRc~54dAq)mu&oVUUH^6%fz& z+#8faj>mhpvS*k|9hBDWHa#9YUa%N|UJ0LK4I6JBGEuJ3pN;;;uq6(w zxqu5~Xf^+pHG1Z z#^L5qGd;O-6K&$!b9mp$Ql2Puo?*0625HPv3p|lB+Uv5BA%?fY{+=A<*n;m*1~I|j z;$h6yr6$o5ARJs^gXKAtgB|V?i-F~B-1sH3u^tcHO`Fmb^5qv4HU%YCM=ZD_3<=C_yz z#bTA1j&GOJ@xZVweL%s^Q{%e9iYeOT(|qGK!c$8Z?Z`8ILfc_-q)_#EyqeR7v`u1wK1?AA^bY>s-DkPBo(%yWF9%M_+=_V|bf~$Cq%z zU=%6c03Qq_pK4j#<{f7=ER0Vp2*{%2uq>$>hQRCp$u#%nQv`Bt##of3oaA4`^T z8*PlTZn$8`qQe9!NbWm;tcO!=@JMrXxY}Jw#9w{nes*Nlnuz@1RbfMp=*g1hnT%8LJTG>w;t}?$ zF;#Gn45Sy2{i=~|QuJ)T4#L|LD|063tOZspw7$)OGV`f#Ks>gY=iq@Ebqh48(ww2` zI~GTe%S5JzWM>yVQCu4WXA-!g)veKxh zkm{aAMPh{$t%UgnZVILvaJEHAvqI}o)N|u9wT&iA#=797e+V<_1OU_0ei?k1gX^v6%nYh${NX5x)R>OGP6FX#Tj0)=9BNz2Ohi6R&K zvCcoc@$Z)UavkXDs_sNCb@0V$w8F;4Q7+cgJTi-SmQXPULYOL0hRg{49OlwzkbZ7K zFm>I4(I3jqr*wS!0<+%B8b_S4zK*n|eotH}@2x@sko_^OWd?~YVLfcc{GRa~7Zlcv z3PT>n^9`Xku;8`JF7i8k=E+qBps7cXI9=;2cz1jWJRf}CePD)hZkbgIjT}SNVgR^5 zHvd#4J&gL(jXrrwMlTgi>oT(RJ2=yQ0i+XS*)$3;nIVVew9FH^{t&edj$G_JNABvR z()qOCz~Wa5;mKV{X?i^bh%FCr>Qw|_vd5J#lo2+8%g5RUukrYawr#f|Hi23GQX1+= zTy&fS#-y;eNo~HJkyvN!pB*!I#U06Uzf>V4w79^pfi9qh_ul)cd562D)vvXNJUx-%HtWVSvzH{~RhATbX$1EWeC;(glToS!@Iv>>HrZ)yK+I)YI$`&Ns+z z?4ewUVaB7m+W7oi5`!tzx$KYyd^Y?yE}TB|f=sbha?`o9Q99cf2X=VD;-Cgo9mkBW zMo4DX+U4gfETobx@_r*Ow%diPtc!Fw`Je|n( zD8HyRu!$%5AK(^pc%4C>3ZBq5$2iofHD2}c;Zy?^$AtyG!6VR@A<@&6pHhu}c{ZrYTIWbXf(75%~Hz>MIeNE0YjTPnPbar6|U zD(P4Ns7@rM04p}pkOWoIt&LYixcySu39flpKsqnZbQNB1m7=*|w~3pMF$5{%X5x)q zlg`wJ#LL+2#pUP(IGK~Pz^j1ds|%2ith4a5h2I}FfqVDXj;$6OS@X-?7-9DaP6^x9 zEdQnfmUm~igjAkAJnvpwb|$oe0007(0iQu`U*=RGxc$2FBpL1jQrWBX*jY0?(%nnO zUiO>MmnpFtom=nNE&=pyV5u-$u!9myBA5&7p?w%vR+L&;k9pQlPL{LKBUe(-9dkZo z1q}OH#_+>O+r_yZU+GU&99u}h|7dNjj9F&Q^95L#v9I%+cfqYK3$Tm0$m+0o%4OU+ zV8@fY%E)HmM8wGtYkm-KsVp!XCy5W2k}jUfAD$b^tkrE$e_EVItNXQ!f_Ga$F1nHA8e&U_1qi1}4$WzVw3K zFnwZV_9t?t(gWvxWKZb@k~!JUL4h?aS@Pg?wP;^AK_u=DX2X;DjqMP5%7Skf&*?Nu z3pmWQ2^Ide{6%WtX=5^ZDB3pyh_yfM^cdkQz>}ZG?)FK0ipT6E7PnwueXlfHMV{m_ zpOde&yUkePZ+(U*Nd<#Ex_VW06%MtaT6>r2TL8mX^?Fohm?pePjEK5&r6-(@^_V%u zb~Vxf63IXzDP0vqG!iUyu$8}sY39Ly#n3&e%sEd~aq!``Je}m7&xJP&ti~^2s=?9# zMl{;~R8v(8EiQEE18rDj^a*tq-N4qBU{F}AMl(;RPpO2I77{12hf6q~ZHI^TngbLyyn4hZQVP&?P{%nXIze0Fe zf%6bZEh-y#%S`qEN7g)uX}Qcv>bF=rfDZqLt4su`T5mOB#_fPLXgc>RlUNXk4~m__ zW%5l>F^~vaO7&lOP`u4$_CTbgeEwk=a9CiLlCQ`&toqSL&`L9Jp#Bcr^oy`=GsAfj zxeL0L2Z1)6Q$+Jz0DVOpnbV{&$@#u+`%e^#qeRVF=3S>GEp0Fm`W3NU<@@_2P~+Or z_%)*&TT4b_^UA5dbTGS-u&?ri+wr)!tpOb+R4yS->;xVfi`BcTzo~GPu$z9d zOi+esT@nBMWG|hHe~^+Gfz?cES1W&W#@XFspU}U{!RONV{B_~d^dw*&ueuUcd@yJq zbkCkdQWW|z2Gd7RPB^;E@FvLcqbuhx%Lo7^C7hI+%B&CfB``t1=vvmim%YS1E+TnL zC~^@D12z9Roa$_SQ9eUFJB;-((701OK0Q1PC{DNY5%OlcsM`WIO62yX(r#KhyEU*Q zl5z7OP-^1fg=lS#bUuQZrVnnvxU%?z9mKvnl&4-8Xy&X(=YWBNRB;y?f25GYL=$|( z8RyfFg#MGqUWNp&OqS1MjW3PaZPadFW`?JHDqFwzBcT9CK)Am?#d$0lV*uu#B%~>h z()iKI()A1-M`9$GTGpb4?fCOXjlT=4X^bj2N1~TMTbjC~1uV!3^j`Cl>o^NtqNIH! zG3AQZ*_Dq*R+TlE@^4RB54tNM4!C829{^U@j=SU!5K5^sO2*$|ezz(db4&+EyI&cOKjwAH9;)ZvxVPc*GQSuuXCvAZAL3q3YxE9-BOUIg`zR zRbnB01SCIxp9G`Qi~g^Pjt|%ER?BuklM%iNq6c9gwt%#{W~6U}s%VA4QcwLClw3+C z1vgtJi183cVrN^H5+nzV3bmaMZ@23n{T;4h3Ahp|X$b$a0;un51#Fq@8TeL2L?NMg zAUW1kOyJSxs?A~h%j?V8Yi2i~cW8Ah1x*}46+CE2lEb<=GpMFcCo?Z`{aQ?Zjsy3# z0E+%QK9?VJ<eUxr(xym2n-lkOX_;>#>#^IheVOC-c ztT=+{yYHenKIw=1pyT{RvtT`cY^D4x)o@(evpuJ2<_@LpEi+**xXUPz>j-5O1_5R5 zQw(+;Y3eFGIiR6g$%H$nL46pjAnBw?^IWAZR&QZ)BKNGwNCcHetq3bR*ms{NB%Od8 zQ5TO+Suw1(d2S@-3FNE3B@c4{bmW#&(|NN+bF0v*VupQ$H~c_l{gJ5}x4I3Bv6*eU z9LSR4U4u}5ggHwmF*96uL$tBm39B zD*OXT5dDQK7xpKUmh~AT`v6JNS2ShV?J6gi6eHhA2|Nq~(+%I6pO!?`3vd8OHNT7r z1Z1;NIOc>YhkQBl6Q|seX&q0I#51yAEA3X_E+n7DScxBLd&@c}<*GrbHnnmbjS*pxVC!0IGfxKs2x)p0*(o~i58Gk7inxu)xj;V zQ%@7KCtGL)Cx8J>52S$fys6c*{@1f#H7O>!&~H#Lct(tsFu7n|!j=?3#yg?Ef7d#@ zUr;unrkF`CuNUMDxA{iRGvs5Dj+D%%R^eT1H&+8l*K<~}ogVnf?4ah@&z__~${awU z1$VmM_6nl96UlYGoDT~_Fj-n!Y%NumbVswZ2P|oI$TUNBiyHf*d2+`zWUSKFuH^Z# zkmFeG*GENsKxa@df>Xo`vzR+4;xo!On)0Db1~G~(5AOw=a#KSXlTSEQpmN{z0&op> zpaiDAIxx@%P@UgL*iTK-xa%4;4VXk!!tqLlCwd~oP!_E+ZHc2Ap|)-vDZ4bvo$>%m zxlO@(o863imx(MLpGOse?2Yq zUfn$_ssEyx{O0}AqP)Wqn`m;_5Ss@-+q#* zKW&;G|Gvim>$j3BQs2XU38t(05$CRWR$&Lv$?c`<^_bzxT5QGtI?}#8;n`f|(KRv- zrt!SYqB0&>S>%&+8<(~^L4At*p9X);ulbh7Ip=GS{ZCgW;NMl84ji|2*sb>m^aRtA zUf$;AhDFz5fk8DpW6kV|kidL}k1{WqmZCm~^xgL~Nxt?gTt+y-Hc|pWj5x@DT(uj2 z@tPdmL=Z3Tic=^cd3b@PCV=F;qZfNDXNO;IfgUrE6u{O0@Yq&&jFrec(3tuMcbGQ5 zMLJB9v_d)~*W0iw6Kqe4A2YIC4vxvLn9hhK07x}wDMO5>pWc74)fkrxQ1yMT> ziuzl_bSk-b%_K5$m@4BQRLrU*tlB`2Gp2^dFZDL7j0ZLzF7zjxdE0@mPiVT(?IFCN-2Xm!)#~$MF|#ayZj!^Zj=iLG!p8n!~DE{yn)UrF%!_HD>`*M@e5xT zyev7;79=U)Zht zG5chel^gWLEt;1`@eQ-^)p+B~p5M@!#%o!PanX~nFuU2B>M+l;Dx|s1roEfr(=sOk z-d$0%)ke_vFp$AAz9HB++$#x&03j{x&Wb>0|Clyf-Yt{<<6JSBD)a85&n1;kMO*_P zB@O|YNN5A_5Hinod6dUt2j&tCeb^{fZ#3g31DjE8Gf4UOkbJN}| zZ>nPtPR`#5z78Nx?H^@}pRiZdaqBkTO^&Ql9tA(-M}*oP|GibE!E`4d6~MgmXuAId ziK|*tCW_a%H3j-}9ACfgUPOgrt!Xt=I;e$au5FE;c{6tcH8OE?NDYa~)pIlf=M9Mv>7TTnG zG9BpK@v{Y@fS~{II0e$6H>s^kRGY*z<7-lQmhT}S7|mDc1y@YxPj<8g`Ac&Js>pWw zK(#hI;j}@L6o@>u;k7%#80$nqv3aH$W12LiYyx6`5b4g6UjuL z$subR3zR-NCj5A&+9Y0(SB}`ceRR&)-7-+EAB;;1Na0d)jWX{*k+?;xV$btt(|dT% z9lYr}y4?(n`3()*G+Ox;gC!tFaqyC*{%l6wqp_RiVGNx)TGd1TF`DZKIKQk9)*VnA zx;8%n*Yhqvx~-0s{kcZ15V1meAsgbAR|}i^q9{$fGku

      ?|%oj(QLL2$hXV)r7)< z6Lx>^$ycG3c#uJmAU!Cv&Dw(oE;_TxRlbcD$_sP-P~%+0`Rcqj=!o-LY?3mms<;nE z5uTU3Iv#w?yWjv)n7^ThzWc5ch+M|_(yMo7G9Qx5w(z_~4W^74?tYapWXQZf0~{{R z(N$S1t)w}opVg{|vldGlr*SaoaRhBW>_6G*xXu(FRhjbz>&23iZvuKct&PQJ>jfy{ z)?E|q>{#D=^Z)S>Zl%+KEXvgJDF&Y4Opx=BWYm|!^M*^)J^A06NY#QzHHhjo0ad7N zJs5cy98gC+dsG3{pL3D|d)yp7=NC81!aS}cp2Q*lWVlrj;TwA*zyJUO_5q)RX%hd- zTL?8wr8%!i4DF!Y5j(uCe@};t@EvKBzTIZl7~dTAdc8i8NrlsJ2yDxWoLhMen=4ON znL2{=2mw&@6KxZHHatMRrt zt$nQ^BR;uO2r7E@RV|vKnPp>;$W_hMHWa0{9gr!eT}cVw{ao{kOUYkbsKe)`w6uh@0)60(h9BMQ)|!=N2jET z>4=YrvEsXX@K93VuI`(_3=}GJ@rmMtFBk-xEMITbD1TaXmpG+8uAFTR9xIvs@7u`@ z!^(r9nopS#JPaFFu*)^@}C{pFdbWth_rX;evG(7D@f^&%EZ@!UZ? zu9~O35qU*aQ{T4v7BT?S`ai*5AP8f>;iLZ ztAm3y#u}UZkCocF75k?{p$r0^S6J}?00LD3pM`Eq|4bifXIHjpkEi__80_Bc0@7XZ z!8fBF9&OMeFx?$b>u^fk$|+A!%P)&MXs1F)Slu$^c!B^Q`bOpG)QfL5NU{I}(gxX> z1jP{5gp6j#v;x*q>rrfo5GgvsDkB^;gIo=juY8i*Aha0=aD}Z91%KDNBAE!jzXCBB zEekT23`)W;ev?F7n@i|!8k8m>j|TQAn+~f@vE$BQ=4%SFh}2{^cKo9R6#bGu_h!lt zFossfrG}cs3Sn|#D5LjWi{5a0YD#W%3hr={#-SG3RC>}1D}*Jce4_WuB@G0Nz(4YG z9dBJ%&RzJ9U0t$Kn6q^g{1xJTty~v^onf2jgekV@a06TRSRk_@oSL!$JdMXh1)quB zMV!cX%%BFDr`YZX>I{U03^F|9@!BR0*)Rpy!aIw0JU9UfTuU@)qYzj%t3&=U=z*wM zbWoEfkK{eE$92u84Sal0=A%KhlfYj8A^hW}(0m2yx`OS#IXU_i{^_%%>TBr-9BRmZ z5VHlW+^|=uNMemJ1uQqc|0r_N*A>ix^;b15ti7?BX#m*Xp6~vZInc=}uFiI6pL)Y% zA%vM1{!}Njw9=G}%zc;a?0d&J5hr(wf&F;g0|*Z;)Sri13u%1gTLt>zDsk!d4V^ZDt5{Mo0U*?L!ALD)k@2T zv?SxJ(v0x$Y?8#~2$c)yW{>K%wm<8&QN5CkkTnVINx7jw!|tRP0B7~3WEz|5N58ER z001WzL7Rs)2rW@Em;`S}Jgx!wwl)>cPBYDA^r}JC$XBZ{bJxbsNP+UcL&AqrzX27{ zFI&4i;Cz@x0Ar*K{G%*W8q2BQ32aw6K_@b?dUUF}?SJUM!W;=Q&~d*9VnepyFgg9Z z-yBOWK8^byW>9UQ;JDpvC;q=Fk^xVYb|w}SSvK8^4Zu!S+X*Z{BS2Gj>MO1sj7bgH zZ}_!kl4ZZ4E=75Nq|IGy914lPK+9!v0Ayqw>KkXSoQARErtVsyUR-?!VHYLa|1>ih z-rx7gVTwwnV$mv9cTvVB=2sI5galF7rE(aI+11fRv-@1=W(fG& z-V?}eX>eYAggDuF3s@a{yGNZzAP}hr08Y)7us;Br%M1af`?5nY8S;>M-1+8_dPkc{1Aqn>XKkgT?^KrKc3Hp5(vdM zJS?@28deSZjA68-X|NP(<6v}I{ovw|cOJ@-;?++d0q_|v`kP@aOP{ni>8NO-^h>*s zWOe2$GC`>a7fz?~r-)+Z=JWKs7|!@+k4{(zu@{03$D?Z$=(GG zub@pS9ercH4tL$ZV#_=7rivge-44RWriOLy5V!@z9{2@c#Kb;%?0rZVwvN6kjaFe? zjw82YIofRgi781i-S6Kfmsg2e4jUDj=e6}rV!DaQf^a>rVHbbgWF~(QGIOG5dPdt1 z@08eI$N3$G!`Nukc>?z-rz)aOo~$D*0Qp@y3 zaQW9-x!A_`kP)h?nxCbdpIbLJ%G>8l{)Z#OZN93!73H`ktD}QweAgL;S@d48nZuzr zOlSWUhRfTS`W!GtY~y(&;XXhfL7e&LE!cpjR)DTfX*@U(`;6fC6riFQ_T&wt3k=FE z%l{?5X$!I61|EyH|90?Ni7RM?z1oIK_2E94bujlxK2IxqHBzTN+q>q~G^qSMDMDi< zDjFX4B5^WYg1a2^DJgKi@&gdSak-4W4vz{<+JTPC!psA_k%c`l?e{?q=(+LL+9ofI zqTWIq%`9qhE-3!howOHy$^JWJcR_1Nf{1p*Hp=k?drgGkly1(6KHm}QnJnt9sp={Q zhxO;shNT%(^{Vo@^)FKIo!pZoc75$4C!Js81UA^ejm!9w;l&W-5PR+2#Fy_~3|P&4 z1=cg*S>QT|%v>o;Xf{Qj+Xb*ib>a8DK_&Q?ZBFQ*ZmNfXZkX-P%iQ3ffRuKOWdbX@~+_@d2%49 z=D6nzwv)0&FyiipWW7K=>f9X(uAqfy$UqN$!`v&`YRp_Z*AvFm&s3b#S zI!Z$2oS(m#7w^|mV6O%WT)>b(_9NZ)ys6=N`)07Z7R6GkuzY1v&+k<4cJgX z^}d0N1oVupy@0PiXlRpRt!cDiPBK#{tBMP{u3o-ogrI^W!FOH z@)IcCX>`6Eh16`6IQ!^f7CcBh2qPvY50_1RBAR+}kOh;<;dNz_7RhtBC8ZRXktP$n zmv(*(y8$9_7wSVpeOwqC?Fg4C*opkyv4U>1F=3*xv?C4L#KSL%C}e8%`io_rHW0`l>10fs=Srn8W=`)Q(3;{xY>@>YUslmQisp9CRrNto+fRglGURq+6V>Oo}X`ydr`df z|CLBY$lLeQe4|4V@Sv>hP3y(fEN51tY|@NM4{^6viXZ-G%$#LzBv$=(YI!Id($A=} zWkl3A3zXBdY&ZoMZ8s6agY<4loHFn6K2iU3X zI~y!3{jw|Pwlnhs+u*dHg5;G0w&ra~eL3{iK!}+mgS9{B@*!go?zbTHX2Bb>({axU z>`#r16_qcGPzETW$$&}zKu;8>oNV+z$bXN*memWo`xe+6Yypa0v7$&auu*?qhXVJm zrYn=WvL2@+=d1RSVx)(=!i$6oWWRzxoNP;#sZY9%N!XlpD`j-gPl>x21#g&(oKTWi zm)0Q~dI`zgoc)>dtj7>%#IiF+qrQl?;)gAYkK4RS9)CSu{gX~vj7Q+|GmAM36#5Sn2GGTt||Jypcm93TVWfYumozgf1nt3kOAm-Hn%66N6YX4bD zI@iaIy-UMNAItB#)7!t_EfA|waU0_EQ4tte zoQAS28(QT%&5uNHs7o->z0KzJJ{f{dxDrG6!(31`av7025ON?6V1yk?3Mxm>vT@JcNuK;5F*SYKI4B#&V}{ zMbBYIuPnuQg!FVR>BMPI648iV=IX)w8Pxz>H1w0(psMpu@hDb-;lY*{bM_Qv0<)ve zv5M7*N-h&)$Z|`fTK@*uy;i}inzX^=Z>yQXps72+8xoC>pS1PR8zf4#S1RWw#T;FIWr>grGj5bmnw`U|dnUyG{#s8!Wz>T)jyarr59|5CJm+Af* zuTpBfKoT!5nB<6YyVC^S_||Z7V<-Y*n@fmKZcvYW zTAjD>Rw$#7UD3T*08I0hMbl5{Jzg++7N)zN0_#Z`bX8q+AeWI-YfXnP!Wl2&!DTrW zIGeY!+mtp*gacF(VW*sZyZ0)5xLN`qB!=&5NnpHo>undlH!#%+nqg+=-&LPHv%0ej z-g}OD?Ow_$Dg$akRoI4DP3IH$h}M%6;i!{OtS~al>3GM3WFa5q7bCmbIt5z8br5S< z=3u1!cEJWY^=pTrKi{BqAc4kDC*rt;Q{RGLa&^QEv1)S|o;@OI*d=PeAWfh+jQd{U=b%E^Y+08#2ELmuBmLVEz z@XEC+D6=-S61J=%1jdpDxCS>k|D?d3SK0J zt&rtT+U1~(kcGpO-yFmwD8>{-+33A^t2-B@ptMPoDGV5dg)NFK~f0 zK%pD|E>69MRI4Mjzp9eRJ$-DjQ&C1M=+M~*5d$$?$nT?ODWsuqd zL!y+=On}uwBcb91=ny0s{`;#AZX* z#!2O61_yc1$HaWa<~G&Z zfQ*KXEoOd?=8K8wD(O<%vUs+Ax)_hOi9oN1B7c-^niH~oTMn8}pR}+;Q8!}pmU>@A zd|H-F-`xOSeP8jiN#&uBl;>P$tZ!?`C5 zW^4M|X0p)1z8hv~^C{b)=p0MxC2*YIsI?H3<~v4Sb7?V%C;R=;ILaOBWFHdrnGo?s zJpnyQ+1GGAXZpmKMdI!)Mz}oBPesQ*mDA?(0;||dRKE17j2#4WCLQ~Sr0A%+`R&WJ zUflD4@`b3-$BSLWFW&Kf@~drq z?fDU{)v|C@Z;7kM#*_+tR&L~h#X?K8TmNmp1Yv8RV>I8%vok6skb4@(bYyUAaUBDW zusK}K5&%?I2MFc_c&N4ik`D{{yaxkoYl#0jYY$PV#qzEB``>Y=lD=u(lkd%Aoi%GK ziAE+Cf46J7Qci~CwchXB9%I8YJ)Gli`*;mQ;2RoJE*~2cgWuP2fxY#7V0g#2fQk-e zBR_F=9L$IpO8A^<;?$av7=PnjH!cL$SY7>bS7&|0(vvmOFj!6Cns+ObvJiUQtH?tEovNe#>D6)dwA&>zxwefwSA*mHTtqCL^XjbUuGv|muuJ_WB(v+U9&tEl(e7}W$K`hX@olm2#;k_b&f@FNTKACPEEg$H5ERPvz0aInf z0+n9{(p7#~ID8{eF4;=GuzRmmsRs)?gK97Oc^ma0E@ETV) z|F3F(NE}Ue{Z{GCFXq5~nAmgA+M99}JKT&kqDGT~UE0g-5DgHCtW3PASB;~t1k;00 zs<8O-Z>AKA^C}h#st|e^b(iJkW%BbJ!W+GDyW*(X4Dby4azECkXiF@U(*_%igZEQt z2?2Hx6Dys|Kn!m29!Nug0&2vbv<10(qtIkF%lR{OBwJ3jFV-oHMe>tNWm3#TXMikE3J;P#BIi` z{3}96nnN^@}5FlD|$XSCrCC0p*P{AB;wQ88ELYRC(-H>9 z3!P_mtI5(<%JiS{UR9Z@CzMvpY$A|CH>K2Z!vgqCt`**XYOqOyFr>IYUB|1ku0C>z zw2r?sSnP>)o>vyHCrfb$6KIu<^OTGfY(j#J^=!pu#39$OZEZMOfIekp>|FP#Qp>dWieW@&)lZ(%pckI+>+C_F1ls3$}u{N1}lx z#^a3++Gaw^eopSNs$q=e7Cq7oVI&?<24o*MhxE%GC{lj&Jy=*gtHF4B_Wq@3*Jqhy zq9AsuSS`u4#mwk!)V*^XaC=*rbHFuMdP|=G&2tc;Z8e{SGFLFo^xY(vOS?DRrLult zt4`OD#&SfBR^)EQd#`s;a1kMGefe*Si(-!_OXa#c*?@E&UZj8T;9l(`hBuk0FJ-}E zu~qBIq3-c2eq+XXEN~hG=w2CYXr%s5w?ct5Fzi&UT>`m9%B|A3xr;0IGm;QG%32F$ zA4upOX)Lal*ogL*?LQTJ_bwBbwj%9K&gX>QU3}`(_myH}%DUhn{+bx|fRfR+tMMdZ zQ+0GzRT59_YqZHy@E(X1k-vBTP7k$W7KuM5BtPXuXwf432?kD`5(mC2G5KkKo`Ey@ z^9V@nwKQy0=A-u8x8_-;xVU5H2NYRQZ5&e6R|C0bZ^1qz6=43GU<9OkOAShlpm_5{l?xs5! zb<(eE4}l0rfMxf8eIV=#gR;wGhSx8=p7p{Fne`(<#ql7xj>pSe6WlpvXSQI* zp#X)bz%Xydr9;Fuql&*f(k_}oUL3*)r=qieo7vGxLSjmmr|T*rmI=pD<28k!K((B| z*}`O}BJ444;Fls z8(0NRectP1x-51*sR5;%$Rj|3?HX5>wj$^qSQzV_T_R@*GPF9%>Z7!P_>Mk&4%Nm>9DaM`BE68;XGcoX3c3|0jARnzwJqy+dc zfX8}|dw>S4=sUn&`4ZAGQ0l#n7keZfpWXL2fIGLkW=qcdl0Q+#Z2fwCI}pdWHEB+p5V5uS=|$|Wfz3e8_}Ai|{*I>!SqK@qe@%}b0Ac=^o*6CU*WdnM)j5fWj7 zj|!=XrOU!1`_bnw1k1&`7z1 z7Nd8uG)V|*i%-kCXcMJ9dy#wD54riKT^xdHAdL(n0ImSsXp!kMP*E-1Dv9oYAR)8Y zNZ^2h!Ah8;q=vQ5+KN{4aSZ*ICX}+^D%R2v^=|8Wy&55)m#C{jSEI?t?dxd%ax5k2 zlgv44rUqzIHIW7k`Fdz(JM{0BGP4I#U<6JO1){^z*b9o5cdglk|CWy|HV zfN@cjGXC4;s!h!T zF;>&yL~E@eNbgAh2v(X^!okzY$)fN5%_dytxwK*qm0Z{}Go8eq2GBs4Q+!U7k_% zE~lr;v5R}b{yLtC5(5JH1Tsu5Br?4<# zgwrxk7|ot+kzf-*57D;Y>0hIC#)RoIBe)SSbLN3AFP!}vvwpciWcz9hNwV+I$s9)| z;Hz*-o`dHAV?t9YQ@%cL7V#0RfX|@3x~~l_MFOqMecG`V@=pAZeSUQ_C%AU8vzx^U z-xK@^%!Qdz6N43&?33uEq=XNeq>|baNzTOW;DTmPNg3PUJLB@W+NJ7#dP# zcdcf-=zh9LaS-3Kk}BObiI?rw{vo4T#-T24)U-07umjKUhu!bF1?6dPXCP~J28;;N zZ0>Ip3B=wzhAfjXm}(z+I_y}cx+MLhJV8-}p><=5o#4&38&`Z0qCsl%`2sYK zcxbKQ>|I})LHy+f2jF@BUNcn=|D;h@?O8>Nu*~4%<*RFgf3hwPh?@DXphf7QhzH(6vWn@Z{y~R$>z248?yxzf}`dE-mI!IM*YlKG4Tn@4cByqFkDRO!kQh3KW>q>8e^3JImv(B{H^UQ&r~hq+J-fjJU6UXsRD?M%YzW+ z3>pJm_(4NlqkdfhDRr;W+oi;4|5%xRHx}!vit>%;b`Zl0E^|??S=z;mu5Re<8?h0< zV1?*h2r3SEbC_^jUF#x1TG!9|Qd8E>sKT8ygow}PkWMw|e{!W?BP(A#7@$&v^PQF^ z{J;Z#hnqG!&z9x=xGJvSH2* zYQ|mOUXv;6A94G7?7Z$JmVW?)iak^0zuZj?oUx_1Oyy!wut7{<7ojtqV-~cx#t-j68Skm z1;kN@{haJ+7^8A%SGu)UQHWiYWu1LY;ryq+oK?G$vTU=>){3j9OGr^S#b8IcE+M%I zW4II0^5ID1LwZA7U~#jrOFoB@6&xmnGv=-w?Qg&}^I6GIf(vmE=s$6(OyKGv+8~}^ zZ5w$MJXO>oJ<982MzLI-HPGHp`>2Fqokww!YO8U;z22Hqwt6_c1?mN2>&&as8ka-b za8oc5#y~XX$l&*KrMSaB>0)=!<9Vw)0?jTXU2A!PGLn!n&7cA|c&j6h>~jWBx~IV@ zLlcrvFMa@z6+6Q2tbUFv2qVPLHDJPI#0|*^$f5SB5u|mp#I@jjiR=Hi6rgIXnU$l) z!p>s{4HfD*c^3WUBzCY9G z84e@R@EkJhgb9Z`#}Q@TP$rjDQ|DHB za+j%xqPFs(N0P#=Ve_ls#iM5DN>cw;dQ0J%R{n41Rc+q9O7~+OAGx98a&Q2cI`&1$2;3H~V75v3ixWIDi z)B5fO2sT#;M}U!}Jk)j?_mD`;kMeEDYvPgph8N|gxG69d?H?%|VEGWv_BBIGEt>@6 z#K%t&TM3Ly&tqAtr^mee_~tIhT6Tgi1*UVo0G?!zH^%iTBQ@QG5VQz%1px2zga`f8 zXOZa%tJjHYK~cpx*q&7fjNjMTR9GfPEIq8%(IP_SL>+V2#9}Jhvjna@n#H~UKG%wP zeotnoYBPPb>PG(GK_>_5Qwl2B!G1GKr@4u>0(RoM2kxV4m5gN5@dv5Tl2qB4{zvN1 zBAAcP4UM!Ys^g%RrQ9FX3Hau#*N;v~YmZBm;_or)nkoX%L?@JOiv-O8Sd-g-i5dM8 zCQk<8ouJ?fNAO@L$1S7V>490wRktMB8sMMf*oB~rcXdoqaQ3o0*T0Dd_)9OBCp35F z)Mbc>RMv|4$uZpC2UyLF9JxEfU`n>qR?7D~VD0ODVRHtA7&oz$ZU_o*K zYp;)S2D97LQd-YN#TAw7nd@~s(eI-}>38CR94)yXu5y|Vng>Y+fPoj(>|lm(t~5Fu zZJWWIqd|{An*i6t2rD0@7q_PCzXdfrk45N%6Lt)1a?&Q%v<^pGC)AEi1mu~ORU(-! zfS$30J!rUY{>6bDx!B|09;VROO-ZJEis~AIB*bw95<2j1rv5mG{Gphy(w3PbVLcL! zJaFXDg0I{*G8k_4UUcd(K>$_&Uzlr#dx&)tMcC92JDQZ+&MJbSN&ozT0WfLivo+#Y zNNDsMA`b>q7cF7_+7@FRl{IiwmKy{e?C@qfDC#Sni-hbTb2YbeB`mybWHu7e2k8AM zTQk&v{qX-wQb;En^ioQY{|l|_P$>6GF#E31qi5PCr;w+S$^jxj&QmM1?#R@aOlFT0 zV>geiwuK>G-}}Q*#4C5(Z|D2psQ;Rwz#OLZ@(T&-LpJ9=OM^4*`o-?*d>1c8(#u4l zc3@`>bi$nJUyF{Ms!D)yR0BiTWvFTO6X7b4F`rj#*D>96p6|vb0I{#`_-BM%%)|`+ zMhgguc{ySLp*IMXy4mRwozXHd<`4ex&YK8KfVQ9**48rIsnKGn2w3hS8Eg12l|kLaZ0x#MRUP|P!T66&?dJxt zZR*hDl!_ifggQ=9;69?ZOSJ*TnDvZFt3*D6=n&5i|B8t{jk~{;nA}puqqr%C@wje% z+|&fvGR``rv5WU1TQsa+1rXGLBRlNxgqvI!Q(a!Atc0O8fW6QygVdRX!V z(v1p5OGU8=-O-SCN8AmimxHf%7J*dbtUP|?QCgx5Wbir*C<&ZAl+nKAnu-C7pq#{ z9|wp7jATPOQJg8hykkSGE%|wHJ7f>OT+;vm7*0W(s7>JtTB2nz0yqErC&4`NcK`_Q z7uxLU{HI<(c!y{cSs4J_mX2g9NRh8Zww3itZ&EfIYP2Vvqwu^x@CB>luM)ba&hYmmxIF-S=*0h9em>^sCBiO!Zd6f zTs#VROXzT8_DkoX&2)qkOmnC@NLq2RDWIO$;32)B``Cmz(_WP=s8l{ug$S z5u+LJz~?$IV12hFkqh0>mwJ%o>XN-J?s$8hsv32fIH%^SX)2 z!6CNA6`m4;vG=^O(_={zb23x?81;Oj7D+4&(7m?qd^=;>hflN0BBljAN=n&`zDb)V z{*bL`*pYyUzG}&Tsj{0{7B@PdC_gnbYHIK6+G`z9E z1zVA~d5*)C{KB;b(XGYG%v!^X8hhCO;83>lZf~O@_M1J~Ki~H#I_0ZJ5rItytZnD# zpLnqAJzi?Aj<3vZf z5#tg`I6wi1KwY=if7urA)N8T(xj~%6Mt@<8uv9&jWJ8>77})&37Ep8o35^mB10;ssb-XBxtxln#bN8R|`j zuRLmljCxGI#&aW+^7bYoJ9KH`+c#}ig@aYc$Y$PZoy|E=t({4ctldRzq>8J}hwW4V zS0=8_V1i`{H0l6D{mgiL&YsW|GjYw2!E5njBS$p~ODcV+BQ%?rUfxL!*E9;{uC}bY zDnMrDr2F90OBG2*>jWAqaIdFA7dKJ-d)j-V(_6PLnZ&stt-W=5w6!u)qrszu5-FGs zxamqV*jj4nsZZyxY$e8y03`Fd^8MYuTwqW6$w9WQuJ!Yo>{kg! z&>uS5thU=~v9P=V6_%ou|C#E--pS8I%NiVc@V-fFWECw0%f`SS3Q{?6FWZAvB4QIu z1Cv1S2JSQt@^3X^U(@)kU9}lKvJrRt|D9w}#rLcVgh?6T#Z4C%EIYXfQsuDfQx?96 zG}8*l)gQ$?$MmkdYQDYsA5Le{O0ZzvwsrZs?rmD56VVKii>3)VsXuj=&^}*a6JxBg zqvx7uHGfNCct#lO2&h+A<>=<{qQ3RcBQl`6Kr!Nx(1FkC^3}XQEG9Xf0I1R*+Y(A) zE6Hm)&}Iu6eW#>|gJ^|=#SGkQx$Y=l!bFhVDkIC0#bEcT_|uGqgteS@mz$`&VbURq z1Vq8SWg=+r><5H0q0J@gmV~qt+>}h{Ai&9<>6z3 zTXE&R-b`#*74*Rx*Q)RMwcHix%uka-I!~^>z;V~^wk&XyC!KpePb*ZUI0D1(iDS>ztBF7cRj_(wZD5k$yP0ri<#{a8+-)48%UuqUN} z$d4YZ5&yKChN(_M>f0SK%l`|&=N*uJM<#>==Da&>10yK+3ClUd8r7G%<6nTe@;al< z9@U>4DgkmO8fNHo(&^8bbY3lA4&0RA;*f=tl~0sSZq6Bf`Z_NKeiff6UOlm4Z@!2b z6KkErF?_)aKGlqw%)iEePBSesuY6Pxt9z+t){-J4(7MD18BEC9=Kh8~M6yRd+74$f zd(tD!YQ4OCSL`N$V0=5na95Ta&#-`Y19r;_NO45$`0Qav`W6ox0-#7D9%edvKoc>L zyWL5032_SwRtJ?MYqi1Zmh$MUL3&JXTQwsI3D9$z(go9AeTDt-$q0-?99a-#1gJF{ z05;>1Df-gz027CnB9~!Yv3}+tZ)Gj?k#js-TqzN3^TIx!S)qB4u>8q)?8&>j_8YNf zb|@K%?Q4MNtYwS`<-Flfk8%)W)?c~D*sLEmqZxJK?;mTO1)lxNRu5_aKCK#V2j4#pm27NSgD*K^xY)Z7VrjMGVpJ! zja8>gHXYO3O;y$TrN|u4mS+P9+o&90`)Q-x2mjW+oN8I4lqn_2BY>_qZ6d?~At8_m z=`|tU+ z+ec)>t#iK|4KRPFIk+Hn|NK%PfPEb7=fx_T0t~LXy_|-*WCha&A*0h&7jPvKK?sMYPE2Wf5~Abnms(E z>J6}9&p(~IjwQp63n1-8F!=+Pyo`1FAhUOhu;@&u<(VuaC|9zrsVfGMSzjj*I`jGt zc!7&A8=|{vB=IsRB(~DEi;4Cb!*Bte?qbHnyGdIc=6}F2!1q*NCo%|kLss7y3OhG* z;(4bee?su-0|)UMB0n|ggI8*&r-^-M-o_Aium^`SD+kV;sq2PLqQa}D?g#EYp7o2N zD==)q8G>kxSt;|gcWMPJqLYmj+0I^kn$2D_W)vwmzQQcCyiAwNNABG>%Y#hBTSY36 zB>)4~U#jt33gq+- zmS>tmpuMnQ&F+S<&%kym>;{z>*I1e4@%8E^6zGamscB!^_>h+Tc8p#DRf#rIslM#E z9o^3pmpG&gLiX{;eMA;9F|{v|qYa&`xd=1q;g@v*51biz*J zSngJtO;f|BwUyL!{Z7HKxVS5d-6Rd7?%0Z@ppCMeaN?TUc-QN*(pE6dpyQ=P+C>ak z%+u@^{aL;Sqmx0X`khBrNvw7r0qj1#5tM3APwmD6EU5Ue!qpDiw&;K6(gI zb`-S=%s!{u+Fj4LNMbgs6`U7Q^+&x-m0JB_r5Qwdjkl#OIP4)4psxm!~} zU&Is9>pow-y%k=W(TWXN6g$;RB_ghZO=JQc5Yg_q*2w)J)3qSI^CP=3+W9YR%5oXi zc{^p;LRjsy>G;(5>79;h;OzXb=jcK`%|N#fJK|J7r8gLp*_qCKO9(6ug7u|nt7Wc z`rnKCzmcn`;oIMYD0cOFN#g%Mi+p1c1o1CBe4SFR43{0Y@D{5kFB+P6*BGcYF+2zo zs}^DbW?(2XfmkOhB7^j#mAHak0d zY;xqTWq{FaF&Uubn@acys0o#W6GgkW|0XnAqdgzW71aoBzZ;jUG=}48UG~EzLAsyf zw;n?Z^R3XJlP>v87brN?=8-fsCg6G2mMW$S>_mI|`kqE0doCVPa0N(s(6#;|bixwq zm$M2ca%(Yk+AQzewyia9wfk}(H_(o$OheME4TJwJdJ@}Vj3f-bG+!~HrQ#Ji;x$HU z1Vv!cjn3Q=*&5~@oo*lXW)@Z(8p#`1{53`aYjSXiJIQ*4t4Yda|3{pyl#FW1z1o;~ zJ?C`MF#*Z*4@%p97&(Xnrc(}Vl=+9$@AB!|hC@1FT+ssy_I z)SU1~2GF#tN&%>}uHDz_bY`4c30m?f!MWnLD|x? z4P_Id*rK0%?T0X&p+fBp?Bq5rN|}cplzC>$82!(ADS`gDOYs`l(=GefoYvKWYoXhs z0(CR%iiCf{I^BGUXn9K6H)=#&i(O`mJgCg31flG)voWU(;V^y%bVg^>tgN_Bd7Ba8 z2l^947kpg&G@=bY$edqYkRkhfYN^2~%yt^S2u3{VxpaBn`#TSk8=v&tR8$*k`xG>> zGTkKuS-r*&hq16uxt}BFuK+zpr&{D9QywDwhU0iQLfT%fmnXcrKeZM ztRvnkR42AWs#O>Zu)C_!d{d?p8+JeQCoZ3GCA%U{dK8&P=gj`Tkrm*Lxd<}ON2k7X zIe!5Km9>DT(YU{laVU1xXBVVwCoi%Tj#mr0Y&%N|igLPbe}2*bs?SxJr5MrE0x1nl zqeRa0uG9CYv7iv7X56B<=?j|jNl86Nx)&f@q*vn9*nV=TBU}yA zWmXclr2|U=;OCu4*{|d>ZCO*5opTh**NQs>Jwr@JAOHR8vQ(vt)2Hg#yX_cPd?W)% zX#X-Dt^y+*`P?wuPCzOwg&9XL(fc~>*i zS7tm_@C1{@F)tlAMk`ubR5^+Ln40(@Z=U&92tW_I2@9zGlKU{5hIl88vmV^wDpW`F z?dR5M5Cx~0z0Ks8*h-%^CUU|$E%EV31T1Sl+sAg9C2*u_9@vWodyMR-?-`3Ob#7`0 znWujMPwWeBOOcK+7yA07EM8gLZeWkU3`GV3~3t2DETdGo&d@E%(=MT0-Bkd5o?w8j%H&O~g zoCGQn8mEzWm$Hn1CoU&#?){KF@VLM=Ajo)}Ve%x8hs;jciGl783|J+$uTEqMHyp~D zkZN~!CgQB^>A`bzXFzPpat|*v-xrgs(>&!dIfOu@leniCgXyHgZHDf31n*N`IA7Sm zmB-tYKmj3tAQ5?SBzMW{HpbH^Q<3fA`9$@LaukQpKi-d`%x{F^VZxiN&412@ZyeB& zL~jZV(Dv7WqH&!<&o5(~W(XL7>7GMu9{EW281c$EW9AgUf=rNmq#LN`~DYRf0u%Xqgogz_cMc_yvZ zea-gTC8_avv+^#9m$Hd2rRaGVC3uCrdvn+w?al`X1~J^?`>bbg#Diuc3$Y88p@*RF z#74kEMg}#Zn=fK963yfL(pz;e)o1O3@I$Zfy3Jv8^ZiuXnKUp*U}a;k$QC|s zbc4xJ%in}wRKgIxYErvy+UA#{4j1kn^%oPBo4#Z0ai&A(|%YyQ%*GvS5p0mX;Wtcn+DJ3K*V9`|BHrpI8-!Hwtegua?pfvd|j7O z`|O=f8$%A37a^2}^q$yoc^mIqo{Gr7PFv^8H|oy)k$ZxK zyQm)0<__Dmc_V=4;|0oYTXmYomv5LfSRm7V7AB)OpIO0@_n=sKqD-#b&_ct5n2b|^ zmse$P#SfVLDjB7UGOd4$z@CjeU>2aDznBaCwAcn<-Qw>;YAcA~f2f)2SJ4*IR|6#Z zXO*i9jWV0Y4!!0EQPq^XT8s`Xxy*;iCPW?bYw9SEZ=#1cn(VxT`Dmh)z>oiH2+`39 zuzY6=DfuREp`+KVXU-T6lh4E>|KFXH{Lo6dd}!P4@zjN~VxUP%rm4|8xE5G@Oni9s z=e7Vo4pOAeR*v@P%8v~{$R@BHWv|-waKnX7Ws|5=fT1f2k- z3H?afsv`{_6s8PD|Ay4e*|ay1A<2V(rPfdve{{-AGBF$l**~hG!B7&iw}tt~;E(7d zU)kSXXKs;%C(0x_ar;$z>yUL4h+KCrbe{Nsh*raAV?fF?`XC6c*lU4;6d=D(o=+4n zggt4+ffHNoymr%gilPzFeY!EEpMWvfxRZ82Qi!hI{&yY6Eu5{zKkP<)wLs&BR05DS z^Y5b%Ccx#Mlmoj|#mE~TlHNf9xEE#0qyI3D*)x&FNEO~pzdWShLG7@?D-YX?pqx)% zjqIlfmD21R@#C&h*=aC=lc=9ZKugTkLv!y3j-{NPk&qghE{|_b+@9H3b<|df1=q~K zJ+K7IY^9+iv~=rArdQVGu6LdbT$5-^3pcLYQa3dJ852)aPM}_7*xpOY;jX5yvlm?q z3B|FVM|4t^k@IWTkf8+z>cO@fZ8WXzt|NKBi^-inm?e^PYj{~ysm|lM-RStT>H8%h zi!LLo6Hu$-%@$qLtFnC<)&Kw?mO-1zP2mofiIl(yzv&rP(z5u#-&K?Y~E+NLYi zYcZfl=WnxMy&$&sccfFbiJ2`Z(k7BnXr{W)<&K<0_ZA&O*$uQ*elF~BGV1LFB-C|3 zz^k|7Tb0t@K~c79Hab@{s2^+#I#UX=913rbuSE^^Dc)!C$3Yr|5&mIrTfUp(kF0UA zS?6P*AAMdS=-=8zS_cwafSWpC$W~Sq0&?OCM>O5J!0YAcGYhVYQ-zL;rG$u4zh^xl zghwNI2`){i#llh-P1<%iatBh!xrs`}m>j}epdcmQj190*0uI~mxu@Ok%mEbs@lE?j#}{TH9d&Oo#uyf4zby9r z{{EsTyB7L@^AaSXsXf}kMj4VAdFCC1fY^N51hf${(>7at@A zY5(IL_h<}$SPw>%T_HZ)n>}y3u34)h-Kh&am~ku53K!QVIftsj)&~z;3C;jJGNMr% zZEPJWJV(o)n||}qsGsg%dKhDTP-N&e`*ADCkw&F(j&q8!1lzt)gfJEelt&Q<+ygx? z(6zpK5>vfz_B3v3OOkB-YWgEk@b1N0i90*F>W5x0A=7bo)l@fBw zV~O&!adx|Lcg$uRWD?n>gAGz~s3^u7sXGYRHxMf|mzg=K$9rc8vT4+`77$o0(zo{g zKmZEQGr~H;H0ZP;I$@)Z<+^`yvKD{@LxGctL)X2djZ%;6@2%Ylht<`yZ($SaRuQ%# z%0gzayvt9K*G6@w9iH#qUl08`m>C0~hGli3%GY6<9UnEe(AzV+}<92lZ zJG`21DahT-*n(g_kug%Ky|Bf)U$FN)kR%Hh_eAG9EI+v;~0G4mdO^fh|})MUcZ6C`K> z?9!?i<7mq%c<}&o7I#|BH%IZ=c%Z-?U@g>JDFlP!5FQi{%7+{pqsIQMn_rTsmgo`H z`<$RH75&WJ^h&iWKOA0h^Zk{gkC*pGJ5sCTqr|O(aCAG3+p5djOr?k4R|t4)*^^lz z#@b^CT5BlX(-`^k1cb&5EYMUMrVV+wcOw_lmFC}B1IHk-hX$0I`KrS68xQftSPeJt zaCjflK_d?vwUaVm@2U^e8|VajIsR=*ANU#k+-S!nl%H(dQn-WHyqSrfb?9=^y^;T& z!=i3>Q)f4228xge=Mn|b@^&-_@_j6OBbX@QO7TA^2bsQ=X9o2~KyD-08pcyJ(F;&Q zz}EFS_OK#)3hdx3uty(gjudc-HJd7FJm-p+E9SpS>gZGxgh1h+8gt$kJAzGgS(qPU zVgV()5`@yKM5_rv^nQ=InzBGsi@cN4DjiGbvbz%gpw4yxg+oUaLvI_5F7;@DK{}r& zx5>%{>xL4E2@#a&=e;d}tG;>I%4{VTukFnwW;U&iO>P{iamYwezm8t~3JSMOiaMrk zr0%@#@K+nsg%CBAW!=JMvEM_Y$5$^e2t3RY?=T5>YW_DhOg<39JG_+g+^riZ3Uhh- zSc6lP4UT~3CAp=Wt=2l<8f zZP7u@^fTe3tet>|KcVF5j+_jj-Fd=#;&j0R3NF>q<9VFJCR9+1teVZ3!1+slGJFfjqCYw!4gGMY5J%0 z3IL@nJ!*<0Y=FsFlcUEeX2%weWjOcgz3IT*4MBg^Fg24A*QklQgJ#MS37xt(!HLxZ zYyo*aA#gpttdlC<9u%-WRvsT;F!CkK8@~?_PhM`3n_@fd3g{~v-{(m})}I)E`AsM? zDrOv0#}R)!5=o%qUscwXc7%b#sJDaezFQ;p&lVU*B>g1AuGGK@5MBDIqRK-y&Qi9Cim;wJ8fSD-|>2T@9faB(}>wgS+oT9d}8MMG_rgp0X9c1|m&*dPd zpQeWOdEmSaV>y{2_cum>ywCq+!%SI~cmGdon^1c@p}ww&2v;8s(iTXjcPKQ*J)8k| z`T(WpI6qG@EuouV_$nbm)E){t9b$%A`^&lajXgpAc0dGe%969sV7g;rL|s}!Ks+8X zUXhPcB?~Z{Kn}p)Yz+-d!6)`U52b0^bd4$m7y81_Yw+pmSI}rcxCGs@e>Pm47%pB> zvl!F5!95wx<0O<;WWA9KLYdCUC4y@K!Y7=15 zL6ISENAt({)1h(s4(A=icg|ZIYt|#2s;}#(zLEOesPLscow~>hK}6}&6ioIJrjaVl z%#}vRk9HF10fAmJ(+bBYo+7H?=&mxoNQR@W1NsvT*!V%83|NOF<=FoiSKuy5WLjda zJirt%*o`D5i)OM37n`#dz9CNM3ermF;^g{Sp!f8TyhogT`dSxuTe>R{*R6{ngB=1A z&_!Dx1}CnLwK$I4#jdKY(vUKr<(`dEwWZY`q=hg`d1s z)I;$Jas}jV9>jofHo!(@iToF(q1n_&&R{DPT_3n+2)N z2O{otuG;*EVkKbYKO{~0W`Au1e$|NReR7E75nVFkO@~$bCu@xPrOVbx$UxS!4r&6W z6)Te{8^RH!by{3`a3%{PHqY33JhK{WD8Y`ywk%cw+u?k~l+b`d9XE_`%!!-uSFX1T zKK|ZM957N-=?3V_RcwffR4?0B ziklm$WmAgt!yfQU3!12O@l4*jMu6B>M-mA~?J}vU7hKcciL(wdRa!*YbKs7ie&I~j zaA}ajLAz0D`Ha7;K$JqDG1+#Z>jeJ!xLacuAI}ajj~2kBTlz7d5R2ClqC??tUGzWj zTZF5q`v<*43*HE7m_FU!0UJhI9r0~qcEx$a0jW}}g#CIZD_*V;^r=NtCBFf^#Z(@*Ymw zxN-4jVrcCJb3GVhhm;Kae?z&kdQ#|wqQv9NPj4rNPoohgdl+Zl2?82@PF}X-y&tm4 z0~ur)mdcS8Fj7pFJ;PeFLa{IE?r(7x@zr0w#fS`{v}9vy{(KAjZcL3K#uy0X(R zu_Hga;HB$%wfDRz2~H=Iz}$0pBxJ?AH(FyQyMrbS6c|61tD+!LqS!?z{SN!Au!hzA zkN{)4HHUCgT2J8-Z`yv+-a3KD{}LU8>k8lKg_5ze%F`WGwcLzsY%Ksy@Jo(A0E-1< zpQZT#a%p)td(G4C4h)ELFeT<8>MN)ubGD12A+|zV^}9=gkBbi<4g)F#n2y|rk4a&2 zDlmyrM1-sOPg)qqOZ8gPG~iP~ftpZ&eqa-~GzDaeylWADt$q4H@bje$F_lyZ(miWD zLh8IN_JDe>Yn;$?U1L5)MkhWG&V`S=b0TEe;tu5Cesa!dj(}NT{EgoT3DraU7CFHT z2xS+_6uC8*@~fv*$316%P^027$Ni0L+Ec z_@~RG=#l($Xk_c4qcpKr!7MO@sNd}>=%6x*_+7s@&P(}oqZ$bQU6mSk{^L`sljn+` zF7^?yE%`FG7FxgtZ6C4OX7Y=C0kWhgsnvl@M0Gy=mF$@%?D6Aql#%^^7CBZ3)P#*H z8YT-=92iRAl+eQFIK)ELAa`@4kPdtUfwoYy;N}|beW;}#M8MM{Q~c&qf6FnZqDNDP z=)n`(?32$~=UfB8?lC^hKu^kA8%B?N&?9@iYtxEFqjm}@ozAUwNzI*u>NDUpy898@ ze@eWUOmXS7$0RpMP*hiErNZGG3bDf#rL=ysGBIA_8p;2FqOZU{NxRV0@FT>(+bdi5 zq=`hbhU8;L$WVSL3GC%ZfDP<`LVaP!OZNph6=A!DWs%`&96;#KiP8(_s~IpANy+24>@0kQ`THGaTYKxAxf%pIAwr$aV@V`BMpM327?xE^9DaYoj!s9KCIikCEBZ;nDci!%K z(o%MZCC{P~WYK@=B&%b7c70>|#v^y3ao?V-{cQUa7WKm|Os0DNOVH|k1}<2&N`oMW zSGgWDKhogH!X~WqyFWif&Jq!rr?Xb)a3=E{`{Z`scBs6vdtNlC%>?v{mfGTjHO?vw z_Ls``b)1Tm_Q`t9^$@6%8cV0IJQ}a(+fsH_DMNn}`JdjG=vQ<(^U~{$S(>RSQvu08 z|DFm_K3EnV1FdQ1R~`mKI;GyI)d{@qOaF$@B6R_ch$?<4~vRgr}P$7ZYki3Kp_3WsluVlVbH$iDV; zEM>NA(PaIXtD-_HVDUkove(NDj;#F^G?SzDL>$|h=SVX<{mOA1+|vS|7b(d06td32>Qq6gX$3#t=(4GCVU-5p2{CkHSuU7Yo%O$X4Wrx z@xnfv8JU$Lwltho;9mP(MY>aj{>lX>_LX(L>cif2GvGzE^ysJOl@^h=fzFXWvTGbq-eg9u_e-Mlboad%cO|LMiGs(EVV1VNiNFxaw>XeKmyf zzUOsYw}G}so8rDm$fs=m9 zAiKWo@DpsP8jhGYB*Kmg35cauH|}2ums9jUt6JU|A!b z&eS>p&*+W=PAT~Bia@{L@>e&jmq@!ZM$HVT8$bie(B2nRR%om&)gT4OsD=gS{wOB_ zcxT$Szwi{q+WnB5XC5;{3iu|X&zIJPss2-WC*ub3!1|K6#{WL#GJ*+n31n~`gv5eR z;h>;|-^Ld>fIxx#^e%D$uo2}0Heyn_o$&8C_tz>Zlsw7MqpEKFe0(rcM1k`O6Pw3z z-|7ZOryD@QBJBTwazU?TVfKeZ(?9lh_mK$>&!kK@po{^-^9)^bS8f(qAl8#_V%w-v z@3oW8?c|a`Llx~?w{&>@Yhlx+Jd5S-MgGEr#|zPGT47dSF)R^mO4M{y80$vdKESaB z`pqhdFp#y;y>}A3*(;Uil59`zCy+m4^P-Qcm#7QEAH;hc*4@f;LOkTy=tsLe5IuMR z#SJmd#MD4i|5FbG?%=Y>BCF8I8h;)E7=+RtU{yJLS3as`n3isc(x z0+mwH62m>qzHZyEh#}<5{i(73=n84s#drN9uw?p(`Zs}PgaWqPF(bOll|Cvt+Y^R1 zr?|rmUGh#(lF&)=Rs}>@pt5<8JFSeUuFx6=u4SS=Nw-%uQjU+o`V;6qUAFXLfK9A?{=Y+L-vfxv zs(3>VwM|TyGVn#8PD@+!qu;06K~-}KCABalg737P;9$63Cna;&Xc%1ZL5`fs6{O|3 z>6wc^YGUEl>A1WKZ&3I;!U{LuoW1s3jRdg9u=^Q7l{EA67*RKRt!nPi)<4u)R_KU# zcjrKKrDf{76)m32UC9ZQ`2bJT)*0QOh&+|fF zBGGicggYLXcu@MZ*|7dsnOt?FEDGDqZln#07FysU&W*l)^R{XwgsWLg8w8wD(F#r4 z97HC560Jy&hJuZlmF+3B5k1#Qa2l%8uQO!Jv`x3pg=^ZDlB1e;GC3ed;-^ z4M#5)Ky1pM%4rvHOwr&)4Sq7?D*eCXXmH3ZbQaW;q=cy?c^3;o>m7W(s5|jdEpm@7$+%+clIS|N25Rryo*Nh4$o(XwH02+7-)=@fa5}3 zYVldg*-BvsF@&D-N%z=Lcw9Ce>HpvcqkTr(-9>oa04Zs6$k5>YTe_r_V=IA6ytb(T|$GMHu)6L zVf|Vl8bx(H-jO$dqkVB9;F&8Hy#GiOznfprI$>8KZc45glF0VJo$C6!p*^eoq9w4y zWOBDjkt1O@$8WfNl6_;7cX=x`W-rJti?F~0=q&dzL;l9*UQ_4bRGTe@`xW+;O_Q_d z;!9BXP6i%&lcItHB|Mj`gpSH{2%s=n*i z&Lf%b}XUi*2RiR8DI#5l72@Zw>;c<1Vb>!CZmHEXUp!G=+y2qrXC-D9< zU&S8d0lI2Wl+79_J#fT5=WZaW&oa6xUrwnS=Lk;V;=PKO;7PyJJh8A14A^uaU#ycL zJ<4WKnF|B8N1dwB@fflcgsZO2e>h9Kp;7vRMx8@*Ine5Asao<2`&o)Y=P0?T)tq!98;7Wf zf57nSQc#dSXF;4MLNQ2MiSd-hA3mS1S%fA@;mDd!h5(Q_o7@!_XTRH56;;bTY~KNg z-r-5W*mqgHNx*l9OPeTAEH5uGEP42_1(y7qRxnQkay1PBcNDah;1I1#Hx!)Fb=%~& z@C6vp0IaxCGp`iG~u+Us$u@>*OeI4D6tFVWIqPX>`Ai&Z^`O z2k-E#t05-&E$<6ex*SIJY(Z#RRSicszU7v{bE4HIarj|ADtRfHHAT8c2GjZTBGM$3 zO~6ayvb)*9uBD1fl7%Wb&-3CV%fRJIA)DvsjX`}%47_;P4SUa-meu(T8gamNm{JUq zG@{iVkzRF{rwEq5GX}@*uSYv)4+&nQ4PbTSsv}PPU($7R&7v$r3ozvx3ppniE)cqAq9)l2WXOC zyW*DO=ZWS${w8wJv{sl+c{$TiH6A#;2J5 zJJ9NaN72%jZA1tlV6wI)CKYT36Dvd~r$aLdX7Ra94$2m+i)ekN_;x>?rD=Y;N23a+Y9zhU&|90mow?bb>XRdQOegM4)c^?6YE?%7@y`sNIb*t z6Y0(2L8b5_Vdgux`6n<+9P$Z|vMbJr^xn8o?h}4)uN1#M*aS`VkZq#%Ag9UiuMlvZ z`xi{bISzR_KUiTy@hQA+USV1sXU{*u38}D=n&y6)a~G0Kn@fGL4Lrt!7>Hf7?r4?7 zaxk7ye^M~{d>gdbS2sk%S}nd9kc9m@TI}UwOs7oSoR-3?xlO0Y0zgTeR7v10RV&(( zb@Y<$g^Y-7x$u^HebGQ#8{H_|*#p+U0iLAcGF|bg6>>Ay54h zv|DRWHlMmKT`%D*DQMYXYIcj{iNq<7p8$t_P6WCL5=ROTa48gZH4##o1{r-@BOV9j zVxt@cLrC+{)ky{ZLZ3-{xTTnBxd$>2j|$p!&!vNKRjw-@Q&|%hMI9OqTf+@3}p!&p;Jj z=3JNne@Q=6Ay=bvyHzw0m98#wnW-!&KoNn@bQ`XAQQ#C#Eyc2XUI3`isc@6%A1 ziz(;Q-c^;*Sm#dvo>@q8t{!>Ld%|YVF&ZL+GiQxZY+bqC|9J_lKX|>`-?um-j1)w+ zyC8^&%tv4SFzG#D+!_G>{XMGbji7`)D)_e3{iM&DR+WH+P%5{c zO-T#$XJ7T1K51II5;d-lL*I@tnfGsRb<$u5X>Hiu`hexIylHB5>I~%o03s_vo9j*C z52Yqk08tTffApv$F(CTdThi5F1(P`t1Z*579>TXa=qi%VOe2#0vCG+`Oh8Fk3o?L! zPnZ;HMd}`t*DU+E-hyJBB#@JFmmZNpKRfhfM2pM77z3Loqp&52)Z3YokX+Hp=w9k z^~+eV^gx({-j1TI82wU9H$m~To8hEZeQqiJB#+K|u9yugMKAPSfs`|`@2mmXu>aeW z9c7OAsZeIcV8UHRZ9}iRC1F`ocXO3_A@?+z8U5hR<1{wV#gU9CF~T3fm6J(|HR)AU5~(5Uj+e{dx^*+52#MR# zn<&-sN!CmWEj+Bxq}Y1c&4Ug!oD8qVxp$RT`7-_5i$8mpEg<0F{!TJdv*4b%5USix zAI(?tm%;c1odnB8gezT+sYekMRm5bWNA{Xl@-C=(edXp3%ZuyJQFe52)bgF5`ODBz zvAy-W-C0d{#`50f`OQ}PO2olE=3cb2kkaS6JN(+kZ(I*3{TY$!;_;-O0t`BL^&da* z8G_5<%b_Jw7CAu7QNqvhl1$i!0nTLxdq$LnLHCc9ifNYd0lUK9JBA^o8qx+EZEK?u zzx&qg7<+7p+nV2PncpD|ni_ZkGg-r3P(D;X-G!4KY&PBK@<(BSRjaDv#CA?+ASq%! zb*DlklN?scz&kpq^+4_`k~j!STE;25G|~VWj&3;zWLw+23l;|K+bz~<)XjU^vOwEVU7q;utyUS z^-@Am)&j!W$N7IpL|%ls-eN(Hx3O!j)e2r5N4ZyD;Wi0voxN<^mUvJ{9I^*N=Vf3= zV(pd`+$zNX#@#^pkDIb{4VK`5m@m`XR8FA%Kf%#xf5Mt6QUjwSnbcykwdK!jAS0L< zxxGf3gVBmo^l&QFtfn?G{Fd&BQjC{Re=W4$)4a^yb!v2h?Sbx82j99WLL6-7Dac&L zt$D1c*BMILGFCJXX6f;Rz7bMNM`Y=C1~*zK#X$fmJvJ6z>mqBWh^-a4zq2q6_A80? zXd-=2DDfGR+J5W3Cs(!hnnfs139zf;9qz^3LvLrlqn=B6rOvLS@`@O;-DxkkcOV$3 z?s3A>w8g1!;_n=$?CLu{njDmoN~{7OOOBKtu|dMyOCSEheJiUQoA!wG-f@h$)aWLD zy>A$z?9n|DTA1Pi|KOGrNq(Mz22dp<$9Xk0FBuXG+WlSBF+P~maA)Wt&kDcp9?hpy zvfK&81+hETJ9wQEn_~6gue%hZ-UB9V=)vrq(j@UzZW`$>2xiQ6kx@ck7cFqf-9U}F zKM_UE9+wI`cJ*PHJ_IRPL5uz!A%zsi6LYguEQtP{6C)2j^y6=sH}Y){7JJCYp>8T9G;$%4wefGiy*~e3y{4C_BQ|X*JNa9 z|3GeEH11I;PsHxTul7<^NjR2S(H8HT{9R+#qbQ7j83h9gOr`LW3oN0ckp znTSBSY(-@)8XdG8;4t+V!4Ge;Jfs!`M)36o)z=;O4;f;|FSgC2VxLq!KAFJ(;-WA_ zDLQfWdjYI8P*qC1tp*|rL^aR`V^D{P@%p$+dy7iv1BAwrRX(66EBlIndkoGJzDB|; zB)Gc+`j&&PC*+-KB$17mPlBZU=kc@^Ceuxi>97d)P7xxo6K6~omY&?QcAOcxQB<8T zQ3){Xx;5d*f%HcZZ#krXLVaO%C3J^1)t267=RSX!9HT)lu?AH{!IbdSs5jBlx$0jA zBXqbTZ{l&@?+wN0e8R)$%{7q!Zp6}mBf=W~6b3aGVyM^G?GyCl-_z>e@k-5F+EXje zgnEc3IO>3^d3p3R|Hko8&N=Vzn-h7QDb*VKRH`rjt3_-!PXjdx|GdF;L<}DfPwnY_ z@i`~IS+OysdOn!WQbjGy)AoV*Sd8Bd|302kQ>)beZTC=5*s=9D8ZKA@U3z?iPoosg zd9w@{2E}G^<0+zFoRK}DvE@9H&59>-n5oqWSTD@M6bZ8L=5kN$&0^T&N1hX*hB{11 zAh-7=l%1{eHn zC{gw=?)UoLIe>G6KfsFGJI&6@S0cevSfR9FIU6uote<`}#l7lkOcVf&^%6kD;Rt|= z7kAPY@ik=9Mdfpg7cP=kZYGwLFM_x|mtFLTj(;3nqj;SSJW8Ul@iCv&=$IWbmpMs{ zfG_*l>_8t8+4EzF#Z~60xgxKX1x;5X*=(p8vGYC6#v>GsGp>rDv=Ti$*sI0t;gZrB zE92h9DZ~^yZ2 zjiARgPJ_ZhPIHd(imWVU;f6{-R%WkW_<(kw@~Lmh1V629Q;&yT$pt2}wWl4uW*!6} z=K8Z-6^J9WW2gMr4?})9F~jY~+O+>rO2^mt^-Ky(b3qtzMr#1fy59;xj>7w>>3lJm z==)01<_L4t+!-)x`O^S!&w}PD5<9uv_}rUQ8RP8))6AfU0Hn%E*noq9Guhq4W8SNk z7=0YfB#vPV>0Z3Spo~Lx?pPe76QO#G8n8Gt6CPPSC~IDEgE>wy7j`N!)~ckR0tOn72OJ;;H8a2Ycp@1@!|QGZP$i$NeA(6d&VrWyyYsHGgJN# zcV4(hy~>5^=x}Bwj;pqBT4#WUNixy=C<(4@RMhFzXjGf(Q_|KlJz4f^-E`dg!{pb%P(}hmbH{Q4?q01pPb21IMZ~NVFNJsONE5093TjsV zmr@U!1pT{K&0zF_o_x;wjU#P{7l+YkBeo%&>V*f)stzARQ_LgG?-f=EpPS;no)QYx z^V*DIWqEvTFu{XZrsnzM$m|4t3=Uer?kTrynE_3eClZx>BEdBpz(UWc&>u6%0Mc%< z^4j9H#{^-3FJECxA^Fi@3L`}Qi#gLVx`QfpBB!(Qz8~Upb{zulJiaEFi^mI>@t)GCZOaikUsms!E z04a@rId5yIwECET`AZwoweCsJ-SyBVC&wvwl4@O>ZTCc^^8zb1TkY)YA zJc8|mm*Wn#jNYAq(V-{DRtyrK8D}1c{m(Em{`NeN`l=>*zTK!;-VvW_G0-j|5D3h@6uRR zELPBGx6cXOqAF-8NaHxa!@GEo&tpl>tD-XtSp-Bz@zE1#*E0Qf!eIRz8JF=j6qnIH z>3aBS4VIo->QCyWc|KQrj zZTh2L=0dLFBHmb8IVruBess?fY^(1wZGlQKYpPR3r+nS4*6c>T21oy|)8@kJ`oCWg z?`Os_kmWrAquBwdd*gd269|TZR0D~7tL|-n52c+1-&v!^-WNg%AAD+@jxNj`3!8`H z`82Qq6fHfLSllpWhPzo$Z0}$EU|(L1qDd8Q$>hx#{)>c?U@bq$tv;Ol8%&s3xIS(E zFQTME+one<1o-DT{mv;6s7`IBX+<_uu1tC9Z~rVyKC+h*ol0zp1}IM~mC(R%4xzYW zYSm`cfI3sX2+qISWsmwp^}OExuB9c-Et6L_BHXOpcR)Uyny$w#6|Ja%KgP+TGNg5& z;TBZx7y~=@G*~ri_O4-5Tnm}KR2hZcmA+fmUh@?k#=bWobKsWoXGl}cpyrI;r%`x3 zPEV@H)?o3AGHSO+T?L2=>-1h*3CP5)D&m-Ij$as8Q~Xc}ayxhj(5xQ3D6+opfM+;K z@}-VvqE+s)J#3K*X?pccBY$_4I49^~^87TyoK}qbd$!4Gt&Jwyz8(s8FDqXft(k0h zUAj&-Y5nkBEQi0MCjN0qD69yfVD8A<4{cR?;~l>Z?|naV9b@ z?6F5r^Ha6}Mt7PmAhN1jR0C6+T4&;OVDQ}L5vSl;7$icqeT7WapCyrXzzT7vsCAcY zgX=CM(#bh=p54tq<4*XH?I@P0{<8r(|1>6ti*TFi1Pu}fYl_Pai(>`f45Fq$5}&Fi zw zyuVFpj`ACfN_VQ;(jJ6J6s%};QW)(4f%V(jBqR^^y^4>kjq_%% z-GkYyun#8Ff?J1BQ?)VGZ>VqkJ`&F}j)J#J6jB$gkF2&eBC6Aqs1-~92l5%KZ3e!S z_SK5+^TK8CMriz7(N_U}i-CI4-r`QA7_~>*j$ZYhl{bBnJXJEU^fGhN#OQ_TdeCYi z`vF|~FiR0e=%R5XFx~UCZwtKSx+KM+o%BhPv`|vO1VUGVB6#2AC~;ZzN1AaDI}6Vq zU;r{&;1>Q4=B+aObRh_}j#GgfVu7X*sPUDeed<`E)k!#IBqI zX;%#@lD);#kJQ0Df>guR%{2Z4vlTcNQ$h+RtJg*V>zfz#_s+Oq96BQOl(&|=WyJPl zs~?vpyT0C*J;rWbWAB59h|b(Y)m|Cn%!&(Dlq z@HrsCNF9D%kCp`Jr^)tHry@hbiH7}QfcYNyhkSCb)_M)=73K>a)R-gzLp-Kxa(mp9 zI-mthJXX$rl&G1Yr8@V4f`>g|bJKp$Sz9wV`-M4U3A3wtlb);;$y_?<`#C$!bFC@@ zhVR<3ixC^n)DTYwemE`fw1=WiL#Bb)6*0u5R=s|rdSJ(fo7gspXQS`ICV8KrBPxta zX9Q`CG+UTCp`!{cy@p?2D+=yA(kDw4<&v)EHJ0M|z|2IiFW5MRVy@(onnH}S+#WX9Q936-rA7P*XyahE**FvqggmYTeH zdXAGrQ*-mbV(VD?uRt3%Z)3nJsc)+M)!*o3FF-%v7iGxruRlQzSc!WK#W>g(8x>?HMm%!cFyj=oM|K)i%ZvjhZ?Bj z{~VOH=2W`WJv?UKBnWi`p-m;-8D+oscdfcDiTjpii@9xz0uniT`%r(}JV9;p%;cfQ zb*SjbI(od|QX76FBy1YZZ#^S%Qq*LD@e*~A%WuP!RgGIG#5%B2+#EPYav)$%&>=2` zS2AkBu)|O7xK^xh`JJZSSt6Z4zQdh6K=aAxkJT0XEO4=JGxV3>Z}6GX3tkY-zh#rk zNaEjx0CN+j-TvQ)Fa$fc#l#QvZ@K)QI2=N$=^0lPWtwP z7p#?0JXRBmV_}os@{5%2&8zEwD%y{V22?s5-n!NwIz?DOBMQC*w1>z%+9w`gPC_*9 z-BL)t1g*$ONqDp9SlX=8{%8M;e7-1Qd;3NHk)m=lvXFG4^`tl2=NGhS`R(;vQ{$R} z$TGvSJ1~$2OiUEQM^2REZLy4nmDskRe)94iAAg-G$yf(bxauCp?n&qkr$KDTX63_* ztVQNMU<&MW8$FD^=X$7yWMhziHNDV}(jt~9Kws0*N!&fVRCZOGC1M7pcS#qG{khh< zOq`3G@Ao!R{&|CsYbz*;TD2?~^ulpZM2tNM$KhuSydg$vRPHtVoM1)A4)^1P_Tss} zWm+VUr2B(cS6_GDWleM@{F|m-0=TzC2k~BVsaok94Y*w}zBcW%CPS9W~!qD6X ztTvnhU;(qD{L*+8a;A5OGybf7Smy3TK~e8vo!>UToKTRUJH?Pj+D0iP<`Lfb8Bb4flR zD4$$|i0LKQIKO8p_m$tpTN-rhMuo%>(AbXO`yK;!<@4=VY%_>di#i}HmBmH=RES$J2BEW^T zd`0=GkQXum{2B`5;;7G=ep`|1RyfQj8Rh<|aqkiAoq@+CpVPf9@3@plSLRFu7NTJV z4Blfib|BGXV^Q~F$?#6;+BoOk7Y4vu&GKaS9eTbq=NdH&=@6XmmJ7YjmvMxEUqR&$ zURF#+Md>@z=5nQ*P92jOZFZ4TNnIAlnP5Mk$*j*>qb}XT1+f+h@dkoee;)9lxhPjV z+d-Fu0*TdR@`JW2rc=6UWicSJjO*G{Hh0iB^ep)cw-ezrM5e}8XimBFXfl#B?|fvV zu00#N9Uq(LtXa!u`v*(T3Kp$hj*6N3&Ob-_h{3b~waAO;_W+0Ct&J%g{^OMN_pxt` zDrA%te^^uJezj?El&{l@v>Ny6C3Gt&y+ZNmRNQurNYML&az z>zcVSphcrhY{<;pz>;?Erq@t1Md%9Q^w|(#-rhU(iMwj_C!Wq^%@aS|nAxcCRYL|A30wl&;n>=7T|)KuQ1%@=Uy> zjI_-@lNXO*lFUKM6iv1?fRpGsvRTo?27{NDsG&ywX>oe`CXphi@AZ_63wtl#{`;o*VU%QNfr`tLb^zI^#PRH6a;tJ4a2jB}W=D{9 zK2L65LRML3@JEs14L{fn)vx2dj3?z^lrKY za_AfnwfFz_J&%U9xbk8EkEIO1=BBdzoKmFiC1Vsz#}U&!d4|k$Hi=aavM&svRb)rn zZzd^f{K|c7_k#4tD(;q*%byG$98MWSv@dOva;^p)hr0m31c4GUJt9<42GHcj?NMq? z?*2PSXscj}_I||j&jp&x6u>`ImDf4qf$$z5v~hwrcH=aA!n?W6M@k9CQM5#t z+EFJpR$tT-T!Fz~IY}0(`BJ@M8x@LFT=rjp->H^bXw`i!v(lK1S4PYmDe6#wz014U zM5f^jgsM6r5gKzh9CaWG$WW~eX*Fv)09dezJ^2B0TDOtyKQJ6GFvmI{Rh=Gp6_M-@ z`3iBxCdD(zwu*A<<|q_o1+4W$s!i*urGpS?@e}e*nruY|aI66N0Ce;3-rNlUUBU}1 zURTQX@O~jd7AGM?;`xEv|JQxYK|2>V86Q~L?+oN=cZ9f=-bsKh7TD4 zVa*RwLa~y0PN^DaQ1eq2<6IMS9Q<+$7N+IWu4aid%q-_x?%5$1fi1mZbl#;8LzKYH_>5`Ut&D%GbJ?HYJSQ_iNm%g_$0v(zYtp+oltL_`; zUxw&6h+!JoGG`KL8jm^WRXq~bV+0^H5mU`84jUsl!E9pa+7)Ba!Ido32n{gWxUit- zYShbt_~vGf1=?Gn!O$N*8hf#_PMG=<{0Z+GoHd#@w|j?c15Ky)0;C4klgFh*BIIK{ z|9rOn6qJX4LPYB@rKfX|I2+zUEc9OMN+`DY2o>o$`ywsuN|uTh^Siz5@^{$nJ1lhm zXCuE=zTQiu6}g#cjkM#duMq2AS@f=5>pL+8WamrKw~M&9#TOBPUfPZ?7M??2nQwKf zY{c*%teO0ycd{MhXqhq=3zEWgCktrfnuJsXSub4Sa6Q5-e-@Fb7Q459u4rzP?f)xr$i-z} zNR&y9?j?gpbP=4NoMC^Bq_1iu2sIu|@9X(~QnrepA`bl5rH}h#$&&ZlL@4)z4M~ob zi#dZR=NrjRP+9tHW@VJX^=Y%}!Z)^2SET>W{7TpWBOEy32%bV(*J1=HvVZkpVOQhD z)lNnB>dd_ESIoDqQzvlyzErvU;@au?YE}Rxx18v)rR>5{m@W+;aS%hKohdYI06&9^ z8ILozB&D-$rNdYhSgEA}5UmD3yVMPy2RPrfnTykXuZ;D?=SB>iLq-`90@iA4nb*xC zuzUIkVHrb3Osb7=eK^QYw$S1M7!Ax4z!Bs`lq>ap$(o)}-kPHJYdOE3<%fqEwGhak zdDVSt0%{gWZfYiVn0~vgB&7n#!C6KGQzGLxcD>hlExvTH9DO46LcV?|nB;7`=`wOsKIjwsvL4wU zm4Sk~dKs|mhE-2grM)s<9PsLqY#gcl4)We9rH6$TaA$up6Q<5x4VA~`P%Cm0w_sfV zx*EuCEv-ksmNx^HCs~kX!Lk@` zib4knn10X%4j9C9xgs;hk{SnvzT+t!$Rj~YUMNKtu%Fs0BehXYW6+6@Li6JjCiAM< zS^2YqbU6|L22|w$8b>|MTYx12iZ`W4a3j{#dxYCDA3e$uWTQi4uZGX5rOqhXy-YCa z5^7rB!Vg}+UZhGODsHLdm^v9AXHSA>zIUzLQgAQ|jv@#{i|4`gRovbgYsX~_MvH)D zjH!oGY65!bGIZ*oD6Q0N*_zIi$rly%1WeSFH$}h^M&X9(+rQOBmL7y;C)A!6eHt0w zV?o_O0BgV0)4Y*Y49hMv3Lx{-3lHAalR>}atX#k%b))^s3?>Df@zD0pc?#TqXyKTM znSB2v3a)7`W)bHUj*1;BaM zr+D0awRv~Hlv`EjX_-nz1aqbb;B*gH4SoQ!Z#E1&tdW&@8^kgg1Pqa!tw*MJT8@5NR z3^@xqO_$o+0_u?4(FLk5(mV|BBJ>jKr|&4kT~|Gfh#E&|M86pwWX39BV@C=yWW4&T z0w^CKcAAgnPUFwG zfB2?)W-zh~q|%F)Tsnutf2E`y`i(0`XdfaN=U43N)|Jxx-dY`t>{hEgFd^P@A!!)} zbcCVGPi}p4>(%J!gkrPzIOnRajn%(3n3r-@Cx|nm`kFEIM#MFYiWs3TLhxRjcbT=vY#_d zqIHRK;=Hs{?KJ6?vc5fk&5{3a*Bw@^BN~HGf?C1Lx%FPz4UUpT(uhm!6hIyN3eHDC zG?5HZ7Uv0eL#?Bjr-}w2G35o|rXu*U-|ZAS7*qIh4iF0Im)oYYY*}fw;T4jCUCPUG zeGDp1wvifSBC8eZ)MLwzgpa#aaNe41jrQDD`&PnYh1fJ5pab!MIr0>U>#;2AN5+3` z)%A?rPJ}otGO>mKZwPf~F6`#343Tmpc)V3)JXb^mPKTV|M^KUU=I+sh1T&d)1>xITC>QiC1L7X44o4JwMuD)>acwVkq~JwOIxAG znX(r$u7DUU5F>bLtfSM9fjXdG<@J)vM)jKjY&UDWvQTR(_584#2z zIMiJ<^B2^aPx*9nq8eg%CNZShbJ`fKDkX~3s)LJmQ$^MVL}f^*CWIfbjnQGJGr2=4 zXKRIEl9Gdv_Kn$(SIi=dpp7biH$X_6enY4kF=Dya2lX$$!v;%#_qd<*Ti>~K8a>U*Pp^NW(Vhxi1)uudm4|RxY zkZmn99ADwPY1L*HP2vNpq%<4C8K{@oZ7#~rsoLl~^&YCAsu9vW_Gjd7bvsO!#@aCf z16)o{3Jsm>Da)#{$Ivleh_Hh-cm)p+zoSrV&A$qs%K zIbPUp`2v{$6``K2N@W9uo_>WM*X_|fJ6hMgU1B1L@e}3semhgO0}wFF2k=aVux1ne zxXDBxKkBl_IZq;%;8P{NPU3?3{3mHWDhrbgqjjsSWqWR#OXAs3p`ptZ6o~`pn%$&B zuz8v|O)=nto}?!89C6Zsx8Gd^(sqJ(!_Du2;hDV8N@)d_Tdn-7D#xeS27?{R;b#dK z3*c@g=~?EY%S@V5bE7B)7zVJ_RFWBB0ap|OFzN7R2i=JJ=6n?|GM0|fZ_ef-90;Al z+zJ~ejLlW1%toeX=#ORXk}Dvh7eIOQ>(>cz1t&u7U@L_g9I|`D#VztoT(zA2j@Grf zs!mx%70V}+rSktihx3RM?+g-ly_c53(JT#v6%|GW&JsunL&$^g-{T>eypXUSKrB3S zK=o=8BgP?g7qk9o31TYfS7YxPe%fTM%Na0xI0DR*30aUmhWOk3;&pSq*+cKJ1C|A@%86t2B+rxH!W zajgQFV|M$yT3F;R{3Mfe?q7`DVbui8!J^vLN)fmlo8!098Co0@FOLen ze48CA>!t=QD#zS3M3RWGORj;0#$$aviLVb1#*={qCxBugHj6RBpk>@;9(HEx9}DI& zam)dhoM@BaA-=(JJwCb1=uA1kTT`Yuo(zN_w6v!`k(nf`NB`J|U&#_vH$pC8CVRm6 z2;n62QM^LDTlTT;fwaD(Jwt<>iKpzwl#3N_im&s@lSIw3x&IcM=2j$_xx^ZGI}h2A z;ihKvJwAn|6$*))(X!l3z8#wf3%>uD-t&OtOWu4Ee581Vb530h`|t@WcRI~IyQx_~ zh)lrxkWT?zD}_$21T0a=6hPVOqU;BkTV=#|v%4R=1QJQPKnVjAn?YC+$v1EX{F%z)6i8g_fZLJ9)Im{qcQCKY(w7AZf0${l_G14`r&n zU7nkj_aw@H-`H2x_UEG+MtlZ(|D&dsJ?K++edcG493M9e?q zvOw`wGDUOf{=W_S*?LR*V2N#*Xo*$@pW)3e;?M+0BF;%dJlKhrl8yncc55p&NAbbz zq(Al`$CHO^yj42NrbZfk(D<6RwZm*IFN@`WfqxM*32YX1+PuaCvDTqIv}KqYk{Bbe z5g&M>t>rRjRc?|}2J0eaDWmO8W)Jbw=|U?8nmCs2@hdf`^KcxeFO+zIcKl|3zC>Dx^W0#NM%I)3nUPc%M#o^{D#p$pc0nwET& z$+`9?TPM0jZuPIhozyVF`Z&d@(5Q;?%vbho zh{gl%X%ygSx_I=0p(<#b%cvA(8n=3`g!BsftCAKEzhsPJGVk~MzGs%fUmcR{!%%Gs z!}Ija_LAY#=lj<2aF!0p+nXy^up24!25Q(w12N?vkSSswCvvc|gC3wz0CKsev!I!T zGtPWekTsxsu&_BY-?Tg>8`Ro>#j7|`Rbj|U2{J)vlQ(FSBd$1}D1 z-=GYpu>n`db~&VYIuonhv|nQ$Eg8gejSylD5Iq$v$w1RHAVFv?B)%cgudv)UVix{p zG!ex8JrHfkKcs<#i&>k$xps8Jkm?nqcOgn!S(KdpdkX|q%8oQ#!*bYRR|yS8sT9_^ z>A2BOY+mlndF*Z5{~pdBRBDO|q3|r?7MVd8uWFTaGuA_Bw%gnm;umWrvhz9eQcjrw03|m;nhiW5 z`7)RaCNKZb^HP~pKpb6R=2K(}NNzsEyTsia3`)*vOrDjU_L$t30e7m zf*$5D6RZ2z**G$CgCS43fZ~XY?v=n-1tT{LHm64Fm&hm$6 z_=C2iT2vV#DlEd5aE^&*_HJ@weVcA-E{vhwc~Mx8wdXDa{6b^dWJHuKWvVS?!3j-1 z@lBSkxr50TBc|=+hVzv45NmCAUh#AKB){D>1JUmbQfX8MtX^5yQurlPtLywVU8)!8 zDJvQ1*X6Gu$*^RYhXNDw;cH3HD{g)mS)lODs~H%A!H)2_aZcOMN7;OUvdo~hVcZLT zq@1&APNeUQa!nxb=$bkmK&TPWL1-f*zwwUUaz-T^qSaUTMaa@-dtr~$>8I!$(y!vI zvZCgdfAi{2LfrV5mMT%iX4oo3wIYr}6%&aXiRSUNK5#Di=Im^cs=yGc~}*&9eSLb%-p*C+!7za2$?lUs_ATq_*?>Zg>_R>(&PpB^22D5x?HUgWaNb1XcB7TPPHOMo z;{Unlo~}BVx+GRG7Ge{`2CIG8#!{}_VL-rl!x4|fsh4u^?C*6RxaX?D;3}O%HkDGL zHI$;PUIVJ}7g+`hvp?&NHLCg}c1R!lqMN8*bmU$%#7ap41}{8-k$7 zh756wE-h-+YwmB%n>45XeTx90Wfy{y+Z9knvh^)KzljS=&5p(>b^B&(y02uRFP5=0 z&5n*V`-XK~d|CK_ByRT>H`ZH3EeF1U5k6DMy-eX~UL=E+w~Us9tTda(;WB&4x$sg3 zz7m@eoxai!m+xdVrfE2{I9)M^jhcBjdQNb~b@lo_c1=cz3VT&%I=Y*D!4oFqQhq~Q zrw!p18uA)r40uu=bvs325OGj<5fBY@M=sj(2>xf{*B^N`&>Sh9f4OHLpu+qigMUQm z%?#Uk5I}OtF`H;^1X0LP)1qR2;eUbxY|+dI;@W7MlPlV;I9}V#2JlWf`7I==)#(=B zvA~kaSMxF)KQs6r4Llxs3LKVDEmbAX;y3RTLl%?|PzDA0k%dwv2Y0duDcXB8IBOK! z2iqIwp`3w;^WT1j%i}&QE+JBIPJUjGK0mjn7sBrkF6v@Y-hU|b>*7*$tko`y_UsT; z{cF{c$DjW9Bz=y+m3XjiL7Cy!hSa@9jp7&Wt8NQr9fpGd2~f7sGb zhkNU%Sfq94vm^Z?SrcK1Ja(vsh93mJKUxsmZI#wp0P?S~xQLdDIDd#AT&a5Xs8vs` zZIN96_}e|#fxe^>s~WRvBeo9y;|c|`!AGFf0{pPotb{pJ{;N56j)N26scv zH@~j(jaG&M+IYgrHTxO3-YPviDCC@XOvj_e9q6Dum?)ke!F8#7a~t}&WBM2HX9wiD z$pjwVJdL|BPl5pwOQU9(QR4c(fiEz(iPjn3wC6 zo`B&&8GQD-I9>;qzdAn+iJAsHQ_*D0}>^r7GI z?nVr9tL1*kG75<8z73*w-(EswJW%nPc>3 zkQFL1dbY>qh*>(b31C7ATn*U(z;`nPHb)w^Ho%u69@5*Gry8zbu+|0X_4H9-xu7DF zAwspFu4_T(ViLBGHLB+NusO_Kg^KTcn@PNgN>o2;vANLd^if+pJjljc()_t29A3u< zLRhp5Mk1(ORo7a5`Wr$~OE;@aZh<#?Ovnn0C5NCIWr=0*C3n{Dp2*dyMve3&9LX9Q z-=JiHGBC!n!sauWFv@71dUOoIi-*NJi-2iZyq;vC`$n%pA|gzXoo0kjSxN`oE=k2) zr{$y3qe(x2bciu6MaqyubII0bRw5+dG{nZ(G#XM%_yXhv-3;>6+ID>i?^vHiQ3ph= z1_L8Jd;!?zkfhPHwgFmLw1aRzQ^iN^(jd4)`Uy0U3D2-@R8w_}VlF83?V3?+44HB+}XQ-~&7jS>1Zg+XKJ zHwwa~`%_YsTV88_LGq!W4M36+;5BNvofXQ|+CVjIe6CpiKCZX{x9eGXLl3cF&G*3Q z>^PO2&D++#geK)j@43M)jucASOGChJu~3ADw=C%hKvy0n;po@NziT9ig?yJk-bKEI zv#Zgk&3+$!uFACYvPgu~dLzpand9p4y_m^u0hfckXCiG$nEUq*k2-qY zyMf{rv7~NxRzyJ5Nlw>s!|Ge) zMiiYoO&0#y)w+uGzs!?&Y}lQYQgw8om=`qy7*=B{Q^!8?G+GX;TCRsw<9w_HQY+?? zwN0?O_Y$|{)%O3GKh+}yO`JJ>(sx4trmfu12`X)%3#ItQp8{gDK*fA88c!nKJcpK4 zrl3=ARS+yn9fdyZ^p=KUMgqsWYLbwO75vQ1MYG{XUIDBmohFE!P`WhQb|zFW75s@gLua136z zvmCKLCP|e}q5ZJ88{4w1ZMQEd6$owrZ1&1LpA>t;-a_a(MjM)ZIRlpn_-zkh z|5)nlEz0BBYDp4D&6X-}T;c_1(W>Pj5KYs#WEnJO<$>8LX2iguUc61zvf%_vWMg1C zCw8B@rM4=a`iU>Yet<%{iaC99)-5WakBH2x@Rvl5#7F;(!-A94*XF`xTxc{N2V|Z!rJ3x+*BPSGd$@68!DY!33;_-F6uv-6`&}^cP^)%sm5FTY-$vq4%H><0Z3f zH8lMsK9&z1;%?aaI0wY{d*!9ByL`9!XXSc@V2mP?R&ka)&{8AKgVvpc7CX-@jsQE4X$0?r`Yo%0Pm52z>~zm!TDuHRV+j z{NVJmVAKclc%=5}Bcm9a>bLXoAbCgd3%^6B2!qwrYbnLRhM@YKC<$BaqTn91XNJ#b zIS7c`?55N{{MDQTppa#SAQ;QUx6GHlBG5`FECzrPlK`rRQ5Sz{<$SB|>3@FK(!89f zAA2}7m*)^pKIU3~QJ_J~%mbr7&sgSBxsWHVMjy>|S+DvcUWLv08hdGL&MpV*k=n;jEUNT3%^` z_~lEqBXaTsS|6gE5_rDno}mblrFUlx#$CiZ&55RDHjQXAo}2`60>MxhVBg0_4+p}P zU?tUi4sYfk`JZR@{Ck@OI3xcd36@jY+$Kh4Mt z?;#~%W}6FeRL=5aqa*E1g;*)CqZf*tl9{Q1RaT>PbpNzeS95gzCCN?Dh9>~OqDdKi ze(sMpdsn#WXQyrMsZw_;l=U+bu2#l8Ci2)Bm1y*MK=zekOso@5N@t zE^HzYChyIe5mB3sVN;Zc?F5XVx6#I=w2d`O8__`ZC9zvL!$&`~YRRL4x08v-y>@Go zDK2}&q@VkE%57n`O88_=QX%hHnXX#j%Fo#KT)=H(rEm;T4)+18CNF<7jNw*O5Vlfm zR(ZF#wE5?{jwD{@qW}4PLKE(DO_frMsK4F}f6U zX29;>FPfSHc!rpYOxV~qP@{sXBk)z*VNEqi?7F6}hZbLfny~UdAFFYYG1nw^8BI!4 znr2rHyeMS|>kkU|CX&}Na5b=V&)}E%*JUC;hs6HHxqk^SmeydBcY;Ky7W(tMay99F zXS&g{WGzJ;1~H(25CTl9PVmv@u2q5KWq4jOC(gC>c3A@rdy{-}w^Py7*%V4W7`FW9 z2ANH#%F&%MJu(w$m|GapI-^AOv}pD`75xkPuCd4vM{Dt1&%lA9*!|PzJWHH;(M*TB zR5NQSk%8f3+vTMCylAK1W#ZyY-v1)n>Z@T55N~Vwk-ivxk3ob_P6fd>ksyMMI$^?t zm3G{Jwfc{AYckW*o7Xvv9PQ9>d2;6hBfLis9s$cBX+XL!G$Y;4!!yV2m=c;^+=GbK$ZR}F`f zJ=Ya+4bi{_IemWK^xQ^B5)TqGyAXIY=@F2xUKDf91vz4Oe zhRq`71pXh0AJ@E5#rS)&%B-xQCcc!G1xLXLV83FQ40RlK*&sKUPMMM}k_IyI6N60dE~Hn!>DMqmQWFR_}$j4p_i2Uwo`?eI+bC8wX9$KSj`ZV z_PoK*G72j%{@e~uO!yq0cXlo5`ss!^*H8Rf)4VQBkPqY?&z|}*R-07>fFeE69x;OU z;C&rN57rXh>!U(8a}Vn(%;*2&gI)T_31M{r@_*w}|4w2*PXo ze>+e%a$({L`$LRD#(K5VtlJv&4NoxFD*3UYuCg7Qh6s{`Q??#>b1kwiC%_@3JrN6( zsy0#=%k3dC$^Rj}o5Z`t$ODJJVU0Nu3TWwnbMwcTR_h~c&#F+zXMZkMm-uTJ3FK@4 zTTSPtXw)h>KZs!c%14%MC*QJCs;3#eJl0bAjEA9}21sxuaz1)!F|)r1w7Pf{S&7JR z(r{V2DXMw~#_M$DFnvT1Sk&AmZoMcsfj2pvnL3gCEFK&N+n>aZvD^)U0(>2#O4Y^k zPter!L%pYhg-N6^iNM}t4{f57_{NCmw&1_5NnE&-`WaJz4Y69@)sr9jSj@MIvKAF3 z^2CiXz6LlZ+@AMeeDw|sKi!sB2KJ7@>=V#+X}3NJ{&W*o6f^U2e^-`>TT6c6euuOXQ;mSp@gtNOzM%nDsT-Mz8-~ zrV%xW!$6>aHqv{W=UDPwwAn_1UbS4#?j@RIN-RoEFUS>3OTh5rZC1DyVYJ8WnT6D1B<}%$qpB5PYVPFo;I+b*_V@ly zMkgUvwBz_&x?DT@?>aE2Bj-pW*LPCW@qsCC(90Bd{I%$%vIH0ric6wZShv;u~rcN*e;FUZz` z70v%$HOepNwR+%Jm+;gLdlT$sE%{DoL-`bS5Qwq#efq1`fV7t8!OIn($g<$fbX&Cv z#?^aS)TYvW3^Ve2@X;S80hNcOh(U8E3?y)4lM!&IPlIJnV+R^Gl+eQ$>Y^b};)=xR z4A>1rrD#={{nzjyC5#5JME_C=GEs3mgRQJVWDO64<%&p-xHgl5ekegd<@IVxo=r5$ zx$Ex%r)fRATR|#|8X_UJbB$HzS_mH1+5E<>RQeEF<|H$zHs{@72%6D{NJGP6G%XFT zL`ENKOZt7X+^i&MJTqAf;wy}`xK-`nV_&Hljs8vPmW&ZYyy$K?$^@)J`zl5!$J8a1 z>Ab|LCNA#33uk*^f8h`(z9?>UGs*}i7Q9lWCB{(0^)z5+kVC$SDQQ*X0>q|nP54gD zuayPlyYS8JBc}Y_SS9b4(T;Y2-W!DU$@oyr1N)?d#n7ZVyPV}wU_y{X`d)G6q76(g z>YY+#e0pHB?t=l!Ejt}CKaYzm48DsxksXl|oo#sjhKTXfxTT#)H0M_@jXee>xP|HN zVWfA{g*vrYEzV0qewx-$L(ih|W#^?m0T!Fh5lI{b*uTueqeu3SPC1v@QM1l zb|tVXh~7Ex!=|DGgwX+WESq?4pn^m!ZzK;c$%0zYI|mKOLV%4vy8qODX9~TM+zOg) zi~?I>$t8-jBcT1Ma+roIK-DbEEQ-+q@cevR%j&Zw!-lQSddta`bRU)^%#bu@wZ&A< z*J4|@=NtIw9D% zLA|OC8x)uKisdL}3s(S*Jj>x)hXK*tM6LI#`TaIQrZ!`sEkFk>jFZUTyV&+rIyFYA zWl>KX5sM3Ou?@_YjTBgOaN)=A?juP#awH-AdXAH{RGU`;ZdH&*-UF|foG02`Hx0yi zrI060so6tx{o3PToUHAwF2TzY<9HrB2>N>pjJ{}v*yOvpx=#P^TRagd@z zOl9M_Z^A>A7<&kvwaY{RldEJY?TjO8j4LhPCgY}kGk>$ldV9~8NO4)uH zUzV!!VG+j-G_OtQ>66&+i+=zeLwse2!{w{&Ko*vbyG4)!B#+$pUWEeZ0Ca^-Vy zanFKI$nnPSCaDN#>m%S^xI~?3?h9n7?gAHE|eIkU5AHA>=+eTL>9rE zJviV&J8X@IUBS6zvs!!>+CuBppiCPC*JJm?)4zgG&F8Idtg_zYsVRW7F~Oj65*BIq zCV;wK4{c^%bEOz+W*M{8?ktcb%d_l%CNV@p_@smh7+I_I=gR-WZ!PKm1 zLR@l6>kZJz3&1?P-GD?9D4G9TN-kjKH40jW3vP1w2KVEu$jj^qwk0-(;sU}0UjqB( z77%T>X$RJTA$IW=bb&ccO4xqsNW& zQbmWha&!q7PdS>sIbFt|B9-cPg|&~E!h7FD--Ehg^&|PYQ1kA_E_&ha#eN`+;81zm z%M2EiRKU1M8Q$X2U_+<^)F<(BhD`LyF`?1v;#Sap5WHxOXX{2uEV>K`uqqcHsxszS7S!d=7 z)!ODQe1w9fP#!^txKO~jRalfZ0kqokIOPTrZW34!Fu}et-fpyY_|cTlwb#9;p69@a0uaClFQzzczZizhBJ&nCj+6`4zYV;CY zP|wTTaGPZi?N!V382bnip8Y`JiZ-{JtTI_8H))s6-{c!cj^ilen#dEVrj!L;P1T9t zW;9&E*Y9VF%1 zd^=E|1jZmj7xH==TL<^0D-ZnZyP>n{zm>$^EgIIQ}<>v+7HP& z-Z&GKQ_KhZ}y%qX2Wk@9R1k;c{Gxm~-S=P!US!S{qSS$^7dNY*+Fx?qo=4K$MWcK*~ZT%LC zCj734wdkn=QdF<<=v~^*XrlQ!$W#YbVI07sWa2296EIi!S>u#G z5+8d6EB5o3JxR>iUuZjwer=~MjZTCzhDlu`CRGMmJvimT;3QDge@qku)1g4s6alBv zS<(8oC!anJa~oTmceO-@9|8r)QXc`=^c|Q#$~E{KeUtrEqCqz&mR1AeA@`+eS882= zAUCjK*LMLvV#vK*v6QMu#0h4;N{@u*WFzOT4xH59q6UL4c@&+vHQ}lnuY}}LXIBT`OI&piX07j@?l^6Y$XD>7xQDf z8F^9$ho*##zx2Hv&ndBmyzTK{(V`qtq89jm`6)-0%A2Qek8Hac$)(8~nWBb4$Dbr| zINPDI?_TFzWtR`#Rh0BK5rV$La^@w{-}@HTf<%t;%37}y=2pK*3i9|fma%zNLP5D< zs4l}u^OUbb_!_b`+Wmb6h@wA|p&5W3iQHpId@QynJv=q*5WBmK;=I%w&souy7G@q)U1vY6#+jy%_l5=S}OuD zW$Hi^WgyzCriMokDu9Qb zc#C)%qEW-^WvVdq@2;n8mytHS8c;*m&0!CmCD#uCOQ)r=+hFUap2@u1XMj26g@{SD zb%9a|*`yL1!C)y6;b|D>tu(NSposl|v(WoZ(Y0g+t#BI{N# zfzALE6nuz`nS1?pWo_OkmceK?;Nc=(*#Pu9g1ZL^vZli~luygHC_*=DiUShVTA;?( zsGAU+jLA1wC5ZsYoxf{pd|e0yGQ}c}(Q8q_cS_NX#Udk(g_!GUIiz~uLVpE*O#v-w zXw`N$=TRW0>&@m<=q2{u>mjAWNB~bju)lS;%+X@)#5IPe735BM2AteYhGpBfhv%33 z^;;mAgMrZxO`5U|vWq2xzZp*KC^gR%*EdQ^WxFCGvS{2&3x_Q2es^SBrsH(PuFCn} zbQ}S46Jd#KKloWAufuPH|F{e7)u-Aww29Vp5=s|u>uj4=x)>DDYp@o!*C9-Bj-H}ioC^m#`t-Y|QOA|fiyf~M{ z5hCp+UngF(Rs(JB`{ZFGKr9MeUY=~fiKnBQf_ByB#o16%)zY0mbl+QCa6VRI6 zudmOlf!)Zp(9f*T8HT5t&IQ<*E7TLPc8$A1IP?Rtp{`H~t+p+3 zD!S*B6ohTftNv6lcSMVz_sv7ri0Nc7TmRB!sbP@B>g1nTta6!J-QzEmF6t=Y&e!m| z;j2ZKKbii}F#fxjZ?8OW)8$S0Y#ry)MQ%Ag3;&sgp?`W7k$V*06 zb$RiE(~ak@!JA$sRmOWtm2^zQ%KRV_7x|qE-8R5Sr(#eDa?U(pZHYM;-cU%i^#9w)P~#n`vKIe zGIQwT8ij$agtW4TsLFj%y`xl(3i@(v=XNm^9h9gmFg9cu+?+f~{F15{^D@g5wmADZ zDA9Aa`;0pT-XawJ10QZJ8y7~E2eU*aEzl!zd|%TscCwt_Q8Qpf1(jDb1|=U5r-v~; zsCbT%+4u=82@x%@-ZDazsTOz`0H-_O?>nbdK1Hr|KIHKW5s}Gjdd`Obd#I6>EuXwk zKaN`2lB?k}TVC$p#a8ixUMkAbYVAi6;PMh>+5Ik@Wc4?Q7i)2vg)e0tkS|IMLTb9d zB6-ox_zb(!i8NaCWkICTk&zk+ST z^j%MuE|-gzMAPQ%sl249f_SJn68o3x`GwSZ5y29k?L1!AxW#PK^y75o8e>CO9au=Z4)5}M3b+T=&j)5msfVzp1L{MBNnn~x27B+t{?r@5sT1d zg7f@!d|`et-<+V7^Uw%&w67n+eb>WeD)k0>(e3=9OJdIkdeNLuuIoTj-YmE-qH(KE zM!fI)(C3p3sViTWk(*_yJ)z6(jh|tzht9RD_SX=^YFpS$5dC0bV)qSmzusEgj2;@0 z=!!DN>&jGm7sb2Jt&Yu$DNu8R`88f~{>RfzZ7$ASXvf&RCt{>=By6K-h>md*Ltsl} z6&8h;RkMmyZ=_J`|C%^ZcmGOKY3^`gjZDymDK^ep*)M#b=&g7@@K2p*1>r#AMm!VcJ45)KcRpgSPaBd0WA3i* z$Y|KqQ-Jt%R$A>=f5o|>)G6DgQZ;!@+=j4^DSiWALek+R= zU?UxYBVFOhgirur{=qo9=hc~spd}+?R)!&oQE84CS}CA=E3W;)K1={$d-4jJ;w%;u zs|~C>L;m%h+Op7tj2ForWFDuyJ-eXMidjv#s*-3(Jd(zdx{73Bp1SG77X217MziZ9!*wuK$pDNpz}rjT zrR?*%CFccHF7(^piE|v%g9e;JanpWcn;tV}4X5sy%Ro`U?d{vquMO9#sVu6%(IIf{ zfZ0I{eyc;_^;1Hn1QZT)jsY+XV_(?6z*X#&;)kW7Az#&$$Qah$P-*tF7-5J5E--Lo zX+cbjd*$8Od0nA8v@8uyCpn&4;NlJ+EJcxj69z8NVnkg9K2a!)tEqx&%Pfj*2zPza zj+dm)Jv95!%j1+DSBG2H!rR>~n%O86FFIrVhht$oRs{z*aXMbYp+25TgU$uqXW;{s z)OgS0YuOOI1d|*dQtl`T;v)$U`;*6R)zTdhNCP{`5WjaVVJ)34sUvl&yCF3Kaol0& za13q_kZm8=aHhX}*;m_`X;F{TWuUdbIV3RTRz1{jSoI+fCA$L=A8K{fy)dATgHxEp4%2^Bt{3@V^{# zh<+B_=>oRfG`NVk=oz@#Pl62t>W{&X+emAd*ibMYw;pJY({sxnO_|*8am6dox{2)G zz(`?ok)YsQ?b(QR_|t~%j(Y*5cf$ZvswdMPt0bFl)3>xYr8+K2?-`nUBu1n`8687z z98_*?E|7=H)Rz!Wp-rO8C?3aucLHt-(W)M%>I79-4FHIm$%VP9L$lO1i@ZQNTyV|G zuJXi?LevHfX}fNU1O3;J3c}8k%Y9o|Eeed3ACEi_+Xyb1}feKrr81GN!`tp6s_Hvmi5M1%|Rb0z&6v_GrRgQF@HVo!`21ughHvYH_*z9DSa zrq0pE>3&97u?`kK7}ifu!nOLy`XfKXg?!O*D2*k*<;9h6x+w;5YhbAKKNu}>V~Dx< zuXqj~VvS}(LCBHQYJ=|Df##sAZX__Q;pnjq|7_`Z5P`nNvR3$@S*7MYQ`cGqv-Oj| zbNZpK3oIjx5R+26oKgDEudH%p2?#wtfCEk3-Fe#kdrJaI-(+aYMpi4($47y4hAKtA{y2#UknwzlFS*5P(RHE9dU7_k6KG7-r?V4Wr<1p4z@5 znl$GtytR0q-;ghPlAcT)VGwYDhTy8oFdHTxiF|sW&aU65lo4Bt(saC7f2Hbv!pjXc z%h}WMkIBY6g(`0dencqTLe< zHal2oqqk zdF27%hkLFb7?HWN?pck-t+TQnyK2>=8mvs42D^^ncUWncu!m-;d{AaU^$XP-s-E&R z$QuSDS0-FaEs}mPHrOf0%M%47ICl_C@|-esal7O z{gu{tE8Cs#LKcshSo}M_S!KM-R?HiLCJKz?|0ajsC5oruH*V7tc=HlTKfH;hvKfz) z0p7PUT)uH1mou)iA!)POv$$3SBK0YOPb$=9-w2&ml9KL=-Opn1@eVpsw#{MjiI#G- zzrDZ*Rje1uyw?lWRq~1>Y3tSQ`mCLTE8+w>8sxj)p+N$p8HS+OZF=q2_oL~mvdjaS z`>EKwa9VEawv{*-cTs)ffP8)OCn6JvlGQ5a2n>$Su07Ntf-d}tK?cH8jvGV3ChH)n z-uWaGe$RxlY>-a9Usd`17UOmL?5xs2GLzD_-?Y*GCOJ&ehWw3Mb5q_?V1En-iWTNI z@BhHHjnk2BHuDybPzw-=RH#nvtb2}OwPbb+83Q5ToyCNG>b9$NR_?VN^J+Nr9p6Kw zzc>79ufy)W-x_xGV(OsGvu8z0St?>~~B-xx8gg+<473 zYT+7XZ_o@x?!nw^%VdLb&<6Y_pd7qe@c;l0yg`~SJR$iqm;_Jf>;h5=vkDy52F#GN z%*Fb9xE$mS(NY_&*x0lz~XNKY#Z*D8hC-`;BZ3?AUcB0 z9)=JLHW;I2!N=F4iOo`<8Zu(zGWxFSf=zi<8ii<9G`qX~iP)oPT?+9`_Pp{`D-w=% z;z`eaPe;d-y&44o;miSeoz(C@0_seX7Cd{5A?Jc6g0n#SYOxZjfJ(;Lz^vWj>#TDT z^xM;JB2i3KIZ?t{Q>wB-?1%r5)6E(&ZVTO>lEEduXhmae1M6sfN6^LHz;PkWyx|d_ zf!%+?N)EY*>H6So#3hROO96LOUh1yY=_P7NKt_V0cCp~4#dG~~|2XQQwKKXdN*>k? zJtfwaz!)XAmm)XFcBsasZfD}DA^>4)HJzv?8`Ri?I*B=^d8o}mxL@wS*EULme@u^u z99H=|1e_^%pU>y&v4aL; zIA-ElbY}>!Eg2Y0qjAPFVPwO9rc5Hv z41B(6V9qq>U%CQH>6h-Af;W%$Bp6kYgc5I3%z+6G$roW?$_7cANzmf&r@M)E!OY;L zmOQZ~tkKN`yPH6%hN>GJhY~41;pnP(o@@P+d=HIi1U^1MAEKQ5a(NhdRHP{n;Q8NG zWd9KC-REt`aX~Ra#JwGZ&=Z%HZCyB9QgkH#{_6=D#QL_V4dMhK;sdJYR(M6Rn|!(R zxLFtJ&cs8TnY)_0c}?Yefa3>KWg>*TNIA~KU^J2dhV%n82@#v-cF}d8jMTQ7!+vR= ze->T%IU3)8*(C<4w#y}4&%vA=R_}D-?r3=dGk3#PgKoG}&HKnG%G+O8#rdP$!Rsga zeL*~+u`CSlb|G6|?VOgy@c%ILLrQo4I;4cV+8~S=lt1a|*786s7#~L&#SW@M;B@vL znJJ|D>qG=RUc{~DciCVZ5h@(VNm;MdyC?FD@?=OfPI@x6)<6{R!i9#;LM63iK2o$& z=YlLIE}7s_cXsNty(2FQt{E;E=g1IxQ|Z~wH}Ce3%~eP%u>f|A=2{IUPl!&S1D{G&uo|Z5EDN)C%=gltSZ7BP+Ho)a5|3f)Gm_Qa#Yi7(79c*BlTlU zUuNzx8xo?%G6qEu8?-`m==yIXNVXE+$xpR(B_immAd}{tI&KGx5C&AaT&>L#9*u80 z;gIm`E>6x~LyFie@3eZ4d4n>IX9_>PHQAK>WU6SY&GfJ%j$Bnrkv5n)K0gO(C4HNp zK$CmO78*#%dmi%1@y&>GgSV2JrN6gFB~8hoou$qNLGl;WSW1Kobt@;V=hd5v=QZtB zyxT%)gr$C+^@Rqz{)X>>MGsAh`}!qYH0!Bz^{u$aa}_jGjpOYiM*tf@YObxu;-VX& zhP{-8Igsdg50xJz%BpAN|G$&4M&0$%x}^J3IZWyJV#uH43$!F?A-ORTCTEE^@0PO? zHn@~Jm6({7*Y|3w-BvVoC~G*2eV)K9hfcv_s6Aw}%fk8LRd$e74MG=u_CZGbCy60% z-m=;0t|$@J(ek7aM?MN+0~!ZGQVcv&*RLkw%nMIRCB`g!J7rUnWx``|FE%gza#Zpz z#s2I`5%Yuo)js{PT&63Am{(2f5gG^3oRkaRW~3}3`#ArJ-_rbq3l~~TWd{a6@-oia zL(a8#gi(k4ljvs@3_aGO>6)8_MGiU1E)fpP(0AC)}DZ*I6n`0*5k%`h`!-T&ILU{VN1 zBq7p8&=&3(L7|V)IWcXKv1s_N;3D2@3U}|<1u4E;n}X;p{Vl}V0JS{mk!e5bOU*9# znz;^~Zb?_0f$*=a!D5v6ofxJheYFhr&w?ItqN$`yg=sDaIsMJTRZqSm^jSgb-Xx{k zpPo0~EggvJ*`f8Zm$IN2dmTgkkEh-jG7pj&np;~21vRFNDUE4|M(?QHU)mWYABflG z_-|_Z&An!E$9WR(JdhV*xhZ*H(#&J`?}3(~edci3SUX{My>RG{J%F$!1ngDMDVDV( z)c00)aj)M2%Ko#9`|4lhLyZ9_H^>VndO6}4>t>qrx3xqP-j}BCDc7k z2VGD}U~!b;)fyfdss~m z@{%?aycS>n^i*+tK)f>?L(wq7J50(N124TesH|j?q3LuI7qo>CsV5Do=}mlWqB}-R zap-YNi8Y_wMbGPjbYEKP=T$CM@4Ynpglur`)U1FKH(=QN|I75nvQi)OFIT3bEmXa+ z>z#{=O2U57kVAu-cmc`8kCn2IzSb!uQ_yw(>d%zD%cE`lykT5E^mB9iY7kWrWC`4` z1{@3p+#3+S1OHI8qsQB_wjMJYbib?++%U)3$0u*cd1H_bPiV`nAb96cwTS?b#@He~ zkcKw)?-?xpH#n|-(a-Wgk3;j(%=)+~k@9+%z4*PEg2<7*Mr+LY$uw)o^WsRMPOm+-y1N5{np|0JXU8SbuUr@we%cAIo*ba1!<+#!PP z8B4=4@LA70v))z+bIsQiekFY1WeRP8z3&9yDCN0rbA1eG=>^7p`iIJ@>~WLg16MV; zzcFUXva!6TbEjr0;IFNz;L$gaEofW zl3r*c9H)D3j@ktD>t0f&TT5gu4{h?Zg-Gx1HC-<=O6XEs{EC$0`|Q~fSUrU76nXPERy1Z+P$f#t@2(Vvm! zLQZ#t52L$HseZ@8XGl-c8kr^@;nlA;Cu}P=!M?z|eH*<3J_f|^m`(f&lf2#kiQ;N< z$7rMqTiJCNA7lCK^PLPV1~|Ii_#+=Wxx|O*e0z@7Sj(-_kPlYwwO+?-d5pP%ep&DT z6GQqlZxvfUc`msJXq_mFDa*LSfFyW-(OkN|iSW^K>~d@uyYGaR6}8~h-#=l<9lS#l zJi2FJ5g@apO^>(TaTNd~Vr}CfY>82@VT1RDj5g@02xu?7$&v|o9|)%YY^`9I=AG4H z5ul>SDY})6n%99ZQS4i3bQ}C~)m;F@CA0&pdF9w|BkT^QYqO?-3slmu?Q6ypwy9X@ zG6`9~%mFcuFg(X5(!FkZ`#*5VcO6rJBAM$}7Dj?LL6I{75ULHSUg|IqT(@pIuzbH) zIiDJh%rf0#QRs-ClZqt9(#O#;egrdHVo5rwU7+*`JEPTluQYUCX7JrZDGWN?VR$hv zfy&Z%k5V3zI0U%!#h4eOoI7qp`WR@upytQQSxJlY`KD&`!+^J{ppT?K5m zflIX)_GMHecoq><8AhCYCm3DKEUC({uvip)IrNW&PtVCI6VR|O%jr;Br?{$}$ zr9aGlY?i^6igd(>#Zn|Wl4u+P3X%;dTE|b(lLf~F)xa7ZG)@f#m;}ITd=8Miz~>oW zd-}SJQ5ELa&vSeJG8^1-F+NnPYn{<-BTm6k>SMj5-9Y?outol9-)eLH8<^XV6`rwk zFV?q1@r%)8?q?(nMYuvSu_aPe>8XmCI645M9%TI((oeZE^{5xgrct=t;3@)wh@fcl zvs-hSMO~wUO;(}&cvM7k9{tHn8-Hjvhbk*TO?_wIyH0qYWP^di$uFz~3qeOio9kOY z(ScGGl({Y1?K*onI#9`OsJsrvc1SCi5&Xqs4T@u)`na}$F~g(^7`H90W5b7Fv_TB} zOBO@{&b=p#ruXxr>ErZY2Ihu!zjkRnYU>!4nY{S*T&ld>F5F7{V%)KHa9H&kd8ZuN zO>m(nl=}g7mFZXV+`O;&8kN32r8(s;pJ3xeWgWYOmg_5G36aGg5H-eb%^pFzAJC)M_I6UHtbn6SCIRk5k29)wG)c zg>tr6lP(TH)HcY*U)m@DX(iAy!CJT1wi#dhGt1y{J`H7=Vi!QLmDyri)Ts((-xn#w zsA+<_Io1=iee+E^BV3-PY(N3()VN^xBZ+qgGS==9JnieFH|90Qs$U|^n4)VhcwD+o zfmRI4Pp59Lfn{YW6jQ;uv!bhU2kcFMc?{SBsR`hKh`neCX~+V?89=F6;Htt-gjl;C zo567#>o0(D_r12`gla*0B}H&3l^sgeViLtMBD;&`T6YQrI`AljdTwF9+y06QB!e0H z8;>yGv}N?)lt7O%tI7QsBT`i*JBQ9>+;JyHfVrDwB}W2{$D9PG)~i8=hHPfj#iL~!7!Pq`fN-E?UEk;%~S z4lV`_k)(AbKnc0;5W{lArLxPGbcXf9)Uu_%B2R_X2Tvo7gwEjiX@nru@JjEqKPasrm8pl-y{h zJ7B@gK{pMjycAOjACEHQpJD#x3Gm$M%}B_PTh{eVFJb6%Ie{0r>LOMSsXlP%<8HG&=d8`rXn4i2 zmx_sQerD$RHiSJGkyT=Hm+_Y$LVEd*P8-jy!d^7r22{^AwZ9yga8;A2SEt>Gce)2r znS08y=SY`usZN;y4#*1bL`ngk-^^X?CEj1I*GL~`@%JSzOpeH2R4oYmt8NGvWJ#M( z!+1u@Dyv>86P~GZ0xC=>11*w1?jc{z7v(g1Lc2G_WqwR{ULWgfzsJ+X{9xP@i#y5k;2E*Vipxz- z4Xn5@&02}S44&eBr*Ut9DM7`@41^KVo>e!E=PX14uCEqj?QrSx-A3pYh%a2BX)oF_ zBjR^;@L=Tm;7AqJlYhotU_D!gpci8!4+$Ij|L~5T;uRQhG&{zheZW-;Mt`W_Lpe#S zy#c0HY_oj}25(RKKJf6E$3@CJz($B!(K5+hpySA~udi{f_b#go(s|>eA=$y44-`Xe z@yDP6C{oM;$&HL>SPTXP%8ZjByxpsIj90SP zj6FD}6T<(*SXv0w_DIbGmHSclM@?UdbR(5TIt~W^bIZ=VF;TTTxN287=mBX9@@$E@ z%Hazw_k;*HzNHJ*=Ox2kR-r zXGjP8BB#bgNH%yM&T;7{;B-9~bU8_&%VtEZb@!)dQEv@F_{r~z%eNP-J|=xKjPdHK zXdTPiEuwT&M&^PxxwDfR{=1nyG+DwZ60_v+S9$z%5Fr{X?6ojB^nda}Y}FIjj&d0P z9MI!^Ueg{4wXs{Ad*5XN$rDUb+&PbJpw8xX)h1=6D2IU60nk@{NFA~o1uuW` z0h;&bu)@Qxdu-ustFBUIB?_6yk+{d5{i)>V9hXo4lOaHDisz*J?*{^m#y1G0saLwI z4H*fMcAlyjr_bG5H@Ofbkkdpd2;>h^^#)SLX!4*%!BQPeG^p4L8BZ%#06Vjws3=@| z*{6s*u9Gx0sRlzNsjllqD%t=MhHmB{Lkx}3Au;C@l`GjMQ^8}0t{ly+)(NpS`W>Zd!1(wjs1QrkDJL_8~xT3+})qC0w0iAZX)_bp>rHt>DUlj4jIm7QcSgchgeUXgu8d|_2><+Lsys&JWbeW#t zYnQ0MbJ)n`_<#KwsKD<+6BpvimM5@c8lxr4VF=Zq_5`sFmu?nGR?V`jiU-q_^TaKe zVV}K1GDB{cYI zt&S?93A^)CX7)6wK33jr_zwmaWIyhpzZgwLKU<;5OI!$JCUf}%_%JXxX%mqsK7#YL zpv9z_Oyw8VV6cUko*`70TK^mGWN2r7vZShedgG)5Q#Ob#eNxPoU5|p1#=o z&vs=b&{m$xK@`=+ZG9e9a&*o!lH;-4!8`WbuAc7uec`tERk(NwthPQ0pz4|8@wdLz zJ?SydpCCV%8_2;mV`yAC^;dO&s}S!&yyJ7J^LEqbdFOJ#6JbpZ zaV)`MM@!~KQyDpXPSg-xa@oUGMBudVR%JMdvWkw1qC)4IUskdzaat}@lCG#)?vd>x zTJl{evqM95j4WP#Ui>;HN0K*3rSmhPCb)QT$B_KaA_FF3P+m~$L~5iAZb|+i1V*^- z0jgB%7bi#V$fl{IXzk4OD5z*qKEDO5SpATHkdNpmh;+#{DBVzujgqV#6a8NzXBbiP zMD0WJyNkT$6JsVH89wBFWyMF$6PHycXpLyY-gY>pH;ZV$97_V+GpxwS!1id3z~o|G z1^Ow6p~xe4;W5I+`;^NS&RIWGb82#ZnWSaBJf=B{SDjF`FTv0TP7yv@{m)Dp9mE@m z#KhMA`$@c3B`u+Lx8)9jHuK0-#z&fzh7IU0B)H3^H#i08CSH@()ajs(~qvW9g3u(9(^q&#?;ghfz2m_ploM@C_G zQd;%6jvq{XEn^a!YF{T*lloR94k}oOCg1=-AST*s+AX#5g>h!JZKH(c3lXs^VS2Gc zLtCdx3J_n>US#rj_X{@{FSkL|IS5b~%D2r+nMIcLu7Pa~@ocInrL!Aw{HkzMD`e`< z#Pfu6Zre^KSU?p@D9ISW!tvNUqb|IfU$+gxwMe2Ej1FJ1#nuvY*oOPn{L4%nGJ^@X zP%2%Y%~3>PwrS8&M9PXW+c>>GLd$u};Tva4TT)#|Qxi~eIYLT)7AQQz3yzxRq;J_G zQa{`O(*_7@T7{_dqW?7H8kV?);dbWduU7$MgJU*BJRw3@$&O+f4;#{Qvg3`$7!|Z+ zb>!wvahMSu2E4(IExF&aehQv>Vw!54oq`#s#h`Ux@%7;LabgodW(xzb(ImKM*IpmP ze3i~C_ll|wHV2AI8!d!hKXnskF&PuU@as1lA}4Rw z!LGyC8D?@6AZ}Z|4c+VO4`YM~uPZ!oJaR_9_oF8J=##h7f`gd?o$#pn7xOSHPu{!) zc10@9rQeXl>fnAHZ6Z6hA{RT1_X(}8T>FsJwe2QL{w7|$iCTKQ{f7#78EPdHY%VQW z|7U7s+qe_EhG*#~8bvLAEY>Qc^l-AERy4v+*09%{Bop$hH};BO=h_fXe2n|4ePrBB z^Yy3swhdgRc;w#4Y@p{~&<+vb)$)4CValc81d#(L|IoKJUyN!AEzMqK|Kuot;p@pERRKv*y z<12tNzd7kNmsqE+^>c*IcUl?_993$OOS?Hr(7#8f}*+Nz0zlpOwkdPON z)I;bG)>B1k8=*1a%seaB&N?Vo!(-r2c@ABuf>(f$7;4`y0${gmNnUGPE=_qw&iqGh zK*+ea|7edm``{1^c9H~}*Z^{|{9;%F>5-dhS3JY z$;UO$*dO~6r5{D-$+rndu7*2Dn?N=~wEK`Sco1%$DAs=`x+?zX#_F??L5wb) zH1GJUXH3Mg8mA3D)RcHU`UV8Q#1#`=C*9iMQgGdOLW{a`u-?R*cT3B~a@a$0Y%CVC zK%#)VA+GUlSonO7NJ6Pre+l2+)+H03&D9$zw!Z-1_Wi-`uIMo8-6hi8o`ys(mPE{J zSt9(nOE*9BjFXo@{pqxcAxY6>cj!iCc%WWn*vmSowSKFViYsp;;L}fnR#gy>tvnA8 zVvOo01XC+qqJAU@#bT=P014GZ4K^QaAaisbR&jn+^uuB`%`b;dwuyGZRoy9LSOr~ ze;0n3&S~5rj<*W{;jPTw4(s1=v>{98UaA*<87rM@TGd$R)keliT$I`SO25i;^OBvk zcovkZJ@%{Xa{~(kXD<%~^nkkr=Ya{29LO=UohC2=2sz1!t3NW6cyFk;&`g*_wMM>5 zv^2s)^Lj61s(a1g%5}e9I<@t#*7(0M?9BL{97;O!_xq{zc(JRU3Q6e&ExU)%6L*~K zeUpXO?w!XHcAvcE0PjSTTSl^&_`GwTo-Zdi}EpFt2Z+#qo7I&3#={Kor97Em8P0j z!2ecoM*_1^tmJruZJm1Q8tlgWtn{fAcS}bJBh^t6h|C~=8H;U&+Ly7GmNr6Jt&8&T z1FnUIaWVK?{?=N<>5bZ`@iAo;!B1Mcn*0f9Zoryu#1N=9&hCLCBksO}wJ<6eJD74D z^4zC1bLqce>D6v=(b#|%S-4QE zJBO`*)DYvG$aS^jzvTrtaZOx@))1o2cvaMXuH=FA;y|D4z{K7w+BBu7Zs8zW_BfhF z_snglY2z9kF$41KW6Jxo3Z6c z*2ezdk2jXC<#jAC6+9o(-%i{j5d!(IDSnu8{R!(_Uuq_>r`fH$XLoX4l0?N|@yAT% z2~$LfA$8L4cp?VjPxQuk$ZW{`bE26nYhg!+3KXg-t)zY6~{y)YaZ$h(7y)>%K3@q{YBN507|f?gL6+2f?qMi;%HbE7ou>|kb4Jf z+?20Jm0xcA)*iAb}6PT6}rwE*{~-!L%rpnT)lD3 z`f6us8v1kq+ocO-0HF+pGLN7Rncc6THL{+ZMC3{Ref}TBOe4YZt7iE}l^S4ABR<2C zgJ9Qezd2EU@Q29c7cACK*0FbsR4JS{7ti+1RF-vz2pIW#fIEpb$k9Q;EN^=7X?fX% zYm;TB*Wy6b-}=DoZ|{~y&hb|Lsy&@-)uk9lL_p^v`)&b!bHW3pq5x@jlvC@e9In>u z{%|tlWbITl-2K+}yC?5ij9QRfP;@xLnibCo!5*|Bi^SNLTUYp@L zOHTdcsMDW~ube%h2IO@X!bvQGL83kihMl6VXp3158rB z1a`oZs|g)0za~xZ(OGu=41XuG&(9K9euM1#mEY)u0jcyQHVXioxD%LMrE1i=lXA!a z?dHM`NeQDL@;I76m^*DD5@Yr%5%)$r-oLVAlfWwY(1qKR#S(HCy^h<1d>ay*R z#!x|}E}FxdTxNjhP-=5o`6L0wr<3wvHHMCa@!`I;T`=>Hg3*vK5>{{>v16(_ucsF$ zCBiw{8OQH%i;QS~98YEgGaOgjYlYXBT5VmM!N-{x!s0-hKMtXeYC)ko7GV4|RLa#Z z4dhgAHNZuYFi8$h1MtXYT7+n`C&KF)qhI&NA2TgLoeeWw4DYE6BL6Z)qecW~)Jcky zfp50?GDYBE3d>vU-9875n3SdBJ$0#h)(uj}Fe0X1CLGeSF-n@)WL;M^TKn~7cSD9` zRr(v2+BXgzx?0n6`1FfK$}gMs%N+@WytG(See^kydYSgf{8~b=2bkdOwRehWWA^0A z4c$mwo!mWRM9{u~EKEizvV8n_7Z8fzJQ@7q-4$zX95?DLnX_a&`C<>1!e@A_BO|nk zqrs(>fRpg%xgJ9jaNV2nkM*fB8__0`uZz9(tU3$u{VQ5lNf;pP`Lh2^o?cJD-=?a1 zN=L4WR0O8l$CV4TCgcRXX2RO<@l5B25%1?!WrUzcy#*;vf?DDr!0q8M>6>4!~?DGXJH zDm#94{kjAx-D1kb*imMB=uDDbEZr3xGh1tT?X8r=RIhyns80w5AtO&0w@2xCvGZ7&?anCaf4h$$k<&iwx`L1AhfU=iF>pfaKI%o%OWwTOZmgA4s*Xa-flT{^Cjp)K0Zzb^sAufi?i)4%Fu(XUP= zlve<+?sKW`Cd;E;Q4V(^;h~3>goR3CFRXT(qRVoB)cmNNOM?9 zy40o(DjPg;9b6au8_E3_Eg!b1GUN!7)vNC=%I<%FMBSMT5LeoS9NJxw?-!dqKgT{K zmjJcueDFs6JSd_+DmFD8dC_fqDyd%XQQKJDouXzGkwCJ#Zj+<>fK|RE+w00kOHRmJ zD`q$)(UUGM`bA)YtN*t%?@UM`#8bRQyQ>5LHRHCDGHkjuBc9GEFW^?vl#lRcT;RJY zVvXdUFuj!p_O`GCv16FWU7f|>KrE|b_3k5xeRS{tk{9!vnjdD0aE}j-^UCJjnFYEq zfjOT7%*e+RqD~X%B*P4=3#}*IO{i=FtLETBgt0cxAhMP}zo|L2_{ni~CE4S+j(&Ib zE-AS(UCUX&Y2}cEpV2%9Ij%Fy<}tFRD-buBAb%RwXwVO@eRQ>=UfburcMCY;w4Xc2 zI7@5`D?LwnJxsuJ%eJT|#cL{p7JS!K+rS8vDI<_hPPB|HI9vEn^o8d=C1jjdd%0$dT<_F7&`g5x(l51D(3YgKZ2Od9Jm)M#Y9eqvDU$yF;qPdni>*l zVoF`2?Y2;fUME52upMG&g0$3Y65wP6*5UmHj?n13Cd4JWI-NoJK^}&z`j~sIg&TKF zGFSPP`TDXQfl4M`eVyCk<~alJ@MWGF$0LlRl`e^Se|^rnxJe(9h%A6RF;L zHUOZGMYRcA%n@(n0rZW1((BRk6brHaUH=@?066{bml-9A{-Gc<7N)7HpiCY~xv0@$ zqn%igk9HilL|pJS2`B8sRR@q`TLcEb^4lQ9_qS!fh5!It(bB5=ou_ByVjKV33U)8& z>MC&Lgx?fN-V`ig_S3AP3%3r0K_R)MK@OYZ>!bXs=gZP)TI4F=z}3FQc_wF@JHa(t z>*-bOcOo3ulUYVs`tT-H7qXN;bYFD&xWje&tf8}76GLsLy6@|R3u7GLN;y5QkQyji ze-tv`M{ua^Qki0A`oi~YoKp2@2Gfm&iTZo@1Hl=l8*s=+V$~Ep3y9p>a=7y?09WWr zxjeYt`V^#aK>sW|^OkgO2Ly2@^H_C{>9$&Pq@|UEk#9(O_(6}cFPe6Rwc{nl8nlEc zf@gUrkGSoDn*yr17={)Z$_=G}x-gN+)}!RCVu%PSREDX)RP;muyE_A!tg~+4$iD>* zbapxEcwGk%pvRng*ndrfGK?NVv|SN|MiQ5>45btyL*@@ggu7BvNeeT}O^=4eB`X>x z%M_g+2d%M4IgD^YN=Qy&lal}TQB3ngct#?jivDLr1b)-FrjNk>QAP^i?zKW%=@B+b z`zs+m$kyniLNsb>_E2GAzWvJ}dE1YWx(#%-Gae;C^XK-4a_tThX-vq?YK8QBEX5An z=$((3(=_-R2_*7_pL6S4=yaw}VlulATVdZbld=sK)EeGqF+ld>r1kM8qBS~*1N4-| z^SjCvs#xGLtWIds;G?pOnM*Y}7qYrqn0hUCqF`-FgB4RPyTKIPAh*=^N|4vHFjW~x zIbKTq_e8H*IJd-yX7VYFWP^D$JtGm><=rz-TyF{VV(=>g8<+tZ#G(qY?NC~ z`3ERD8}KzSaQbHA`FVu!3nk3X7K*GB)Jn5I2r12IqNNd#=Z0SpEN(_{D6IeCY&Gi- z$c_O#qtS!qiN8~lLCkgmG(Ke;vkH1KFY(?Vc@6Q-%LAnnN?f8r70{#+fVb-^9+A#D zkIC9yqDKz-@zBx4AyHB5Blz`eVxyQU+iUxVI8VYqbDz({uS=tc)&AIsaQ2uEWtWsz%bcqI@93*^?6 zR4qxI&Q+X$hKmWLqHy`zGC3?m?kcM9CoFK!BR_+06#eO>1r&M`Zk;=WEwl~~pNsLz zoMB8qZ32B&*PdGN=X5!EmekTHNG5}mP99GXF+L-@yzZ_iZBV57fqL?OBekHiy~LSp zi0sh8BxxDUDj%4{@AoxGvzQ2*7VOrHtXU$^_pL&uC5&W{-#^$Niwl$M$fs7N` z(mo`kyI3K-oqzh!#{JbSa;!K-=9M4V1ah6*Dg&-1T^1Y{xO+bMLUu=kbrUWB49;p* zlQOMZcx-9k@Hba#aB5kV2WJyAC>_}VcyNkcDbm6P>(0#!W`sgij*Ezpxn#z23G)!& zN=hcDGDjSr^K2tP#0OO7lMPX_*%Y`*?HO*MUZ>xM2V>RuZJVGJ$mp?8BVgqaT&Dg# z>}kYJS8i?h?hh(pPXn#8EiUxWul~w9cMng+3m8CjyVy%jBly0a zsMRiAv1bvedSJ3mYs>mVku#J3Wam7A3#;8xa*eprf5Gq@WJuK3AJyGZJhhAi)&lkp z#hXEP&)EKXD8EX_+f~aGs!*8@^upVpe~OJ(=|WQbk!$#v!1;eU20P+|Ct{B@D>(g zD$bG6YJW?cZehjI6BLDPIPe!-8sYLEK}qZPgCQB=$`z!9#9(9QV0y}% zO=u(+?`aY$aWON;^t`aakjrrI?FR*|fz*rk`s9o@~pd(S_bYgN$hI z5=={Ecx%-t!5MD&lQDQTntGK_Y( z(M2kbkqBR}eDHjBqy;qk<=|^Skd=VpNI7~)_m@YU60(HA_I2S#lBH>>$QZskcF{B+ zxo3yVPbI!JeR(J)`Lm|VFm^P{mB1ZJ8X9%Ey(ED)deBTu2y%K2fMU;s6C`habvb$m zC%1miJ`7cAsLA&rP1k9*0#x!M2X%Vi)M^y<2l$?<&IWI$Ys9LL3X=hyh025y{-a|o z;NYY~o`iQM1$mKG9TEqJkTnlJxKRsG{N3Cdoe5#$-w2hZa+=fJ*&mCiu33JJ^~b3& z=fi%mSm(KH?LZ3J6@c;=77bF(?*HOgK$h8?{${q#i#vEyr%xyM*;DURyd6Baj-DXK z8OffF9;YZhU%y(IX`ux^d9PnyDmj9dKzDKjoUTc8kC}Bx>fH6e^@T9YEjNJ9?|=b; zDiS9)z$;6rNAA@Fdkb|SPt(#f+il!sO^)rlzup0r;uT)>37))Z4RTT|pQEHHcJb2Z zDWb-~P~+q$h!55gTWO@_k8T~q2YWuBy0ccjlz*wGDts2TBhsP2?;F2s#AkgLl2_TS z-RHBslToB;HEylQfr~|SdD@Ybm;J)K*CSoFOQ!^o;XbT8nyWsZl;{@y2)$^almQwi zOb6@t*ikaTzjcox9K%*Jwv09@q11b14!y+Qglgv6qOPjTQ1BKAb-;obX%dg^`99Gi z$0fN$$+n2;+K3&@!-{+8MZSu&jLcyH67h8~;dx%ERYMPmicInYyP@AL9nQ}E*8)5k zEXC*RiIOR@P?RDsHr3^6+2n^m<00?FeUcZU9QewPR{?qJ$e&xfLolo~o^o_ru#{f^ z?E(16oK#!B`-^wwQ=5)_4ZObNB0@!OR-j22vvrihG|4yXA^$8N;q=7uGTJ<*!}0j> zt(!S^E*w8uoOs5=y%z*AwSJmjUuOHDN$k$kR1{D2{w&SVO9=r}v48PzonXU?Hns@= zm6|uFuNFjdRW;}?Tfsl z*QAWipKh~@%bR12F%|DIt>#A6g00_bvbyRwaiiC`f2rx$y_uZ8Xj-G%d%=vc`u*I~ zIaU_PP+dra{BLvZTZBv?KF@yc;`UNmb08!DD>rr}8OM!E1rVmosMtvv2OCsHh=K@m zbu!`RLIy1#nH!}-P1F9Gfts4L8gtlb^vRrAjXoo8Y85ACZ`-hEP)j&1i6DHiTM-_e zn}un(Cru9GFnSqaB9OEPwMc%xZh`RM+;%A(%W@viU=JGiKb}J1;BT{Bm9&wAo8K3d z#T~S3lGq9m?2_)~-eIH?VD5O-%`_oaEe(EF77jMIi&bn1>Cb{WpU|(_at!GizK;}A zVBUgJKfDmC;K|Mpnu5BcQX8DBO(_$Hu}OHF=QW}EAc}EbVrP)YUNbxvi$)PZ@<=gS zem}b>wl)5yEIAw?Fyj?Vt_jHYmAPjJ6tnd;~_LGD{q9HH&DqWMsRcKSf>#k!9(u8>w&EF5S&naaBEh|b5gNotWe!cG?s9;@2 zeDLAA&TNXitTMa-nr|_Q5O~;VF^pR5Y=#J#$A{3W#vL2nD;mF?=&L$DxQ;lJ! zxoZAn!aeLuqW<2CWAj?K-?d@z%@#3m}q` zHvsAC_8d3>)zsy@84cM9G9hdS+E1gA|1K?&(W8;9FZ?4#>oQ|uStuQF=~)OcMO<@0 z=LW5ZOpfv;Th>xVR<9}z=kPS*V;GN=XO4+5uMR7;2DXvV1~E!BQqm!|4F^*uW#&p` zDeKgW|CJ!WY4+T9RJ*&pqPGD3OQSQ}_R5oY4yFGY6^+*vsp|hso zPXwr6fG6XLVd^_YOm9#vSRL0jOEI|4M_>(@yBB$!dNI?vk-Pw>i~HbqjNI=3vBD&x#G-;Jz`NjJw-#_ zX_>G|xK#*h^PAQhgG7KRxqIRSO9mH0$P6b5n{DtM*Xj{*fJh~#o;Bif3*aT(lvNE= z+(-#)zOuW|Zz>T$R5>_pRhb+=D-P+3Ry7B^UxLPFD`-3*$6cjJx}5xA#`cB<-6x=p zdUMn5zO!>FZ+EqD@!p&uMOSMdYU|alCqwC$N}-sV6PID;#Ws3M_ex%S4ycI=cA1BA z@xuvQzF6lNFy<}k&D!*%;~5u8_}yTKfWZF7r1bohSRoms0I7uoE4=&SjeOn}Pg6Al z4r%)dXziyp$*4JJ?I;9B5K``YD;q2$DLVTTu@MQWEWXlZ|7HCq7MlscyCS*?0_zU% zMpP=BgfeQ=80)phf+jnx?BNak&TFr)D7S~&4ks=sGTE0ggee1l^YE=E>eJIxCwv<9 zokS{8CW7l;qNOW03R%`&Z?nnkuZ+XKBJ0DRVq7P=tPO!Fb6r_#YzCJirEQ!l&+( zOh+*x%-^^MZRTo_C>Hpy9XJ#4Z-o&ejbPQPEHRBFJ!@m zOcFs%7dANFnKt?qnrFk-IEb8FnYl`iZSC#i#^}GJj867tj5DrpiXd`{QXYL2S;f;G zZRjpBqv6fs!SP&!l99!-KqFDTDCbU4Rg?k0zeA1CmR(3-YLlC`mKsfG<58$ zn3fjfvvGKks+-6L?~43uBV&SZU|4pdbQX7P*q4;e16N~1OM{gNuPk)fW-%j$7_UEx z=?{Mg)if2b2F_%u10Y>3!^&ocLyz%IvvLIKXWIYh#gJCi75MnpqN5q0IjXOZL60l} zDMjjve9vx{C`U3yiBNi=I7*BAtRCeMw-yIZMtKtEkcmk%pqWNlJvoD|HMn*X)!xaq zJXtgv8_`#&>N_dzmcp?x7T#G*lULi-5VoIkVF`0Wc>xRuUfwFCdDw5iw6OuLKOUpG z0!j;EZbKkjI2Z6gNz9y@F3x3aVm3-WYWw(<42}b?g$J_Y*!}VoDqBB`Lx_sh%s){d zr0NEqOl~9248ER?VSKyTXH14Jae={dr6#i(>LdsKCKaelr5iRK%zv+t9MAZGVtU0i z{9{UY^60DX&6h<1-XZKpHk-UY-y-s*8Fjw)TKu7>Rbpd6Eag$0O87Z_Od20KMgoVy z^}aLYH#0bcIy6otO)KC;q=>9`I5Z27|LiA%@{~B`cV6DgVc3C48sM1RHUEBs?_UAD z`VLJg-fJFdGh8vydm%G-nw0(pp~u+d<-Vr{0Ujd-SWSC+WE@s=70e8&L@A)C(c-m#PK%7d?jE_6d2OER!65qZg2^(Vn#-c;o7*%OOsUDD`y#rD_PWDl z(1yWh?%A{Or}J^Y&1l)2M**zcgZ^6x##vt8_MIU+V4}dVYy7e!P~vZ&PmgdY{2TGY_e8pKMh^fOAZ8#+DR+D@G_eEfSS`SqH_s%4dLwZ zyf8^Qa&=QHB+PDN`ZobYyuHu6$FVVI|K!E(drk^?H0O|?OTD}=JzW8o6PzbaP9Ax@Xxc=61uU5oWQK!hN3$3l<9Ng7GWu@A>#~qXnR& zmOfl-4fqWxRi^n4*?FC1Jrb$ycI{PuLzC!pQiH&tpd$rr^3D&*T~i106UI*O!*2lz z1dFkM=algAVJEoUy$U&;-fMA7Cnvz%(W#PfslBXunQ#{V@hbZayhyx-Dv`ur7k4u$b zgk4Gl7exEoevarQVwJQ>((Q(?HI8tOSdk|lvh8@_k??x{pWKo1goF}_VD4Hj@`@(m`&NjZV5Iw}C^tSq}$JtzG3%U0Sf?|TXc!FP6ymzRAa+SKhNS*vQ` zEIBtwNgjAufcuFMk>V(l;yytVbJd4uVx&houCRuTYkgJDi%%S&e1>)L>0Gmzqx^BW zVzYEonCRUs?XyyM#PNlK>4#iU_%fn}6XwslOr-vH5oC`O-HU$Z6KKJy#jQNmYH-;j zi808*9{ujmK-g&YykT2NDmE>B(mwbTy=8G*gILJ)>E7ct7HF$BpfT{~@dn~}y%4;+ z42lM013^@an$F?AjZEwv8!2YNDvCoZ(6^EHlLW#RFHu^>P3wk@x>6&4 z)Dur79V5Wi^3w;nY^wh}xc~qX0706OP2msnWiSFS|8WhMGi0fD`qd8zu7?=Apc0{{ zD(17YU@6C8Ji77UdoIIP+7+XpNPLP&qtdHAHv9i?&-X3mG#BvZucnK?!O0Ko_&iZ8 z|JOLv3?@gMKqH0&t(33Y)%O&7_+&n3jcX<16qnAx1D*^oE0oyIyhRI7Y;8`}Ia(Xq z=`-A2lutEpXaZ9N>|QOyge7_wa}f>CR}+~IWAZq={mOf}769kw$EX3*T+78p`vK`4 z5kEFz&|PxY;mPO@zZDN5lb^|)e0(S_EM#>tN0(ap&2$%a*f?n;;h&I2eSeu6%+5`f zp-HGl^YqOgscJMt#*s-ByQvXE_-s`qG$=sI{%)qn*N1GX;-Rpt?S6h^9>eNpMGIEn~D$Ff%h*R6Tme z^#NMIp`#BW(#{oC>n`Vd+aq<{Bo7X9+$@pv1Nzp*C7FzT!-9jE( z2zXFCX@WL2#j>=Y^_;~M3VF8R^i6_G+D3>$;q@=reh-?PgBY|In`^wMk@dBv_poF0 zXx|CZ-g})L^0D4J&=v9Ye0F9o<5iW&#^9naGP)*sBeI}KpfNpI02@v90)O2(5JFu( zUfo^Sigh~POWPXL!iZbu5oC~%Gvk|4`AfWtj5kd-&MMFGTsJ_WnA7H~YH;wMMC%b% zghtHSE_eLTs7NUhOHj=&!lxX(ac}daqGQh>{orvVpBrU;B;PR?>tIrYkfcP>dbcTW zv;^eqOt~Bs>#|1Xf_D=?#T!~P%>lKz;JZGXdTJl}zbWAbMQo<)o*j8X1#wTukJ(Uf z_F(tfviJ1-drjyKX2X=^Z(CpHmjT?;%!9ia2@NdaSsH4wWcF1Y`<;V<1PC2CQCGmJ zoVhP>Muz&hn#2Ba-&f0S;K!xMQoy z5$5^z@_HyT3WgXmBW&cp4eA9|9&%PoU-BqdYmf_6pBOx>%s|t$SnnWPjG)Sbs5M%g zzzHAleKkH;COy2Zl)J3YqzVm$8-50lx3tBxwU7p~z&DUE_)|rl#)hrG#w-CtaK~r< z+QR}!-n63b$D?o87vWOq)U->Pyr*P>ZTg)U3T@|bz0 z$=7TaS-qj2gn!641frxFf~GaBO0ij>8bAw zk4e{{aMiKOunoX7j)ElrTRUra5NLriNvJV9s7qP`>;)76T=0fX71I^|<8Lcgun8K? zRd$|Uf{t^yq5u3+kg8sqeSZp8viE%@SJJVDU}V0Tvo{{2W(NTuuL~FaRbMUF8PbB@~G0i90m^gu5 zgF1_-Ez|hhMqw=MG3q{-(V&&~mXWqw??PXb-lX3R+bVHc^&srxVf?T2ZerqsJ*O~} zD!@u1_^fEvjnih6flLTqzbQpzM+Zw^FKP;`3jV8P_%6UhnK2(ncfdzh5Tv#z)`5Vat^t2FT(A`me&sm3X4PavcGL6a@>4r;T+Ej~wW>NSCZ z-3QI{hzr(?qbJ4oRPq{snF6)K<>Ykl_C_O;Hi`aYmpF?8`Y+bl?^7mobX~ZeZK2?+ ztq%ay_or3X-3^igYD7zwQknA2NBlZ2Pr%OvXB5>-3ar8d+eXDg?>@iLB7WZ2Q(~gk_6IWWH)+VaFA0Iovk@2MM;5w>y6zoiKVWr0BpT)=g{v(Qgj= ziS<8<5!vf>+^3Ipi$@F$e#(EQXvU7T;%#4#iGT*Z_YKiyNs{Do<>eo+rT0IxACH%vi?fVExXnD4T5_GiR| zFQ}7^g?)ZH*ZoyY#$n%E$hrO#3hb8h>S1Xo>5^SQkqk+R?fJZx9x)Lc9T)$yuE4Mi z+e@%oroX#g6Ryz@4BK#~ez`dRuJ`_KkSh%AP z>3Vk!zHc+kWwJaqC|KTJtLkBf-N!1f;A+zckXIYyj z(wM=fna{$KE7iixB%>&R_02@qww662xtT^W5@Em)h!IoS@9>KrgG){Gp$F)>4SX$I z(^UE|*!OvB2;;qiEuc)SR06mrlY_>%d2{kZN+JBS2bT3711M;U`_ECE_8m0i+3VKo z*fN$niPuGXO1>(HeV!2^1{R~C9B(aNbiZ;9NF~qAVt6TEaAmJLg z_6GIfHH2)(UGhYrd{iu#!_vq*Ki7SmL35Nb(r$OS3`a|ArlP54RsEs z{iP5>_6k((Z2ps<3)pmQaPiJz7mp(gxGk^WqusFa6xO`{sdqyU;o(Ss@nN?jkZqd> zik$MkuD|=hUHnT}*B&22S##no{v!LC?T~fbaA!qa`%asP&Ud;|S8jF0eWlO8M zLsd?T)wdnV8wbx0LH5pBgSwkqvEOINM7%AtNAhv`kx(>e1C_SsgUPq#IP@IIXS-a5 z(x%$l>!mpm&y;((iD_v%T?*{KPWi8Y4!)_y7w9v8y9X=Jwle}7sv?oOd&C5WbTqW7 zyNt&s?dnciY7ITO%+od1p%SqV=(u#&qN)?j5p0S3l< zGUO+-J4I8^fH$%L7Xu3z*<2Y3N}eUfDVeW&OPfhGx~skqVx&46oPqgInEh#NZCh@$ zzWyF9Sq5q>&_MiG^5Kq=Zsct>JK5fAv@A~PK)8vJqRi7&zP@W@I3>twdCXi~?VLvg z#147*UN^>oN9r{|HH_!uwX_4XndbV(O2E#zTL$QNqiJVbKvUmGF5Y%uKuAep$1ZOb zXPm~CdpO}S{|u(uTV)mtK+3*H=sWQ%)H%^-2l`KO5l%MstqN5;2UID}uSbF+3^;J8 z86#~a(d#LA#jnieTe_nSrlnQZnqjC3Y0Rqnd@{Pg^sp(}MA2)AHt#hFguT-p^&1ehSVT;M;KU0i-V3#%1<}^{BLFGsYA3;=NoF{+dVQhI32wnQLf_3q+pl za0_s+n;D(EqZP*Hn+E2VofY&|J$AF<&}zFj6zx9Jh2+k+fp5_ska(F)fcS*5!vCyd z8`J+WZ`kpdOY4V0RUHIHD(pshFN{b*FPrlfi{86@O5*-5D@uye`=g(z@)&Orp zy3@kt?OVE57z$`DuyL5=Z)0?Na-f6b2xk^&b7{#-PQsQMb>J=pI9y;TaXh46+8hD7 zbliu6$og9E3c6&e=DY9a1 zs-FQNgqolzlQYA)Jx08kNoHp=G|#Pi^Qi!8~Xnjw<>dQey>b z;v57scOGd}_^q#Fea*^8_USM1%f#_G9ji>_5~c!Dp<#K6nE*i^1k3-r=Sif_$eGG94B$fEfr6q^g0=AO`X^mqH z+#&LQ=}DN7Ji19Nw`lP&-7m4HI5R11{+Hb8a9n7Zf@#l2-`@Uxsc!I3{RO7ADrdLN zLst2gj?$x*P!TKYToqLH{G~N#nBVH;UM;x=ZbgOG@b>h_*%ijr3Ty-pUaIe_9$B~< zK-tXpom-V0sEul0CG(gh%b9|;2IUb>3&(n}aN{5*am`<#u1ytzqLs;}*wQA>wU`u(9w)kq`ma2)T)TncDi;3o16F?u(ZzH2FHkH zlxlqr>3NY=P50~|T8W9{;VL6x9>M4qyKph3PGB(P2msnWiSFa|N2;S0R~V?Iqlu_#Gl#L)$lI4rpmh6y4ZH4jJCvbRhVk{ z9xjLgmoN~hah`M7Jk|{TGAi|ej5DQ`j=7R{ov5K5mmrUk+%WQm;zqbb*MQlI0uxz7 zw#dR5%DKXmucyhm_NHKyOy$#cyPU0~MCKWdHTx~$20>R52AqoU;I|V+L?a*@9p!rT zH}&}aq4~q`vHhR!pmuB%w%~I?Ki!OzFVo?(qH5(3EWToI&JjMYU@UPkH5H-Kf@lFYK;ZN+y%p= zcnijz4Uqq9wZ*Ow#D5KPDrhJGNhKvhuWENG%?SGK24U9QMy$WH`%`d+lTcbVC*AYj ze79istBsK1bm%O?v&p&lv05;L@MTsEDTw`e%ruYpBe1M?WXQy1=vx<=sQz}{Imx@f(KtmibBpc%+C4rfJ>10_ z3nA|3CzvilT+S2*IGvG0H?mtyLwg&~i;M%)Gr}$8yvctsJXNWvYBmK&T74ALw6K$U z)A3M6p08O3X9XeiXZJ@`Mu(D}{zSi|$(lbmZoMRPcd`D%c*#BZsV$j@39qpxvqAl5 zO?+bq+F3hu|JO0Ub|yPBQPv*9D+>;TUj#eix~;swuq%cmB~|eCbguBW#GTM=vdi;? zZ722oco6P|eT=tJPUJq+Q)bVyBL4hbf-Yt==JN%nLni_IAX# zNrPJ6#N-VB*6#pp^I;GOh*NG&6(%W`o!T7r2E=P~)P!`+T0Ev;S)acslyEXFQI4no z(W$vFm*_N&eM)@+KbM8=0t&D-9i3LQ`cZa4Gshp>WuvO?MO6`Fx!Fz=mR%too*&S95!GI>De=*J5U`62cc-L4u8$i@AmBCJOc)T$KQi6S`t{tyo&-a4 zbyyT}Qz;qiZS*Dp9!822w63_vb6O9AA=LkRHBYr3o%hBaWU?@w6A#-xOQsb>lcAri zW!Nhc!XMDc`HAf z$5CVHCMDXn@?k@GCC;RHYDf20$t+jLthG>rUz&ZYsyOJDoVw1=>Vg+{_4a(*4K=*R zFK}5H`SqQO9fN}+-88^f%5BE(inLmocZ^iUSfC-XD_r3f6O_2|YHkW_RGyrO5iMf@ z2mIXYKl%|xbw%YiI?$EsKG}%YshnIno%CIwySPp_B#4T%bqr=BH$~B*IkLr?L`VMM zr6{|4==0&gKJlYwYPWN^Y1lh!C@-oIe8Pd@wBCY-DvGMkBF5a&dR{3)ZAHd?VD@)t0R2eFkI1ebn}gg9d2-({ zT75s1!-w|63@a^KL~b0HCEm3xmbp}KAp8;tkqhq$sZIhOdP))bE5FKFB!?>KY&SFJ zk%X;+fNkfGd1Vd6z`O=+4yErV1slW&2iPSYKyN`4M@2;>AGJw0vr;5KvDa=||NX+0 z|0jN&(7!Xdz)yS^cyyff{-}oCC0#FSDOP^jJY%@WwO@Z@%Do)5oIR*< z6ol1vQp4+l6+SO2rzN(S{A}t#$~g)i-AfXw?3Gl{>2z!0f zMFbin|E@a>`HmyV#q9V~?(p62dx;C%{;~hz@m6#x3&SU0Vo_13kX@JDiX_h)IJ2j? zQL@&mqTMB7mz?l#Q=r7;OKL*)xB4>_y7j#6$!P&6NioIEVV1GNs&d+rnX`i#lq=Br zzDdNIsnes^iJhOrxd9~a;|aGlZn-J#D0m|5Rq-f8If4K8ftac98OF*Coqr18k&D_| zOW;+13Wxk88=euB_W}Oj#FXB+o0;^4^5~NaI)L3C|5)o(5Kbfp09xIq$ zRJsCCct28aS=r0$6cE(m9afUopmvrql$%D~^OqTd!r4%KI~0sXD^&@TU?fC>7mFRe zLia8OhnP{dH9Xs^GnC+Xv8{&2Wir-VPBVF(BikSzEzP=|yZPY>aV_~`;K{H+kQV>l zJE-QJqj)|fp8PreV^HxgPKFf*Vlt8Llk0$VjP!7i)9e|8RXlo<=eeb(h_?*Psf^W4 z163)Vk*V(TCsg)B5r-l}Rf`B2amssTx9641@G|@+Rqqy7&&xr-Qa0tTLI!9+5%ptY zVAaI^tW!5MU`!UE{1kBIa^M5+v6w1&jAx*D(pC-*)H?CceFK>7Nzd^SreZoBeLuQw z4t!}rs=Kl>OMtwD_&?PHWKw*AT!izh!)hnoIkkfg59%=lL)t|6-xdAZppV~59ZxBi zikdHyRWkdZUR}3}YS;;L{_Y$@_74iZ04N4xkZ~sRLnSgq@`2~aA-^>YPa^e16ruIook+JQxIr0>CEU`AZh`?g|RsYv1 zRMwhdHR)dMk~4&QdSuE=R>v1FYV9*n>0jlz+v4642Q{~RCjT3OF|qFkX-<2AkO~i7 zfMw^YxO|7kvn8HX0_py`LbW=4=8;go$ zvzzcS?CkMl0ndFg1oUpWl#7cr)|YBJL85IlAcwUbElfRPiL>lw&{Sg;sa*KNbk9S< znU{U-e$mMK$~0?+la;>UlYeekw)KF z8Rq(_6eY5!%|O8y+7IlVryA%LYa&ASg=8jme>Hs!ik)n4)V4eA1Z+d;{qB8y9bcrk zZaoYwc(?BY6u<~mUfZRc}@rZYP;S)%%IBIyrhIbIMvo#0-{VVu?Q zRyp^?sX_37QV4<+?NQT^pR_~8Iqv;|DxLJ)TtshO$fuLQq-E;)oar!i50l?xzL=8V zaTxK!1Sfvr&i}PTH4>$bsD$YY(GIH6$T+e%&};kDT;F;?hJuj#xwgL7cPUx(eLkZ) zVRA@wrV)zU70oCBg;f3F4fOOqRf=`TB|xObZ9EZFYQT+4{4!5^7giS-B=+XJ>5%;* zh6o|b8a;j!$u5WkI0p^H-d&c!mW#Q(8jq$&bxv3;s6*9u?H_2R+HlrIvXS_7;^ZC%fcP2@i&gH(wR)u3^@v zCod+b8ex|wD6ayyIZRLWt4t)J(q7k#EULq_NEMi(`Cq0aD81b`R}l3`5vkS_oxN%M zD^1$GMPhwx*i=fO*2sX0q;3D3;6Zd%%cn2Aut($VXV6on3V?G!*#8OnC`1JQD44A9 zH+;J)j(JBDWvDSZ*pwnoX4eZ-^Y#jPMDZ+s^h}9*O+Z}(02|LKZdfzd$s?~MEaLxq zvd9qgRnJ2@*%HR6a;M|V z@FKbYG<2Q$ojU|&o2pj#4!_cDyXBEjYJN3zydqa83ZI3*GO) zypIb$lE%n}v7q!Wk>FbSvZtk3jgyLgX*yS$DY0iEnUDhMj*0<9jDF#1)7V3w*;%r{ z4mBw#Ryn?bKps!C!YNxb_7$f~b^ZHVzj6RbgDqqTy`0>_x>)!q>f9;zrNmI! zP;Lp}Hom;D)^2Qi{zRoKhIr$(Y}^DZOOX-=%{T-@B8pMw1dz;UD~eg{=7)Cq=j1jzC*0Qz)bZcF5kh zh!)?anBpN{qn!UWyE>ckfKFbTT4XLHJXB_ib{05?KKEf z0km1MTsERbz2=e%MMz-p5xy5E^PGIi`+pD^iKfl!)x6d8i8qyK#mV#JfqO-xPStPS zDlNF}vXvHx$r1j_gyS+J%{<-!hr=J&Bh3~vtCxNb7T6>$FI|NDH};QRNF7T{tPCyw z`*AOwt^brX&cR9PYamnk7JtHuFiGiW#G$0A%pd`roNa`}1rw`+D-4lbv?;Sjtg7jaU){kF_Q`D{=G zS1Uei^FJh9eFJT_fun7QX`|y)cbo&zyt!0*iu@;SzZNjf2nBH!r!zk1&NI_F+^Y5R zYunbLK)VuYW$pgQXQ0Z0H5_qLbnz;zBi-i$^8)rtdamRZ8ttxj!=wM6txAtmE+v%4 zfq^D57s_1Om!{(jlW(?jL)L?xaMPa5?>ZBkb)jyHESl3P;qyq`rAo#A{ioWDKog}> zxV~qb>U)b;sX+bM+ui??o&?snIa=rT%=sK5A2ciB@~4;A{=%s z`LHX8KATdPUC({I#YQUiGkCu}79Kfo7{SJqp^qUsjze|&F}o!-+p(Q}CsV;W(avAp zWYf^p_h~WD`H9O^9BkDcb&FLodz+p2t11e{P_F;4^N7pOl8F2mORtc}x9}|{mPRa= zbcOJK#;{4>+acsSM!4oGY_JJk8^AhSq( z2WzqA@|Osn`o<4|{t+o5S8nUiZ1-&Yf#Xh|e&#r-b+6|K=sjRWb{{YfzRI2F_HFlu z2xs60F)=AC;bb5z9i-xY1Rhq;Dtaw-XbOTGeeJ{4o%PMJ*#u}hBe?MJ0s2Hd!??z~ z!p~9ZK@fqNT1?k!%$43NoOc1bi>>AjGw>K=^Yl*jMjXTF1%F%y|vLKX+&CpY1mZ#b0_%HI2c5UK%k ziAUTe&Ot$d*oz*0u|2EjHxrDUFA0gj5JTkP&2elLOfnT0T!x4HKMxTe36A9am}2D6 zErQGDXF`^C$7|}Ljzp-@MJQ^?$9;wO6WygCN$)0|N=BmjebkMEJ@U!C#j7fQBv zIn%eIk1AuV>HW*z&4B>7+SrZuSIbONslA7GUqwoCb)6WCH#|`g%f}i0Mhy#vhVN6_O@;t?L5^(v@vI;G*+$|*D_%ZN9 zo{qt1jHU7WNa-U>ig3!&a;lgoGJbjpkA$zPJt)etY(XG z(D;%Yn##UPql!;;*)rxNGW)VREawKnea0){P?wsFBr5Bz%9^+dkOm3YYJW<6*X)^X z3M=SF{Meobse#nhIc0erDdOdN)bNH=JhaXxd+6aYA4Y#q8aLZpP)TTVR1%>4R>-Hx zLc%LnpqvNT6IH^6mPKRnN{gz1`qFn-Zx}fEOQff1OxVa<~Tg zlqXkI{xSb;i+YZrVbdRMu#Pm1WF9x`+OcZf#Tw&b_>z@EpNCV63VPPM${eBixg^KZ zF!tIreR1dP=S9(eWMvWz+9P#2T$VZJkdh+1Y62AiIzYw0vaCp?<`yC1sjy9vynycf zS}@!afdlg|UTYgaIB?#-BiFY9R*y|mz5|a(V=q;2kuL#hk!~R`Q*59^M~c!Xoqca!xAr^vEw+k*~JKROGvzCd<1@1Y%#8spV$0(8HS6 z{6FdR2!-r&=wMlRt;1^NiV9VvICipR@T%M5KP#rDZhWLeu4W>_ww&SNY0+puvqlZl zY09uAVp$pL%!wi6#H!O4ZK5g(%VOUHaLojwiPCz`K#xQ}w<#0}d%6Z`VaNAkyT9J| zHc)kfdUt5+GlqspIVJ_Z)eupbxavkEbY#=nYHGshB(}u~!un{Sb_>47=}Xa3=oAEH z3{%U=Vq6XN)j$fV3b)o?UAeGq`4scco@O1Y$BMPe!a|>89VKPkr&f%LMY^HieM01Z zDh(=9jcSc$lSLvnFPo1d2*!Q1xFZ%Z<+yF2F?7I67X}-riT5nfM$WAm56#*YwrfOB zF`TkIp!3df@O@#OZ^Q>;6DgQEIQW3z;{A{eOn~}6?`!dbsTX1B5y$uG?H=DM<#Met zQjj}}8N~?6$#bDLe|d#e_q0pGRYN38Vdu|v984WQz=zAC1N67`)O5|G9oEe6n>yW@0S7MX4;Rlvv5*u?S@%L3tB z(&q?)T~JHiZw!q5%q!IVan`;XM{n}D`ewa?8kQInVT~p-ck|pD&qM(IZiv#e_xA7F zxsat43?j9kt^}=ZnjX)pdANS$UQHY9tO#x}JvbqB!z+*d#$o#MIP#}UHB^001L=L7LP};Scg?T%{Px|ukkke5k3D}ueILK)}eulCW$KYi-9iQq~lfW@;|HYeX zGuefq@gu=vNOPJXScX0bD{y;~Zw#%uVBS`v6~_P+)m*t2gTc%CNxkY8X>UA4!S26v zg`_Y{DBHU`2EbJ1fCrN=6|8y+EWSLAZWMGq0SF9?TOS_fqU}`> zr{I0WHWnN|t+aXr91R)UbI8^_CZEPEXHh!A>t#Q3Q@vG zt4avW1~kx*Tfg%!I| zss1rbLf4cdKm%%5r57vh)r(6$|E*`o3W*>f{mI*&w>DQX!aMUyVeXYHO1TBbk)dQE zu!gTp9~CZW6rDKkN_`U=heXkYEJKhbC`mo3$$TJ9*B4|wDOu4`qY9^Te~tdS2V((; z6QofOjad$d(JF8BfnfH@wAVJ$4xA4BVD9P^r|As?!k%+h`_A2~JP|Kd=+%jy~Td6@nf zoTIgh9>JgFX}%ub$`u(5k&h)Mee8{Gx9e09AVQ7{S?kYTC0i6=a|u-uGEk3UH96V# zPbG8-N3<1Zc=iG=6-j2m5nX_I-^!6CaC`Du67ka1UuT2TD8iBf51?o^D(|73E6G@X zdTRq0%{V4h7h{Y=g=!5%VdPuNsSBR^6j3x%B-d~~PJNM*UH<*fnPOl~VV{%*eY}|J zvwnG)$?lv&#|7yb6T)FipV-ledT5M%k`7Hkq$#IhyJ99I+W*NuQQw+LU|@?gQ)|BD zpAyR`2`;D!BHkqC1`610gD;D5$Qft(vO7H1FCv!tf~_{smcLMrX~DU-vl1?#EmSw- z&!DEO*Ek@9a*tIKE9$QS?MH&>eWwcJe19kXmhVVz&^gCG-6%MGJxBuHaqg8zkY_}> z_;1AAXIExSdhuhGn4%~T^DwU!NcD;`_T%~EK}6dS@UymZ3O`-S)0Z+@Dam3K?qAUp z;5?b+Kzf4YnGCTPlwjYL8IiOb!nfq7rYoiz!&wMz`#t~a9V=EAF(4ZHyX!%cP&f|O zZ7gCrgE=-UTajFe|8v*>6mAPWjMSUbMNMj2{-z6WWgggvqEtj=u{wPbo2f*Ls;mM? zs8g;F}9OOhXQ)E33j#bgYYV# z^x<+ycjcMeE{i%$4OV9YRaQ^#_mvvSepR(KL+HsnteA2y@L1g(AEJ_pmZvrOP(yh_9^KmDnim6wg>nCJ3(w{Q1=h4L}`N%qEseh)8 z@y*X(f^ubgfK4V|ck!yAAv{e5#~yi`S|%WPg@)dn64p^&+R?Db1NHsuIzjjyD_y?BHcWga4w?`95JT z0hW8>a2w`V1bPbSt%9s;;JGj;@M;3n&vexpc-z9t!;=0nZ1`wMC_!_!d|%qL&QEV5 z{P)PDc!Jg~-zrK0i-`n7jOEC1K`r_ki7rWq=2T%Kyj;bMFMJ%J#wgcEW5==1jP@5-+NO~pSxENs z9tuk%|Nc|sI%3CA6(2fBbnanjzYd>AqWCFd-W)xbSl}tNY_yaa2dJYaHOa1Cbut+F zDeoId?@9j68*HgkKT=mzS+Mp(Q^u zp%%0|M;<8t*U+`-$Sea*=a#BBsFL<)oTXt-+57FJ-Di=twDi_{>Z)MqX0vm~q}TG% zAIRLPF$;2w4X8X}C!rRgw-XX&0eJ3-q&;Ga+q*X6KkO3=gdNzfRj8(7#DL-6dBi$&2$onxng8umzix>^jboAQBhL&5se1> z7%$T{k+CV0hWcxJgTVk3c`m>X)m^X{KljB&rzka?ngCMFkACZPRf3t2gi1vG50xOa zYX*|9Bk)@f1EKr!d7BXH$a?v*q9TY~Ib7Zgpe{+NSI}w)*>)#iC6XZM?*0fh zUHyijq%*3w7>o$CYWs`6Lfj5*0sZ@6+BT&El`mOch|% zI!AM2dQ@f#nQQ@+Y-&N*q)#E162I1ytEM^gJHGcrpTKCE@cQ*$b798@3bcUDt@3{l{oy5(RCfe@`2*N#!cb8BX zxG@S(hd2ZFIt)ZT_X{B@oC5+LA(fsJEz!pLC8>moc|%uKp)bGhx0?pn$w}gPs>>Z( z6kTrH;1PA`meXnVCPuRPpn=)ET)s%oqU zqEYq%+}8T0Ow5&SA0i@0DG0lm#B&?NFXS?mV2g}kC`2q(*a-Yn5Ln#GdlM@*oi%$x zxRAePaawv#gC*&5s+b;ACMHZm?1|m}DdyK)rNJSchPkC%v}l=}&BhF|oACWW#nh8# zs??I4CjJcu3YV9vM#BRbv#NWOps08Kl15$~aly@a&EdVZ`32wYZ*3C-7r&H3_iX?4 zj@tL84JRpM1~n*fS!X8Yg-(>u@+$qptGXI^}Si+*U7v)m|U6&r@` z93a%uP=^@#sudYICvJ!t&{ISD*thu0=;Po*@A;Sj7f`#n9yASU{dKQLh8-b3F$7-O zFvWdW#kx5ev`=ap&xvMl$X6lrXzW)q?4l>o+9uhmGmA!`EqxxcvQ_pfajWS6N`&R7 zYOG>PGE$jC_&p{o1q%yRvUr{##kONQF~?<7g^X*U;aX|ml>xd^NJ1d>O^foW@HgTB z9vH*mUm7Nu{MRZ46t~unc+Cc;mH|1L5v9e5*32Sd`R={T(T1QZv6^Qi6EnV?R#W(0 z^?z;Z{it60D?)@=(KRO-SMALz)E`xc1aJ}AaaG&f0P2WyaT)$T`QtG zB=}-j?v{7^?adiU%6$rU+~LyZc~MDZ4%QvRih7G3Z5EP@6<^%n9`j`pX8QO)F8<^W z>t+UzTn-EbImb8>lmUn$Qp3p?`r_z`SNMmYRr&?F1dGAhi%Qt`d zEt_aG&fp_HC70MIx@H>3Eo=|4>TB=6p4)x5!ebRKO%Mw9Yf?AjH4F3Y+7#X_Dg6?t z`pLvwLvtm*my~5oNuxG#bY-V_sPmkbczHTAz2e`8>1!)HvBY(y>G($riz5O__B6`XFb5G^%Qe5U1U zy?^utF?Tg4)LKmOc)=@W2A$Lyie;Sjd4BWBWF)&>{yhZR4XytfZEK~2_=njBgEYcV zx|iiVN6B+HfdBH1eye}Eun5!ahiRIdda@R3ykJ~-`oKQ2_|^}&c_cv}Ms8mcY?Lzn z`+P#;HxVJFa|Ix7NMqxt(N6+x>Y{2ZTIq|w09d^k3Kh*F8?AP+Lv52nbx$+rJ!)Da zO-0{8p;|1OTE@mSG|HySw+t)4VAO6tEPyf5@dpVFIY=@$U|LtxHZr50w$ z`Q}3e@#g*Lt0ZI?wapC|pQE90a=Q>^?&_r0;758icAZ|0_oMuAQ8TA;4S=ok*)sRDX>0PvITxY?g8I9Ba(QN5z%UV_brz2}YyhA6Eb|&|m9JcPz zJ0p~@Ne>~d;rgUPlooyYMO*3>NWt;$>6At{saS?^Kse&AiRP<#wqbuaNT15jzv(Do zW${xvpU~s694x%8FzZ`u6$+O0PV2ED?#|+a7-6w`c2*-y!a|gn=57W`O^{FLGocmX z1QoO-)^nsnrF~VVVmSle+FfF2ynWY$&D^o`4-ioi zhm-eCx=jL;-{Q~Pr$sLkHdE6!cYTf>+7%O~2MX-@f_t|5g%5 znwyd}OEV4CCgl*&Pm-f!n|SQ4>am806NG|3fG9|yY7{u3^hfjG#x7u@P;8@j&fgfW zYtAeB2v6W%o|@okZmwg6cCKX#rG+M2>LXXGU*v&?U;2EY)JR1Hd@!fbU)ZXn|b|N3)d@{>-rwS5=l5Mgv-wOyNJ3%`z*a&UU^@C^-jIT*_X}9!r`s;5ahoinS{1n zbaB;`CKnitZeVFm^k?rae~iwDf9)HX{32|Nfu1S)wnA$<3ANr3$oYC6xa4x6!hKdu z?FIa4<#h$E$Z<2W>>uxzDyIl5C=F|V<<-q6W9TXcRpVualhH5de6DPaCpxq|<23&v zHv?Go$aM@vkxBG@%o!E|f=WB@#OacX?vcLOVJi;^7hz4Wt27Ko)L5v&L3yg|e%|f0 z%{RVq>SS(c8Hi5DrBy}JJXSt7{Z)b1KflQr0BN3=`ZN*dFoWnSB#`PYpb=pZlWY`k$~Jk#FJ>TsBp z{f!}^+bO287j_c{244PZ1!et#0s_Fx8Izwuqz7ojV`d-g?>E-z1%Y15+=K_>5k9v2 z>Cz6OadVvBEzJX+Z>B(W-=87@FM&w>SP3(hFU7ah68se0{spgsl90R~yW~{Vzy0MIzkr*F@wI^pPY$oY=I}gJ@@cNX!}sH7>=1 zENONc&CH;Bx>0DhBb)YB#aDg)U_2J|FQL(O6Q_U9q+$V7jM^*W8z7srp$0mJG{1;e z9(v+VE?m>F9hqh|5Gfu0Mo0Ekt6%?V);-Yzj8LGCpXQQXUSbIbnd3j>mLdwxo$^R6 z(J7SOJqcUARnPX>Q!y~5t^9T64?%sv*)BG2xAl=3~4PHSJaiP?r=EZyUaxe zf=d_L&%WhV@RITT%vdxg1Y8qfqHOcoaT7C@QHTD4suQM?!L;TxNrz@x1)#W64^4$; zN`cqEaY3*d(LO-~(S}rivo!>gZz2Lw`-|EiKM^b9GkkjIi6}j0XHdv$1aTw_AeV>{ zYnk|Pwj1S`=|7ggr^k_PUJIFFU1zH32E5=XnR+PKjd8-jRoBN^86b~z=A5P-j?b50zq593bGw~K zUAXwV#OZG)GrlWmi9dV|u#>WU)TxH6Pm%@6s*&n`X`~YazlhzB5^-+T$QJ-)NHA#Z zMV(aNqA~HZdXQ_9u->2Bo5pT)Z8bS&F;u}TO-^Lv6|`BQP35&BMpRnR)}6U59NiI> zx2|9k!5W(WKIxg~xhUn%1Obw4U?~e7`DI9awUPt5kRiZVWH8u`GRLdW)Dhx=l8)pk z`QYWjgvMcgFGq%jwAUUjT|t1PaH`a_v)DS{9af+y-)MOTp3|S#o$z}%C`iWz*2^s2 zy_4n-by*zH^f&9-5gXem>aXHi#nqtnhl$k~{HN(Es$2DaW@BL6Fl@Cfqrj#1{ino4;!J6$;nxu(OY(XfH=^CoM<4?%b3aMkpmf$V5wfZ&fG z?q3JqhhUUIH)}SZd|1xDbnHei9b8r^K_=oez)y zm?)5kKskb!2Ewp(VctvgPyzC^9W1w!gxept@F|Zau&IfrE zTO`5H_gxq0g>2kXF3Q@KR|vc{JG4YdVcUuh3{?eGxE;<|5wthA&hj4(Ww%OPAbf;t zg32>Fyze|pTcD>*Du>hGD7*V14elznSS4X2E1S8_xVh@Q$nXDj!&f2e6Vp_Wsdg;7 zv07Yihb6}mk8qC94(sR8_l&%Y049|OrD4r>0K$0oEyh%&v_mUrw(2K5ejsTcej@p4 zjcEpn=r{QFOFKvI`~Fvmb%=cub;3XVb?n7`G%2MoW^5O)0^ec2JB`Mi&E7nh1{qm0 zcWFXW4-{uVl9Yh+uMnU|`AtvNv8Q0gyrqNoY<5crNXmfDgKz0!CYtC#MG% zZIYf4oOx^u_kpd^ijGlDRM44XZr*H*i=nbTKhVNjJ6trSKl~W&LN7MbSLBYch!Q@JANunnV^^rHg4eQA+* zto|*_E|H%2&Modt~*sFnfjD?_G2Qw$eN((V`{Ymnk(|5QEo{XapC@p zpRnu8I-P9GV0C8l2BEYJ_2kP~QJz%u!D}L4;8Knw=FRwdkOQA}$1jr{Kp8z9N&4%B zEDJ1Y_sF{21x(s1o%|ipO;Z$9B@ggAVZbfM^G(s{9I<6Wpi&V!^=}haerk`;@qlG> zx}o*!PtfWF6w{GxGN2esdO*V2fVr8HRdLD4!30&>bPCZPVFS`w5OMx4n*?g|pC+to zp-Losl~@fH6_bV!g+do5vcb*^%r(MkvTIQ|_y%F{GfLKyo-FvG5wOl7kP_3Ksz>;3G0*1W2ixTz)*8S;&4^ zHhcOW&dMzTpq<cd?r`PcD$4NXpsV6_7K4IPF%5es!3rR z6_|Bxi7ISC=tpCtJLN|BwzLx)fuKkAjc9HZ(aYRFxjQDEUi1?j59y44XUjQU9KW8n zUM3?T#?1qQUzjAqU|0C6mh6I~3Y!mg7E}?nPY>+>l=UhHx8voAgTMM2yj~OaoED`g zMSu3cd)8M?M8+qLWMFI=w25Afj5Kfkt<{Zc5)-G5y=I6{0i_1``tS-FjfJ3EZu8K# zEf4b<+A_Es80#K`mok9>W?kB#Kbuae7Z1*5*N7X+2x!l#FR=R|ukuAS`*%M`LE+mF zD!l1#modiQ*x07GT83zy`!#QH>m!`g#>6yz=+Z5hy)64%jV$a?8c$nYi6_!EbUx~1 z`jxdU8w&SC@XqJ9!u%^??~gbhu*6rC5Rpej+VwPLCS1=Lb_?Z| zNt)0WCj8?yx}wNB_uP>xVY$JR$s;GxAV@x1PP95N+0_8!^8vp7!m>cvY%PE3UHiOL z{1#sWrpq~ki}~Q5*aF8}W)3$R@mD-t@rc$@A}1-)E3ve^U@tHSqd(=r04#2~a3+(r zZC`x6n(+T&+kbwr{fIYeZ>4>AP%?E+KbI>>q1`o4o`s7}Jm>Efhk-rSvL~|oEXFs* zEL94aSO$U>#DFS-#^j{b{PJqwJYoFc$nmi>1=4fhQL+bikZY8N}N9ri=h0h;$@nUlC z&9SVo?=I`8SR9>yjRn0xusRg5>wX$#n?iNUE3kK1zN1CCOlLUp*6(pu-0oJOhI0HheEx=^fQVMG(VUSS=h zO*R)Ts%P3l$)}IFc!PSE9P(^V$#pGeN8zA*koVFa%WdKSi6mMUhN2rl5El|tLWsJp zE{eT9MsuCMGAr1vzyI%5DGqmGQ+=dwa%=8(*ErL>g6uOm`u;hj?Q~DE${|1zyok7L z?*LRk%42NTZe`70e8%yxB*=#B-)Afr-kfsq(QrR&UGN#uN~k2$;ywPqB_6bJrBB~7 zj?gJ^w%bEu9q#1`!Vd3uwJU@0-?wS~!&F3vqL^mTOL|9*y*Cc~Or7RvODE30mO%4x z=lnoS3T7IZ{Fhto;E3%xl`Wj-vnUJ!n5)&Nr{P4JaN)PUFCO%291-`w0E35Uq$ATJ zd@I0TZXe4q&yudRwgmbhuo{mfqb(E5gJ&axgGLmRBVL~`|4gXy&yqqKS{6ge3Q`PF zZUf56gm3|^;h8fW8EUF&V_70DS!i~AYEj3V%{lZ<6W?1|4ie^f>VULXSY#Uq874fo zNs?1qhUiKXwWK(N?w6RVHf*jKpSRLnmW0D<_02$K${Amryl1T?75}|?G_cskGY(2L zP<+>jSziP3{xISTX2iQdZ4{UTkMTk~wpoG!R?52hxtEaQG{w+^*c?H zxLM2t9rEChu_i}QpIde2>|L}II0k5aCQxikl-}mcW%8tv6;2Us!JN4qthd6I^g9q^ zv$zpYj9;{%qHreUHsk8^cmb~E2HB)6gMf2mqrvTGEpYz`I#n`e7pIFGR)vhW-j+q_ z=noOR@Ulqh7yZn(8DF_TaG2Nl1l$du?~GEi{qH{2JF~@MzMY+^lMk!MRRkAuIRN{^ z#mfeK;tX4HY8xBj1WQl#3OQ+#ciNY2(rltzU?%X>#~s|G-6^ z@KSV60zud=tQ^N>Q8k%hS@k<>!a4Du-d$YJ9N){4x6V(W2JOP^OHeQbRIB&a!}<-M z_`->y+}<@j=KNLbZ<`D^;wx@%NGJbmAc0V_x-EAE( zAHUF(?qQEsZ=K52oHI6G0}ga8_at*2S+6@3VpyH$GGZ1sYca;~ptqK6J0oW|-1}R6 z$3l`*7_``2L)j5~`BKbx)o4~OIT$b4Y=7z?y(Uh=Fd%Mpc{4OgcrN)v=GRkoZ-Vum z000Ox0iN@2OaHNznf0CZ0T45gBG-eYrIXDy8y4f*;1K|d^J&DHL#>E`$}Bo8FZ z9H2G9*LBrsL|EcrCV166URwyKI7|+(N5EA={}Lfl^{M?7BSGK6t!O!_*2=(!(qE;` zH12m4071x&o%;9jVJ18HDZHX|1^xRqhY9T$eGfveN4;Gh_?|A)^A@V z->@d*NV{_9S2Ac8Ad`P z@ggh(HnvSctE}v)6sbr8`n?APNc)LNrW(By>NJWBDaZ2`ep?^UMu6K5mS&O4M9sN{ zx8h}PDd-j}%Tqv{bsFFdl($5%-Nu$Td>G)!<;V zXq1PpRQ61Q9sU{8lcYTo$;#0pkm>@@wWV*RMHjVk>rRCLkeRS^mIr^U+H!fs1iGh! zlU++R{q{OLPI@wE7X^U|*QXz74J-UiBT`v>|A$<2Y)=gZySa0)ARk<%t8QS@D?P>~??*IinSv)=yU;yl!w`r6&cr z1vNJ@EncIt4boxz+9f3)Z)(8W&)8#eo4Sl`)+}7?9fShnjyE%>@@8Q7r8A&Jza*4D z5MHs7P&hDEe|&i}pq<^PSOlIr43mRYoyIB(1id!$p<+94a|@Y?$3dw|SB|sh-ELmG zJs~S}vSF5@eyD`CpeoDz8Xw$8;fRQ6jK4E_t!#S3$lgI=u-WYZS>R8&?aFj*p+esh z!F)f3#|4=~T9~Lh z{ybo#D6fXCoVC1W^5d94ZbO=;M8X{wf8!W9?-M`^h9}(*(R11I2rU=>0Ju|gjJI7I zM@Oj5!OQ7+v{<8P1S#~OIACL;0I(3}!!cfw<<2pq1mL)WB7L+}ebSU^qV-N!K5Y_> z>sp?7Zm@S6eG{TQsK+-i5jYYpD6;sTAX+E2^0@qw2eST92)l^gObXeK>qt@E@?Eq! z)(*U@tP_TQx#D}38QIJ7So zC1MqBTa;}W7Ss^MpvbbUwuUohK0YAY$KPO z-##UQyK$nVZo|i5%UhN5B+{szrl*>1*BYZ6KU)&nSAbUvRY=XG49zw4U&zISpa-Im z*QJrMs&Kkq#&oGz-Z6(??*;B>juyJPOjG{9vmzDov^IyrixTfuPXNa+y8NSW_1Y4b zIyv|ueCDp zmG3TvT5{$M^h5>lGmJhRP7{vbZe0Y6&EdaZJelG2-Qg8JPH)vML#QiBtOg~P=bLQ@ z6Xy2|%MkK4i7YkNOf!lZe5e!|4FV6(Xa5b2SDzB_0-!4XW9+!9PUgA5*O^#m;&tt-No)=>>h>i zj&yy`KG81HB(By6;*JGlbSnOSBV34Omvr;#VAXeL`f*XGMX-t*8S?1A>a-IP)Ffio z>oO{jb&^+zf7;$hc#){0-ai*Jxa@=I%vkk9i##EyX9!~&jZ-D#7=1Gngb13LO)`0( zX+=BL$aJc%k}O5GWcBW{M2z~IK#u!M&gR95bweI#cT|!TAiA7}$T$vF2&KT%^&dpx_7N9$zZDvBq1cWVMV_P&Ah)0SQ$h(D;jY zp2tV92`XD|`>R%NbTsP0<%A_iu^CO>vT@I;+rF)=G@$WSX~N;QHAHL$R%SWDrjuP_ ztzxq=QlSbqX2A79T4zBD6c?pJ7*H884&jyUFmZ3!&u#Aar`nEwU%4?T>q-%ddet3f zgigE>(5@3bM>r)k&G@cw{)JhtIEnv_>i2yWv=kL=HGG4vBc6ZUf!EwgoylVez@V4_ zQXAjdjR?h}=ZMOP<0#KY!667uHi_1Oa8xs2vx*t)UF!Ko2KIm2S${#H-u{507(=EZ z4ePxAj=4y8JV~p|T&)lT#a4OJ(r$8%C*j|+QBI2<3tk51`>S-Jbud>VUbYBtUsSXc z&&BkIY_a38SQRc$Gr%dc2O&`M%~Nau04-EOn)f^*`7)RUUvK`Cb(on?#rLRhhf`e_ za%WM(zo~t>@176E7*rq(7P-*+07n;E97xneK+8P!YXpXlzWQA61kJQwnP>!m2Rku4 zO0Pl{rv)G3V3V;n6)BKazTYi4pi>YC zq!{AtYwsv({k&;F8xOTrx%Kk^i*n}m@W6jmTDdQFQ9C6$YOqG?ZE&hfG*GAlbUT6z zENABY8^=VGTO18())3w=FPCIdbzHnlPZhX6g_IJ)x`wUge}S2AP+rtU+^|;I$#!I4 z)+$zE?Y$ux#M4JBl2WfU^hGH>rMLuFR|k{t$YwYbd1*Olgnx@XD*b&Lm?Zw{13Pn? zh-$D12C)0=QvNpf5;VtB-PwwOpM|&>0eHnePjCRr3fad8C`z4ols8AeEA?CsyxIy9 zx1Sg|el}aojJ-lV4SOwQcDx=4U;=FTo{h0Y-Q%O;xtsjOpPW*86N8Cd8=OMa$Yo+O zQLoYMx_8f%&%a(2uwN4sOBTKV(88NgLcN!bti z_?icGNTGePR5uKUWhJHR;Vcb^H^7Hv#7D?q55ih$ ziU>`;Y7|M!;g>G@H*`{Us@BPuIjiusiuq8o2>0OUjZuCq zqtq5w6xsGR?VB3Yn*DhbOLJGf@ zc97Yylm<$qs|a4?i!F4#5^5x~O@Tkx*G+M8MW|OnZ$GqnOcwURmrB~n_B4-y2t+yf z+BjAC;D8N6R4fLac>kybwk_a@mO!x~^;LGu3^dQO$pK;Mbdx$LaQr?>-I2fG1H12s zZFmg<5=PjH6%H(CK4JR`@3{Vbjiep^#X8F^NrgdFYqX4fXVWI47=Rb*cq@-LH5Kf? zGWu~I-(S|G9NjYHWP;a6yGJF-^^iUlM(1gHG3Q z3&wdWXusr75koorWkR>?)dwF^ zLuTznDRO?>h)N}ZRxB7>-E)5BVLg(7k{>go1e zrU4B>34sVSUoinshqgzJUdn2Pu<#5QW4RPc#L{>~!GKBpw2AUSu@qb9#a~_0Kb+AEh}l#-IOO_z ztE@YV>=$Of2#Zg}gm4Z9S_mqXYIzMc4;uX=l(Ak`fLxWDOjczJYvIsR(i~ z9VphItE&qxMRz!fTX2_MYX0-D`CW^7V|H%}dgmp%(}b2p?-y^QZ-(C!CBmkRCYYxZ zbbYPY&^c`%P`_TXFS9!qSrX~(4pj0@th0PSqFnwQ!M9mVRrrSGbVO8cr;Wf*EX&7c zV*@-=(33N@K*lyBL`GD-vxE$KZG`7tkaX+!es5+P;=zql?sAY;Fa0HLLMH6H9TAk^ z$e~WFN}wEhn*z3rh`*l%M9T@z8kIL9RozefzxKYQ;-OyNthE8|cd=AD{lu%D7y0_O z15JPcG@rOW8WJvUQKW#;A41Ek&oVft40N(7!8Tg1ar{oT1tYWC3!|K|D}iGOc-wksnOn#vGvN_!_G_Jtc; zQ0)p+X{w+kV^tW$hPleoUC?V%c2&j(N&j=c$*(4sCg(ReYXW^xsS84z z&Jg=Jyb4A@aY7x&Tv@*jOK)brq~e-aA8jgHZq6kiRSj;m;=VoSOxgC1IY3s4uU5u# zM#5UPS$HU!QXb`KD5}sDRH=T78l^t8wR}|t15t57V*DII15eP=pnOy_8n)Sf=u#Iw z@k2HYJ5|G_#SIXIRy>kg?OdMQ#R6J#9N6V7z;=iE>mYH#t2fn7BU?WZgXr=B8@e@c zg5%_S&}u3yr!>C@PgZ(F+AqI)_z?DqdYi%->Z{xyiAvl~pB^3N;uAx7Z&Tp7P3Uhr zgi;6Q5;ySXtW+aZWCEv?L9;)Qh^!-##b{M*srqvul9@WX-HeOjbe=20)w;~J{v_l4 z2PN>XtoEobXlgGSJLH`gR~x*}Q->od6Nq6J*>~OmsE7}M)-BPQOMH0Zqoc-QHP;+G zODZ6|CjnfjAZ6s=t}wRc$n4*nB#g zWJ!qMnC~JHq=n80Cy5g=eW4}kmK)S(0b-{mdcFbk9Ek|Z(&vV3+le7Bhp; zK1i^&iB`|q)U~iUU!Xhd-vRp!o)gk_<&e=tXHas80CwJ%yH|FWGXHAc8Dccfy0~I6 z8Y-!&JwauW#y1Uf-Y3M`)t0a~L1Y1xn{TSy4+sr%;SR&q13qMmRfJG=j=6=YB996A zT0J7txC|%d0*! zlx)w18>sf{Dasj*RvsCynr7uzp)*$7smbOer7qK-Ftnp9Zk~5LW^L9VdJPWqi!=5w z)s8eR>3(^9aA8wWwhgjVm*-e=>$+!&gWVGBppawjmV4}&#JsK==(*5IBSW&{ulDBZ zvVUyGH6qXXuN%h1R<$L&@FaF#|Rfyz1!ELs&jiB9hzfh{*$0=9! z*92xB4FEw4`e2&IpMmlr3!KICcsQd!FzHs}liyG!sjXo%;~&VYBu{tDRoZTBaVK}* zE)rm@d*#+6M$m>Se16A_bNd zA?}bwbM4bC}yDoF$LsvmbR#oAUm3xxV<@e$-BSvvyX3 zb^?~peME03pv`%B8U-FbVHkz=V2yrasvZC9eo6Ib{SogUPlAHC4@d@vTr!XS!tM7( zMl6gjx#_V=^M)wgwSMDshJSRdHHk{<5ewIXN`z-M{K25muq|Q`EZ}h3Pr224G*-EL zQ^nXbFeAiCICEK|X+u%gS{iOhf^r#!PTV$WV+(e)UmBWS6!pXJi|u$T)rr1g>PN;$ zq>fzh>J{RW1CtEg;Mr<9;xKKDOC1aN(%e+XLWt}Jvfy8x zADI)tPF@;H2srcwDRGx;`Le|~5AY^heWJ6_EISA@x1{x6LYz{x+VBGJSg!5C3W?Uv zhb5WI`JkW6Y%I4tj9{LSl6{wc67#{!er>GL56$i}9?c~+=Y`be9M9)JdlpEEGNjy! zvfIXFR(}-3eKf-%r4x7rNm~t)A$z$P^?%Rodd9}};hp`)VfHuP7{pzT$)17iCzkbt z7Wdmr|H1VCaQR8TQR=4D*VaJ{U$os%8unf1fn=$hz{==FG%UwF_w6Hgx0t(rjK%*+ z&gxP@#Ku^Q!=db@iTNT2152<|ci}N0@>``&n=y<|jAu4kBRXR`lrm?wLr7T*kxtTP zHNtic2sG{QjA!vlwl}kgaN9%!#tImB8=vIWY~Iq#w0x%;2PO!kKwnsDLFpEc6H>lX zS8IlLg_ohfLJsh=q)@MJi676RF%&TJ<3k9Is!e2;A}H(YbVp~nt0%mqU}NojmJ$=~ z)SW(O-p}dhA*;jQ<(+V&hFC0JK`&M{K<15p2aTbUg0QER?mT4INHnE#@9?KcUCP9egWy2i@U(z=hR{Yye|u%jBc07>N`&y9L&xP z4BKVj5tY@unP4fOBMP7^d0#xFMi>-&DhhwvJT6RM-o2AT8`+H?4AjOd&r<+DK)}Du zT0d?($k^lePn&ADC=-|=9St5!U1Gh6^Wc{67g%L^=t7x-J-BzHo_Xpx3KD5DZIcLddIMlJ{1PA;K>FTqEf zkU8*JF?o0D6$|h;x5xCbF{UY%642g9e354>`&fvZr>PR;y!OJpzpwe@39!oXbKl_& zBlzZ%q9MuKA__Aa?AAy2SDq825C5Vf1P?EH5GmRTH zlU_wTgvz(Ed3i~<2J+K$GEA{e)8)>G?DOHXix^XTe~4VHXd}jmLVpZM0@$UxdjoS9 zwJpTAl=#Is#epkK2`3nqgl_%+(~PY>rtkkG7?{VOr;*?PpmBD;N&-qggkm{9UXrZR zC|61wVl|*4IW;s;`qKq-)Y(AWM7SZyeTRHM72cpDUYN5Tcz5qhF*uX&%=v+fdYRdY zv1*!XjpT~vtXM3T*25e@*W&Gu67??DO?6up;Wv{=%1wNsvr3miOSWGl=8gl~bA$Oy zTLdDDsuE2uRqs-#F$hPQ*Zx^za^Li*P_rQ7h(-M9{|4H{ z{bS=ibn|6zq@?QcY9P?2hYjPW=?SIBCOa}9-VLMYxwnkE7w}ZrI7xkOO5wP)6SbhQ z=&Fbz>*8&{ZjE%d3J)P-SymG=js}>Jn#{RrOM^GHjg~y6N2n*Y8X*UFFEYu9>9h8PWz4QmCza;x})oTy*@Y8 zo@g`BKbFa9eUp9~_tYLtCEq(YlKyPgVt}Ftvrcf@PKAE|CA}80bZZf9dog?58r`pg zysr&L&7!CVP;krvgaKjzU6|MYw&-!0Y5k2@yZI3N1a{y_0eGb+p9tl&Wgqik*B9w< zC;wBMQ@}(5Py`xmPQ*5KO8%Zd#=$es0)^aTj{m|upFe_KlDQ?6wesC;Cs-r}!DUQS zz!%V(>jlIiK)Lf!FY}qJD47_q%EwuOArr-BEM#Z3uCQ)TE!00zmkFKw>s!!TC3@6` zP*uKRf$wnwiDcjW{8$!<9{L}RRm$q-8Kf~#*jqKzagupHep@~gw}hlk-!X#l7xD58 z0XpAnth<@PqW7Xmjqg{ECjeZ#4B`Py;tI9*ZfOBLQskKac-QZVPe^=tdq3ubgzl>T zfm`nOzXIVN0I)ugtZmm!7|i!in`nmWi?pI~7(TQ8IrZr+mH5nM=#Z~@_mR=d1RrV9 z_MyH9d)qAh@;iiU!tzt%CJb2DifEkC%APSB$OK?q@y=~I*aX93@Zt$~;_G;ZId(ox zBj^2`wI2}p2b+8T$mA+xhiNYHXiy*d;}(=4eNjE-{;q0Y1xu3oH0#KS%a61IQ4*tV z1e8z^wi=;*fD`Q}bn}hd^VfKMUTHC(| zJF8I|OpaQWpORnV9G|=~SA=P-TfxhWNg!Zl(lRt)usnVudtdlvd};M4r>lm{IUhg( zoSzx#>;B&QT!=c@DleyF-kH~E43>CFsfz7J5M&i3ga#t$R69hCFPfL%nkkoZ${h4S z`o7wnBJ=~(T4#e9twrhZS~bpGv1X}?qXb`%!~@4a?TVc&W#M>oB93~cj6+mc! zgXo81njg^e!Z{m{9mTr`wb4%sr2tqdSU0xJweQ!m1he19` zdJCNiq=};~87Oh)l;7oGPqBoh$e1D}hjLAN4Pj9x!;?0*b}3DGHn9GoZPz2~9TCZZ zL~S8uCPQ+WXu*&kRq|v>p0`bJ$9US+{}2}0^I!}+0y9f_b#9mH8w#(}2rLEMx)=@VX-CvFA4`UV3hM;qQV!p2NjMA_ zjoYv;)vn~K{B06QW0jlE4Wh{2PwSN%Ng*Lm(bO=CZW@oM&dsKqV#zv$et#c;hidy; zL-b;dDkN($@r=ZW_kgcuxQf&lSvtLtdfw)e^b`1X>D!!dA~x#(vW87l*p2WW1;UAO zSuU~>Po=-!dQY}9=QBql zk(=F!8V?KZLAUIieeNO$bs)my7mYmmwd`1)5mK9N=`kjDubPl}{}65Q&MT7V`u>>$ z^`{!C()vqJE^s6uU1&IMjh7DD2qvt<45IB0;{RH!%|%Gm7u^Q1WAa8L5B1BwsMJiL zDzk3wW2nNomri(}cja4cf37_LNwz7ix~_K&s&Ehw9nffZORrg|tKJ|J?l=+xq^s)M zk93|UE3X1g7}YG+usXR^%4vV>#4eH%dIytBMDMPHm5f!&(l_I`+)nYC>H^!6rPiU*2Ke{K}xE#iJI zLMcma_?4k2;5X0{Q#lScD=AP_`LRoUmLL9{NX9Hsm$8T$&3B}Ldnk>>DfZG68DB#>93eH!|}eJ+rheEnwFNrGJvBjdcAF|6^7BLm#}@%LR*Yu*z7enZ!3tCl(@BW-QhLer6I z$OQ`8q9u+^2&x+Cp_y0zOPE(E0t)k-0r4gcWHOD}M^CX^{k0uKKqXzG$lMpF?X3)S zuYItGbnwhxf#yqWgz*vU))#z7SXWj0w8_iF@XGi&c}p)S1&F}NX;%Pbbr7~MN$9DDvyL4^in`z-z@BAAoIRhW z95?YF`F&f&;hF*!>Z(rL;c(r8nC+1FNYEF2mwl~E`_88#89nNwn=oljBmgQ@m=iaX zw2lCyJM}vB5@g~O(#3{hl3VxxgC3z`=h~q#M%LAAImK4^AwmE?w+ zSwi*;pASn#{%sMrZpp}HIj?96|BL|Zv6Ajh?2R9fI@5O|gLcY6= z>SC27C`m0DAJyY)s6V>(EGBFRJ*S-f#O1Jnl`K)ton_AgF|_=fqUzQ8xF zQ8}hE`A1yxy`bYKHvbe#&~N)rO@8l?An83kyxV=z{;?=aC?#|b`*K-XFtvlRT)ft@2u&Q&6J=|D7!G+O zdd1R)=7(u~*@b884EJZ&;?JOxcy6EpArHrrt?0HRhsI?2Mxb>jaz2;o@3K!``;Ojg z-|!*o0eR`PU*gO?56TGslMz{?m)m1UQ;GSe+=`o~SYN=13$Bi{AQA)vR|@C}y_XT= zs%6elZ6mc!?GN79QtXj9Eot`qU=AVN1A|fKz4;)#^{QnB&G5RW^=+0&fs3BlO=ObR zY2Bo;o44Xx-f`8$DT=-gYnP|!6p=xJU<}RpP9AyFD3K+QdLAk1#mJz0W?srqY@^Y0 ziE0$(!;-m|-&%rJS^-MO$gtAyx+d8-((!)yvX{7Tm|>04Nj^^sl5fhT4<&es^C4V{ zS81fb%AQoX{r-yG&&U>Y@|$O)VCAmU9#U?>b+^H-kPjk1uPvX zH~gCqftRlBRWOKD!c+tcl(5MtCDq~5AqkTqMFe_aP_Zr(7$iDxhk5E_?DonN6S!+9 zpE|co&vIZ5z~}5IuXYaU&_9EBQuGF=S4M(Flkr1~2tIq$#)H-WV4$#;|NNC>r%e;j zBbI_(S?C*hMAGzBPoX_>K)0gt2%Fr=rek1r%!O(+Sh}X_O+@BrIMlRY5qxS)=&@gLS}-I` zrhB0==8fFVg!^Z=zj|i{V|8CT@#hSwO7df#J?pD0+rK2*nF#rxT5HvLRL8Xd&P`E> zDP-&l<=?e&LhyATU9+Z=P~*HBwmF(4hV#>pTr?KrN29Y9(U(URV!{j14EsP3x@hqJ zP42GW$xX)&fH=2xUS}!>B@?P=ZSTHX=7qg1ksjY+yYynIwyiHAgKohA($2hE^L`T68ve~6o^f}wK zT4_IEl*NW6qFx~F#6c9cL~2+sa`ljy*TC+P4%@0Oj|yAF#gD3(YfwGY*2P=E{Gzb6 z{Pt!56}@#Nzrpny0-UD>l+G3hifhhg7azYQL071USo|9V-?^E4tUIs*q;Rzuk&`f( zx#po4@1S30Fz3qmj~!zhI7x@WG_W2;VTiQW{Tbe0w75VY-fB3AmTQ_?Fi}rF45l!Q zEL0*Q}{hG==b2oGJ#c`!@ftZ z-u5I40Nx(ItcMnx1Dg9Lm>O;9>#s7h6($WplT9*Xs(G7xBSXqa1)rg7u~s8%)W?yTgvE z(D1CmRF3U<#4~~5jto3)(4c@N_;8^;?ptw|x3)(cIQ$;;*{AwkqdPco^9tw4`0}p*s0{^xK;)u=QRU&3lO(=6eLx$b zfHSQO?Mo~6oQRdRR(A#>AjFhR=iZ)MBbv}!)dJ?&80LcnsIAK@+?+*Z3h81@G%wdn zj`_lHNYNQ`<4Rfjo&*_Wo80!@RU-+w&2dlCReSx#{!1x08hj>6T?GQGa^7abTl@JB1gqq?6{DQ zFTYy`!Y()*<5s{@(`bBk%c&8P!NxWbh!KwB6T69pT?Tnh*gMO9Ww2O&iT726HU1x1 z^3j$yS|m;un~3_|pjVCRdd<2J{HT!S9>6JA)1>O>j-3v+CX6zu#f7?`*oeKo2at$j z^xVk%cxzHh5wp;KtTwCQTpeEeF|9|rjbK9oX&4dlgMXnt3;|825^+h0-%+#WXWYZI zZb=1HluAjKkGL8)<;)iXs665tK9|W-0cMXNLW5*1f!aX4Y?a42Q1e;Ff;*dqQGPYb znv#tC&+6L>j!8nD8EC=oZM;gL7zZoaz3+ebvkQUl{a`i;dAnVMUT?3_1>TJ%$kD!% zB}79su!+8Xu^hoBwL1Il*dUg1aDX^+f?r zdfKqihaAEl{2}P#N@`S~S{UjG-`;fq-TCqPmTOY?KS(P5)0j14L7QP~;S_AIm>(rYHB6s4!9kMvE$L zdt4nmV+K>G;gyODL^4=)C?5>$L?{byRd?t=viDlfa@7!T5hnCe5MA!o^IUT)OeGfu zezbXycmWeIAadlG1H4Hu&#qPU+Eb&vcFTvm~z4`ECQfF?a?-ac$&_EDxFP7Ao zy$B_EXcG`AX%!uftz8gzHy~jw>JJhNPT)77-RKg zr-#FoU}Qg&48%rQW73;a1{t_pqm^~=FHosNQ`ZTfc_tZvB&H%q$X8pX9t$|HuVu~5 zKqi0Acx~l?t3`Nn%{0NkmY{{Kl?@QIB&!5txdOs~BWMJNT#YO1jbiaor6aJiJeS8T zY+a^uY;^ZxZNC*g8H!qFzshP#6+1}QBL9B#kRxoq?j++lp&@Thj#om3*tA_!;UUp5 zHFXIbOO1un43`abL>?D%g{jg-0P;&Q?b@5qIUBgIwc)4+Rc+#jh69zQ1Ue3uanhds z?@>MwmOGyMyYp)EBdqXD8HbK#+jU_NDG5pqZ*$tNL(NE2H_R7%Nnz~r47tzh+5u}V zrP`?kb*CnYXNyvViw74$)K{Rb=yonquiScPX37(!A#pYt=j~i_L0<=XSnkA+pG1r1 zIo}%SX|6duL~3#)Af4CD^6H^kxg5fY|6WHcfKTgxMg;Ca+A*gW_1dH`uF$u~+0 zWf8PSZ!sSHxySco<2q-mraW#GP~AGwy?|%Dhq}){@De4@B7icPf~JndfiU zqSuHcGO$&fo#83(-y2e1aco+>21v3!jHDS` z+a-(|i8rWouCk!h_e!lS0UVlH+g zepGVRkYk{6kD=Z(no^QV=i!)x3kSiRo&ivl`X?gFf`}E_vihjr zH!?0EVWw1qoGIHG9@FbHsgh^5yuV>Dr3)e_&RF*3#gH5i2r_UN;Q=w(vb-BK9rIF8 zr6$cbcdl>9q7Tq11vWNTYWi`Km>B81KnwvJ6M`ca{LHX!!X^{tfk^8?)fo3rYSR5p zQUXCottzcsd1u?Z!&{lF$O273xp>Hw%F&bL4;V|diXb0;#m_FT!m)>T+YSbpNMYbr zZi^!Ig*t^;JY#mMd9lh|0f7$BDt+)X6pG#m@GnHD2u25LjBX=~Mh3cq`j7+R2gq)b zp0!_PT|lq2`CS@xRIhIirx>nTh4|#@Q=td8th$6H!x@rh)YdvgoALBVdZ(bf&!Cqv zZD^V6qF9VsPqx3{WHRKcv_zi2t~}?ZWeY;;KSxw1mQ8B)KP+|JLw>N}B%+$nHCg|7 zZzuS5gWZEJGi0J=W)rxWfAvweo}cQ(alH5Ba20fSJOb^O;5_{7ZdnH!gYBMUSAp4p zT??iq)LX|68DIOjLEHoCF)Ld^`15)wI94P=&b4;okY3M~Pmz{9C zGP2LWlJ5o;Kbb_z9K?hK0KExClciEvnp)w5-U(g!3R|cJx<+(Ft_SOY|p4o*dt8uimKe+F|FQD0_TN3sOnjlAyn?`!$<+!7}$?1XPd_Vb2 zFZy6QfPRc)V=DUVts`ZNmQu!UHbrMZRpMGY^-`dO*+$Fv{$uPf$<5&Cjv_}lMj=K5 zR_)poB%AlTAeJh^J^||DU(GncbumcWHl!&`0${GLU#y{Xuys}#000X_L7x?5lvGUr z*08*R7aqd{5k_lu6~lX|004p=XFVFK7Sc#t-Y&u+77J6`=4V?MN^omS15Uq!JDJdn z2)T)zrC!Kg4@#@}0{c&X!8f2=+*!dxCYD(Tr5mrDX+-zdo$oy20c!Hh5L)qwa1-i2 z>O`0KemjK9h+)XzMo#J?ihE2?pk)7B0w!%}7-9I_J6ED0$OIe+oYKB0AmqIde96mL z5y7uRHXJ@ETWpO?HDI6Pxiop@dlTB)zPGZjEZWv&@=p1q9sIrifdg#}VEm@XKH#hTV%J%PytO0bmu zQ!w*tBZnU{{|hrm#)j)(03HeK*WK@+BIHw?gYPa6KCr@sQ``x!dEA)s^W}^3cBV6fN;GI z+SjJOf6c?N${xx*a;00E3}v{U+EUE$7S@1McaXAqm$3YSZ)6(aC$nQw=Xt6dnTRzk zudV0a+Id-iKw_3%*xOqBDIce@hYqSqtmoDq-DJ_`TVSU*zbU(GH%T(FrT>cToHJCX za4&VH8^86sH|beq$9Xh>rM8`?v7F4v|~uDetu`$ZFvVq+13N)PMo@ zYg!tEE8X`9;yU#?KOM8hv%K)3ao_HeQk>vI^;MQCf>n+ga-hx3_!QDLg93icnd6ki z3GhispN+F?)KIx{8-P24`>ciSg}#(cEhy~VQR?l?)EZ0$A2U8NZ%Jv7J`V?3y#ESd zu|ve675dskg}r?R^!$do&0-x1fV$d{c=s)|SzH|w6joFO$hE`~)k#-jCK+6BViKmc zLnZoGn9C%GoTw*3lWp#k$H7UXcku(` zvD6pNWFqunm4sGk`CEdOe+V5O#-}1Vg4N986I>7n*4=6~V7B_T!f@FH!vFTw9C$yR zU<@QGjCuys@9V3?eDf0~^n%Yl-`r(YKyK!&1*H!m&D@(WMjF=cMtsKXZAQ&P6ziKe zI9fhq=0Q4=>ni_s0W@6d4TFuKSBAU7Am-`oJdSVQwPyE4Sbgj!{)5bM1B3o6>;A;Z zi=*vm*w>cm3G%sjLW&Pocwnh!&9Qa`w34T?@@Oq%0#gH=#zv2&`x)hoqy4%abPgvI zOR+GZi?u{?6zk(JB$sb_#ZfeE1nL(T)kqJUm7)hYbuWn6B^f^FPuOQN0f7Y#Tx`Rj z|3YNe1U@(pF7~K&RkMf>a^0eE3t(M80@=3)S?dQ%Em`R zRf4~cCat0{M>rY^l~U7DQj2+xN)F2}3$k3a#;ITw{1GH3KA(wR_8PIjg} zb`R$L#SO#Q;D@B$%a6E;KG;f{ld!!Dep>gf;I$?ncL@0V>JXqSLUtz&fQrv27eHyL zae*POx06XdwY&8d_0G7wOx1flU7K2e4T74Qsz<4aFdbMT}=H@;OiLVxLs>320;CWIJ}Q zS1BmUpNp;;L~c6C)8(gw5yNIKk|qMu+DMPIBSwD2rRb2?rK@v$=1yA{3GT!4gWE4* z^$8rq*(73KkPHLAB*ieW0GtvGArNc}WtoOMKpFWP>2oDb-yNL9l}nq*hCD(qtL{=Y z)MT{CzWtdGi!0n{6{DE1>QSe!YH=AGh*p(5c_b3_0^6Az2PFXg;g*CDva0o5Vu=ok zC+I(AeR_WS;wkIRzi-+R?P^+07^ zBX%H#Qt+y*W-PrI%hOH2H~Y!wFY%H3Cf(XBP)i*k+HGSo1$D!fL&J`;skv8+K3*$N zhxx*j^K;lzW=!rkNc^y=^>wy6M%xU^<#`EGba6_rZeoq%vLQfIHn5o#Fao4XJN%$i z8np7`z1VwOk{QiEftU-?H|9eImh2F*a+ImMWEj$vL2+E1p2o#+4jTp3*XyAn3tB~$ z$5Oq42w^x=!Ml!;@)CJwEs7h8*8ubArsx!9BME>yfD;Oq$D_m{J^`|D=-bJlI=Gec zv8l&`e!<-0`!7Q;oai3)w+X2??+7w;F{-5Mg@7q5t{{;6GkRM=))r5%#SIj8r|)qq z-it(1ppvkUf`=_kS&7={$>!+=5PAsI$h&d+V(;FS?M*;qHt>&(TCT=lp0;{ zRgQ+Sdiklppuq#jYt$lH6~yF?hCg+C!=p|X%DiQ(%|Djd_O3uz$WidDv|~s)YJg2l zP$0bIChZG@jEScx8JEa;hVyP*dQgeGYkW4s^Qsn)-fHCMm9!$E1~gs>coK>4zQ1u; zpQo*twFf+#lRND7+i#z2&Vwz6U||Eti+l9o3@5=K5Tn-=De~F9qsC#OP?4eLo%EzV zfIZ>0>A_Z=iWQ5>pfGo=5CyL)4o$$VCR5(AEPh-~HP?V(=nxa!wQ?)_U_>f-bs;tz z#o7I|a1qEoIpGW0HP?vJ`W27}eK1-4FSV}V!#z!X@7}J7<>P-R*`?*`3xNVyJ@x6> zXV#xvRpZ0pT=^RsxoL^`44UVuuwwPMj45vcGvH>l*Uv#pc?V)ldZs$_cbT3bz=Ojv zK$w+0KBEk7G!-n`_+*Kx&eh>&l5L-r+FJw>ZveDubU+O{(c(d5s5(>|zX_n3*UXUQ zvE+E+WyEab6K<23m;?Yd%zguU zH?Bt=X&S1F5R<>~HiLaUZ-|&S&{5^Ej^Fl9W4o}a{LQug44~I^7>6*yTNJjWoP0J9 zB9-zv{F2c9_bDnAn5w^eR*wMc`Yg|)+pTXalT3@ByX}7vs=M@x2|u03g_Aw@HLJ^0 z{o&v~S)m);S>PliYL+orp%D)PME>U~^3A3X12rYJhPnWbZaNup9bbN2eLmjt8RuHP zt($X-gs0_%F5|Tp4pp!{JMyxQy>$@qBiOv!!&hr9)4fW+cK6=Xk4tGZqE^D}ds?W7S||Lu#~l1G=vs zUE`I@zfJk7Y_2fgu|Ni7a+RMbv?l58w?4(>9@OK|#zV&0Z4zmvw6;>@__a-1PnW&N zwRSO}fTV#5I0nXksD90xW!eGyb@C-Q zvwX3tVd)D?f!{`7dp(6V`z%24o7zk78XYv#soES{R%*RL8gjYn20?^QUJJ$61D!@w z*l7<>&ozCP@nE8JXpYs4ljWH6Z^o3QfY7N>1q_@Mmp4=tO+-bD<{@!{EQRAw5^aRc z--iGjvv5i;X4pmqO3RQ;w|RZ{>G=LJzQiNvFLlIrAZ#$guX|*KSNJLrIoBsx>JyP9 ztLzd2m}ixn+N7KK_wxbx0#raH3h`W>7IdL@D4yU(IZ~=l{IuY+NuI!UefT|eq~V{w zV{PkY`-Z7zT|l)B4P$U8?$nEkT(Tgs_`bVxc;TvY$d!Yj%j>8pBW9sg8w#Tll~-CS zvFF&+f%1l?R={S^=W!Fm`lt++{IBCYEE+=P5Vz^1O!NmZf+lAmGw_^aG)_VwU)~O2 zGW|*IuKZgC7uOi7r0KVA!@o2mgMbj$a6~h)piB8d%=WKX-mVV8?EDA3*N$2*gE!s( zZ{MBsnZ(@=;vSLZ=TT!<667fY+Z+{N0vOq;DQkT@QKdlKT)ykWDF`V~R$LjEaiyxX z8iQo-qQoN_tyu(}hSKjeQvj1#mbg{$Lw*Ely1f+30A>fEN1U;{NGa!iSAAwPIL>H$ zgv%DeKp2AWP!V!A-`5C+aBUf8VHaRdq603g%n<~i z+ALUkVX39AN%R6##dvn+)lc~&ol@@Ww*1Qd10|~T?=-taR5~-((}}czzbbmc?}Hn$ zI^(S^JQDLHU;6wly!Y`)3C#|wDYgHuUFpn(J{QqV(Gxi%&{)oTy%NK8SeOGbQM6VR z6-!9%AD2}?azQscq`G^1o@Nk{ zh!z*dzQy`*Z{tTvzTA9IosnHvqrrGHI&Xzl!7iaJ9V}ZmXBM*Zbsp!c8>u{K?yi_i z>g&Vgk%#I7Z)8yis8Pt{1a4C9fAAyC=>@=JG-{ug(`+yyHQ}J~vqTM2<$C6VMf{+; z@Y(dVv0wE24i{HdT;2?*^}g;|^HsjiqhtCLm$`6PJMGuzf*l+FgwwWZ-{FBt+C5_i zs(q-2Q|h^g4-q+>3!2^)B+AiUrg914M5=kPA9>ly6Z!?sk`6PvRrb19T;9~~zUnAp zaALPD0M+46hO&N54R6Rpp7Q*Lz2$mBBPE?PTw^-R)c+-47IY7Cac0v-`w`Z~n9ML3U>>Soh~Fgd=PdA# z$p4W$;(TCpp|_}g_{~#rRQ{y|>;9!85$j^x=mgP8N_2|*s?-z*RQGw-#OTD9QsrRd z9UuE+^1c9t#ipq}deKtb;w{EFF&91_5MIY}x{W_ZSEACky%v0w`(~zov;G+X!W-vw z4#s(!Lxg<1Xh{|@Jx|4+f$0AfGk-*3>cH@@qsQgcTfF$?nm4*bt3qVFGsdjb93EQE zfz5fLNi@$(qC;jUT-YCMShODKr=yE_??U4$RJ+k|kFCi9SRA`-e0E$DU~-_Ff{q)` zVUD)4p}}-8X!x>=tbMds&;aOPNcKHXhf$|$fb8|AI{LF`sEWGbv~+(^nptNKf+r3? zlD}}Ciho2G`kXb_E>JwSFNaFikv%LN?m2NZG3$=vN&0{5xJ4y#wjZrx4vTEPA`Hb; zHQLziEwum_v>m{JFSfAZljF(s-cX3gm;R`f5i>-{4xoJLJ4XQ#0GC&41XGVvypt_~ z4D=FA955LZV^p*!m(~M1&>(cR12#oa#N-4}GANi^hu+Z7wCSr7a@NeZ%lAvukN&AK>MH*h*P#5bzk%MG2+3<4^GY~M)e;~vFjy;j+*Dls1GJ*&ea^rUJ{SCS9amqJ7xogNkYwBy3p<>wN)RnLZo)5U@E!LoJYC|K&a#| zbz1&w$W>*A%EgOVmpUwCZhP>53;+jx9R?H?4&IhW<8A}B@Bp^Y=*>w)RSL@(j*TIo zp_R^4>rYZ5mPsOiJ;E7WCH-jFP_DS~qc)R^>4U@udiR$q7S;w-eH3HPmiZb0&wqk= zuP+wZL4OIbNZ)Ry3IDz5=9?+adq81=-rZd?u%O0Ng27vLvlVt!0~7zAp6s~+d=UWP znG{d@9{|Jg#_9P_)X_I!=H=d0cTX&+%a@9Swo={5qA;~2J4o?$P7d*HmS0G>P)W<#5fRsX6&} zl!!DIf_RxjP+=&kMDzz4t|8JV->wj;_EV6Rct2+zEKYgvL&jL6ga^|}mF6G=ub0Pr%osYgM5cYbk=f>t<|y zIC(h#z4PEO={ka;aNQ*Kqn$@sjdQmqenSxtC(oV%&8@drN-|MVFi)jfw^^Y3b=uiJ zH{_2V5`D!uCn1Z4uD4o`#0ugI?=*TitgAgV8s#J4(olzTA5q{BCVUVL5wa%`5HV#`5qzW z=ndI59E%9WSh;BSe*jD_hqU=zlK}PdKtYHEv_-9Ex6ofN8|M~M?33s!#OM2mMw(=U zLu=gl#BUIG_vXCHh*(kC&*Nz)Q*J|~~>v|QP z{ourr9Z(p(OvqG`D!lj|2?sVn7hNP3?JFAfj0@ncws^A40AQRrajfRLs5*uy-D4@Bl92$eRa%C87z6Zg%!+M#pcT!^B z$<@&565n>$2rx;gh%W$IfupI0;QQz@RTu&W$)YEr2$$%H~?@~iH3nIQ5eW8IrcL#Fda5S<_Yd3{+;kC-f z2Vx$GDv2IR9mDUuc|!eS@$E`I6=sBO@I-XB(4npl(>*n}F%7|O>}L?YO3w3A5+2?` zWJ>>5y)2~hg)40J?nrfi%9OSLv5MH8=<5!ED!~&= zw3#h!(Gk*z{YdxUyY#=E+>terQ+sw|oKX8y5em)oY(}}DZ>1&s-yjJX1>rFLSaPK* zq_iO4$*eHS2>Q&44)1;H2M`9HyIQP?(d8Ca{%7O&>*r8Sp+q17Q$5o8r%3pN2ge(TEGB(I4%eHk!{fd$OK~M^7ql?o*vRKJgdl7$N@P>^IE`x z*1#;#PHqx%%n@)1b_J6C4!{5s{@o^VE8$-N$ET3T?FH@k%#{8$p>TIG!W}`s#cg6- z%z*He_rBA=xejK+o)dG5a3A!!;2q3=e_g0s2-uvu)~4PB(PKhld+<8Gj16fS5iINn z8F@0A%OFu5JRTp{ADV`Z;GYAZQy#rZ+@3x6dxs)ZerBl|!IWS}PW4vF3u=8RUXICy znQ`2ys4g9ZKLwhi1oO`5h4kfcbkVh2_(^GZ+ zamK62P^d!OR&dk=;9>TZE-IV?oIoN%Bg|s!a|_1YTYLO}Xg2Ni4~5PwsYAQVqry*@ zv{9b->Gs%k^F7WU3Kt%SjcV~CDCzZ}Ng8xXce;{=X761#+6$4wT*19&nalJjo|pM- zjBve??0#JZPlmXAp?2m;JAI#Xl`cIY%fIn4I&R`IKYN>Xtf1|(T=n?(Z!j60H8SqQ z>HMsaIMuGdpPvU7ta=D_G#!1z^1|sI+h}uCQMpqufFJ^SYSCqBtsgPly3&$FY+IaW zz^eS>>6I~Nl;&z-=ZfJ^r+bvXSQ@p{e?05)zFsN+HY%20>Q~rmb~(zkEau`^Rc-Cu zF|e||2ZEM)w@;Q{)ntS%Uxz^S#tw%QDGC&3WlpV6d{JKoo7<2!oNGhS!PtCOo~iJ*Ft;kpp7BHFRa!moji{+s zj@)!VoCgFHDDU0u!MEiDVHpfKLlIC^u+k^?^x_n_L!2>6-IM&Cn`ipogxA~}R*vZPnGxkPdu zZu31iF7Wq(RF8)p?jTRRWlQ^i<6*$RNnN&7`jS8rA0Ikw$+Y>4vz-vP%624Hwad|xtRM|L899G{rd@ZIzG?VN(%k)=ey+4 z_45K?C9J94v=0yAK5yyC6PM!nOSTv9Vv)OQ8ZU9*u>V7{*QMtHnW8_q2qL0?GD4qk zbrwvzBJUwvwK;3MvHg-gzDJ0hk!M{N1&^)@oFdbk9z$BM_M?{t)U4+AfM8)z<1Gf_ zYVXXd+gBv$RkDRPtuO6AALerLljn{qaFJ2`8>H@gm+#%DQNTJB6HiHq0Pu`HCEL7* zJAnS6Rum`yE(c^M`NE%}Ovre===z0C!LVH`z8Xs>e%*R!h~Fn&6T0kcQRsrMq7o!aAROL$8&j_gt+5e0*5oTi<3uE zLD_Lqu+-JYV=FuJDhM};wPc1WF!;-RicQYhJ$@APo-hfN;Ut2Uk9t%qaL#PU`^u-F z7iS^E*y-_}j%G0K-tiqC%lNrG2b_)w3wGMVWue&lleezU6XI-s7p9d^yc=NLMyJu8hR1W{G*=I5FLe|gvCCxznp@{sztzX8aYnP$GDFSCuT%NC( ztgJq`OipdCVRVOls-?1(*1(=NfvE8DbxIw56M|=8CZcggL*F)HE0b_0HV5-m3pt9Ow1_|SWh+($Eszvf`Ya<##E971`e)?oNlj+kWV3hF_F3| zPsr%_rOoaESh-SPC8XRE25lVSWrknN9Z|EDbVSs!3Sku>7+wHmdC$EBEp&HS@zMQD zP5FF3F;X>O>9066S<9~DqXFhq`eOJ0h+DyWhTua0pGi_AmT>!osG)kl#ud%TtR-Go zKrxv?Js=yQthas>e)Y+&Rd+UnGN*cro3!!p2)2(HVA4B4`t`jM4rT5}2~eq^y$Y)X zF1vq{KM(8v4tRD_7Mu>{;2Ju#CeaA{lHjZ&e6w%*big=m4_5duN1{sv676I|1bodm z5efbKeyw-Y?Av>?BXfUxEKxL6Z6|ZZYPR+uGHSZkNpy^{xE4WwW3PlP$hDIeT=U?V z)tjnYe=&kRVuRH(d(5O#0hY<(F=Y=60_`oEy=N)?EYGa{5h;}m+5RB!eYCWqUbin6 z0w(Z$wKc;jQD98oo1|ezg}j$p=vjZnbe*hT@oT+3Sw`>>CKpg7M|89ujXC&$D8BcQ z44)ABE(RVz#~!^EVONiZ}|V=CGxE{=yOvQAaEn2!*f8iveGJ z_o@Y#N3JaT8vuCQl784n_)}p*Td}_gm>Dy{zS31p=$aLsg8(u_FZx%{&;oA6RRX=R z;iPij+rvh6-tuaR%V!sPaoD;_mGhgY(MT@!f(Ts1S~-u0N9QzxF{eI8aXPQWqf@bb$AFF zeh5XhPP#VPc_?|Scw@dWLcc)RIK95~B9c{N>J>`^JD9eOi&FgY-q=08T;$);%U-7b zMqRV(E-pWhLD?HimY6Bcm74vWG-%JX9Y%1WWZjt)s%jJ6fTa5riUn1+3qp~p^`s*L zi}98<0H1_b&q)m3fWNHdkF);O&0^r%r$>I%C_>AQ z7MQN!^B#azq0B3|7}-8>m82|hgKC&$0r!&bzND(l`pT;|&VRea@$uNr&}f_y_X*#5 zyA}vSAWHxeV^vjf*TBCc>c4ncfm)@{>+WxD`VRgPe5R_;J60}1$s^F)+M|xIX=Jry zp(;B9wJJqS-*!hBZMw2c^l$)=Y%a0b5J52|#^446Ib2a2GSh2>_{7dFnol!bBowz< z7ZzTjfe4($X`7B%Bvn;k`OApa|&cDTt7#NxggH_+816rO>b_PhuaN zzAqmR_^Ocv+mjGFZJ2945t21i3(VU$@U5wrMEL+dZTP=JUw4n@ITpKd1?G5zcR)PE zLz%IWNI8SP7H1?c$u=Hq;>d!+V4RQK;_;qk`7dvvZ z*E+kZ60cy_Px&&>giA3M+Z@7ERkQepvQ_L+rZore!Wxg*LZ?hUvhu)r07je!8BwPJS&h(vn!lL=Q8w zay#u789kOZ|Kwj2&J?IkHw|Nf0fSYuG)kf!2redzZXEc`Ju3Op}nt&P7&0%q1*TX;LLX&6)lW+f?7S+z zqfOb?Du`Hch`Kg7VCWPqo zs&5WEF^9wY{4!cw&i_KJcgt~OU+II>&&Pv@q+3t7Li0Rbv}uB11MfvSLt>~{ndXaM z`YKdJkj?%iq0Bj(mncckp!4t7jh2m@Cj1V`bKb3K?xf@y)I}k3;AL=KCYCzBra!n? z1c6b^yrj(SwUJ2yyGx>A$JheDPXYV;tcpvgY&5^rVAM8C-B!5IR+oBCUCk=>5zXAe zX=i6Ru`Qdz2w)D&2$jj} zV~r8InyFe>JEbgpZfaKHD2dFp)ftT9`;$>IR}yY!^(g{VV4Tku@)^6 z<`9$nU7!j>7j3IGOO41{SCa@5ewx~xaS5%wayv2mq9w9Bl+R^O#^$HE$Dzbfdzee5 zeLJ8GF4G0oAeB{y ziMUqRdPE@CwIJOpETy5$#j6kLG#$_XE(?W_4I$EY*IyVWKTKeP1{3?VD>t>_ z2!dmYIF)>=EqcEFUkSiL-}n;(z^*GsI)P`@sOO}$V$|`Y2hboX^wHTZ*^_f0 z?xWJ7#)?>D@vz(b&LgqRS9ip=@pkQ0LH6Der zE;Zi_k?Uw_P>$@tPwfkA?zQb;fn@=)AI}8*?ZY0^`vc{d4@4to7Zc@&X8c? zhwiBahd(*uZdcIEa_3VV1|?gIolJM5Kipz1>r}SESy5N(=mM&YEiQ!?a;h(yMojb7 zfl12lMXT3Sl4nuu3#~=cPj4jXUQ4h zvN97N1NQ&oLnDzZ-(2OTk15%#aJ$UcD+Wi%ow`m%eKwDzI9GjQ2?%?9WTn;M*7VT= zpn4E~k?65Fg}NDZkMvZ?h2_@(wgDy(0Vo4DG)_;gOF?k`HzczjGcEDT40%CAgAd0g zi3b{xJD-IWMp&n8oW9_2Cf)yU18LYTMt2f4zUD;T)8#SKz@Cbi5^FF+LQt17D!|6Q z8z1zoHz3uB3ih4~jjIHsQ~)f$b4Gx0w`dBjB*P@igaGmByftDD-!jR0zfn=DF!{rS zTl!g+upoWS#ptGs8**pT2y{XOi^t-bY$lXLkqMX%ithgb3eO5~K`C-Vf zCH@C9NWO977u1<7G;F6LSNCvVg)Rz{1ptG>p6RxPZy>NXrS>QoE3Jz!ghaV2eKUY&N&5QxtOhv%ZgJR=${Okebf}GI={cPv zHpOb?2|b)6+*L3}H=c534Awns(rwgJSgr+??WhzPwo0aOJhvU8%h-r=0Cp1nAYWM; zU}oEPuFsMqI0e5Jj`CQ-VgB3=JM$m7+)8H!KX?$rQFB7}&i^M(=PnygRI^rXW-0K4 zx+uU7{fsY>sT}OmNkJ%zQJ67JY;mKHhEUl-wvBMV)JcgF_OXFoZM#m^sP2v05}n^- z$WZ8Fxiu52IAe$!s&E|G{-X1V?*T|758uc8ixPRFGZJ3)fFDIHp?J~w{-e@iBidFa zsI#K6dMygcWNck4kZD+(W;}4%Pl)sA&l&KnFgF@HGKf9E$w(&E4G))&L`@n zK7k{HIwPHZkP{z~4Pfs7Cz!yJDUuujXCiW57l3JD3fKPX3*2>@(xXl7lO8BsIeuRf zsmP{8gfXqMlXN>fy03JD11%^J;)(Q>tVm?1MDN!d0crDzVWo^mm?tO}15E}8IgMV@%3Njeob8lGE^QM-yFkabh-VLM7~T2|y- zbXfTb8TbbMJxLuH4!Pw|#U~;nRn&$xf$zz4^#IUPbh~-GW=s$0-&A0(@sou|QWZWa zx>m!s!?>!um&+rfio)mlA*9al+dW3!I#txPIu>$$F`TieZ_SgsF~#4H;|=a4wP> z0*K=S)AF8e(|}8iU;(yYiK(_y@fZh#2`z9AVYLeDRS)Jex^I3DL&uiIuQ85BkhbN- z{9T-j1HmuzLFMfHNp5?~(9OeZOG-atI<1r?NOk8oNyI=7*L{?By^FVW8#^qNulbJG zO+>I&$hWI6@W8rF{jpDk zS}%ZMpb2?Fig!i-ihYj3Rz06urAV+YBb**kUQblDsAHZ6Tz9pwzYAanE$FTSyO_@{ zUJ|{UcAtd|^md=zmyuN+F?!>yQB9A1M6mH9H)g+c9Mmj5wBm&LDj94V8=4Y?F%&U1 zia{vBID#o*^B04U)T2zk*~vqt8rzGuOtJCTi7pg5BM5EF%E2L3bu#AEXDgMWK}4+j zpph>XrYz(Ax5rv{t(g-kx#3_G%df|o#iox%EX4}rX|lRUZMNLFwk-%Uu-lCr5BQzF z&${eSDT2!P*2B3#jqO3#3rtl*ElnF(70gmR9(FP9kT*40{OP1@E&O`+R%k*HCREFG z&lPv(K$V~nT54m+zt2<95E5VSy6A&JZAXIPmF#=<=`wRW!_#@BHDbY7!2}a{$lp_Wd&*yTX#8ax97!4COp+{%6w%Xv4`o zJnM%InHsZ(D4N;HOH&5?;L^^Ze{EOilzTY!J2p!)bgM33&K*D3EDW$V!@buc1q;bi zo*E_dzJMY94qSFZ3Bv2WG7jiRFl%Xf1-tBlg%2TTC7i_yRu-sGPx?g^ddeZ= z;dSCJun1Axk*0Uu8*$-p*GX1}wLl-z>Q<6j;!sn82|Inu4BO+o4HilXbqF!pOlRYJw&^E6=YSd;awC5d1I zhCBNcWng;>*n5eEs;+fka#ju-cg2}Bp#+Y)as1E}L0C}i4N75q$&?j(TW}%O|9KA_G21#j%P93V=yp*kbJe;om(k?-;8hgdy zjd7J5V=$Et-jn(VHC5zgWq}upY_WkUkv9f#AI|kb z5+um)amcL+-Ei@%=Hfx`vf;-c4y=vDnWjbB3{;PkoW+KvM`^F%%yN`~0h|TB7KOyD z8&&XpY@mnvpsnfTr3JTsfO|fZ^2XRJC=S|iJfoG=p&Fzukdpt1oL9f?Kju#oL*CM5 zqwXu{D$ni6xj_8gI1txtLNnnLe*e zT{?F>G5;dy)*s9m7$-@6*-=hzhRk|4F%BwX6La^q#s&7MkUf-|zOV8Gd9Nh;&ksJe*`TE|z z+IG`nHwn+7u_&NT#!Iax9_|T46|&?rMiP*iV5t$gk+m#CeLlu&xy@+m&2E;{f|T=)jW} zm>GEGhN{vK9>W1_XUYPH!*{(Dtz z6;1nA3vGQc&fCjj$01*)WbDqiT4YmgDSvMo3pI8%0RJJ!-j0z4)k9fWC--6Ab5TSUxx>qHEhyJD=X;fE%_b$Y{ustH7AVqeROA#5P~ zNFn#ZjBCH=l8Q(-jXWQ|mXiRBDBN3sdfCeh=wykyc?1qWJt-N^KS zETddj=@8VZcVx9v9sVU66YZAf-=x@74fs+w_?pQ}%-60)LZ#XqmeTk}v^Nx7YESY$65#ZhWOmuSt5HzOvF^S+1IH~Zu)n(c zN(2p8F@GzrooSp}ru*g7#`(V}rcPC!h}H~Jsd6biO{rBY1XwE)NML(!Rs7M&)ndN3 zr2J=WY7!cAOzy<6Hv;01wUMRlIk|#6g{xyv;Q$S$`mz_{FKne$gi8D$M)QkfsAx zpfaP!09PQgcz(H^TCI9i9Qg^BCf-!Bi)Vn`=~>mrV$ro)5M{H~5Os-giR02u9tAu` zlMx#Sf2N2>lrNK?(7&cQVq{6_`R=RB^rI@5u7n1a(4evft!~sukU`kWbe=rBAW7rh zr}r6SPgy9VO}|nh8C5kQin(G~qouLQR$c}8jX&r6P4FneWt};{MFz{vl1b=hJ8J&V}wwH{IsO3YtBW#&h2a1Fl3%{d1fn;evD`X6D;0l@d>j5Wx!<6Z)+MKh@1d2oiPfFvPo_|1n|^P zp=a**dj@BXpAde0CW=pd_hgg7rOk$pNqt0-Klxq^#({Cdr|LwxEM6eSzy&Cy0=vKb z0*`zaF$D5uW-&1te-30B84k4W|FUAQ`ST3QTaZli;|PDodJE{8{_6|6(}SLtOvvok zc7$q9Te{3DUD}FgpOhDy8}caT#^P!p>ua+eV=3QRCTKuggYEc(D^`x)VpxPSg&Su^ z=R1=iq8u&c7iJZ_J)QdO4LGTnIUxpp7y}aHIJgn}4HclOxLZt&$zMp%OCu)c<}9B7 z&?8E%*VM*bTQp)3q-#_oY0&<<^V=F8v-4i8}p}{3ooSvx0#G1(1MZx)8_6 z0#GB9klcth;!HUUxZ!tR)o6>cK)}{S=s>`#c{UjCJG3U&Vr*+Ub=9#JH>LH@aNmTT z456`==InT>dq{r9EFrCWQ_K6P+zGK7)aW<>QnD#oC8s`_$n^Td>Z4d)eIWTa6-PcF zZXPcHS(^EM25sRWHhRpSe;f$9w`aO*_8!5IxoVaBN)kC4=gly7O59cGrjJZ1B9bet zJ7tv(yu*J+1W~c;6Z*(}9n1YHzwCMeqnOYrPYi)*e2SY{oTnR8PHLTBufn{l z|7m;?y2Dx5u>@;)cq}||Je8jbi0`z+br)zrHlLYJ(S0$uS}EKs6k<;U@4OpGyE2b2 z-{uB!ZD;=J$o;SgMgZ1^1I=1Q290B4Uj)VBnSGpINR52amH42~S7~N+djQPitDnUB zU{EiVlkM=v>WGXy+3Rc$tjP`o;E8VMi7(^QXC`}D6nX6yky!|kO=R2x=$cM}_NN|o zP2FpgfE|U#KbQ8BnsKD0>50=ay9bx%me!Q7CVXWEE;Tj9uTP`IfU^BmK#%g`3ofs9 zM*qRD%Ar{=C3(_kid72!#6h(7XTQ!pTk@$mc_Mp7MwfXbPa+3_=TZmGDR*MJMHfV~ zPQ-PCi61DI8~XTYArZx-C`v3`!#z&EY)z=Fs1AClhk?;uth(J#kpmWyQib(B4Rh^5 zX|dje(cAx+lin&@QV9khUND_4W=6_?!9%ag?+5nIH#7aj(3O*4OT!V+^C^`hnJ|r7 zzrD9%^)>=|gyG+ru7ik%z+3gGWR%ouwjY}h^;O9` zA>52VpobQm^*dgqA`qE0oHo-0=Uf=MC`npOTz8+tNU;;|?JmN#CA+8`*A#*RL%>yb z5vz4*(`{`$AZ(93E6uT1p6176R$(HUm-R18X^c3}_98SgXfC6h4&{HUEtkG7u7c&h zhCEosnFP+Zm>TLk2yepT$eP32*w{4=Vz>Y0>CO1UBq#v{K6>)Zy*67xd|>C*PUBA0 z)y)?xeSW%gree*Zvz)nio@5?s*gK1BWe+p{`hqP}Yzj<6tb?d3%ZMn|`q+h~6P!aJ z!flReNbwTtK4i2Mu86F+Yj@oe5WqutP{>{)3h#YJ1#x#?*H`8ICzQ4;Is)QTy z$lh|1Lvu=SyBM}~n+rM{#p?dA^$J^b`E43ujyoS&4>{{Ow#-li*%XmQD$MtUN9j0nT`kT$^(wvs@by-1Guuorhll)G+zYeR^^zq*xgbWd8i^S~>jhDHy*^qZf>#R`s@XU5qavZP z&$KRq%)w09lvnU4HdDQw*q$4^cK>^++c+XdvAVOXskk1tQrE!N3UtkedKcZbMer~B z{q#(OKoXsG$)m60NV6LFgX#|mhOEU zH>g0!)D_poS!iebg=BqSH4U1uL8OIF!FWv!6(M+!897D^r!4k3-I1VK~wI znQk?5ZS2C-;!;=83104Qwz-O2xR^Fegv?ORA+7T~M_ri4xFk5{@n@9NvezdQT)$C` zWrGRR>poQ7O?W;hMujpLh@I(pvEIycbC+O;N(GvgXwz8!soFab?v#3ccV&vi=?;9$ zHXGutK3Tak4pS4TaZzl~$m|7j-HavT#vs_uA{Fq0hk=^+MOlxGN(heki$C0yiPn8_ zTMIFFq-rjBRK4k5;Ek1m000cuL7!P=N@4#Hks z;keD;F(7r87>~q9?%>2<+ST%bR_BH7m{_ukU>V>o;s@46%#2n@(t0VtRJ6+ec9}8P0;w{hJD+>vtAn z_r&LM^%M|R5?{#_GX>jGi_WrnZifD|qBBT7i|C_)Bp*pqtu$6rL8y^^A!vs_wI*4e z6tn<49?y~u^OU-?oQsl?_PKX)Z!JYq)GWtle`Xns3}QjKMAmci+Oxw-@2;8K! zx8VkVu^q|phpeXTt<___NaYC!faWe7!F`FqDvJs&MOpnGXE618+HLP4<2EA-MMSxU z+-UA4zJ68KAPdXu_!g5F=%tkR&G=8v^xKu_7ytoB(_2#JRc*WH;ykiZyTrID*AN#j zv(RRkI`vED1{`B5$+R#MQC2&04k;P>B+$*yp%zwz8sn%zqaDnA%7TGrFHPscvB(Dv zHwQNhoeC)R8FPn+@^}YKpGUl<bU1AMI$M4`e zRnXOGNN%r}Fu_pvf^M055t@SsmL;8CmL?~bb`GdlZ;WJM!td^4oQ2+f*WLF{7-#kt zK`k=i0N(a^0B$zDX1=*$$j~F>tQ_60n21TNrG(ihf7ITRr2ECU6={a@IOvw~e+~i? zB{SEMn|#xE|NJ12w%UfeJZJHBJwv!!-04a)OifhD+d%qAZ*SZA| zp{AL;4!2_$w1cO9I+Ia07Y*5ys{mH#B9varRnpc>Jn;-;&)baD-NKTAf??5TLF|X_ zTt~a;FoMj9;)by>_qhA0R3QmQD+iVFQ9%7#cwy`w=%Fe+c(@0YpzAFM%OIE@py!QS z0{WlXk^a-k$U7K6dSW*!wNeovu8W-*8UDO$QX2f_A*K(iHzXStIM?Xa_0g))Y&SO3 zD(hrh&Ej~bAvqCt7)m$5zo894Bnp70m{%iY78JJehyPBTw+gBmZQuH%N-)m0e#1Jh zcWcbYq#D6wYQpYjguoj>Du(x8M5T46V~C?ys~p2q=`EsJ4#cMxuSge4KzZjUxmZ-H zLJDO(!vb@7oyZB^Zf;Z9|8#(ny&|SVE*~1baV0t=N8Na z1NU3hjw8KBsUXQq{=1$Z!S4+DWz)FKTIWed>jxAty1Z107_ z5_+%_*sJ3QlC#*QX1t3n!O6D$IhKlWKx?m>S;Oo>#$naP&`wKZAX1BTviLH#uvzF9`G%3RHqCux7h^~%{S=Q|4! z?*(4Ew(RAhzOT(~K)cCu0 z#MaoQ+&<+jB%J&#EEPF3wsjIl3pN!=2B>$!iUmv?GxyRDMv(2S?`?09dIksD6kf35 z(`$0@bV5BeUrK72j9_OpRuBux)WS-3wiPaqZ?wyjp4+W^nWAmbo6#NA!8>!vVZu(3 zVc#u42&W2S!U0BK4C>X`QxsyEh~)2rsug6Y04_FS0 z4=9mT#3rR~^(Zg3X}v9EjigNAG4c%0iuQ{G23PmX?xw1r@p$bGCLdDZXI7m^HR zLl_r$zi#o;Uc5Kd8q_P|C>B8QB-fCU@95bFB34(UqKZ`O33w?eV6LA6Atv{MNMC5zi+@N`@h!S@`tR%rl^rWQX63~+=Qr?6#mQ`3Q zm1WcOAZuU0`qfqU0Id`dhYE4DU#2rzu{iXc*%&qXP?Z{eTJ5hV7;R^R_3GNnK))j|ukT8nAeiB0Y{O{+D3 zW*75i-pxf_*^mT$4s23GV`A-6Ys)T|=Avs+>tZa3_rv(0N>B9_&YUBVXoi#GwQtnW z!+)!v**vQ&Rjb?~<{GI2-2_gLiR`{JG>zCgscC|!Lv=_om+bIO$o54q(<@v$ehrwG zcs*mP8C!H5Gkixn(jji+u1dfyy?!Fiq>+xD-MJ;Hp~=E`bQ29YZVds8Pp*3>nI*!j zBdg=5HOWDXzkGc!|A~xXS}1gmn5^tmDf~)bM$KMq)i+dVXMvtzFRYh#fv{i@D`Fm0 zgh&5X<}>nd*ubYg#3OMeiI5F65wv1^+gV7z&?d#4={g#7ZB6Oa;>Lo{-2s z3#JG(zB|XFb1~o4A*dvz8MIgoXn;x0a%6j|%Zk5=OH2w@ZeDwI=nQLBFdiqylfqgo zOS`yYey(d+kwQJuO{2Z_so%)Kw%Tt9nR|DFLY&_LhY@cAKoOI;ikUvPNn9``p)UI* zl2j7|aOYuIW~wzK+Hv_`t|;CUCrESj-f&T`kjyX_k0xwXIDZ`096H*nI+jX$pSNJOdO!#nklYWraWw=<(X(>aBtZxZ-Gx;viPle{p*T0KdlDuJ2IVMf4SaG(B`{XQn&Id8OyX~r0q1g*CIsOXL>1^Z0 zF6v7r+kIJo81*sm`(xj+DhGFfgt%SrcvI{#duRK5;GQoF8|ZeAYYndRm*>gg_w_ls zD3N+Qo;>=-K;1=!w-*LU2 zAn%b=arTeguzTWauiRs^o9vG?Cuv;^v+W$Z7pHW{lz48-Y55{l?{0e8RV{V~TH7cA z7iiVUF5nXL2v;DKfRnvVF_~a?a1-3!A}yrezL=wMXQdA31Sn6xhX*JFLRVZZ;847YQ}VQms9?&d8Skt zh%UM1!bI5udd3S6LojYzQLx9&zAHr68F7Nd^PXQXn5nfa9n$AZl5Lw)NW65ZW^Ppc zR)!}#JY9AP>hhN&*>Rrv@ZIlGB@B2M`|9w)ZVbj*MuXBaWmS5}SzEm!-J!;Vh_B)4 zUBPSjXr^pX$T^&u!7x{#5TTR^&&nSwA6gDxd`2))Z^emq(E0e;?5LRVx%RHie3`A zL`;}~MWyk+CF46EDd}EkKHj>hFu&wJbp#==2SriUfyv^pi?rHuA~JW zXAn=q%-c}rdfJsS|1ip^g^6G_nywp21OZ3)V2=XmG3%cop9<)B{PUU6YjuAv=i92X z&qK1KiX6Xa6j@8r>Vq)TYx=bW>w1w#(oJ!#O95df@Br^^z>4uOdlGXY+cS`4FXvQi zC@?9}IdTD*E8G(`mmPbG73V-mlA3k+b1Sg-GIB?2Ht(nbe`LPJfUt5`x_6+9-V~zWq zb+%j;M}gi#9-p_=zUb_V7Z)Oqb?d=JM}29}c+fbGDt*tZYxKKRBB5;HuD4lynE?Tv zRgghQI7UAOVxFA#gm~AB{MQQrea*{&hAYg!$uczijeX?pyum_Yk$a`+0kqCCU}_m-l~Tm1aO zn;QYO$;{$^G{DH6&slZHr#ebe2F(lU2)b#V@9BNigcx@VOh{5m@YAfX5a#Du5|Wlq z{4#n)`GOq~Fl%?lRBYOZD4Q2k)f}@whsNIVj6vxN zQ@gd$g^sz>ICg@=8tNSN%Y(pbi-1Sc4ueO8Wfp-nx0r^1CqF=qnJ3GuOjX;jzx_2F zhBxs~{r9Xwmp{EtMWmwZ3!b+tl*+HPS{+*-FpaGECE{C7R}z-fZlgQs3Q@KN_)wdA z)^|U&H#h~j=zaT~p=pP~EsWU1Hh_~^KTd^#-M3_yo$1j!!#(icGeZ$Ja@{cx$&>sv z6}J8BySgqV<-uCS`ri?$N?|LT;A{vP+xAhbn9chI>&*7{l5f#Gzx}1?cV(s1m@>kh+qkA(D=oJ|Ri{u*4aEUG{)Y{swI4QhsXd=qn~;xh#%H z8j0c)*WPaJ7qxmQ>-s2o!Y=UzWq!JwRwli9wFD$_Ts3{znKH?qWHw|ne=N7rI|ME?ue6; zd5`hzcuH1(Mx^*$0cUk3I$nP8=F~`QMn(qxS7SlSp7wX~NQsXuOeu?;ctg(>XM-=& zsb#8WyxFkE1_Auj2l;omqf-+r!>Mpb`^ZqMnf-{krNeq!qYIr;@@Fmpb8UZHBD*&5 z65BJ-euw$RAvF@yZ0~4oRa-Q4=8X!mic1~LjqiBrd8X(;JbE`LdO()kUM1Wn;u*~j z0(Z`f>BI2|H15Dq&NLcq6NIqLr&Zx1&rSALP;}T4 z{aNCnrVsa@`Ar{}NA~QL3OL*?-gP@=IX}Z^d8z?>{e0OBWzy ztA~6UaZox#79*CMw|10#3P%T4wjM!AcyvZMpb_T6gKf*`059!dpp!r=yn|5E1wcW@nPJRmD0_UHykrAA9a4xf&%0G zXktf;ISALio7Vj}mEh0vtZF`Q?;FoPqTaIt~PGE%N}eRm~o!YOJ)%O?s<0!-#* z0%hA|__iAL%l`^ISL$|m7nnhS1NVAT7!O1tLdgJEYduz`fb+{v!XY1$N?0MeS-x-@ zGpIty4T8dnakUc%7Z*lHGzCNC4T5Pbvgxf3zinx@&EhdCLGiv^=|gLGJL`!P)m_NL%%cq*|qk{w?OO&!)fz@vn0Gt$3wp@(xr z@}*PDC3wgJUxsA^LfvN@1)GO*nspW-f3~)_R)uabAG@ZLeggC|I_0Q>KTDxnl0%12 z3lL5Z-A1;u%TXI9+8BhEfw--G?PI6Ii6{%9A!!#%da3STc=vj23J_<}xVR@I2knZ3$5y;{H@V2##K<@S8U{_;Pu-O3?k8;h~=3d7OzM zR%GNV)vFplWooNTOp!1&1v*xl;w^@9U{zu(gLM zg?U=UFTUE_hm%P)5$lqTvWKfg%#*}b<;Ob72fSB3OT{H0gfVNzrg7GRy2-RCecsh- zCc}_@mn`_CSJ$#OOPGv)8DkoP!;&G?ClJEm@g0d44|$UE;M0f5$x>Q5=s|9;hrws8 zcpj6fTu_+o`B;yG<3vF!z8Ag=3+%QHS3;|AjMSD=8y#?0m;oN_ysXK@ke}UGG~2kh z-*9|0i2?oQ&bb;^hYE8In^26y#HG4ti!trF`NA3x&}{g&Xj?}yz&=@GfPY}~7Jt0D zh1It^Ip{~KbioRVwbF-}1#XSs?B}AS&D{AtWeD{F1`Olgdf{x@L6?%8BVP`M5Hli( zYrtbqO)Xs1@T?NPdj`B`J-4Kn#{+5yEI>&1llHwPjc98)YlBG$ot$QS9CP@>^lr#B zkS7_KVjD{KZ5WW7$w9Kj-snwh1K~vu&VG+C9(wlYMBX?X%WS>c$l}m_ju6mp@ntHc z9YGHu4m)^6?38lJEdCzqJZ?tBD;BAoW&czgVLL|1AHPwXB6x=oCkU1*ra| z4N$B*LEV>Z-*GjPcbc2;b~S8_O%g2Ag&Q zxKT%2ZulKO3hkM0n5~k1y#VS;HvuQASH+Vx#w3hwMUK5|GgB z3*xcVxPz8odiFy36_<4@T8Sj?9?oh#fAZm><6CaiP~i9W6*&A+7Eo z>bL!1bl-8^W|s|cs;#1b@awj(x1X;5&2ZBAS@J{=d!xF%`g&`OA#@a;cjxCzlG>&gnVw*DGZK)o~R_#p3`#U31;#>i3?UQ#4gLcL?e5 z(z|4K#f)CMfgDDpp2uD#Wh3*%(@+5x=69rZIcEV|sqs#6hh~5p75F|rW|42f2GAO| zB&X%#=6^ZM`w_~*)kcl%D52n^gRb9v}h-s%XTHyhwl&)q4tHjwY7TGqFYEITpq{N4IsW` zOR8n~umEI9)heviRc4H|5I!{ID7oS>hH7#cUoN5ri8^}A*EGY~6ttswn-nRF)@Q)? zb0`0Kwyq_@rIr`agGZiNoBOl5P8_F6jR)255&=isLG@58SoAi-P#Ngx7FjiH0IHOFe6gNX-}$86)^`!pgE{!T(i<0R*wVM4VW{CgX4 zbrcyHQaa{GI91~Z4&W?(d=b>=jjAZ#jbH@h)p*#niy{-R%uB9KbN(je$GeObyvc*} zQ!z?|k#8={?HR>3ssZkgVW{5aIW2$y0`Bi?R!S(3HSKjCR@x-?Wi60iT|?(t_*%ze z2|0TG{ZtJEbbOQ-uc+zT+PGdKHu!(sI%V=3dR#5@=|GZ_xj$%FWIwK;F3ZqTsFKvH znQiEIT~3^4mDdb?+O6uf21n4K$NW2jo}HF$FG!uPw{}%mZkbyuMDcOCjMfq?KjN5; z-?noTDhTCiCeu<5-6j*nxS(6EWB_qti@=?33uz}@8TQQ|H}e5X8Zn@wQ=6OiLsFZL zyyf@wT0S-pMiyvTYYH((-nH4*>BpYnC&7?3TmM@>0jqwnmQ~qdgMSEfnBj-9MAck@ zfJs919#26u3j~q%o?r(QQ^Y`(p8KZxB303Hr;`u$Sdd#GZY$ajBh@xJxjqI?H~f}T zV2u)!z+UwTUy4MGW#Y=6qp{!XKpc^Rjm27+(2W)0H1|7QY;HZhcobcS?DfZ`FSQeOv=a)YRZR6j1o8eejD|n zec&WX{bT<}#uG2p|VzEiiwK4>~IBhJp&FYP+!ehUPTHYnQqjS~aS%;@%M z6W#LvxEQ$wQeu;3NdT3)Wxf&_9cJ-(xo5L##5;H}{BZ4R?9QiR$%d%-Ki~9&iBgGY zymUuQodwQsh3TVs3Y$lCcTyEHyhj>O@p-qm98OM14R-Y7tvNeytF z)ATSiNOAdz|MI7$d+2Qn=G4X1#FZHKUD9do%72;du&ZZjl$%jiE=2C`Mjl`^ELL`L z#_J?6aVrRQ3#Q+`d-IinQ2+oX$U&QbH3%)KGMEJaTW`=97ctjHDXdZw;z^9P;lG;d z9-8N^=A?-nOLhXP96M^qrp<-`0DbR2slO*-=hrriMjhcx$h)W!R9K(bUBFK@o(=R3bj3JP=gOijZ(QC5qqAb?NvZ6);p zn2A%Nl2T7rKav5qQGIWt(rJCUy8ekY?pvK_>5!!&JkL|K7TZ@ZvdO*p^+gMg);WfE zwLJgJ#cWpI&ET+)_2ZiVGsnF*bown&Z@~<1MQ@?t$?#XD;Dv&(Hh{;8*)n0^jcW@> zt{K2sGWKi4;fekgLu z6)3`;e1}}ZbyBmDY!Hl?%U7KLF1#6$p`EKvo+V+#8Y- z<7q-MI0v#x$!PD!xIQ9JD!uWvX4zeqC(D2mJX=6n0G}x%ICZwBxC~P|Y`$FTWe>Q6vNY-?~fDS})fM+>ICIIAmv2zxk8R!YH4g6;*`;ERE+7l? zbhxQnEBc4mRrT<3Y%G)2gA9kl+L?=*4s#Q_+p$F)$1Ryrs;%`_&tpVa9l?9kb_2zp z@xU-EKGvJRpewf+sCqD}IG5AxT&nWMUtR{vep9aUrS-d_S4jrju$M8;ZTu7J5&_3q zZHI42hZ!@$G3@~ZlDN#_{3ipc&c;JDK%UA>kDNIzu0VF2SxFSE{jDvUYSds{MJJ59Y68k;&_;+$BwbT9RO6<`TZRY#jD!W~LwaoA9_(v?L;NqQ z|9feqvg4Jg&x2-a=NHj5<+QZSeB~ahHSeTwFP{Ght95Jg6 zcGl*GCOHG0OP#Yg2hO%NMwI+a1ur>DdxPFl;^+;cr3Onbfo5#Tzt{p@Y3F{^ zJ{}zdheJQP=^K4y;rI)wicuFko;pC4no){Q?zR0LwrHva$4f;B{G3A2cTFFT)|yPB z+r4Ik)Mw5y4=GS_V!%($g)3jntXbgR4BsFHutdnk8rpsJ>t2B4e?pQKv_gLKBl0xK zvfI{=Vy?e@PkAVYJ6Ip0CbC(O<-QD3MTHswGoRJYmYU*{)GbLqhg!%d=0V2042X`(CQVv5d996~wlH_e)yHUWY=cUmc$| z9I@7|3`N|LaXuHx_`u(uFZt44*oZ1sEo0>#sm(wyBSpS*jr<4mE}n;yrQ2fYsx)wX z)-(o4ZG^7a|E#J^#RNXiOZGuZIOp{d6<29LTB-b+DC?5G^>HN761Mp#8llM{Y%tTW zJWs!QI@tTp!sEgF1<%uw4A-qhXdmG#j|gAg&qcRYCdw0uM)RuaZ@b^MlL-0(C0DDD znOiig%g{YsQAT{^lsY?+OsbyCFYsZ&vzmU6vN{GimR?P%)zkVddM6uIn%vs*Qo84e z!HlP&_PJVv)!}?Ev+yJAv4`T8o_voadRVj#BhKt=g!^+Tjgl8Dh7UX=>4LPR3e76G zVo6nvhJ6h2CH7*gCXFrqy8(Zo9OG6Z^OLXHc-{gV>${vfj4He!Q+3{`cydDaV0Q7_{8!k8bD+r;|wEs zwXC2vv@V5xWTDMQh-ny;bLC7ApS-dc8U3@3%d?pBgdiOpX$hPVJ}?I>xXg&Ty{{ys z%{{c*1;?wZ+IY@IRkcP_I0;~{CooDLv;$$ zV4Jvm(FZ7;TTrbdV^w0o$S|iT*k>+%=K^0DBHLuO`IQcr9t_raS8)-@S}tYZ#X$$P z)-?qt=RZ@t?hJT26!@9`7K#p0$bYP3QnIFnmf=SRMS@veoc#ddr0wm2>r*vY5^&2ak4GNJ(C zj!M;B#Tx)hY4gIipQw}W{;Y>CX6-DFj`enpZNUb=FUcZ_!&1V`(eGXCy#X?tF$X1t z%V!@JNqocpB*cPl9*RbhL}~%!fq*zCQ&;Jr<;-r@QOF4`bTvmNXG7u)2J&*T3S6<=Oujf8(WI)j#=L$n;mcByr`LeUcm`}=D}0>`k_XlI3d3cDjea? z7^x{?{2?}hPZJO0?UdTfawyg{0dC&Qt(ZHDJ0|94b-&aS@^p0LH~9|r3HexU2MmmU zlS^gK4Xd8FZcjlj@n$#}3|iYx8VaO!Y4UOa1V9DCa3dh_;2;186XqU->n#rW0H z9LaCW7dpW`4S)z}}e*H!uq%h5u72G(Em(LjWq5 zXLFBIvSr;M`4*S(a+?!I-GhcktAufPPKmrI1hbY1a^Q%WUZnGCjs`9wkC+4z?zL`N zm4Ar;c7=bky8SILfgZ3wY(^ARK$*m|JVUcga<JW5?}oI16Tk{~f>oi9Hm_4vn?9i&jeYkvh8-tNO(9 zivrnLocfxk8L}4u%J7T<_r@|c&Hj&uAd)(!XLZS``>~wgi%4`{9V~5NNv^jSrffR` zC5YZ7_ytzWm^|9h>wew6`dH8+LanLqKa#N5W_7aXj&3%FEt?5AlM1zXI*u6hpT6!v#2973og+-A4O z={K-+e1P*-t|4zGlkMotBCGC1Y7^4g$qf}fK~Ve%06Wt3hQgizO0!9;V7|QhXm!pg9(lEA0nKo;(0wquNBuK zlp>Rzibpt6^MZd$8^&8!e0v$RQ2CoQh!Ly#>x^eSmw90GKMXF*?%o~zF?4my9b2)P zUnzu2nG~*GsMzDOL3JNh0Nl0A8&Bk`Vh#zdZ>3m^|MDH3 zFgl20dg5+Dr!vZe&5`FaW~=EmJ=i+jkpyp4G8zd|x4V1Gy$V?d3~ zEayyCvOYlNJGfzn4otSeE6KJlEmuYPJl)monycZ|3=D797KVE{*LyMhO3xuC(F?cP zdc1_8y7iW!I#94fjJ6bD|H(|EBs~kW6R2i(~c1$lXA46h?d#M~P*hSn%VL=eo^M(&RyE?ZPJi*NDxWu%fsBHNdPAJf|7= zA;&WElVDO~??xWIZ>qSHs7~#0eA$)7tHGcWCi3{j|GpTYl3E-JW!?bsGQ-+_Q=_iA zh6qY>q)swxa@CoPxN%5qpJGnUaaE0*2lS_F47gw>lFN5VIH8>Nx(=0w2F8O~s^46C zzk!LAN?0ls#q!^FNNQ|OZ5E6WA}pI-46{qrBVPvNHz?791nu-USne`e{-F*fp5i9N z8d6=9hB#PW)>UV-H5BZ*lfv7kw-gM{CGyE@{9fl69B@G8^pO6AUe5Q z`05UFg$Zwp8p!Qu1|M2UDa8VOp#gz3%p(vdn$ODjYeeXI+e2s75o^zmK)7z|n3qk4-lV zgBMTv^osKMpgaQwJ;Dk5shMKgv4A^N47(^owq~-=IpICV4K19fATWWp{MV+szgKG= zE0u^e?1v3^vtv7+qet}u_$~|eslE%fYyfK%HtOOuw<1{N;C^Fm#rF>c$ z7s)Noz;9Ac+g5W|m&Z(Y>5?RXF*-lQ5xfGL{bQ3 z!Vn!mXmTeHy!B%AI<@QtOr2cq)<^U)f5)zoe4-`lJ#wRWUez`!!-o*xzi*n=QC4Hr zJUTgwulw4KGcj1buKyg{ns5Jw90q{u_4tq2QLrH=HR2CWZ*n?#7Eq7RDzU7Qu6BDs z6lq03X9{9B*K*)Kr76Z^Zdn zNKdFmGiKjL221zcplGkeRi0rQYp;bTlfPr>1gc=XQSyD#oKl#4H)sSxZQO#1?I<>_ z6mv4jLT`m8G217lTWs)SGUbO8`GFIj1)?0$p@k_;IL+C-w-2(pbpv$Inq@x-0T>Y5 z`xsI8#E}3`N!naOS&f6E1$g0VqZB?cAnK=2xSwWe{3YNEgk~|(tgcj0eOEvX&s80= zUe5}bDx4tiA)KvZI(fZthp($k!X10fL!`w5;LmFQ&+V?V2p%5w9Ei%w1{LleKaYnlCL45B3MEiSqAWeCRNCmdAo5f*g5 zcd;g6R})06UrL*8{w*G$!-2SJy+bwZ*gZO&j-7Iqs0g*pq<^t1@848%wkwvBza=oG z*O5J;#=s@)No|Z?hx=6lAG?`H63}=mTl(4Z9x}iR?sVBNyNUDz-u8+gP~X=fz3xdr z;52qG4@0(!&5i*WO;C#gGH_*|N7p3v4?whierCyPsW#r6US>1sqL|$~%V7YXvMTl(PYe;do6=P-5gIpT6-=+Kre#Fm;?o$QO_UOkJ{jrOC^N!TNCbKSeU|Aal@ z+LJTDgBizMKbtQ|F^Cy2{jC6jmi*wUz7br;W z-|sO?hy}iN8ui~xEI@~_V(^O?a7{6dg!Kwq{N>@sX#lvwA9KpOF>To?gE=5X@4r#{ zrRoU2#vDV|6uo6_n?x8DP!1Z_xV6qztxWayh1$4I-WJ4T%NjZA*5~Q`W3gW z+uNV56}d;P48#wB*3VmHJW4jl-A1VNH>INYTVObaiI1E8X^6S3<4%#ipeE!A4ZyG5 zDi*HZ$p{%Ef2nb6k^C<+YTe5+SXtGu|X}deSQ>z9+NPHL~pQ&d@TkgcAmtQyq+B@AAQ#H2TzCqv(0Le2m#H^#~@}cgo@oLkr}F_6o>|WGc@U zPz|D`%?2Ior_Or33G?$OdY|Zj+;epq<>qnkn`_eEIa#cX?rD2U zA&l2?F}_({JA^p@HgmHkv}d zaVBRyVps%mQpWqFi%q79u6JKHA>;J5FTIMgw0^WfYoRf7NKCsCO)W#JftY*WI~!g0 zF5t=xH?gGly{47e+R$N$>qPp?RlG>0kw7D&Rf(tSBpygy;#6)gEpkyTg;Vd?9n(6T zlKIb267Jf9&qF#ae&wMt99$jN=5+o_>+2DnK#ghQ26GVQLGg9vfQ;;f8FporS9UQd z-u<@}d=KqvrDG5g={;HgDvqhY=M8V}_@ux@1Ox5%^{LXB?oI1%g@Y4yTY9ok4iddc z_1eR4a>Lq~M4J)pTyOL=;xF-KkfdBQZ1;G5hKZfy>5E@h~B-fhO6@cY-*>)eQ$>uObXZ;7pVZEn%r(gA%fM*58JSKHOFc%|-Be6}pYLZ>C?w;4ZmD#@4 z3nUjNk3)A2E4rVm+14jI6i)E&!-T*IDo@AgT&)Kb@CaRFqwH!G_WY9-HO!~|Dg@|V zt6TP;BAFzaqBzwQgQv}#M*)WM^ZV7PHr!MT(XuPafM(o+Rj<9V6`cU(U_3!+@Kel{ zbf_H+noMVHo=QNkKI3lax8&hX9(CsaNrG3nRLGfxkg+=l9>f`J-&)7LnI(f=HSh{* zL^7<(HGy);KJm7)O>PYlnfQugDRc{jx%^iKw3WW`#^7_;{4g1#R77IUej2Wq9|8s4 z_uh2k4Xn@sh_@z|sF1}ta(xZhb_huoN9%Hs_{(;i9J5a`FTKv+7oj%Rr8Le6l&#nW zBckh6aekofLydA4fsf);o9cDt{d~Q-h59d=W}l7!h&<jx*kBJC@NC!~4>-4w2zmU#Vx@0=Ex%vSXl{HEDYstrP(BHdivPf%y%+$W8*rq!X zUIt%2rKs>Ck^r(k+T5dv;tVC8<-I$&GJMhdFJd7#0nIiyE0ok&uhBq)5=|P0CtN51+d4i9Z1(ySt6%6LcdL@Gyh(CQbwD#? zhklt^)MxDWLG2#)FZB2lOCJ$)&#uNt$ZB0at7(%@FRcq203fq2r{D#vgr$w2TV4g2 z@=MVJ$I`deqqWyE*Qo`+E{M7vQnMr=*U-~5slO_UQu_TnaGZ6cPM|wmL;2g%Gk>%n zbtRV!6aDtc9)+LKsaQE?<*d+*e@&*#zQT*Dw3tIg=Ho!h;~@s~KJ8i(t4eWmHC*>V z7=c<%&6eed0)%KXgWCQ|6;x0!*<6&gNT#ufBh1LLZ?==5-f}}4a7gvw!`TT1 ze&w8Edv-;X+Qh)kscvH5&#aE?xs5J*6S3stmczmu^;L z)`aVQEY_rS>;NXkM}bGJ%Z^=)dtOZ{0gQnu*L!zMOTTg=wKF5~$`v`NIr5{`sWfk- zRtrJvv(?qW;qSL&{cP78z7Hu&U2vyqy@oLh)_jCHQm&+r&BTq|W~N zQG-{=(WT*GMNe$Kj&nx#Xe&C_NpX-RsKsRY6xeLH#7}O|y21B)ohNVI-)x$8 z_UNxSAGbHWF1wbNFC;Pghb?@tuxycz$6_U70Pxg!5nsp?k1ua3NIt8WK>vJ5iL9`= z7ivw(CzsXiGz4@sv$si<5XRrHkBgPfV6c2a9^BLrwKSw*i0_O@t2oJG)O*6McP^nazbhr_z?um{F zR(7LcVhT*hdXrDF>M zI+iW_2glK^heL$z8O%E=lw4!<>4vzg+@#&@Oe}v7K%OGRMXuu3Yu;@w6@egAEuU%} zVSzOM%!oiCQ9vDe=-tNvt0SdC+dadiJMwJN7VXX#D|8DqMaHmr-)5VZ6TR;zDJ8S! zK2cZEjjNOe#F46;FFJOp>@_zXhj}y_)7k5GczxIL-dyKGj2*}LvrcY~6ofz842X=K zOY=sceg|l4TA~G$T94Ik&S`TG_@;gAEerVz%YXH1)dvxHcv|`UgI%%#VigDya`So{ z1^8b2`OJ{tid^4Do&yuqbfC?qqv@Rtld6!UjpeY-ILUK$zLH8ocUwUVpIL9R=>-n9 zv8y<&zX=$Q74@g-Dd7;k@ zTge_YCKS2-soH#)0;x;yor6m_C(|#Ug>8nKgP|cr8lvgUj84!s88i{souNIL0{hR#4@2w3=d=dKHe_h4|v3 z`HxTn+7FZk5_*hY(6|-Gqdtyz$%ediw5u(wxr1J){8bRVjNK zW(c_>0G*I5YjX_iFj%sbs;o6u$t~$Ovv6ruKscE^frchTiyxYi3%S>T*@T!2mj*=j z)Wa=r5sQNwHR-Rx)3Mku0!g5*WyPE?yD~PPYPwsW_4%otfnBd!<`CAZz(Z`?F3zby z*^7WBGUABjb=Kn_G%2eU6=&Nm>2t*Qzfc{^paZbeF9mV2gc9uiXDg?-0g>^SeX-el zGV*wo$vl_)1ar~g$*^yS51Z%!7=hZ+{Fdb$s(2brl%XvijlVsis<4L7Bm=ED#C4Ws zh~LnbGvQVWqtVeDi&jUhb+H>LcJ~GcEpRXXm7V4-?#w^_ay3e7_6@Q!jA3Mm64^t7 zr=V0-Dr$Ek{^Zf|7r7xc2bD@3n~&oVBi( zt*=eAve*oo4$%IyteJy8E;skxp0|@Q!avH%#~IIcI|;xJh%c=Q#DSfz-?}60a*g~l z>+`PO;M)N}^d1>b&qZ?I>Ua}FpJVirYkL3y3f)1Uon(|mT)!}Y5Y0iG4is#YtU(m= zM$nGnyNmG#fzdgxPIQ`rN#M*2^6x)M*`-=&Qp;;2Tu>Br=LCMv=X?M6>5iQ5YD|x$!+3yI`tG%_)AG zT2+5zm*iV|KV31-=1=PLk(`umYKFEM!yoXD#;O z*PhMkqy71+HnYOHMQ0{|_|PQ{F4XmlVkWTgcEV3n>u5mfw6QH^Tl8`~`xu=QZG*-z zBhFEAkF81Su?=GWcoCVI%1WreUGqCDkQ=k@@m9iB4jt#_24*p;Hd;m3P?f=n_KQW) z+(|+BXha!#P%cb_9Stj5cJ*aj9OfbOv!x9Y^;|}z684-}@yfb};tz%?Jn`58(|7-v z+#Y;wZJ9BO<)hp+$dkfpN!wURtjq3HIKa`osgPqa>`QfBx6QcyrJ;?^GE zmm^mVN;Jb<9fhlDzixmrRIy1nmx3a!mUY*8lm=vKycNszdc6CFqF4H+@VU@uzP;AoHmd@6U~+C{(me=rEp7bU&3WZ;T|<)RYJA`5 zA3KpMFxO5hkw?LG5f3X5kwc_&*YTDSD#WFM;!~z*!Q!Y;Ace>uA=4&l2cwKX#?UYt zTRMYB)%i_*WBROs;8m{%)FCB2MW^`hE&hFJ

      X%7RaC^I#uDra`VPFq5-|A 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�N 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 { +export const SlideVideo = ({ src, poster }: Props) => { return (

      {activeSlide.title}

      - +

      {activeSlide.description}

      {isPresent(activeSlide.blogLink) && isPresent(activeSlide.blogLinkText) && ( diff --git a/new-ui/src/pages/welcome/components/WelcomeCarousel/style.scss b/new-ui/src/pages/welcome/components/WelcomeCarousel/style.scss index 3bd0726fd..3d8365c25 100644 --- a/new-ui/src/pages/welcome/components/WelcomeCarousel/style.scss +++ b/new-ui/src/pages/welcome/components/WelcomeCarousel/style.scss @@ -16,13 +16,14 @@ inset: 0; display: flex; flex-flow: column; - align-items: center; + gap: var(--spacing-lg); img, video { - max-width: 100%; - object-fit: contain; - padding-bottom: var(--spacing-md); + width: 100%; + height: 340px; + object-fit: cover; + border-radius: var(--radius-md); } > .content { diff --git a/new-ui/src/pages/welcome/components/types.ts b/new-ui/src/pages/welcome/components/types.ts index 00ede875f..5a88f66aa 100644 --- a/new-ui/src/pages/welcome/components/types.ts +++ b/new-ui/src/pages/welcome/components/types.ts @@ -2,6 +2,7 @@ export interface CarouselSlide { title: string; slideSrc: string; slideType: 'image' | 'video'; + posterSrc?: string; description: string; blogLink?: string; blogLinkText?: string; diff --git a/new-ui/src/pages/welcome/config.ts b/new-ui/src/pages/welcome/config.ts index ef6edac88..2547b849c 100644 --- a/new-ui/src/pages/welcome/config.ts +++ b/new-ui/src/pages/welcome/config.ts @@ -1,35 +1,15 @@ -import testSlide from './assets/test_frame.png'; +import whatsNewVideo from './assets/whats_new.mp4'; +import whatsNewPoster from './assets/whats_new_poster.jpg?inline'; import type { CarouselSlide } from './components/types'; export const welcomeSlides: CarouselSlide[] = [ { - slideSrc: testSlide, - slideType: 'image', + slideSrc: whatsNewVideo, + slideType: 'video', + posterSrc: whatsNewPoster, title: `New Defguard Desktop App`, - description: `Defguard now lives in your system tray, giving you faster access while staying out of your way. Launch it anytime directly from the tray.`, + description: `A new compact interface gives you one-click connections and quick switching between locations, while the redesigned main window puts settings and logs within instant reach - all in a cleaner, more intuitive design.`, blogLink: 'https://defguard.net/blog/', blogLinkText: 'Check how it works', }, - { - slideSrc: testSlide, - slideType: 'image', - title: `Faster Connection Switching`, - description: `Switch between locations in a single click, right from the tray menu, without opening the full app window.`, - blogLink: 'https://defguard.net/blog/', - blogLinkText: 'See what changed', - }, - { - slideSrc: testSlide, - slideType: 'image', - title: `Improved Security Posture Checks`, - description: `Posture checks now run silently in the background and surface only actionable issues, reducing noise while keeping you compliant.`, - }, - { - slideSrc: testSlide, - slideType: 'image', - title: `Redesigned Notifications`, - description: `Native system notifications now match your OS theme and give you quick actions without switching windows.`, - blogLink: 'https://defguard.net/blog/', - blogLinkText: 'Read the release notes', - }, ]; diff --git a/src-tauri/client-cli/src/commands/status.rs b/src-tauri/client-cli/src/commands/status.rs index 51d73cd28..ee493fe1f 100644 --- a/src-tauri/client-cli/src/commands/status.rs +++ b/src-tauri/client-cli/src/commands/status.rs @@ -60,7 +60,7 @@ fn format_status_table(connections: &[ActiveConnectionInfo]) -> String { .unwrap_or(MIN_IFACE_COL_WIDTH) .max(MIN_IFACE_COL_WIDTH); - let mut lines = vec![format!("\nActive Connections")]; + let mut lines = vec!["\nActive Connections".to_string()]; lines.push(format!( " {: File { #[derive(Clone, Debug, Deserialize, Serialize)] struct VersionState { version: Version, + #[serde(default)] + welcome_shown: Option, } impl VersionState { @@ -116,6 +119,7 @@ pub fn check_app_version(config_dir: &Path, current_version: &Version) -> Versio if !path.exists() { VersionState { version: current_version.clone(), + welcome_shown: None, } .save(config_dir); return VersionCheckResult::Init; @@ -129,6 +133,7 @@ pub fn check_app_version(config_dir: &Path, current_version: &Version) -> Versio let previous = state.version; VersionState { version: current_version.clone(), + welcome_shown: state.welcome_shown, } .save(config_dir); VersionCheckResult::Upgraded { @@ -141,6 +146,7 @@ pub fn check_app_version(config_dir: &Path, current_version: &Version) -> Versio error!("Failed to deserialize version state file: {err}. Treating as first run."); VersionState { version: current_version.clone(), + welcome_shown: None, } .save(config_dir); VersionCheckResult::Init @@ -148,6 +154,39 @@ pub fn check_app_version(config_dir: &Path, current_version: &Version) -> Versio } } +fn read_version_state(config_dir: &Path) -> Option { + let path = get_version_state_file_path(config_dir); + if !path.exists() { + return None; + } + let file = get_version_state_file(config_dir, false); + serde_json::from_reader::<_, VersionState>(file).ok() +} + +#[must_use] +pub fn should_show_welcome(config_dir: &Path) -> bool { + if welcome_skip_enabled() { + return false; + } + + if welcome_force_enabled() { + return true; + } + + read_version_state(config_dir) + .and_then(|state| state.welcome_shown) + .is_none_or(|shown| shown < WELCOME_CONTENT_VERSION) +} + +pub fn mark_welcome_shown(config_dir: &Path, current_version: &Version) { + let mut state = read_version_state(config_dir).unwrap_or(VersionState { + version: current_version.clone(), + welcome_shown: None, + }); + state.welcome_shown = Some(WELCOME_CONTENT_VERSION); + state.save(config_dir); +} + #[cfg(test)] mod tests { use std::{env, fs}; @@ -155,10 +194,63 @@ mod tests { use tempfile::tempdir; use super::{ - check_app_version, select_reported_app_version, Version, VersionCheckResult, - VERSION_STATE_FILE_NAME, WELCOME_FORCE_ENV_VAR, WELCOME_SKIP_ENV_VAR, + check_app_version, mark_welcome_shown, select_reported_app_version, should_show_welcome, + Version, VersionCheckResult, VERSION_STATE_FILE_NAME, WELCOME_FORCE_ENV_VAR, + WELCOME_SKIP_ENV_VAR, }; + #[test] + fn test_should_show_welcome_when_state_file_missing() { + let dir = tempdir().unwrap(); + + assert!(should_show_welcome(dir.path())); + } + + #[test] + fn test_should_show_welcome_when_never_marked() { + let dir = tempdir().unwrap(); + let _ = check_app_version(dir.path(), &Version::new(2, 1, 0)); + + assert!(should_show_welcome(dir.path())); + } + + #[test] + fn test_should_not_show_welcome_after_marking() { + let dir = tempdir().unwrap(); + let current = Version::new(2, 1, 0); + let _ = check_app_version(dir.path(), ¤t); + + mark_welcome_shown(dir.path(), ¤t); + + assert!(!should_show_welcome(dir.path())); + } + + #[test] + fn test_should_show_welcome_when_marked_below_content_version() { + let dir = tempdir().unwrap(); + fs::write( + dir.path().join(VERSION_STATE_FILE_NAME), + br#"{"version":"2.1.0","welcome_shown":"2.0.0"}"#, + ) + .unwrap(); + + assert!(should_show_welcome(dir.path())); + } + + #[test] + fn test_check_app_version_preserves_welcome_shown_on_upgrade() { + let dir = tempdir().unwrap(); + let previous = Version::new(2, 1, 0); + let _ = check_app_version(dir.path(), &previous); + mark_welcome_shown(dir.path(), &previous); + + let current = Version::new(2, 1, 1); + let result = check_app_version(dir.path(), ¤t); + + assert_eq!(result, VersionCheckResult::Upgraded { previous, current }); + assert!(!should_show_welcome(dir.path())); + } + #[test] fn test_reported_app_version_uses_override_when_present() { assert_eq!( diff --git a/src-tauri/src/gui.rs b/src-tauri/src/gui.rs index 9551ca1b6..a0b133a48 100644 --- a/src-tauri/src/gui.rs +++ b/src-tauri/src/gui.rs @@ -42,15 +42,13 @@ use crate::{connection::apple::PLUGIN_BUNDLE_ID, system_extension::activate_syst use defguard_client_core::connection::sync_locations_and_tunnels; use defguard_client_core::{ connection::active_connections::close_all_connections, - version::{check_app_version, VersionCheckResult}, + version::{check_app_version, mark_welcome_shown, should_show_welcome, VersionCheckResult}, }; use log::{Level, LevelFilter}; use tauri::{async_runtime, AppHandle, Builder, Manager, RunEvent, WindowEvent}; use tauri_plugin_deep_link::DeepLinkExt; use tauri_plugin_log::{Target, TargetKind}; -const ENABLE_WELCOME_SCREEN: bool = false; - // For tauri logging plugin: // if found in metadata target name it will ignore the log if it was below info level. const LOGGING_TARGET_IGNORE_LIST: [&str; 5] = ["tauri", "sqlx", "hyper", "h2", "tower"]; @@ -320,24 +318,19 @@ pub fn run_app() { .expect("Failed to access app data"); let config = AppConfig::new(&config_dir); let current_version = app_handle.package_info().version.clone(); - let mut open_welcome_view = match check_app_version(&config_dir, ¤t_version) { + let version_check = check_app_version(&config_dir, ¤t_version); + match &version_check { VersionCheckResult::Init => { debug!("No previous version recorded; initializing at {current_version}."); - true } VersionCheckResult::Unchanged => { debug!("Application version unchanged ({current_version})."); - false } VersionCheckResult::Upgraded { previous, current } => { info!("Application upgraded from {previous} to {current}."); - true } - }; - if !ENABLE_WELCOME_SCREEN { - open_welcome_view = false; } - + let open_welcome_view = should_show_welcome(&config_dir); // Setup logging. // If deriving from env value fails, use config default (env overrides config file). @@ -440,7 +433,9 @@ pub fn run_app() { let _ = WindowManager::open_full_view(app_handle); } else if open_welcome_view { info!("Opening welcome view."); - let _ = WindowManager::open_welcome_view(app_handle); + if WindowManager::open_welcome_view(app_handle).is_ok() { + mark_welcome_shown(&config_dir, ¤t_version); + } } else { show_tray_or_full_view(app_handle); } diff --git a/src-tauri/src/window_manager/mod.rs b/src-tauri/src/window_manager/mod.rs index 59cf9d619..1c429ad5b 100644 --- a/src-tauri/src/window_manager/mod.rs +++ b/src-tauri/src/window_manager/mod.rs @@ -29,7 +29,7 @@ pub const COMPACT_WINDOW_ID: &str = "compact-view"; pub const FULL_VIEW_WINDOW_ID: &str = "full-view"; pub const WELCOME_WINDOW_ID: &str = "welcome"; pub const WELCOME_WINDOW_WIDTH: f64 = 640.0; -pub const WELCOME_WINDOW_HEIGHT: f64 = 640.0; +pub const WELCOME_WINDOW_HEIGHT: f64 = 580.0; pub const COMPACT_WINDOW_WIDTH: f64 = 380.0; pub const COMPACT_WINDOW_HEIGHT: f64 = 680.0; pub const FULL_VIEW_WINDOW_WIDTH: f64 = 800.0; From a85ecbc0d020c6bedcee7a0dcf3f4ea80a27e059 Mon Sep 17 00:00:00 2001 From: Kuba <78603704+jakub-tldr@users.noreply.github.com> Date: Tue, 25 Aug 2026 17:14:40 +0200 Subject: [PATCH 150/155] change object-position (#1121) --- new-ui/src/pages/welcome/components/WelcomeCarousel/style.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/new-ui/src/pages/welcome/components/WelcomeCarousel/style.scss b/new-ui/src/pages/welcome/components/WelcomeCarousel/style.scss index 3d8365c25..20c02defb 100644 --- a/new-ui/src/pages/welcome/components/WelcomeCarousel/style.scss +++ b/new-ui/src/pages/welcome/components/WelcomeCarousel/style.scss @@ -23,6 +23,7 @@ width: 100%; height: 340px; object-fit: cover; + object-position: top; border-radius: var(--radius-md); } From 5aba6518368dfcd012209f4e0015885c06c57fdd Mon Sep 17 00:00:00 2001 From: Kuba <78603704+jakub-tldr@users.noreply.github.com> Date: Thu, 27 Aug 2026 17:06:23 +0200 Subject: [PATCH 151/155] Adjust "What's new" window (#1122) --- new-ui/src/pages/welcome/WelcomePage.tsx | 2 +- .../src/pages/welcome/assets/test_frame.png | Bin 398318 -> 0 bytes new-ui/src/pages/welcome/assets/whats_new.mp4 | Bin 2284259 -> 6466311 bytes .../pages/welcome/assets/whats_new_poster.jpg | Bin 20979 -> 26665 bytes .../pages/welcome/components/SlideVideo.tsx | 15 ++++++++++++++- .../WelcomeCarousel/WelcomeCarousel.tsx | 14 ++++++++------ .../components/WelcomeCarousel/style.scss | 2 +- new-ui/src/pages/welcome/components/types.ts | 2 +- new-ui/src/pages/welcome/config.ts | 3 +-- new-ui/src/pages/welcome/style.scss | 2 +- src-tauri/src/gui.rs | 6 ++---- src-tauri/src/window_manager/mod.rs | 11 +++++++++-- 12 files changed, 38 insertions(+), 19 deletions(-) delete mode 100644 new-ui/src/pages/welcome/assets/test_frame.png diff --git a/new-ui/src/pages/welcome/WelcomePage.tsx b/new-ui/src/pages/welcome/WelcomePage.tsx index 09000c436..1e7153341 100644 --- a/new-ui/src/pages/welcome/WelcomePage.tsx +++ b/new-ui/src/pages/welcome/WelcomePage.tsx @@ -22,7 +22,7 @@ export const WelcomePage = () => { >
      -

      {`What's new`}

      +

      {`What's new in Defguard`}

      Mh|X00009a7bBm000o2 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⧀ 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 diff --git a/new-ui/src/pages/welcome/assets/whats_new.mp4 b/new-ui/src/pages/welcome/assets/whats_new.mp4 index d5d4b05e3585ab4567119a1d9c8c20126342703d..4b5cb3d23ff52d3f917b0cde19c0ca156411a716 100644 GIT binary patch literal 6466311 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

      q6DIx+{b%Rg|Opp$zl_ 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%0A>=mp+|TXarMz_W9Jec> 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⁡NcW{7g5=v5#G*py(7ZeOi|U{I@4dPG;bRI zgFAXUi%fZWIyiDPqvDQVVL>hg^=$$B!v6=M{B%<}EDqs1*^#;t0esYY)AQc?FNqtb zlFz95{n+-i`(<5f{Ynh3yOeUDo1^W_R_5E@VH`e!%>l?O0{69M{I6@RZml%N0o{Zz7 zS)fC;09iC4VJ&R>f&v)(MsAf;j(xNFmIREDT4i}iCAi|>j4Vg?+;LC&&gUn;U)z0A2m6#(gg*y!C7S~O?4J^>yS1J7 zY$zIDFJ`0tPsNF(jDVn;@wb*6PwFpWbW5rfO9dps!3K7zf^&L2TQNHsEs1?1t5A94t=M}4n>I-H0g8_b^?zm1>i?#xlVE%Ug+m!yX%>G(v|qP;b?z^y z@TL0?h^Qf(?}VyCm%CO)gvyn$Hyou%&Ff7DU?$0eUnc8#w!A*JBoEmbb`=M4Gs2n; znP4FE!d5Cn4ob0yb-m!O@H~;a!JCH8r%6v-_iJ_8ulb1w#FMS(bj3f26`|FZ&X_4T z1rk4PEKwXb*qN(5z*eXahWQ8)Ao8mb3(oQia1B6Tci7F8e(gWZOK^zetW$z}ZINdo z<@NcfEoe^*mJdBxw!Sw*n=|6JxwU_1<3GW@5w?MneI;jSqKqrzMK zMMn=asG*%5NhH4Shmls-XS1)9kLmP3WM`q6GI#Ngmd$Afpf<8QHq`JkFShJ+_L>Px z?u3xJmE*U)1jo8ko&e_p&N^0MdF#Df{?AP6cgVst|8B7 zBE7+f6>VQ~yyuRNr;sh3;yhwp7qnZNQWPM%Ejuj61^R7_x1a1YL~7Us5MauZwP5R9 zV7qtoQT_5Xz1at3n-_cQyoPxizq1i`rfR3jhtr988k&AT7dx!3;>;ZP;FRN6%W#VZ zZ#B#Ej-Iy;3MK792#GpL=~s;vZp<1FxUBs|2Qc0fWO{r5l{yPOq~|G=@OpMRjTm;p zo%ek26(}&MR=GhDI2eZD9q9x`_1O39NioLolw_vQ8vJ%?_F2Sg1sCB?Ol9W`RYa6f zJGO?6JbRjIq!}mTX%w10h;pCucKrBDQ<%mzagO+ip3up*@sBldv2B*lhQqV93pQ)h z|F56$r>TGS(!xFlIxtx~i7PpGDKzh8ahw635-LEDnpxanG50y}XAzXzj)}0&Wj)5h zP!NIWsg{`3J&-l#*#k|C`?sG>fZ}=&+K1wQ@S|L<2^g^MFdzI+P1dq~Fi%dnBpVO3 z!5ii_7@Gu)0z90;#NB1q0b!_=!)cZq24~v74YUBM>kIbD6euXd-F1sc)Rdw6I(eDr z3EcPojaqeZzFjJ2I0ab-(#A=}zNgHoxG@B^#l=4Ff{4@p4U;#^=D#ZKRZmer(P9B#?CG3MNs$u&tUgb2j&83AKOSrRZ zwSwj!e5~QsoVjX9d^LXfEAAHmRGYRPB{C|FJDJC=PRE<8Ih{vR#XNy5DC;CHf77OzWcH$K-h2@u`L` zmjvLfiWY)lZOA3E724p=Rml9Kuitwf@mT?4q>^WQ24AxnVHliSXiQj_OmzWKHS^4~ zPS$6XH3zzGf4qh7x2Y~x4r9*oh9P)#G!#*?$4{~$??bjZ%@4tqc$hvjJ)I7OlD2!a z$br?%6JYjH*p)N!#8`Kpp1TP`uRU37tPa!g^#!aki`NJ!^RsN33>EA&YtB*OwKbjb8wX^^iiVt-7%}-z92S-ONKwVj(qD6>Tqd zQrwnAVwwKU5p8?Ni6wgaYOCs@eK4sfq-R`gvu%xhwoC`8@e*O4Vdc^l=*|-=@(zAI z$iG1A!*WY*1g*o%z?wDFx!epGUDepiv&;ATb|bkQ4v1%!)j?3cPbfZc;&D~tY_Nf* zA2CAR7Aw24pJ$-)^qYP>GS=ovy|@k@KXEvo8aD`k$y+mpXGIW4`{HZ2xR-iB3l$ir z^DoU+U1Tw7-@(&$pgw^I7oexL%9mH-K4;!eUe_e>Kn&W-{(Kv=+S|jasy6Y@wi{Jc znm$t>PmB#o(bwKAa$(^o8)al5PqH6hvYMcdi0j#7>Oz4!>Du#4%dy*^fOC)96lSK} z2BcHaC6h9g_2EIF}LF*s(xnivf&tq?Y_C1j3!X$5Q*7J#u~{ zg18wf!_Go@)q?-z;&U#sv0+o@ebV$lKVe1oSFm$*nFwOh|U)~!0u z`O(uIu}t|eN_2WiMIdrv4)m{S2Quxx1p&Vb5+`mg88;G1Q#OckYP4isIa2;bZ+U6D zfY{tn|9mh6egy(t4h?$3+DXp1dnhYm^D5mOA3Xu&gjDh|{jH+=7|Q()69>A`xxeK5z3!02 zx6X~Kqz?1fM&IK7jIwAj5^$b-OZpMrN02$vQ;1~eFLVtQ*8P%8l|CfOG_PY4tHYviQ)aansXM$7FA!W)uhIiNfNz=gh`7#bs13=fWM; zGO-Qm<601=?WD7+z0EHME9o%++;M#Ta?b^~tdEKwK6Py*MC8Z`eD1K-S3j7rCURia zPotD_(j)zQv7OfTCMX@Bs{v6kwO^WoR>ipHB}A*J53VWgz2XJLfDd?iMM>;PZT-Q* zT5%^!b60))Yhv%38xauylOct|1 zPsHSvDvgSdbi4{k0`Xt8Fkkyx0!KK+-D&@ac*$raVC`z&sQme-oC0&hD#y(agKpD% zI3&Ra6LVN5momyRE{NR^a4MKluE2a5xw;4HVp)QpkYDsle-oWq-l6zEt6-yquUj#Q zNeAywxECRTXfgZNX1_eJ1-mer|MQ+N5;bkIK1C@MOU7vMbolopV8$)`!b&Itkb6XC;yl)vxTjWaI{d_J|7~1gPkx##D^V`Hc zrL)lkQ-9AfjzXK5`%5J|lyd}0cO&A`$@#Z%r)qFB9w8=y!Mk*iHs{Ys<%rCVjoVT+ z9}8UIaiX@z1Ias(V#D0iwgEOtfGYE4Sq_qre&*ClXu6CQ;a>3{NRT+h4}R6AsUfQr zDMjIIu^fNbMa8p&#oG z(xtI#`&CC4vjEEisgHlf{{a=V}`l0wYqBC7!7GL0)abVIQ*<=kK zFN0mDC6TG=*#i(xVNfshA>lkvvLuMb_b1~4x6A=n-opqaGcn5vXVi?qF;(QlrJx;S zTHLdb$7|u1H6`XIKd{1gCc3}#*96Fb2viRx@%h&L)SBfTYp&s=VuOdlcc{7|j7^}; z7tqw8FPGQJJsB46@Oy|F8(r+w$$l*oMz--cgq1$5VDm{HUyc!vPBtPKXZBWprUfcfd*Kh;y&*Nv-oHNd+h> zX7e9@)B0%SmucTU|4@nsthWQPG5dQlwEQC8D?4VW4E)yzhy(!1yp4>zzY;^~ImAa0{zViDBV%}vI!6%8K9iCumUr-J1?Bw%wpOJ)U91jN;mR4F4 zEj2`(_F|5EjSAL$etyW2cK4(;^>%&VDHQFq|LIpxD8<#t@V4?yiKTH|6p-X1K)*#& z*fm+8*n_%HDGxC%rNcr@(?5gXMJ8Z14oZyt)xM(2sBGyF^3;d6h^LMlF;~&2lP9*8 z3s9YJ!Cx}W;VFHsFWKxTkYEAt6rCoS!Jb z@~SM}z@DZS?^H&iAN6D0M$wck$yNl)02BeH-f@JW7!NX#ReR4!3nWt~?XSyq);hGcCM&II`-vgb21YivJL0N$BIm$dFNz+NLCv1Gs<*OC4K$03b zSGR*vsbIF1_Ie`f{!uUTyOh@Mvq(9qP49>iH}`_ebZD^saA&qz5_@`CDGfbCnM>Zz z4j)5S&bZCLtouUDmU(whp&KzY-KUo2THT6X4)7yb|0}Rc<3~0>4j1xo%-wbm4xI_{ zP|8MwTMmJKg?a5kt2y0RffntSw^mdC8flX!`wq+k2$VR1Z=q*cy+~YH!@#lP!Ev_C zPVXW%U&p9{9zMK|SxEp8sbc7?Ukb*AWTi~xTF)rT6Zf5zxssMF_t1%Szd`wR_C)|J zGHXw~X$lr+ikO&Uqkn#E)ql-ic4qyPPBow7GoOTOyq4hF(vEa^yheQxZ%IQyW5+!A z<%`M(3Mk4K1~>%E#i;r`m@Zpva8Iupu;ONQL(|lb_v}@jGr7){a?FkFSfMp=c;Rs( z)Tp;-(v5>b1}y_vR4~v1Y3R6m!WUADnE@Rs zVUZH>u*cRzrU5mL;VRlIe;*(4%b}If&uyW%N@zABN3`KGBhREfhVo@4(O2CrvF&*J zyqtQI>o;Ki60D_Mus!y&VeL@YP(e`wfMQS5MU9&Ujl}!cc_aLWczBGlvHq49r;U}n$W0$2C;?@g{KZSKi#%7Jgw19{=Z$})0qK6f;C#wI|9 zoQaHvj9JIQyJ${h%YVoj(bNIvQUP_MjS^Q@C+khq1m}qn$wNh^6t4PN`14go80Zox z8WAh2o^}RWL2}k3yQD1*Q&GRKUU-zh!BH1F;C`a_xP%sYjUU#Akav-38K4I}sS-MZ z3Jj>(oD;F22&qPL4+iKj>8(B(^%WKQHV&#;FYL|W-}L2Bfh9dD-Id@;yicd;Ik5Y# z3&Br5N7GurOHNPX=Z-MAAS3+F&0*rd%ToAu)*Ic2gHG|#CQxRQ`pqJufBV%%nO=nx`z5qEn-;z|-m>&`Q(mFzR>rsfZST|V+3r?M5hItUY^JAX- z9Q1DmRqNXJz3B0DZQAqb$c|*0|4I^r$`E^W)J8s|v!9G?vd$murUF$8A<|F4;T(#F z2yK|cj+>{e$J^ziobvpid)E8+s6Pfl}J=gt?^4^HEK)!nG7$N@hCl=WWVN@hn zIyYIDhUo731iuwzzlPdvZw+M@d*XWWEw03d_3+%ow1V-B_0x4ok%H|zCWcA zpwJ(+*&2l2diqzXwrQ!_tUetXEiY;@TpdBvu6aX7V=%v|FUTwH*3NE82`}h0h*DT2 z&s{Z*HMDXd>L$Cqyn-lFAy&FkDPE&d@{(oDf)djtsphaeuOb^xL#^sN_nN%-nXQn( zL*MaRqLw7A0;s14biO?n6WjbQx~)i=GsB1&7} zuaB1fl!xt;jo;R-<<`=8tvVU{8e47u6va;q!<8)30xRkv0bQH&OJ9bBqumkJrOXJn z<1*jDD4!G}+ZA*BNS3*Dg}3fm_^GjQH_$n_iywdXXEMqU1fCSSRT_pG5-abz0lTt0 zZzYohv#~FF6?q(_)gwDgW_UkHA&m!B4|8j}SG z)8vxd=)f``*N&qT3^MU&{eCLxrW+CJ!;m=7;yVtn_TL9^tY!3@h(~#Wx5E+vRJ&aB z0>=V<<}4^d^bWl8J_opFLy3$-V!pAJ4C+Hpm!3+Th{)+0z1B4}v{`=_oPdB5%KQ}!0D52tDv3i?Cs*+op5l|w%-s!a zc|g)5V9kQggi{ZbX%M_3KbW3s7$)~`t28ch}2Gxe2<|NV!LFR$xX&h%17&NLoL?+CA z8jQtUkW7SIp=iUvsb1STR~56A#PDRYAA(69kq-bmIxYpggLAez52#}35YYpSSYbSh z75Hr!wo&3$M4)U>#F?D-6}8L%O4k({qfwjx{Bw~GSBwQ62OKmziU4Q2@>dk!D%&RB z{Q^4Yp0+EA9s-Qcx24?r_g@K;G!unT|Nr|_gnj(un(MxA6iefPbOUBU5y=nskXqu< zoH11eaLar06ldwjG?Dc{N(vsi+HmO*ktFSGEiYZH@z}~ja=OaG60wg3 z$!1;s)oHFMAC;j^Lpya6C4T*z2GD=lxkZ19>eN zF){ohaqNZ0q2&Yy-D)*)GD-Hi2bqSOd`XDOUvNhKIs@K1HEyBgv4}^(d@WRrMHABvo}3L+-zYv#6VMSqagpQupu0P_OW=k(;$>6;(nfJYOYtH^tKSCMz9&;9TTkqYG?q8tm`qpe_ctR)|>3%{x4P-aw;Q z^F4CIZ14N%d3q)8Fb3XI;cmz4JB7blJfhij>P}`+Dy|71@ z;1V|O;%$Kp$~#Zm{H5YH+y0s)3Ud{@Vj+^G3uapICR%wa3+2i@+LcoKuZ0HRuB*1# z`>9>4coUPZ>Aid-+dzAoJI?S6?{SJGT3nEO0NA*lf>B13XtoY1A&!D81Ou2q+Bd|l zS5FjVn`jBk8vRw4MB4#4RotY0H`x2^l09KTp#5gBXtDyU9!L$U;6Fu9g$!|Fac$7M z`|3|~ZkeW&g{JU7gwSAPTmX3)`hb}WMl8lia8-PRcA0GrE~>WSWsBzKQ&SOEh$R#d zONC8WIqzA`BJpBrW3cA6DRCau#qAG%W zc@tKEkEj$vVvk?oExTPe+|1YeFSrh9DK-Q7>6k_fvub|*PdWp9cU_tqcEe~r77uge zeJmMSRdK$60`9PDlqo!sRL0cn?G;*5ApN?iwS zB#C8z+!{;zVjcR#fBVL$P1Rp_E_MA>#*#@{~5qzxtGc5Mj&mI_bzR@bq+VAPNP$nTZjvPFC#q0hyml8}OVqs+s; ztv{+KBTY++0q16;CAt(96F;HK8h8POTr&-_;w0O0e;}n=p&|)U*?8y$E--8GuZx1| zeuq-Eq&45#d%*zeeF1opfCG;R04!ftxTr((_rl{?*#FrN*I@#;Vj|hKDn!-AE8bnZ z>%$HiPJ9lMEV`R}?%Q94EDM8dq~>@YWq%0uG4i)rxJk1yg0hsVEbGmSOMLbLjk$D~&&rcx2_H(FI9z4F$5P^}Q)lt#p#dCxWW8?}o zF`r^nN!IL5@8aF~o`&%=DU)qqwV$8Dt5Y_%9<@r9KLWh z147&QyfxiF^~{|zu_$Q{oOXLe*p-F8cBT--07O^jP+#jlw+^#OqFZt0J%grcaqY)5 zTl)E&^m^f3BD~XMkG>)h@~d_WK;c_rqMzF4aZVoE+e%CklNh4}yr{Dk#sZ{|KHvAN zodM(uK4VBS6ix@!|C%lyj{?hGL7?n^g*}rm8x>QQBTki%jM!3NP|Q_4{8dymF4GDH zDQt6Zmps0y0Yi)m&?e2tjZj7zwTiT$Xm1yAe1W z&sn5-0rTvc)lZObIr-9TKz{*%!KEEGg41pdkvH5OL~CML>1S!^Sz|}&nnlI^eC!Pn zT6vsJQzf^OFKIsWpEDBD)bnjKI;4)A;)|5gw+Ek0zA63e%od~j1+Vf|fbgN&={BI( z&|7%2({IG3=dO)Gtm4RY$zAU?MkU%qZj7o^tYBP|qfI#nVdr^D!tJG?0%Er}8ZrpG zg~!nDrDd2Jnz2JA4BsIGO>*^SG1KIJX3<2BT}ba$aA|P(d>{|SLY3PPesBt$TmM`G zm~HBEnVyGF8}dx!&U0zjg@#;KbU++^y0-R~U*^{~NL-eY4YS~G^nhta$38kXX>vnA zIGD3GzfrK@RY>A{Ppcb~u7Ewj?w<_(>4JN zj-1sQ0N^vUi=DHy&z8*wIWSPvjSX+Q?}?Ft@UaI#qG(v{nJ34OYo$H7#FlY@O=CSS#>@AnCq zw)M*rz0`RVUHqx0s}W?N0kiWC&wDut6KUHHW>A+- zlc6Q>H%Z^eL*`3-Hr%%UN~|;m1JbPei!3{eJ2-4gRDuy{#!`?Qop49ny2L`q3ZBRaBCwGH7agOH0Jynz9$3Lo0DQBQ2L1=`(P+o`zqx^1AIH{0ZJmz1^O{DSj<#Ow`i5@vIhjHB%n~I zUOeexq3~NYJlcLr8z2dj@u%jOs0qTbj=%2+o|*5wcah}A9HD>~%ii)Hdj$E0DE-_L zo)?^{0Ad3N81Ho+F^A`2$dB92CG>4DKR^ZUzDYSD6F#2$?2VWImduC7VkZZFYH3G{ z5V_!O9Iz3PxZ91lUxJ~vlcdNbFD{5J^|9h_p3%~ zY#!He!J5+)yb7N=1)>_+u|gyUxZ~>=tW4xtK1E`=>G7Jy(8?cF(hy)BY_sNyA&vgT_rZC#2qV7tbUNiApvxo{6?}MX#E7Vp4PSfS=!n1GZQsvN z>>r~4uSh$uE)4FMGYSMjBcI_dFxwoY92qA<{a+?rD(s8iXbQ6S<3RdFJRbT@krXYHNRg+B% zY54uyxUkSMOZYW(=wB36pb~g5$afd>o^nE4@LwwNI=A8sC+VjRc48ec_bg11So73L zrDhtuvPsu&Mjvs*7`83>nrvcM6Qk&C$!Xd(W)8hB_-^ir8mgnYS*e$Q1?!0$`{)kT zf7|mqJqla|x%V(paHd0fG-c&+-77BsE5izJvwxo!ilZ~a&St4T7=+Lo2}3F4I;%q3 zG-kq!rA*HhMHrQ#Em-)d7h1pSs@Sib^xm$g!l!QqzVF6{ePCvzGsNBcQYd~-DzI-( zO!Z1b>eF_*{_H&>exSCGt0&%?Gx~xQ^2*7#9EZDk()T{2k+?9qrR53*v_-Li%Yw_? z?&)a;u_5Yv;rCf3i3;zS&BAIrF0#%zy=h#+A!{ zxsK+rrC2X-PJ;+GZg7Lt8H7^PEK=pt2G6rnm==%X z)y{7O3j7~b%0#maj`FI95x(Dy*$Li3sldf*@ujfJy&$VNcW?>>hkyDlb{q%Qdu0qu zvBp_m(DZf9qLO_dARyMaduVLi%n3d{_1PE}0T0DtO4K?wqC{W}khXn%V?k8L;MUB; zId{-Qa;1x;3*8(Vp!d2`iShu##{J1QCFMbC$)q*T|FcfRZP6NZr%ARVtJi@n2B$;0 zs}VCRRdjzOBL`^k_{X9ZlqdOVCo-Xq-J}0nRwU_T zaw)Nl)ymu+m-3-0)pU4pRg?TQ)IL&v7-)4wp`)U$=B)c>!_KwfHcdri-HEJjN{)ap zj+zE&Jm0$Vf`GZcihGZIHof{0|126gE)V2=-S|v<6fSp=RoMW~c5N%5cWLEo(!n{g zUoGZk;)P=L{S3uF^?hsqnmZrH>n8_NdDuyGlFhqhvYG#BM z^2SLW$+9lHjbZ$d>6lRVOAV0$%fG_hji0_APq(%!D%g>I={!W4qb|LdvoeBL+gJZ6 z9OW-J8MisIWr0erzD(1#KM$4pYPq}2XC+<+5TB1U++TpMYUk%isG9vQAJ=F4$+b&+ z%B?N#o~GXw(0(a+UCN{W1|8*#YfV!ILQZ7joZT^N9RlwLwaSXTyBOrk9u%0om5syf z;xp(C_p2RAQ~m8C*M!=Jf=IQWhUTYR_GSdzYAL5^$hqi1d@I){^rrK&p|0_Nsg_%! z#3ou8uT5*;!Umd2X{K+pnn;p7^YdBtgtEI9_^PfLbRU6|8q5RoBs0%6yBosG$5r*! zcyQoVpNVFT1;)I6_rsSe?CRh9FM!0?pC@L%4%x5HVw%*;;<0C?>>AvJQS`PG^R~}} zzJ_aaPd_I``sv#r8NVkkN9^q9zIDjB5&9-I~KV&p7|>RF<*Fph>*;1A_3xFoFm`rHm|=96@1wc zU^bog(_aNCl5hxFo$}EM!R$7V+z}_?&%kEmV87PRDcM3gBk~s_t^AdA%u;HURcO*l z7PQ#xbUnMg@PcWGy#Zs{xq>HT%_qLEyYz=|VR@nN4o#%B8nFF@s0Pu`y3w9waPqn? z(9Eb2ErJM0l7t20@h8b?Zr&F=ArS)RG(+`%BZGrPstOlwkk86a@ewloCAmS+JWHGa z!DR~+iv%MODqfFFs>VeP#Ls+=JK#oYhGVK50Oym^)D1DoTNPs#&;sr{y=F4m7%xtk z2$Uk3RT^Iht~sB=wNry?KWTD{=gvm}v)ADkXu{Fuh_Eeg?|f;m=9xZk5Y%S=Wq~~0 z$1}|5bI;CrsVN)+q0e}6Jt_dSNq?f&Ym=QDk!YA>%6RrSc@ionjHomBd=jd|!LfZ+ z!APRW)aO#LznAI!YJ#nH?e2SEz=dfFJTiD;r=Wt6f+=gfT}bbM4;GhwwZzn5i&C!; zd7%~`U5U=Pf6DW|u{8EU6HhSrG&BfGSEp2nW&7m70z^U1L`n&N#~zu@hcR>vIOl)n zs!AU+Kl1WOq8o!L$26w(7&L#L88TnXYg4~BDTe}Ak7@W_itrfIrS}I)qHe44NShgqiB2TiAWCd`VZm)B?(!v#%UB*YHxIG(4|v(U|#4-=dZtiI~-M)zrpK zbhb}I7-|`);!A4Nj$;RC$CKcjVluLTgQy8;r`==W$;@=Z$$kgPfBB0;+~W*T*z8LK zu0`{N<)$P5tB%8wM0>{LZ>!~s2uzzIg`4)Z&>!k+)uWURHNf7?MIhBn2zqL)QthB6 ze$k_cLG1y;TLw?V!o4l!Mc`xO*fxCydgh~;G4*pDY(dIKBU~S84$N0IwV&cyy?n6F zYvl-xoi-q-UdA|7(%Ig>5SXhC$#n$^sHZV6wSdQ0?2T1(b13MXA5p7gdz6T&i>E^` z?(m~Fke%lOk44e;sks4Hd=T});!fu>2~XX%Y<$kRCfph$Xp}e8;O(UPdw!Tlx{?Wv zT+&|iGQ?rp^b_(@>b2Lzc1YoCL+=IkGl_4jWiPDXzC+@c2QT=|1_Zq{a}o!bNVcO?4YW%*D_s2|WFju=|tocc3mj^S%zE*%aC=xs)F&QPmcpbMj-p&IB~pE z^lw|ZR2j9cT`)S=eT=P2Py$KVKAskA2fZ_P_8F<^3vb&Es*35FP`Xq7#?gxMmU>6h zQ#RF0(RQ$kSXPW8p5#p6PT*?F+YLevk%PR8B>eh7+22+sWy<3dTNYsCd%q|}= zUQtJ4usxw#|8=ZLq7$)X@+?q>zT=z~D70LY!teA&#B9w;=0XHB`t(U30it$))0@(s zXj?Stbd+&_&{0XDKYYEM8U1rl%LViQ@F?gF_AGp6PUx?(pU;dBq?;OgC1KkxyWu1M z2>RC2vOakD_P>E#$BY+&!=1%+>_%(svEdRG& zQ`*r+{ESz&z@BzuAiDiemjsR&*3}*|mMew+17d&P3I=O$g)0nB5Sae!Wx+q;wWFX@ z`!nv)#Mn++j#S4m4-HdLuyX_@+WvuR6V;t^hKAA%S81MYv*P+JxTvuc**$^# z3k$tSUSaNv4LT=xGVks>!H8|?(`wbslkh4+S1A%CpjTbw<@L%vxHzlGZBnRPo`i^T znNm&d0R_^p)~a7C@r2!Rp^+2@x2UMl5F&Hd=vSjl{d$~{9AAC548U-($v*?uau;4An^JMloN<&vaC%b?^TRa&Fp(Ezv}1kN zkH_8g%#8;o8atMWI|TjCEJHLV|3Y+E)L5H{m+bcZP}={c&y-Y|rLfexJ;IC7odpqo zPL^vj=i5-N5Jd1wWm<($a;hc0z1Yd_*R2LXc7c!2MT%Ixa)wv%QSveO<|*DWF!879 z3cW+_(jh2{da1y}%ik0qYOoJqV@BQ`yJ|F=K09B6se!hSml(rDAD#aQ4&v%sOwgSk z$y>Zg(C>u%^ac!8TmXJp))zbe`~}DUN+KReeDW~&g;1~e+R!NUPTNekxZB~2uF3}Z ze#r@7A^z@C-r%s{2$<*Dj3pZ;ZFitiiasf~k2@RMWTI$aA=Lyq00!$x+1 zvIvG#C$9Gs;YFbGtSc_mc*PK|W{&C~7nDsP4Vdy!vTHt6)Jfh?(U6JZ?7x2D)F*$m(t^)+O* zfB${x%fs{9qVwe=`)d*eh~w$0ewG7nQI))CG$lf>&_1ZRF{29U7_x)7w5yJ#mp=#aNbX%A0t z6ofx&-~j*`Yp73}33qXD;F25zzqdZ?IPC!w(G@~%mZXelIep{KaF=4xXXXAabbTd~ zuMTiC?!|^Cl-wx+sv(wXN34xS*+XJkeju2{^DGTnJcOToW#_OUxhM4oj?T}7zb0cA zN*33Ae{CTuI2b_n<800iv z=kw@Ck>!^txrcZvZ-A`Z;)&^)Z$tLY$nO`&MrQD%jZUW!anHy2_I8=WzMrUV0%!}M zwrzvuT%YOG`<4G&B^GiDMfbD)e2W|o{He?bj)T&VdmR-xypVnN>3 z?pmfTe)^+LoI3REQk=E>`KbMQo?fxNul*p7Jf@O0|0J;{$WFXS@yOuxN*eAjjFjzq zvWHYTU7P@ce+w;uevB@)6fMlQFw_zIIUaN9tCo}woG%ro!!vIx=v>LmQc6`&R2_6A z3{a$4OLw%~9%rcakFL5-U9k!J{M)NO_%(qTc9`^uq6s%&9+<{0NqX`d12#%}3YopJ z#)#YAM5E}h&a|6WXaD2;UF%u88kpk|xr-k#6=0rf&J=zQ30XOOBZvTJKA|A%#Jv;s z%UANDeA%L#uZTjpW~uuEqZ6;N;o7B*G{Y2f-3j|)PC*7O0N#5IDG6hQnVy)#u|^H| zzRxM+y3^cyLIEzFib9wG^()4T7bJ~L6bQ-3LtAk;_G3Va1MO`Ds9547r>~^?t9w9~ z4v{a`&1xP&G%eaJmBK7$a9EmfZWqiV(ZF_(YIcIoLOH5lx@|PZE>OKJE~BiU%ReLK zK0Wn|eNB4;0Kuk=A3{vN08nPYINy`i3=}o*Wm(Ay4=Y|Yfg$gh6u8#fb>Q$45)H<< z1P=A&`H2wYLaSkC1upAkyU#mIn-d8i7-(6AJ$z6g?>~6p+728ciLySw8&a?$?mb6u zcV6IH>|&0)_|3NsYdZG zS4b!KQDmNSh{f6kINjga+iOeG5$EV1M8UY zYS*W*sn5gfDRW4!u|qgdV(G?=yOQmfZFc#=38Y?(8*a8FFZnZJ?SV#`WuM^gPRPR6 z+%yBuiJ5+#;mC0e91daog+q(ddOJ;CD%0$lRI>V?sO=ZbJOoMeD~@8*a&i1~L_rXbVmzlWq`0tBF4VWBB-d;`VtfYAQvL=&@Qe z=tuy4k%=1#-k$Ffxo*(+Z8DFG&s+@~sjBdS^k#}XSFZhtC2OZ0B(BD(DA1O+pg;n( z@2M>>Va*5hO}+e@_Bu(cA#m}`%+nhbr=rly<{~a|154kC)0S#7ci2VClu`c0{4EiS znwW~YyPCmin+q*QVPReKb2#-|=53&{CrZ6Vc5)OZg|)h@H?)|5E*YM)7ct2$>O&Sr z0+qF&_}vY&`cpO~I#cL6{*iO+0WHosHi4`bPL)s_;lV%nT>u);Po`r1_aJDkR1R9T z;TqHcd=4⪚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

      M$i6yT z1P%<+_FT!wDh;Ox6Xn55zLF%#?-MqOG@^24i7S?@EHgr(VmJjBOa}^9C-m&`WBT;N z_h>rUo*006=h=RV0BBzL!Xf}Z{KkV6Ac_nOB13)pc^2Bs0iyvh$ipMtF-Cm`2~?iM zc)}GR&xnOEhfvBR<(O0WXBYT$z1kuTsU#b?ApeH%JsZ>Y#$x4*k-w&C$Ryk9wynrc z(=%a_y^N=xZ!3}M^POriL6r!i^DK^Yv*I%d_c%|62HY&TN+_zgw$TM?r{&u%gaHwq zXYTFu87^d6^&TxLZ33#1sqy!I+8YFSvIx8e`{7y%+D((nMGVSa+Qdx&-IjKoc;U3@{K?`*R5%F8 z<6+cU)S)>t?eDOt4^)oo-5Z;NTRzo`#j z5nfs7jn99H-uT>?0;w5#VRG+=qp!8K-j?9}e#>*{5!u*V81-zUF6_p11u|8R>@zsj z68-gzx)*DosTJK`TAyf~(#pj(2Zo0}*^snHXC{`)9oUpMCxb?GgeWzP;>7o{`2a4? zU%`-$Z;sI+1|7>!dGAC$lm?wYPUbIRey7dhP-s%%9C60U@9LvLo`?WfIBEn7>L&_* zAfN?v9x$b47R((+*vS12w$))gARiN96q^}CgSb&(WK&yrgX{M7c-9ZJZ@^ZJB6tKnQU|aaPxsmIRNSs3Q$2q00o~p{Jy8ct2Fr={08AT1ZP1JMoK0xgcUn={ zpJqGgB=|A&E!+Kx7!h#e&Zo+c#y~gLy3uBrjWfY=Omnc70}&kHuv)%;SWmfgZHAR3 z{b-0^Se{osu+;IpK?zf0~T zLOasi@_^YY81*yU^!!UIJ646{hrGChQ)Wp-fYHog6ulH9mJiw?M6LeS21F)`13!@2 zilgO#EVk!RH&7NMn!Fu%GMH^yGWY1KE?>63FJY1cSvl$vbNJFQPlLD5L@w@xRQ$S; zo%XLDdb9R@UyB{O;?DVEVB!@YKua@RI(`=1=bO<6G|W?$(t-2yhgVii>vbO#g3+H8 znrd1Mx0-EQSDk1-N4-NuRdYY5)a$yGUoUBw6<5@i)U`j;l_Av4c_Z9 zGu4M5Hg(!1gXO@*YVbH7MK$l6N2ZUv0cOM zT5QHBH-F{8cupUz?}WI@KeH%#!5=i1}yBxeh69GO^h$}o=)NzxxSe=Nz5V$cL z;9O`9`UyzmbL^h%6__=|r(uf(eC!`NE?_p}ah@q21Yp)Xo;>F$T}-EdA?xR{f0TBk z7;Txhwj>q!YP&O7RI$^Br)F`Fc;=$b`?Z#58+r_XC+gsmO~1*$#Mw8Fe^DQC2;v2a zM}V&>#-)@H>UcRuAwN)G3&$X-G}~>lFi)kEn_mK%{Sd*${61Z$X{+$SUdsvdeh;L@ znt&M;p}NeiH|&OkJj>-@WX6d8lSYv&)~FsD;l_S+6rx!h=qe@G9?0md+9=_SmV{P_Lv26PeG!1@j8dg`S<@ckONEOA_N*UB_Q^$^aj zEd^v4K$vJW(eMBi_R3aJ@~%xpF@}ycqhJs$$E6gqK#ll;Jl?m1I-x5VG6sd8qUsTC zF=ViIE1s(p;>Nj=0YWm~w*biYlIh&Unq1DhELxXND-SjJ#1PT>?3T=ROob(V3H5FA z0_l=KWTiONB+!;GIixIA65HvqD?y(r1&fP(^QPW(Oj45lWYaEnPS{vd?%C`lEW7Me zz@lTY7?^>l*!H{j<>h*Rq2H_6PUh9SE`eVhti@}Ey?AjDk;EX%Fd4uO2k@V}AzmI( zHEMgMg(UsL>0y`AEaVs3y8H%Si3ZtSfOhIIhdk>#5v{|a4_H#cXrGp#0Z}?veiH8D z$E`MwsiPfR}%Aq?QpH9cl=P?1cLDBBB_VeL`kLmX5lYDR{G1aW&=gA~P z1-#S1q_T1OvtT7okBw1b{AlMZA}5~U>ImVpUDG|yB( z-r0P{bT);};`T$SNH+3V`*T7cVCP2$m>@-VzK;pqAv^0z zJ}Z(KgC0cZ(dzZ9TR0ak1`Ick2YI_9|uS<@^s z#=Chz;2&Sz&V4#O(iqC zU3{>v0**bX~>jYrm%h5FLFg)CyI6-VU7p@8yupbeSP*{@R}I|Rg+qPG6r+7jD?)xBD& zBSZ9v$GQ?mn|f@j`@B420~*udFf8BW`kW8nV%Iu@_{~Q{sp^wvVOE1`*+*LOCcZDhV~Hyq z#f%3%za$A>>3oXIxiWR-;NQ(9r>+fQ)I5PCA9Etl%^Hk^nn?&+r z5Ir=9;y|l*hbHbzCF6h<@EvrEXi`XSP{;XMR)OYCjz-3V-|f`Z+h@<{ngr_Y?uBIX zTuv7+!zd5sf%hVfynnih>k`u(5%zqqOH3~i2Cvg)6=2Dzf}8+$4p~m(zF0_67fi_q zx;J>7GeQ%<$@9Z?*BZvAuc9YU3Z4`s)L}$bpKV$HtN`uFA3U3J%k%Q=R7A1zQw8@D z@;X7JCk`WInxC}lkld|Df}+>xq84sHK@Q8{66` zvSq!q%wLBFk3z;6xL0EK{lz6P38INc&u32`_OahjO4Tudi@y^*ign=+nqx%F_);H< zB2X33$)mU*xWqVlqkycGCM}%cC;)-fUiRGmiV#)0>V|s5>F|{$n8WzHW)I@& zRu>7yv=xkGTNdF>9;`(zuDY)cYuMB$1Izf}EkNY4{qB&22x~bJh-T>iBXF-)64Ua{kXJ%ZSEax!edq~0d^tY29k2@KEBrH0!z`gF{3n;9_rr+sCz>oN22o2cFf z2`?)-?0H0rCqlUtJQIzxTLlJoW$XP`!S(&67#VkXtdcN%v{9vtMuo-rfudX(MYcRV z2He{x$2o#$?Z{t6w=Hw^3=*j9gT7@(ZGal*Y2D z7foi_`F>FmK9dWvgyYyX{CX!TKL^(64)y2j(?>^p?Pv?!WRNLXFp7g^BQhWNc0pD? zZdGqqIoS;mG_ljwK^?-OxSu=T@h?b6;3Un3_+WP<}MN8{+N2 zp8kCeID?SZ0o}u8BeGlks~@bA#;AY#-mHGqeIN@ACm*!T%46#TkJGAA)T3A0VK>Gc zPBG;ex+>0%k$evI#lQj%5X1X!Yg-h}4*=>0v*zsO`&Az6>XTqjzi7boaU8*sOo55f z=oxU(+q9*tOGHZruBS^z>W;8@{FVpH#+UCc;ryw+b)cA;a9LobiPBfdooGGPR8M;EbQ#;`Wmqb-J$jC^u;9@%+CtiMY}BqKs58pZYgJMP4cqqgU)FX>(-)`#l>F@|^u z3OVoa;7H=TI>SSH;k&4mb+^KJfpK3^TP4uWCtB6XID};^!3@qfc`Zhl2qIrG(D&x) zM1WomK^74-a)=$AL>V>H>QfF3L4o74--BJ=Sz%|LI8bu2wI#qRhHcL27I);Me(Rq) zSrkTl;?Ng@iwDSi#+AelQ8HYJJN^_=Q&o(LTj!eKvDO!>(6txmZrM6fz-)Y~SK0J^ zoPFsw$ApWo9Pr7c)m90xDf)xgeDJG&D5A}(E&cGJ#)qr&OpwH!`_-bG?3%!E*I86o z3$(eumD(Xkrh7#|&jpiKT}T8&Q=R1uT1m2_sYbdz4tP(WKBn1#EKv9O>`tlS@YuQg z_n7V-Kil_yaMQAFH`qk#I8yS-SgJPW6Mm=`+h21Y+qKD$pUScCYq{t3WI}|DgS-Jf zHCM;HpIHJR{D~kWIS{FiV<T`M(&hT!ZYKY+4BOmk0aXftoQ&SrJw`QBtx598dW~XXQz_v2{kToOYm5vg6g`rO( z=)-LLq^sQ4ZuT6G_Jv>5uFmK|ZLTf@ZewWR;U)$GKN?<8fYcpZn*r8F#=Z`0vDJO* zWULO-v0}gIx7BqY+7`Q0ba5ts*S#FL8Q~O|9f*o z{L-t$4?iaH{zs$*XyDCRKXtkDExB8<+WmZBIPq zIXN6y>-}zd7E!~#|KDI*mN+!Uqde}I2_E*wVdf;4QO2jiOsY_|6D zpn^=gUfD3a@2oP1liT{Uw)2o0LL|o@V!v}xjK9xz^ITC(r9j8g^0BlLEXs57A?udCB!h&3g$vdgiz z>l00@IdTSp`0}I!h3@n2QclKr}(5rhSDKwt)5a=1hAFr!3 zknvXI>qBe}Rxp>yueyp27eu*qT|)Qth@~y5eYV=+SD;rxjhLz#2HNs{)SRXRIP*Gx ztxumG2fg_bC=+b%gr>-En zN^7`1PRYLX68DuBj~=h|=*ddYp2@k66c7qgD8X>srhxnzC72({F*OxFW%LnoMDWaX z1nt1gzAJMo$K{}{X~_lGk)Mr&QaL5 zxQK|d0et#Ql|8|_Jjo>)Mv$S-Y}L~+Sa#Oz#t@k>jfMtO#N+hKxC_sLTY$hDRSc4AUZg-bNT@&hQBm z?%k4&8c5i-3XgJV0G^Ar)HdL*GW3^?6U=(4kz1m0YS?y}1*2N@`q@Kr$H@)fK8LY- zbV+h{4;=5f0-|>GQOb@_&sZiIz>$83b^XSZ?(0HLLGNO?gCRSG(U>D=%c-)rE-S>9=f zc6j&>DP*lT1B$BxP?`1)X{+r|05lfF=P#1BviFcD-!rB2aRQuKQQ7?gb=No7%KI)H zyz_4SynwaP`C_SBe!D8+RE5{|CdTQZ=(VglI*(h;zF%^8?BJbjGZEkD4S4s0(yV!~ zVrb5wI}%!F#UMLFhejs4F72Re(&kWLNbCA^5Hr~?&%;-l@Y2}#p`2F9Ma%>z4Gl#Z zf!x%UHMR-)#g^3RGEy^h{5lB>m}mqLym>SHbh((#(u)D_M%ubY(^~#EaUsYMvFMGk zo4A)z2R1l)GiK)Prx1-xmdu6<3@gIf5HvW@Xheiv!G(d{zYK@S;L>jk`N1x}e6)v$ zZJ$!^eOi4L+;F%~HCTnysQ1~j1v@MH)D7gq48}lgXzH{w7~+}Xq+VXY6wZtD13AC= zL-s(4MyH;M@m!X51Zo{@$I^B#(zhOA@=D#2uxEaa$m*MmBl45Z8J>|8?QrS`f35v> zhh&Wik>k%9Xju(UOx8K)3u{AwA00V8%TncusyYh17|p_{g|63YDx^$`)IG8}jP%dd z+v3>M=@HJzslrR{6i0__*|_d=*5+1{V&fxAlBy-GfTFqU0!UGED7aTwD{ef6!@0Jq3ILiC27U!Tr1ZvARkopMXy;* zSF$o&e1@iOy?;$smfW#+moARL?|K)zt4ai ztgVp-Rd?qznp8gp9>4Bn1QTjMjeR;{-`I*RJ9pRm_C~rX+(>fbVF8~Ksbx~`h96PZ1Gwd*!lIV4CtVX=i z_w9u(RI?kg`!X;zrUDSLO?zg%v_f%$V~obJT+IhxqGW4pGK%N*Ah>8i&DA+dc;}fL z^GG_5QIU59B2H+Pu(z@(Kpv=s=#$K(0hW|Sp9f*#;^-0i)dT&Jm9R=n3geKSNmz>PWK<3653!XZ z1L(YYy##m@pj($aQ(S#dr8$w&n870G#1|zAs}u~OK3U-UifJ@R6IQ^8iS0r&4spI9 z*svV+_{5p*s6E`fPwgb!_31O4NUE$EFtFDvrmqJ%-r+Z)0X>m}VU(Eh=)};FNyP$v zgDiR_(6(MII+u>q>Hbk?y!z^)JCWxSfVfS(iz%uzvsp{SNsBJN_R66zn|=zC8}tsi{!l%5_Vk8O4G&-}4h={JAxLEkI63-JEWbJ^)DU${>{^p*Sc z&%gG79z0sWW?1P9fi({o>EQPLGbx_V0ZC;rV602w$m6CU0TXJkkDc zn(5EItd~3+WCiC%$2Km)!bpZ|g{UN+R4T*gB+K}GuWC7+7f#(vW^GS#9 z@_U2dy`kaEYMv?IOxm9pqVB6KydD48fJRny4cqc9j?OsaLfn{A13(WCv3nuK476Tp z&Vu`LKR;1a$dAoYU|Jok9|R!@NbZlc-no*MWOVW4?IdwC8#FQi!|9ya_b9g+7%W=R z8xm@Vb_(Edi9%=jyW{0|c&j_;oS#ijiA~d%MQDF82x}2vFlni zv-V4k|5ne+2{RiHh-0MRHMr=ZK_i_P#aZXa+l+98)7h^dK9_ymhnbM_o~r3F<$p2?0uy? zoBVfTi=MAT8o~8t@NJ$z_p+J;#~z)RkgvuE4bFg7#Qc4w(dxT1+doZ{9Sn{>abt%- zwPy?PEO8tV<;&*D?lld5Uk-`GgYuKZ5&M(LUB}f1@3`633ZVz zFMgR`e(Uocx9tF)1^6uqY)tGCLyT4%%p5=2PVzMv#bwa-fY-ga5}`V8?OZS!g$i3S z74*6FDv3j*RZ5KL^7bOFRBOIxJ^$;{UI*u)pc#r=0kGw)}y?%3acvgD* z=q!H!z__P`J*q>|KKlwncjH) za8Z5?{0(ze@LeXqeI(#%eIdV=8qR*{Prpg8zj`Q*{L-I(i~c)*@{J~9kgn}@mU1I{ zKINM7c)q67&(1=)HBaIh`+M0IasObqPC4=WqLj2t`SxdEs}#T|KTXdh(A(@GPE?;= z0wI3x>Ixn*UXpm{JEeUWw$TO>EXXIGV;P?0@o!v6ILDRS#G`%I!T{I&RzF ze?Ab?X^lVW0)9P}E-WJ#RFRaZ^m045{|DowTm!=G_fu%IHjyGY;OzrFmRDY(yZOT3G;#m5`ft zz(vl@NK+#-HG&@~)SVPb*p$$Ec!}1nYC%uHb*Ky{Fmu8%Qy}ih`!n%n#K05+3eDRv zpnH$ov-H3tg5(B$$2>%lxtCc=)K()wi(Q%EMu#3o;)nitM6lC~wV&Nj01E=|3M4rE zC{OpKh#0Zq#p&Aj4|=4GLBTZ`SBp*tF@5MJ$i4})RTBd>5@sIf@U&j&XjfS81MqAVg3DP+z`wPKtVybAbCY;(|WKhcBm&7&uHyxSR)m#ZDJ>{bIQH`!)jwu%w$U;;i>B zD$&Jh>!;S*OjhfsySYT51WD}VXLqy(6tLZ2Yq(ZFcCouAHQ(aPr|rrOoq$tZ3FlJ2 zIK{6)(D?n?Z96)YzW?p7QQISMbN_}Y^Z-*H#3V(w{SGExByj5yewPPjISD-XSm&C2 z;mj3F5`z*nDBox{=;p81NtC8MlJc<`fbjEdlBOg0=ztuZ$D7NRt&XFF1dO;8v&!aJ zzU6CC#xK5gk3RS24ZZ!|6Z)NFbgz-WEusDKAAXr0KD?#h`^Lka{f+fmiww3sk*%pu zAKq5rs0`|z=MjttzAy(_A2nn5AxWwxG6UWHwU--p0j{Sewm-2f0 zwZHpzkCZ-nI$@lhlr2_96@Y45kJDGqVem8^p~sO%zOI(mwwA;#)M3vy;CUS*BaC@Y zBniFe+PSVuN{q^W#VJ7c8<=Dw&@(ijMLpGSPE^t90_WZp_;M`hSo-2N` zA|Kl*fAgUC`(r-Ckk@Nl-i33gx@((2T`+rx)q<^+HW%V3KiS^-A(!sDiET&pNo{YZ z+x4vcccb6jK@hJE1k6AHesbe=9n?9&zdjq-(s(vt?X#I@U~KY$v2YZ2v6jY}>>-P} z4AjZDJm_c6><*SOVU#uGd9V7v4CNe4qyBXxSGdqn-=#~?WjGEmF{ow?zZr$HG3YLp zy_+3YvNp6%>`OZ7Ta|&-MtVoq#rP(iO*Lloj0>Y~L@2oqj;wXy%4LiYuc$7B3TvWc zr8d3w#+Hi-JAA02bMF~P9Ync56nhTO5|ZvLFpLk z1c7S{FE~WyC>xAP1IY;TA{7r@CWpivI_nJ%EW|MhVq<52uY15VO4*7WghN~9ziXl6 zhTxXP1@zv%mvSE`ah#0nw2R3s2JOh!>ClUyYl_pJbaI#}_&wJ^IF5W$X_}ljTqnww zS7^WJ$%OUnrB_~Rdk*iu=P?`erH!%+P3vEC^uBnE7`A|NN6UT z-=pum^SDPHu`2NOH>vH3Y@KaU$hJrF_7*1kAju#rj-PWlx-_*pn4dgG1^@VuyxjMZ zcE|V+AJB)NJS#@lt4BD0{!hF{UpP9@E&cvCAJQLu^I@O+aHv{j_Gf?M75afM-s`Ig zzW4nn^iO~H)4tcUMT&p&$6leII6B%dAMyF8e)f&t#y7wFxG(qp+#C1kjaQG(^n-_V zYn^`cwFCXhpL(t1{>jso{_xw6=y$*VFkpY{7+wA8AA6O)_D7HU-qTipn~(YSJI8ka z`KQoJXVQTnml}>c`DVN-r>dgM3Y=iad3`u$UYX?NlUWakXT#4sf^kv0GtXZ%Hcr}8 z<8gdSFEWkznolU0K0ebl54!#`ZF)i4!5ee8Y;}`idu4&t_cD z(KCth&rM6COkavb-nPjn>N$&IuDEd&U>l|pdCgfr_aW2$VY*tUq<3K0O#m56R}bpz0%6P(Kp6epAh zIv6(E*QNGPaK9E&S&9m%>CYEjVrPtDcgJzsexx*zTlKwW*Q90C(-pE1kkzLy|jg|aF($Hw){q}>D zY#o3xR?x!ewJy2RAP$1MT`cmrgs$XZPQ!t>Lzz0fM`xwoU#g92v{8(P&dkeFhXdz2 zw*8>tATuD_6~D`?tx%8!2N_%jRns_8adPY(%VN2mJm;#r>8F_<&Q6$2>rT<68Rp6p zZg)r${n%GuIy!kb^sVncqK}UevvsXlxjpj7H~;AI^q$AIy!Fl3Zs?nDKib7pgQxAI z{P@$`4Kin%=L&S6O>G(JU-~njqrdoP-s%o*i~co7tT}f7;eY;J`r3CM_k2J41256v z__w}9KYGMP+o#x0l>OB||9Se2-};#T^Z&}7iJP_Kx2<5<@( z939AC`@8S-sP`}a>}&KhM+dXf@R$GWTlDZ4ar}S%qYt_R`73|!^G65#DShLJ=i8&h z`NPLH|HuFCSLt&{C-Ku`zEM#bVXMKP1n@Rdll^$!QaUCdwLvgB6N&m8=KGtW5{(LvVo3oe(n|Z0dpNo8 zt!(#S;sD}%DD{%fH4eH;Vc`w@F&?(Pi>_2rH^w1N60mIe=D?YMsVF2)x#Uo*H-}+Ow2gnaniygw{aIGC2*mKLtc>~ zIP_y*&T4x%+x%Kbi_s_zfs|*z$JM8e5RLxL_hoh<{2CS4ZweHZrKYxQHwF>k9|@Rn zn0pC9;vx-WokYP#NdrI3UZ2hMoT=5^qJh^sk23o%Fdz-NoAc8mVqg5+4Ly8(jFNr* z(_v{Phqrd(G$7tZI^pAe?WBRqf z^Dce(@!FTL{?GrDZ__*P=iQ*qK|I*L-WHYpo4@+yj+g)V|ME_cCbnmP@lU^XbRxfS zj6yy-w(+4(h#l0y{onkpx9Qt&Kj~4>|H;4iRrM)oIJ`BQUage_hSb!>%)_ytqCb)2>ZCd=adWX-=@a5S32n->m}S z@T^?kN}=VIu$)reC#t#=txpw#w)QZ4XZ{KX)y|%;=em|IMjzt(1?l$UD?LZmx#}?O zqw~zc-Q?Hv9J=K$dMHUpG#u7pkg7qw<{>R4;R9*(NsUK+vW6iSvOQ`CyEcFX>>IE+ zbFU6ljXp{l81j%4HRfV3C+UK-JUoJmGvZ4ibq`cK;KQSbHe1mhm?eyHkJv4C5RMwF z?(~^q3q*)|tksAjpfN}gV`7T?%+%pvGdevoRF%CSkfU41Dn3SZvpWhwNB?g9wak7f zNsl&Lztt&_jKcKK+@aa4WfvH`ls%j;H^>)Qa>_9Q;R-M|Jo_54#UmmvJx+J&bXx&DnaqYUe)8Jxd2i*7^f=^t;WXCFr8y8Y%U*~1- zWk+oEl-$vQ_-XKiPsjLaz9C~ovDR`ink&7mpXi7OE`Zj~ldcbJlBU1$6UHJ6M@EM{ z=E@~s@vtaxtM<+BDeWjZI=ahBg}%`rrzQDxl^E?g>(I~hkwaC}az5P<9 ztw}U5)tFH6LOE+V96g^O`GNaK=kY+_`~Fk<=69bQBU`ndOYWL%%QTy_`^l%zDqxe; z>U-%WkAT-dBD&gPz9cmi{JCFvgWi4r3H|y%`2Nv(yzT8Yr|ZA||9spJ;rYR@yhLxk zaYO&|PrXjR@!x(zzxlfl`jXX0kJqEq`4RmWN5`=_zOAmdr}O{#_rBL7gbnxYwAtVI ztxt}5g}(ZwmpbjN<+HH;*jHbsuYU0!{j=YDpv#4iyxHLUd;jqJ^u70=(a-(lt8^du z;2XyX@VDN6+-q(T(pIM7zD0mbn;S%)hvkwqjt=qAK07TT11EQbk_VUsx(@%aC2J;*vU!xliCLaSTAg%&7(}f~OlltO2RhkU1&d?|WZe?4Py{GwJ>96S?sTD)M5(cQDws3Mv1Y}nGQ97a~4 z1&|T@vdpCPs9q`x7fgare{OHZBZ6*(q*EHkr;krw2fG8h#%1(c51BDXX1ANOYh2|g z+xj6fJ)$=Z7J7K28@C+B^-3ABENl`^s>29l8+#w~!2tFx>5Yflv6HgvRo2D(&=*iuQOuRGu?2dz%>EXvNp@I zc)Ml@<3{1Fv>Oi_1=sMr6gO(9HXsfWB zmyvmyRvm)adc{)ts`KXK7WjGzW>qF&<$-*Cm&}c_!h<< zrqjN{9h2AjQ$O}9{o~*Ih(39sK=vX3C`Z5djR*A0f95UvV?Xp#j}o?fJiqqshx8OW z)0VCNr+@n$(s7yk-o&@xd)k-$e)Y>Q(T{%h{_*c+diCW)k0kOH@O}9U_xkeM-#A7s zSJ(sJmf8N!*B{VN|M)9M$2Cuv{rVq0%3J#qV-Gjj0uRrJDz|kAZ9%+H zPGWURz$&3%ku~BSLMK~0V4o|tsq~Y99TPaSakhF^=Z|yJwY;O;4ka6`R%$~bnlMfj zHB+>W3xROR(0X;;DK!&a;4HOT;jtC(N^i9>N(9S z^E8x!Zh?w`zMZP8*f<1q&86IGU+^G^>M*9?ldar1Di$-?ba|XRXx;+ntp5lR!9X3I z%w>I^F9-D11V+eD3w12j**Pb^UP|o|NkIHtPl>k!xAqqeneT5ah6a zyU-$LLlLk=TX-#^E`y>$MWBo>-dXYvF_cf`CgEVPbtWQabUN|yL!ff48V1uqmM=?n z%xF}`d&fm_IUYGRV>tAt%9!J{(XwO@jQ@bkjr7ijxaW|wY9p*y0ab025aEEAqNWaQ z+s7v8JR;y!1x|d4t~oAA-(i_-^e>+*>}Gt@+@pd8Tz5B>9r%%^@n9((SP%ClDg8sY^I^?0x zh&0a)1QYKR!e4R*ewma#)8j#hpTmzlZ>vR^=}cR)gBPt}ZZpUL1=AKPnUpyP%ly;T zdl~8{1+gDlhrs6r2syzbWhg)~k^Q2(X;h-J^L=P*_Biacl5Gc?@XojO)D?R4LMP~U zS#mR&(A^ZsARxRWb9bs9ZIa%W*+@EAT4Q?nAWp7`Ph=n8-z;`$hZZo$F*?uW&R$lK zhTg>n=Yx^qz2OT1vN!RNWQfM&xmBOVRGV{xput`QB%{WUN z!j}@Db8H4Cr^Bj-qq~k)#`ic9E|)VH4pt`-;pOWTG~sN&;qW-M-R?AG?6U_hNCjd^ zcUb$uYOJbJxCZPfFm6lgUO}N^ya(pYiI39RX6%QRCH8bBD|`+bHMt!ePz zE=uQ&z#6ZtGM$lf7`v3cX8MgLJ6tro0WAi8V_ zw@IDgYvbjN=;!2w#TDXTqNH0odeZMl?2m2FXqPd-fwM~gEug53AiSXLyOU*kV#Td5 zJrx)&CFmUGL+7ZnT2@^?(YJis(&O8}Lk#;pQfGDrvv3hOKugH?RgLG-)s>iD83JYz~5fuj;g9CtZpKW zJTl_ZYFdcWWYQ~9^!gTxmX_`mtbw<(7JNv440wP<^8soU6PS97vUeJBCn37;S8O zP`~zVgqeGE^8F8<9^oB`z(`lHO}tYj>WD8ZmXTCrj#IopOEMUISnwj_wG4QB8MZHl zkWyL6fR&wOfHBmD74CpIlkschUC#X81ND-|%0xWkg2y)HL_<;PPH9R?PMS#3zcVgO z__h(pS?BKntJIp14gC34wT@jH-%TnUd$awV(AQhjk+s%uaL`%d(`j#CG26B$IqBeyZ{yDEch?F}Lh9rRs{6og* zBPC#(VTD>H{v;HtMJSBk{)ZjaC8c6Uf*ZqJ;1oWXvnM*GDn#S5#BfkIo%GHzMa>?S zMLujGSVskqk&)nwY+m%A=;nyEP+KJma|*#x3kmc)bgtxv$LLIN}hXWeHti0yzO z->;X;mh*}e(uio#hY6SDj+l(-7C6p0P?fyIfD^6)3iQJ|Jf&mEg=NR^=eTcI7N?QR z55-|vsHI};DD`sU1MV|w?_znoVA<4d`6=cw`!QdzAOmt3h3s0`uhEI-ToGl}y7W^V_VO z&pitPCN946#rsF+@rJ(fM~`~M(B%eMsqORo%I9zB>)(CcPhvfnK7M#h-+li{fqgF_ zgolN%!_jl3*3bXucRrz?_>q_TQd3Xu%8Xz9mtLpGPxRW1ciz*8?9cwhtMt|z2ZLGY zkN?Ok^w&f7th7PCM1p351t?+jOerS=z|9 zEm{YJy*gmjrf>-zaRx|WbZ9DER%QV)3lVF$P^iQ z^Jq3E%V(r5z#IU(?nPBhFpkyNGZJUE`N*ShB*)oN&fTy%1H^RrVg?aW?$NT1XMaD_f5?II`3Z)IJ3)c5Ht{ z3=K^^ree{I-ur$%1yim$bA!>~Hb*Aayq1?+jA~FnrG_nv)t6CHY?SK&wTS>-Qsm~U z_oZJ6UYLnd+BsV3(EEx19wBnzd^w&w;l4M_1H0O)TBAMC(xQHL`m1n_R_6M0>X9So zEGA!0j8Q^L9`Qq%0Zj-=d2xb z`jq~*M{VH67LjX9r;#7KL$R)eQ98Xy9t|4{9~;@&mkTZg`wR!VJ2o5bj|jgtSveS- zx(C@QD4+n6XLMkcZgDfz7fe2+Fgh$E%c)14t95lif9H{VcT!WmZ=4WNGJX(}!;&+C zTX^!oAal|LbPuQFvp9Wi@Q76n?AHjXEc=#MU#+00yeg?uH!6Rx9!VCH@1|pV^|pU@ zu_f3-lq(umI|wPs?|4*s5-O)Nd$gT_MZ!UBhj{gkzj_#%<3s>AloM_`BWRKJMX#q} z*K4a-q+X09c5RO7sIKdsC8iM?Fj4FovkyQhBm260jHb;gPBqiySy#zB`yW&La@G&> z5ORf+7(_j))~>Di+IJrH!(R3bm@j(8 zoW$EsYD+=?y#EFVjEy?N9sO&!79r*N#rw zEA)T(d+%C*nf~wp)%WSI|C?W+|KP9w0R7I_9(3LNXMf?%WB#Y~|Ndv6^y@gUZ-`CtD6ednDgy}qw~ zyY44_=l#e1V4wftzw-n1@BfuA_x+|V3i|U$SXAn$V#-2(EkmoQ z%_FYGV$-mF2ufe#g#(?;JL^$L6FPQFjifN6z(x)~+(SSyX|Y6Hf3~DB>(Vr~esf9^ zS3xe(IXANGzkZUbtsV9~Nqo>5)v$$_V=3#ZM~J3D#CAY!E_^da6|<95I109U1zh^- zPCq%A?)E=PJL!*zNDkK;#VQ9Gb>s>-=!Ds+|i|_0_ zo3M+8&Lg^SG~|GbDIF8-moPfmUb}H~;ECe5&twT&U6lAy*mOzra!B3OohF7ZOSrkF z6F8QYhn$e44xokd+8t7vUUIlPQ@vB{`sXSXZEj=v|h#RFUUzAdrYl&H)#5WG za5qWeNtsnQPrRw+ zX{z4xfBBC;q_>X|)xYvfU!Xt#ue{k|Zcg3b`hULHm#en)AN{Sj>2Ln(m*~&_{F~i@ zZr5kD`ybn~MtOnEv?o|!@blR)c zzVu+)x<=(~pVDH3cs~GzsGjOXgJ;}3w+=$gW%5`**N7l`&>@tt!vPaO!4iurjA5NF#ah!ImhSy?r zUxR2GK@;*}!TX&CC+O60dOA{a&!*&(IyCYnEMm%2E+d~sKM#t(1tt%Cgw$5pwm_N@ zyjn!YaY1$+gH0*~d)drJr|E&M&E`q!npAffB0@(Qg;?E_m1x2_S{=g!+tO7yT!lTt zYNTE5x*1S-1vjg}q(T+YSmsK8f~(O89Bq{?$>@?$I$!ax-IwSm)Kb#arKIQLgpHkF z81%I{dIEA9xVE+n{3NMsQJ#Rmh(NUfgJ)b!3O@Fh_{Kh5Xr0D^(eXX0V_PX!!Kqj2dr^(Y8l4KilkNvMQBis= zl&4+8ou0V#RIfBKeFLYgDtsJm>M6t&#!|1(uOFe6{GQ0(O@n{!dqJ7*zw%}J>0kO^ zdG`}%GG(8VHVzz7nG|^N@dxz%cfU<%Q)LTKYI*`|i(Fljpcn!ayx2}#Z5P#l>*!#$ z=v>GGU6&eu-Z(l&?EszzTf6tLozmJ;i;(@#{=;t;pxU7|?NFNb?q~n_tMpsH{~%y` zcyxx^^Y=e^MxS*W4dr%qN$W>*Y}@|BXD}gwB)Na@nC}>|ZTk~H{CEpztEcUaY)f%J zdGKua?#z?0Q5Ek-_Xb<5>ywAKMc#Jxz;hUhCs^>Jg5!MRof=N_Xa4=B<9pee(<~Ga~>do&a$fxP-Z7s8Y_A^d~r;WmNUfX=q}m z=TBkdY`qiqI#tm~TH4J%!423RiRb6x%*)bzoT0gpJg=~L@n(7)?$H}x`3Zd{=OCNl zig532&HwC^|CS#7{{J*>RItb5tK)i@Ox9Ca8T)FMgh20I;_P)A?|MpRzf#Ty9r9EhZ_&tR=!n&DV0ucRPYJ1( zkz6|)OH}oMA9X@kvL)6`DZ^IYqo*M=l+L1EncLeukWHH0x+3&AXigHu>J0%J5DX6D z?UU(5?=0)&iT8(6>*)LB>q|(pYn;J&ayE_Q8BM(=W zZdx!q^^B}2L&5R+rXs`xZz7KZli~R8JjCbn&2xsC!sn`Sy2?Py8gYCs=W%R~w&=sj z!#k%FeZ36RGa~16$B~bNF9;*MFm1YH4-4*QJUQdzD;qAlh0dut&a$PDf6Rax1dGvU zq3~-W(BY

      )Gd>|i2-nYh-(SLM0my#PGOpE(MAiuE)}+hl78?2e|};%Uo)d^0{S$< z|J|+ner2A#%JH<@fto9A(Z0TqHk|r1K+tOOX2|(Wkg4aSvndw}yRC7m7Wp$loRZq>{FVL@d?yDJ-L)aW%)! zOBiP%lMR6{?g6m4p_!_u8k^lWkM{!8tT8??&|c^`g`g)QxJqlH2)H_b_zD}3X5Q<@ zv0XH|7OZr7piMFsX*B8DRNpwIpau*_3~_PYaZ&lJBouDca6-M_Td;k$% z76i$4D8opB`XG%|Ulh(9b4IyVnx0jOpe){$G$AZaMkysaJ2zMyyYDasvCXvHEa+x* zrMI;f6?DBsOiw=jbI~$Viqx@NUf64A<-jmB}Bw#=F@;_SVAKcLt3o|A^AE z4CsFR7xYpdW=;Pub(pmV4@x|?FhaykDbQkHmxPemmA-DG%`C0wn#}84#nB47lN*^!^Iel_sDeicJ{BMk4C(=tGz01MTWwljxcLYovi%ty`9uSG;|V|q z!?6>;Eil+LwJN+k8b>c`p^rU3z&>>mP=3r=wt5K$uOhj2BX_sA#^~#(4p(cpdtrE9gXe|AnZ>PYDn$={b7^Z7NZ<57Ky zH};t;sIhX=717tvB4-MNbaoYJhovRjKJ(mCiFbxpUjzF&NHg=)$*>`3uvHsuAh;6k zdCmPYD{<3acVL|&E^Q4Wrf_z%jfp!apQu@Jb<^mF0x^MrD`LJ?Cs06GWy>^ z@tz1hG{=vCq`dP**(t^Gr*k7tDLG6IL+ty_XtmyyXidjYY%V9~!*W@BwU?9d_)zj$ zPgtVMGpgZ_^~IKBOuJ%80>x7R`stR$VP#KhNgN(X z_(VL5$r4oxLyiz+zGqg!5Cn%VX$nK8G!L+>IU^WP!9_UHF&Be<+f`l|4gaU!rup_H$jz0VU^j1p<@H z0~Cm|2#{^mKvijQCJn@$Sz$DUM|5Wt#rIvvyp;3;4c@{T0@Fh={PfJC=Z-N>*rBb& z*{AJsgiTYN6pF8H-2UOZKQRR5!L;Yhw4X0l1NK(LHW??Uy)SL+@-yYUbPc2hz1G}5GBUO+fiLdY@r(`xwq>fjd^PPyPpBuD{>klah^!{F1*gD;deUsb z25Ve5K2+0-r>kZ=w>6*;Ys`huLZ4_dIN_Ue@XP>E z3xaPC0-oP~bG483qr*Tv6v)VMaML1>r8vRRX?+@YRw1q-{1pT9_08v?*=C5cas{Al zx%c4PT7no)5U;}s9)?l&gJquDNlHO(CnkOc-~E_fzDrRUYw9mf;0}RI<(wuJRwqUq z6(HWVf<^2<&wfKHG5z4?v9M$F7;AMHS+=1xf9|3c^O#)XHj9C}fZ~y}cRPhKEN=Rp z;Rc>}+}CR0c$xcS%krWOZPW>e>x}8oF86aVgav2v{HEOXB+|lfFdH;y%BP^0fz)CU z{sBh?{jxyhSB1Pd?W5}A`;RR>MzV=pWB8v|;V`Gpv#B)Y*AaSibSxT~i!f#Gk%Ij( zS5W_|9r~IcB(M!4fHm5A{1GF$S;4K$bN=M|J-WGpO~6wGQ%h5tqks_3D1($rXxrSqRq7^lndmhvBA(Qgp~ z1M|Su1)_)|N~SR{jtsJt$%=?Bt9hjynB$oJGSkI8h+Mogv(eaPx0@;gjr2+(6|r}y zd|Ls!*Z>Dkb(8SV)`Zs$R_d+* zw#SBwk9+@O!+puPVx2wHJ$YJ{f8i4EnEz6OCV%wcG6}5=eqmK395C4WhkiwF;o7@; zwn&Fb+r$PAHn+Ajj`ye$V;aoK;i(*$fT&m?5-aGfV6YI|%Lh_|;K`=+bcejZhDx>g z*L6DeKi_Mu-$!VTU&eV}IgYTj+7_QpTnK&&OzP>lheP)`3VNWZQpqoDyTzYC$N7-@ zmSpeltM=|R0s8?s=ANKNO)p4(x7fnAbq9h_TzIi(r%vDLEv_xyj+ak&RUNj>)OzW(IXb3sd`K}6BJ?o>v*!2% zntr7tt2Po)vwaV$&c%ew$`#^&(O1h$P6Du(j{hdZ9L_^y7d7VC@`Q0&HQVhh3;Lnr zQju)$B64`fq{8tc3FHn%_<7nK*ao~0>6#>~ACn@5Hep;U#$Msi6WWr3t;a5A`c#WMN%pqaxejJ1L2G$U7VsKr%4BZV3fb=B z^;pLeC|ZDzNdbqnm`jkPS9UMstYp!qtHUF9>$E$jQT|MKfx0$$!4WpQ3%hsQBt25q zxKU0lN=L(`c@Htu+nflwZ3m1}q^7nSmC6~5t9>G{B?TMgbF?`QYD8oM7zHzV8!xn+9nea~dCL*EEl-E{w zyP2%qtUax5LR*%$x5xdUvu%=_CX>^;58hYM@J%Whvz=h)>wXbsU;qFL@IjtqY9jys z%iD@aa<5%|m;oqgV90Oiz233e6~zMpNpPq&4w<=kkDy#_%gj($ z7_GB50qWU?hS5zRPQo6`HT{juQX%+40h+m-$RZ;HlnBI-aw9YKfUivH z;rWPk|2^t##X;oRN!v7)DL5xoP#;_thC7OTuD$E-Q!O z6uBe(3wv-2e!VIo>QWiroDduD-brznMcxCtanbDG-GV8|8d=#!f6OK?iljvZNnMHotM!g@FlByZHNdyj7$?(C z@d$#c{!6C67ZmP@*laDfKToGM87&)74efgC4fx4{U}}v8P)Ni z)b*%5+P^cAPF%G9`VdGB!Hzk`U`u9dY z)QGdS+^Z-L;sl|*;aO}9JbxppLxhNZthh?TRbC{(r9J;GAZa={$6Aojt+%G;zvf1D z)tHv-P!jBXi@1ff2K~9EI}h8I-+%xD<2qcGDE$yx*kRmq1`1ir%D>4b{Vgff@2|1~ zRy`sp&;|$@A2!X+b>ask#)?9>@Bw2``BySyaf$nRd4dthD4S+M?PnJD#^EDMr~8JP zQM=%{RDz>Wjyd(SV`w$uN(MC&RSsiZC5!rkv#vbg%>e>p4McI}9@ zJ1()4CNbLb`l*z$sK?B)}eTtRE z&Dh7*2je=i?+yIr((-!#9?p!l*U+~~NH+d9g0U7O=)N|z7>_LV3%m|KC2pj@bl2r1Is%~i}|^{9BH8sd9pF13`SkY7Bem4obQJvK72rm7jXs0r^(v2+>P`EHfc-R zyJnRdkcAe2w~sX##|9SXGXF?Nd6%4Kdb(;mj)Aeh{0p@u7CGMPXz1DdPmXXV>1Hde zU%t%Q@c@-8Liw@Qx2iK_EMFc(E%YUZ)$YDFIAvr-9s+ZsGCh&2!P0BJxUU)9=%QiV z0aBnV`cau@w->34)Idba0<%OYMQ>)IaCbTocaRNz`ci(h(G` zjz#yN(%(H2WfNySI>SjN9%)dNG3y_`LW%a5)*=YrqQj;N7fK0 z65KDvKrd}}^*3HU8!eIA`Axrg@4w$iU$G|`zSBg){3!px=68BA$Y&5p{pJWTFm3E; zfQkEIgB|o0+;^>s+0w_QMdY@J=(a`efR1Pb;mO2s~0hT7SvK(MAP52VW7FHTWvCh=mMEiFvl0e|3`NioJ0&{~e`z|n%u@#y8$?&rhoW5OS-YjiE`7Fz-aDs^H ztK}v+!x*?jtRo7~afHAeR}^`(cO4u9G8n5W3D)EX5ln&30zS{qRs1;s912v3{vm^Z zMB#C-2pO4!7(|o}Qf+C)@$F%=OOt&O)ZH0R6?Een3dNFNXy@J|PG;W=YZw3MYHXN=MPdsuVw zcnts?#$`XQicLsTa0bAxL*N-@{4$@^xH%LV<#&}V>Fr2b4EX_}@|OI>|0xS%?UNWA zeQfxtxjONg-AkNQCVxASlK&Q8R`sf3PK+fv_wk?bN-iJBm#v{)z(?lI@wIAat-gAN zzXoa(&i*rgo0yJjvTTGhh^gpi9Yu2SK#G3{_pFrhGo@8N}5SrR}YVsqJ9~$y)5BI>?|7QQfAJ4i&j{5Bc{fGiNldEfysIVc>@&GSgcTk>SJIP zyz1jEt^}ts2|WgHk>CAi2x82@u}-Vbl`Q}=ep)|LKEeS}axoF>oq3^qCkt-$ibJXX zjyQOd4qvr_;#IIbd4R7Q9%VAPZN(!SJYFVg8$aT|Xb(ZbAbD@`YOvLZ?bODdPSg1R zK8X3$e*0v*_Dytb0}8+B!IMS-pj!aCE^xj{E7RM5Eq=x5lGHJLIVqH?m(99#KtSJb zGVO>#oz~4gEaC#lUDzfbIDS)9{HhG{vg}7?FdMGzPO=Ddk`bxJ>?3lo z;zGcak?uhA3PloZAD79+HqI#^OpMdd0gLR}4B>(TfA}$jKafbUby6VaxcJe=@^{w9 zOYv_mC!fPjE}>NRez$f961gc&kL}8n@>>DuzWE4nFbNtu1}FThEF0ZOhCXeh9S;<5 z3c9;sjkLw#J(lXU*O;9v8jd!Y&uhsa zN1uyyvP!8zuttQ-Q=uz+7#va=G;lOq{6v<){7M_pAxV<;nge49F<}N z4P$NrU)ioe9EkpFgd3W}3t>qQ9y|R^?%{=|6IV5%NSod|xQ*I8!$@e6t%FF(|da342xfZW#fz_T@o zAj4aC6)eMg=5$e9^iVLu-XXks#~w!U$v2Z-&m*z!o=svb)_w)ml_F2t?MTbBqRe2~ z=^>l6%`7E1%le|1Cnpt-ZH+BHN~Db~U&!6BBBNR*a*I`?*Hwc_4^J?LrZb_6{pIRc z#bC-`Xy;XtvSZslc_Aj!r8PmwsD*8m(4anHH=Oy99+P+kU&Lxl%;1r22g=Jc1+bW2 z+6#E@?6}Z7n)f|!{Z|e15m$$%+2n69v9zbo2);yIn`G&5L--HkZAMvc3y#rygTGZS zRRq&r$F`8G?Ia8d{OwyO`4Lq*o)4cRTK#x(nt|0aBTV~mm8=UwiN2~No=J;BsCk>l z)mWe&^#F@K8T)$cZo~*5Ucqju%Ejx5RgOuydG@02m{@fJzvamET_F}YXx-xC$FlXwDZ9rx+eD);g~b;?f_9dlJeJe&=o1(NS&@q|?GOoB6rDTBz@@vF zzLUf}G?^ndDs--h>*iV1@>GrIcB~&iynh0|1$e!_&bZvrMQ zmt4JHg89!zQdNi8@R!DwjlF&g=+_(WsaI~rjSlNu4@BRVL)R<>J3Y{}^q7sE3Ba@v znVWfm9aCUBToWvBc5R(e2*>@Jn3(}R$*dHKbPgm$V%}-#=F)WJ8Y2d1hoVGmLajoV zcITMt9`bPA>jtPIf4{n_JQSU_N6D4f+d>wGyKY&1Gf>;(woH3qOR; zb4JQtZc3X3TwTc2%d0%?d-$5=LB{(NOMfjZ>Xu|(hvSyPPsLAGl;*;WZ4=6NENI;% zuudZ0Q86|z520W^)$e}G2@f!P8;k-Pt8|QGP+oaZWSDbAn4lB!!Ma68U0Ss{5vRPN zr?IIWy!RVq;8jp{YRG?w{T6qYuTQmQiJN(9m!BXg;s2m)lv37K;No+Os+B5ehUV%4 zxiObSuN-eDf8DTyFVR|L4Uo|4ZF1e~TsWTsmQY|VSZ$Lr|NU)Tlux71Woyu@&F=?F zY<_#0S}ncD89>K{A_O@~0aWo754ZJpEEE~7$7M58jlnfC2$lWdbYK`G5U>CMA+R)^ z%>fD{{9b*^-zMc^yJ*lGz105qQLQJGte@VpJw3$VoU8t0UORN0hz=AB$mCZeC&JgHgj zP1Q`fnjdM@pCOYOeB($fbb4@R_=6OYL7z#%noh9chj_LDM7d?_n<;EqrCiLV0|?(} zRVVcsMr`23k`A}_8P*DT<0!3#=zhN zp2QUUX;g}f#@VZFHYL+d;r5KySuo>I(5|n(dI6(^P{4>*rki5*nEv831+zJ9zT2q@P=Q$||$gnBqnrTJ=?$W=d$M zayL_xSMsIk%X=Qor~ zPWFvYoZtz`9Jo7+;n)VAd*(}4=4%w+fbflmc|qv{T%;(C(&Y{{v!{Z%Y7pCg%!|7x z_6ka&kC^kYhomu^*DR}FHzr~_+?)`3G8_UFxNvAIVtPk!ho^Qv=erj?%N%R1^oe@globDvzOk_K0Sc0R*>OeqFW({fIkksZRrym(Xm~ptS7}B5ZY&2$Xcja(Bk~ z(Pw%xflWhHJv?G7wJPXY29pIuIlxj_SzLN11H~mck%T>>_%0#ta0MC z%{6~T)7hrS{aau?w8Ack*)6G05jjv0u+ogs$1(Ygb39foj||D+<`` zbVSJCs{6;;0Rkbv-Z$$A#0D}NAkE@o(7y4{J6+`|GnKf{N&3@;_IgvT*dLf92=`Me zQwG^(l>g^TwBhALs4|+37znvf=$<9?SB z1j(b}lMbw4*e);PPZ+|u8&1((8M$mX$mf*EwtS=kQfAV1#pf?;_-$)HlipKwJlPhU z&_3VGc$&Nk&rD77zE9v^Cx*@tB{G$}Nk9L{q5hIjt2ZP!B(!n=yRa7w)OyB$K}j5^ zRNb(!zjfd~xbOe@z%$G{P%~1EvUx@sWoKu-rCX;Wr}YMNUw)~JUe3Y38Uh`Pi*FGQ zSdH*fiyp;x^XR~xYh%~H;Dz` z2EFU<9FO*{Hb^~1#J)*T!2(jsLbc(Arzz211vg}hkn@(1a{6-{a`r$~4z4Y)?qt|* z=XYy*G-!V;+M_)G?ioUAH*F5-Q<)!}YDS5Q!^`u&e-84h$Nr*l1M1@Sw%y_xNs)B` zNkF#0kK+)~ij!Z7L)-B9QaL*7Y`|_ba(x26AALvkO*sG}P32 zC3&k(do9Hse`8ptz2{EsUon7u(tAtRH`%lb7%+^{Me$DXzoE}(;V7cFDbddTP6&;u zTpKVh*aGI~w7cwcPR04!x;XZ$Aie}Eaw;5GtRoKjRJanlw!ONKdU{^$vza)XY>z=6%I&w zcIq#8_YX0HpOCt0E#TQ%lDncJ(br)YsWRH$9-?z$>t7C=!Lfzvdxpn~7eF?N`hDn_ z6}zlWb|@*xf##3IDVHySD-B$xLWyjj5G8JlO)OzmZV^oV)%*5~eLG-l+-c!?ZnrsQ zRHhui@E4&ig9>ZJR*Ige1V7KHbh*+Uo|#R(8vpRi&`F(E<2G)b7or5HH^)&MOKJ4) zM}M271u@AJyLVcL!yByW^-OwxgIlns+qiuEi0KL?5>vT8|3KdZHC=E6Hr8y3t7mFO zWr(fMpjx5~=t+|&YfP*CLto(iZ#CsfppER9L0)71b*s7Tll8&`O;Yr3#}adp001WM zL7Is*2rXpFU=shxCFjVos3Ly5_`wBOW+$#>_d$wH4tJKfBaTqF=9aoFhF`S^I8w}( zMb+9pKq@c4B_eurDCxh6Xz!>o4BgE@ z5`R&@PH(qtWTED{lzPA0^b+$}P zy8&CA;z&{F+tVK(I%Z>yjEcfWG`efDIHW88DS8Z2 z`j)A$Y^;t9ubwWN8w`D^&*{8su}&un#?pO!4FhsCo}R_ximmrn;bPIp2X#x?onr7V zG^`#KiN6aKsh3_;wbx5CF?aqSGe|^g>*W>pV+OfWO$pDH6VX8aYv7yI2d9+A`InX_ zieey2YOdJ~we1sDZiH?77wCu8G~ zn)Hix6>92-4$?pD;U)~vA<`eXYW}=PLh77Cq3Bp4q5mfr)K! z{^T1zihPM&0!##R%e;~;yq1#MA=|7}3u@sZy12-l)ffZ}+x10?aBdvS8{ACXKZ?bV zC{!=gmzt5nJVTj_Rn`Hh`lv9C0X})Da0jhlt^bK__rdQN0kGfjhSKm8 z0^i5PS=4B*-KKWIRZe66u4pakhCXgY7b1GXAjFAN7>~C`46mh0fQ1-`P5p3{2^c81SZBjMVuUU!C^5UW6?S>DzJppne3RaRp9fi z{&3HpJwMw0oF&Gk_pKDKyxIuY%FoOEHo-6y&9l28vei@~p}>g7f1)BbR^!BwFfzCv)%QRC1FlMmVwY_aS}sip>F$KLkvcHeaR{JUDa?((s@_C_TG%; zUkPHiIFE$bX9Hn5qH~~ulaZ3=`8~`f)M+G z_k**WN{VrpRfmqwjbO6?X{#7GlU8a!_o$9Xfmy+(3_1@}W&Gqd9D@DVM?Kt+9az0N z0JO3MHV|qBtHKdgL<}KY@t{aE=^|?sOsLsIbHCUeb|r|+v*2v5VRdXO-lTHyO~ode zh^`D6VHW~iEda@;?L^XGnqbZU3HPJ}U{VP1$!{wDAdV%8W78Bttfxepc<%kmQIx>dK8;o+x zpFifaIkmT;y{|G7No-~ev#5D!i(0nccPpk8ZEEisem!}KKt^u|W@IsdP2@I($Epl;xGy~_a z%oedw>jLf(N{V#FPL)GJNIzoN*Ga~JHm(=U+|n{LgD&Ef)2ascpbltAWRJ+MNyO2E zro7f@0nV9;+mqx=Q#KeuKavn$e3BKC=2_@U4@{A8&&(>-O*iRSd{rc&H&TfGyEzTB zmZFXbxSN=HsBy)=!Daww*3L9Nv`BK>hQKO|fBZg4DHxe0ux~Wag-2kuIeISHUwtGV zA5j+s1f%i!Kkf`vU<3VgEKu_**H~*c7sPx;&?TJOe8;0f*k(!NP7^3`>h1^ScjHNS zFQD`O>GbHhK#Xsx9sBg3ZD9Y;v%iicoQ@dp*&!29g!-dMH&toK@uX!*+XB(X6IHJQ zFcvHU3E98I%D5qpSUAX`SYB0a1h)@RocrRuM&Q+%xL~N(ca>U5$;ehW#65L?Ii3G^ zY~e@3#k%90%z;-raJOvc?coxK2C$q@aQ3KT&&Vs@%(~YkGMZ2=h3d7MAW(C?%d=R_ zFUG*0UqDk5x#VN2j4tlh@chEmYooGxu}6? zY*hh#Jm_xJtEc>AD{yW*0v8PT7MYR)XLM15ick|W zt`iJE)y%8!7T<+tp1EC1N6AfAL!MLBIyOgxd}!X zQC9$tmqapTSgX(FvH-l90~dkkPuEHALrDR0Q1EuW=1C$AEpxJ>kROt@j4XDn*)eD` z(!gAb^FO<=!hN$`YZd0f)-9v6&lQBp0?{!nModllK4_u$@rQcA0Vj5q16O&)JgCDP z9h+Ms0qp`Qs1|$Sja{Q^2Rn5N4QaypnP(qawaHtE#X_Fuz=+95zIHrn+o*LxyQ^DZ zq0d=4WeNt)6nhZNfo1^md#s^->0uBJJYe z$q`ICf04x+rSG=*Z>4p4$+HD5YS0xJ+}Yzv+R8Cj5_G4hYXF=5Hp(crybAvlSnplF zyDjzL6HLuTeRewDJq*-TyYt^n_o;KJa4LrSUG z={c=I6Ycpd=YhJ)eaQ3Yc+H)|-sm6<@14iRdw;_(<)~NV=C5?iDlwS%g!;w;BMD&6 zdB^)+nX`VxrZLkF7jQsvBB6Uiy$Plb>B)N*5I^wtfNa0vVSVYf-F>yzMzMDlmRDZ^2Cz$Ls750*GzyTq9- zie}jcl4kFe<-3_bSEr{GOp%=yD7kSgpzD!vH2q)!diqSJ5dlOfX$S|->W{*FQH8xe zA^DmD(E4RB5^8kfnhV+@uqZe_M~#kKi!3r%_2kg2Kw;PEOi3SQTjVKll}2cwqof=6 z79KqZlj&%HHd?<~D=7a*>< zk8~r0xhwv6@}Nc^*-~WVq;l_|Yr-s#DanL!Lcm$wiTgPGZsFVdm0Nqii%(@$*9n*_ zwt_t(D1*10#1^|koMCS6Do(r4&ZFjOUoDTqIhudaq+LzwfMU1hurS|{P8iLBewcas z&IF6o$-wQ-QD~YyrXNHnUDJ(C*QvLtYp_iS?G#I($VG3Om%;zrD59npy>VJVl-Jx& z4yu4NK%kWLPoO8g+5v*?!_YCCwl!N~j0OtxezMCA5&0_<+$F?Pr% z#WK0s_q!yx_I#c@mqXB2m-Kb1!i@UX)+HR0|J`Y48kWbJ3F~8MYHKug7vj zx3R|szbn@~1Om_7{D<_GXcLCjO4vU0Vf>--xR>gEK$d`|zRXpLp+lEs(!tl&56&=m z2x4CJ!VC0$q;1hxXZ92|^CW9mdpzZ14k^o7goRf`w)?DrAxJiONs@XcV?i~Qh64Qo zwDRGD&)@a^2%Bp0Pd+>adP?#|YS>`#d5w}z*7HOdu|A2|^#4pl26Kd|Y)xRYALGW|&|Hf`ive#g`ilCrb1q}=U^T(n=2%KU4fCP-t`L2=zo0Qi;L;vKP0 zC?zJujmS2$R%2)zL>u%6Yyy^S-wLm&jv<6qZ4K<-Y6j_XCf2 zkOusOv4$RdEU`T{(i*c#2qA<;NXI#{fu=?v=exp?NB4 zb!B`_uMH2fE}o>>_c>NRg${HR05WTN_8k5B3%rp~2*t!#_i_;;-Dhb3(>RamI}o!w ztDvR25^rwv|F<_2&^Ly^d*q826Cf%t9S2TcO^GTY^m%){GC><@&BNbETryaqE^fo*{bE$nk|Kee%ERf%WQU|9X&{#^T z**e4w#$#Tyquxn^Wvg3lRt)8N%7AU;BUR2F#GDdrMcH!TIXqND1%m3jiHu=Ao39B3V{8(SiNJ7q)n z$YQ$3-I|tinEe_GB-dp~g5(_qCAy~o*=If0=f`s-Zk3*aw>H$5cbfM|gvW51l~?+| z2jTbC;9$kxYcNmi+7+Mc)KGA6KA;MiK&F1pal*a9vpa`D#|&~^s^~NdeKs^sZILOg ziFYubI8OlcL;XE%?}~q@}+T>;GF%$9kvFiHxYbT4N3Je( zQFE9mR3z130;lwePIr4ggw?y*Hy~BYSqM?uy)dspK`5B$wtBeSKc%49FZ2^Wm^2x9 zFDgC*N$^fBp2R8uawZ8NLHGdaYEXM#m%$fiIaLX_41WTX#so1nWm34)th8|=JE+`R z6)TqdL=&n66s8fr$v{-)*L4jM4p>&og%XPXpW_l%xAu=s*Mj3)bdm#lo_{}gSPE=$ zLcL^Js4e#;1la!LBW5bJa=b{FYPs>ttj$n+xW?_!!Vsow%Op_d@;3$odq0!&(nawZ z!F}sI8|zkQ-0HK!f3m0}1A~L-`)!1|rr#a$G=W0%E;+Ap$A7DG3*ZGYTZZ}pOE3S^v4^)|gM;PJEOr4Li z12fd^m4I#-0lPK~*WX<%y#4t|2J!9wYeuvyUQ51!m zsaf2{x!1vh4W799Te{auWQ(H50t45(ofj{a2i#J5qS>zkg$&C7)r9HGu$eCFz0$d@L#;1&R+ z>e5VyeaAvaf#1dLXn(OIaUzYy<(~iCIdm8hx_mV<v0=SK`0pCclnW>qs&$K_}r6 zccJ)Q>9ap~Kj{yFpNYW5btb!s^H2I={@mEGl>_3x#^;WIx;k1Oz8}MRpCS1fH$Y1a znOYzq(!)jk`eLj(nJfG%zd?noai!_IQ8;Pi1RXYC9y-cGC<)v+ov4mQLV`b?fWMfM zH@W{q{f#NRoLIl8dm_#TyD0-0t9Q43a#*pgsYvX9i$i7h4)DOcIxYKQR;+6XtbBCw z4xR>T595CD>efIOjb3y~E6J+m&rM0R{Z=1WEw|cSe$l9RfC(KO7&B)zNY5ZXJ4EcQ zJDmH05OTV5oAdY@sRxNPCINm@WJHS}wsUY*5-4c})4uA>?zkZJ$bVh`(^8#$Js=X* z6>qe`(Ol!Nv&Q<9;Cg4jm5(w>S{kyO)O=`Wc%(>fE8dh2)f{(Xi(?7YGx7zZod(EJjQ&j1JjA0`YV$-QANEAm^ zk~MfLvf>2fn)ca4NYp&7fNot)CMhv@lJ~VdDK#EEwQPABp3cz2R9DB}TZnX4=A`$3 zjI~TpsV1ILW@RznHIdf)vIqKbgajEvbUS#Ou|L~Xa(=y7$)SNwl%-*M?ZzEY*sUm( zqI85Vi~N>hu1!5b0N`dYGn?JqZ>-Ktqkj@Ycaqe8{rnXNgK$IkO|%kzY2ZQ&k2$}( z{WIS93+*@d9;0JQtk+&Se4u~3h8d4d_R48=ZD zZh11%h@RztF&(zTOk2hx;E#>D0^W1G_czPnyU2rP%?b1S>4J~$Iu`}7tL2gK4Z{Lq zOKu6NdEz|Gj#UyFP>#)&n&_ETiMo1lDah)-RKhyr)HkGqlgQ8s6fx{* z{8d>Vs8ZmVtNaVk)t=Yvf!5>tUxOLW1}KF73jRsw!wZU*kcm}+jFuV{UOhmZ=GI5t znBFroAM);WT0z_VljI*i=Z_-QfC|cJ&OZ>YaYnu=D<|N+%bTSBr{XM<-*Q>^qE=kZ zZFIYxl}|C&BK&>?4^^HW({a2~c5%H1#k(+s(S_J};|zkFs!NCYIy*0M_9`7 zVV+TT&2sZ@q;THWz_-IVonqY%9p`F5Pf#L1_$^%2gZIopvXL4@HI*=N`gXvl+UMJ4 zS8Oi&s^qrR#)&}_hrjXDhtI31jLgd1?n zGo18MPGDH|g0T?!uwsq-Q_qhQi(zkXhf*uZbM7AU*U4jf)7Dn9Or;~C?d9D)tvxWf za?W+OOkAB)Sp|cbcyfU6ph4g<&HN+1YT-}r0!e;>Vdur8;jQ7TX)=Qq9IT!?eAy*? z#AvC2y{eiO*I8sBD{Hnl`CvegF)}Sh%QycPc1C^^Rd1@!omX)<-b4bHhz=FRg0=&j zQkBfrUv~8zWMv@sGqY;>{I{)mv`_QolyKEd`xrzx+pdS8qYTe1C5XB~}Y!Uxx zHxu6|EKSLdfT4G>+h$Vg<9Ps`>_Uu|k5*vknPh7t?lf6JZ%axiAA$WBt)LO2csq7Rt&rLin>JdgyjdP z%+8gJ;}HI`7@m2m`NGydaobJ-D?%oJuO_qoS&_>;7i4Ds0zI`~+NyQLV$lX41b$@V zvZ~^?T+vWRvW3g6$W9i24H&N1S`RPXZea|m0VddytFFm)1R@x;unuhMUkG;JxrWHj zm~R{P@_>4JzAg)YA#-&x+9B3{^lDTJqzI)GQ@i#zQ8mN{fb#h>B7cyO+QZC7*B|`n z7!A!11|Yjzu{b$gQz^?%`SW7d{CSQ$QFk+5b>ZMdWu|OtxNKED^CAzM=->^E_yyPeJBoBOF=C#951T zjq39p!1EVLMMF^f6vReiq1f1@y62WAGF?1QRg0&0&%017+YD}0gFZoTkKoS=*gl1k zPMCneui=3F2|#A52ObW^P|IDj)>rkPNGJ;>8N2(p1`xdsfiCquTFgt1Dw@M-DuczY zk{ProS6g>+lCIfy27x)*vPC>%k1_!W3Lek?7ryOfz?%|g+N#y=5hHU|Go457oibE% z5s~N`!GQL!%vfa3Yx(5eZ zmX^cT`(m$jaL)T8_1@J(7W4-TjxRwt@py?d!BT6r7!CY7IW2Aaveqr6w#h6Ewpv8I zGlN!U%_&3WJ)Rs1eYadEuh@H{D&==U?oHx{@nt|7RF*)th;q0ONjKowEhed<;+uH! zCuy!w;mn|LrtwK0L0(oZm%OHH%5bS+Q@8NJcz?pDD@B* z>+rKoPjk^)Zd0NKWa9I}+_q#}1dDqmV!?^3G$n>>WC1YVE6Va`zhC0}Wy$BCCj2D| zN^2JwA{E5e;WXNNfTDOCgvy&l!6(W|?q8+G6B?f@hVj-lCLDcOVAsrmybfk&2?+S>OHF=QG8{`7C5g5e;^`Yt@R^_$B!QfJ$`Ak5*E=!DpNc8 zO*#1l{D(Wk&Th$?Klv9-f2Qt8)4&aV{j{W3mMe#TGrw*+tKxFM^Pj-5jf7EJBf5ng z)$)sxwD~xt*qfQ{Xr1kO-<|V- zq2E8BNX>YNBCWMPUkPdGTYzufTZq+HPGhY_4)))2GGTNF=6|{Ie)YxBA>L`UX z0lK8vM!KDqz$SG7O(|_>H=u%e9MC6Y7=-j6Fnv1 zuwUy#h7ufK04ll`&leYRQ%{nJEam68cEDj>iI4EnE9MUvGqqXRH@wysH(XSCnRT6c zwpnGBa3b|e*j&cVZLxTNEL7#zcG9FgKC-t zL=}#x>9K1JkIeS;0s7V$7z03join!p!|ss#(wXSL>iD#sS|2XS7vX`u@5_zt`Gi3k z&*+W}6IPAP3alyl)&3vJ(T30DR2oMQmoVNTG#b@7-Oi?WN8l zk$x#04G2H>f{lKmTiLgO69A$7>-N)ZX0xhuwz*&wKeYo+7`&zC%X0X5_tX#`&zLz? zxCfOp9MvWdgH_0B`NtQ7|7p{NYFO`bHcpHFzHKIoH_wDbmR9=0@MtJ2HZbH&lzEB0 zfm*^J4XaOVk;Ahl#g3n3Y|itxBV_}(I+FRD3#eIU=Jb8yS0i*c)*S1Zy4)F@*1yW) zCZ}b1s^>V62?$%|@#F+cWuJ%$;>J^1lSBf_9$iatjY#@wKMgkKQN!~mrdA^Pr(K9~ zw(s6Nkj#RsrYtbcWW_twt+n@eyjHVE`}TxkJMAME@x{Qq{_CsB7CDLiw?s>?)_%F} zWe*(FQYkwY5CSqgD?fuvGJ6>8EL8lJLEPASgv+;dn<@#e%ckpY2Nq;Yg5o1f92@;5%`+ z^rA#xmp4npvyO8K@6aFa3BAi)XR&>Z$?otNl~oYq+2wZXO%OD;?QxLa43nTY|JO9# z$$}>m>t`!0q~`>$*4s^c?{du!YvAPnGmG3)N3|0cP(FSOhS^4^-ziZJ^lT z^(&_0>{9|Q@N4(|6SX)8fjM2zHz__nN(I!(O1gYk9}Tgi+AAHgai6hJMHIel8jwV_ z22e9E#lyl0ZwjQ`8C0tTJr$>hl#7!F!hR$bS)S)xy1*itNg(ppm^(g&eq8o`EF?rI zH%9N?RERsvM?c67w!>){XdzL_pH?(f(IJ9I>m-hzBAHgtBlg{HmWlSkOF(bq%$jD| zauO|57~%AJx*lT;Fe$eD!11O^ir2xLVhfA2{%=p+v;5dvyi3#CPC9Tg4mzM(=6zO- z*q7pj&eVx6mu>!y+j{fOi@}Opo_W_Cea;sN^Oyb!W*Jm`K;Ee}nu8ru3uk`n%?z1g zZh*J~2l~Ss!$Hw?TkB{;wsAXvr;j^lSCrAON~|?KP{+X0$|2idx*l_>sFr zofmN7%+UWR0u_~ibA*wMx{XgIXcchguq{>ChEE3N9tFJIj=_23?m`Ez^>DeBiP)h$b{!21s?Ly;WEY&uD@xGikG+(fsz9A&=^~ zJ$&RN;E<;FWWR&v_77EN_$KRHxxppKG_mSKXD)EBeM^A=00`?ro~LA#R80Txa&Um1 z9~P=b2Q!hB4e|ekU+8|#!kN2MYmRV<(d>f2=!rLHq^ybuqP7aplZES?Sbvc%%{2Ku z&!+2E27p#+F+if(^&s$5$&wN}VxbOp@Fy|@iIz8TfEdL73hRcKdUGXoA66C?l_*(5 z*9T)h+ac7@Vd#zp@_{)hJm(%I1U%h5QPWT!!p&&Q;Tik2^Az()RJ@oo%TR(ObscNW ziHQ$F@$-ZAp6E~eXyd8$GRRoZ4e#NM0As}AsWkuqP}dONSEpcv6-2Nz4USO@>O-_* zm)}N8`WsWA6mQoSaV6`Hw$=?C%QQIz(s-x5q2h}l&SGR&yr25yk3ue6Mb>2#LJ-7| zwY@Dt=%#>a5S&iEvZmAT86e`NYnMkhMW0VaQl(-l(kS+}Y-h-IMi1T?<^!k6LfvA& zd>uIOW1>flm)Zn9;dO7T`H_1Gz3>pakCcqoo2{>PCcf_0M8FW5Um@w(#a~{}ta^6U zFo(ZX4s3eF$;lo7OhfEar;;ZReV5qJZ$u=^vASK-QTNQ{{l8~N1H~@b{z-D6nh4zx zzAsJ2Vh$ek8f{IAo(F)}`FtFAkl(LhurZHH7GxMKmq)wK&qChquC5_+Rjcs9JTD8g zqYlVmkBfd&xkY+=!7;E%yFn>H&2qE9O>P;nYH(IReE#nab|_H3f}%2_iHx^Tc7r`wX7zF5sI~pGs>b1YbC^|wrj{Yr%dFOy{Y5dP z7NhN?Jmr~$>Tgs2>@o=u1n=1|ZnM_3!)6sLK*}NSyl+XBC{Dh{Q~iaAOmX1?A(5={iV zAFdhY$8;Y+7D{fwT8TtoUD%8KRME)c%vlb2_V#dcGP1AD-tKXF+GJ8M%6K)l2KE zS_dRXn$5mDgnZe?@!EnoSR(Yf!WgmdP?|0(MypXoq(do(4hP0bBLhXYu)}#S{lZDn zrmc1&lCQq)GoDw;ifbxw_*(P@y0$A*Cg0f@0ojlI4-0O2TR^a3C+!bj4PW>*@>{9_ zfoY4$MAx1ns)N7Rd?Z!!|D?GW38D=yJO5j2p+vfGxtj&}X|7_GzokY$?JSqf+w{gziq10@(hG6G%sN`AeUtjjaUHYc_TiErrSt&wcfX}ag6Vf!zDt{?9t%%9(>HpozOYb)`G(< z5a+_h_T>BY@3ljuJ%3x9FX}7SR%RB7uE}IDN>VL^tpJHs7R>7I?3$dF!!`&6HPH-O zjVYv~MDQ-S2oPAu_ik$OFBFt0QE;GeR^z9R#7B&J?dPXxv(#+;U1bF{8;%hvhQz8q z)Vo{25lH{q;v~?@hX=`Cl0hy~gOp;pxhH_eJPL)CXzS9IFnW%`<<$gp3k>W2_;#;^ zM+u?nzJwGOPmh8!!EEcN+$-WC#HYvbO$1!~g4eJl-CO+(wzM*v%*ttl7ywOmpT*y4 zUtQzzERkoJx?@eASd)J}MlQ?Slfbz!RK1|i80net-s-ra3O0X+jsnLi1?dzL{g89M zT*T#%Y36rUU;k>W*S+Dg>+b^g>oKo9pHjEH<=h&K2t&A~{QR`zf&^`CJg~Np^It zAw7izN?f6O3-YKW4@BBmecNTYo(j{OV`IW~5|SD`0Oa?Tm0{Cj3+G4b$1LRmCJopJxii7B9k!dops zQ@2>HgwY(rN$hZW$*YH#SDCaU;DzamjX#P)XQT#vc*d>j%<_aa(kcjF$x?uv zf*MdqD-itRP#C5ox{2&U-OwTnW1baV2vM$jB`+f(jGl!)kE$0K0rt)7xnG?Uw&k=z zBS~SJ-mA4Ni?Q0xMoZ4_GLToFzbkXJ$YMy z4H%Ne#3DdCi(~QaOWOXYE?V0pPmq)T%W&cq(bf{FQi)6fZ>!M+hh(rqnS--{+dy*JC2q$$k4rw%=WgS6N% zst2SV^Z)AWaz%|g@<@U!n|}$9FUNDjsupHMh84V)vfM2`rIY^jr*IWhxyBH5H)hXJ zFi5UHc7rDn{=!@hBhWjV|AIsf9Krr;xUBLv+w80Q1D*z5yV0ng65`h|sIU(^6iZkX z2v<8^Kya-FL3EYY7Yjuj;?BcG);|Gni2D-*xChD0>pf<3J0$FP2N6#{$t;eFe) zP(qZ#M57R-nUg#rKRqVI?COv%E0g82UX66j6tF=6a7&Z6HZb6V?at$E1Nc0AWNsY; zDTzS$Jc+r|!M!WSQ>h{p-4p!rYP`@}S41dN4X5+^_nNS4P4x&u3HY4`b*S{&*G!@6 z?KdhwWcOEOumQ z10C=~I5mj${j5(=-$MU$`6+SjB-YJ{;vqFY;M!ghFvFBU^nn!2$+=mjMI@I^Yff>o zr$57lt;eDeq42d~a#n&g0nJraIcg14zdkoZL=sFa zI4Nf;lv*@jLnwp#zfX+?Xk>FPEvc)6hF>IERrp;JRjp(*?PG07*uyZpQfAKq0nw4M zp!&qg=Ib9~cuY}*L=r_8;q_0fJc?EVRe_Z!PxOM4zD%&Ul8YP<4{3 zQR8?zDm4?HT0f&2*sM}k5kwM6C}zo{*@pMYZB2`n5MG!0D*U6pT70<22*&Bampi5< zawk$h{*6GNrIY81px|~-UqwY@P!rqQd94=r27JUzXt;l4|3am|*P|Q&9AB8AX)7Gk zse#~maUmXy2C+q7=7y$71|e|;cSktD>o?N0lT4}*L|+h`$c65jUNZ9N+%E3C9$j`j zwcJv9p8!5KgV=)F;A~RTW|cn*yjN;2d1iKy#%V82uns`l1trg5)Ny?ZMV!9XuIe0c z2)*U1F316N00XlcymUl7zp+1NEytTt7J^_7hATqn6*Q`vg82|YJCQnaMoqh1s>vR! z4z<2U^dy<%&w1wk58));$waysXs)D%W*r==%F^-)ElCtdaMi_ozMrDr!Hp+- zGFMTiahchm#?EtbOey#i#WbH{BIQ*ezA%OgF~k459Gv+xLvt}0>vtwxzdT!b5U`6V zeBoS6ZiT_KAR(+VdnLF8lnUFOr!`G5IG+}^wj(=h`j~o~>&*x^1`s@z8 zZY!~-jCx(*))Lg+x&~wqc9qW0En)fAUV)b@oCffL9R>a!=&(BPlx%FOh{Wn@`KU@U z5a@9dJMv)|PDRVcE{w-)9&_W4!TyreWx#^+ZVNtVW)c=FLEa0~oMDYw9>9Bm;ZyuU z!zSSZKtj9?OK(5|%LBi1g&(f~8R_oG&-?BpIKwfrW#4jXu>_@V1C8^6uuu}CI$9Du zF2Tl64QeB;94B|^Pa@H@Btg&U62rf>#ro8JhuJ`O2>VthEfc&~dZRM)>IgsxMj1yx zR`$Z@H_^sqm3+myYF(@jq^uH^zW4#sL-_ViEdJ-OdTWXQ*n z4VHL~oP#oiuQ7Q3$Gu8jvL(j+;lS6JA=AVSA6alW7g>!tm#(t{{H^CgwI0fEfcFb1 zWE+m4axvv|iMRFy7^H9Gkg-`~ivhsj&LiS-zZ+E)k_~u7qOj^c`%0j^l@KK#zk^Kg zvgA?+&b^Xw-P3h#000HF0iMWiMgPjdJ6W8iA~b#(`FnNz0G0EkBptRnn57Wt`>)C>cA3n78U?>a+7M)h(EB76>d+g&Os=wlB<81BGb6JmOE%P z;dX9#wyYwBo~F=k$2(IW%2i8-%~+Do=ny)lS6;RPsr9TcHWW3Z&3f*)AsIz)R)9#7h> z2ODGwm|3+tcp9W$4^}tmPzk2(N_Gk|32ToA;KMsraTSw26G?CmXj@+X85$2{)>=_Y zj11=^r-*Xexva-QuKnL`g|0}&3dr?==Q{a z-OiODN1HtYY~XTlgODW4pkN>GIu9{>GS%;zZ(c1y_|a;s;}=y>6O@>G*HRE+>ZUd@ zOEz%Qn!#=sOU>;6s=wQ)k_Sw44JeS9V0OZ^rfLh^}^Qe;?tr|vQ24|z+&1MZOgUt zl9z9lJdj|c54!((tR#)uQEK3dLs&4FGPo{dF})c#6{|7y{DitH(~-j!%F;0m*T;6klM;XmB}+34~v+9&_v4iniqc&{ahF|AEM4ua*Tnb z2m?w8n=>g_UkBIkAEI1%;1;C0G?ob4<$LHe6nkTxO@skv11zyvvn8YNA#7BtcaPv` zA~kKOBI2f*PZO|!C0StPwF|DqPAL0!Z-Kf_u{XcH8^wh{ zapr8j0y!n$H{k-`@^a8sd{verQj&5w!_9clDWw4|pkGV(joki&YghVnBWwub{xT$I z@AhD!(!bd(WC3hT^O|^5`!F~u7=SRJQ_3sYGno94aoW*YQlW?I1bPBr*J5H-Rt)b3 z!*OThR_x&0wzaDvg_dD+fKJTER+LcWw!45g#FN_tk?`oG!Tsz`{)BsjbDEypoG}gf z8NDH8SpkOmxXrjwr^nR!sMiTn;oR%H70?AL9nw?04vE++^j8^t!UyN#g0-FS z;>%UAdlK=JE$uO1T$=JJqEYsl001p*L7L4q2ra2Hm;_&5neN}f+*d>qJLD`&ve68G zYvjdW$8U8c@(Ichc*Y4g^$r`M?yvm3jDP8CzTeTTf8@mf9{_cCodZCgs3)8^W{@L6>Hd6ERKb}75{rO#*p2)U=7-PEzTNU?4)n&lc1j%W9mtiuX1^Upa~@* z>b9gn?KWgVc*-a{ZFz#<7|R5dN)zd^DIDRwOaTGyW3Rk9JF{LpAN|q0a#(nQoDvvf zI~ICTWaNze(-lEK&^-flm9!yGL0m-KrY$uo=K1(bvP4Qy3hUM(D>-3M=dDu{Kn`tOhIQhK*&J3J6881BniR?N_;%|6u%cEo6OBt zo&|;YzrZo4iEMTSERjk19%vWWIxP{ug!oWHm+QhXC*=n=B#Ew_$Ft^`>HnfZg}fNj zMH&6aV{C`U1r-^~%Mc|hJ?+>3?Vbo7hF2=R(mul@e9E5?1dQG_Fs<)#6_C^`1kD&p z^FBOmXq6v+jvp@MftC#WV;(?e4c?)+F9!*{L*>t6dPggkT84~!Ls<493zJ}L6DGQZi4HJ8{u;NgCtpH3wv%ke-Dp0Q2(uGP4k z9PMorBd_<#dNN+ZXKT*ipcl%adWQ^uvy{~0pR1&kNwd036`8--5?b)m^)G4WciC4B znYPrDWda$oEUU(^I`AE5F0+=eOB;>3P4h!S75mwjsVg}Q0sl1C8^Dv=mU79$Jn4}*;_N#xSMcEVZUUSZx5tue+G9|f+X{fIp~C@k?yHOI9ZeJbk5VhJLQKh~{;2MP?q zL3@0Km}?4a-hK5nq%^{U?`e;bMF2P(F7fhKqKvkyszb>+{Tv5Z;vsL2u+o%X8l!Mb zw{g5+a#f;iL{=AmA;OQx9CAdjvo)^ zh%u4zc=I@fx0xm-|3?Tfv-4fb#|MZ!6RFbXtH-M;@-v#-Bwc+fBSpgN(onU?g16qM z;;~@kJt~kZu~;NcJAJJjJDF|jcvzYsl0(RcT@LeQ>Y6WNntSmg~3N67)^ShsuJCJyhtSf#{* zj}CQRhfEQ>WcVjhxCrU&r9_j+pQ1m6MOwP}^Wq?DdTP2R0US{^Bg#R4l-PJ@-pu&+ zDI+$xYz)e(4b3;`u1wdab5+$2nFE{Zb8oGyn(rtrujX0yoJxVU&k@!b}i2WH_IiR7xH2xBv&3^7oIM!p4>^ymI%wa+ehVW5McfA3HOi!|UC&;Y4f z3T+h;Y{*N{`!6e@n@vwMxyLrvsU~2-5D7g@V0hI_y$o@UdyF{%U!|sX?WcSKrt+to z*+}Cw)109HGuMNq15tG%Dg#*Ujc8AnTIN_7$zWTL7iZBVsYmpYIP~r!ZeoMn1|}G=llLs zk<_6eIgmTKkETV6hH6vag@8l@J(Ipy<1V4&f?A8D#LJ+I+B;I2cBtV zG7vW!{T3By61!*cQz7%8Gl2aMxQ}C#@!~hk*QvFK)6kUAwJI!+eg{;oz%gSI5RMGT zLijF-u+ayn6xVH?kc+I!wRlGK(lo`IjnjJ9RD{f$;@MbxPuvXor_}i*zdY0hpVoP9 z@F2UqR>DV}KO}u7f=H;KujElb-4ay9EbiA=3e=U1fxh8>Oq5Y5KvQ1kb}RvnoyF6l zQQpFf>bCjn{#U`;q^*-NI26GXAvp408;thX<&(OOmn)&nroL2sM1*8xQ4Z*2n-==k zC?@sU;X3h7^{)i#@asnmY)lnEzj9tMw*4=k1YJkhokYwBl7#3T8!!Yc&{Yj-aVD~l zOh<^|fYW!p1-agICY%l~$W-J>ef$B#$o;*u$}5Y8!Yo6vdLSIM^!XfZ zz@NsY1PBhgM-LkVfiag0uTaOU_S{hn3aXPksgMJWu>4odDp z@ww<}dFdsI5~iOha(bVLEs;GphzNjrSVp@n@gX@IPK0anNnRB?kA(pv*(&+tayLgv zTjm>y)ETf*>tjl3r3|^s>0bY6GIdA@=@@%;_Bkal@u;7(^LE`g3}&Aub)O+SCKfA;jLSRl@J*nG z_z|C8nrJ&|*Fco8TRSIRUFbs||63Rhe9z{s8iOQ_B*)@{dQ{)~SiCe`S1UY!zMUQ6 zxtmAmWI6s$0>%@SKeW|XHnv_r`ZhxvLn~Q05DY|slwMZ*cwpQ88|LK!m3U zaaCY0dm>YDmKw7T$$r!Vx)X97;p~!@*i2(k4R@S!@I9;UwwX1Znzxh?H674><*uw) z0S(5^GUj@(bCI4H+PSj-{5-ebK$|y*^l0YG8?0}O+kq|pKu9mmk0Q&OW|!XAS31wS zamFCsX<~nO`q>1hs70fFq({qWkSMquOK|#~Z9ZsKbuW?Q`w#sFuVo^U8>MRc&H;j| z2IwPJ3{u6(Qj6*opcDJttX)_pfjN85w%_Umce*NtcK;uiXhL;K7ogwY;u93`qq74MSA%ptw}eF!GT4qBWOw;kK`U*FgpX zh24?Fdb`(l4QM*3@AzyVqo0ZA6u3wHf1lZclEc=~-r_@E?8aUAoT_(9Gatw)Jasw# zP17%thNTV5R{|%1Z$^qoaJMv4Qm`@?HeF@_Ifd;Xnm5ZMoTwTnplMp9U9(xlhek?9 zKw|6J>UTOZJOGJcg*1v=OhM3)7916x=&%Ul+BP*&8u@@PA-d^d4)r$h6j0aEG?9D} zT^XI1IF0~27Yv&)%5^zp(Zj1(xZMl<{T2y`A|&wDBkviw;mxM(tO~f*Z!kiudP&vC z1kXd<%m)&rn89~abVY-S@o45gWVNVA`xC`3y22(z{dIcweUpfpdQd>=5>Y%z<*3$wE%Q!$WE5#CA{7p&1}uB-nxR>L--$!; z0qtOEOfF}I7Ml@o{6WQD-&Le|qzh#Bh8G(a%yf+cA8{Bic41cXa;g;M)GipN z)Z$YL3eQj974PTC4b(8;qBx}4JE-agANaV1g6^WC1}|RtJzYbAkzmJzGTGZ%ROLdD z%Xuf*8p?#W*c1matKaSS%BvwVLzVX~dnRBBOd21nD&P9g}IeYtC6NvR=er!<#Ffe=FH7y;>j zFI8(2Rm@C$#>O>IeykO&*TW9n1@`7UuJKz+Ml9Vk!p1D2f|BqHkw3R~c%($@xHEET zJG?DIU9!o|$?9y-V~r{x>&7b3`KrB6S4$N4x_@JHu=d4rFv5b4X1Df&<0RvVU6rB# zf;eAlPpYQXFE`AbLVxZ{TCdF-2VIP^Yjt+w@cWin0CAPjkG>Bq;dPzI5?pl$*7@+V zSSI_2A3sg^jdZ9wO;yI-ex@JU@BGldF(-diO3&Y3lan%A=55N;5TDzMwz3RF~E#zuQ zO;)$WJfnYJh^TX73AC20mF7;a%IW###2Qx=q~8U$`v&=gMpysVoy7&pp(L9hq1-+~BGu=Q!tm<7T({8z+?0K&DwH25dIp1f}8pTYxuF4;HQm zoaFK|19X~QLY2t-ay)1lC2_r04`A50?<>iZZVYm2StE>6GxfSs zH9Sn;l8NA7Z(xTaCbqqYJOsgx4H+mc_ku*X_;9=lH%di-t3J|^k4KbSx1ZZ0a^-!T z?=Vt~E0CSswp8^fT>7NeC5WzP7b$Qlz4LgsK2iHk3F2w|)-40PCJI3h&aToQlz=O4 z2r>~}0l%C+GbbI=!5bomhVk6y-JXU|u9C;!PDQIdHtrDLYEwWE>z03d2L#Jlkza_N zU^@6%XRpAuZY4M>MLP&{lqDP?vq+4hQux6kq@`IO$n~+MSG$fLfz5T-fk-2hk{adhVv7 zbXCf0kbig6t$H;he6gR7!lS<$X`0NGPbrq(8Gv;q>;;iS@XFouPp{BA`HszQQ=uq*Ltp zW1K-9y2n2b?S*+x-wU!`*(g631aK@^Cg>V*Lxut=!*|*=J3*AId}uhjo+lN-!BcWd z74&KkC0X23PFA$*--hz1nw07Xrp?zRVnI7j0!Gvwn*Js*a*I7pFa_N*{U9?;rWsc( z)_(015UkM(=YHTa2zo4NUg=Q4SpEXav)Ze7kj5XJX0Z`+M0y1wwdoD zRS$^T#6&UAsBea2y~#d0PqQ}#xcAGMg73cpRr&yITEN~9Pch@VuuZ7O)HNP}gw*Fd zNJ0q6Cv!u%&!u#ah-CXm@g{R3FAxi4pLGGPE706?d_?S*Umo5$4>|&n%TUmORc&jz zd;W&;hS$r7E+$cM;Zmeb zLkqZxA_m6GHU3(@%KuJvcMd<_wTD@sY|fHtXnkRy`04H};t%NT4{0M=DSXaPdLR{5ExP&QsX!q ze^Mz={sMkfm^BXPn@Wd&KW;zK z!`MB&8GRH*|3CzoYm)}PQ6N!I@WX7M%_Y=rRW2QLSOP=56DT88Au#c8aI+}lysFK5 z58)hPPPm-wyE2X#zV4j!Z%j&@aPxG&6c&XyEeVrQ$J!a%G8Emrhvrk>#vF+bK8*rD zGQ%kq{Tl|vVKqHfYd-!p5u63}*akTW6BeKSyfD97eR#t8q38T!;TrZaCe$=k46l^t zcks5$Hr_dJEZDJP`RMwfM9%#U?4PgO%^SZ;K8F9zJ))h9;n0voc`yH=z5kj?6F=W> ztrBuN?Yi;XmGibY({_PyPq<8+y9ygbt6W*m3!wCxP1k|pXcH&Z&KmxOG4^awULJ=N z0;~>SkNW;??5WGc23Q4;D*a^8F$Lb0aWrWe(%;j91mx)Qjcg02>&!DdzJ+hQ{|Wc| zc`0ClzHjm;fxn%kz{3VZq?N^laiIitnKtOb9(SfN`xju>j^r)dbhq1*Ywzjqi4YzE zGRTOp2Q0UZWrn*5YvEZaKvgMc^}LI5j;zWoq92rSSi&1!;I3oGA4XW+pC|dW;GQQ; z!z<4XH0W*M_d#S_86Kji-l0k93LAH=n|c4)j^cYuhS|6>?;8bTd|}!%Ujb?@OriZLvCdbP^^*t&7%wT@^`;W2T0@iWnvI{(v=)=%-Z9 zjNY@A;^%RhHyoC1h>c-KbIX<)D}3U-lQgKI`gy>3avRDl$RI{(ckfs3PEp1UqJG%P zGh7M_%_?lbR?XQ`AyaG?X31?GET6#3`Nu^UIibPibP}hf9o@%<7Wb&SdIZ33UG0s4 zs{Pw27rRWPf|0L&{r&ro1Q&zxN}NtWx$<;oZUYd!^x6QroYQQ~lM+!FoobNuIB1sX z+Nx3{xG`R^%Jr^AYUQuB>RnCpA}MCEJ9MChX7rZ-ueRwZtnYIM_wYLcA)r|t}W`#4<6FdB4p66v-8=bQAX@q%@30d^p|0^l`HREIjp;>;exb7AZV zniXT8)ztOJ%l|zZQx0jKCRUl40`_Kl#^YwlkqUo@0Z>#gp;tH1=tV`+#w7jh*1{HY zhXSl^zs`;2fKp{Dzgv)-BZusEfADIha@7~lLeBvwjbQS_Emy^Hoqy6vAba^=)=nbn ztUN~2AFQ>{TLAd6U!`Pew2xKO^PI2FIbdVYIm?j*UCr1gE08*sKt2Ng9;Ow)f$C({k5UCM&g^cgejy zo0Ujpg$J^VI0^3gkEBMe*N^>MW=c>J?{=>b4+KTH2q^ZDdr}C)zX{rx{5R1Aq&h|X zI*t8K@t|#`8T|x`1Cn68!q;q>Uj|?kBzQZv+}2S1X~mT84vO*Wy)BIyiTd{l9@%}? zB&~i&K{qZ{|DsTGkoz_$O`k!MwtVS32WT!$%8^Lu*Q7U=c}{y&!Lc)bBx?|m4>Mbz zz@Va*)yuih$Y7?D)}`Aj?XE{_EW`!<;+t++crwA<1uC%`m!s|q0G;o8-rZGV&P6eJurQ#zr(+^=*%219d&+l#9$#p%)vK+ioKu(ZyrL*nq5^F4)lKay<2d#U-Y8WM0=-H;1=PrV zCqZcSCjf9tSJz~}6bQ5f_ympXc;HfsXXwr@vEwrpMenLPPfG8Wo}i0xCH4S4g{~6M z01qw|#w*}%qcHQ3ko_SnUZ?t9w`$%>(Bo5O)J{Fk#}Ht0AS((_-N%j7g!&$$|9+sY zv8N(pCGFal9Jf0q)dIAHY6@L`e^tNPq6$-)AtJEgYO2apCy186xB-?Owp7IK8(KRd z-Q0_hdhHzh|BWSX`pW3g842OPu<1~<4{m9{o%48zA9EgPH9uCXBZhZmUC!if+IulE z$sY~m-FMC*g%`}%%R7Cjycji0;A_!Gg_REkq~hh2DY^I9-0ENU1377es0!n(!5BQI zLJXGF{hf;SI%TYp12qqP==LBT!5PgezS)5dzy=uhPNh`&iDxi6Oi4aP_TVc$;B(8& zg-+J8uYx&vMs2=@59Opj=Zz$$2r0vMH0_2!9Q$PGP?YIP$(%t$v1K_yIlrKp`Ue?E zrlOM~jVTOPi{&tU1C78h&}_*&t3%`2&UVp{qe>}vMr+_znBO?6yWVpZ7t(|ck|QZh z_Jk^9$h4EZc$Dc7#xw5_79vI+Ezl|jDdq2zIsJ(V-8!rMhoP?B1--7RHMgWHw*1Bi zV6M*oLs=1pSY4+UE2&~HFu-`5g2(G9m;w!-+f80k8#Ku!M;tw?DFqSXB%AqY)<kNom;*Hik`?j{De;Oyp-HB6!l19+5&b-L;er{y{ za7W_je6#{AHE6*Y%bn*HsaFwne8(AoAkrk39Y0;%!>kLCf^9fFCPG1}yl?gfrABvg zLp{`4A6%!j|6x;}4}=Z*doz}UZ*OqOP&EBdEiw-f{jz-0YTILsH}J*XC{E01m#A0{ zWin3`KiwB7I<>~8Q`BK(Hw*+MeM5jXUK0e6uTl=A_)BwxFL1Kq?AZLha-soye$$d~ ze1EUXN)>n%be)~PA0d4V4&}CkC+pXd$S1Sfamaa|IBy6aa$a8~?V3Yy^)P`2P6|MGH?;#wHupMedv$na^i>It8WDt`$U|P%c zHbQTz>iJqcp=aq&Vs2oZ0e`4Cx$K*5hvz}P{O&MMm~Q9@O*=fJ&~F`nnurv`WIK6f zhectZxO7jmYMmVD_P^ zZZrU$kglEZVWEK4H^~zumoX{0J#erH1kV|w7lWKfu2s``dmQdp2)g5tO>{WLK%?05 za4yyhB`3kn!6ctv@oCWKs=6?h$-v9hxh0hP`d>j)JEtn$-5^6{EjFabi^|!J56IXQ$4V#|dpZzLDX&j8xVh9R;_OrEr*DSJpAM%?PX(w&P9(?ysSUt9u z;)xA`!jh!XysbY{Cv@fJUciRMp#*aqz7m$OuU*bW8>6;6-(5{^2YL`moMo5OSjxPR z@~a3e7@$zzxqy~k1*)pZ!QFIzFuFvgyJ@G6e|T>HUZ;*3_Q z>C%CSgjk0Y=$@mi_L8Oh-8KS;PUj2^YX+foo^sWpXKPSjX8=pkr-$QW1eYOnZFb`P z$at&zVmwvojrq`(Edn!v-cb(zyf}?PS_uwJlKicpI*Zk9QoErEp#rnYIh@vj0`Nrp z29+*g^k|L5zhbY%zgeRJs~_q-V_Nn;0?O>Pw7qsbP>w!QQAnuUijw4x$LWcad?Io5 zE*_NY9$T20rs!0;K4`RRZWiRs(mIKG{kye0MVE;~7*E19s8$Fv6Kl74U(jVJ)HLU3 zEb~1MpEK>O9`k(oBbEkb2u>MTwT1J6|BP1I6Z*}jZZF_N4aLvn-+6pbKo{GJ+8Lle zJ!Xhl#PoRjb=|i-UwO<^h^96_0++>I*qmIsb2Ih$$|rSlVUz_pkK>S%6cOtPBo~ly zE5OkkMG5mT4Eo*O*0r)2LHh2NyBtZ;Qe8{Qcw5xoz205BrB3Rmw_$SwQGEB?_}9l< zQY=;uO#Px4Sr$)e-^rHF=M0d4UpwyC#*cqeq^|F*kM~P%Nh|uCVVC{L0vj}YH^J=w*5Qk(Jfk*XcfaWjnl7xn4!Mwjh=CKja47rZR zUEj~1W)X7>{J+W2Xp4G0T~Yq=AfrJQMK&%!olz;8FVU4VRCTt^fh|uGC=X&|X0tE# zj>!MY=|L<-a%H$1r-d31EHG$)Ke`!LfBG8f40W+jLHyBYdO4^llA{`&oKfKH+sk62 zKarSyJK0i$iw%HQX?3$Cy(a$nF$cHUy9TFHpPO|uj{I6{P5-!jN3w_H{8bOSAHY!W zrR^$nM>8{wr?RCXIAiqTmpUetrk*0HY($CrAR zO9J)>$SURIy;}Z43D2yor zqUHFv;(IXoKN9aJ7=f>R(PKd9b7u|)4nd!q25L93@#wmSK)X=p*thfpQJR=|`|#}H zKZ`U>=8=B{TDRV-=yahtB?t9JktSYH_;pnI6S;cW5@rKkzgIPZs(PzGCht1wTHvRw zOPm&)fW0+S-XUM*-RiL!hzm{Hx+;1Re$<>Tt;(-l6@l3tMjhs*oAy{y zfq<3J7^Vn7iGdAT%jrpfDa;`%KSSzoXKCo9*SRar8*JkZ;?^+tST^@W|4#Qy!Y@+w zV!Dvo^kM)17?h0NW#A#mX-o+mj^sjds^V;w0(IhzbKfR(If#rmB}L~+6w1ba&yK>S zbsA(Yt!@Jpp-%dU7^>eNqLN>K0;8xEWgNe4nvXk*5&oE<5+Tynk(z`hT~C(eJ?_v3 z@1m|C#>FXxn$P26$y1h6s{~N#2f6~iCLv?`e$TbOzm=pFHts?l$_m7$Jp(cdYn8DA zrlu8x9HE0r%q!`%^0Vm|F(G;Fzb|xqjrp`4wmhg~_ODMa;0w5ECs8)rMwcag z2h_=(w@S~D$hRo}V$Fx6Y$T7ihRM9o*iQUYe;!0W&`q-UeXq2$vu+!8;5DqY8e(N|;YLz3`H@6xL9gPf}YipV_@dm zXu7@)WPz8cDi$D*QWQlGh8RqD5|TS{e_3UP3=gSHvrR>EexNoLbU@&aIt#uoAg@mP zL;m2_=`$t`M(8_j{JTJDV?=%6)5}1}f}gx;bgf+5Rm50wsuyJ{F|m_-*h=gTqGP~q zQ(xlc38lZvHs?}#6H}j6Y`Aacb2;|EEmInACXb!&Hv6dS7dCde8iMCgCLh^c~kO#Od8KV#bpC{`fBOcOcGv0ipF_knU1@ zp;j-i8fB5eh7iY0#E_r4AT!}yWcx!#4g?ks+I;5AwF&8WfA>95RZh6Ao*HUygWMAe zE7^t$QjDXqVE)#(ASB1M#p@e+%L%-%=s?;a8CuC=Z{4!lTsmh7C7!>_i`8JYE8F((l?!$ z4V}mWMp4opA`02$=XU3S-WNwNJKK3#uuar%IDC5any0t#&AKv#a-G7BLujN&hil*X z92OYVD@L7hEzVUrQwu*E{>8Ca1a&lP7Gm8NDnE4#Z@(PgCYUZ1-c?0bHVs8#6ru#t z+f(lTb~yMU>DDju2L43-$6@c59~B}sBstg^JUm6+Rg6kN{s%QWP??96RI2XP{RCnL zH+(R8;k8|w@{ z@>6IKf=vKQAy4E~wUOFmAnkdBRU&Nx>LCkkYdx(fwF&9*XYEe&JRSap=Q+lWVbeQ$ zq;ouP-Rf0vSQd?X)BJ>KJy8%YV|!+J=ww_fo5cC$*KfhaZr?h<1*gI=2=iF$z3ut% zp|&6b?tUR*@;t!r9l8V9X!6mcuF&q6s(DXO0FosxL`YaoH{S#z_9#u1Xk5qh%z%Ud4%F7UJ#HR2hJuI4pn`HfB)fbMG%I+ONg%=E$c>FzFhJf}B* z*z>>W4md>Ornn^%gN2dvG!vrv&O!<-05);<6r&CbdTkB-z&-U2H{esaH9(Ur zHPQbIT7=s`pQh-BmIv9^hkd)c3jlRo{iF0axM%aK2|PGc2#im3lHfKW{ABX*n3qhF z5wb9hNH2fT;!C7akD+V>5+MP|&KP5dbg_z*8?=BiR_8^RO<6@MQFv9BWKs?zjnL*^ z?pq5AP}N7pT2Vp&x7I+VK^#0x>4tSHUUSL8(VKI4Pr0 zJnT~7@0s`=c8_W0z7{0ve zdg(>3EfkA4|9Joa2Kzyt>tvKfT>sQmdke!_;yhf4W*eq3f;+}rX~?r>0f|uC%{1o; zSNmEabau1S0%)g+72062*teV9ME$2!#mC!VovE$ccGaL#g0y5JdV6rCa$2*GZUUhK z(XkaaUWz<4oflmA3%mW0-S`&1r-QhTzbvMXu^s)o-^(5L`1w*JhDYb&SUDO<4Vc3p z2-%tP8_0j1G4V+Bpmw+R9XN3D5${qVG|BoHr}~<@awaNlRYZLq^r%N*i%4a!VG!`EoAi_v+hswJIe3ctGJ;-wCNTj!f}xB9@zNc`F|Kkhk?s z9Rw|VP;6KO)~MT5{>|q-_y{L7k>rz1;&kr-00RLwz0tQ9)1$)cfKd2QA;=-pu^3&-hQ z1&PT!J<_ioXH2N*cZ|&MqDWo3v1j+G4&=tSc-N9UTjYuuLr_B$nl6dEgGhIn7&s0& zV@7_14K|y#T$Xc3cR8w>MgXxGY;~~aOI(8b42+xcn(4{&7~KS zbNcXuAPob(1aQM;zQ`@w55t98kbjT%8f2MCHo{;CtL?!Q8-4^$J#cM`K}VrzX~r*{ z`cnoIfp!ILl(CszF(^JVoVfBa(5BD?zKy1l?u(t+`2Zg(f|T9OpS(iFb)4O6{Kmtn zL+G+F9eUz%qe+xtJ0Z=`ljzBcUx=hsSWj0rRGv(2JOD-cCz52XJ4|kJ^FDa~W0BB; zf#OuJm=Y5O&?s?@Z1t4ISj%Dfm_*9-uV?fIZ`Z;ELqk3zq`zGzDMrUcWqf&ZHa1Mj zCDh8>)2SK_oRJj84m^6)cx-A4-d#Pk%K#7thmBJ=U(vehDzFD}lfnw3{aS7z8AsvLQxN&Ay3fb5%c=5O z&3G+n0iMREeBHolTXQNWUjT!IGH{vx1K zw$?J+NaZak9RmR*RCh68JtH?P4lcF;DF1uhf4400mtKU_u{;^rYERD{%YiI5GhanW zF@>Vo=I7BN9SUozI|9B%5VOQ(ge+$T61uOXfgT?$>h zR`se%X~$x|l3Lo%E`HGvCxmcZN&EhT*P;+XRyeHC@qu%PioGo_<}%;+bUBwA1UbJHY>d@Ek`>dAjF{Ra`Lzsy%p0TW61Gcy$%4z@@TuMhmRgOs80ClXD$6YN1m~t+>wH9%sbr<}B|VKzCjH zWRl3^z}^K=Bpbi#h2$EenORm(+7Nb!=t0DkfDdsX-1;P7?ZL@%-= z+z$LN0j{GuoTI{$8&p?Mu;2QmNzZ8edwjU{$>#oEqcb$u1RH%wX?QEmEzwy@#i7j> z4o~aRm~xv%QrOm^K)CIDd7O5$K7mb(3~{? z%oNwWQq`OaM$dczNQ+SM9EfbnZ)(p~>_GFDO!3kK-L4$L3 zQALPG?`ve`5g;WST7E$TGthQS=9U@{9;$o=2@37DA88BQ?T5COt(Nl8GnNY{twST` z;^93?Wi!RqYPT(shQ4~=O$@^&`j(FQAgfR~IFtPI0g~psf&j_oscm41l*Io!sl-2i zZ?>vFg~sN7lC9=_97kbHF2tJf_-vho#!>P(hx`2k!Qt6}lWC?aSSb&rGsL?^$46vB zHWA=>jf2lkGCcaPM0FYmcJjf)^C3@ytE-xn)KIK~YZyU%!J7|j^1`WWm2+&$n^&<} zKN{dIF-;w=Rai(%n`|`L4W@vHYl_>n4{97+8#MAkxoi>I5>dXIWF#l|5K z1-BJ{#AA~pFbL6phqdC8SE7Z#Xg+gQh4vTm@tp6eLKWoHNUVzY%oQbjRKYz+y~o=m z5j)M#R8`~q&#tOul&q1F08F2hYVtk`9#l~}v4J=cCM($lg$+N0A(eYlWq-|7 zbqeQi^49l6bf!+0mTxRhWgbnh4k?>)E?dPtCl?2whY0!;`fH9EECplm4`b5l)JE8a zRgHU_iOX$5v(~a8=22#+p)OwL;8u;DC`MrXl}^d@1GId=~D4XSkwyG@94AEm#`+JUPGlj)|6KN-F zVYA>n3*#wWp73~9uQI6b)jj|urbB)HN3B(4$2A^zLN*Rm`j_OLP#Jk!R3?jG0BBs3 zrcG;+WUszbfA|qKG5)3r#rlfu^alooZEPl4bT0F#FVcU8eH`2+OCa7>ioGpj0VpL$k-vY`CG(buQ5RGky;(9aVv`I;J>dQb>RmKsk<#wpf96k8cW@4C` zqj+lCE!(${Dkb&E-%p6hyTm*~u2XKt6zL{0WI)=mWOu2og6Tze^?gc2vYr{21p>63 zBfrQnEPzdoz7M^&43_9t;J}GXNSy!{1?nfL>#^)am#<@KEyNbUl=xKZ_sE}Dq8*cy z#6EgvNYFrm(rv1cJ?6h6Ag$d1mQx&+!or{4U$hvc{lDe7*p7WgxTjl#HhCaD7-pwp zroQ4mIO|7Vys|&X*x_P1#Kay6!Kd0-C@Qb*3uYf*>q7llz3K<8kWf8k4~pjIJ3OGq z4@^FAPD{2G;5FynAul_lNlyhAWcHN+c|Ik@7?4m0siX5M3!OmyWR22>uaxveW#Pdmj$LfsiQe z5yPfhkeCwkmU*7U7VB|>5Xu;GH&4OQ`f#Uc#Y{0+@);&ss;7=30TuBO!Q|qOfL~mmytG+_>|#JN=z|8o?|v zSA;$3*bx+nmP*myXwK?ZFaXw}uS-i$BLCRI06DX9vd|v3 z07QU$aJ|Z@aGBEG3aSxWRN%OjUf`&LwB&)V##cw9XHJDEhI;+C0z?VBjKv6Xh+`yoaW z0a4&|utYew%VeX!M;jlCe6a+R8z5Nfqu zGv9pllrAjyq7We=I zbc-F`ctv9G0oU6hcK)NUf`LKNO!+ZqR^x)Q1rX}aI{@=Hrt(^^V8{?(aBj*)soH~% zF}(oi5+3@g+&Cn`ix zC*cQuNZpM`0&+`hxCSg{5=@}^mA%#z{ zXT)XNbqE$D_NHXRg-Y!9rcYyeQDZg;RWBclonl>z0n~$|$WtiKBm!?Y@1l#S;4P+H z+)*2ey&#%Y`Lcsyx?o8-I!%lobEV5}h}kbN#3*-*HYW~cjNivKptvzsdDC0W6c}0n-Sk}IMT8jIp0Gwg*a2(bK4rCcgx(H-lYemht64QAOHX;(LtLL zH3%)KGMEG-|7dor?>in7M|(p#hggrL2aEv$3LE>*ipWzsL{yeHUMO?aoV{-ZZ2~<6 z&VR3zP_w;C8r6hVzs_S;mmxQZpO$j$FQfHmKULdA>G39HJ?tQ~Dbd~_JKxKK3%A;K z+~X(w8Id#N879uNFM4-J`u}n`Dj&8qkiv`gBQBAFv~qLIcez~Ua>k(F>H+}zz&=|% z^!k}FS}H_)wN4;in5MaR_ieT z*4rRZFN^e@H%Wg}d;WNi^?{|WV(*SqvFgnVp4W`P{!HUUPQ=YHI(3;7XO~H-igj3^ zZWoc_?45x4S(#&31y|$?LMNSA07}sNGwPW(vqzb@`0~G%TJ*4GVG@?<)C}QqUZbOq zAEcI@@BQoO7OZqR|NFErrjv4@=uq>IRMHlm9}21VVyEMrV9&cF*Ypd}&+DC^z~i)b zELPhZHQMydS^OMcgC8zGj#22tCxqzo0r;E-nZPQ_r1Ep|Z&+v)7FmO0d!KBzcH7K( zKH!%0*%w6%5CD`26Um}6{mAwsVFo!AaIApwEvXc`KQ+P45cg7Hy+}+618=OIa1q&T z(zjUgHu|&T3YRE&JSsZZo3Vg`o-Yq)C)lmHImg^$TQskN@91GVtXD^)Y1aS1A}BQ9 z;B0Wu1pECo8&uy`zZ0W=6!A+KQ0(*vd`q1=^E{g_#u?zjj9SbnBo8adD2Jm3!cLJT z^_FzaR4l7i`3&0VhT;q^mwOg<2pp&x-n8QIkd)1ln0B1n$|FycgkMwFl5nfT>4bl< zFFlI49CvUjgCX*(M7LkKaG(P>W(ZFywf4w-R9%xn96D!>mzni?5CbEm1_phf@w8%W-e8-hT+kw3+4Q5FO=2|m|VH&zD-;Do9AI- zn>mld@y8+jG=?&HhK41xRbc;O)dg+F*Ka(zoypg%*3)R1ZFqLCGctzTLx}x$?SI-t zMxQ>-baUjUdBvAm(&H{XYI(9H=nbmKB|XN?02tia{f@+KXc@!$+C$@wq!GF=J-T*EiQ1s6n&7IFSr zZC_!4ThCLY!O1uB6Vt+{r#tDo9_MEb4TtEUP6}Ht?^nQQo;>vR)0Xyes<{WSYrU~F zZd*`;df8QfA~WxcyMNWxnb9u{K2UI!;-@kxI#XrZ?S|>7iq@ME5o%r!>EGjYwH2Sm zA9Lg$U5I~udyD{9K&ijid6!8JiQ9haADtv3!~vkF@!+X8{{&Jfr)5-lHNGOux^GSf zfE1~|Km$M{_&Ghp;dorLP*wVjy25O{+T2E@)S@i`=nKZwz3I2bc*-5*w6~on+~=vj zDNbr>2NJR%jJ#gQ5Q6vk-!M$2Ktxb)5$41!tjNp&z)zrvkjk!t#6}9zr;DI%{OtPYfvYJT8 zEICoXKpK>1?ftNnb6ypoAMQp^r|G@^I)e1OGY+8*g5;zvJh+)@fj5X}@J85KYas?W zON>V7JBgHkQC>+ur}6a3Dy3g*?xkzQ)kci{Y!q&fY6%VD}(y!|Fe6WWnL(q~m9 z8*cQ0P|}MrV2oyA2E$}=0AQ=(=*W|*Ii^7X#F)4=!r)gH@TRL1-2buHAX-?AsqWmC zYaz{t<|0C><5!a5D2OGPCW#2X3so`DPz}SX97j%&Oa@W*47|+Zo-ZM*!x_<>T-0vC zNf&k)esR5hQQ}QR{MJch&%S1cF6<*du7;hAA>I8Tz)OW*>UQ_ z?d5OM^B3{pex+1S$4(;?mXHfBX`uTz4M0A#sBry18~yMxPBj!^>gVYOeBsHnb-=*! zEUUa$cJqE&6CoSn?c8vNb3N4GtI13Ddg>9X0Oy6XH&TadpKK6s)KiQW!MgdJtX6b5 zS?sdxNg}Q6T7q+t&PwUcNzkdS(t*9%^WG3iM!6)Xw?@DB3TAbYnGc&_@XOQ)3H#-R z?@Ub}n@M>;o1XXu=Q`uxj+X-LetkcPEO8m2kz7sr`lOy(&?F({_2!zqRPYg%wd;-_ z0l@6$xj?C%^ABe6B|=Kotl~&1cUA`pIGrJN(opuVg@ry%p6a%p@0a7mcnkO|qm2cR)#W(X%+HLKL9V>c|E^kpeuRU0G+Fo zm{Jq23iwcWBT$u%fJXX!u&0zMpd! zjd&Zcp2S~jTR4O-g^gU@Bhse-z0TSAG}`=dhW-1vlTwYgry;^iV!fpkK>MGH{^5$E zqx}h5Xm6V8_b#D{!(Ix-&m|Sc?IjIlhE*m<>;W4{3gBK2s@|0%Ma04djYbGSDm|;X z$?pCbu(hlIxU`6`1eMad3l&j7@b3g7XrC$)tgrc^F9Nu8;uCH#{C>Ex7i5F5+B+}9 zX@C;T@sfF~d}O4p3i0%!Pqa5RnPSoOsr|-jnSlSVyf1H+a0kyc>22>c4;2gb#9D%d zdtglk3t0`ga#ws1g@S{PMyePW7Ol=VJNkmI7Rx6dzAeQm&LKfeTyW;L zKksQe{*wYyHr%*3`SgEzJNiBZa<9%X|2icSZS6b*p&1!x-9Q0YDHhqv_6Vv90^SoI zec}rbdvT>w(;Y&=^q2$~EP7&f^)YpWv$`{a0uX z+W>9803(-mm;okkMLhuWN;*lOFBHspX&%*wX6;=gEQ3oLmvuiX%pV^C{zYcm><5QGC^RvQ*4+0;|9E4 z9Aw@^Z)1rEZ8TY5tAJd!K#N2!D421@J0d*&wA|F~`a z9OYxw)d&!+!QPaEnoLV|O3}$*OegF%9{B<4 z8Op<1VV&HC{YFclajHjvN%LXw$!d&=g5qCW`?ew}2USZBK`_z`XgErp(F4pYQ3kpC~<{d7y7yOrrE;=1NbExoGhBtG^ zY`c#EcL%NEZ!@1HmZ=?F)C}Ax1W7`z_=jk8DSa0q`;gV)Y_1O$tdEHimCmCq%H|c2 zh;t(>yWp<0BZXIOoC|WMpRmWBxhpooUWQg`7{JE{P;4iL1*7>1c#W?~AtfYpt}fQV zB~Wt*adGeK2$pj4EN;Ec`0TeYO+Eb%QN5+^Kpq!-X)joOD`($u;X4`~>k@tXl(Lcg zv!5mj{j^GBlYMBL&-P$cBv5R4G~b-RQ*u$T6MKibpL!xKX4B_aQF;Ezjyoen4OCX9 ze$w)bpS<21|%uD=B#H!LL$X^^pVbPbU#=usiQ_KC3^(_HkOE(~PR zs`QyX*r1`HM$bL4bZqgZH+}^2Ze=>+Gi$|A)$YO7$t!_rd7z|TS(}4Mm4W=cbyTPd zf%jxQ8@kfC?Y}KV)!=9}L)FJ3iCKdrXy+dcSCE!$z1f6aAl<9OJwz>vno0hSjRCoP z4Oe2NI+Sf47cVk1UZtJJA=Upbzt~8*>PyWD4C!EX*0hot6I1qE5}_uuZ2HA|T{#rJihc9&d>H6J`%u)k2 z4oQ0O>&?F(k6~bEw*ROV@(ao`G7lq3+mnGqovK$RB15Cpn5UcH7vJDL{5%t}JRNa} zngGc&n)coVuqMr*KPn9u0;21qv4P)ft4K;>P-51=`74(QZ{ZA7Uv-iLuluRcef(SpUcQ{toW z(3PIl>7(K(n_rfk$c(h0`ggFhf&W0`&$^hWW&x=1u7|Zkcj@%%FYst`a>bB1Hjax< zpwNvt0JwFq?2WXV7h^+^XZTpeKNf4%^93#S4?+N&uoIWrm*G$t^ahV1ZW_B8nQn0y z6N{hVNDCVDCI?7m%FHEJU8#loC>0cpO}wsf|D$$*>AX!+NA@ic)rHD^4)Oq!AYse= zd`19+-Ql{clK&1>g-~PMT%YKZ_2K!*CYafB7U2X$nkg4GM{oqW8IUN*tYrO&h{Ojr zZwN6$9$@va>hcJM$;;Cm*GdnI?Z(#EVaT*UteF+oF=JNmwaG|00a)C-Ds3nAWBMUf zVt0}b!p=FEuX0QwQ>~D7QFQsM_Txs^Nrfh&r|~N$#q*N-YU{wzWeqQ!lW(t^@e2Qj z&N}`GA+4h8*#F#BVR5JtbVw!iMPiTQnnx4p{{yI96=XUZrIxQ!CgYTCoc}u!aG}TO zy5AVcdgSHb5Q((XT{=RQ-od|TJ50$(s8u1Zoj-kQGR3YB{{i$n<5&K-IB|Y-DiY`a z0fwR+jjZss(I%GzKh;;;)0EK-eMz$R<-xlZ9%lV|Ize+ihyOZVRn^U3u2?SAo>RxX zB=F#{fQ~&8NmJ~(-~Ps8Mf$-Xt|ekU7>a;j{4I$ZhGygeJgYdRDL?5L9yK?eFJ9A{ z;){67xM$MC*xpO5a{EZno-{d`mjJ4fiDI#Y6sHfu(Ej9F&Z*y2Dfex$~kav>@cx#e5}E(R|>&s-52PZ`w1VQZn%0(8MQ9ZdgFp+ z@AM^XHPGE-u^h`JoJASPyOmBrd(xbnC+(t(vgXrge#|+3^5I4gUDW%JxpaP$u=>qN zw0LDEo{efW^v~pg1J*l!fC^R6FlTcc0yScA&gbIQ;+6uf zHoGnn^1!GQd#qOlJmYeD?LW1}x@ci7{%%6J3o}MW5sCU0`PF2pf>MXw&B_hX5N%L# zT33OSmi$;R0<^&H`*kG5K$BgR1-oGcyCYEMdmk|0$C)>u64pcZryZaRJPwD&o9N#- zW_uu+wa9bnD}i-ibs)xRQbdx}a{uxFdj_93*YX6%MahUiSjYh*HM3Wu>13b_*A<4G5}qa0`-e z^BOe|PNh;8nix4=waOHlcx#&s1n<{5e8E{f3rB={K;IAG@;iewt>-K&z`}f@Z5M3d zY7V9PA@kMIC*tk9?#qKN%!2unY2xHBil_f0jM>#vakz-50xYdnr=d6}cEG@Bt ztxJ})_5ervZxDz#^`3l&;vF!qWt8C|ev73?V;*lclni)}$=#2&CGKd?LwzENVOM^Z zh3&I;6Q5_^+f4HWNLe0AW_CBM*9O8D7<{{AA^%@!NHyK5PV}BuTe`tIw!ZQA7k|Zl zrmb>0)(?}t7Efs$i1zG}8bn`8n5wWSIDbI;K7SQQWC*417k10J@B9IFTxOe-nP?~n;ps;&2$ zk7Pw5C``;c+@jXYzH@muU>?v0#O=EqXfvKWU=+|%wS5ZjvlFg$Mv0%i_{MyNLNo!f zN&Wy#SN;#!><4olL@f%4CzJ>6<~FsHop)I=^va8l?H$KNcL>LvYVnBiQX02j3sWnl z4?y{W6D}*48puS@Qt!Suyxa|^${)cx5(!-t3s`K7;So~)?kNiWLyX8yMYfk_^m;*z zd`fIT{Kml5+tXA`uL=7rVSG{_DLs7XIi%U;!jF0Q917k)U317OV>q=`g!zo=D%3I|>#V3Yvq$&oySC5o z3cxI?Sv_E(55{J8kMZEW+;k8@7GNbH5W8)|9e zK#SfI2^7weY8KhKAH0X$f^eyeW#{-NY9z$^RX{D)7!mf5~$i zmXu!7lvgHEEq>%uoK4h{ma-4~CzP&$J#EHNd^k&{eeYQED5X<%qQBobep5C2K3#90fwAN9~8l(b)vYFeR(J!i!yY>)hMF7wTqbyx2emSF`6@ytF5vaVQcUD^P{w$MuArm zO&~diBAy~5=af+HE!O>#+mWBrjLyQ_Mf_>uewxusYditxP@Dd~^bP`I^}IYF9Kpijt8eNU@WiP`n?3EK@b#D(Z0Nbs2vy*-s< z*T_UTI-lBvq`e7V%=$2?&nK?cZ|=8nNE~19vz#$fGtT~#F6Di1Fq_8lu-%zo-y30y z69p*VmEH|VMa!KOM9TJ+*yH!$jrI&mr7gA74Jw!z%%f*mRY^-28P`DV%JAROdr$%% zC!gO&ov=mch+0BgGbI&UgXzjvxO%wb)Pa?ST%OA<{tyNTQXAe_`5|IhnHio_%Di23 zEIS!8=^o_vfj+DyKL=pkzc>n)k_ zPK}DeX{@wuD@UaI{F^sL{5Hs8lE8Tms`~hW59DMY^sKvRUIvd^uVp>N0gdH+^O@hz zOHGYdZ}=U7Us3SOfX{+*golPengB8I2(kbAa^Y13QR3$7z!M8-sk;T4kL?9weF!UD|vo!BN41WgkMRP=5MQ1 ziE(6)tEKJ&(MTb)14vIl?e-Jft&yPqXUyE}Bp*gQB3{XBS2(8cpJLU#`*8bxd!5x( zs7Y|Ar6XPlXqt+YS?2^>zqH+*HEH!cLGUy;pYjK6vues-E#7WSJ z{VW4t`0@VqxlM;A>@~rZjZR2aB!_(M9~V1q&rGv$#_&@V{l`v*!SlYZt69*+9Njn+9uxS@PHfxi)DB_{F}k>$y5`}o)! zwTj95k%k*L{{U&O^COg&--+bOsn%lR{sx`K0@PE{eD3dqmCh%S-9CGRQ^j9rF0m^I zJo^4knE#iLqGBI}KJ=%WjpsVrvmNXpl{G*TACedfKHTiWTUtO9GdxCU&4}NL9Dn*Z zIt6KN_&mKAM1z8eOL^p(lexHFd1cOxm5CQJ#Z9P}sp9$lAV@5h6@zZ*KE6?6;py)p za5!yG*=DlKJS9Nq<^M7$btYk}2cTnQ%v&#)Dk&DsoCx zyd_E9(TvciyUD>OW=>pv0MJK8I!8`~uyA-V^}V-$bfdZ`7GVU8D2uYyXiY(Z=L^Yg zEH`dQkov4GQD2=v-#=)c4uLH0Shn3$L=VDip(lvJ z-#yn*O}Q5u43J1)n(B~vNu}@zUSwy46Wphz*lj8eJ|r}@{G5zP18T>W>uT5;&GDqj zV1tc{@lJPVb7QERph;G$k`l108|klHykChi^+yjxx1{dBgwq_>W~JtYT6Dq=BBkJ> zfBbBj!g%M|1Ddv1CbqQ>cr+>#9E<)d|0}f;xFY7(H`)gF>_D4MU*K_rf@b6AGWtz1=RBt?71J*Eg>V@QIAx zTTJ$>wC7I`tTHUBC4L`6X&`|ExUwzXp!cDV`=Qx7`?zf0265ZR;m{=giQ44P&rAFD zW(KEqUX^XmZX=1w=n6)P9xbgg^a4|`^=SCK9Fqvct&iFkEKUb2{-P#5iF3TAx%2yP zH0jW*ui(pf;yCtDEK~4$xt}8hA!en0v@+MeUWcX$|NRk;)x+kc_z638mS}tnvJfPj%*r;nSCPe7o4=o@Qpuv0etwZpbjEWmYh z9GUXe+0hmhpdL3F>)e_dWfcdQdm5nLK`HK3Tr%ZA9~aH?^~gG)Q3vD^YZ+#?(-v4n zY|6z}d1vhf8I5%gsX@XXqImVG2?<;unoX!)3KDN)0RYI9=!7{yui+p6;0iC3Vle&d zf;QM~|0=A9C&GoAggJEgcPC+Qa}Uzq4Su%HvmuKm7Q);ufrs~|gb$~#V-)vtJSCx= zcHxZd20DIIq5)|;1r{ux!u02eAVeDVUc85`JIJuehe^2fiFyzPw4TrE^Ukbh>LjwR z1l=mFoB!MnfFbYEv0`w`3Y2LGBH|OAYauj;WdcD5^xzMogL9Myl!pK2L3ZH2X8Md; zB%hE&>&yF*D25F#JKl58&*#N#3sGvUy<@l9HYv(eS3o)nB@Jd=->IQN2$q2Nc-#sv zbQUlkIbSOT2+Ny4%__1Mn-~F`8+xP3K;i#jNZuzvu&hZ-S zubBzZK!T*asFB;SQC6d?;4kp%BHC~YInWTft{fYDIyB~J-#}ua9yDi)eg3v7-WTP~jz4wv==k_QfHsp@ zyo=_D01kq5fX8{mss8#;&qs3k)~E(up76I0sWdeKX7StEw^J=DO@Vnfef^-TvX*>4 ztBivS6~v)LQ1xHjRc1<6he&f!{5v>1(j|Noq|!rDlWSZ!-caJtOh+7OH8Gmy*{`fb zmLJQ!4cePoFPLhNg;i)U7GL!_u6+N2HK!?cie#^65=T7BIdC!+4Y1hiCeYRJ&9|T| z4HkS_=g;EevCb(RjKsrLd z*epmWJeeBQENas2-Y5+4`FXbOkH!heyEr7{=jx8cx&gkBc?2Fknpa(0Q0M&vPIieC zQ+vnM)6L~+Fv`btwf$67%E7EOl@-kLK^67jB0J0rLu)ltROZ)$&%KSSh6i50QNkYx z?bjI)Dc%}U+mQ5jSNp13Qwgw2O_V~ouK|@9D~UvtVE3Wku|}8RfByj8^ieW6Wysw@ zNYhLB)ZrSK-M^~c&H@Y5wOTa@@|1U@TiDO^aX&A@W_X9+AJ@T7AZ$cLr|P|&4`FfG z;QnZnq8`PneX%vkeVg=to|83KWzUJj9VKeaQlcHi@cWIC)KWB}HvSTUisxB1LG;)9@w zcTkq|kE4lHDq2cuPt^Sc5J%<BVi8qZ0q%{goC z=yV9gMpG5E7s7!=*r6DFw`T|6$VnwOO2a;KqbMG|NmGQ`gKni1Q_MN0$fhl10M<2+ zV(Z}(uUgU@d(6eY&|BcOPZz~4?7p>rc_#eDCVV;i$Q>~x7O>-Go{f)cN&!Y2A_wry zleU6oQcJT-flmSUx`pv7KkWef3P4q6sIJa9nHCj);L-C)Gth%X&N_&R2AQsD$MGdP zlwCZ7;&$?$kVsX=no=|4ggyxy!k&e!9%G z8t)N~ss8BzXEBy9O%Ur}45(=5P-Rs>^hz1wR|sA3sY8Ysv2x5WEy}CepTiaSMu6k8 z>MS`0-=Vh*dfT0vad+;NTps7GbP4wge;ePy_5^j4TI|O(5lXwe-f~JP?6}{S!Gt$P z*90`uD$1aG+=Y^O0R3&T;PAGm@9N;}V(wHl(RTgTO1TAr80Ms>KWE1(V2ViZDjX0P z-ZeLaly18{3Bxs({-7_$?EV9ljCx%U*;?O;z_9bGU+%nNap^HS5|p9W>YO-qEO`Mr z?3p^@Z6RP4!ASQG|7BLFfh{xp#=rDVtG|vGl35zt{>5`q4|C#^N1p%eDE6bAKucsk3Qx*3a zwyrGY^%+Ma&l0eY3#lAL$)Iuyn*z#$770j7^2yj8$n_qw zzdr-E{3!5JTmB>w7B^$X(ZH*b#%2_vkLQf2PJIR>f2@|1^WoD}mgt_MqL|0L1x%|0 za(CXCvHkCLcKqah34lgb=7p+#>5cr!YmRaZ5Dtjn3>WcIXWEr+!}%f^SPAfK9# z!jULs9kGoK0Ue|+tH7T)3+gL~6kN00a;I_?7^hGa0 zw88uQ6u&ug>7N2)-+zU>hWm`La)K{5krB>-G72~#EiAOb;imEU`$stGwX`}<7djIF z00qTCpD$#TL|lJTN^@3~zDf5_mpTJr2l8{; zN(PxR(;zbViTH~h)9^y2+Z?0n_czptxK;enJjrpQywn=lcYF-g76^sDGY=YgidG=u zqVi<}X9!uN1o@_*V~q^hcV;0fX1zQoU(gOrQLj6jhcP^WUneYYpl_EwML!~8KUWjk z=3q^}uO5oYHw%|64a3&F&|XGD=6nI506%NA6M%g-ZQzYU5=Qlr(!(CqicgS`@xNcA zxaW$RfUaFFu)39ZSj-V&_B!=*ArzB$zmj7_R4U3n5V;@wndMZxoXjv&wlMhj@zssR zzSy;;oLW?U;Y{5~olLG;$aOt}2Km6K5uV8>&Ms+16Bt$!v5&FY3m-z+v|#qI9~`P|M5#aSJ`EQ%zeyHb~i#^{mwN{<2+$7DL&|AYtmY{Wkw9{i= z2tZI5M;#}oYKkaH)}jjO?7(dnlo*tdSb359ZqU*hT^2*aNWsH;ZU)BVc0%n{BR;L4 z24SrpcBwj|?E@!J(d!tU^PviL(}E066K(QH`>2!g47!eWk!rT%wn+kUWAlg{#jz=o zW~%9w)ax8>nEA&G>TTH@ri!k#o~-5}SID z#DX^rO^!QVp?F|KWVIj8^T0vr7YB&m%fRGIo9og6tRkbYav{61>?DIY?r=akX92qz zHBq0Q>64c2#G%JhyGzc{N%o}DV^iq+97=cbAezn4dLWY{*+T}kToqYV@3u7;Y}_bX zLrYtTggIiGVSO17fT({o%mbinzX-@*P+Ut!b_a?X$NSb`$qpiTSq?q~94myF1@ZfP zHLCaYlbT_`pM2Axc;V!XQ*ss#n}siiD#7)!?mW)5Fm)gfNQ{E`Kb!W;t?Fk^ zHhW*w@;O1z-r&%6U*?9_))aLOH{HnJ3KC-WtZoYV`I1lpf2ybGq?f=_E(iy^RZ3dw zL@#aA?=JT%lzHr|>cK~*ECv(pa7=EZ`D5(68lli@VY~68`C|>t020L>opv)_%Q|=8 z&4xF{Rdd_5!+qxSI>{cBg+djZyAyFdl!|pz{}rPc1o7nzPYz+6+pmUKBdY z1<8rnfD-rTZ}!}V2ELLl%s+;9dAALa000Db0iRB36aR*+q^q!TuDj6TAtDtN89?AO zMA`O&08#ZJ`m__13RkRxs!)I)9`VArz}*#ZLnvO8#Bf(ba)-Gc>*wsFXWew>PM%N}1yu!a~@NQX?u7Fc~4XG+Wny0xNQ$;YM0#Hfs3wHgB zrndJ3hnXwaSKwB)1P1ij10MNZPF+yXMrFV~{gn#e49ho7FYTo12H?$NVEfe$_e-Fn z5TtdxLG*JG!ShF(69W=Cxs)A9@y(u^P|vEUQ9MfnCS)C!Tu%CO(p5Ai@=Ads&i<3$ z;|v!pzDd#3A5pkII`Y;$4qmvTyl*=aJqwZSSZiRO{GOR2F(4qiPgP1(dZn@ps1A%w zTeU)JPSXzy#%OZvR%A^weopQui|C;rM_{_SFp+}fL=})K$Xxfm`d~4X+o4U_vwYB8ZGXfFZX?n{BD|d^5GgfH0H#$XZ(e!= z(DWY+woI-{=))aQX;PXhQQF&XPyjm}Qv~=J734y%x|7hI+g-IFrp zow*xekP7I~Gz36N&Gaf>B{h#8?K04vwxBSCQuGPf!+y5%WU8VpbVo_SD~no-t0k zDG6)as&QJYJ8k;TMJFDD1l=$!)Xbg1JUT}OB8PuXZe4>yD6#w)xIc%jT=nIhv0ZUx zTP4^s=lG?x0u|!gOg;o(YZiH(=t{60NX)pS;;j$4rWtsU0>%2aA(Tj)dSc^&EyiN! z2GS4JsOU7mNU>`LVv4gZ@5#QaY_dZn$LF96=-}zF=H{F7>k~v}RG^A`l?epL-mZWy zq!iz!CP8GOO4G-~XmSU+e8l{5>4##oI8Xop12h4jP;N&5Pg}3okF_f)9j93TY!iPZ z&#CMIT=8Nb=ekP}IV&rn^VA?!pY@#L);&=YPNvD2t5OE-Ke^+-_{b79VA)`Q?p`U6 z{yqx!snwREjcrrnU7q!8Hj>G-qc|yYHz%@Irh5O8o>3VStFg~k+7yoMFkPQ%l~$Mw zbBuP_?t1i^>Z)8Du(VGJ0m7)qhUYr3C4@`#C;^|{!9^AI-i?_+H>T}10J4z70OJKQ zM}X7&g*j@44fpVvq=F{TfZ-P0yaU}9SD0{sg+rYyY~_x`3p{t|Em^w{LQljiIlYcq za>@*4WHC6@VxCS%uf^I#&L^#B#gQL@h&Y>2p`JA30)lYAV=3}u?wWUeTOkxyIAps< zv-sZuk!d?V@uW|y)d&k$Nk#5u3KV2apv$TNx|iF#Mw_ZO3LzMCgG&5%INe-#bjv3P zU{wvbwLARYKA1Mn5}*yZA-+av<*zS6MUf>{U6!6XDqa&zt!lrL&2vnBzX*zF*Qu`< zEtquIR`8&XdVasXf`H`BN;tUwf)kvb^NHvM|JW|)N`B_p0GdZ@&Qy!?v)=WHU>W4- zJA6k0(+>q<1dUr-CxSQXNA7@+IUQ5a2N+QR{08l6CyVZcy$GksF3j2=DK2)A4yu#Y zI|?%4-jJb`Rc|S8w;8p0@1!dG6Tc?Ggf&>pRSrN1henO3i8Y?ocO;OCp^)if&|0z5 z+S8=toSLZ848WoIUv5v96bodf?3+Fqes%n{g^kXbbMp4C6MH^Gy$#a1AVm`NA@ZRz z8KyL*QCNvfEZ)VW`gF*9dA+Y>nWGNv@7%vYLq;2EBrTzRSdbCJbYAjmk-tc-3ylGH zN2oV291yp27uV^#-s#H!&<_QD*_NS-#>h~%AJIdIZi94lh0wo%hP}=Abjo$q{byn? zOu6*E|5xKHUACcEv~jm*I`{>5oVs{D?{TN|&(_XQ(1VbL-2j>xj1f5h7LRqqw|lGf ztdUfGdB=sXGz>xD#?@A)%)JaS1`Fv>d@?@)d0xMUjY9_Hq6GBvSRtta-%aN6P@ z@Rbg*LWiuRNGj_rA1b_;CMoDWBa=@LD?ASVOuXZlaJ|&-&qh4B9>9|<_3OFMNG7nn zN9%_mlyXMxmQokY{91+x6gy_VX+mE6k;{>fSyiO8(Hy6s3uCn^5`Gg^N!0A)kpC5B*b**QQDHIr-hRxA#1b#mbSyWridi0kw- z7=2xc&T(2OC)_G`yztPy$kw4d7?oSyroy5Q@lo6^>Pc-um>prrHGHxfLwVCKqt;;p zLHKr$dg47L**NT}poI*$n;8?iA1&$xmqE_bup_7I?r``NTJWn^+fH5V0AOe9I}QpGS-3;0Wpu$-#Vs?9GBF^6FIxS}wnb9EVF< z@4_r;0N72}B(i4Y^_SSE3j5clcTJR5UAKI+G6iXSlEkSQ1GiR`KXg49!_GOy7<){4 z)_ZDQWA{Ne7)T038if>diXrfjG8>lr$!vA4vxruTz(-R610P8kC%SLK908f8Poe({ zGl0s{r>8O0{l$ApZ)*&}%bls%vklfc2MM+n$#$D;%fl-;J70{)!?0f>p6_b_o0M%~ zBuO(7T4$IYupc?^)Nqw%wMXZil~pw@W=aJM-H)03vWgLE9!#O--r@ zk&(9`FSwXOzSbr1flBM0!G`LmM+y~eI_`z8qyeTlaPlkFb-Aht2l@FsvihWt2r|Yk zVTd$Zw|x}t#F%;;7USOpfTgbCHX>KGCm8zrWtQSDdQ7^c&od?Jcv%PGRl&@aRt4#O zck+cDja;GLQQuqj79cwS*Mg~q2ey!?V*1HjemO5i6McGh`WA+(T$9x0*KO4wz>y$|l|W3bOkG9h!+GGpi-KaP|r}Vq4rB>kd7n#C|UKH~zTl3HX31=o?Q{>#ZIM zMF(kXpJcIg1EtzUQ0+seI3^RUE=#@lKo9Mm83nCVmJ8V_8rP2k{i7v{!2qVKGx%(v zt&u4oX#=16qCcazgCP5r`acC{N1*3-GrK-|XzQhb3+$HJOC-hM)MH)owxu$T+h2I! zBSq$Tzy*YU)y_=EG0#`YnK|H3Y!iY$e6WoyH-d;|ylYa7U%h%rMjoV}cjuUp()Kfz z;a2ub4EK}6uweYMfRw$hr;AlvmzZ+Ahu76EUj47t^jRG@@zRtQ-xbK*AlO<`z|I0j z3I5S{B2E*i~Xr;) zv?5>?6ldLBVt?&W&h8=j&gGIkmzwZ-O{1VBA?u}bMQD2l{)dKRju*) zU0^1@x7p3e?VhUj*h@n+X;6Vtqj^b|I|D}EqO3$8!0f;PA;-JpuRS;55qI=~B&h5= z1p*7R#rjZ^*v{s>EV6z2$!S<63O;Iivgg>2#=I3UN(oZ+IAL}xwMSuJFG8VA_|PkM zlsE%Bqt1bOb4i?)6r+0j@g_RfyEC20ukir<9F}M5mGrt@hPJym|0y?=o;5y<2aW69 z<>G4C+RV}@=8sikK8#*5^6=`U4vUV9kEL8vUh({nY9;Z?nJV!^HtCvWctK*0py~ z^CCplPi;$`lGr0CasUPhLj3I~L1~F8)2p!4Mf9V}(40k>jFA?oq7>0fwLtndNFp-6kEZDmNdoan-R^Rr1& zI4PT?rW~2eYYww@)#S#uT1Ho41BAtxzFiSoxJv1A2T?ibF1+BJYvfmXWs+@@r+LQ< z3ij{iWw@3}7WrjhK1XQgN-tJOsL#qL=p4^$RzMKqCOzm0dyj)n3m#&fM`_;=MxGWL zIVw$vy=S&CO%I~PALJ!;q#jL(`q@AKfD==QcKv9EZ7VzYx|9lnS>SqGZSy5pkS#k@A9B$WlVjyTQs1Ubc#ro&H2QY zi_q2p*R5?jVNWr|`RP$rKz&B`jH<%n`{<5_6}0zi=QF%*77q!N@7KH#xI8%iN*C*su`%U~P_PFRRAWWO&dx6Y~)l4t;$*f^~T5B5EixAcX7+TBZK?IuR z@Yb1m#~3yABpBMAaRQbLA64$vV|eQ^C!T=H2i`Eu-Zf*rTn|c%XrkDMVCdnsLHsf_ zH28$ogW;-mjQkDlj+VaP2i>E`gEvFA*I;e*sqK`LoPwbHKL9Uptl~LD!lsG9S_HCk zgEJV!%ldvF6EiAGLcw**>~4-PC5&r)2Y{XX$ts^dL}HT_LwQC2{U^y}|v6`zl~TQq6OPHJf*S&@(^BLp056_P5jOGSk5Ob6Axd15QMSyiYa%=lSxzsf88nQidZJ>G zKeUmIKu;(TcTQzv9Bk{xuWG^1_%7)hhd}499Kjtx#1BSCZ5;h9(?x#Gq?_(cRWB5Q z=2jfsby~X#{T1u>$F{fVqyV^qP~l8$*kc@I90hnb@E{R-GSOwF$F*0sQQm8|+9maa zAW3$}NE4MV%zZZIel(O^qG-}uW#br}fV?A$rwT%Pbu0_p@vo#Q_{D>}F98(L4B+3J zg<}Mrv;-?x6Ngj6>iKXV5S0)jPclZM2!eA8&tK1TvlM=iFOhP@O&DDXr(U-G!X zeLoX=)x=Cj+Wuc?bfOt4jg6OnE`dLYFI1uoW60maAJ+v2g0|#G71#Ua*qMz$Ef;n& zP1BDxab8F;;{-|?tg@=!Y6jpdu~G$!d0V2_e-1~fF%L!Z!}IL!O)T~*Y?TY9EUv&O z{bkwWdn7}fqdmU-b`KU%>D=3f2Rt9sLCzELSc#Rwz4duXSv@bb+Q2<5`2ZsP+_NHwYiEH%DYo@ z7_-FPc9o{>EQu`aoC%_AFqdPgSg?k=g8H4b!_!Bc}J;| z))S@dU0j$3J5BE(?5t2L#6@Fe-0l0}9BuiBQ4_Y*5Yyc*VYqx=`My|PxO@*oA$3nIsIc%&6_ES z4hsoXNfzaEZ7KVF+Ow~(cKLR?;5@YRSHSQMvAGhltTYr*og@`YzZ|*hpF=ME?;)x> zW1btxB}3(QnQ5aob3(D$PxSSa6Vg!aZLd&`pc)fK&x+0;SL}OMS`KV|ol8GbSnfzq z_wug_)BIj>Otn2QhTFRm!C!RUgL=oOpBOw`gfyh&z0BX}IG9B6O4LG}>*Eio{sV2pQhHW4s(Hlb5WCU4v2O zP7ocu9gg)|A$rr6b>6ykZfI?PBUieid+I^lt!g;@v8G#hGz^()eGi%a_yt^~?DlQd zQbyo`UB$MPy-Nci&dpM7h5|^A3OCNFEq8m}9PgaQI%YB7DvoR?1_VD}EbK2w8*Obq zN3gH9tVniRFk!)~xe!QO^M9oRAqDKiig@#FM{9~E+yGRkV~6`v68zOrzfgLd%a47W z_OPQ|&Mp3c&vE1HguHEEm(-#o<%Wt_?0F~bx!f89NsR_~#Y&q(%sTbGo)E~IsRQg1 z`@%2duZ=v{cPw03(MvL$w=FeFDQZR$O|H_+X|a$x4$zL6Vf8Yte_>S8rHBDra(z{r zPCzp3?|o^>qgEkdFV3^0llzacEF;?(|~cKnwQ@ zo~pdS)|nV@H2@WOy|`$N$*bX8^=LztQvt4Cy&OlzYilG`Q3DYe%l=D|5AEKIq2ua>Hm9D41ax0~J$iWTB zjy_%KP^pG&)U2A?K^nCTI-$&{Ta1hxM^|OX6mSlECkt+`gA-^w5Ju){eU4TQFTY@Q z>VvBMM{<3;r13s7U=F}Kc2l^hD#gFRKEHY6v3q_-L|xA#4P$S3*z%r>soCB0#}7+M z;zA4U;eoGNio)tKp{=U2W|td+J6(|W3?4ARE0$w%O@AGg7({_^+HESoUqk8Vq zgW?|*!ehkcP!^OL->wS<9*v}zY`+a=M(X;^CILT(W1j`Np&J}xBCd@U2t{`vHR?hY zd|_YVb1K5`APPhy6?;7t}*|HrYqjIY}ms(WOb1FeQSaZPe>J|OSoqFjOb-tt@vY9!>gr< zCr%(+c;ZQQ24inoKB~rrb2fNOqK_(4z&EL}Xhh1&k#-%(0@hB7H5Xx%f|?qPDl&sO zb)LFwhrQ$j)0ccvB0}gF)cnRur%v%FPw2mO%4+O`&xJI49{>- zFd^FBC_u)mDlPPDf;{YUM(01tOG4O$Q%+huw;Pw7d`+0{ZySz22j_OUnLyQYpZQSP zz~t`+QbZGA;eu~G4TNOS5`&iqqA#`}_-U{e$6aOI;XyMKd_X$VkL8em} zaOuBe$VNZ$Z8_}z53OK9qj3^XXRZ&lpHMy3#0L8p!Q<{%Wm(dOMK%D1t*7HbT4Q6x z{#r9}y1I|XEXUK7K=*g33$HoPslJoPg<^_4T*tBZ3EL;Q6ViO}T_?6+lJo=VIj6kM z_z~^nF-+olC`ZGrL3uL)@R1k*qY~r>(}LOrpykRi`ej~YWX^84;=GqQl$QZoZ_SAp zE-j9n)&4ArT>jH)PV}9!wr7+eqqaqOP#!4;{r z6*(*IR22QwCi#M^<=pz#;QL;!y5A7t{{K!n7=i#p5_m^~h&|D*jUv6Up8AEOKw%tc zmmn57{YpP%ht64i9?lM_Zyj)ZjT>)4hcD*dCkwM6ONXPvgQ4;a?nvx_%yFrl9jUY z-6ULMO17|d9PYN<<*p`d*z;RpBt3^srLa;#d(A8IKm@r^&!pV|Wnjkm=!9m$AhCqT zIjqe5%5c{3#!Pj@rA$$Qv46YjT?-%XbOF@gwi~Phz@#DxA546LI!Xt%!sHnfJ|}M{ za*@n=Rp49(6zBdkIK$PMMr3BXtd+hd4r}E-tb4fOFM#R4Rc~AOvHc-rRXw{T%yg3OXjY7`@xAWV$<%2bT8M);uQhHFj z+Pd1n1u2#3u)XPRW6a326OeSyBp0;sBRB6=cT%=N=HWw~1jn-s&-fdX$Q|C=(!{}S z;5OHICG7s6Q|~muaQ?GB$<_%|E(zF@mc3mC{a~RgN)-WN*l|)D0qpG&x$!+N zQNszALeNAh<^mQDf5C+Xr8S`)kEEZC3{T%?XQnm?jZzXIG?6ctSUkexAe=4hEK-zH~yXEWDO9! z9MVPldXs{NB?H3T8^*(xiEIop6R{AEY=(I?Ouf zl3;IlyQg7_nM~8G)QXoFLW|K;Xs8FDNUj>;U@a~IQYuL6ipH_Px(Dw3q_&u;PNrhD z6SsOvS?Olh)gXRHaoGC9*X>uqrY_tF-&#}RX3Y(L*vev2gNVZID?Nt8k9`{)5Uk^S zOl7A|cwZnhMXYv}dRT;!9o7|k%zUkuiqwC2HCTGoyEe_`rg=AySy@y;80hX{VF`Oe z$@&qe$5!e2nHUkHS2i5CZ|_WFD`6-lR{Ju~X#-^1uqN3x!Fk9n*Z(1IEbrh#r=bpd z;4LSk#Yi&=3fkxZk-B_LS~`brz~Q^E&(+&03shXKvH7HAQjc*g_OE42&%FRvIss`n zyqE1%+4G(yyJ4Zfx$7Dg+-{iweUo0JT!?JU@I5JldlYV?k~gdPK;cS=Ar7e=`)fox zTjNsrutLzPiMphB4f`DeaJ55*IqNq&@d;~FDkqM+;>__<2=NS9ZH;Wq28s|L4^WGq z-a#bjk?Fvid8jmz8;TD)#Bb%yj~MhhY=*dM1m9t^l_gE!OAFtThO5R%FCw-IVahTi zV^4N!cuUNvE znDLaQIR+jhY;Dpbs;#C!__^!39A(c_?o?9s98q zK6|djC=krH`X!$htA2Xdi3f=l{M~K0^s;SUZd5&68FHmJTj9?wWFzuQ)PL$Mc-Sf4 z3&?TLJ)DNIW5{_>usdytFV=7sC?z$W{L#~}>6b4VuUCR`WnNWf|Eqmd5oj4njbEnl zb79s=Ia3WEY@qVFi9J5LcM0Xo4$kND>-_-O)+)#64`5#i%R{BKkPe(P0A%W)*_6%><}&${$o*Fjg05V1mhWk(M4SOWXyrpO`Iu7&-3CW) ziQWiMsEP==!`=gLL2YHqcLgs@KHmzoE)9j>deqN_%0PO_s$J$Z$?U>mu&eUp$({U1 zMi4;RWF3v5XhBkC(v&{h3`7|^N$nwHe@zUj12(kc4d9awBCi3}RTSk){ch|DP12`= z?*7_vO_^&{2r43Lj%3`05mk>52`?aI;A~BpB_A(jmFLK(2Ku`Qgjh;23-WC0<&0XG zROWXqpZ!P^w?j}tcLvkj2U+`Yn-+?FsoFll?lF0Va2^Z@e?9&~1OreUy(zNz9ZNxf zEN9Eh+!YlzKa#}NWcZ!FFY#Mufi2=yz1zkAxJ})im!?-F zQsH8OZl$`i!O~li!oPKUrKI8RdZ!c&X|fD3Wwttnjw1=W9_ID1p*>|uUfE2Q7v221!v8c-MG@_%v1Q9OAD{*rl1~|Drhu2XZ`~-eOnYk)Kq0RROXa<%PTvwt#Lu4 zVMsM}LAfc930)!@KY&6SrpKZY2Aeua({PT{3>9WMVHI6c0|Iod7(gijVSe3_B@bqR zPp7%g#E7+vJp#ej_+4$<5L$EFPoFgD;ReADJccf^bbDGUya$RTLz7`wrM z3B|3du4u6D!_3KYGj| zH}4&`s}Owhnp<_324}J+*)Da{YZ0r~T2n5)5{wO0i$@2B;N4u(LcGHA(OiaS7z0}k zf^pB+-Y_%x$JcJE)WU7SlEBdLftt z-$YIX+S_iU{JiuqZYVjR#0lB@8IIEQE}3`F=~{JdMs}AL!jH(v%;whN2SB?jH*+yU z8nCyPc7GQq9T5@b%%LJztRO%(Fs=!N8FBR8s8auPlUrLCzpqP3MPa}Xx0BQdrPa|T z7?g{liRZWy2oBF}n4*bsPI#$N(xHTukd?@N(~%q&-oHqQ&!*C3L7bDTo^Ae=yJQs9 zagxjF6S0i7S;_#{B(kFo2gG*TxQhn1oR}k)2bLd}ylLr6&C#-YUBYYhOU_sL1lDcO-dh=S;+5Ek9~*ef+g$#!E?Qo`=ko>L~G z=U9d*sTV4Un`SYV2_%+`3!XO}P%Cg(5T=%JHM}1RMaCrOai9X$O8I*B?CrPFk>K2Y z9A2Pv5*tI1lkh~BLI_8}@D$ZJczi5efVKL(+c97Tu&Kr}pZ z=pYC(IyR?bR&>){LhAIu2fE|%rf#N-;KO?K;}6x6t;rKmTGVi+777;s=~1l-q| zK&fOyB3Eeirq}#SrFD8`RD|7!eL0{PQq8!njluvc<|fUJh%IymY|z5pSlqns0JN+n zoT8Qc#0R)iqeFdrTQl5E?(iy3I@e@vKt6~Jt`=2aS8Mfb7aY2JjoH0uYjTyJoo?|U zB*BgG%0RZGY}F@B+x6`;O>iPAGO?1cRIgU1u$|&n_$v#Pp1(cDTl4;cKaADFJfJvR z{v-?Ap;B(q`gqbKhC<)AcVRA+Z?zGJ1WNk<+weAUmYB_dnuc z6w5GF3ImFsS~>lZ=$N2ReakIZyCU_#%XxWvvAS!*ZP@6JpsOw2h`pl}IAfnV1q5(+fjkc~bH$KJu0bws3om z|Dk;&;4}s_0k`HDMt5aQ$9W%gl-8mPB1K!gYmQj2fCK=gu-VzrW3DUeql`vCM#Bc^ zl07El^FUT0Aww~wS@85qd!71oLK6hTtH42x_}OY(^Ikv8V5BP}oYgdKANi01zy2Wq zV=Dh+N3(h2D9M0hRKasu;#*on{EvLI`<-;ayCQ#(t3i{`fs(Vv8nQ4*wW$aSRj(9F zFdpf^JzftXI6)5Lu@F%bgo=n1ZIVDSxA;yJz%wkESA5h*&10*>vFplATsUHLsgD;F z9Cup`CZgwZ%`eAb+ipn;$TGPw43UJ#GY4{v16BrCfRG0dFMgr7bvnUp0wj|+!f-I^ z4~|r(orP|>tqJWxTzp;qw<8D=j#>OV<=+9(sr{}1d#0N^X&ZK?&;^Pj%low<#GTU` zL6mboxq6IA07vMiQ~@WK!LZqS`q_&?O$^3m2?b#}>G1Hl`~APNIU3#{V&+5Z+FI$u z`>pF^o4FE{i}g8zf9^2@IVt+A++a7Qg;QH<6#A{w_oEr+GVG6u5lb*~G$WW-yUq;K zM^_SG&3$HDQEhEw4&^5)O2(aB70=MbN<0wDpzSaOV6|J$ch*fse4(qdbqZ4}aXGNo zSh%1tHh1Hm+1gghubG@G1oQDHt&eSDf|Al%U}`Q{z%H8WDW7Uj!388(XUc1|X?j7f zIRB=v(@I0HqCMT8eA$^iDacR(rhW*xtSpG1=a#;dlI*>LWLC{RxHLlu4Ut*m_Zcgl zYvB^IbzDhZeE(*B9kM#u~G*2acl-vl4%qFTY1}iXSIB^nc#^_k}c5Q%0Sa+vy~d; z&|Dwm@?N2e;`nmd7LTxb8^7*_o@PyYXDix)xt2Pw0HvU(z# zu^Yw>3Mt-RdFA+x*1o{S7*UwrR!1g@(btgSl~<&7%2+~hN$3ELby6)jSiPl}N|m(j z60Bs^tT;9RtQHwn&kHminUBPTZNt&8aVvu|Uo6xh)e&(!f2UDa&$s2JZ=wezBdgf8 z2pMK9ej979ru0&4YP4^)gWmEi!yj&p6B@D9U!1f_H19FN^B-`(QzN4>-P3LY>MC(DV zIuK5g1Q&s8xC#b&qJvV%9-?}$y^6p+bF2OU&EjP90z@YHO5w#f7VJjQHzDBw+=I)k z84?{9l|w7_IH>!#aICm*ClwX9CI}t>gptY+{=T5^F|TizVsE*mzyx@P3{ApL$V(y1 zYzD4TXK=S)LbAdp*`7hPmd9^_H>eiAH@Gk-=K&MO1;j|um28$3!afc3Fcp36eZxhz zxeoN?7l(*5>bO^2&TXZ*rhU&4w%G>;k@}s170?ccNwX{7#XfMur>Cb{oJX&XQd`({ ze65DKQB;vM+(!OE3D}2_(u8aRscrXG@p`1lA>}pk6ElTRjx&Y_snY6b1g5t*Mk>fB*mj@ByEcZcqR2 zi#pEO`YtX!)la+a3N5u9LqB)PILz4GfpGs;R$C$@-ef{6G!IX;GjrFI^Q-b5*R2y& z?wx<6Z|pkI3G_HFBHmt|ec7G*`%4$#{YNJ+ERrXq_ZZVP*-pe`aHHt#mQD&D25dr` z;d=dffKdJ|1@cNZ&mJ6JXQiJM%%0l^-cZ4+D`TmW?;z{dw9NSfjw%VB@6bDY#+%7Q zr^xb8$Nw;ojCg~KtC@6(>I|1XSQVNyU@~WRpz2Yn(h>9Adhc(|+ujD0Nl0Ix(m~|R zckU^0R9LI@dSOj)AcG%eJm)b$rrTwZu8Q~6fgW|OnsDIqtBSG-f&7L{he(Y$sCD@b zQys&zJ)_g;Qgjfw>QoKbN1A%0DQO+>dA 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

    +
    ); diff --git a/new-ui/src/shared/components/QrCard/style.scss b/new-ui/src/shared/components/QrCard/style.scss index 93aa1d3c9..723ddd7f5 100644 --- a/new-ui/src/shared/components/QrCard/style.scss +++ b/new-ui/src/shared/components/QrCard/style.scss @@ -2,4 +2,8 @@ background-color: var(--bg-white-100); border-radius: var(--radius-lg); padding: var(--spacing-md); + flex-grow: 0; + display: flex; + flex-flow: row; + align-items: center; } diff --git a/new-ui/src/shared/edge-api/api.ts b/new-ui/src/shared/edge-api/api.ts index 0846187a9..16a65dc8c 100644 --- a/new-ui/src/shared/edge-api/api.ts +++ b/new-ui/src/shared/edge-api/api.ts @@ -56,7 +56,8 @@ const createDevice = async ( ): Promise<{ error?: string }> => { const edgeHeaders = await getEdgeRequestHeaders(); const { publicKey, privateKey } = generateWGKeys(); - const deviceRes = await fetch(`${proxyUrl}/enrollment/create_device`, { + const url = buildProxyUrl(proxyUrl); + const deviceRes = await fetch(`${url}/enrollment/create_device`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -126,11 +127,7 @@ const addInstance = async (values: AddInstanceRequest): Promise; diff --git a/new-ui/src/shared/hooks/modalControls/modalsSubjects.ts b/new-ui/src/shared/hooks/modalControls/modalsSubjects.ts new file mode 100644 index 000000000..14e507327 --- /dev/null +++ b/new-ui/src/shared/hooks/modalControls/modalsSubjects.ts @@ -0,0 +1,53 @@ +import { filter, Subject, type Subscription } from 'rxjs'; +import type { ModalNameValue, ModalOpenEvent } from './modalTypes'; + +export const openModalSubject = new Subject(); + +export const closeModalSubject = new Subject(); + +export function subscribeOpenModal( + name: N, + handler: Extract extends { data: infer D } + ? (data: D) => void + : () => void, +): Subscription { + return openModalSubject + .pipe(filter((e): e is Extract => e.name === name)) + .subscribe((e) => { + if ('data' in e) (handler as (d: unknown) => void)(e.data); + else (handler as () => void)(); + }); +} + +export const subscribeCloseModal = ( + name: N, + handler: () => void, +) => { + return closeModalSubject.pipe(filter((e) => e === name)).subscribe(() => handler()); +}; + +export const closeModal = (name: T) => { + closeModalSubject.next(name); +}; + +type PayloadOf = + Extract extends { + data: infer D; + } + ? D + : undefined; + +export function openModal( + name: N, + ...args: PayloadOf extends undefined ? [] : [PayloadOf] +) { + const event = ( + args.length === 0 ? { name } : { name, data: args[0] } + ) as ModalOpenEvent; + + // blur whatever right now has focus + const activeElement = document.activeElement as HTMLElement | null; + activeElement?.blur(); + + openModalSubject.next(event); +} diff --git a/new-ui/src/shared/providers/TauriEventProvider.tsx b/new-ui/src/shared/providers/TauriEventProvider.tsx index b7304341e..e9c1f4184 100644 --- a/new-ui/src/shared/providers/TauriEventProvider.tsx +++ b/new-ui/src/shared/providers/TauriEventProvider.tsx @@ -18,6 +18,7 @@ export const TauriEventProvider = ({ children }: PropsWithChildren) => { useEffect(() => { const unlisteners = Promise.all([ listen(TauriEvent.AddInstance, (event) => { + console.log('[TauriEvent] AddInstance', event.payload); const windowLabel = getCurrentWindow().label; if (windowLabel === WindowId.FullView) { const { token, url } = event.payload; @@ -30,7 +31,8 @@ export const TauriEventProvider = ({ children }: PropsWithChildren) => { }); } }), - listen(TauriEvent.ConnectionChanged, () => { + listen(TauriEvent.ConnectionChanged, (event) => { + console.log('[TauriEvent] ConnectionChanged', event.payload); void queryClient.invalidateQueries({ queryKey: ['alive-connection'] }); void queryClient.invalidateQueries({ queryKey: ['active-connection'] }); void queryClient.invalidateQueries({ queryKey: ['locations'] }); @@ -39,30 +41,35 @@ export const TauriEventProvider = ({ children }: PropsWithChildren) => { void queryClient.invalidateQueries({ queryKey: ['last-connection'] }); }), - listen(TauriEvent.InstanceUpdate, () => { + listen(TauriEvent.InstanceUpdate, (event) => { + console.log('[TauriEvent] InstanceUpdate', event.payload); void queryClient.invalidateQueries({ queryKey: ['instances'] }); void queryClient.invalidateQueries({ queryKey: ['locations'] }); void queryClient.invalidateQueries({ queryKey: ['has-any-visible-locations'] }); }), - listen(TauriEvent.LocationUpdate, () => { + listen(TauriEvent.LocationUpdate, (event) => { + console.log('[TauriEvent] LocationUpdate', event.payload); void queryClient.invalidateQueries({ queryKey: ['locations'] }); void queryClient.invalidateQueries({ queryKey: ['location-details'] }); void queryClient.invalidateQueries({ queryKey: ['has-any-visible-locations'] }); }), - listen(TauriEvent.AppVersionFetch, () => { + listen(TauriEvent.AppVersionFetch, (event) => { + console.log('[TauriEvent] AppVersionFetch', event.payload); void queryClient.invalidateQueries({ queryKey: ['latest-app-version'] }); }), - listen(TauriEvent.ConfigChanged, () => { + listen(TauriEvent.ConfigChanged, (event) => { + console.log('[TauriEvent] ConfigChanged', event.payload); void queryClient.invalidateQueries({ queryKey: ['settings'] }); void queryClient.invalidateQueries({ queryKey: ['provisioning-config'] }); void queryClient.invalidateQueries({ queryKey: ['instances'] }); void queryClient.invalidateQueries({ queryKey: ['has-any-visible-locations'] }); }), - listen(TauriEvent.DeadConnectionDropped, () => { + listen(TauriEvent.DeadConnectionDropped, (event) => { + console.log('[TauriEvent] DeadConnectionDropped', event.payload); void queryClient.invalidateQueries({ queryKey: ['alive-connection'] }); void queryClient.invalidateQueries({ queryKey: ['active-connection'] }); void queryClient.invalidateQueries({ queryKey: ['locations'] }); @@ -71,7 +78,8 @@ export const TauriEventProvider = ({ children }: PropsWithChildren) => { listen( TauriEvent.DeadConnectionReconnected, - () => { + (event) => { + console.log('[TauriEvent] DeadConnectionReconnected', event.payload); void queryClient.invalidateQueries({ queryKey: ['alive-connection'] }); void queryClient.invalidateQueries({ queryKey: ['active-connection'] }); void queryClient.invalidateQueries({ queryKey: ['locations'] }); @@ -79,15 +87,18 @@ export const TauriEventProvider = ({ children }: PropsWithChildren) => { }, ), - listen(TauriEvent.ApplicationConfigChanged, () => { + listen(TauriEvent.ApplicationConfigChanged, (event) => { + console.log('[TauriEvent] ApplicationConfigChanged', event.payload); void queryClient.invalidateQueries({ queryKey: ['settings'] }); }), - listen(TauriEvent.AddInstance, () => { + listen(TauriEvent.AddInstance, (event) => { + console.log('[TauriEvent] AddInstance (instances invalidation)', event.payload); void queryClient.invalidateQueries({ queryKey: ['instances'] }); }), - listen(TauriEvent.UuidMismatch, () => { + listen(TauriEvent.UuidMismatch, (event) => { + console.log('[TauriEvent] UuidMismatch', event.payload); void queryClient.invalidateQueries({ queryKey: ['instances'] }); }), ]); diff --git a/new-ui/src/shared/scss/_shared_tokens.scss b/new-ui/src/shared/scss/_shared_tokens.scss index 5ba876149..dcea8f428 100644 --- a/new-ui/src/shared/scss/_shared_tokens.scss +++ b/new-ui/src/shared/scss/_shared_tokens.scss @@ -211,7 +211,7 @@ $jetbrains: --modal-title-size: 16px; --modal-size-md: 640px; - --modal-size-sm: 480px; + --modal-size-sm: 360px; --modal-spacing: var(--spacing-md); --modal-spacing-sides: var(--spacing-lg); --modal-border-radius: var(--radius-lg); From f902543f338d494a6938931b8b16a0b58458257c Mon Sep 17 00:00:00 2001 From: Aleksander <170264518+t-aleksander@users.noreply.github.com> Date: Mon, 15 Jun 2026 12:09:16 +0200 Subject: [PATCH 041/155] [New UI] Updates view (#957) --- new-ui/package.json | 1 + new-ui/pnpm-lock.yaml | 678 ++++++++++++++++++ new-ui/pnpm-workspace.yaml | 1 + .../src/pages/full/UpdatePage/UpdatePage.tsx | 80 +++ .../UpdatePage/assets/banner_up_to_date.png | Bin 0 -> 22745 bytes .../assets/banner_update_available.png | Bin 0 -> 363983 bytes new-ui/src/pages/full/UpdatePage/style.scss | 48 ++ new-ui/src/routeTree.gen.ts | 21 + new-ui/src/routes/full/_default/update.tsx | 6 + new-ui/src/shared/hooks/useUpdateAvailable.ts | 19 + .../FullViewNavigation/FullViewNavigation.tsx | 33 +- .../components/NavBadge.tsx | 12 + .../components/FullViewNavigation/style.scss | 9 + .../shared/layouts/FullPageLayout/style.scss | 3 +- new-ui/src/shared/rust-api/types.ts | 1 + new-ui/src/shared/utils/compareVersions.ts | 19 + 16 files changed, 920 insertions(+), 11 deletions(-) create mode 100644 new-ui/src/pages/full/UpdatePage/UpdatePage.tsx create mode 100644 new-ui/src/pages/full/UpdatePage/assets/banner_up_to_date.png create mode 100644 new-ui/src/pages/full/UpdatePage/assets/banner_update_available.png create mode 100644 new-ui/src/pages/full/UpdatePage/style.scss create mode 100644 new-ui/src/routes/full/_default/update.tsx create mode 100644 new-ui/src/shared/hooks/useUpdateAvailable.ts create mode 100644 new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/components/NavBadge.tsx create mode 100644 new-ui/src/shared/utils/compareVersions.ts diff --git a/new-ui/package.json b/new-ui/package.json index 6e7fc18e5..e8fe0db53 100644 --- a/new-ui/package.json +++ b/new-ui/package.json @@ -39,6 +39,7 @@ "react": "^19.2.7", "react-chartjs-2": "^5.3.1", "react-dom": "^19.2.7", + "react-markdown": "^10.1.0", "rxjs": "^7.8.2", "sass": "^1.100.0", "zod": "^4.4.3", diff --git a/new-ui/pnpm-lock.yaml b/new-ui/pnpm-lock.yaml index b47a47dd2..9793cab86 100644 --- a/new-ui/pnpm-lock.yaml +++ b/new-ui/pnpm-lock.yaml @@ -86,6 +86,9 @@ importers: react-dom: specifier: ^19.2.7 version: 19.2.7(react@19.2.7) + react-markdown: + specifier: ^10.1.0 + version: 10.1.0(@types/react@19.2.17)(react@19.2.7) rxjs: specifier: ^7.8.2 version: 7.8.2 @@ -869,6 +872,24 @@ packages: '@types/byte-size@8.1.2': resolution: {integrity: sha512-jGyVzYu6avI8yuqQCNTZd65tzI8HZrLjKX9sdMqZrGWVlNChu0rf6p368oVEDCYJe5BMx2Ov04tD1wqtgTwGSA==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@25.9.3': resolution: {integrity: sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==} @@ -880,6 +901,12 @@ packages: '@types/react@19.2.17': resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@uidotdev/usehooks@2.4.1': resolution: {integrity: sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg==} engines: {node: '>=16'} @@ -887,6 +914,9 @@ packages: react: '>=18.0.0' react-dom: '>=18.0.0' + '@ungap/structured-clone@1.3.1': + resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} + '@vitejs/plugin-react@6.0.2': resolution: {integrity: sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -936,6 +966,9 @@ packages: babel-dead-code-elimination@1.0.12: resolution: {integrity: sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==} + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + baseline-browser-mapping@2.10.35: resolution: {integrity: sha512-honAfLBde0HAFLdNyBEfuuENkF6zR+ozxqxa/2zJKHBe1qzLqyTSeRKpdPEHAP03rlDGyQOPnCSxnVpVqQo9Mg==} engines: {node: '>=6.0.0'} @@ -969,10 +1002,25 @@ packages: caniuse-lite@1.0.30001797: resolution: {integrity: sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w==} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chalk@5.6.2: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chart.js@4.5.1: resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} engines: {pnpm: '>=8'} @@ -995,6 +1043,9 @@ packages: colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -1038,10 +1089,20 @@ packages: supports-color: optional: true + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + diff@8.0.4: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} @@ -1063,6 +1124,12 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1163,6 +1230,12 @@ packages: resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==} engines: {node: '>=20'} + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hookified@1.15.1: resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==} @@ -1173,6 +1246,9 @@ packages: resolution: {integrity: sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==} engines: {node: '>=20.10'} + html-url-attributes@3.0.1: + resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} + ignore@7.0.5: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} @@ -1190,9 +1266,21 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1205,6 +1293,9 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -1213,6 +1304,10 @@ packages: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} @@ -1344,6 +1439,9 @@ packages: lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -1353,6 +1451,30 @@ packages: mathml-tag-names@4.0.0: resolution: {integrity: sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==} + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} @@ -1364,6 +1486,69 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -1419,6 +1604,9 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -1471,6 +1659,9 @@ packages: engines: {node: '>=14'} hasBin: true + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} + qified@0.10.1: resolution: {integrity: sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==} engines: {node: '>=20'} @@ -1498,6 +1689,12 @@ packages: peerDependencies: react: ^19.2.7 + react-markdown@10.1.0: + resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==} + peerDependencies: + '@types/react': '>=18' + react: '>=18' + react@19.2.7: resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} engines: {node: '>=0.10.0'} @@ -1506,6 +1703,12 @@ packages: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -1571,6 +1774,9 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -1579,6 +1785,9 @@ packages: resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} engines: {node: '>=20'} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1587,6 +1796,12 @@ packages: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + stylelint-config-recommended-scss@17.0.1: resolution: {integrity: sha512-x5DVehzJudcwF0od3sGpgkln2PLLranFE7twwbp7dqDINCyZvwzFkMc6TLhNOvazRiVBJYATQLouJY0xPGB8WA==} engines: {node: '>=20'} @@ -1656,6 +1871,12 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -1671,6 +1892,24 @@ packages: resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} engines: {node: '>=20'} + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + unplugin@3.0.0: resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1689,6 +1928,12 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite@8.0.16: resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1779,6 +2024,9 @@ packages: use-sync-external-store: optional: true + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: '@babel/code-frame@7.29.7': @@ -2413,6 +2661,26 @@ snapshots: '@types/byte-size@8.1.2': {} + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.9 + + '@types/estree@1.0.9': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/ms@2.1.0': {} + '@types/node@25.9.3': dependencies: undici-types: 7.24.6 @@ -2425,11 +2693,17 @@ snapshots: dependencies: csstype: 3.2.3 + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + '@uidotdev/usehooks@2.4.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: react: 19.2.7 react-dom: 19.2.7(react@19.2.7) + '@ungap/structured-clone@1.3.1': {} + '@vitejs/plugin-react@6.0.2(vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.100.0))': dependencies: '@rolldown/pluginutils': 1.0.1 @@ -2474,6 +2748,8 @@ snapshots: transitivePeerDependencies: - supports-color + bail@2.0.2: {} + baseline-browser-mapping@2.10.35: {} braces@3.0.3: @@ -2502,8 +2778,18 @@ snapshots: caniuse-lite@1.0.30001797: {} + ccount@2.0.1: {} + chalk@5.6.2: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + chart.js@4.5.1: dependencies: '@kurkle/color': 0.3.4 @@ -2522,6 +2808,8 @@ snapshots: colord@2.9.3: {} + comma-separated-tokens@2.0.3: {} + convert-source-map@2.0.0: {} cookie-es@3.1.1: {} @@ -2552,8 +2840,18 @@ snapshots: dependencies: ms: 2.1.3 + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + + dequal@2.0.3: {} + detect-libc@2.1.2: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + diff@8.0.4: {} electron-to-chromium@1.5.371: {} @@ -2568,6 +2866,10 @@ snapshots: escalade@3.2.0: {} + estree-util-is-identifier-name@3.0.0: {} + + extend@3.0.2: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -2657,12 +2959,38 @@ snapshots: dependencies: hookified: 1.15.1 + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + hookified@1.15.1: {} hookified@2.2.0: {} html-tags@5.1.0: {} + html-url-attributes@3.0.1: {} + ignore@7.0.5: {} immutable@5.1.6: {} @@ -2676,8 +3004,19 @@ snapshots: ini@1.3.8: {} + inline-style-parser@0.2.7: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + is-arrayish@0.2.1: {} + is-decimal@2.0.1: {} + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -2686,10 +3025,14 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-hexadecimal@2.0.1: {} + is-number@7.0.0: {} is-path-inside@4.0.0: {} + is-plain-obj@4.1.0: {} + is-plain-object@5.0.0: {} isbot@5.1.42: {} @@ -2778,6 +3121,8 @@ snapshots: lodash.truncate@4.4.2: {} + longest-streak@3.1.0: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -2788,12 +3133,234 @@ snapshots: mathml-tag-names@4.0.0: {} + mdast-util-from-markdown@2.0.3: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.1 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdn-data@2.27.1: {} meow@14.1.0: {} merge2@1.4.1: {} + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -2858,6 +3425,16 @@ snapshots: dependencies: callsites: 3.1.0 + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.29.7 @@ -2900,6 +3477,8 @@ snapshots: prettier@3.8.4: {} + property-information@7.2.0: {} + qified@0.10.1: dependencies: hookified: 2.2.0 @@ -2922,10 +3501,45 @@ snapshots: react: 19.2.7 scheduler: 0.27.0 + react-markdown@10.1.0(@types/react@19.2.17)(react@19.2.7): + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/react': 19.2.17 + devlop: 1.1.0 + hast-util-to-jsx-runtime: 2.3.6 + html-url-attributes: 3.0.1 + mdast-util-to-hast: 13.2.1 + react: 19.2.7 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + unified: 11.0.5 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + react@19.2.7: {} readdirp@5.0.0: {} + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + require-from-string@2.0.2: {} resolve-from@4.0.0: {} @@ -2993,6 +3607,8 @@ snapshots: source-map-js@1.2.1: {} + space-separated-tokens@2.0.2: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -3004,6 +3620,11 @@ snapshots: get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -3012,6 +3633,14 @@ snapshots: dependencies: ansi-regex: 6.2.2 + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + stylelint-config-recommended-scss@17.0.1(postcss@8.5.15)(stylelint@17.13.0(typescript@6.0.3)): dependencies: postcss-scss: 4.0.9(postcss@8.5.15) @@ -3122,6 +3751,10 @@ snapshots: dependencies: is-number: 7.0.0 + trim-lines@3.0.1: {} + + trough@2.2.0: {} + tslib@2.8.1: {} typescript@6.0.3: {} @@ -3130,6 +3763,39 @@ snapshots: unicorn-magic@0.4.0: {} + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + unplugin@3.0.0: dependencies: '@jridgewell/remapping': 2.3.5 @@ -3148,6 +3814,16 @@ snapshots: util-deprecate@1.0.2: {} + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + vite@8.0.16(@types/node@25.9.3)(jiti@2.7.0)(sass@1.100.0): dependencies: lightningcss: 1.32.0 @@ -3182,3 +3858,5 @@ snapshots: '@types/react': 19.2.17 react: 19.2.7 use-sync-external-store: 1.6.0(react@19.2.7) + + zwitch@2.0.4: {} diff --git a/new-ui/pnpm-workspace.yaml b/new-ui/pnpm-workspace.yaml index 0bae63d7f..6e2543d30 100644 --- a/new-ui/pnpm-workspace.yaml +++ b/new-ui/pnpm-workspace.yaml @@ -1,6 +1,7 @@ allowBuilds: '@parcel/watcher': true minimumReleaseAgeExclude: + - '@napi-rs/wasm-runtime@1.1.5' - '@types/react@19.2.16' - react-dom@19.2.7 - react@19.2.7 diff --git a/new-ui/src/pages/full/UpdatePage/UpdatePage.tsx b/new-ui/src/pages/full/UpdatePage/UpdatePage.tsx new file mode 100644 index 000000000..cf0fb8100 --- /dev/null +++ b/new-ui/src/pages/full/UpdatePage/UpdatePage.tsx @@ -0,0 +1,80 @@ +import './style.scss'; +import { useQuery } from '@tanstack/react-query'; +import { openUrl } from '@tauri-apps/plugin-opener'; +import Markdown from 'react-markdown'; +import { Button } from '../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../shared/components/Button/types'; +import { Divider } from '../../../shared/components/Divider/Divider'; +import { IconKind } from '../../../shared/components/Icon'; +import { SizedBox } from '../../../shared/components/SizedBox/SizedBox'; +import { useUpdateAvailable } from '../../../shared/hooks/useUpdateAvailable'; +import { FullPage } from '../../../shared/layouts/FullPage/FullPage'; +import { getLatestAppVersionQueryOptions } from '../../../shared/rust-api/query'; +import type { NewAppVersionInfo } from '../../../shared/rust-api/types'; +import { ThemeSpacing } from '../../../shared/types'; +import { isPresent } from '../../../shared/utils/isPresent'; +import upToDateBannerSrc from './assets/banner_up_to_date.png'; +import updateAvailableBannerSrc from './assets/banner_update_available.png'; + +const UpdateAvailable = ({ info }: { info: NewAppVersionInfo }) => ( + <> +

    New {info.version} version is available.

    + +

    + We're preparing a new version of the desktop VPN client with a focus on performance, + stability, and everyday usability. These improvements are based on user feedback and + internal testing to make your connection faster, safer, and easier to manage. +

    + +
    +
    + {isPresent(info.notes) && ( + <> + +
    + {info.notes} +
    + + )} + +); + +const UpToDate = () => ( + <> +

    You're up to date!

    + +

    + You are currently using the latest version of the application. +
    + There are no new updates available at this time. +

    + +); + +export const UpdatePage = () => { + const { data: latest } = useQuery(getLatestAppVersionQueryOptions); + const updateAvailable = useUpdateAvailable(); + + return ( + + + + {updateAvailable && latest ? : } + + ); +}; diff --git a/new-ui/src/pages/full/UpdatePage/assets/banner_up_to_date.png b/new-ui/src/pages/full/UpdatePage/assets/banner_up_to_date.png new file mode 100644 index 0000000000000000000000000000000000000000..27207b357c9eed4e4b29d642fd6113b06ee56566 GIT binary patch literal 22745 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 Ca6k!Ss=)kImcs6l@>iHm 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%0AY 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 FullRoute, } as any) +const FullDefaultUpdateRoute = FullDefaultUpdateRouteImport.update({ + id: '/update', + path: '/update', + getParentRoute: () => FullDefaultRoute, +} as any) const FullDefaultSupportRoute = FullDefaultSupportRouteImport.update({ id: '/support', path: '/support', @@ -99,6 +105,7 @@ export interface FileRoutesByFullPath { '/playground/': typeof PlaygroundIndexRoute '/full/overview': typeof FullDefaultOverviewRoute '/full/support': typeof FullDefaultSupportRoute + '/full/update': typeof FullDefaultUpdateRoute '/full/add/instance': typeof FullDefaultAddInstanceRoute '/full/add/': typeof FullDefaultAddIndexRoute } @@ -112,6 +119,7 @@ export interface FileRoutesByTo { '/playground': typeof PlaygroundIndexRoute '/full/overview': typeof FullDefaultOverviewRoute '/full/support': typeof FullDefaultSupportRoute + '/full/update': typeof FullDefaultUpdateRoute '/full/add/instance': typeof FullDefaultAddInstanceRoute '/full/add': typeof FullDefaultAddIndexRoute } @@ -128,6 +136,7 @@ export interface FileRoutesById { '/playground/': typeof PlaygroundIndexRoute '/full/_default/overview': typeof FullDefaultOverviewRoute '/full/_default/support': typeof FullDefaultSupportRoute + '/full/_default/update': typeof FullDefaultUpdateRoute '/full/_default/add/instance': typeof FullDefaultAddInstanceRoute '/full/_default/add/': typeof FullDefaultAddIndexRoute } @@ -144,6 +153,7 @@ export interface FileRouteTypes { | '/playground/' | '/full/overview' | '/full/support' + | '/full/update' | '/full/add/instance' | '/full/add/' fileRoutesByTo: FileRoutesByTo @@ -157,6 +167,7 @@ export interface FileRouteTypes { | '/playground' | '/full/overview' | '/full/support' + | '/full/update' | '/full/add/instance' | '/full/add' id: @@ -172,6 +183,7 @@ export interface FileRouteTypes { | '/playground/' | '/full/_default/overview' | '/full/_default/support' + | '/full/_default/update' | '/full/_default/add/instance' | '/full/_default/add/' fileRoutesById: FileRoutesById @@ -249,6 +261,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof FullDefaultRouteImport parentRoute: typeof FullRoute } + '/full/_default/update': { + id: '/full/_default/update' + path: '/update' + fullPath: '/full/update' + preLoaderRoute: typeof FullDefaultUpdateRouteImport + parentRoute: typeof FullDefaultRoute + } '/full/_default/support': { id: '/full/_default/support' path: '/support' @@ -283,6 +302,7 @@ declare module '@tanstack/react-router' { interface FullDefaultRouteChildren { FullDefaultOverviewRoute: typeof FullDefaultOverviewRoute FullDefaultSupportRoute: typeof FullDefaultSupportRoute + FullDefaultUpdateRoute: typeof FullDefaultUpdateRoute FullDefaultAddInstanceRoute: typeof FullDefaultAddInstanceRoute FullDefaultAddIndexRoute: typeof FullDefaultAddIndexRoute } @@ -290,6 +310,7 @@ interface FullDefaultRouteChildren { const FullDefaultRouteChildren: FullDefaultRouteChildren = { FullDefaultOverviewRoute: FullDefaultOverviewRoute, FullDefaultSupportRoute: FullDefaultSupportRoute, + FullDefaultUpdateRoute: FullDefaultUpdateRoute, FullDefaultAddInstanceRoute: FullDefaultAddInstanceRoute, FullDefaultAddIndexRoute: FullDefaultAddIndexRoute, } diff --git a/new-ui/src/routes/full/_default/update.tsx b/new-ui/src/routes/full/_default/update.tsx new file mode 100644 index 000000000..56697e9d6 --- /dev/null +++ b/new-ui/src/routes/full/_default/update.tsx @@ -0,0 +1,6 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { UpdatePage } from '../../../pages/full/UpdatePage/UpdatePage'; + +export const Route = createFileRoute('/full/_default/update')({ + component: UpdatePage, +}); diff --git a/new-ui/src/shared/hooks/useUpdateAvailable.ts b/new-ui/src/shared/hooks/useUpdateAvailable.ts new file mode 100644 index 000000000..b4ce5f2a2 --- /dev/null +++ b/new-ui/src/shared/hooks/useUpdateAvailable.ts @@ -0,0 +1,19 @@ +import { useQuery } from '@tanstack/react-query'; +import { getVersion } from '@tauri-apps/api/app'; + +import { getLatestAppVersionQueryOptions } from '../rust-api/query'; +import { isVersionGreater } from '../utils/compareVersions'; + +export const useUpdateAvailable = (): boolean => { + const { data: latest } = useQuery(getLatestAppVersionQueryOptions); + const { data: currentVersion } = useQuery({ + queryKey: ['app-version'] as const, + queryFn: () => getVersion(), + }); + + return ( + latest !== undefined && + currentVersion !== undefined && + isVersionGreater(latest.version, currentVersion) + ); +}; diff --git a/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/FullViewNavigation.tsx b/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/FullViewNavigation.tsx index e4c78e339..ce3602a6d 100644 --- a/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/FullViewNavigation.tsx +++ b/new-ui/src/shared/layouts/FullPageLayout/components/FullViewNavigation/FullViewNavigation.tsx @@ -1,24 +1,36 @@ import { Link, type LinkProps } from '@tanstack/react-router'; -import { useMemo } from 'react'; +import { type ReactNode, useMemo } from 'react'; import { Icon, IconKind } from '../../../../components/Icon'; import type { IconKindValue } from '../../../../components/Icon/icon-types'; +import { useUpdateAvailable } from '../../../../hooks/useUpdateAvailable'; import { useAppData } from '../../../../providers/AppDataContext'; +import { NavBadge } from './components/NavBadge'; import './style.scss'; type NavItemDef = LinkProps & { icon: IconKindValue; hidden?: boolean; + badge?: ReactNode; }; -const BOTTOM_LINKS: NavItemDef[] = [ - { - icon: IconKind.Report, - to: '/full/support', - }, -]; - export const FullViewNavigation = () => { const { isEmpty } = useAppData(); + const updateAvailable = useUpdateAvailable(); + + const bottomLinks: NavItemDef[] = useMemo( + (): NavItemDef[] => [ + { + icon: IconKind.Refresh, + to: '/full/update', + badge: updateAvailable ? : undefined, + }, + { + icon: IconKind.Report, + to: '/full/support', + }, + ], + [updateAvailable], + ); const topLinks: NavItemDef[] = useMemo( (): NavItemDef[] => [ @@ -46,7 +58,7 @@ export const FullViewNavigation = () => { ))}

    C^i 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 z%0A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 GgS$C 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

    =%^{)$hpH*{#q?+x7b9aaCP^1|t$ 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 LKQGCzPybs0j|xdv literal 0 HcmV?d00001 diff --git a/new-ui/public/fonts/jetbrains_mono/JetBrainsMono-Medium.woff2 b/new-ui/public/fonts/jetbrains_mono/JetBrainsMono-Medium.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..669d04cdf2d841e79bbf13d46d90e280ecbfe82d GIT binary patch literal 93824 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 c7tX`3Y{L39dc2U}a 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 literal 0 HcmV?d00001 diff --git a/new-ui/public/fonts/jetbrains_mono/JetBrainsMono-MediumItalic.woff2 b/new-ui/public/fonts/jetbrains_mono/JetBrainsMono-MediumItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..80cfd15e00940e3262a9b174f09b1df2617e6027 GIT binary patch literal 97808 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˘|$1zZzD3QGMB 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