From 5c2dca1c51cd19fa347054076e4bf8986744c537 Mon Sep 17 00:00:00 2001 From: Hampus Date: Mon, 31 Aug 2026 04:43:20 +0200 Subject: [PATCH] chore(workspace): tighten quality gates (#2230) --- .devcontainer/Dockerfile | 2 +- .devcontainer/verify.sh | 14 +- .github/workflows/tests.yaml | 47 +- Cargo.lock | 445 +- deny.toml | 49 +- fluxer_admin/Cargo.toml | 2 +- .../channel/services/DMPermissionValidator.ts | 3 +- .../tests/AttachmentUploadValidation.test.ts | 26 +- .../PostgresKvQueryDifferential.test.ts | 21 +- .../database/PostgresKvUpgradeSafety.test.ts | 64 +- .../services/data/GuildOperationsService.ts | 4 +- .../infrastructure/StorageObjectHelpers.ts | 2 - .../tests/ConcurrencyLimitMiddleware.test.ts | 124 +- .../tests/ResponseTypeMiddleware.test.ts | 23 +- fluxer_api/src/api/search/SearchNsfwUtils.ts | 3 +- .../stripe/tests/StripeWebhookRefund.test.ts | 21 + .../user/services/UserRelationshipService.ts | 8 +- fluxer_app/package.json | 2 +- fluxer_app/rust/libfluxcore/Cargo.lock | 4 +- fluxer_app/scripts/GenerateEmojiSprites.ts | 4 +- .../scripts/add-data-flx-attributes.mjs | 5 +- fluxer_app/src/app/font-fallback.css | 4 +- .../src/app/fonts/fallback/fallback-faces.css | 40 +- .../state/SlowmodePendingSend.test.ts | 40 +- .../items/VoiceParticipantMenuData.test.tsx | 167 - ...VoiceParticipantStreamMenuBuilder.test.tsx | 116 - .../__fixtures__/VoiceMenuTestBootstrap.ts | 71 - fluxer_app/src/features/ui/state/Tick.test.ts | 19 +- .../engine/VoiceSharedAudioContext.test.ts | 59 +- .../VoiceEngineV2AppVoiceStateAdapter.test.ts | 30 +- .../state/VoiceSettingsCodecOptIn.test.ts | 33 +- .../utils/CodecCapabilityDetector.test.ts | 19 +- fluxer_app_proxy/Cargo.toml | 3 +- fluxer_app_proxy/src/invite_meta.rs | 6 +- fluxer_common/Cargo.toml | 2 +- fluxer_desktop/native/audio-apm/Cargo.lock | 4 +- .../audio-apm/scripts/build-real-apm.sh | 76 +- fluxer_desktop/native/audio-mix/Cargo.lock | 4 +- fluxer_desktop/native/audio-timing/Cargo.lock | 4 +- fluxer_desktop/native/deny.toml | 107 + fluxer_desktop/native/encoder-ring/Cargo.lock | 4 +- .../encoder-ring/src/encoder_handoff.rs | 5 +- .../native/linux-audio-capture/Cargo.lock | 4 +- .../native/linux-audio-capture/src/lib.rs | 11 +- .../src/pipewire_bridge.rs | 4 +- .../native/linux-notifications/Cargo.lock | 4 +- .../native/linux-portals/Cargo.lock | 4 +- .../native/linux-screen-capture/Cargo.lock | 8 +- .../src/napi_surface_linux.rs | 26 +- .../mac-app-audio/src/napi_surface_macos.rs | 17 +- .../src/napi_surface_macos.rs | 19 +- .../native/platform-info/Cargo.lock | 4 +- fluxer_desktop/native/rt-thread/Cargo.lock | 4 +- fluxer_desktop/native/rust/Cargo.lock | 8 +- .../native/rust/src/mac_app_audio/blocks.rs | 32 +- .../screen-frame-bus/benches/staging.rs | 4 +- .../native/screen-frame-bus/src/lib.rs | 61 +- .../native/system-hunspell/Cargo.lock | 4 +- fluxer_desktop/native/webauthn/Cargo.lock | 4 +- .../native/win-game-capture/src/lib.rs | 6 +- .../native/win-process-loopback/src/lib.rs | 19 +- fluxer_desktop/package.json | 3 +- .../guild_member_list_oset_nif/src/lib.rs | 4 +- fluxer_gateway/rebar.config | 5 +- fluxer_gateway/rebar.lock | 18 +- fluxer_gateway/scripts/docker_entrypoint.sh | 58 +- .../scripts/fluxer_gateway_release_wrapper.sh | 10 +- fluxer_gateway/src/guild/guild_common.erl | 2 +- .../src/guild/guild_connect_async.erl | 89 +- fluxer_gateway/src/guild/guild_data.erl | 103 +- fluxer_gateway/src/guild/guild_data_index.erl | 27 +- fluxer_gateway/src/guild/guild_init.erl | 4 +- .../src/guild/guild_maintenance.erl | 11 +- .../src/guild/guild_member_list_oset_nif.erl | 15 +- .../src/guild/guild_member_list_subs.erl | 19 +- .../src/guild/guild_permission_cache.erl | 2 +- fluxer_gateway/src/guild/guild_presence.erl | 4 +- fluxer_gateway/src/guild/guild_state.erl | 2 +- fluxer_gateway/src/push/push.erl | 20 +- fluxer_gateway/src/push/push_dispatcher.erl | 22 +- fluxer_gateway/src/push/push_fcm_payload.erl | 24 +- .../src/push/push_markdown_plaintext_nif.erl | 15 +- fluxer_gateway/src/push/push_normalize.erl | 17 +- .../session_manager_shard_session_index.erl | 14 +- .../src/session/session_ready_collect.erl | 4 +- fluxer_gateway/test/guild_data_tests.erl | 6 +- .../test/guild_passive_sync_tests.erl | 2 +- .../test/guild_state_roles_tests.erl | 4 +- .../test/guild_voice_broadcast_tests.erl | 10 +- fluxer_gifs/Cargo.toml | 3 +- fluxer_media_proxy/Cargo.toml | 3 +- fluxer_media_proxy/deny.toml | 11 +- fluxer_media_proxy/fuzz/Cargo.lock | 382 +- .../fuzz_targets/signing_external_path.rs | 11 +- fluxer_media_proxy/src/vips_shim.c | 11 - fluxer_messages/Cargo.toml | 3 +- fluxer_messages/src/shard_impl.rs | 6 +- fluxer_snowflakes/Cargo.toml | 3 +- fluxer_svc/Cargo.toml | 3 +- fluxer_svc/src/postgres.rs | 9 +- fluxer_unfurl/Cargo.toml | 5 +- fluxer_users/Cargo.toml | 3 +- knip.json | 3 +- package.json | 3 +- .../src/__tests__/ServiceConfigSlices.test.ts | 25 +- .../src/__tests__/AppErrorHandlers.test.ts | 86 +- .../middleware/tests/MiddlewareStack.test.ts | 14 +- patches/@hono__node-server@1.19.17.patch | 216 + patches/@hono__node-server@1.19.9.patch | 232 - patches/emscripten-wasm-loader@3.0.3.patch | 32 + patches/hunspell-asm@4.0.2.patch | 35 + pnpm-lock.yaml | 5459 +++++++---------- pnpm-workspace.yaml | 69 +- tools/bench/check-all.sh | 41 +- tools/bench/check-regression.sh | 21 +- tools/ci/Cargo.lock | 1068 ++-- tools/ci/Cargo.toml | 4 +- tools/ci/check-desktop-native-workspaces.sh | 253 + tools/ci/src/app_wasm.rs | 2 +- tools/ci/src/gateway.rs | 99 +- .../content/update-frozen-snapshot/Cargo.toml | 2 +- tools/dev/Cargo.toml | 3 +- tools/i18n_auto/Cargo.toml | 2 +- 123 files changed, 4925 insertions(+), 5640 deletions(-) delete mode 100644 fluxer_app/src/features/ui/action_menu/items/VoiceParticipantMenuData.test.tsx delete mode 100644 fluxer_app/src/features/ui/action_menu/items/VoiceParticipantStreamMenuBuilder.test.tsx delete mode 100644 fluxer_app/src/features/ui/action_menu/items/__fixtures__/VoiceMenuTestBootstrap.ts create mode 100644 fluxer_desktop/native/deny.toml create mode 100644 patches/@hono__node-server@1.19.17.patch delete mode 100644 patches/@hono__node-server@1.19.9.patch create mode 100644 patches/emscripten-wasm-loader@3.0.3.patch create mode 100644 patches/hunspell-asm@4.0.2.patch create mode 100755 tools/ci/check-desktop-native-workspaces.sh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index e3c8a9aea..a65c81d51 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -8,7 +8,7 @@ ARG USER_GID=1000 ARG NODE_MAJOR=24 ARG ELP_VERSION=2026-02-27 ARG PNPM_VERSION=10.29.3 -ARG WASM_BINDGEN_VERSION=0.2.122 +ARG WASM_BINDGEN_VERSION=0.2.123 ENV DEBIAN_FRONTEND=noninteractive diff --git a/.devcontainer/verify.sh b/.devcontainer/verify.sh index 7ee63a14d..af121f106 100755 --- a/.devcontainer/verify.sh +++ b/.devcontainer/verify.sh @@ -7,10 +7,16 @@ QUICK=0 SKIP_INSTALL=0 for arg in "$@"; do case "$arg" in - --quick) QUICK=1 ;; - --skip-install) SKIP_INSTALL=1 ;; - -h|--help) sed -n '2,25p' "$0"; exit 0 ;; - *) echo "unknown argument: $arg" >&2; exit 2 ;; + --quick) QUICK=1 ;; + --skip-install) SKIP_INSTALL=1 ;; + -h | --help) + sed -n '2,25p' "$0" + exit 0 + ;; + *) + echo "unknown argument: $arg" >&2 + exit 2 + ;; esac done diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 1d0062d4c..8b8883b60 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -153,7 +153,7 @@ jobs: rust: runs-on: ubuntu-24.04 - timeout-minutes: 30 + timeout-minutes: 60 steps: - name: Checkout code uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 @@ -178,20 +178,40 @@ jobs: with: workspaces: | . -> target - fluxer_desktop/native/rust -> target save-if: ${{ github.ref == 'refs/heads/main' }} + - name: Install cargo-deny + run: cargo install cargo-deny --version 0.19.6 --locked + + - name: Check Rust dependencies + run: cargo deny --locked check -D warnings + + - name: Check desktop native dependencies + run: tools/ci/check-desktop-native-workspaces.sh dependencies + - name: Install native dependencies run: | sudo apt-get update sudo apt-get install -y --no-install-recommends \ - pkg-config \ build-essential \ - libcurl4-openssl-dev \ - libvips-dev \ + binutils \ + clang \ + cmake \ libavfilter-dev \ + libclang-dev \ + libcurl4-openssl-dev \ + libfido2-dev \ libheif-dev \ - libwebp-dev + libpipewire-0.3-dev \ + libspa-0.2-dev \ + libssl-dev \ + libudev-dev \ + libvips-dev \ + libwebp-dev \ + meson \ + ninja-build \ + pkg-config \ + zlib1g-dev - name: Install Node.js dependencies run: pnpm --filter fluxer_admin install @@ -199,17 +219,20 @@ jobs: - name: Check formatting run: cargo fmt --all -- --check - - name: Check formatting (desktop native) - run: cargo fmt --manifest-path fluxer_desktop/native/rust/Cargo.toml --all -- --check + - name: Check formatting (desktop native workspaces) + run: tools/ci/check-desktop-native-workspaces.sh fmt - name: Clippy (warnings as errors) - run: cargo clippy --workspace -- -D warnings + run: cargo clippy --workspace --all-targets --all-features --locked -- -D warnings + + - name: Clippy (desktop native workspaces on Linux, warnings as errors) + run: tools/ci/check-desktop-native-workspaces.sh clippy - name: Run tests - run: cargo test --workspace + run: cargo test --workspace --all-features --locked - - name: Run desktop native tests - run: cargo test --manifest-path fluxer_desktop/native/rust/Cargo.toml + - name: Run desktop native workspace tests on Linux + run: tools/ci/check-desktop-native-workspaces.sh test gateway: runs-on: ubuntu-24.04 diff --git a/Cargo.lock b/Cargo.lock index 727fa3a4a..fe91d8e2d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -49,14 +49,13 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "ammonia" -version = "4.1.2" +version = "4.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17e913097e1a2124b46746c980134e8c954bc17a6a59bb3fde96f088d126dde6" +checksum = "dc6d763210e2eb7670d1a5183a08bebefa3f97db2a738a684f2ce00bd49f681d" dependencies = [ - "cssparser 0.35.0", - "html5ever 0.35.0", + "cssparser", + "html5ever", "maplit", - "tendril 0.4.3", "url", ] @@ -127,9 +126,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arc-swap" @@ -182,7 +181,7 @@ dependencies = [ "ring", "rustls-native-certs", "rustls-pki-types", - "rustls-webpki 0.103.13", + "rustls-webpki", "serde", "serde_json", "serde_nanos", @@ -190,7 +189,7 @@ dependencies = [ "thiserror", "time", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tokio-stream", "tokio-util", "tokio-websockets", @@ -528,23 +527,17 @@ dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", "aws-smithy-types", - "h2 0.3.27", - "h2 0.4.14", - "http 0.2.12", + "h2", "http 1.4.2", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper 1.10.1", - "hyper-rustls 0.24.2", - "hyper-rustls 0.27.9", + "hyper", + "hyper-rustls", "hyper-util", "pin-project-lite", - "rustls 0.21.12", - "rustls 0.23.40", + "rustls", "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower", "tracing", ] @@ -709,7 +702,7 @@ dependencies = [ "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.10.1", + "hyper", "hyper-util", "itoa", "matchit", @@ -933,9 +926,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chacha20" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" dependencies = [ "cfg-if", "cpufeatures 0.3.0", @@ -1218,9 +1211,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] @@ -1268,42 +1261,19 @@ dependencies = [ "hybrid-array", ] -[[package]] -name = "cssparser" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e901edd733a1472f944a45116df3f846f54d37e67e68640ac8bb69689aca2aa" -dependencies = [ - "cssparser-macros 0.6.1", - "dtoa-short", - "itoa", - "phf 0.11.3", - "smallvec", -] - [[package]] name = "cssparser" version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c9cdaae01d5ed7882b04d795e7f752f46ff52d2fa3b50a20d28c464510bba98" dependencies = [ - "cssparser-macros 0.7.0", + "cssparser-macros", "dtoa-short", "itoa", - "phf 0.13.1", + "phf", "smallvec", ] -[[package]] -name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn", -] - [[package]] name = "cssparser-macros" version = "0.7.0" @@ -1652,7 +1622,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]] @@ -1779,7 +1749,7 @@ dependencies = [ "clap", "fluxer_common", "hmac 0.13.0", - "hyper 1.10.1", + "hyper", "hyper-util", "image", "libc", @@ -1923,8 +1893,7 @@ dependencies = [ "libc", "moka", "rmp-serde", - "rustls 0.23.40", - "rustls-pemfile", + "rustls", "scylla", "serde", "serde_json", @@ -2101,16 +2070,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - [[package]] name = "futures" version = "0.3.32" @@ -2283,28 +2242,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.27" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "h2" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733" +checksum = "ef8e5e5a340588f4452631496976cf8636d4a7ecf600239fdc27615d2530bc16" dependencies = [ "atomic-waker", "bytes", @@ -2400,17 +2340,6 @@ dependencies = [ "digest 0.11.3", ] -[[package]] -name = "html5ever" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4" -dependencies = [ - "log", - "markup5ever 0.35.0", - "match_token", -] - [[package]] name = "html5ever" version = "0.39.0" @@ -2418,7 +2347,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46a1761807faccc9a19e86944bbf40610014066306f96edcdedc2fb714bcb7b8" dependencies = [ "log", - "markup5ever 0.39.0", + "markup5ever", ] [[package]] @@ -2497,30 +2426,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.5.10", - "tokio", - "tower-service", - "tracing", - "want", -] - [[package]] name = "hyper" version = "1.10.1" @@ -2531,7 +2436,7 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2 0.4.14", + "h2", "http 1.4.2", "http-body 1.0.1", "httparse", @@ -2543,21 +2448,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "log", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", -] - [[package]] name = "hyper-rustls" version = "0.27.9" @@ -2565,12 +2455,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ "http 1.4.2", - "hyper 1.10.1", + "hyper", "hyper-util", - "rustls 0.23.40", + "rustls", "rustls-native-certs", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower-service", ] @@ -2586,12 +2476,12 @@ dependencies = [ "futures-util", "http 1.4.2", "http-body 1.0.1", - "hyper 1.10.1", + "hyper", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.3", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -2985,29 +2875,12 @@ dependencies = [ "twox-hash", ] -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - [[package]] name = "maplit" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" -[[package]] -name = "markup5ever" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3" -dependencies = [ - "log", - "tendril 0.4.3", - "web_atoms 0.1.3", -] - [[package]] name = "markup5ever" version = "0.39.0" @@ -3015,19 +2888,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de" dependencies = [ "log", - "tendril 0.5.0", - "web_atoms 0.2.4", -] - -[[package]] -name = "match_token" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" -dependencies = [ - "proc-macro2", - "quote", - "syn", + "tendril", + "web_atoms", ] [[package]] @@ -3192,7 +3054,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]] @@ -3363,55 +3225,25 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "phf" -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", -] - [[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.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.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]] @@ -3421,20 +3253,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.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", + "phf_shared", ] [[package]] @@ -3443,22 +3262,13 @@ 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", ] -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] - [[package]] name = "phf_shared" version = "0.13.1" @@ -3759,8 +3569,8 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.40", - "socket2 0.6.3", + "rustls", + "socket2 0.5.10", "thiserror", "tokio", "tracing", @@ -3780,7 +3590,7 @@ dependencies = [ "rand 0.9.4", "ring", "rustc-hash", - "rustls 0.23.40", + "rustls", "rustls-pki-types", "slab", "thiserror", @@ -3798,7 +3608,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.3", + "socket2 0.5.10", "tracing", "windows-sys 0.59.0", ] @@ -4016,15 +3826,15 @@ dependencies = [ "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.10.1", - "hyper-rustls 0.27.9", + "hyper", + "hyper-rustls", "hyper-util", "js-sys", "log", "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.40", + "rustls", "rustls-pki-types", "rustls-platform-verifier", "serde", @@ -4032,7 +3842,7 @@ dependencies = [ "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tokio-util", "tower", "tower-http", @@ -4069,7 +3879,7 @@ dependencies = [ "futures", "getrandom 0.2.17", "http 1.4.2", - "hyper 1.10.1", + "hyper", "reqwest", "reqwest-middleware", "retry-policies", @@ -4156,19 +3966,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", + "windows-sys 0.52.0", ] [[package]] @@ -4182,7 +3980,7 @@ dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.13", + "rustls-webpki", "subtle", "zeroize", ] @@ -4199,15 +3997,6 @@ dependencies = [ "security-framework", ] -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "rustls-pki-types" version = "1.14.1" @@ -4229,14 +4018,14 @@ dependencies = [ "jni", "log", "once_cell", - "rustls 0.23.40", + "rustls", "rustls-native-certs", "rustls-platform-verifier-android", - "rustls-webpki 0.103.13", + "rustls-webpki", "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -4245,16 +4034,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "rustls-webpki" version = "0.103.13" @@ -4347,23 +4126,13 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdd0be4d296f048bfb06dd01bbc80ef789ddd2e55583e8d2e6b804942abfabc2" dependencies = [ - "cssparser 0.37.0", + "cssparser", "ego-tree", "getopts", - "html5ever 0.39.0", + "html5ever", "precomputed-hash", "selectors", - "tendril 0.5.0", -] - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", + "tendril", ] [[package]] @@ -4467,12 +4236,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8adfa1c298912827b8a28b223b3b874357397ae706e6190acd9bf28cee99114d" dependencies = [ "bitflags", - "cssparser 0.37.0", + "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", @@ -4766,9 +4535,9 @@ dependencies = [ [[package]] name = "spin" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" +checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3" [[package]] name = "spki" @@ -4786,19 +4555,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" -[[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" @@ -4807,30 +4563,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", ] @@ -4905,18 +4649,7 @@ dependencies = [ "getrandom 0.4.2", "once_cell", "rustix", - "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", + "windows-sys 0.52.0", ] [[package]] @@ -5087,7 +4820,7 @@ dependencies = [ "log", "parking_lot", "percent-encoding", - "phf 0.13.1", + "phf", "pin-project-lite", "postgres-protocol", "postgres-types", @@ -5104,32 +4837,22 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c2ad44aa0ae96db89c4742212ed41645b2f597311ff6e1945542a4d9fadc2fb" dependencies = [ - "rustls 0.23.40", + "rustls", "rustls-native-certs", "sha2 0.11.0", "tokio", "tokio-postgres", - "tokio-rustls 0.26.4", + "tokio-rustls", "x509-cert", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.40", + "rustls", "tokio", ] @@ -5173,7 +4896,7 @@ dependencies = [ "ring", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tokio-util", "webpki-roots 0.26.11", ] @@ -5714,28 +5437,16 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "web_atoms" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" -dependencies = [ - "phf 0.11.3", - "phf_codegen 0.11.3", - "string_cache 0.8.9", - "string_cache_codegen 0.5.4", -] - [[package]] name = "web_atoms" 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]] @@ -5806,7 +5517,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.52.0", ] [[package]] diff --git a/deny.toml b/deny.toml index 93f6b5efc..2f4be5c49 100644 --- a/deny.toml +++ b/deny.toml @@ -1,13 +1,9 @@ # cargo-deny configuration for the Fluxer workspace. # -# Applies to the root workspace (Cargo.toml at the repo root) AND to every -# per-addon crate under fluxer_desktop/native/* (each addon has its own -# [workspace], so we invoke cargo-deny with --config pointing here). -# -# Used by the native desktop security gate in CI. +# Applies to the root workspace (Cargo.toml at the repo root). [graph] -all-features = false +all-features = true no-default-features = false [output] @@ -44,13 +40,11 @@ allow = [ "BSD-3-Clause", "ISC", "MPL-2.0", - "Unicode-DFS-2016", "Unicode-3.0", "Zlib", "CC0-1.0", "AGPL-3.0-or-later", "BSL-1.0", - "OpenSSL", "CDLA-Permissive-2.0", ] # Explicitly deny GPL-only / strong-copyleft licenses that don't compose with @@ -72,21 +66,48 @@ license-files = [ [bans] multiple-versions = "warn" wildcards = "deny" -# Per-addon crates path-depend on ../rust (the shared `fluxer_desktop_native` -# crate) without a version. cargo-deny flags that as a wildcard; we allow it -# because path deps can't realistically pin a SemVer range, and this only -# affects intra-repo workspace links (registry wildcards remain denied). +# Internal workspace crates use path dependencies without registry versions. +# Registry wildcards remain denied. allow-wildcard-paths = true highlight = "all" workspace-default-features = "allow" external-default-features = "allow" -# Keep desktop packaging and native addons away from the obsolete libfuse2 stack. +# Keep workspace artifacts away from the obsolete libfuse2 stack. # AppImage packaging must use the static electron-builder runtime instead. deny = [ { crate = "fuse", reason = "libfuse2-based Rust wrapper; use a maintained FUSE3-native crate only if Fluxer ever needs FUSE directly" }, { crate = "fuse-sys", reason = "libfuse2 FFI crate; Fluxer AppImages must not reintroduce libfuse2 through native Rust dependencies" }, ] -skip = [] +skip = [ + { crate = "block-buffer@0.10.4", reason = "transitive dependency requires the older digest API" }, + { crate = "const-oid@0.9.6", reason = "transitive dependency requires the older digest API" }, + { crate = "cpufeatures@0.2.17", reason = "transitive dependency requires the older crypto API" }, + { crate = "crypto-common@0.1.7", reason = "transitive dependency requires the older digest API" }, + { crate = "digest@0.10.7", reason = "transitive dependency requires the older digest API" }, + { crate = "foldhash@0.1.5", reason = "transitive dependency requires the older hashbrown API" }, + { crate = "getrandom@0.2.17", reason = "transitive dependency requires the older randomness API" }, + { crate = "getrandom@0.3.4", reason = "transitive dependency requires the prior randomness API" }, + { crate = "hashbrown@0.14.5", reason = "transitive dependency requires the older hashbrown API" }, + { crate = "hashbrown@0.15.5", reason = "transitive dependency requires the older hashbrown API" }, + { crate = "hashbrown@0.16.1", reason = "transitive dependency requires the prior hashbrown API" }, + { crate = "hmac@0.12.1", reason = "transitive dependency requires the older digest API" }, + { crate = "http@0.2.12", reason = "transitive dependency requires the older HTTP API" }, + { crate = "http-body@0.4.6", reason = "transitive dependency requires the older HTTP body API" }, + { crate = "r-efi@5.3.0", reason = "transitive dependency requires the older WASI API" }, + { crate = "rand@0.8.6", reason = "transitive dependency requires the older randomness API" }, + { crate = "rand@0.9.4", reason = "transitive dependency requires the prior randomness API" }, + { crate = "rand_chacha@0.3.1", reason = "transitive dependency requires the older randomness API" }, + { crate = "rand_chacha@0.9.0", reason = "transitive dependency requires the prior randomness API" }, + { crate = "rand_core@0.6.4", reason = "transitive dependency requires the older randomness API" }, + { crate = "rand_core@0.9.5", reason = "transitive dependency requires the prior randomness API" }, + { crate = "sha1@0.10.6", reason = "transitive dependency requires the older digest API" }, + { crate = "sha2@0.10.9", reason = "transitive dependency requires the older digest API" }, + { crate = "socket2@0.5.10", reason = "transitive dependency requires the older socket API" }, + { crate = "wasi@0.11.1+wasi-snapshot-preview1", reason = "transitive dependency requires the legacy WASI API" }, + { crate = "windows-sys@0.52.0", reason = "transitive dependency requires the older Windows API" }, + { crate = "windows-sys@0.59.0", reason = "transitive dependency requires the prior Windows API" }, + { crate = "wit-bindgen@0.51.0", reason = "transitive dependency requires the older WASI binding API" }, +] skip-tree = [] # --------------------------------------------------------------------------- diff --git a/fluxer_admin/Cargo.toml b/fluxer_admin/Cargo.toml index b9da6a729..5d55e9f02 100644 --- a/fluxer_admin/Cargo.toml +++ b/fluxer_admin/Cargo.toml @@ -6,7 +6,7 @@ license.workspace = true build = "build.rs" [dependencies] -anyhow = "1.0.102" +anyhow = "1.0.104" axum = { version = "0.8.9", features = ["macros"] } base64 = "0.22.1" chrono = { version = "0.4", default-features = false, features = ["serde"] } diff --git a/fluxer_api/src/api/channel/services/DMPermissionValidator.ts b/fluxer_api/src/api/channel/services/DMPermissionValidator.ts index a79b9dc4e..8c0db7c5b 100644 --- a/fluxer_api/src/api/channel/services/DMPermissionValidator.ts +++ b/fluxer_api/src/api/channel/services/DMPermissionValidator.ts @@ -40,8 +40,7 @@ export class DMPermissionValidator { if (isBugHunterBotUser(senderUser)) { return; } - const isShadowbannedSpammer = - !senderUser.isBot && (senderUser.flags & UserFlags.SPAMMER) === UserFlags.SPAMMER; + const isShadowbannedSpammer = !senderUser.isBot && (senderUser.flags & UserFlags.SPAMMER) === UserFlags.SPAMMER; const [senderBlockedTarget, targetBlockedSender, areFriends, targetSettings, senderSettings] = await Promise.all([ this.deps.userRepository.getRelationship(senderId, recipientId, RelationshipTypes.BLOCKED), this.deps.userRepository.getRelationship(recipientId, senderId, RelationshipTypes.BLOCKED), diff --git a/fluxer_api/src/api/channel/tests/AttachmentUploadValidation.test.ts b/fluxer_api/src/api/channel/tests/AttachmentUploadValidation.test.ts index 0f4d60a8e..8edd6218f 100644 --- a/fluxer_api/src/api/channel/tests/AttachmentUploadValidation.test.ts +++ b/fluxer_api/src/api/channel/tests/AttachmentUploadValidation.test.ts @@ -1,7 +1,8 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; -import {beforeAll, beforeEach, describe, expect, it} from 'vitest'; +import {Logger} from '@fluxer/logger/src/Logger'; +import {beforeAll, beforeEach, describe, expect, it, vi} from 'vitest'; import {createTestAccount} from '../../auth/tests/AuthTestUtils'; import type {MediaProxyMetadataRequest} from '../../infrastructure/IMediaService'; import {setInjectedMediaService} from '../../middleware/ServiceRegistry'; @@ -71,6 +72,7 @@ describe('Attachment Upload Validation', () => { const guild = await createGuild(harness, account.token, 'Storage Unavailable Test Guild'); const channel = await createChannel(harness, account.token, guild.id, 'test-channel'); const channelId = guild.system_channel_id ?? channel.id; + const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); harness.storageService.configure({shouldFailUpload: true}); try { const payload = { @@ -83,8 +85,25 @@ describe('Attachment Upload Validation', () => { const body = JSON.parse(text) as {code?: string}; expect(response.status).toBe(HTTP_STATUS.SERVICE_UNAVAILABLE); expect(body.code).toBe(APIErrorCodes.SERVICE_UNAVAILABLE); + expect(errorLoggerSpy).toHaveBeenCalledTimes(1); + expect(errorLoggerSpy).toHaveBeenCalledWith( + { + err: expect.objectContaining({ + cause: expect.objectContaining({message: 'Mock storage upload failure'}), + code: APIErrorCodes.SERVICE_UNAVAILABLE, + message: 'Attachment storage is temporarily unavailable', + status: HTTP_STATUS.SERVICE_UNAVAILABLE, + }), + method: 'POST', + path: `/channels/${channelId}/messages`, + requestId: expect.any(String), + status: HTTP_STATUS.SERVICE_UNAVAILABLE, + }, + 'Request failed', + ); } finally { harness.storageService.configure({shouldFailUpload: false}); + errorLoggerSpy.mockRestore(); } }); }); @@ -160,12 +179,9 @@ describe('Attachment Upload Validation', () => { content: 'Filename mismatch test', attachments: [{id: 0, filename: 'expected.txt'}], }; - const {response, text, json} = await sendMessageWithAttachments(harness, account.token, channelId, payload, [ + const {response, json} = await sendMessageWithAttachments(harness, account.token, channelId, payload, [ {index: 0, filename: 'different.txt', data: fileData}, ]); - if (response.status !== 200) { - console.log('Error response:', text); - } expect(response.status).toBe(200); expect(json.attachments).toBeDefined(); expect(json.attachments).not.toBeNull(); diff --git a/fluxer_api/src/api/database/PostgresKvQueryDifferential.test.ts b/fluxer_api/src/api/database/PostgresKvQueryDifferential.test.ts index 164c22066..e27bafdcd 100644 --- a/fluxer_api/src/api/database/PostgresKvQueryDifferential.test.ts +++ b/fluxer_api/src/api/database/PostgresKvQueryDifferential.test.ts @@ -798,8 +798,7 @@ suite('PostgresKvQueryExecutor differential', () => { const corpus = new Map>(); const shapeCache = new Map>(); const unstableShapes: Array = []; - const reproducibleOrders: Array = []; - const traffic = {legacy: 0, next: 0, shapes: 0, improved: 0}; + const traffic = {legacy: 0, next: 0, shapes: 0}; const keysetOrderDeltas: Array = []; const legacyThrowDeltas: Array = []; @@ -906,7 +905,6 @@ suite('PostgresKvQueryExecutor differential', () => { executor: LegacyPostgresKvQueryExecutor, tableName: string, shape: Shape, - candidate: string, ): Promise { const observed = new Set(); for (const ordering of HEAP_ORDERINGS) { @@ -914,7 +912,6 @@ suite('PostgresKvQueryExecutor differential', () => { } await restoreOne(kv, tableName, HEAP_ORDERINGS[0]!); if (observed.size === 1) return false; - if (observed.has(candidate)) reproducibleOrders.push(`${tableName} ${shape.name}`); return true; } @@ -950,7 +947,6 @@ suite('PostgresKvQueryExecutor differential', () => { traffic.legacy += left.rowsRead; traffic.next += right.rowsRead; traffic.shapes += 1; - if (right.rowsRead < left.rowsRead) traffic.improved += 1; if (left.fingerprint === right.fingerprint) { if (right.rowsRead > left.rowsRead) { mismatches.push({ @@ -976,7 +972,7 @@ suite('PostgresKvQueryExecutor differential', () => { }); return; } - if (!(await legacyIsOrderUnstable(kv, executor, tableName, shape, right.fingerprint))) { + if (!(await legacyIsOrderUnstable(kv, executor, tableName, shape))) { mismatches.push({ kind: sameMultiset ? 'order' : 'rowset', table: tableName, @@ -1159,7 +1155,6 @@ suite('PostgresKvQueryExecutor differential', () => { } } expect(shapeCount).toBeGreaterThan(3000); - console.log(`select sweep: tables=${specs.length} shapes=${shapeCount}`); expect(mismatches.length, report(mismatches)).toBe(0); }, 1_800_000); @@ -1210,7 +1205,6 @@ suite('PostgresKvQueryExecutor differential', () => { traffic.legacy += left.rowsRead; traffic.next += right.rowsRead; traffic.shapes += 1; - if (right.rowsRead < left.rowsRead) traffic.improved += 1; if (right.rowsRead > left.rowsRead) { mismatches.push({ kind: 'rowsread', @@ -1309,7 +1303,7 @@ suite('PostgresKvQueryExecutor differential', () => { keysetOrderDeltas.push(`${spec.name} ${label}`); continue; } - if (await legacyIsOrderUnstable(NEXT_TABLE, readLegacy, spec.name, shape, fingerprint(rightAll))) { + if (await legacyIsOrderUnstable(NEXT_TABLE, readLegacy, spec.name, shape)) { unstableShapes.push(`${spec.name} ${label}`); continue; } @@ -1454,14 +1448,5 @@ suite('PostgresKvQueryExecutor differential', () => { } expect(traffic.shapes).toBeGreaterThan(3000); expect(traffic.next).toBeLessThan(traffic.legacy); - console.log( - `row payload traffic: shapes=${traffic.shapes} legacyRows=${traffic.legacy} nextRows=${traffic.next} reduction=${(100 - (traffic.next / traffic.legacy) * 100).toFixed(1)}% shapesImproved=${traffic.improved}`, - ); - console.log( - `accepted deltas: order-unstable=${unstableShapes.length} (legacy-reproducible=${reproducibleOrders.length}) keyset-order=${keysetOrderDeltas.length} legacy-throw=${legacyThrowDeltas.length}`, - ); - console.log(`order-unstable sample: ${unstableShapes.slice(0, 5).join(' | ')}`); - console.log(`keyset-order sample: ${keysetOrderDeltas.slice(0, 5).join(' | ')}`); - console.log(`legacy-throw: ${[...new Set(legacyThrowDeltas.map((entry) => entry.split(': ')[1]))].join(' | ')}`); }); }); diff --git a/fluxer_api/src/api/database/PostgresKvUpgradeSafety.test.ts b/fluxer_api/src/api/database/PostgresKvUpgradeSafety.test.ts index ef9610d71..6e9a8e452 100644 --- a/fluxer_api/src/api/database/PostgresKvUpgradeSafety.test.ts +++ b/fluxer_api/src/api/database/PostgresKvUpgradeSafety.test.ts @@ -210,9 +210,9 @@ suite('postgres kv upgrade safety', () => { if (pages > 200) throw new Error('runaway paging loop'); } } catch (error) { - return {keys, error: (error as Error).message, pages}; + return {keys, error: (error as Error).message}; } - return {keys, error: null, pages}; + return {keys, error: null}; } it('pages consistently with only the old image running', async () => { @@ -232,27 +232,18 @@ suite('postgres kv upgrade safety', () => { it('ROLLING RESTART: an old replica consumes a token minted by the new one', async () => { const first = await next.executePagedQuery(usersScan(), {pageSize: 7, pageState: null}); expect(first.pageState).toBeTruthy(); - const token = JSON.parse(Buffer.from(first.pageState!, 'base64url').toString('utf8')); - let failure: string | null = null; - let rows = 0; - try { - const second = await legacy.executePagedQuery(usersScan(), {pageSize: 7, pageState: first.pageState}); - rows = second.rows.length; - } catch (error) { - failure = (error as Error).message; - } - console.log(`NEW->OLD token=${JSON.stringify(token)} legacy=${failure ?? `${rows} rows`}`); - expect(failure).toBeNull(); + const second = await legacy.executePagedQuery(usersScan(), {pageSize: 7, pageState: first.pageState}); + expect(second.rows).toHaveLength(7); }); it('ROLLING RESTART: alternating old and new replicas drain the scan', async () => { const a = await drain(['next', 'legacy'], 7); const b = await drain(['legacy', 'next'], 7); - console.log(`new-first err=${a.error} pages=${a.pages} total=${a.keys.length} unique=${new Set(a.keys).size}`); - console.log(`old-first err=${b.error} pages=${b.pages} total=${b.keys.length} unique=${new Set(b.keys).size}`); expect(a.error).toBeNull(); + expect(a.keys).toHaveLength(40); expect(new Set(a.keys).size).toBe(40); expect(b.error).toBeNull(); + expect(b.keys).toHaveLength(40); expect(new Set(b.keys).size).toBe(40); }); @@ -262,9 +253,9 @@ suite('postgres kv upgrade safety', () => { const dual = Buffer.from(JSON.stringify({offset: first.rows.length, after: cursor.after})).toString('base64url'); const viaOld = await legacy.executePagedQuery(usersScan(), {pageSize: 7, pageState: dual}); const viaNew = await next.executePagedQuery(usersScan(), {pageSize: 7, pageState: dual}); - console.log(`dual token -> old replica: ${viaOld.rows.length} rows, new replica: ${viaNew.rows.length} rows`); - expect(viaOld.rows.length).toBe(7); - expect(viaNew.rows.length).toBe(7); + expect(viaOld.rows).toHaveLength(7); + expect(viaNew.rows).toHaveLength(7); + expect(fp(viaNew.rows)).toBe(fp(viaOld.rows)); }); it('deletes exactly the same rows as the old image', async () => { @@ -282,8 +273,7 @@ suite('postgres kv upgrade safety', () => { const left = await raw.query<{row_key: string}>( `SELECT row_key FROM ${KV} WHERE table_name = 'read_states' AND row_key LIKE '%400%' ORDER BY row_key`, ); - console.log(`rows left after legacy delete + new delete: ${left.rows.length}`); - expect(left.rows.length).toBe(0); + expect(left.rows).toHaveLength(0); }); it('writes byte-identical row_key and partition_key to the old image', async () => { @@ -333,8 +323,6 @@ suite('postgres kv upgrade safety', () => { const cIndexes = await raw.query<{tablename: string}>( `SELECT tablename FROM pg_indexes WHERE indexname IN ('${OLD}_row_key_c_idx', '${NEW}_row_key_c_idx')`, ); - console.log(`key diffs=${diff.rows[0]!.n} index-definition diffs=${schemaDiff.rows[0]!.n}`); - console.log(collations.rows.map((r) => `${r.tablename}.${r.attname}=${r.collname}`).join(' ')); expect(Number(diff.rows[0]!.n)).toBe(0); expect(Number(schemaDiff.rows[0]!.n)).toBe(0); expect(collations.rows.filter((r) => r.tablename === OLD).map((r) => r.collname)).toEqual(['default', 'default']); @@ -358,7 +346,6 @@ suite('postgres kv upgrade safety', () => { const indexes = await raw.query<{indexname: string}>( `SELECT indexname FROM pg_indexes WHERE tablename = '${OLD}' ORDER BY indexname`, ); - console.log(`after boot on a legacy table: ${indexes.rows.map((r) => r.indexname).join(', ')}`); expect(collations.rows.map((r) => r.collname)).toEqual(['default', 'default']); expect(indexes.rows.map((r) => r.indexname)).toContain(`${OLD}_row_key_c_idx`); }); @@ -371,10 +358,11 @@ suite('postgres kv upgrade safety', () => { ensurePostgresKvSchema(new TableClient(raw, BOOT)), ensurePostgresKvSchema(new TableClient(raw, BOOT)), ]); - const failures = results.filter((r) => r.status === 'rejected'); - console.log(`concurrent boots rejected: ${failures.length}`); - for (const f of failures) console.log(` ${(f as PromiseRejectedResult).reason}`); - expect(failures.length).toBe(0); + expect(results).toEqual([ + {status: 'fulfilled', value: undefined}, + {status: 'fulfilled', value: undefined}, + {status: 'fulfilled', value: undefined}, + ]); }, 120_000); it('backfills the messages partition key once and never scans for it again', async () => { @@ -416,7 +404,6 @@ suite('postgres kv upgrade safety', () => { await insertLegacy('m2'); await ensurePostgresKvSchema(backfillClient); const skipped = await partitionOf('m2'); - console.log(`second boot left the new legacy row alone: partition_key=${skipped === legacyKey('m2')}`); expect(skipped).toBe(legacyKey('m2')); expect(await partitionOf('m1')).toBe(`"c"${SEP}"b"`); await raw.query(`DROP TABLE IF EXISTS ${BACKFILL}`); @@ -432,7 +419,6 @@ suite('postgres kv upgrade safety', () => { ); const after = await next.executeQuery(q); await raw.query(`UPDATE pg_index SET indisvalid = true WHERE indexrelid = '${KV}_row_key_c_idx'::regclass`); - console.log(`index valid after boot: ${check.rows[0]?.indisvalid}`); expect(String(after.map((r) => Object.values(r).map(String).join(',')))).toBe( String(before.map((r) => Object.values(r).map(String).join(','))), ); @@ -441,7 +427,6 @@ suite('postgres kv upgrade safety', () => { describe('multi-range plan shape on a populated upgraded database', () => { const PERF = 'kv_ranges_perf'; - const SEP = String.fromCharCode(31); const BASE = 1456074443984486400n; let perf: IPostgresClient; @@ -481,6 +466,7 @@ FROM generate_series($1::bigint, $1::bigint + 19999) u, generate_series(1, 3) s` `SELECT kv.row_key, kv.row_data FROM ${PERF} kv WHERE kv.table_name = $1 AND (kv.expires_at IS NULL OR kv.expires_at > now())`, ['push_subscriptions'], ); + expect(Number.isFinite(scan.ms)).toBe(true); const deltas: Array = []; for (const size of [5, 10, 25, 50, 100]) { const params = {user_ids: Array.from({length: size}, (_, i) => BASE + BigInt(i * 3))}; @@ -494,9 +480,10 @@ FROM generate_series($1::bigint, $1::bigint + 19999) u, generate_series(1, 3) s` `SELECT kv.row_key, kv.row_data FROM ${PERF} kv WHERE kv.table_name = $1${fragments.predicate} AND (kv.expires_at IS NULL OR kv.expires_at > now())`, ['push_subscriptions', ...fragments.params], ); - const verdict = `n=${size} pushdown=${pushed.ms.toFixed(2)}ms scan=${scan.ms.toFixed(2)}ms`; - console.log(verdict); - if (pushed.ms > scan.ms) deltas.push(`${verdict}\n${pushed.plan}`); + expect(Number.isFinite(pushed.ms)).toBe(true); + if (pushed.ms > scan.ms) { + deltas.push(`n=${size} pushdown=${pushed.ms.toFixed(2)}ms scan=${scan.ms.toFixed(2)}ms\n${pushed.plan}`); + } } expect(deltas.join('\n')).toBe(''); const overCap = buildCandidatePlan(meta, { @@ -506,17 +493,13 @@ FROM generate_series($1::bigint, $1::bigint + 19999) u, generate_series(1, 3) s` expect(overCap.exact).toBe(true); const overCapGroups = planFragmentGroups(overCap.candidates); expect(overCapGroups.map((group) => group.params.length)).toEqual([512, 512, 376]); - let chunkedMs = 0; for (const fragments of overCapGroups) { const pushed = await explain( `SELECT kv.row_key, kv.row_data FROM ${PERF} kv WHERE kv.table_name = $1${fragments.predicate} AND (kv.expires_at IS NULL OR kv.expires_at > now())`, ['push_subscriptions', ...fragments.params], ); expect(pushed.plan).not.toContain('Seq Scan'); - chunkedMs += pushed.ms; } - console.log(`n=700 chunked=${chunkedMs.toFixed(2)}ms scan=${scan.ms.toFixed(2)}ms`); - expect(SEP).toBe('\u001f'); }, 300_000); }); }); @@ -547,8 +530,11 @@ describe('candidate plan shapes reached by real queries', () => { : plan.candidates.kind === 'rowKeys' ? plan.candidates.rowKeys.length : 0; - console.log(`${c.name} -> kind=${plan.candidates.kind} n=${size} exact=${plan.exact}`); + expect({kind: plan.candidates.kind, size, exact: plan.exact}, c.name).toEqual({ + kind: 'ranges', + size: 100, + exact: true, + }); } - expect(true).toBe(true); }); }); diff --git a/fluxer_api/src/api/guild/services/data/GuildOperationsService.ts b/fluxer_api/src/api/guild/services/data/GuildOperationsService.ts index 9b49fae1b..780665239 100644 --- a/fluxer_api/src/api/guild/services/data/GuildOperationsService.ts +++ b/fluxer_api/src/api/guild/services/data/GuildOperationsService.ts @@ -859,9 +859,7 @@ export class GuildOperationsService { const channels = await this.channelRepository.listGuildChannels(guildId); await Promise.all(channels.map((channel) => this.channelRepository.deleteAllChannelMessages(channel.id))); await Promise.all( - channels.map((channel) => - deleteChannelMessageSearchDocuments(channel.id, {context: {source: 'guild_delete'}}), - ), + channels.map((channel) => deleteChannelMessageSearchDocuments(channel.id, {context: {source: 'guild_delete'}})), ); await Promise.all(channels.map((channel) => this.channelService.attachments.purgeChannelAttachments(channel))); const discoveryRow = await this.discoveryRepository.findByGuildId(guildId); diff --git a/fluxer_api/src/api/infrastructure/StorageObjectHelpers.ts b/fluxer_api/src/api/infrastructure/StorageObjectHelpers.ts index ed2047c42..ecfa0412d 100644 --- a/fluxer_api/src/api/infrastructure/StorageObjectHelpers.ts +++ b/fluxer_api/src/api/infrastructure/StorageObjectHelpers.ts @@ -171,7 +171,6 @@ export async function stripNonJpegImageMetadataForUpload( return {body: await image.gif().toBuffer(), contentType: 'image/gif'}; case 'webp': return {body: await image.webp({lossless: true}).toBuffer(), contentType: 'image/webp'}; - case 'avif': case 'heif': return {body: await image.avif().toBuffer(), contentType: 'image/avif'}; case 'tiff': @@ -460,7 +459,6 @@ async function stripNonJpegImageFileToFile( case 'webp': await image.webp({lossless: true}).toFile(outputPath); return {contentType: 'image/webp', ...dimensions}; - case 'avif': case 'heif': await image.avif().toFile(outputPath); return {contentType: 'image/avif', ...dimensions}; diff --git a/fluxer_api/src/api/middleware/tests/ConcurrencyLimitMiddleware.test.ts b/fluxer_api/src/api/middleware/tests/ConcurrencyLimitMiddleware.test.ts index e1a24e092..f6937c803 100644 --- a/fluxer_api/src/api/middleware/tests/ConcurrencyLimitMiddleware.test.ts +++ b/fluxer_api/src/api/middleware/tests/ConcurrencyLimitMiddleware.test.ts @@ -1,8 +1,10 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {AppErrorHandler} from '@fluxer/errors/src/domains/core/ErrorHandlers'; +import {ServiceUnavailableError} from '@fluxer/errors/src/domains/core/ServiceUnavailableError'; +import {Logger} from '@fluxer/logger/src/Logger'; import {Hono} from 'hono'; -import {describe, expect, test} from 'vitest'; +import {describe, expect, test, vi} from 'vitest'; import type {HonoEnv} from '../../types/HonoEnv'; import {ConcurrencyLimitMiddleware} from '../ConcurrencyLimitMiddleware'; @@ -22,6 +24,7 @@ function createDeferred(): Deferred { function buildApp(maxInflightRequests: number) { const release = createDeferred(); const entered = createDeferred(); + const boomError = new Error('boom'); const routes = new Hono({strict: true}); routes.use(ConcurrencyLimitMiddleware({maxInflightRequests})); routes.get('/_health', (ctx) => ctx.text('OK')); @@ -33,65 +36,132 @@ function buildApp(maxInflightRequests: number) { return ctx.text('slow'); }); routes.get('/boom', () => { - throw new Error('boom'); + throw boomError; }); routes.onError(AppErrorHandler); const app = new Hono({strict: true}); app.route('/v1', routes); app.route('/', routes); app.onError(AppErrorHandler); - return {app, release, entered}; + return {app, release, entered, boomError}; } describe('ConcurrencyLimitMiddleware', () => { test('sheds with 503 once the in-flight ceiling is reached', async () => { const {app, release, entered} = buildApp(1); + const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); const inflight = app.request('/slow'); - await entered.promise; + try { + await entered.promise; - const shed = await app.request('/fast'); + const shed = await app.request('/fast'); - expect(shed.status).toBe(503); - expect(shed.headers.get('Retry-After')).toBe('1'); - expect(await shed.json()).toMatchObject({code: 'SERVICE_UNAVAILABLE'}); + expect(shed.status).toBe(503); + expect(shed.headers.get('Retry-After')).toBe('1'); + expect(await shed.json()).toMatchObject({code: 'SERVICE_UNAVAILABLE'}); + expect(errorLoggerSpy).toHaveBeenCalledTimes(1); + expect(errorLoggerSpy).toHaveBeenCalledWith( + { + err: expect.any(ServiceUnavailableError), + method: 'GET', + path: '/fast', + requestId: undefined, + status: 503, + }, + 'Request failed', + ); - release.resolve(); - expect((await inflight).status).toBe(200); + release.resolve(); + expect((await inflight).status).toBe(200); + } finally { + release.resolve(); + errorLoggerSpy.mockRestore(); + } }); test('admits probe paths while shedding everything else', async () => { const {app, release, entered} = buildApp(1); + const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); const inflight = app.request('/slow'); - await entered.promise; + try { + await entered.promise; - expect((await app.request('/_health')).status).toBe(200); - expect((await app.request('/_metrics')).status).toBe(200); - expect((await app.request('/v1/_health')).status).toBe(200); - expect((await app.request('/fast')).status).toBe(503); + expect((await app.request('/_health')).status).toBe(200); + expect((await app.request('/_metrics')).status).toBe(200); + expect((await app.request('/v1/_health')).status).toBe(200); + expect((await app.request('/fast')).status).toBe(503); + expect(errorLoggerSpy).toHaveBeenCalledTimes(1); + expect(errorLoggerSpy).toHaveBeenCalledWith( + { + err: expect.any(ServiceUnavailableError), + method: 'GET', + path: '/fast', + requestId: undefined, + status: 503, + }, + 'Request failed', + ); - release.resolve(); - await inflight; + release.resolve(); + await inflight; + } finally { + release.resolve(); + errorLoggerSpy.mockRestore(); + } }); test('releases the slot when the handler throws', async () => { - const {app} = buildApp(1); - for (let attempt = 0; attempt < 3; attempt += 1) { - expect((await app.request('/boom')).status).toBe(500); + const {app, boomError} = buildApp(1); + const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); + try { + for (let attempt = 0; attempt < 3; attempt += 1) { + expect((await app.request('/boom')).status).toBe(500); + } + expect((await app.request('/fast')).status).toBe(200); + expect(errorLoggerSpy).toHaveBeenCalledTimes(3); + for (let callIndex = 1; callIndex <= 3; callIndex += 1) { + expect(errorLoggerSpy).toHaveBeenNthCalledWith( + callIndex, + {err: boomError, method: 'GET', path: '/boom', requestId: undefined, status: 500}, + 'Unhandled error occurred', + ); + } + } finally { + errorLoggerSpy.mockRestore(); } - expect((await app.request('/fast')).status).toBe(200); }); test('releases the slot taken by a shed request', async () => { const {app, release, entered} = buildApp(1); + const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); const inflight = app.request('/slow'); - await entered.promise; + try { + await entered.promise; - expect((await app.request('/fast')).status).toBe(503); - expect((await app.request('/fast')).status).toBe(503); + expect((await app.request('/fast')).status).toBe(503); + expect((await app.request('/fast')).status).toBe(503); + expect(errorLoggerSpy).toHaveBeenCalledTimes(2); + for (let callIndex = 1; callIndex <= 2; callIndex += 1) { + expect(errorLoggerSpy).toHaveBeenNthCalledWith( + callIndex, + { + err: expect.any(ServiceUnavailableError), + method: 'GET', + path: '/fast', + requestId: undefined, + status: 503, + }, + 'Request failed', + ); + } - release.resolve(); - await inflight; + release.resolve(); + await inflight; - expect((await app.request('/fast')).status).toBe(200); + expect((await app.request('/fast')).status).toBe(200); + } finally { + release.resolve(); + errorLoggerSpy.mockRestore(); + } }); }); diff --git a/fluxer_api/src/api/middleware/tests/ResponseTypeMiddleware.test.ts b/fluxer_api/src/api/middleware/tests/ResponseTypeMiddleware.test.ts index bf5a72218..34250544e 100644 --- a/fluxer_api/src/api/middleware/tests/ResponseTypeMiddleware.test.ts +++ b/fluxer_api/src/api/middleware/tests/ResponseTypeMiddleware.test.ts @@ -1,8 +1,9 @@ // SPDX-License-Identifier: AGPL-3.0-or-later +import {Logger} from '@fluxer/logger/src/Logger'; import {SnowflakeType} from '@fluxer/schema/src/primitives/SchemaPrimitives'; import {Hono} from 'hono'; -import {afterAll, beforeEach, describe, expect, test} from 'vitest'; +import {afterAll, beforeEach, describe, expect, test, vi} from 'vitest'; import {z} from 'zod'; import {Config} from '../../Config'; import type {HonoEnv} from '../../types/HonoEnv'; @@ -52,10 +53,26 @@ describe('ResponseTypeMiddleware', () => { test('rejects mismatching responses while validation is enabled', async () => { const app = new Hono(); app.get('/snowflake', ResponseType(SnowflakeResponse), (ctx) => ctx.json({id: 'not-a-snowflake'})); + const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); - const response = await app.request('/snowflake'); + try { + const response = await app.request('/snowflake'); - expect(response.status).toBe(500); + expect(response.status).toBe(500); + expect(errorLoggerSpy).toHaveBeenCalledTimes(1); + expect(errorLoggerSpy).toHaveBeenCalledWith( + { + body: {id: 'not-a-snowflake'}, + method: 'GET', + path: '/snowflake', + status: 200, + validationErrors: [{message: 'INVALID_SNOWFLAKE_FORMAT', path: 'id'}], + }, + 'Response validation failed', + ); + } finally { + errorLoggerSpy.mockRestore(); + } }); test('passes the response through untouched while validation is disabled', async () => { diff --git a/fluxer_api/src/api/search/SearchNsfwUtils.ts b/fluxer_api/src/api/search/SearchNsfwUtils.ts index f0381541c..e952ff6fb 100644 --- a/fluxer_api/src/api/search/SearchNsfwUtils.ts +++ b/fluxer_api/src/api/search/SearchNsfwUtils.ts @@ -9,8 +9,7 @@ export function channelRequiresAgeVerification( channelsById: ReadonlyMap, guildNsfw: boolean, ): boolean { - const parentCategory = - channel.parentId != null ? (channelsById.get(channel.parentId.toString()) ?? null) : null; + const parentCategory = channel.parentId != null ? (channelsById.get(channel.parentId.toString()) ?? null) : null; return computeEffectiveChannelNsfw( channelToContentWarningView(channel), parentCategory ? channelToContentWarningView(parentCategory) : null, diff --git a/fluxer_api/src/api/stripe/tests/StripeWebhookRefund.test.ts b/fluxer_api/src/api/stripe/tests/StripeWebhookRefund.test.ts index bd9edb405..868c29b40 100644 --- a/fluxer_api/src/api/stripe/tests/StripeWebhookRefund.test.ts +++ b/fluxer_api/src/api/stripe/tests/StripeWebhookRefund.test.ts @@ -49,6 +49,20 @@ describe('Stripe Webhook Refund', () => { .body(payload) .execute(); } + function useRefundListHandler(chargeId: string): void { + server.use( + http.get( + ({request}) => request.url === `https://api.stripe.com/v1/refunds?charge=${chargeId}&limit=100`, + () => + HttpResponse.json({ + object: 'list', + data: [], + has_more: false, + url: '/v1/refunds', + }), + ), + ); + } describe('charge.refunded', () => { test('revokes premium and records first refund', async () => { const account = await createTestAccount(harness); @@ -73,6 +87,7 @@ describe('Stripe Webhook Refund', () => { payment_intent_id: paymentIntentId, completed_at: new Date(), }); + useRefundListHandler('ch_test_refund_123'); await sendWebhook({ type: 'charge.refunded', data: { @@ -121,6 +136,7 @@ describe('Stripe Webhook Refund', () => { payment_intent_id: paymentIntentId, completed_at: new Date(), }); + useRefundListHandler('ch_test_refund_456'); await sendWebhook({ type: 'charge.refunded', data: { @@ -150,6 +166,7 @@ describe('Stripe Webhook Refund', () => { {stripe_customer_id: stripeCustomerId}, (await userRepository.findUnique(userId))!.toRow(), ); + useRefundListHandler('ch_test_refund_sub_789'); await sendWebhook({ type: 'charge.refunded', data: { @@ -182,6 +199,7 @@ describe('Stripe Webhook Refund', () => { subscriptionCurrentPeriodEnd: null, subscriptionCancelAt: null, }); + useRefundListHandler('ch_test_refund_donation_101'); const result = await sendWebhook({ type: 'charge.refunded', data: { @@ -234,6 +252,7 @@ describe('Stripe Webhook Refund', () => { premium_until: new Date(Date.now() + 60 * 24 * 60 * 60 * 1000).toISOString(), }) .execute(); + useRefundListHandler('ch_test_refund_gift_multi_123'); await sendWebhook({ type: 'charge.refunded', data: { @@ -287,6 +306,7 @@ describe('Stripe Webhook Refund', () => { .get('/users/@me') .execute(); expect(redeemerBefore.premium_type).toBe(UserPremiumTypes.SUBSCRIPTION); + useRefundListHandler('ch_test_refund_stripe_cus_only'); await sendWebhook({ type: 'charge.refunded', data: { @@ -325,6 +345,7 @@ describe('Stripe Webhook Refund', () => { premium_type: UserPremiumTypes.LIFETIME, }) .execute(); + useRefundListHandler('ch_test_refund_gift_override_123'); await sendWebhook({ type: 'charge.refunded', data: { diff --git a/fluxer_api/src/api/user/services/UserRelationshipService.ts b/fluxer_api/src/api/user/services/UserRelationshipService.ts index 86f1a2201..7b2166dc0 100644 --- a/fluxer_api/src/api/user/services/UserRelationshipService.ts +++ b/fluxer_api/src/api/user/services/UserRelationshipService.ts @@ -119,12 +119,8 @@ export class UserRelationshipService { requestCache: RequestCache; }): Promise { const requesterUser = await this.userRepository.findUnique(userId); - const requesterIsStaff = - requesterUser != null && (requesterUser.flags & UserFlags.STAFF) === UserFlags.STAFF; - if ( - !requesterIsStaff && - (await getInstanceConfigRepository().getInstancePolicyConfig()).direct_messages_disabled - ) { + const requesterIsStaff = requesterUser != null && (requesterUser.flags & UserFlags.STAFF) === UserFlags.STAFF; + if (!requesterIsStaff && (await getInstanceConfigRepository().getInstancePolicyConfig()).direct_messages_disabled) { throw new DirectMessagesDisabledError(); } if (staffForceAccept && requesterIsStaff) { diff --git a/fluxer_app/package.json b/fluxer_app/package.json index 5855ceba9..f43461b71 100644 --- a/fluxer_app/package.json +++ b/fluxer_app/package.json @@ -267,7 +267,7 @@ "@typescript/native-preview": "catalog:", "autoprefixer": "catalog:", "esbuild": "catalog:", - "happy-dom": "20.7.0", + "happy-dom": "20.12.0", "postcss": "catalog:", "postcss-discard-comments": "catalog:", "postcss-loader": "catalog:", diff --git a/fluxer_app/rust/libfluxcore/Cargo.lock b/fluxer_app/rust/libfluxcore/Cargo.lock index d8408b781..166f5a34b 100644 --- a/fluxer_app/rust/libfluxcore/Cargo.lock +++ b/fluxer_app/rust/libfluxcore/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "autocfg" diff --git a/fluxer_app/scripts/GenerateEmojiSprites.ts b/fluxer_app/scripts/GenerateEmojiSprites.ts index 88dc8520f..4b055f817 100644 --- a/fluxer_app/scripts/GenerateEmojiSprites.ts +++ b/fluxer_app/scripts/GenerateEmojiSprites.ts @@ -2,7 +2,7 @@ import {mkdirSync, readFileSync, writeFileSync} from 'node:fs'; import {join} from 'node:path'; -import sharp from 'sharp'; +import sharp, {type OverlayOptions} from 'sharp'; import {convertToCodePoints} from '../src/features/expressions/utils/EmojiCodepointUtils'; const EMOJI_SPRITES = { @@ -131,7 +131,7 @@ async function renderSpriteSheet( const size = EMOJI_SIZE * scale; const dstW = perRow * size; const dstH = rows * size; - const compositeOps: Array = []; + const compositeOps: Array = []; for (let i = 0; i < emojiEntries.length; i++) { const item = emojiEntries[i]; const emojiBuffer = await loadEmojiImage(item.surrogates, size); diff --git a/fluxer_app/scripts/add-data-flx-attributes.mjs b/fluxer_app/scripts/add-data-flx-attributes.mjs index 89e67bbc3..edcbb1299 100644 --- a/fluxer_app/scripts/add-data-flx-attributes.mjs +++ b/fluxer_app/scripts/add-data-flx-attributes.mjs @@ -9,6 +9,7 @@ const APP_DIR = fileURLToPath(new URL('..', import.meta.url)); const SOURCE_DIR = join(APP_DIR, 'src'); const JSX_EXTENSIONS = new Set(['.tsx', '.jsx']); const SKIP_DIRS = new Set(['node_modules', 'dist', 'coverage', '.cache', '.swc']); +const GENERATED_FILES = new Set([join(SOURCE_DIR, 'features', 'ui', 'components', 'SVGMasks.tsx')]); const NON_THEMEABLE_IDENTIFIERS = new Set([ 'Fragment', 'I18nProvider', @@ -153,7 +154,9 @@ function collectFiles(paths) { files.push(absolute); } } - return Array.from(new Set(files)).sort(); + return Array.from(new Set(files)) + .filter((file) => !GENERATED_FILES.has(file)) + .sort(); } function parseSource(source, filePath) { diff --git a/fluxer_app/src/app/font-fallback.css b/fluxer_app/src/app/font-fallback.css index f7fe7cdea..4d522f7c9 100644 --- a/fluxer_app/src/app/font-fallback.css +++ b/fluxer_app/src/app/font-fallback.css @@ -15,9 +15,7 @@ 'Segoe UI Symbol', 'Segoe UI Historic', 'Apple Symbols', 'Noto Sans Symbols', 'Noto Sans Symbols 2', 'Noto Sans Math', 'Cambria Math'; --font-fallback-mono: - 'Noto Sans Mono', - 'Fluxer Sans SC', 'Fluxer Sans TC', 'Fluxer Sans JP', 'Fluxer Sans KR', - var(--font-fallback-sans); + 'Noto Sans Mono', 'Fluxer Sans SC', 'Fluxer Sans TC', 'Fluxer Sans JP', 'Fluxer Sans KR', var(--font-fallback-sans); --font-sans: 'Fluxer Sans', 'Fluxer Sans Arabic', 'Fluxer Sans Hebrew', 'Fluxer Sans Devanagari', 'Fluxer Sans Thai Looped', diff --git a/fluxer_app/src/app/fonts/fallback/fallback-faces.css b/fluxer_app/src/app/fonts/fallback/fallback-faces.css index dfac20583..cf66cdae0 100644 --- a/fluxer_app/src/app/fonts/fallback/fallback-faces.css +++ b/fluxer_app/src/app/fonts/fallback/fallback-faces.css @@ -6,7 +6,8 @@ font-weight: 400; font-style: normal; font-display: swap; - unicode-range: U+0980-0983, U+0985-098C, U+098F-0990, U+0993-09A8, U+09AA-09B0, U+09B2, U+09B6-09B9, U+09BC-09C4, U+09C7-09C8, U+09CB-09CE, U+09D7, U+09DC-09DD, U+09DF-09E3, U+09E6-09FE; + unicode-range: + U+0980-0983, U+0985-098C, U+098F-0990, U+0993-09A8, U+09AA-09B0, U+09B2, U+09B6-09B9, U+09BC-09C4, U+09C7-09C8, U+09CB-09CE, U+09D7, U+09DC-09DD, U+09DF-09E3, U+09E6-09FE; } @font-face { font-family: 'Fluxer Fallback'; @@ -14,7 +15,8 @@ font-weight: 400; font-style: normal; font-display: swap; - unicode-range: U+0B82-0B83, U+0B85-0B8A, U+0B8E-0B90, U+0B92-0B95, U+0B99-0B9A, U+0B9C, U+0B9E-0B9F, U+0BA3-0BA4, U+0BA8-0BAA, U+0BAE-0BB9, U+0BBE-0BC2, U+0BC6-0BC8, U+0BCA-0BCD, U+0BD0, U+0BD7, U+0BE6-0BFA; + unicode-range: + U+0B82-0B83, U+0B85-0B8A, U+0B8E-0B90, U+0B92-0B95, U+0B99-0B9A, U+0B9C, U+0B9E-0B9F, U+0BA3-0BA4, U+0BA8-0BAA, U+0BAE-0BB9, U+0BBE-0BC2, U+0BC6-0BC8, U+0BCA-0BCD, U+0BD0, U+0BD7, U+0BE6-0BFA; } @font-face { font-family: 'Fluxer Fallback'; @@ -22,7 +24,8 @@ font-weight: 400; font-style: normal; font-display: swap; - unicode-range: U+0C00-0C0C, U+0C0E-0C10, U+0C12-0C28, U+0C2A-0C39, U+0C3C-0C44, U+0C46-0C48, U+0C4A-0C4D, U+0C55-0C56, U+0C58-0C5A, U+0C5D, U+0C60-0C63, U+0C66-0C6F, U+0C77-0C7F; + unicode-range: + U+0C00-0C0C, U+0C0E-0C10, U+0C12-0C28, U+0C2A-0C39, U+0C3C-0C44, U+0C46-0C48, U+0C4A-0C4D, U+0C55-0C56, U+0C58-0C5A, U+0C5D, U+0C60-0C63, U+0C66-0C6F, U+0C77-0C7F; } @font-face { font-family: 'Fluxer Fallback'; @@ -30,7 +33,8 @@ font-weight: 400; font-style: normal; font-display: swap; - unicode-range: U+0C80-0C8C, U+0C8E-0C90, U+0C92-0CA8, U+0CAA-0CB3, U+0CB5-0CB9, U+0CBC-0CC4, U+0CC6-0CC8, U+0CCA-0CCD, U+0CD5-0CD6, U+0CDD-0CDE, U+0CE0-0CE3, U+0CE6-0CEF, U+0CF1-0CF3; + unicode-range: + U+0C80-0C8C, U+0C8E-0C90, U+0C92-0CA8, U+0CAA-0CB3, U+0CB5-0CB9, U+0CBC-0CC4, U+0CC6-0CC8, U+0CCA-0CCD, U+0CD5-0CD6, U+0CDD-0CDE, U+0CE0-0CE3, U+0CE6-0CEF, U+0CF1-0CF3; } @font-face { font-family: 'Fluxer Fallback'; @@ -46,7 +50,8 @@ font-weight: 400; font-style: normal; font-display: swap; - unicode-range: U+0A81-0A83, U+0A85-0A8D, U+0A8F-0A91, U+0A93-0AA8, U+0AAA-0AB0, U+0AB2-0AB3, U+0AB5-0AB9, U+0ABC-0AC5, U+0AC7-0AC9, U+0ACB-0ACD, U+0AD0, U+0AE0-0AE3, U+0AE6-0AF1, U+0AF9-0AFF; + unicode-range: + U+0A81-0A83, U+0A85-0A8D, U+0A8F-0A91, U+0A93-0AA8, U+0AAA-0AB0, U+0AB2-0AB3, U+0AB5-0AB9, U+0ABC-0AC5, U+0AC7-0AC9, U+0ACB-0ACD, U+0AD0, U+0AE0-0AE3, U+0AE6-0AF1, U+0AF9-0AFF; } @font-face { font-family: 'Fluxer Fallback'; @@ -54,7 +59,8 @@ font-weight: 400; font-style: normal; font-display: swap; - unicode-range: U+0A01-0A03, U+0A05-0A0A, U+0A0F-0A10, U+0A13-0A28, U+0A2A-0A30, U+0A32-0A33, U+0A35-0A36, U+0A38-0A39, U+0A3C, U+0A3E-0A42, U+0A47-0A48, U+0A4B-0A4D, U+0A51, U+0A59-0A5C, U+0A5E, U+0A66-0A76; + unicode-range: + U+0A01-0A03, U+0A05-0A0A, U+0A0F-0A10, U+0A13-0A28, U+0A2A-0A30, U+0A32-0A33, U+0A35-0A36, U+0A38-0A39, U+0A3C, U+0A3E-0A42, U+0A47-0A48, U+0A4B-0A4D, U+0A51, U+0A59-0A5C, U+0A5E, U+0A66-0A76; } @font-face { font-family: 'Fluxer Fallback'; @@ -62,7 +68,8 @@ font-weight: 400; font-style: normal; font-display: swap; - unicode-range: U+0B01-0B03, U+0B05-0B0C, U+0B0F-0B10, U+0B13-0B28, U+0B2A-0B30, U+0B32-0B33, U+0B35-0B39, U+0B3C-0B44, U+0B47-0B48, U+0B4B-0B4D, U+0B55-0B57, U+0B5C-0B5D, U+0B5F-0B63, U+0B66-0B77; + unicode-range: + U+0B01-0B03, U+0B05-0B0C, U+0B0F-0B10, U+0B13-0B28, U+0B2A-0B30, U+0B32-0B33, U+0B35-0B39, U+0B3C-0B44, U+0B47-0B48, U+0B4B-0B4D, U+0B55-0B57, U+0B5C-0B5D, U+0B5F-0B63, U+0B66-0B77; } @font-face { font-family: 'Fluxer Fallback'; @@ -70,7 +77,8 @@ font-weight: 400; font-style: normal; font-display: swap; - unicode-range: U+0D81-0D83, U+0D85-0D96, U+0D9A-0DB1, U+0DB3-0DBB, U+0DBD, U+0DC0-0DC6, U+0DCA, U+0DCF-0DD4, U+0DD6, U+0DD8-0DDF, U+0DE6-0DEF, U+0DF2-0DF4, U+111E1-111F4; + unicode-range: + U+0D81-0D83, U+0D85-0D96, U+0D9A-0DB1, U+0DB3-0DBB, U+0DBD, U+0DC0-0DC6, U+0DCA, U+0DCF-0DD4, U+0DD6, U+0DD8-0DDF, U+0DE6-0DEF, U+0DF2-0DF4, U+111E1-111F4; } @font-face { font-family: 'Fluxer Fallback'; @@ -86,7 +94,9 @@ font-weight: 400; font-style: normal; font-display: swap; - unicode-range: U+0E81-0E82, U+0E84, U+0E86-0E8A, U+0E8C-0EA3, U+0EA5, U+0EA7-0EBD, U+0EC0-0EC4, U+0EC6, U+0EC8-0ECE, U+0ED0-0ED9, U+0EDC-0EDF; + unicode-range: + U+0E81-0E82, U+0E84, U+0E86-0E8A, U+0E8C-0EA3, U+0EA5, U+0EA7-0EBD, U+0EC0-0EC4, U+0EC6, U+0EC8-0ECE, U+0ED0-0ED9, + U+0EDC-0EDF; } @font-face { font-family: 'Fluxer Fallback'; @@ -118,7 +128,8 @@ font-weight: 400; font-style: normal; font-display: swap; - unicode-range: U+1200-1248, U+124A-124D, U+1250-1256, U+1258, U+125A-125D, U+1260-1288, U+128A-128D, U+1290-12B0, U+12B2-12B5, U+12B8-12BE, U+12C0, U+12C2-12C5, U+12C8-12D6, U+12D8-1310, U+1312-1315, U+1318-135A, U+135D-137C, U+1380-1399, U+2D80-2D96, U+2DA0-2DA6, U+2DA8-2DAE, U+2DB0-2DB6, U+2DB8-2DBE, U+2DC0-2DC6, U+2DC8-2DCE, U+2DD0-2DD6, U+2DD8-2DDE, U+AB01-AB06, U+AB09-AB0E, U+AB11-AB16, U+AB20-AB26, U+AB28-AB2E, U+1E7E0-1E7E6, U+1E7E8-1E7EB, U+1E7ED-1E7EE, U+1E7F0-1E7FE; + unicode-range: + U+1200-1248, U+124A-124D, U+1250-1256, U+1258, U+125A-125D, U+1260-1288, U+128A-128D, U+1290-12B0, U+12B2-12B5, U+12B8-12BE, U+12C0, U+12C2-12C5, U+12C8-12D6, U+12D8-1310, U+1312-1315, U+1318-135A, U+135D-137C, U+1380-1399, U+2D80-2D96, U+2DA0-2DA6, U+2DA8-2DAE, U+2DB0-2DB6, U+2DB8-2DBE, U+2DC0-2DC6, U+2DC8-2DCE, U+2DD0-2DD6, U+2DD8-2DDE, U+AB01-AB06, U+AB09-AB0E, U+AB11-AB16, U+AB20-AB26, U+AB28-AB2E, U+1E7E0-1E7E6, U+1E7E8-1E7EB, U+1E7ED-1E7EE, U+1E7F0-1E7FE; } @font-face { font-family: 'Fluxer Fallback'; @@ -198,7 +209,8 @@ font-weight: 400; font-style: normal; font-display: swap; - unicode-range: U+2190-2199, U+2300-230F, U+2311-2315, U+2317, U+231C-231F, U+2322-2323, U+2329-232A, U+232C-2335, U+237C, U+2380-2394, U+2396-239A, U+23AF, U+23BE-23CD, U+23D0-23DB, U+23E2-23E8, U+2460-24FF, U+25CC, U+260A-260D, U+2613, U+2624-262F, U+2638-263B, U+263D-2653, U+2669-267E, U+2690-269D, U+26A2-26A9, U+26AD-26BC, U+26CE, U+26E2-26FF, U+271D-2721, U+2776-2793, U+1F100-1F10C, U+1F110-1F16C, U+1F170-1F190, U+1F19B-1F1AC, U+1F546-1F549, U+1F54F, U+1F610, U+1F700-1F773; + unicode-range: + U+2190-2199, U+2300-230F, U+2311-2315, U+2317, U+231C-231F, U+2322-2323, U+2329-232A, U+232C-2335, U+237C, U+2380-2394, U+2396-239A, U+23AF, U+23BE-23CD, U+23D0-23DB, U+23E2-23E8, U+2460-24FF, U+25CC, U+260A-260D, U+2613, U+2624-262F, U+2638-263B, U+263D-2653, U+2669-267E, U+2690-269D, U+26A2-26A9, U+26AD-26BC, U+26CE, U+26E2-26FF, U+271D-2721, U+2776-2793, U+1F100-1F10C, U+1F110-1F16C, U+1F170-1F190, U+1F19B-1F1AC, U+1F546-1F549, U+1F54F, U+1F610, U+1F700-1F773; } @font-face { font-family: 'Fluxer Symbols'; @@ -206,7 +218,8 @@ font-weight: 400; font-style: normal; font-display: swap; - unicode-range: U+21AF, U+21E6-21F0, U+21F3, U+2316, U+2318, U+231A-231B, U+2324-2328, U+232B, U+237B, U+237D-237F, U+23CE-23CF, U+23E9-23EA, U+23ED-23EF, U+23F1-2426, U+2440-244A, U+25A0-25CB, U+25CD-2609, U+260E-2612, U+2614-2623, U+2630-2637, U+263C, U+2654-2668, U+267F-268F, U+269E-26A1, U+26AA-26AC, U+26BD-26CD, U+26CF-26E1, U+2700-2704, U+2706-2709, U+270B-271C, U+2722-2727, U+2729-274B, U+274D, U+274F-2753, U+2756-2775, U+2794, U+2798-27AF, U+27B1-27BE, U+2800-28FF, U+2B00-2B0D, U+2B12-2B2F, U+2B4D-2B73, U+2B76-2B95, U+2B97-2BFD, U+2BFF, U+1F000-1F02B, U+1F030-1F093, U+1F0A0-1F0AE, U+1F0B1-1F0BF, U+1F0C1-1F0CF, U+1F0D1-1F0F5, U+1F10D-1F10F, U+1F16D-1F16F, U+1F1AD, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F321-1F32C, U+1F336, U+1F378, U+1F37D, U+1F393-1F39F, U+1F3A7, U+1F3AC-1F3AE, U+1F3C2, U+1F3C4, U+1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4DA, U+1F4DF, U+1F4E4-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50A, U+1F50D, U+1F512-1F513, U+1F53E-1F545, U+1F54A, U+1F550-1F579, U+1F57B-1F594, U+1F597-1F5A3, U+1F5A5-1F5FA, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CB, U+1F6CD-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F774-1F776, U+1F77B-1F7D9, U+1F7E0-1F7EB, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8B1, U+1F900-1F90B, U+1F93B, U+1F946, U+1FA00-1FA53, U+1FA60-1FA6D, U+1FA70-1FA74, U+1FA78-1FA7A, U+1FA80-1FA86, U+1FA90-1FAA8, U+1FAB0-1FAB6, U+1FAC0-1FAC2, U+1FAD0-1FAD6, U+1FB00-1FB92, U+1FB94-1FBCA, U+1FBF0-1FBF9; + unicode-range: + U+21AF, U+21E6-21F0, U+21F3, U+2316, U+2318, U+231A-231B, U+2324-2328, U+232B, U+237B, U+237D-237F, U+23CE-23CF, U+23E9-23EA, U+23ED-23EF, U+23F1-2426, U+2440-244A, U+25A0-25CB, U+25CD-2609, U+260E-2612, U+2614-2623, U+2630-2637, U+263C, U+2654-2668, U+267F-268F, U+269E-26A1, U+26AA-26AC, U+26BD-26CD, U+26CF-26E1, U+2700-2704, U+2706-2709, U+270B-271C, U+2722-2727, U+2729-274B, U+274D, U+274F-2753, U+2756-2775, U+2794, U+2798-27AF, U+27B1-27BE, U+2800-28FF, U+2B00-2B0D, U+2B12-2B2F, U+2B4D-2B73, U+2B76-2B95, U+2B97-2BFD, U+2BFF, U+1F000-1F02B, U+1F030-1F093, U+1F0A0-1F0AE, U+1F0B1-1F0BF, U+1F0C1-1F0CF, U+1F0D1-1F0F5, U+1F10D-1F10F, U+1F16D-1F16F, U+1F1AD, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F321-1F32C, U+1F336, U+1F378, U+1F37D, U+1F393-1F39F, U+1F3A7, U+1F3AC-1F3AE, U+1F3C2, U+1F3C4, U+1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4DA, U+1F4DF, U+1F4E4-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50A, U+1F50D, U+1F512-1F513, U+1F53E-1F545, U+1F54A, U+1F550-1F579, U+1F57B-1F594, U+1F597-1F5A3, U+1F5A5-1F5FA, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CB, U+1F6CD-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F774-1F776, U+1F77B-1F7D9, U+1F7E0-1F7EB, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8B1, U+1F900-1F90B, U+1F93B, U+1F946, U+1FA00-1FA53, U+1FA60-1FA6D, U+1FA70-1FA74, U+1FA78-1FA7A, U+1FA80-1FA86, U+1FA90-1FAA8, U+1FAB0-1FAB6, U+1FAC0-1FAC2, U+1FAD0-1FAD6, U+1FB00-1FB92, U+1FB94-1FBCA, U+1FBF0-1FBF9; } @font-face { font-family: 'Fluxer Math'; @@ -214,5 +227,6 @@ font-weight: 400; font-style: normal; font-display: swap; - unicode-range: U+2102, U+210A-2113, U+2115, U+2119-211D, U+2124, U+2128, U+212C-212D, U+212F-2131, U+2133-2138, U+213C-2140, U+2145-2149, U+2200-22FF, U+27C0-27FF, U+2900-2AFF, U+1D400-1D454, U+1D456-1D49C, U+1D49E-1D49F, U+1D4A2, U+1D4A5-1D4A6, U+1D4A9-1D4AC, U+1D4AE-1D4B9, U+1D4BB, U+1D4BD-1D4C3, U+1D4C5-1D505, U+1D507-1D50A, U+1D50D-1D514, U+1D516-1D51C, U+1D51E-1D539, U+1D53B-1D53E, U+1D540-1D544, U+1D546, U+1D54A-1D550, U+1D552-1D6A5, U+1D6A8-1D7CB, U+1D7CE-1D7FF; + unicode-range: + U+2102, U+210A-2113, U+2115, U+2119-211D, U+2124, U+2128, U+212C-212D, U+212F-2131, U+2133-2138, U+213C-2140, U+2145-2149, U+2200-22FF, U+27C0-27FF, U+2900-2AFF, U+1D400-1D454, U+1D456-1D49C, U+1D49E-1D49F, U+1D4A2, U+1D4A5-1D4A6, U+1D4A9-1D4AC, U+1D4AE-1D4B9, U+1D4BB, U+1D4BD-1D4C3, U+1D4C5-1D505, U+1D507-1D50A, U+1D50D-1D514, U+1D516-1D51C, U+1D51E-1D539, U+1D53B-1D53E, U+1D540-1D544, U+1D546, U+1D54A-1D550, U+1D552-1D6A5, U+1D6A8-1D7CB, U+1D7CE-1D7FF; } diff --git a/fluxer_app/src/features/slowmode/state/SlowmodePendingSend.test.ts b/fluxer_app/src/features/slowmode/state/SlowmodePendingSend.test.ts index 97e69596b..a32a650ff 100644 --- a/fluxer_app/src/features/slowmode/state/SlowmodePendingSend.test.ts +++ b/fluxer_app/src/features/slowmode/state/SlowmodePendingSend.test.ts @@ -2,10 +2,44 @@ import {resolveRetryAfterMs} from '@app/features/messaging/utils/RetryAfterUtils'; import {HttpError} from '@app/features/platform/types/EndpointError'; -import * as SlowmodeCommands from '@app/features/slowmode/commands/SlowmodeCommands'; -import Slowmode from '@app/features/slowmode/state/Slowmode'; +import {Logger} from '@app/features/platform/utils/AppLogger'; +import type {PendingMessageSend} from '@app/features/slowmode/commands/SlowmodeCommands'; import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; -import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest'; +import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from 'vitest'; + +interface SlowmodeStore { + clearChannel(channelId: string): void; + getLastSendTimestamp(channelId: string): number | null; + getSlowmodeRemaining(channelId: string, rateLimitPerUser: number): number; +} + +interface SlowmodeCommandModule { + clampSlowmodeRetryAfterMs(retryAfterMs: number | null): number; + confirmMessageSend(channelId: string, sentAt: string, pending?: PendingMessageSend): void; + discardPendingMessageSend(channelId: string, pending: PendingMessageSend): void; + recordPendingMessageSend(channelId: string): PendingMessageSend; + updateSlowmodeRemaining(channelId: string, retryAfterMs: number): void; +} + +let Slowmode: SlowmodeStore; +let SlowmodeCommands: SlowmodeCommandModule; + +beforeAll(async () => { + const debug = vi.spyOn(Logger.prototype, 'debug').mockImplementation(() => undefined); + try { + const [slowmodeModule, commandModule, persistenceModule] = await Promise.all([ + import('@app/features/slowmode/state/Slowmode'), + import('@app/features/slowmode/commands/SlowmodeCommands'), + import('@app/features/platform/utils/MobXPersistence'), + ]); + Slowmode = slowmodeModule.default; + SlowmodeCommands = commandModule; + await persistenceModule.awaitHydration('Slowmode'); + expect(debug).toHaveBeenCalledExactlyOnceWith('Store Slowmode hydrated from AppStorage and is now persisting.'); + } finally { + debug.mockRestore(); + } +}); const CHANNEL_ID = '1234567890123456789'; const RATE_LIMIT_PER_USER = 5; diff --git a/fluxer_app/src/features/ui/action_menu/items/VoiceParticipantMenuData.test.tsx b/fluxer_app/src/features/ui/action_menu/items/VoiceParticipantMenuData.test.tsx deleted file mode 100644 index d1bc6c8fe..000000000 --- a/fluxer_app/src/features/ui/action_menu/items/VoiceParticipantMenuData.test.tsx +++ /dev/null @@ -1,167 +0,0 @@ -// @vitest-environment happy-dom -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {installVoiceMenuTestBootstrap} from '@app/features/ui/action_menu/items/__fixtures__/VoiceMenuTestBootstrap'; -import type {VoiceParticipantMenuSource} from '@app/features/ui/action_menu/items/VoiceParticipantMenuTypes'; -import type {User} from '@app/features/user/models/User'; -import {act, createElement} from 'react'; -import {createRoot, type Root} from 'react-dom/client'; -import {afterEach, expect, test, vi} from 'vitest'; - -vi.mock('@lingui/core/macro', () => { - const descriptor = (value: unknown): unknown => (typeof value === 'string' ? {message: value} : value); - return {msg: descriptor, t: descriptor, plural: () => '', select: () => '', selectOrdinal: () => ''}; -}); -vi.mock('@lingui/react/macro', () => ({ - Trans: () => null, - useLingui: () => ({i18n: {_: (descriptor: {message?: string}) => descriptor.message ?? '', locale: 'en'}}), -})); - -installVoiceMenuTestBootstrap(); - -const {useVoiceParticipantMenuData} = await import('@app/features/ui/action_menu/items/VoiceParticipantMenuData'); -const {default: EntranceSoundListenerPrefs} = await import('@app/features/voice/state/EntranceSoundListenerPrefs'); -const {default: MediaEngine} = await import('@app/features/voice/engine/MediaEngineFacade'); -const {observer} = await import('mobx-react-lite'); - -(globalThis as {IS_REACT_ACT_ENVIRONMENT?: boolean}).IS_REACT_ACT_ENVIRONMENT = true; - -const TARGET_USER = {id: '111', username: 'target'} as unknown as User; -const PARTICIPANT_SOURCE: VoiceParticipantMenuSource = {kind: 'participant'}; -const CAMERA_SOURCE: VoiceParticipantMenuSource = {kind: 'camera'}; -const noop = (): void => undefined; - -interface MenuLeaf { - label?: string; - checked?: boolean; - value?: number; - items?: Array; -} - -interface MenuGroup { - items: Array; -} - -const shadowedMediaEngineKeys: Array = []; -let root: Root | null = null; -let container: HTMLDivElement | null = null; - -function shadowMediaEngine(key: string, value: unknown): void { - Object.defineProperty(MediaEngine, key, {value, configurable: true, writable: true}); - shadowedMediaEngineKeys.push(key); -} - -function findLeaf(groups: Array, label: string): MenuLeaf | null { - for (const group of groups) { - for (const item of group.items) { - if (item.label === label) return item; - for (const child of item.items ?? []) { - if (child.label === label) return child; - } - } - } - return null; -} - -async function renderMenu( - options: Parameters[0], -): Promise<{groups: () => Array}> { - const latest: {groups: Array} = {groups: []}; - const Probe = observer(function Probe() { - latest.groups = useVoiceParticipantMenuData(options).groups as unknown as Array; - return null; - }); - container = document.createElement('div'); - document.body.appendChild(container); - root = createRoot(container); - await act(async () => { - root?.render(createElement(Probe)); - }); - return {groups: () => latest.groups}; -} - -afterEach(async () => { - await act(async () => { - root?.unmount(); - }); - root = null; - container?.remove(); - container = null; - for (const key of shadowedMediaEngineKeys.splice(0)) { - delete (MediaEngine as unknown as Record)[key]; - } - EntranceSoundListenerPrefs.reset(TARGET_USER.id); -}); - -test('entrance-sound checkbox tracks the pref while the menu stays open', async () => { - const menu = await renderMenu({ - user: TARGET_USER, - surface: 'call-tile', - source: PARTICIPANT_SOURCE, - onClose: noop, - }); - expect(findLeaf(menu.groups(), 'Mute entrance sound')?.checked).toBe(false); - await act(async () => { - EntranceSoundListenerPrefs.setMuted(TARGET_USER.id, true); - }); - expect(findLeaf(menu.groups(), 'Mute entrance sound')?.checked).toBe(true); - await act(async () => { - EntranceSoundListenerPrefs.setVolume(TARGET_USER.id, 42); - }); - expect(findLeaf(menu.groups(), 'Entrance sound volume')?.value).toBe(42); -}); - -test('disable video locally is offered for another user camera tile in the local room', async () => { - shadowMediaEngine('connected', true); - shadowMediaEngine('connectionId', 'self-connection'); - shadowMediaEngine('channelId', 'channel-1'); - shadowMediaEngine('getVoiceStateByConnectionId', (connectionId: string) => - connectionId === 'target-connection' ? {channel_id: 'channel-1', user_id: TARGET_USER.id} : null, - ); - const menu = await renderMenu({ - user: TARGET_USER, - connectionId: 'target-connection', - surface: 'call-tile', - source: CAMERA_SOURCE, - onClose: noop, - }); - expect(findLeaf(menu.groups(), 'Disable video locally')).not.toBeNull(); -}); - -test('offers a single inline user-volume slider and no nested secondary submenu wrapper', async () => { - const REMOVED_SUBMENU_LABELS = [ - 'Media controls', - 'Device controls', - 'Display options', - 'User actions', - 'Relationship', - 'Relationship actions', - 'Moderation', - 'Moderation actions', - 'Advanced', - 'Advanced actions', - ]; - shadowMediaEngine('connected', true); - shadowMediaEngine('connectionId', 'self-connection'); - shadowMediaEngine('channelId', 'channel-1'); - shadowMediaEngine('getVoiceStateByConnectionId', (connectionId: string) => - connectionId === 'target-connection' ? {channel_id: 'channel-1', user_id: TARGET_USER.id} : null, - ); - const menu = await renderMenu({ - user: TARGET_USER, - connectionId: 'target-connection', - surface: 'participant-list', - source: PARTICIPANT_SOURCE, - onClose: noop, - }); - const groups = menu.groups(); - const topLevelItems = groups.flatMap((group) => group.items); - const topLevelSliders = topLevelItems.filter((item) => typeof item.value === 'number'); - expect(topLevelSliders).toHaveLength(1); - expect(topLevelSliders[0]?.label).toBe('User volume'); - const submenuLabels = topLevelItems.filter((item) => Array.isArray(item.items)).map((item) => item.label); - expect(submenuLabels.every((label) => label === 'Entrance sound')).toBe(true); - for (const label of REMOVED_SUBMENU_LABELS) { - expect(findLeaf(groups, label)).toBeNull(); - } -}); diff --git a/fluxer_app/src/features/ui/action_menu/items/VoiceParticipantStreamMenuBuilder.test.tsx b/fluxer_app/src/features/ui/action_menu/items/VoiceParticipantStreamMenuBuilder.test.tsx deleted file mode 100644 index c059bae98..000000000 --- a/fluxer_app/src/features/ui/action_menu/items/VoiceParticipantStreamMenuBuilder.test.tsx +++ /dev/null @@ -1,116 +0,0 @@ -// @vitest-environment happy-dom -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {installVoiceMenuTestBootstrap} from '@app/features/ui/action_menu/items/__fixtures__/VoiceMenuTestBootstrap'; -import type {VoiceParticipantMenuScreenShareSource} from '@app/features/ui/action_menu/items/VoiceParticipantMenuTypes'; -import type {I18n} from '@lingui/core'; -import {expect, test, vi} from 'vitest'; - -vi.mock('@lingui/core/macro', () => { - const descriptor = (value: unknown): unknown => (typeof value === 'string' ? {message: value} : value); - return {msg: descriptor, t: descriptor, plural: () => '', select: () => '', selectOrdinal: () => ''}; -}); -vi.mock('@lingui/react/macro', () => ({ - Trans: () => null, - useLingui: () => ({i18n: {_: (descriptor: {message?: string}) => descriptor.message ?? '', locale: 'en'}}), -})); -vi.mock('@app/features/voice/components/ActiveScreenShareMenu', () => ({ - changeActiveScreenShare: vi.fn(async () => undefined), - stopActiveScreenShare: vi.fn(async () => undefined), -})); -vi.mock('@app/features/voice/components/modals/ScreenSharePickerModal', () => ({ - openScreenSharePreviewPrivacyModal: vi.fn(), -})); -vi.mock('@app/features/voice/engine/MediaEngineFacade', () => ({ - default: { - applyLocalAudioPreferencesForUser: vi.fn(), - getVoiceStateByConnectionId: () => null, - connectionId: null, - }, -})); -vi.mock('@app/features/voice/state/PopoutWindowManager', () => ({ - default: {openTilePopout: vi.fn()}, - isVoicePopoutSupported: () => false, -})); -vi.mock('@app/features/voice/state/StreamAudioPrefs', () => ({ - default: {setMuted: vi.fn(), setVolume: vi.fn()}, -})); -vi.mock('@app/features/voice/state/VoiceSettings', () => ({ - default: {showMyOwnScreenShare: false, pauseOwnScreenSharePreviewOnUnfocus: false}, -})); -vi.mock('@app/features/voice/commands/VoiceSettingsCommands', () => ({ - update: vi.fn(), -})); - -installVoiceMenuTestBootstrap(); - -const {buildVoiceParticipantStreamMenu} = await import( - '@app/features/ui/action_menu/items/VoiceParticipantStreamMenuBuilder' -); - -const i18n = { - locale: 'en', - _: (descriptor: {message?: string}) => descriptor.message ?? '', -} as unknown as I18n; - -interface MenuLeaf { - label?: string; - items?: Array; -} - -function streamMenu(source: VoiceParticipantMenuScreenShareSource): Array<{items: Array}> { - return buildVoiceParticipantStreamMenu({ - i18n, - userId: '111', - channelId: null, - participantIdentity: 'user_111_conn', - displayName: 'Alice', - isCurrentUserConnectedToVoice: false, - source, - streamVolume: 100, - isStreamMuted: false, - showMyOwnScreenShare: false, - pauseOwnScreenSharePreviewOnUnfocus: false, - onClose: () => undefined, - }) as unknown as Array<{items: Array}>; -} - -function findLeaf(groups: Array<{items: Array}>, label: string): MenuLeaf | null { - for (const group of groups) { - for (const item of group.items) { - if (item.label === label) return item; - for (const child of item.items ?? []) { - if (child.label === label) return child; - } - } - } - return null; -} - -const OWN_STREAM_SOURCE: VoiceParticipantMenuScreenShareSource = { - kind: 'screen-share', - streamKey: 'stream-key', - state: {kind: 'own'}, -}; - -const WATCHED_REMOTE_STREAM_SOURCE: VoiceParticipantMenuScreenShareSource = { - kind: 'screen-share', - streamKey: 'stream-key', - state: {kind: 'remote-watched', hasAudio: true, onStopWatching: () => undefined}, -}; - -test('own stream keeps a More options submenu with the screen-share preferences', () => { - const groups = streamMenu(OWN_STREAM_SOURCE); - const moreOptions = findLeaf(groups, 'More options'); - expect(moreOptions).not.toBeNull(); - expect(findLeaf(groups, 'Show My Screen Share')).not.toBeNull(); - expect(findLeaf(groups, 'Report Problem')).toBeNull(); -}); - -test('remote watched stream omits the now-empty More options submenu and keeps audio controls', () => { - const groups = streamMenu(WATCHED_REMOTE_STREAM_SOURCE); - expect(findLeaf(groups, 'More options')).toBeNull(); - expect(findLeaf(groups, 'Mute')).not.toBeNull(); - expect(findLeaf(groups, 'Stream volume')).not.toBeNull(); - expect(findLeaf(groups, 'Report Problem')).toBeNull(); -}); diff --git a/fluxer_app/src/features/ui/action_menu/items/__fixtures__/VoiceMenuTestBootstrap.ts b/fluxer_app/src/features/ui/action_menu/items/__fixtures__/VoiceMenuTestBootstrap.ts deleted file mode 100644 index d48bc07f7..000000000 --- a/fluxer_app/src/features/ui/action_menu/items/__fixtures__/VoiceMenuTestBootstrap.ts +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -const HARNESS_ENDPOINT = 'https://primary.test/api'; - -export function installVoiceMenuTestBootstrap(): void { - const host = globalThis as unknown as {window?: Record}; - if (typeof host.window === 'undefined') { - host.window = host as unknown as Record; - } - host.window.__FLUXER_BOOTSTRAP__ = { - config: { - releaseChannel: 'stable', - bootstrapApiEndpoint: HARNESS_ENDPOINT, - bootstrapApiPublicEndpoint: HARNESS_ENDPOINT, - }, - instance: { - api_code_version: Number.MAX_SAFE_INTEGER, - endpoints: { - api: HARNESS_ENDPOINT, - api_client: HARNESS_ENDPOINT, - api_public: HARNESS_ENDPOINT, - gateway: 'wss://gateway.primary.test', - media: 'https://media.primary.test', - static_cdn: 'https://cdn.primary.test', - marketing: 'https://primary.test', - admin: 'https://admin.primary.test', - invite: 'https://primary.test/invite', - gift: 'https://primary.test/gift', - webapp: 'https://app.primary.test', - upload_relay: 'https://upload.primary.test', - }, - captcha: {provider: 'none', hcaptcha_site_key: null, turnstile_site_key: null}, - features: { - voice_enabled: false, - stripe_enabled: false, - self_hosted: false, - presigned_attachment_uploads: false, - emails_enabled: false, - }, - gif: {provider: 'klipy', display_name: 'Klipy', attribution_required: false}, - sso: {enabled: false, enforced: false, display_name: null, redirect_uri: ''}, - registration: {mode: 'open', admin_registration_urls_enabled: true}, - community: {single_community: false, single_community_guild_id: null, direct_messages_disabled: false}, - services: {gif_enabled: true, youtube_enabled: false, bluesky_enabled: false}, - limits: undefined, - push: {public_vapid_key: null}, - app_public: { - branding: { - product_name: 'Fluxer', - icon_url: null, - symbol_url: null, - logo_url: null, - wordmark_url: null, - favicon_url: null, - theme_color: null, - }, - setup: {configured: true, admin_url: null}, - legal: {terms_url: null, privacy_url: null}, - registration: {collect_date_of_birth: true}, - }, - }, - geoip: { - countryCode: null, - regionCode: null, - latitude: null, - longitude: null, - ageRestrictedGeos: [], - ageBlockedGeos: [], - }, - }; -} diff --git a/fluxer_app/src/features/ui/state/Tick.test.ts b/fluxer_app/src/features/ui/state/Tick.test.ts index 83b7f89a3..8d9f9532a 100644 --- a/fluxer_app/src/features/ui/state/Tick.test.ts +++ b/fluxer_app/src/features/ui/state/Tick.test.ts @@ -6,9 +6,11 @@ import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest'; async function loadTick() { vi.resetModules(); + const {Logger} = await import('@app/features/platform/utils/AppLogger'); + const debug = vi.spyOn(Logger.prototype, 'debug').mockImplementation(() => undefined); const {default: Window} = await import('@app/features/window/state/Window'); const {default: Tick} = await import('@app/features/ui/state/Tick'); - return {Tick, Window}; + return {debug, Tick, Window}; } describe('Tick', () => { @@ -17,14 +19,16 @@ describe('Tick', () => { }); afterEach(() => { + vi.restoreAllMocks(); vi.useRealTimers(); }); it('keeps counting while the window is visible but not focused', async () => { - const {Tick, Window} = await loadTick(); + const {debug, Tick, Window} = await loadTick(); const dispose = autorun(() => Tick.nowSecond); const started = Tick.nowSecond; Window.setFocused(false); + expect(debug).toHaveBeenCalledExactlyOnceWith('Window focus changed: false'); vi.advanceTimersByTime(3000); expect(Window.visible).toBe(true); expect(Tick.nowSecond).toBe(started + 3); @@ -32,9 +36,10 @@ describe('Tick', () => { }); it('stops counting while the window is hidden', async () => { - const {Tick, Window} = await loadTick(); + const {debug, Tick, Window} = await loadTick(); const dispose = autorun(() => Tick.nowSecond); Window.setVisible(false); + expect(debug).toHaveBeenCalledExactlyOnceWith('Window visibility changed: false'); const stopped = Tick.nowSecond; vi.advanceTimersByTime(5000); expect(Tick.nowSecond).toBe(stopped); @@ -42,24 +47,28 @@ describe('Tick', () => { }); it('resynchronises to wall clock as soon as the window becomes visible again', async () => { - const {Tick, Window} = await loadTick(); + const {debug, Tick, Window} = await loadTick(); const dispose = autorun(() => Tick.nowSecond); Window.setVisible(false); const stopped = Tick.nowSecond; vi.advanceTimersByTime(60_000); expect(Tick.nowSecond).toBe(stopped); Window.setVisible(true); + expect(debug).toHaveBeenNthCalledWith(1, 'Window visibility changed: false'); + expect(debug).toHaveBeenNthCalledWith(2, 'Window visibility changed: true'); + expect(debug).toHaveBeenCalledTimes(2); expect(Tick.nowSecond).toBe(stopped + 60); dispose(); }); it('does not run an interval while nothing observes the clock', async () => { - const {Tick} = await loadTick(); + const {debug, Tick} = await loadTick(); const idle = Tick.nowSecond; vi.advanceTimersByTime(5000); expect(Tick.nowSecond).toBe(idle); const dispose = autorun(() => Tick.nowSecond); expect(Tick.nowSecond).toBe(idle + 5); + expect(debug).not.toHaveBeenCalled(); dispose(); }); }); diff --git a/fluxer_app/src/features/voice/engine/VoiceSharedAudioContext.test.ts b/fluxer_app/src/features/voice/engine/VoiceSharedAudioContext.test.ts index cc29af425..f631d695d 100644 --- a/fluxer_app/src/features/voice/engine/VoiceSharedAudioContext.test.ts +++ b/fluxer_app/src/features/voice/engine/VoiceSharedAudioContext.test.ts @@ -40,6 +40,7 @@ interface FakeGraphHarness { interface FakeWindowHarness { requestedOptions: Array; contexts: Array; + constructionErrors: Array; bodyListeners: Array; } @@ -52,7 +53,7 @@ function installFakeWindow( honourSampleRate?: boolean; } = {}, ): FakeWindowHarness { - const harness: FakeWindowHarness = {requestedOptions: [], contexts: [], bodyListeners: []}; + const harness: FakeWindowHarness = {requestedOptions: [], contexts: [], constructionErrors: [], bodyListeners: []}; const throwOn = config.throwOn ?? ((): boolean => false); const honourSampleRate = config.honourSampleRate ?? true; @@ -64,7 +65,9 @@ function installFakeWindow( constructor(options?: AudioContextOptions) { harness.requestedOptions.push(options); if (throwOn(options)) { - throw new DOMException('sample rate not supported', 'NotSupportedError'); + const error = new DOMException('sample rate not supported', 'NotSupportedError'); + harness.constructionErrors.push(error); + throw error; } this.sampleRate = (honourSampleRate ? options?.sampleRate : undefined) ?? HARDWARE_SAMPLE_RATE; harness.contexts.push(this as unknown as FakeAudioContext); @@ -219,15 +222,30 @@ describe('VoiceSharedAudioContext', () => { it('returns null without throwing when the construction fails', async () => { const harness = installFakeWindow({throwOn: () => true}); const {getSharedVoiceAudioContext} = await loadModule(); + const warning = vi.spyOn(console, 'warn').mockImplementation(() => undefined); + try { + let context: AudioContext | null | undefined; + expect(() => { + context = getSharedVoiceAudioContext(); + }).not.toThrow(); - let context: AudioContext | null | undefined; - expect(() => { - context = getSharedVoiceAudioContext(); - }).not.toThrow(); - - expect(context).toBeNull(); - expect(harness.contexts).toHaveLength(0); - expect(harness.requestedOptions).toHaveLength(1); + expect(context).toBeNull(); + expect(harness.contexts).toHaveLength(0); + expect(harness.requestedOptions).toEqual([{latencyHint: 'interactive'}]); + expect(harness.constructionErrors).toHaveLength(1); + expect(warning).toHaveBeenCalledTimes(1); + expect(warning).toHaveBeenCalledWith( + expect.stringMatching(/^%c\[\d{2}:\d{2}:\d{2}\] \[VoiceSharedAudioContext\] \[Warn\]$/), + 'color:#ffc107;font-weight:normal', + 'Failed to construct voice AudioContext', + { + options: {latencyHint: 'interactive'}, + error: harness.constructionErrors[0], + }, + ); + } finally { + warning.mockRestore(); + } }); it('caches the context across calls and rebuilds it once it has closed', async () => { @@ -267,10 +285,25 @@ describe('VoiceSharedAudioContext', () => { }); it('createVoiceAudioContext returns null instead of throwing when the rate is rejected', async () => { - installFakeWindow({throwOn: (options) => options?.sampleRate !== undefined}); + const harness = installFakeWindow({throwOn: (options) => options?.sampleRate !== undefined}); const {createVoiceAudioContext} = await loadModule(); - - expect(createVoiceAudioContext({latencyHint: 'interactive', sampleRate: 48000})).toBeNull(); + const warning = vi.spyOn(console, 'warn').mockImplementation(() => undefined); + try { + expect(createVoiceAudioContext({latencyHint: 'interactive', sampleRate: 48000})).toBeNull(); + expect(harness.constructionErrors).toHaveLength(1); + expect(warning).toHaveBeenCalledTimes(1); + expect(warning).toHaveBeenCalledWith( + expect.stringMatching(/^%c\[\d{2}:\d{2}:\d{2}\] \[VoiceSharedAudioContext\] \[Warn\]$/), + 'color:#ffc107;font-weight:normal', + 'Failed to construct voice AudioContext', + { + options: {latencyHint: 'interactive', sampleRate: 48000}, + error: harness.constructionErrors[0], + }, + ); + } finally { + warning.mockRestore(); + } }); it('leaves the context untouched when the browser has no WaveShaper', async () => { diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppVoiceStateAdapter.test.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppVoiceStateAdapter.test.ts index 96c5b9fef..94c3d820d 100644 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppVoiceStateAdapter.test.ts +++ b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppVoiceStateAdapter.test.ts @@ -2,8 +2,9 @@ import type {GuildReadyData} from '@app/features/gateway/types/GatewayGuildTypes'; import type {VoiceState} from '@app/features/gateway/types/GatewayVoiceTypes'; +import {Logger} from '@app/features/platform/utils/AppLogger'; import {autorun} from 'mobx'; -import {describe, expect, it} from 'vitest'; +import {describe, expect, it, vi} from 'vitest'; import {VoiceEngineV2AppVoiceStateAdapter} from './VoiceEngineV2AppVoiceStateAdapter'; function voiceState(overrides: Partial = {}): VoiceState { @@ -59,16 +60,27 @@ describe('VoiceEngineV2AppVoiceStateAdapter', () => { }); it('does not reinsert locally removed stale connections', () => { - const adapter = new VoiceEngineV2AppVoiceStateAdapter(); - adapter.handleGatewayVoiceStateUpdate('guild-1', voiceState({connection_id: 'stale-connection'})); - expect(adapter.getVoiceStateByConnectionId('stale-connection')).toBeDefined(); + const debug = vi.spyOn(Logger.prototype, 'debug').mockImplementation(() => undefined); + try { + const adapter = new VoiceEngineV2AppVoiceStateAdapter(); + adapter.handleGatewayVoiceStateUpdate('guild-1', voiceState({connection_id: 'stale-connection'})); + expect(adapter.getVoiceStateByConnectionId('stale-connection')).toBeDefined(); - adapter.removeVoiceStateConnection('stale-connection'); - adapter.handleGatewayVoiceStateUpdate('guild-1', voiceState({connection_id: 'stale-connection'})); + adapter.removeVoiceStateConnection('stale-connection'); + adapter.handleGatewayVoiceStateUpdate('guild-1', voiceState({connection_id: 'stale-connection'})); - expect(adapter.isConnectionIgnored('stale-connection')).toBe(true); - expect(adapter.getVoiceStateByConnectionId('stale-connection')).toBeNull(); - expect(adapter.getAllVoiceStatesInChannel('guild-1', 'channel-1')['stale-connection']).toBeUndefined(); + expect(adapter.isConnectionIgnored('stale-connection')).toBe(true); + expect(adapter.getVoiceStateByConnectionId('stale-connection')).toBeNull(); + expect(adapter.getAllVoiceStatesInChannel('guild-1', 'channel-1')['stale-connection']).toBeUndefined(); + expect(debug).toHaveBeenCalledExactlyOnceWith('Ignored voice state update for locally removed connection', { + guildId: 'guild-1', + channelId: 'channel-1', + userId: 'user-1', + connectionId: 'stale-connection', + }); + } finally { + debug.mockRestore(); + } }); it('publishes self-video true-to-false changes through MobX observation', () => { diff --git a/fluxer_app/src/features/voice/state/VoiceSettingsCodecOptIn.test.ts b/fluxer_app/src/features/voice/state/VoiceSettingsCodecOptIn.test.ts index 895921dae..67f8a3d0d 100644 --- a/fluxer_app/src/features/voice/state/VoiceSettingsCodecOptIn.test.ts +++ b/fluxer_app/src/features/voice/state/VoiceSettingsCodecOptIn.test.ts @@ -28,7 +28,38 @@ AppStorage.subscribe( {key: 'VoiceSettings'}, ); -const {default: VoiceSettings} = await import('./VoiceSettings'); +async function loadVoiceSettings() { + const [{Logger}, persistenceModule] = await Promise.all([ + import('@app/features/platform/utils/AppLogger'), + import('@app/features/platform/utils/MobXPersistence'), + ]); + const debug = vi.spyOn(Logger.prototype, 'debug').mockImplementation(() => undefined); + try { + const [{default: VoiceSettings}, {default: MediaPermission}] = await Promise.all([ + import('./VoiceSettings'), + import('@app/features/permissions/system/state/MediaPermission'), + ]); + await Promise.all([ + persistenceModule.awaitHydration('MacPermissions'), + persistenceModule.awaitHydration('VoiceSettings'), + vi.waitFor(() => expect(MediaPermission.isInitialized()).toBe(true)), + ]); + expect(debug).toHaveBeenCalledTimes(3); + expect(debug).toHaveBeenCalledWith('Store MacPermissions hydrated from AppStorage and is now persisting.'); + expect(debug).toHaveBeenCalledWith('Initial permission state', { + microphone: 'granted', + camera: 'granted', + micDenied: false, + cameraDenied: false, + }); + expect(debug).toHaveBeenCalledWith('Store VoiceSettings hydrated from AppStorage and is now persisting.'); + return VoiceSettings; + } finally { + debug.mockRestore(); + } +} + +const VoiceSettings = await loadVoiceSettings(); describe('AV1/HEVC screen-share opt-in', () => { it('rewrites a stored AV1 screen-share preference back to automatic on first launch', () => { diff --git a/fluxer_app/src/features/voice/utils/CodecCapabilityDetector.test.ts b/fluxer_app/src/features/voice/utils/CodecCapabilityDetector.test.ts index 74caeffd7..24f98ffff 100644 --- a/fluxer_app/src/features/voice/utils/CodecCapabilityDetector.test.ts +++ b/fluxer_app/src/features/voice/utils/CodecCapabilityDetector.test.ts @@ -1,12 +1,14 @@ // SPDX-License-Identifier: AGPL-3.0-or-later +import {Logger} from '@app/features/platform/utils/AppLogger'; import type {HardwareEncodeReport} from '@app/features/voice/utils/GpuEncoderCapabilities'; -import {beforeEach, describe, expect, it, vi} from 'vitest'; +import {afterEach, beforeEach, describe, expect, it, type MockInstance, vi} from 'vitest'; let av1OptIn = false; let hevcOptIn = false; let desktop = true; let gpuReport: HardwareEncodeReport | null = null; +let codecCapabilityInfo: MockInstance<(...args: Array) => void>; vi.mock('@app/features/voice/state/VoiceSettings', () => ({ default: { @@ -70,7 +72,22 @@ const ALL_SOFTWARE: HardwareEncodeReport = { }; describe('screen-share AV1/HEVC opt-in gate', () => { + afterEach(() => { + try { + expect(codecCapabilityInfo.mock.calls.length).toBeGreaterThan(0); + for (const call of codecCapabilityInfo.mock.calls) { + expect(call).toEqual([ + 'Codec capabilities probed', + {capabilities: {vp8: true, vp9: true, h264: true, h265: true, av1: true}}, + ]); + } + } finally { + codecCapabilityInfo.mockRestore(); + } + }); + beforeEach(() => { + codecCapabilityInfo = vi.spyOn(Logger.prototype, 'info').mockImplementation(() => undefined); av1OptIn = false; hevcOptIn = false; desktop = true; diff --git a/fluxer_app_proxy/Cargo.toml b/fluxer_app_proxy/Cargo.toml index 9088816aa..7fc0b054a 100644 --- a/fluxer_app_proxy/Cargo.toml +++ b/fluxer_app_proxy/Cargo.toml @@ -3,9 +3,10 @@ name = "fluxer_app_proxy" version = "0.1.0" edition.workspace = true license.workspace = true +publish = false [dependencies] -anyhow = "1.0.102" +anyhow = "1.0.104" axum = { version = "0.8.9", features = ["macros"] } base64 = "0.22" fluxer_common = { path = "../fluxer_common" } diff --git a/fluxer_app_proxy/src/invite_meta.rs b/fluxer_app_proxy/src/invite_meta.rs index 4b1eb846c..47f0d2b2c 100644 --- a/fluxer_app_proxy/src/invite_meta.rs +++ b/fluxer_app_proxy/src/invite_meta.rs @@ -45,7 +45,7 @@ pub struct InviteMetaResolver { enum InviteMetaStorage { Postgres(PostgresInviteMetaStorage), #[cfg(feature = "scylla")] - Scylla(ScyllaInviteMetaStorage), + Scylla(Box), } struct PostgresInviteMetaStorage { @@ -183,13 +183,13 @@ impl InviteMetaResolver { let cache = invite_meta_cache(config); Ok(Self { - storage: InviteMetaStorage::Scylla(ScyllaInviteMetaStorage { + storage: InviteMetaStorage::Scylla(Box::new(ScyllaInviteMetaStorage { db, stmt_invite, stmt_guild, stmt_channel, stmt_user, - }), + })), cache, }) } diff --git a/fluxer_common/Cargo.toml b/fluxer_common/Cargo.toml index be1fe20c5..b9e16e48d 100644 --- a/fluxer_common/Cargo.toml +++ b/fluxer_common/Cargo.toml @@ -5,7 +5,7 @@ edition.workspace = true license.workspace = true [dependencies] -anyhow = "1.0.102" +anyhow = "1.0.104" aws-credential-types = "1.2.14" aws-sigv4 = "1.4.5" axum = { version = "0.8.9", default-features = false } diff --git a/fluxer_desktop/native/audio-apm/Cargo.lock b/fluxer_desktop/native/audio-apm/Cargo.lock index 036f4a9c9..cb2190fc9 100644 --- a/fluxer_desktop/native/audio-apm/Cargo.lock +++ b/fluxer_desktop/native/audio-apm/Cargo.lock @@ -13,9 +13,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "autotools" diff --git a/fluxer_desktop/native/audio-apm/scripts/build-real-apm.sh b/fluxer_desktop/native/audio-apm/scripts/build-real-apm.sh index e6281a29e..8e501a207 100755 --- a/fluxer_desktop/native/audio-apm/scripts/build-real-apm.sh +++ b/fluxer_desktop/native/audio-apm/scripts/build-real-apm.sh @@ -7,61 +7,61 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" CRATE_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" require_pkg_config() { - if ! command -v pkg-config >/dev/null 2>&1; then - echo "error: pkg-config is required but was not found in PATH." >&2 - echo " Install via: brew install pkg-config (macOS)" >&2 - echo " apt-get install pkg-config (Debian/Ubuntu)" >&2 - exit 1 - fi + if ! command -v pkg-config >/dev/null 2>&1; then + echo "error: pkg-config is required but was not found in PATH." >&2 + echo " Install via: brew install pkg-config (macOS)" >&2 + echo " apt-get install pkg-config (Debian/Ubuntu)" >&2 + exit 1 + fi } assert_webrtc_pkgconfig() { - if ! pkg-config --exists webrtc-audio-processing-2; then - echo "error: pkg-config cannot locate webrtc-audio-processing-2." >&2 - echo " See fluxer_desktop/native/audio-apm/README.md for install steps." >&2 - exit 1 - fi + if ! pkg-config --exists webrtc-audio-processing-2; then + echo "error: pkg-config cannot locate webrtc-audio-processing-2." >&2 + echo " See fluxer_desktop/native/audio-apm/README.md for install steps." >&2 + exit 1 + fi } assert_absl_pkgconfig() { - if ! pkg-config --exists absl_base; then - echo "error: pkg-config cannot locate absl_base." >&2 - echo " Install via: brew install abseil (macOS)" >&2 - echo " apt-get install libabsl-dev (Debian/Ubuntu)" >&2 - exit 1 - fi + if ! pkg-config --exists absl_base; then + echo "error: pkg-config cannot locate absl_base." >&2 + echo " Install via: brew install abseil (macOS)" >&2 + echo " apt-get install libabsl-dev (Debian/Ubuntu)" >&2 + exit 1 + fi } inject_absl_include_path() { - local absl_includes - absl_includes="$(pkg-config --cflags-only-I absl_base)" - if [[ -z "${absl_includes}" ]]; then - echo "error: pkg-config returned no include path for absl_base." >&2 - exit 1 - fi + local absl_includes + absl_includes="$(pkg-config --cflags-only-I absl_base)" + if [[ -z "${absl_includes}" ]]; then + echo "error: pkg-config returned no include path for absl_base." >&2 + exit 1 + fi - local prev_cxxflags="${CXXFLAGS-}" - local prev_bindgen="${BINDGEN_EXTRA_CLANG_ARGS-}" + local prev_cxxflags="${CXXFLAGS-}" + local prev_bindgen="${BINDGEN_EXTRA_CLANG_ARGS-}" - export CXXFLAGS="${absl_includes} ${prev_cxxflags}" - export BINDGEN_EXTRA_CLANG_ARGS="${absl_includes} ${prev_bindgen}" + export CXXFLAGS="${absl_includes} ${prev_cxxflags}" + export BINDGEN_EXTRA_CLANG_ARGS="${absl_includes} ${prev_bindgen}" } main() { - cd "${CRATE_DIR}" + cd "${CRATE_DIR}" - local cargo_subcmd="build" - if [[ $# -gt 0 && "$1" != -* && "$1" != "--" ]]; then - cargo_subcmd="$1" - shift - fi + local cargo_subcmd="build" + if [[ $# -gt 0 && "$1" != -* && "$1" != "--" ]]; then + cargo_subcmd="$1" + shift + fi - require_pkg_config - assert_webrtc_pkgconfig - assert_absl_pkgconfig - inject_absl_include_path + require_pkg_config + assert_webrtc_pkgconfig + assert_absl_pkgconfig + inject_absl_include_path - exec cargo "${cargo_subcmd}" --features real-apm "$@" + exec cargo "${cargo_subcmd}" --features real-apm "$@" } main "$@" diff --git a/fluxer_desktop/native/audio-mix/Cargo.lock b/fluxer_desktop/native/audio-mix/Cargo.lock index 28f8dd7b7..cb5431a7c 100644 --- a/fluxer_desktop/native/audio-mix/Cargo.lock +++ b/fluxer_desktop/native/audio-mix/Cargo.lock @@ -165,9 +165,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] diff --git a/fluxer_desktop/native/audio-timing/Cargo.lock b/fluxer_desktop/native/audio-timing/Cargo.lock index a9f9a81e4..e787eb213 100644 --- a/fluxer_desktop/native/audio-timing/Cargo.lock +++ b/fluxer_desktop/native/audio-timing/Cargo.lock @@ -165,9 +165,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] diff --git a/fluxer_desktop/native/deny.toml b/fluxer_desktop/native/deny.toml new file mode 100644 index 000000000..b65bad06d --- /dev/null +++ b/fluxer_desktop/native/deny.toml @@ -0,0 +1,107 @@ +[graph] +all-features = true +no-default-features = false + +[output] +feature-depth = 1 + +[advisories] +version = 2 +yanked = "deny" +unmaintained = "all" +ignore = [] + +[licenses] +version = 2 +confidence-threshold = 0.93 +unused-allowed-license = "allow" +allow = [ + "MIT", + "MIT-0", + "Apache-2.0", + "Apache-2.0 WITH LLVM-exception", + "BSD-2-Clause", + "BSD-3-Clause", + "ISC", + "MPL-2.0", + "NCSA", + "Unicode-3.0", + "Zlib", + "CC0-1.0", + "AGPL-3.0-or-later", + "BSL-1.0", + "CDLA-Permissive-2.0", +] +exceptions = [] + +[licenses.private] +ignore = true +registries = [] + +[[licenses.clarify]] +crate = "ring" +expression = "ISC AND MIT AND OpenSSL" +license-files = [ + { path = "LICENSE", hash = 0xbd0eed23 }, +] + +[[licenses.clarify]] +crate = "webrtc-audio-processing@2.1.0" +expression = "BSD-3-Clause" +license-files = [ + { path = "COPYING", hash = 0x3d3ea952 }, +] + +[[licenses.clarify]] +crate = "webrtc-audio-processing-config@2.1.0" +expression = "BSD-3-Clause" +license-files = [ + { path = "COPYING", hash = 0x7e861f0d }, +] + +[[licenses.clarify]] +crate = "webrtc-audio-processing-sys@2.1.0" +expression = "BSD-3-Clause" +license-files = [ + { path = "COPYING", hash = 0x7e861f0d }, +] + +[bans] +multiple-versions = "warn" +wildcards = "deny" +allow-wildcard-paths = true +highlight = "all" +workspace-default-features = "allow" +external-default-features = "allow" +deny = [ + { crate = "fuse", reason = "libfuse2-based Rust wrapper; use a maintained FUSE3-native crate only if Fluxer ever needs FUSE directly" }, + { crate = "fuse-sys", reason = "libfuse2 FFI crate; Fluxer AppImages must not reintroduce libfuse2 through native Rust dependencies" }, +] +skip = [ + { crate = "bitflags@1.3.2", reason = "hunspell bindgen requires the legacy bitflags API" }, + { crate = "foldhash@0.1.5", reason = "transitive dependencies require the prior hash table API" }, + { crate = "hashbrown@0.15.5", reason = "transitive dependencies require the older hash table API" }, + { crate = "hashbrown@0.16.1", reason = "transitive dependencies require the prior hash table API" }, + { crate = "hermit-abi@0.3.9", reason = "udev requires the prior Hermit ABI" }, + { crate = "itertools@0.13.0", reason = "bindgen and criterion require the prior iterator API" }, + { crate = "libloading@0.8.9", reason = "bindgen requires the prior dynamic loading API" }, + { crate = "nix@0.29.0", reason = "evdev requires the prior Unix API" }, + { crate = "nom@7.1.3", reason = "bindgen requires the prior parser API" }, + { crate = "rustc-hash@1.1.0", reason = "hunspell bindgen requires the legacy hash API" }, + { crate = "shlex@1.3.0", reason = "bindgen requires the prior shell parsing API" }, + { crate = "syn@1.0.109", reason = "hunspell bindgen requires the legacy macro API" }, + { crate = "syn@2.0.119", reason = "napi derive requires the prior macro API" }, + { crate = "windows-sys@0.48.0", reason = "udev requires the legacy Windows API" }, + { crate = "windows-sys@0.59.0", reason = "hunspell build tooling requires the prior Windows API" }, + { crate = "wit-bindgen@0.51.0", reason = "the WASI preview 3 compatibility layer requires the prior binding API" }, +] +skip-tree = [] + +[sources] +unknown-registry = "deny" +unknown-git = "deny" +allow-registry = ["https://github.com/rust-lang/crates.io-index"] +allow-git = [] + +[sources.allow-org] +github = [] diff --git a/fluxer_desktop/native/encoder-ring/Cargo.lock b/fluxer_desktop/native/encoder-ring/Cargo.lock index a6c4e1483..e8964c69c 100644 --- a/fluxer_desktop/native/encoder-ring/Cargo.lock +++ b/fluxer_desktop/native/encoder-ring/Cargo.lock @@ -211,9 +211,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] diff --git a/fluxer_desktop/native/encoder-ring/src/encoder_handoff.rs b/fluxer_desktop/native/encoder-ring/src/encoder_handoff.rs index c98e8f4f8..de7b6abf7 100644 --- a/fluxer_desktop/native/encoder-ring/src/encoder_handoff.rs +++ b/fluxer_desktop/native/encoder-ring/src/encoder_handoff.rs @@ -52,12 +52,11 @@ impl EncoderFrameRate { let denominator = u64::from(self.denominator); assert!(numerator > 0, "fps numerator positive"); assert!(denominator > 0, "fps denominator positive"); - ((1_000_000u64 * denominator) + numerator - 1) / numerator + (1_000_000u64 * denominator).div_ceil(numerator) } pub fn gop_pic_size(self) -> u16 { - let rounded = (u64::from(self.numerator) + u64::from(self.denominator) - 1) - / u64::from(self.denominator); + let rounded = u64::from(self.numerator).div_ceil(u64::from(self.denominator)); let bounded = rounded.clamp(1, u64::from(ENCODER_FRAME_RATE_MAX)); bounded as u16 } diff --git a/fluxer_desktop/native/linux-audio-capture/Cargo.lock b/fluxer_desktop/native/linux-audio-capture/Cargo.lock index 7f5db5d86..0369c33b1 100644 --- a/fluxer_desktop/native/linux-audio-capture/Cargo.lock +++ b/fluxer_desktop/native/linux-audio-capture/Cargo.lock @@ -245,9 +245,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] diff --git a/fluxer_desktop/native/linux-audio-capture/src/lib.rs b/fluxer_desktop/native/linux-audio-capture/src/lib.rs index 67c4e82fc..5b84f40dd 100644 --- a/fluxer_desktop/native/linux-audio-capture/src/lib.rs +++ b/fluxer_desktop/native/linux-audio-capture/src/lib.rs @@ -228,12 +228,11 @@ fn retain_screen_audio_sink_handle( "DirectAudioCapture.setScreenAudioSink received an empty native external sink handle", )); } - let handle = unsafe { - NativeScreenFrameSinkHandle::retain_from_raw(data.cast::()) - } - .ok_or_else(|| { - generic_error("DirectAudioCapture.setScreenAudioSink received an invalid handle") - })?; + let handle = unsafe { data.cast::().as_ref() } + .and_then(NativeScreenFrameSinkHandle::retain_ref) + .ok_or_else(|| { + generic_error("DirectAudioCapture.setScreenAudioSink received an invalid handle") + })?; Ok(Arc::new(handle)) } diff --git a/fluxer_desktop/native/linux-audio-capture/src/pipewire_bridge.rs b/fluxer_desktop/native/linux-audio-capture/src/pipewire_bridge.rs index d577afc2d..485a7f461 100644 --- a/fluxer_desktop/native/linux-audio-capture/src/pipewire_bridge.rs +++ b/fluxer_desktop/native/linux-audio-capture/src/pipewire_bridge.rs @@ -740,8 +740,8 @@ mod tests { .expect("apm"); let frame_len = DIRECT_CAPTURE_APM_FRAME_SAMPLES; let mut samples = vec![0.0_f32; frame_len]; - for n in 0..frame_len { - samples[n] = ((n as f32) / (frame_len as f32) - 0.5) * 0.5; + for (n, sample) in samples.iter_mut().enumerate() { + *sample = ((n as f32) / (frame_len as f32) - 0.5) * 0.5; } let original = samples.clone(); let _ = apm.process_in_place(&mut samples).expect("process"); diff --git a/fluxer_desktop/native/linux-notifications/Cargo.lock b/fluxer_desktop/native/linux-notifications/Cargo.lock index 00515957e..f3e85db3d 100644 --- a/fluxer_desktop/native/linux-notifications/Cargo.lock +++ b/fluxer_desktop/native/linux-notifications/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "async-broadcast" diff --git a/fluxer_desktop/native/linux-portals/Cargo.lock b/fluxer_desktop/native/linux-portals/Cargo.lock index cc8f4a8be..a802e2263 100644 --- a/fluxer_desktop/native/linux-portals/Cargo.lock +++ b/fluxer_desktop/native/linux-portals/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "async-broadcast" diff --git a/fluxer_desktop/native/linux-screen-capture/Cargo.lock b/fluxer_desktop/native/linux-screen-capture/Cargo.lock index 5ec7f93a8..856564ffb 100644 --- a/fluxer_desktop/native/linux-screen-capture/Cargo.lock +++ b/fluxer_desktop/native/linux-screen-capture/Cargo.lock @@ -44,9 +44,9 @@ checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arrayvec" @@ -1479,9 +1479,9 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "spin" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" +checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3" dependencies = [ "lock_api", ] diff --git a/fluxer_desktop/native/linux-screen-capture/src/napi_surface_linux.rs b/fluxer_desktop/native/linux-screen-capture/src/napi_surface_linux.rs index 0cd0400ac..aa386ba4a 100644 --- a/fluxer_desktop/native/linux-screen-capture/src/napi_surface_linux.rs +++ b/fluxer_desktop/native/linux-screen-capture/src/napi_surface_linux.rs @@ -952,12 +952,13 @@ fn retain_native_frame_sink_handle( )); } - let handle = unsafe { - NativeScreenFrameSinkHandle::retain_from_raw(data.cast::()) - } - .ok_or_else(|| { - invalid_arg("ScreenCapture.setFrameSinkHandle received an invalid native frame sink handle") - })?; + let handle = unsafe { data.cast::().as_ref() } + .and_then(NativeScreenFrameSinkHandle::retain_ref) + .ok_or_else(|| { + invalid_arg( + "ScreenCapture.setFrameSinkHandle received an invalid native frame sink handle", + ) + })?; Ok(Arc::new(handle)) } @@ -967,7 +968,7 @@ fn enqueue_native_bus_video_frame( frame: &VideoFrame, ) -> EnqueueOutcome { if let Some(dmabuf) = frame.dmabuf.as_ref() { - if sink.handle().enqueue_dmabuf.is_none() { + if !sink.supports_dmabuf() { return EnqueueOutcome::Rejected; } let plane_count = dmabuf.plane_count as usize; @@ -975,18 +976,13 @@ fn enqueue_native_bus_video_frame( return EnqueueOutcome::Rejected; } - let mut duped_fds: Vec = Vec::with_capacity(plane_count); + let mut duped_fds: Vec = Vec::with_capacity(plane_count); for raw in dmabuf.fds.iter().take(plane_count) { let duped = unsafe { libc::dup(*raw) }; if duped < 0 { - for fd in duped_fds { - unsafe { - libc::close(fd); - } - } return EnqueueOutcome::Rejected; } - duped_fds.push(duped); + duped_fds.push(unsafe { OwnedFd::from_raw_fd(duped) }); } let desc = BusDmabufDesc { @@ -1001,7 +997,7 @@ fn enqueue_native_bus_video_frame( timestamp_us: frame.timestamp_us, }; - return unsafe { sink.enqueue_dmabuf_take_fds(desc, &duped_fds) }; + return sink.enqueue_dmabuf_take_fds(desc, duped_fds); } sink.enqueue_nv12_copy( diff --git a/fluxer_desktop/native/mac-app-audio/src/napi_surface_macos.rs b/fluxer_desktop/native/mac-app-audio/src/napi_surface_macos.rs index 1b7fa7dc3..7f24b4974 100644 --- a/fluxer_desktop/native/mac-app-audio/src/napi_surface_macos.rs +++ b/fluxer_desktop/native/mac-app-audio/src/napi_surface_macos.rs @@ -138,15 +138,14 @@ fn retain_screen_audio_sink_handle( "ProcessLoopback.setScreenAudioSink received an empty native external sink handle", )); } - let handle = unsafe { - NativeScreenFrameSinkHandle::retain_from_raw(data.cast::()) - } - .ok_or_else(|| { - napi::Error::new( - Status::InvalidArg, - "ProcessLoopback.setScreenAudioSink received an invalid native sink handle", - ) - })?; + let handle = unsafe { data.cast::().as_ref() } + .and_then(NativeScreenFrameSinkHandle::retain_ref) + .ok_or_else(|| { + napi::Error::new( + Status::InvalidArg, + "ProcessLoopback.setScreenAudioSink received an invalid native sink handle", + ) + })?; Ok(Arc::new(handle)) } diff --git a/fluxer_desktop/native/mac-screen-capture/src/napi_surface_macos.rs b/fluxer_desktop/native/mac-screen-capture/src/napi_surface_macos.rs index 930805fc4..501e7bbbc 100644 --- a/fluxer_desktop/native/mac-screen-capture/src/napi_surface_macos.rs +++ b/fluxer_desktop/native/mac-screen-capture/src/napi_surface_macos.rs @@ -960,15 +960,14 @@ fn retain_native_frame_sink_handle( )); } - let handle = unsafe { - NativeScreenFrameSinkHandle::retain_from_raw(data.cast::()) - } - .ok_or_else(|| { - napi::Error::new( - Status::InvalidArg, - "ScreenCapture.setFrameSinkHandle received an invalid native frame sink handle", - ) - })?; + let handle = unsafe { data.cast::().as_ref() } + .and_then(NativeScreenFrameSinkHandle::retain_ref) + .ok_or_else(|| { + napi::Error::new( + Status::InvalidArg, + "ScreenCapture.setFrameSinkHandle received an invalid native frame sink handle", + ) + })?; Ok(Arc::new(handle)) } @@ -980,7 +979,7 @@ fn try_enqueue_native_cv_pixel_buffer( height: u32, sample_buffer: &CMSampleBuffer, ) -> EnqueueOutcome { - if sink.handle().enqueue_mac_cv_pixel_buffer.is_none() { + if !sink.supports_mac_cv_pixel_buffer() { return EnqueueOutcome::Rejected; } let retained = diff --git a/fluxer_desktop/native/platform-info/Cargo.lock b/fluxer_desktop/native/platform-info/Cargo.lock index 8df2e5152..0d85ea077 100644 --- a/fluxer_desktop/native/platform-info/Cargo.lock +++ b/fluxer_desktop/native/platform-info/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "bitflags" diff --git a/fluxer_desktop/native/rt-thread/Cargo.lock b/fluxer_desktop/native/rt-thread/Cargo.lock index 8f0e3cf7e..d8ab7cab3 100644 --- a/fluxer_desktop/native/rt-thread/Cargo.lock +++ b/fluxer_desktop/native/rt-thread/Cargo.lock @@ -165,9 +165,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] diff --git a/fluxer_desktop/native/rust/Cargo.lock b/fluxer_desktop/native/rust/Cargo.lock index 23da64f80..f6364a390 100644 --- a/fluxer_desktop/native/rust/Cargo.lock +++ b/fluxer_desktop/native/rust/Cargo.lock @@ -34,9 +34,9 @@ checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "autocfg" @@ -216,9 +216,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] diff --git a/fluxer_desktop/native/rust/src/mac_app_audio/blocks.rs b/fluxer_desktop/native/rust/src/mac_app_audio/blocks.rs index 6190747a2..b7015547e 100644 --- a/fluxer_desktop/native/rust/src/mac_app_audio/blocks.rs +++ b/fluxer_desktop/native/rust/src/mac_app_audio/blocks.rs @@ -30,12 +30,6 @@ pub struct NSErrorBlock { pub user_invoke: NsErrorUserInvoke, } -pub unsafe extern "C" fn ns_error_trampoline(block: *mut NSErrorBlock, err: *mut c_void) { - if let Some(block) = unsafe { block.as_mut() } { - unsafe { (block.user_invoke)(block.ctx, err) }; - } -} - pub type ContentErrorUserInvoke = unsafe extern "C" fn(ctx: *mut c_void, content: *mut c_void, err: *mut c_void); pub type ContentErrorInvoke = @@ -52,16 +46,6 @@ pub struct ContentErrorBlock { pub user_invoke: ContentErrorUserInvoke, } -pub unsafe extern "C" fn content_error_trampoline( - block: *mut ContentErrorBlock, - content: *mut c_void, - err: *mut c_void, -) { - if let Some(block) = unsafe { block.as_mut() } { - unsafe { (block.user_invoke)(block.ctx, content, err) }; - } -} - pub const NS_ERROR_BLOCK_DESCRIPTOR: BlockDescriptorSig = BlockDescriptorSig { reserved: 0, size: std::mem::size_of::() as u64, @@ -78,6 +62,22 @@ pub const CONTENT_ERROR_BLOCK_DESCRIPTOR: BlockDescriptorSig = BlockDescriptorSi mod tests { use super::*; + unsafe extern "C" fn ns_error_trampoline(block: *mut NSErrorBlock, err: *mut c_void) { + if let Some(block) = unsafe { block.as_mut() } { + unsafe { (block.user_invoke)(block.ctx, err) }; + } + } + + unsafe extern "C" fn content_error_trampoline( + block: *mut ContentErrorBlock, + content: *mut c_void, + err: *mut c_void, + ) { + if let Some(block) = unsafe { block.as_mut() } { + unsafe { (block.user_invoke)(block.ctx, content, err) }; + } + } + #[repr(C)] struct RoundTripCtx { seen_err: *mut c_void, diff --git a/fluxer_desktop/native/screen-frame-bus/benches/staging.rs b/fluxer_desktop/native/screen-frame-bus/benches/staging.rs index 2ba3102ff..8a66d625f 100644 --- a/fluxer_desktop/native/screen-frame-bus/benches/staging.rs +++ b/fluxer_desktop/native/screen-frame-bus/benches/staging.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -use criterion::{Criterion, black_box, criterion_group, criterion_main}; +use std::hint::black_box; + +use criterion::{Criterion, criterion_group, criterion_main}; use fluxer_screen_frame_bus::{CpuStagingBackend, StagingSurfacePair}; const BENCH_WIDTH: usize = 1920; diff --git a/fluxer_desktop/native/screen-frame-bus/src/lib.rs b/fluxer_desktop/native/screen-frame-bus/src/lib.rs index e18d44236..0ebd0159a 100644 --- a/fluxer_desktop/native/screen-frame-bus/src/lib.rs +++ b/fluxer_desktop/native/screen-frame-bus/src/lib.rs @@ -13,7 +13,7 @@ use std::sync::OnceLock; use crate::frame_pool::PooledFrame; #[cfg(target_os = "linux")] -use std::os::fd::OwnedFd; +use std::os::fd::{IntoRawFd, OwnedFd}; #[repr(C)] #[derive(Clone, Copy, Debug, PartialEq, Eq)] @@ -325,30 +325,30 @@ pub type NativeScreenFrameSinkEnqueueScreenAudioFn = unsafe extern "C" fn( #[repr(C)] #[derive(Clone, Copy)] pub struct NativeScreenFrameSinkHandle { - pub magic: u32, - pub version: u32, - pub context: *const c_void, - pub retain: NativeScreenFrameSinkRetainFn, - pub release: NativeScreenFrameSinkReleaseFn, - pub enqueue_nv12: Option, - pub enqueue_bgra: Option, - pub enqueue_mac_cv_pixel_buffer: Option, - pub enqueue_dmabuf: Option, - pub enqueue_shared_texture: Option, - pub enqueue_screen_audio: Option, + magic: u32, + version: u32, + context: *const c_void, + retain: NativeScreenFrameSinkRetainFn, + release: NativeScreenFrameSinkReleaseFn, + enqueue_nv12: Option, + enqueue_bgra: Option, + enqueue_mac_cv_pixel_buffer: Option, + enqueue_dmabuf: Option, + enqueue_shared_texture: Option, + enqueue_screen_audio: Option, } unsafe impl Send for NativeScreenFrameSinkHandle {} unsafe impl Sync for NativeScreenFrameSinkHandle {} impl NativeScreenFrameSinkHandle { - pub fn is_valid(&self) -> bool { + fn is_valid(&self) -> bool { self.magic == NATIVE_SCREEN_FRAME_SINK_HANDLE_MAGIC && self.version == NATIVE_SCREEN_FRAME_SINK_HANDLE_VERSION && !self.context.is_null() } - pub unsafe fn retain_ref(&self) -> Option { + pub fn retain_ref(&self) -> Option { if !self.is_valid() { return None; } @@ -356,13 +356,6 @@ impl NativeScreenFrameSinkHandle { Some(NativeScreenFrameSinkHandleRef { handle: *self }) } - pub unsafe fn retain_from_raw(raw: *const Self) -> Option { - if raw.is_null() { - return None; - } - unsafe { (*raw).retain_ref() } - } - pub fn native_outcome(outcome: EnqueueOutcome) -> u32 { match outcome { EnqueueOutcome::Accepted => NATIVE_SCREEN_FRAME_SINK_ACCEPTED, @@ -388,10 +381,6 @@ unsafe impl Send for NativeScreenFrameSinkHandleRef {} unsafe impl Sync for NativeScreenFrameSinkHandleRef {} impl NativeScreenFrameSinkHandleRef { - pub fn handle(&self) -> &NativeScreenFrameSinkHandle { - &self.handle - } - pub fn enqueue_nv12_copy( &self, data: &[u8], @@ -442,6 +431,11 @@ impl NativeScreenFrameSinkHandleRef { }) } + #[cfg(target_os = "macos")] + pub fn supports_mac_cv_pixel_buffer(&self) -> bool { + self.handle.enqueue_mac_cv_pixel_buffer.is_some() + } + #[cfg(target_os = "macos")] pub unsafe fn enqueue_mac_cv_pixel_buffer( &self, @@ -467,12 +461,25 @@ impl NativeScreenFrameSinkHandleRef { } #[cfg(target_os = "linux")] - pub unsafe fn enqueue_dmabuf_take_fds(&self, desc: DmabufDesc, fds: &[i32]) -> EnqueueOutcome { + pub fn supports_dmabuf(&self) -> bool { + self.handle.enqueue_dmabuf.is_some() + } + + #[cfg(target_os = "linux")] + pub fn enqueue_dmabuf_take_fds(&self, desc: DmabufDesc, fds: Vec) -> EnqueueOutcome { let Some(enqueue) = self.handle.enqueue_dmabuf else { return EnqueueOutcome::Rejected; }; + let fd_count = fds.len(); + if fd_count == 0 || fd_count > 4 || usize::from(desc.plane_count) != fd_count { + return EnqueueOutcome::Rejected; + } + let mut raw_fds = [-1; 4]; + for (raw_fd, fd) in raw_fds.iter_mut().zip(fds) { + *raw_fd = fd.into_raw_fd(); + } NativeScreenFrameSinkHandle::outcome_from_native(unsafe { - enqueue(self.handle.context, desc, fds.as_ptr(), fds.len()) + enqueue(self.handle.context, desc, raw_fds.as_ptr(), fd_count) }) } diff --git a/fluxer_desktop/native/system-hunspell/Cargo.lock b/fluxer_desktop/native/system-hunspell/Cargo.lock index 86945cac7..2df673835 100644 --- a/fluxer_desktop/native/system-hunspell/Cargo.lock +++ b/fluxer_desktop/native/system-hunspell/Cargo.lock @@ -13,9 +13,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "bindgen" diff --git a/fluxer_desktop/native/webauthn/Cargo.lock b/fluxer_desktop/native/webauthn/Cargo.lock index 5cebeb8d6..dafd0c829 100644 --- a/fluxer_desktop/native/webauthn/Cargo.lock +++ b/fluxer_desktop/native/webauthn/Cargo.lock @@ -13,9 +13,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "bindgen" diff --git a/fluxer_desktop/native/win-game-capture/src/lib.rs b/fluxer_desktop/native/win-game-capture/src/lib.rs index d8de56837..444b99a7b 100644 --- a/fluxer_desktop/native/win-game-capture/src/lib.rs +++ b/fluxer_desktop/native/win-game-capture/src/lib.rs @@ -792,10 +792,10 @@ fn retain_native_frame_sink_handle( } let handle = unsafe { - fluxer_screen_frame_bus::NativeScreenFrameSinkHandle::retain_from_raw( - data.cast::(), - ) + data.cast::() + .as_ref() } + .and_then(fluxer_screen_frame_bus::NativeScreenFrameSinkHandle::retain_ref) .ok_or_else(|| { napi::Error::new( Status::InvalidArg, diff --git a/fluxer_desktop/native/win-process-loopback/src/lib.rs b/fluxer_desktop/native/win-process-loopback/src/lib.rs index 97756eeed..a68b77439 100644 --- a/fluxer_desktop/native/win-process-loopback/src/lib.rs +++ b/fluxer_desktop/native/win-process-loopback/src/lib.rs @@ -37,15 +37,14 @@ fn retain_screen_audio_sink_handle( "ProcessLoopback.setScreenAudioSink received an empty native external sink handle", )); } - let handle = unsafe { - NativeScreenFrameSinkHandle::retain_from_raw(data.cast::()) - } - .ok_or_else(|| { - Error::new( - Status::InvalidArg, - "ProcessLoopback.setScreenAudioSink received an invalid native sink handle", - ) - })?; + let handle = unsafe { data.cast::().as_ref() } + .and_then(NativeScreenFrameSinkHandle::retain_ref) + .ok_or_else(|| { + Error::new( + Status::InvalidArg, + "ProcessLoopback.setScreenAudioSink received an invalid native sink handle", + ) + })?; Ok(Arc::new(handle)) } @@ -341,7 +340,7 @@ impl Callbacks { FrameSamples::Owned(owned) => owned.as_slice(), }; let channels = u32::from(audio_contract::TARGET_CHANNELS); - if channels == 0 || samples.is_empty() || samples.len() % (channels as usize) != 0 { + if channels == 0 || samples.is_empty() || !samples.len().is_multiple_of(channels as usize) { return true; } let frames = samples.len() as u32 / channels; diff --git a/fluxer_desktop/package.json b/fluxer_desktop/package.json index 1997b9433..5a164b012 100644 --- a/fluxer_desktop/package.json +++ b/fluxer_desktop/package.json @@ -26,7 +26,8 @@ "@types/node": "24.10.9", "@typescript/native-preview": "7.0.0-dev.20260130.1", "electron": "42.10.0", - "electron-builder": "26.9.0", + "electron-builder": "26.15.3", + "electron-builder-squirrel-windows": "26.15.3", "esbuild": "0.27.2", "typescript": "5.9.3" }, diff --git a/fluxer_gateway/native/guild_member_list_oset_nif/src/lib.rs b/fluxer_gateway/native/guild_member_list_oset_nif/src/lib.rs index 2c535a70a..45d07642f 100644 --- a/fluxer_gateway/native/guild_member_list_oset_nif/src/lib.rs +++ b/fluxer_gateway/native/guild_member_list_oset_nif/src/lib.rs @@ -109,7 +109,7 @@ impl Node { } impl MemberOSet { - fn from_sorted(&mut self, mut keys: Vec) { + fn replace_from_keys(&mut self, mut keys: Vec) { keys.sort_unstable(); keys.dedup(); self.root = build_balanced(&keys); @@ -192,7 +192,7 @@ fn from_sorted<'a>( return Err(Error::BadArg); } let mut set = resource.inner.lock().map_err(|_| Error::BadArg)?; - set.from_sorted(keys); + set.replace_from_keys(keys); Ok(atoms::ok().encode(env)) } diff --git a/fluxer_gateway/rebar.config b/fluxer_gateway/rebar.config index de42094df..9c2df278f 100644 --- a/fluxer_gateway/rebar.config +++ b/fluxer_gateway/rebar.config @@ -1,7 +1,7 @@ % SPDX-License-Identifier: AGPL-3.0-or-later {erl_opts, [debug_info, nowarn_deprecated_function]}. {deps, [ - {cowboy, "2.14.2"}, + {cowboy, "2.18.0"}, {base64url, "1.0.1"}, {jose, "1.11.10"}, {ezstd, "1.1.0"}, @@ -13,7 +13,8 @@ {project_plugins, [ {erlfmt, {git, "https://github.com/WhatsApp/erlfmt.git", {tag, "v1.8.0"}}}, - {rebar3_lint, {git, "https://github.com/project-fifo/rebar3_lint.git", {branch, "master"}}} + {rebar3_lint, {git, "https://github.com/project-fifo/rebar3_lint.git", {branch, "master"}}}, + {rebar3_audit, "0.2.7"} ]}. {pre_hooks, [{compile, "../tools/ci/run.sh build-gateway-nifs --gateway-dir ."}]}. diff --git a/fluxer_gateway/rebar.lock b/fluxer_gateway/rebar.lock index e193fe0ff..e2967cc26 100644 --- a/fluxer_gateway/rebar.lock +++ b/fluxer_gateway/rebar.lock @@ -1,7 +1,7 @@ {"1.2.0", [{<<"base64url">>,{pkg,<<"base64url">>,<<"1.0.1">>},0}, - {<<"cowboy">>,{pkg,<<"cowboy">>,<<"2.14.2">>},0}, - {<<"cowlib">>,{pkg,<<"cowlib">>,<<"2.16.0">>},1}, + {<<"cowboy">>,{pkg,<<"cowboy">>,<<"2.18.0">>},0}, + {<<"cowlib">>,{pkg,<<"cowlib">>,<<"2.19.0">>},1}, {<<"enats">>,{pkg,<<"enats">>,<<"1.2.0">>},0}, {<<"enats_msg">>,{pkg,<<"enats_msg">>,<<"1.0.3">>},1}, {<<"eqwalizer_support">>, @@ -12,26 +12,26 @@ {<<"ezstd">>,{pkg,<<"ezstd">>,<<"1.1.0">>},0}, {<<"jose">>,{pkg,<<"jose">>,<<"1.11.10">>},0}, {<<"opentelemetry_api">>,{pkg,<<"opentelemetry_api">>,<<"1.4.0">>},1}, - {<<"ranch">>,{pkg,<<"ranch">>,<<"2.2.0">>},1}]}. + {<<"ranch">>,{pkg,<<"ranch">>,<<"2.2.1">>},1}]}. [ {pkg_hash,[ {<<"base64url">>, <<"F8C7F2DA04CA9A5D0F5F50258F055E1D699F0E8BF4CFDB30B750865368403CF6">>}, - {<<"cowboy">>, <<"4008BE1DF6ADE45E4F2A4E9E2D22B36D0B5ABA4E20B0A0D7049E28D124E34847">>}, - {<<"cowlib">>, <<"54592074EBBBB92EE4746C8A8846E5605052F29309D3A873468D76CDF932076F">>}, + {<<"cowboy">>, <<"BFF388EB4D6356CB3F88C26E65B515976BF04B401B805D31550C3E60EBA8FE18">>}, + {<<"cowlib">>, <<"C9D11C9D035472E27A740C9F327786C61ED209269B4BE0260D59D3EC07B8949F">>}, {<<"enats">>, <<"D7459C804013CAFA4AF880B18D446C48890D28D372D62AD66C76187E5779248D">>}, {<<"enats_msg">>, <<"50631124F37D88BE76A91A5B96A6565C5981EBF917CD819F0175CA658A966F43">>}, {<<"ezstd">>, <<"D3B483D6ACFADFB65DBA4015371E6D54526DBF3D9EF0941B5ADD8BF5890731F4">>}, {<<"jose">>, <<"A903F5227417BD2A08C8A00A0CBCC458118BE84480955E8D251297A425723F83">>}, {<<"opentelemetry_api">>, <<"63CA1742F92F00059298F478048DFB826F4B20D49534493D6919A0DB39B6DB04">>}, - {<<"ranch">>, <<"25528F82BC8D7C6152C57666CA99EC716510FE0925CB188172F41CE93117B1B0">>}]}, + {<<"ranch">>, <<"FC2BB0E800EFBEAB8FF82EB325450B9C08653B14C3F69E8B09BBEA304973105D">>}]}, {pkg_hash_ext,[ {<<"base64url">>, <<"F9B3ADD4731A02A9B0410398B475B33E7566A695365237A6BDEE1BB447719F5C">>}, - {<<"cowboy">>, <<"569081DA046E7B41B5DF36AA359BE71A0C8874E5B9CFF6F747073FC57BAF1AB9">>}, - {<<"cowlib">>, <<"7F478D80D66B747344F0EA7708C187645CFCC08B11AA424632F78E25BF05DB51">>}, + {<<"cowboy">>, <<"62D0B26ABCF455054972B0DA242389C69D5982CE5914AFB8C344517F667B9600">>}, + {<<"cowlib">>, <<"6DC66E3135B229193EA4DCB14294E79520C923D391315C9C962EF0B4BEA72356">>}, {<<"enats">>, <<"20DEB3CB1D3E960194DF8B136C40D2DB085B485BBA5E493B340AB5F9FD2BED22">>}, {<<"enats_msg">>, <<"C4F2139E5144FABC99AFE01B8B016AD9DA278CDDC60857AC5D5AFB0AD1283534">>}, {<<"ezstd">>, <<"28CFA0ED6CC3922095AD5BA0F23392A1664273358B17184BAA909868361184E7">>}, {<<"jose">>, <<"0D6CD36FF8BA174DB29148FC112B5842186B68A90CE9FC2B3EC3AFE76593E614">>}, {<<"opentelemetry_api">>, <<"3DFBBFAA2C2ED3121C5C483162836C4F9027DEF469C41578AF5EF32589FCFC58">>}, - {<<"ranch">>, <<"FA0B99A1780C80218A4197A59EA8D3BDAE32FBFF7E88527D7D8A4787EFF4F8E7">>}]} + {<<"ranch">>, <<"55F05CCE20EC2DA1D90DE5D5981AFB93DBFC01325FC7E933189AA5C62F037C24">>}]} ]. diff --git a/fluxer_gateway/scripts/docker_entrypoint.sh b/fluxer_gateway/scripts/docker_entrypoint.sh index 9675abf4f..60469f615 100755 --- a/fluxer_gateway/scripts/docker_entrypoint.sh +++ b/fluxer_gateway/scripts/docker_entrypoint.sh @@ -5,36 +5,36 @@ set -eu is_positive_int() { - case "${1:-}" in - '' | 0* | *[!0-9]*) return 1 ;; - *) [ "$1" -gt 0 ] ;; - esac + case "${1:-}" in + '' | 0* | *[!0-9]*) return 1 ;; + *) [ "$1" -gt 0 ] ;; + esac } available_cpu_count() { - cpu_quota="" - cpu_period="" - if [ -r /sys/fs/cgroup/cpu.max ]; then - read -r cpu_quota cpu_period < /sys/fs/cgroup/cpu.max || true - else - for cgroup_dir in /sys/fs/cgroup/cpu /sys/fs/cgroup/cpu,cpuacct; do - if [ -r "$cgroup_dir/cpu.cfs_quota_us" ] && [ -r "$cgroup_dir/cpu.cfs_period_us" ]; then - read -r cpu_quota < "$cgroup_dir/cpu.cfs_quota_us" || true - read -r cpu_period < "$cgroup_dir/cpu.cfs_period_us" || true - break - fi - done - fi - if is_positive_int "$cpu_quota" && is_positive_int "$cpu_period"; then - echo "$(((cpu_quota + cpu_period - 1) / cpu_period))" - return 0 - fi - cpu_count="$(nproc 2>/dev/null || echo 1)" - if is_positive_int "$cpu_count"; then - echo "$cpu_count" - else - echo 1 - fi + cpu_quota="" + cpu_period="" + if [ -r /sys/fs/cgroup/cpu.max ]; then + read -r cpu_quota cpu_period &2 - exit 64 - ;; +eval | console | remote_console | remote | remsh | console_clean | console_boot | daemon | daemon_boot | daemon_attach | escript) + echo "fluxer_gateway: '$command' is disabled in production; use bounded rpc/runtime tools instead." >&2 + exit 64 + ;; esac -script_dir="$(CDPATH= cd "$(dirname "$0")" && pwd -P)" +script_dir="$(CDPATH='' cd "$(dirname "$0")" && pwd -P)" exec "$script_dir/fluxer_gateway.real" "$@" diff --git a/fluxer_gateway/src/guild/guild_common.erl b/fluxer_gateway/src/guild/guild_common.erl index 205048a53..fe0d88726 100644 --- a/fluxer_gateway/src/guild/guild_common.erl +++ b/fluxer_gateway/src/guild/guild_common.erl @@ -130,7 +130,7 @@ strip_members_test() -> <<"channels">> => [#{<<"id">> => <<"10">>}], <<"roles">> => [#{<<"id">> => <<"role1">>}] }, - Stripped = strip_members(Data), + Stripped = #{} = strip_members(Data), ?assertEqual(false, maps:is_key(<<"members">>, Stripped)), ?assertEqual(false, maps:is_key(<<"member_role_index">>, Stripped)), ?assertEqual([#{<<"id">> => <<"10">>}], maps:get(<<"channels">>, Stripped)), diff --git a/fluxer_gateway/src/guild/guild_connect_async.erl b/fluxer_gateway/src/guild/guild_connect_async.erl index bcb2a4068..a0d81a736 100644 --- a/fluxer_gateway/src/guild/guild_connect_async.erl +++ b/fluxer_gateway/src/guild/guild_connect_async.erl @@ -17,9 +17,6 @@ -define(SESSION_CONNECT_MAX_WORKERS, 8). -define(SESSION_CONNECT_DEFAULT_MAX_QUEUE, 1024). --define(CONNECT_SNAPSHOT_HEAVY_MEMBER_KEYS, [ - <<"members">>, members_normalized, <<"member_role_index">>, members_sorted_ids -]). -spec ensure_session_connect_queue(term()) -> queue:queue(). ensure_session_connect_queue(Value) when is_list(Value) -> @@ -366,95 +363,11 @@ queued_session_pid(_) -> -spec start_worker(map(), map()) -> map(). start_worker(Item, State) -> Self = self(), - Snapshot = build_connect_snapshot(Item, State), + Snapshot = guild_data:build_connect_snapshot(Item, State), {_Pid, Ref} = spawn_monitor(fun() -> compute_and_send_done(Item, Self, Snapshot) end), WorkerRefs = maps:get(session_connect_worker_refs, State, #{}), State#{session_connect_worker_refs => WorkerRefs#{Ref => true}}. --spec build_connect_snapshot(map(), map()) -> map(). -build_connect_snapshot(Item, State) -> - Base = maps:with( - [ - id, - data, - sessions, - member_count, - voice_server_pid, - voice_states, - member_list_engine, - virtual_channel_access - ], - State - ), - maybe_trim_connect_snapshot(Item, Base, State). - --spec maybe_trim_connect_snapshot(map(), map(), map()) -> map(). -maybe_trim_connect_snapshot(Item, Base, State) -> - case has_members_ets(State) of - true -> trim_connect_snapshot(Item, Base); - false -> Base - end. - --spec has_members_ets(map()) -> boolean(). -has_members_ets(#{data := #{members_ets := Tab}}) -> is_reference(Tab); -has_members_ets(_) -> false. - --spec trim_connect_snapshot(map(), map()) -> map(). -trim_connect_snapshot(Item, #{data := Data} = Base) when is_map(Data) -> - Retained = retained_member_map(Item, Base, Data), - Trimmed = maps:without(?CONNECT_SNAPSHOT_HEAVY_MEMBER_KEYS, Data), - Base#{ - data => Trimmed#{ - <<"members">> => Retained, - members_normalized => Retained, - <<"member_role_index">> => - guild_data_index_members:build_member_role_index(Retained) - } - }; -trim_connect_snapshot(_Item, Base) -> - Base. - --spec retained_member_map(map(), map(), map()) -> #{integer() => map()}. -retained_member_map(Item, Base, Data) -> - UserIds = [connect_user_id(Item) | voice_state_user_ids(Base)], - lists:foldl( - fun(UserId, Acc) -> retain_member(UserId, Data, Acc) end, - #{}, - UserIds - ). - --spec retain_member(term(), map(), #{integer() => map()}) -> #{integer() => map()}. -retain_member(UserId, Data, Acc) when is_integer(UserId) -> - case guild_data_index_members:get_member_ets(UserId, Data) of - Member when is_map(Member) -> Acc#{UserId => Member}; - _ -> Acc - end; -retain_member(_UserId, _Data, Acc) -> - Acc. - --spec connect_user_id(map()) -> integer() | undefined. -connect_user_id(Item) -> - Request = maps:get(request, Item, #{}), - case maps:get(user_id, Request, undefined) of - UserId when is_integer(UserId) -> UserId; - _ -> undefined - end. - --spec voice_state_user_ids(map()) -> [integer()]. -voice_state_user_ids(Base) -> - maps:fold( - fun(_Key, VoiceState, Acc) -> add_voice_state_user_id(VoiceState, Acc) end, - [], - voice_state_utils:voice_states(Base) - ). - --spec add_voice_state_user_id(term(), [integer()]) -> [integer()]. -add_voice_state_user_id(VoiceState, Acc) -> - case voice_state_utils:voice_state_user_id(VoiceState) of - UserId when is_integer(UserId) -> [UserId | Acc]; - _ -> Acc - end. - -spec compute_and_send_done(map(), pid(), map()) -> ok. compute_and_send_done(Item, GuildPid, Snapshot) -> Request = maps:get(request, Item, #{}), diff --git a/fluxer_gateway/src/guild/guild_data.erl b/fluxer_gateway/src/guild/guild_data.erl index c2cac25fc..6b2b69ccc 100644 --- a/fluxer_gateway/src/guild/guild_data.erl +++ b/fluxer_gateway/src/guild/guild_data.erl @@ -13,6 +13,7 @@ -export([get_vanity_url_channel/1]). -export([get_first_viewable_text_channel/1]). -export([get_guild_state/2]). +-export([build_connect_snapshot/2]). -export([fetch_latest_voice_states/1]). -export([find_everyone_viewable_text_channel/2]). @@ -21,6 +22,10 @@ -type user_id() :: integer(). -type guild_id() :: integer(). +-define(CONNECT_SNAPSHOT_HEAVY_MEMBER_KEYS, [ + <<"members">>, members_normalized, <<"member_role_index">>, members_sorted_ids +]). + -export_type([guild_state/0, guild_reply/1, user_id/0]). -spec get_guild_data(map(), guild_state()) -> guild_reply(map()). @@ -147,6 +152,92 @@ get_guild_state(UserId, State) -> JoinedAt ). +-spec build_connect_snapshot(map(), guild_state()) -> map(). +build_connect_snapshot(Item, State) -> + Base = maps:with( + [ + id, + data, + sessions, + member_count, + voice_server_pid, + voice_states, + member_list_engine, + virtual_channel_access + ], + State + ), + maybe_trim_connect_snapshot(Item, Base, State). + +-spec maybe_trim_connect_snapshot(map(), map(), guild_state()) -> map(). +maybe_trim_connect_snapshot(Item, Base, State) -> + case has_members_ets(State) of + true -> trim_connect_snapshot(Item, Base); + false -> Base + end. + +-spec has_members_ets(guild_state()) -> boolean(). +has_members_ets(#{data := #{members_ets := Tab}}) -> is_reference(Tab); +has_members_ets(_) -> false. + +-spec trim_connect_snapshot(map(), map()) -> map(). +trim_connect_snapshot(Item, #{data := Data} = Base) when is_map(Data) -> + Retained = retained_member_map(Item, Base, Data), + Trimmed = maps:without(?CONNECT_SNAPSHOT_HEAVY_MEMBER_KEYS, Data), + Base#{ + data => Trimmed#{ + <<"members">> => Retained, + members_normalized => Retained, + <<"member_role_index">> => + guild_data_index_members:build_member_role_index(Retained) + } + }; +trim_connect_snapshot(_Item, Base) -> + Base. + +-spec retained_member_map(map(), map(), map()) -> #{integer() => map()}. +retained_member_map(Item, Base, Data) -> + UserIds = [connect_user_id(Item) | voice_state_user_ids(Base)], + lists:foldl( + fun(UserId, Acc) -> retain_member(UserId, Data, Acc) end, + #{}, + UserIds + ). + +-spec retain_member(term(), map(), #{integer() => map()}) -> #{integer() => map()}. +retain_member(UserId, Data, Acc) when is_integer(UserId) -> + case guild_data_index_members:get_member_ets(UserId, Data) of + Member when is_map(Member) -> Acc#{UserId => Member}; + _ -> Acc + end; +retain_member(_UserId, _Data, Acc) -> + Acc. + +-spec connect_user_id(map()) -> integer() | undefined. +connect_user_id(Item) -> + Request = maps:get(request, Item, #{}), + case maps:get(user_id, Request, undefined) of + UserId when is_integer(UserId) -> UserId; + _ -> undefined + end. + +-spec voice_state_user_ids(map()) -> [integer()]. +voice_state_user_ids(Base) -> + maps:fold( + fun(_Key, VoiceState, Acc) -> add_voice_state_user_id(VoiceState, Acc) end, + [], + voice_state_utils:voice_states(Base) + ). + +-spec add_voice_state_user_id(term(), [integer()]) -> [integer()]. +add_voice_state_user_id(VoiceState, Acc) when is_map(VoiceState) -> + case voice_state_utils:voice_state_user_id(VoiceState) of + UserId when is_integer(UserId) -> [UserId | Acc]; + _ -> Acc + end; +add_voice_state_user_id(_VoiceState, Acc) -> + Acc. + -spec resolve_voice_members([map()], map()) -> [map()]. resolve_voice_members(VoiceStates, Data) -> lists:filtermap(fun(VS) -> resolve_voice_member_entry(VS, Data) end, VoiceStates). @@ -164,14 +255,18 @@ resolve_voice_member_entry(VoiceState, Data) -> resolve_voice_member_by_lookup(VoiceState, Data) -> case voice_state_utils:voice_state_user_id(VoiceState) of UserId when is_integer(UserId) -> - case guild_data_index_members:get_member_ets(UserId, Data) of - Member when is_map(Member) -> {true, Member}; - _ -> false - end; + resolve_voice_member_from_index(UserId, Data); _ -> false end. +-spec resolve_voice_member_from_index(integer(), map()) -> {true, map()} | false. +resolve_voice_member_from_index(UserId, Data) -> + case guild_data_index_members:get_member_ets(UserId, Data) of + Member when is_map(Member) -> {true, Member}; + _ -> false + end. + -spec fetch_latest_voice_states(guild_state()) -> guild_state(). fetch_latest_voice_states(State) -> case maps:get(voice_server_pid, State, undefined) of diff --git a/fluxer_gateway/src/guild/guild_data_index.erl b/fluxer_gateway/src/guild/guild_data_index.erl index bdbd8750d..7fb974980 100644 --- a/fluxer_gateway/src/guild/guild_data_index.erl +++ b/fluxer_gateway/src/guild/guild_data_index.erl @@ -5,6 +5,7 @@ -export([ normalize_data/1, + normalize_map/1, member_map/1, member_values/1, member_list/1, @@ -36,6 +37,12 @@ -spec normalize_data(term()) -> term(). normalize_data(Data) when is_map(Data) -> + normalize_map(Data); +normalize_data(Data) -> + Data. + +-spec normalize_map(map()) -> guild_data(). +normalize_map(Data) -> Data0 = case guild_data_normalize:guild_data(Data) of Normalized when is_map(Normalized) -> Normalized; @@ -60,9 +67,7 @@ normalize_data(Data) when is_map(Data) -> guild_data_index_roles:build_role_perms_cache(Roles), overwrite_perms_cache => guild_data_index_channels:build_overwrite_perms_cache(Channels) - }; -normalize_data(Data) -> - Data. + }. -spec member_map(term()) -> map(). member_map(Data) -> guild_data_index_members:member_map(Data). @@ -104,7 +109,8 @@ role_list(Data) -> guild_data_index_roles:role_list(Data). role_index(Data) -> guild_data_index_roles:role_index(Data). -spec put_roles(term(), guild_data()) -> guild_data(). -put_roles(Roles, Data) -> guild_data_index_roles:put_roles(Roles, Data). +put_roles(Roles, Data) -> + ensure_guild_data(guild_data_index_roles:put_roles(Roles, Data)). -spec channel_list(term()) -> [map()]. channel_list(Data) -> guild_data_index_channels:channel_list(Data). @@ -113,7 +119,8 @@ channel_list(Data) -> guild_data_index_channels:channel_list(Data). channel_index(Data) -> guild_data_index_channels:channel_index(Data). -spec put_channels(term(), guild_data()) -> guild_data(). -put_channels(Channels, Data) -> guild_data_index_channels:put_channels(Channels, Data). +put_channels(Channels, Data) -> + ensure_guild_data(guild_data_index_channels:put_channels(Channels, Data)). -spec build_role_perms_cache([map()]) -> map(). build_role_perms_cache(Roles) -> guild_data_index_roles:build_role_perms_cache(Roles). @@ -150,6 +157,10 @@ extract_integer_list(Value) -> ensure_data_map(State) -> map_utils:ensure_map(map_utils:get_safe(State, data, #{})). +-spec ensure_guild_data(term()) -> guild_data(). +ensure_guild_data(Data) when is_map(Data) -> + Data. + -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). @@ -159,13 +170,13 @@ normalize_data_builds_indexes_test() -> <<"roles">> => [#{<<"id">> => <<"100">>}], <<"channels">> => [#{<<"id">> => <<"200">>}] }, - Normalized = normalize_data(Data), + Normalized = normalize_map(Data), ?assert(is_map(maps:get(<<"members">>, Normalized))), ?assertMatch(#{100 := _}, role_index(Normalized)), ?assertMatch(#{200 := _}, channel_index(Normalized)). normalize_data_empty_lists_test() -> - Normalized = normalize_data(#{<<"members">> => [], <<"roles">> => [], <<"channels">> => []}), + Normalized = normalize_map(#{<<"members">> => [], <<"roles">> => [], <<"channels">> => []}), ?assertEqual(#{}, maps:get(<<"members">>, Normalized)), ?assertEqual([], maps:get(<<"roles">>, Normalized)), ?assertEqual([], maps:get(<<"channels">>, Normalized)). @@ -175,7 +186,7 @@ normalize_data_non_map_input_test() -> ?assertEqual(42, normalize_data(42)). normalize_data_missing_keys_defaults_test() -> - Normalized = normalize_data(#{}), + Normalized = normalize_map(#{}), ?assertEqual(#{}, maps:get(<<"members">>, Normalized)), ?assertEqual([], maps:get(<<"roles">>, Normalized)), ?assertEqual([], maps:get(<<"channels">>, Normalized)). diff --git a/fluxer_gateway/src/guild/guild_init.erl b/fluxer_gateway/src/guild/guild_init.erl index c3aa0b093..d1612c538 100644 --- a/fluxer_gateway/src/guild/guild_init.erl +++ b/fluxer_gateway/src/guild/guild_init.erl @@ -23,7 +23,7 @@ init_base_state(GuildState) -> Data0 = maps:get(data, TransferSafe, #{}), ExistingVoice = maps:get(voice_states, TransferSafe, #{}), {VoiceStates, Data1} = extract_voice_states_from_data(Data0, ExistingVoice), - NormalizedData = guild_data_index:normalize_data(Data1), + NormalizedData = guild_data_index:normalize_map(Data1), MemberTab = ets:new(guild_members_data, [set, public, {read_concurrency, true}]), populate_member_ets(MemberTab, NormalizedData), BaseState = TransferSafe#{ @@ -122,7 +122,7 @@ handle_reload(NewData, State) -> {ReloadVoiceStates, ReloadData} = extract_voice_states_from_data( NewData, ExistingVoiceStates ), - NormalizedNewData = guild_data_index:normalize_data(ReloadData), + NormalizedNewData = guild_data_index:normalize_map(ReloadData), NewState0 = State#{voice_states => ReloadVoiceStates, data => NormalizedNewData}, NewState1 = guild_availability:handle_unavailability_transition(State, NewState0), NewState2 = guild_sessions:refresh_all_viewable_channels(NewState1), diff --git a/fluxer_gateway/src/guild/guild_maintenance.erl b/fluxer_gateway/src/guild/guild_maintenance.erl index 48977e8c4..e654c44e0 100644 --- a/fluxer_gateway/src/guild/guild_maintenance.erl +++ b/fluxer_gateway/src/guild/guild_maintenance.erl @@ -457,8 +457,8 @@ permission_cache_rebuilds_on_member_role_change_test() -> {ok, Snapshot} = permission_cache_refresh( guild_member_update, EventData, OldState, NewState ), - Member = guild_permissions:find_member_by_user_id(UserId, Snapshot), - ?assertEqual([10, 11], maps:get(<<"roles">>, Member)). + #{<<"roles">> := Roles} = guild_permissions:find_member_by_user_id(UserId, Snapshot), + ?assertEqual([10, 11], Roles). permission_cache_rebuilds_on_member_timeout_change_test() -> UserId = 4242, @@ -473,8 +473,9 @@ permission_cache_rebuilds_on_member_timeout_change_test() -> {ok, Snapshot} = permission_cache_refresh( guild_member_update, EventData, OldState, NewState ), - Member = guild_permissions:find_member_by_user_id(UserId, Snapshot), - ?assertEqual(Until, maps:get(<<"communication_disabled_until">>, Member)). + #{<<"communication_disabled_until">> := MemberUntil} = + guild_permissions:find_member_by_user_id(UserId, Snapshot), + ?assertEqual(Until, MemberUntil). permission_cache_rebuilds_for_other_mutating_events_test() -> State = permission_cache_state(7710004, permission_cache_member(4242, [10], <<"old">>)), @@ -497,7 +498,7 @@ permission_cache_refresh(Event, EventData, OldState, NewState) -> permission_cache_state(GuildId, Member) -> #{ id => GuildId, - data => guild_data_index:normalize_data(#{ + data => guild_data_index:normalize_map(#{ <<"guild">> => #{<<"owner_id">> => <<"999">>}, <<"roles">> => [prune_role(10, 0), prune_role(11, 0)], <<"members">> => [Member], diff --git a/fluxer_gateway/src/guild/guild_member_list_oset_nif.erl b/fluxer_gateway/src/guild/guild_member_list_oset_nif.erl index fab0fa495..eee3fea06 100644 --- a/fluxer_gateway/src/guild/guild_member_list_oset_nif.erl +++ b/fluxer_gateway/src/guild/guild_member_list_oset_nif.erl @@ -79,23 +79,26 @@ range(_OSet, _Start, _Count) -> to_list(_OSet) -> erlang:nif_error(nif_not_loaded). --spec nif_path() -> file:filename_all(). +-spec nif_path() -> string(). nif_path() -> - filename:join(priv_dir(), ?NIF_NAME). + require_string_path(filename:join(priv_dir(), ?NIF_NAME)). --spec priv_dir() -> file:filename_all(). +-spec require_string_path(file:filename_all()) -> string(). +require_string_path(Path) when is_list(Path) -> Path. + +-spec priv_dir() -> string(). priv_dir() -> case code:priv_dir(fluxer_gateway) of {error, _Reason} -> priv_dir_from_beam(); - Dir -> Dir + Dir when is_list(Dir) -> Dir end. --spec priv_dir_from_beam() -> file:filename_all(). +-spec priv_dir_from_beam() -> string(). priv_dir_from_beam() -> case code:which(?MODULE) of Beam when is_list(Beam) -> AppDir = filename:dirname(filename:dirname(Beam)), - filename:join(AppDir, "priv"); + require_string_path(filename:join(AppDir, "priv")); _ -> "priv" end. diff --git a/fluxer_gateway/src/guild/guild_member_list_subs.erl b/fluxer_gateway/src/guild/guild_member_list_subs.erl index 26f5a1522..77918f99a 100644 --- a/fluxer_gateway/src/guild/guild_member_list_subs.erl +++ b/fluxer_gateway/src/guild/guild_member_list_subs.erl @@ -141,17 +141,15 @@ get_session_ranges(SessionId, ListId, Tab) -> list_ids(Tab) -> list_ids_loop(Tab, ets:next(Tab, {<<>>, <<>>}), []). --spec fold_list_subs( - binary(), ets:table(), fun((binary(), [range()], map()) -> map()), map() -) -> map(). +-spec fold_list_subs(binary(), ets:table(), fun((binary(), [range()], Acc) -> Acc), Acc) -> Acc. fold_list_subs(ListId, Tab, Fun, Acc0) -> fold_list_subs_loop(Tab, ets:next(Tab, {ListId, <<>>}), ListId, Fun, Acc0). --spec fold_lists(fun((binary(), list_subs(), map()) -> map()), map(), ets:table()) -> map(). +-spec fold_lists(fun((binary(), list_subs(), Acc) -> Acc), Acc, ets:table()) -> Acc. fold_lists(Fun, Acc0, Tab) -> fold_lists_loop(Fun, Acc0, Tab, ets:next(Tab, {<<>>, <<>>})). --spec fold_list_ids(fun((binary(), Acc) -> Acc), Acc, ets:table()) -> Acc when Acc :: term(). +-spec fold_list_ids(fun((binary(), Acc) -> Acc), Acc, ets:table()) -> Acc. fold_list_ids(Fun, Acc0, Tab) -> fold_list_ids_loop(Fun, Acc0, Tab, ets:next(Tab, {<<>>, <<>>})). @@ -191,8 +189,8 @@ list_ids_loop(Tab, Key, Acc) -> list_ids_loop(Tab, ets:next(Tab, Key), Acc). -spec fold_list_subs_loop( - ets:table(), term(), binary(), fun((binary(), [range()], map()) -> map()), map() -) -> map(). + ets:table(), term(), binary(), fun((binary(), [range()], Acc) -> Acc), Acc +) -> Acc. fold_list_subs_loop(_Tab, '$end_of_table', _ListId, _Fun, Acc) -> Acc; fold_list_subs_loop(_Tab, {Other, _}, ListId, _Fun, Acc) when Other =/= ListId -> @@ -202,8 +200,8 @@ fold_list_subs_loop(Tab, {ListId, SId} = Key, ListId, Fun, Acc) when is_binary(S fold_list_subs_loop(Tab, ets:next(Tab, Key), ListId, Fun, Fun(SId, Ranges, Acc)). -spec fold_lists_loop( - fun((binary(), list_subs(), map()) -> map()), map(), ets:table(), term() -) -> map(). + fun((binary(), list_subs(), Acc) -> Acc), Acc, ets:table(), term() +) -> Acc. fold_lists_loop(_Fun, Acc, _Tab, '$end_of_table') -> Acc; fold_lists_loop(_Fun, Acc, _Tab, {idx_tab, _}) -> @@ -214,8 +212,7 @@ fold_lists_loop(Fun, Acc, Tab, {ListId, _} = Key) when is_binary(ListId) -> NextListKey = skip_past_list(Tab, Key, ListId), fold_lists_loop(Fun, Acc2, Tab, NextListKey). --spec fold_list_ids_loop(fun((binary(), Acc) -> Acc), Acc, ets:table(), term()) -> Acc when - Acc :: term(). +-spec fold_list_ids_loop(fun((binary(), Acc) -> Acc), Acc, ets:table(), term()) -> Acc. fold_list_ids_loop(_Fun, Acc, _Tab, '$end_of_table') -> Acc; fold_list_ids_loop(_Fun, Acc, _Tab, {idx_tab, _}) -> diff --git a/fluxer_gateway/src/guild/guild_permission_cache.erl b/fluxer_gateway/src/guild/guild_permission_cache.erl index 0fb969758..a19a3a7ab 100644 --- a/fluxer_gateway/src/guild/guild_permission_cache.erl +++ b/fluxer_gateway/src/guild/guild_permission_cache.erl @@ -46,7 +46,7 @@ put_state(_) -> -spec put_data(guild_id(), guild_data()) -> ok. put_data(GuildId, Data) when is_integer(GuildId), is_map(Data) -> - NormalizedData = guild_data_index:normalize_data(Data), + NormalizedData = guild_data_index:normalize_map(Data), put_normalized_data(GuildId, NormalizedData); put_data(_, _) -> ok. diff --git a/fluxer_gateway/src/guild/guild_presence.erl b/fluxer_gateway/src/guild/guild_presence.erl index 706cdbc30..07719adab 100644 --- a/fluxer_gateway/src/guild/guild_presence.erl +++ b/fluxer_gateway/src/guild/guild_presence.erl @@ -57,7 +57,7 @@ process_presence(UserId, Payload, Member, State) -> ), process_presence_change(UserId, OldPresence, PresenceMap, Status, State). --spec process_presence_change(user_id(), map() | undefined, map(), atom(), guild_state()) -> +-spec process_presence_change(user_id(), map(), map(), atom(), guild_state()) -> {noreply, guild_state()}. process_presence_change(UserId, PresenceMap, PresenceMap, Status, State) -> {noreply, maybe_handle_unchanged_presence(Status, UserId, State)}; @@ -397,7 +397,7 @@ handle_bus_presence_unchanged_payload_is_noop_test() -> <<"afk">> => false, <<"user">> => #{<<"id">> => <<"1">>, <<"username">> => <<"Alpha">>} }, - Member = guild_permissions:find_member_by_user_id(1, State), + Member = #{} = guild_permissions:find_member_by_user_id(1, State), PresenceMap = build_presence_map(Payload, Member), ets:insert(maps:get(member_presence, State), {1, PresenceMap}), {noreply, NewState} = handle_bus_presence(1, Payload, State), diff --git a/fluxer_gateway/src/guild/guild_state.erl b/fluxer_gateway/src/guild/guild_state.erl index ea93b51b4..f9870afdf 100644 --- a/fluxer_gateway/src/guild/guild_state.erl +++ b/fluxer_gateway/src/guild/guild_state.erl @@ -29,7 +29,7 @@ update_state(Event, EventData, State) -> ensure_normalized(Data) -> case maps:is_key(members_normalized, Data) of true -> Data; - false -> guild_data_index:normalize_data(Data) + false -> guild_data_index:normalize_map(Data) end. -spec update_data_for_event(event(), event_data(), guild_data(), guild_state()) -> guild_data(). diff --git a/fluxer_gateway/src/push/push.erl b/fluxer_gateway/src/push/push.erl index 84e434db4..f721926dc 100644 --- a/fluxer_gateway/src/push/push.erl +++ b/fluxer_gateway/src/push/push.erl @@ -140,7 +140,7 @@ sync_user_blocked_ids(UserId, BlockedIds) -> -spec sync_user_blocked_ids_local(integer(), term()) -> ok. sync_user_blocked_ids_local(UserId, BlockedIds) -> - case integer_list(BlockedIds) of + case push_normalize:integer_list(BlockedIds) of {ok, TypedBlockedIds} -> put_blocked_ids_local(UserId, TypedBlockedIds); error -> @@ -175,7 +175,7 @@ invalidate_user_badge_count_local(UserId) -> -spec invalidate_user_badge_counts_local(term()) -> ok. invalidate_user_badge_counts_local(UserIds) -> - case integer_list(UserIds) of + case push_normalize:integer_list(UserIds) of {ok, TypedUserIds} -> lists:foreach(fun invalidate_user_badge_count_local/1, TypedUserIds); error -> @@ -419,7 +419,7 @@ dispatch_if_eligible( -spec handle_sync_user_blocked_ids(integer(), term(), state()) -> {noreply, state()}. handle_sync_user_blocked_ids(UserId, BlockedIds, State) -> - case integer_list(BlockedIds) of + case push_normalize:integer_list(BlockedIds) of {ok, TypedBlockedIds} -> push_ets_cache:put_blocked_ids(UserId, TypedBlockedIds), {noreply, State}; @@ -465,20 +465,6 @@ log_message_worker_drop(dropped, Params) -> channel_id => maps:get(<<"channel_id">>, MessageData, undefined) }). --spec integer_list(term()) -> {ok, [integer()]} | error. -integer_list(Value) when is_list(Value) -> - integer_list(Value, []); -integer_list(_) -> - error. - --spec integer_list([term()], [integer()]) -> {ok, [integer()]} | error. -integer_list([], Acc) -> - {ok, lists:reverse(Acc)}; -integer_list([Value | Rest], Acc) when is_integer(Value) -> - integer_list(Rest, [Value | Acc]); -integer_list(_, _) -> - error. - -spec local_cache_mutation(fun(() -> ok)) -> ok. local_cache_mutation(Fun) -> case whereis(?MODULE) of diff --git a/fluxer_gateway/src/push/push_dispatcher.erl b/fluxer_gateway/src/push/push_dispatcher.erl index f01fcf017..73ca0158e 100644 --- a/fluxer_gateway/src/push/push_dispatcher.erl +++ b/fluxer_gateway/src/push/push_dispatcher.erl @@ -527,27 +527,19 @@ send_job_options(UserIds0, Options) -> ChannelName0 = maps:get(channel_name, Options), BadgeCountsTtlSeconds = maps:get(badge_counts_ttl_seconds, Options), MarkdownContext = maps:get(markdown_context, Options, #{}), - case {integer_list(UserIds0), optional_binary(GuildName0), optional_binary(ChannelName0)} of + case + { + push_normalize:integer_list(UserIds0), + optional_binary(GuildName0), + optional_binary(ChannelName0) + } + of {{ok, UserIds}, {ok, GuildName}, {ok, ChannelName}} when is_map(MarkdownContext) -> {ok, UserIds, GuildName, ChannelName, BadgeCountsTtlSeconds, MarkdownContext}; _ -> error end. --spec integer_list(term()) -> {ok, [integer()]} | error. -integer_list(Value) when is_list(Value) -> - integer_list(Value, []); -integer_list(_) -> - error. - --spec integer_list([term()], [integer()]) -> {ok, [integer()]} | error. -integer_list([], Acc) -> - {ok, lists:reverse(Acc)}; -integer_list([Value | Rest], Acc) when is_integer(Value) -> - integer_list(Rest, [Value | Acc]); -integer_list(_, _) -> - error. - -spec optional_binary(term()) -> {ok, binary() | undefined} | error. optional_binary(undefined) -> {ok, undefined}; diff --git a/fluxer_gateway/src/push/push_fcm_payload.erl b/fluxer_gateway/src/push/push_fcm_payload.erl index 48191f2be..5296254f8 100644 --- a/fluxer_gateway/src/push/push_fcm_payload.erl +++ b/fluxer_gateway/src/push/push_fcm_payload.erl @@ -104,16 +104,20 @@ resolve_notification_group(Data, MessageTag) -> Group when is_binary(Group), byte_size(Group) > 0 -> Group; _ -> - case - push_utils:normalize_binary( - maps:get(<<"channel_id">>, Data, undefined), undefined - ) - of - ChannelId when is_binary(ChannelId), byte_size(ChannelId) > 0 -> - <<"channel:", ChannelId/binary>>; - _ -> - derive_channel_tag_from_message_tag(MessageTag) - end + resolve_channel_notification_group(Data, MessageTag) + end. + +-spec resolve_channel_notification_group(map(), binary()) -> binary(). +resolve_channel_notification_group(Data, MessageTag) -> + case + push_utils:normalize_binary( + maps:get(<<"channel_id">>, Data, undefined), undefined + ) + of + ChannelId when is_binary(ChannelId), byte_size(ChannelId) > 0 -> + <<"channel:", ChannelId/binary>>; + _ -> + derive_channel_tag_from_message_tag(MessageTag) end. -spec derive_channel_tag_from_message_tag(binary()) -> binary(). diff --git a/fluxer_gateway/src/push/push_markdown_plaintext_nif.erl b/fluxer_gateway/src/push/push_markdown_plaintext_nif.erl index 05f32bcae..3ad5d5b6b 100644 --- a/fluxer_gateway/src/push/push_markdown_plaintext_nif.erl +++ b/fluxer_gateway/src/push/push_markdown_plaintext_nif.erl @@ -26,23 +26,26 @@ available() -> render_push_preview_nif(_Content, _ContextJson) -> erlang:nif_error(nif_not_loaded). --spec nif_path() -> file:filename_all(). +-spec nif_path() -> string(). nif_path() -> - filename:join(priv_dir(), ?NIF_NAME). + require_string_path(filename:join(priv_dir(), ?NIF_NAME)). --spec priv_dir() -> file:filename_all(). +-spec require_string_path(file:filename_all()) -> string(). +require_string_path(Path) when is_list(Path) -> Path. + +-spec priv_dir() -> string(). priv_dir() -> case code:priv_dir(fluxer_gateway) of {error, _Reason} -> priv_dir_from_beam(); - Dir -> Dir + Dir when is_list(Dir) -> Dir end. --spec priv_dir_from_beam() -> file:filename_all(). +-spec priv_dir_from_beam() -> string(). priv_dir_from_beam() -> case code:which(?MODULE) of Beam when is_list(Beam) -> AppDir = filename:dirname(filename:dirname(Beam)), - filename:join(AppDir, "priv"); + require_string_path(filename:join(AppDir, "priv")); _ -> "priv" end. diff --git a/fluxer_gateway/src/push/push_normalize.erl b/fluxer_gateway/src/push/push_normalize.erl index 4fce51382..6d7edb26c 100644 --- a/fluxer_gateway/src/push/push_normalize.erl +++ b/fluxer_gateway/src/push/push_normalize.erl @@ -5,7 +5,8 @@ -export([ optional_guild_id/1, - notification_level/1 + notification_level/1, + integer_list/1 ]). -spec optional_guild_id(term()) -> pos_integer() | undefined. @@ -21,3 +22,17 @@ notification_level(Value) -> Level when Level >= -1, Level =< 3 -> Level; _ -> undefined end. + +-spec integer_list(term()) -> {ok, [integer()]} | error. +integer_list(Value) when is_list(Value) -> + integer_list(Value, []); +integer_list(_) -> + error. + +-spec integer_list([term()], [integer()]) -> {ok, [integer()]} | error. +integer_list([], Acc) -> + {ok, lists:reverse(Acc)}; +integer_list([Value | Rest], Acc) when is_integer(Value) -> + integer_list(Rest, [Value | Acc]); +integer_list(_, _) -> + error. diff --git a/fluxer_gateway/src/session/session_manager_shard_session_index.erl b/fluxer_gateway/src/session/session_manager_shard_session_index.erl index 3e01f1ad5..42b4b028e 100644 --- a/fluxer_gateway/src/session/session_manager_shard_session_index.erl +++ b/fluxer_gateway/src/session/session_manager_shard_session_index.erl @@ -71,8 +71,18 @@ cleanup_indexed_down(SessionId, Ref, Pid, Sessions0, Refs1, State) -> end. -spec cleanup_down_fallback(pid(), session_map(), map()) -> map(). -cleanup_down_fallback(Pid, Sessions0, State) -> - Sessions1 = process_registry:cleanup_on_down(session, Pid, Sessions0), +cleanup_down_fallback(DeadPid, Sessions0, State) -> + Sessions1 = maps:fold( + fun + (SessionId, {SessionPid, _Ref}, Acc) when SessionPid =:= DeadPid -> + ok = process_registry:safe_unregister({session, SessionId}, DeadPid), + Acc; + (SessionId, SessionRef, Acc) -> + Acc#{SessionId => SessionRef} + end, + #{}, + Sessions0 + ), replace_sessions(Sessions1, State). -spec ref_index(map()) -> ref_index(). diff --git a/fluxer_gateway/src/session/session_ready_collect.erl b/fluxer_gateway/src/session/session_ready_collect.erl index 77a546e7c..9d52030d5 100644 --- a/fluxer_gateway/src/session/session_ready_collect.erl +++ b/fluxer_gateway/src/session/session_ready_collect.erl @@ -217,10 +217,10 @@ dedup_users(Users) -> Map = lists:foldl(fun add_user_by_id/2, #{}, Users), maps:values(Map). --spec add_user_by_id(term(), #{user_id() => map()}) -> #{user_id() => map()}. +-spec add_user_by_id(map() | undefined, #{user_id() => map()}) -> #{user_id() => map()}. add_user_by_id(undefined, Acc) -> Acc; -add_user_by_id(U, Acc) -> +add_user_by_id(U, Acc) when is_map(U) -> case user_id(U) of undefined -> Acc; Id -> Acc#{Id => U#{<<"id">> => Id}} diff --git a/fluxer_gateway/test/guild_data_tests.erl b/fluxer_gateway/test/guild_data_tests.erl index 1aac70036..fe3bd9354 100644 --- a/fluxer_gateway/test/guild_data_tests.erl +++ b/fluxer_gateway/test/guild_data_tests.erl @@ -81,9 +81,9 @@ get_auth_context_matches_get_data_scalars_test() -> get_auth_context_is_reachable_through_the_query_handler_test() -> State = test_state(), Request = {get_guild_auth_context, #{user_id => 200, channel_id => 500}}, - {reply, Reply, _} = guild_query_handler:handle_call(Request, {self(), make_ref()}, State), - Context = maps:get(auth_context, Reply), - ?assertEqual(500, maps:get(<<"id">>, maps:get(<<"parent_channel">>, Context))). + {reply, #{auth_context := #{<<"parent_channel">> := #{<<"id">> := ParentChannelId}}}, _} = + guild_query_handler:handle_call(Request, {self(), make_ref()}, State), + ?assertEqual(500, ParentChannelId). get_guild_state_filters_channels_test() -> State = test_state(), diff --git a/fluxer_gateway/test/guild_passive_sync_tests.erl b/fluxer_gateway/test/guild_passive_sync_tests.erl index 8299b7108..6893952b2 100644 --- a/fluxer_gateway/test/guild_passive_sync_tests.erl +++ b/fluxer_gateway/test/guild_passive_sync_tests.erl @@ -85,7 +85,7 @@ send_passive_updates_uses_current_channel_index_and_message_only_payload_test() ChannelId = 1497639278555484216, OldMessageId = 1500000000000000000, NewMessageId = 1500000000000000001, - Data0 = guild_data_index:normalize_data(#{ + Data0 = guild_data_index:normalize_map(#{ <<"guild">> => #{<<"id">> => GuildId, <<"owner_id">> => UserId}, <<"channels">> => [#{<<"id">> => ChannelId, <<"last_message_id">> => OldMessageId}], <<"members">> => [#{<<"user">> => #{<<"id">> => UserId}, <<"roles">> => []}], diff --git a/fluxer_gateway/test/guild_state_roles_tests.erl b/fluxer_gateway/test/guild_state_roles_tests.erl index 4b5f52af7..c975993c8 100644 --- a/fluxer_gateway/test/guild_state_roles_tests.erl +++ b/fluxer_gateway/test/guild_state_roles_tests.erl @@ -7,7 +7,7 @@ handle_role_delete_strips_from_members_test() -> RoleIdToDelete = <<"200">>, - Data = guild_data_index:normalize_data(#{ + Data = guild_data_index:normalize_map(#{ <<"roles">> => [ #{<<"id">> => <<"100">>, <<"name">> => <<"Admin">>}, #{<<"id">> => <<"200">>, <<"name">> => <<"Moderator">>} @@ -138,7 +138,7 @@ handle_role_delete_removes_role_from_list_test() -> ?assertEqual(<<"Keep">>, maps:get(<<"name">>, hd(Roles))). strip_role_from_members_no_affected_users_test() -> - Data = guild_data_index:normalize_data(#{ + Data = guild_data_index:normalize_map(#{ <<"roles">> => [], <<"members">> => #{ 1 => #{<<"user">> => #{<<"id">> => <<"1">>}, <<"roles">> => [<<"100">>]} diff --git a/fluxer_gateway/test/guild_voice_broadcast_tests.erl b/fluxer_gateway/test/guild_voice_broadcast_tests.erl index e6b39205f..4a9748473 100644 --- a/fluxer_gateway/test/guild_voice_broadcast_tests.erl +++ b/fluxer_gateway/test/guild_voice_broadcast_tests.erl @@ -86,7 +86,9 @@ decoded_voice_state({pre_encoded, Bin}) -> json:decode(Bin); decoded_voice_state(Payload) -> Payload. map_path_wire_bytes(VoiceState) -> - iolist_to_binary(json:encode(guild_data_wire:payload(VoiceState))). + iolist_to_binary( + json:encode(guild_data_wire:payload(VoiceState), fun json:encode_value/2) + ). confirm_join(ConnId, GuildState) -> VoiceServerState = (voice_server_state(GuildState))#{ @@ -177,10 +179,11 @@ guild_fanout_pre_encodes_identical_wire_bytes_test() -> guild_fanout_payload_never_touches_dm_voice_states_test() -> {pre_encoded, Bin} = dispatch_payload_for(join_voice_state(<<"conn1">>)), State = #{dm_voice_states => #{}}, + EventData = #{} = json:decode(Bin), ?assertEqual( State, session_dispatch_guild:update_dm_voice_states_map( - voice_state_update, json:decode(Bin), State + voice_state_update, EventData, State ) ). @@ -191,9 +194,10 @@ dm_scoped_voice_state_stays_a_map_and_updates_dm_voice_states_test() -> State = session_dispatch_guild:update_dm_voice_states_map( voice_state_update, Payload, #{dm_voice_states => #{}} ), + #{dm_voice_states := #{<<"conn1">> := StoredVoiceState}} = State, ?assertEqual( broadcast_payload(DmVS), - maps:get(<<"conn1">>, maps:get(dm_voice_states, State)) + StoredVoiceState ). dispatch_payload_for(VoiceState) -> diff --git a/fluxer_gifs/Cargo.toml b/fluxer_gifs/Cargo.toml index 77de29c7d..5b1ce300a 100644 --- a/fluxer_gifs/Cargo.toml +++ b/fluxer_gifs/Cargo.toml @@ -5,10 +5,11 @@ name = "fluxer-gifs" version = "0.1.0" edition.workspace = true license.workspace = true +publish = false [dependencies] fluxer_common = { path = "../fluxer_common" } -anyhow = "1.0.102" +anyhow = "1.0.104" base64 = "0.22.1" fluxer-svc = { path = "../fluxer_svc", default-features = false } hmac = "0.13.0" diff --git a/fluxer_media_proxy/Cargo.toml b/fluxer_media_proxy/Cargo.toml index 322c3a5a4..c2a724e58 100644 --- a/fluxer_media_proxy/Cargo.toml +++ b/fluxer_media_proxy/Cargo.toml @@ -3,6 +3,7 @@ name = "fluxer-media-proxy" version = "0.1.0" edition.workspace = true license.workspace = true +publish = false build = "build.rs" [lib] @@ -19,7 +20,7 @@ harness = false [dependencies] fluxer_common = { path = "../fluxer_common" } -anyhow = "1.0.102" +anyhow = "1.0.104" axum = {version = "0.8.9", default-features = false, features = ["http1", "json", "query", "tokio"]} base64 = "0.22.1" bytes = "1.11.1" diff --git a/fluxer_media_proxy/deny.toml b/fluxer_media_proxy/deny.toml index 005fb6138..cfbfd9f86 100644 --- a/fluxer_media_proxy/deny.toml +++ b/fluxer_media_proxy/deny.toml @@ -1,6 +1,6 @@ [graph] targets = ["x86_64-unknown-linux-gnu"] -all-features = false +all-features = true no-default-features = false [advisories] @@ -28,12 +28,19 @@ registries = [] [bans] multiple-versions = "warn" wildcards = "deny" +allow-wildcard-paths = true highlight = "simplest-path" workspace-default-features = "allow" external-default-features = "allow" allow = [] deny = [] -skip = [] +skip = [ + { crate = "getrandom@0.3.4", reason = "transitive dependency requires the prior randomness API" }, + { crate = "http@0.2.12", reason = "transitive dependency requires the older HTTP API" }, + { crate = "http-body@0.4.6", reason = "transitive dependency requires the older HTTP body API" }, + { crate = "rand_core@0.9.5", reason = "transitive dependency requires the prior randomness API" }, + { crate = "socket2@0.5.10", reason = "transitive dependency requires the older socket API" }, +] skip-tree = [] [sources] diff --git a/fluxer_media_proxy/fuzz/Cargo.lock b/fluxer_media_proxy/fuzz/Cargo.lock index 29fc05519..4ef61e279 100644 --- a/fluxer_media_proxy/fuzz/Cargo.lock +++ b/fluxer_media_proxy/fuzz/Cargo.lock @@ -63,9 +63,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arbitrary" @@ -90,6 +90,24 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "aws-credential-types" +version = "1.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f20799b373a1be121fe3005fba0c2090af9411573878f224df44b42727fcaf7" +dependencies = [ + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "zeroize", +] + [[package]] name = "aws-lc-rs" version = "1.17.0" @@ -112,6 +130,112 @@ dependencies = [ "fs_extra", ] +[[package]] +name = "aws-sigv4" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bae38512beae0ffee7010fc24e7a8a123c53efdfef42a61e80fda4882418dc71" +dependencies = [ + "aws-credential-types", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "form_urlencoded", + "hex", + "hmac", + "http 0.2.12", + "http 1.4.2", + "percent-encoding", + "sha2", + "time", + "tracing", +] + +[[package]] +name = "aws-smithy-async" +version = "1.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffcaf626bdda484571968400c326a244598634dc75fd451325a54ad1a59acfc" +dependencies = [ + "futures-util", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "aws-smithy-http" +version = "0.63.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1ab2dc1c2c3749ead27180d333c42f11be8b0e934058fb4b2258ee8dbe5231" +dependencies = [ + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "futures-util", + "http 1.4.2", + "http-body 1.0.1", + "http-body-util", + "percent-encoding", + "pin-project-lite", + "pin-utils", + "tracing", +] + +[[package]] +name = "aws-smithy-runtime-api" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9db177daa6ba8afb9ee1aefcf548c907abcf52065e394ee11a92780057fe0e8c" +dependencies = [ + "aws-smithy-async", + "aws-smithy-runtime-api-macros", + "aws-smithy-types", + "bytes", + "http 0.2.12", + "http 1.4.2", + "pin-project-lite", + "tokio", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-smithy-runtime-api-macros" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d7396fd9500589e62e460e987ecb671bad374934e55ec3b5f498cc7a8a8a7b7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "aws-smithy-types" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b42fcf341259d85ca10fac9a2f6448a8ec691c6955a18e45bc3b71a85fab85" +dependencies = [ + "base64-simd", + "bytes", + "bytes-utils", + "http 0.2.12", + "http 1.4.2", + "http-body 0.4.6", + "http-body 1.0.1", + "http-body-util", + "itoa", + "num-integer", + "pin-project-lite", + "pin-utils", + "ryu", + "serde", + "time", +] + [[package]] name = "axum" version = "0.8.9" @@ -122,8 +246,8 @@ dependencies = [ "bytes", "form_urlencoded", "futures-util", - "http", - "http-body", + "http 1.4.2", + "http-body 1.0.1", "http-body-util", "hyper", "hyper-util", @@ -152,8 +276,8 @@ checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ "bytes", "futures-core", - "http", - "http-body", + "http 1.4.2", + "http-body 1.0.1", "http-body-util", "mime", "pin-project-lite", @@ -168,6 +292,16 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +dependencies = [ + "outref", + "vsimd", +] + [[package]] name = "bitflags" version = "2.11.1" @@ -195,6 +329,16 @@ version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +[[package]] +name = "bytes-utils" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" +dependencies = [ + "bytes", + "either", +] + [[package]] name = "cc" version = "1.2.63" @@ -221,9 +365,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chacha20" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" dependencies = [ "cfg-if", "cpufeatures", @@ -343,9 +487,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] @@ -375,10 +519,10 @@ dependencies = [ ] [[package]] -name = "data-url" -version = "0.3.2" +name = "deranged" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" [[package]] name = "digest" @@ -409,6 +553,12 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +[[package]] +name = "either" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" + [[package]] name = "equivalent" version = "1.0.2" @@ -447,10 +597,11 @@ dependencies = [ "bytes", "cc", "clap", + "fluxer_common", "hex", "hmac", - "http", - "http-body", + "http 1.4.2", + "http-body 1.0.1", "http-body-util", "libc", "moka", @@ -465,7 +616,6 @@ dependencies = [ "serde", "serde_json", "sha2", - "svg-hush", "tempfile", "thiserror", "tokio", @@ -484,6 +634,33 @@ dependencies = [ "libfuzzer-sys", ] +[[package]] +name = "fluxer_common" +version = "0.1.0" +dependencies = [ + "anyhow", + "aws-credential-types", + "aws-sigv4", + "axum", + "base64", + "hmac", + "maxminddb", + "moka", + "reqwest", + "serde_json", + "sha2", + "thiserror", + "time", + "tracing", + "urlencoding", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "foldhash" version = "0.1.5" @@ -670,6 +847,17 @@ dependencies = [ "digest", ] +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http" version = "1.4.2" @@ -680,6 +868,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + [[package]] name = "http-body" version = "1.0.1" @@ -687,7 +886,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http", + "http 1.4.2", ] [[package]] @@ -698,8 +897,8 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http", - "http-body", + "http 1.4.2", + "http-body 1.0.1", "pin-project-lite", ] @@ -734,8 +933,8 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "http", - "http-body", + "http 1.4.2", + "http-body 1.0.1", "httparse", "httpdate", "itoa", @@ -751,7 +950,7 @@ version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http", + "http 1.4.2", "hyper", "hyper-util", "rustls", @@ -770,8 +969,8 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http", - "http-body", + "http 1.4.2", + "http-body 1.0.1", "hyper", "ipnet", "libc", @@ -910,6 +1109,12 @@ version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +[[package]] +name = "ipnetwork" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf370abdafd54d13e54a620e8c3e1145f28e46cc9d704bc6d94414559df41763" + [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -1069,6 +1274,19 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" +[[package]] +name = "maxminddb" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf6467428ad055b71e588bcedcbaf2ff605b3251deb0c52be4a04b674c546dd" +dependencies = [ + "ipnetwork", + "log", + "memchr", + "serde", + "thiserror", +] + [[package]] name = "memchr" version = "2.8.0" @@ -1118,6 +1336,30 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-integer" +version = "0.1.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + [[package]] name = "once_cell" version = "1.21.4" @@ -1136,6 +1378,12 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" +[[package]] +name = "outref" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" + [[package]] name = "parking_lot" version = "0.12.5" @@ -1198,6 +1446,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -1226,12 +1480,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - [[package]] name = "quinn" version = "0.11.9" @@ -1399,10 +1647,11 @@ checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" dependencies = [ "base64", "bytes", + "futures-channel", "futures-core", "futures-util", - "http", - "http-body", + "http 1.4.2", + "http-body 1.0.1", "http-body-util", "hyper", "hyper-rustls", @@ -1439,7 +1688,7 @@ checksum = "07bc3f1384cffa4f274dad2d4ddd73aed32fed8f786d96c6be8aa4e5fd3c3b58" dependencies = [ "anyhow", "async-trait", - "http", + "http 1.4.2", "reqwest", "thiserror", "tower-service", @@ -1455,7 +1704,7 @@ dependencies = [ "async-trait", "futures", "getrandom 0.2.17", - "http", + "http 1.4.2", "hyper", "reqwest", "reqwest-middleware", @@ -1815,19 +2064,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "svg-hush" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "929223e80cdcec0482207576ea09692dd71b2b559057fc172e292ecec9a97559" -dependencies = [ - "base64", - "data-url", - "quick-error", - "url", - "xml", -] - [[package]] name = "syn" version = "2.0.117" @@ -1907,6 +2143,36 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "time" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "time-macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tinystr" version = "0.8.3" @@ -2006,8 +2272,8 @@ dependencies = [ "bitflags", "bytes", "futures-util", - "http", - "http-body", + "http 1.4.2", + "http-body 1.0.1", "pin-project-lite", "tower", "tower-layer", @@ -2143,6 +2409,12 @@ dependencies = [ "serde", ] +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -2172,6 +2444,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + [[package]] name = "walkdir" version = "2.5.0" @@ -2640,12 +2918,6 @@ dependencies = [ "rand_core 0.9.5", ] -[[package]] -name = "xml" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "636f85e5ca6488e96401b61eb7de54f4e44755c988af0f52cf90230c312a1a89" - [[package]] name = "yoke" version = "0.8.2" diff --git a/fluxer_media_proxy/fuzz/fuzz_targets/signing_external_path.rs b/fluxer_media_proxy/fuzz/fuzz_targets/signing_external_path.rs index 0d2d0f527..3d4ee1676 100644 --- a/fluxer_media_proxy/fuzz/fuzz_targets/signing_external_path.rs +++ b/fluxer_media_proxy/fuzz/fuzz_targets/signing_external_path.rs @@ -7,11 +7,12 @@ use libfuzzer_sys::fuzz_target; fuzz_target!(|data: &[u8]| { if let Ok(text) = std::str::from_utf8(data) { - let path = external_path::build_external_media_proxy_path(text); - let _ = external_path::reconstruct_original_url(&path); - let sig = signing::create_signature(&path, b"fuzz-secret"); - let _ = signing::verify_signature(&path, &sig, b"fuzz-secret"); - let _ = signing::verify_signature(text, &sig, b"other-secret"); + if let Ok(path) = external_path::build_external_media_proxy_path(text) { + let _ = external_path::reconstruct_original_url(&path); + let sig = signing::create_signature(&path, b"fuzz-secret"); + let _ = signing::verify_signature(&path, &sig, b"fuzz-secret"); + let _ = signing::verify_signature(text, &sig, b"other-secret"); + } let _ = external_path::reconstruct_original_url(text); let _ = external_path::percent_decode(text, true); let _ = external_path::percent_decode(text, false); diff --git a/fluxer_media_proxy/src/vips_shim.c b/fluxer_media_proxy/src/vips_shim.c index ad34338d3..69df4a0c8 100644 --- a/fluxer_media_proxy/src/vips_shim.c +++ b/fluxer_media_proxy/src/vips_shim.c @@ -1946,17 +1946,6 @@ static inline float fluxer_pq_oetf(float l) { return powf(num / den, m2); } -static inline float fluxer_hlg_oetf_display(float dl) { - if (dl <= 0.0f) return 0.0f; - if (dl >= 1.0f) dl = 1.0f; - float scene = powf(dl, 1.0f / 1.2f); - if (scene <= 1.0f / 12.0f) return sqrtf(3.0f * scene); - const float a = 0.17883277f; - const float b = 0.28466892f; - const float c = 0.55991073f; - return a * logf(12.0f * scene - b) + c; -} - static inline float fluxer_srgb_oetf(float e) { if (e <= 0.0f) return 0.0f; if (e >= 1.0f) return 1.0f; diff --git a/fluxer_messages/Cargo.toml b/fluxer_messages/Cargo.toml index 662d1ee4f..2c08fd7ac 100644 --- a/fluxer_messages/Cargo.toml +++ b/fluxer_messages/Cargo.toml @@ -3,10 +3,11 @@ name = "fluxer-messages" version = "0.1.0" edition.workspace = true license.workspace = true +publish = false [dependencies] fluxer_common = { path = "../fluxer_common" } -anyhow = "1.0.102" +anyhow = "1.0.104" base64 = "0.22.1" chrono = { version = "0.4.45", default-features = false, features = ["serde"] } fluxer-svc = { path = "../fluxer_svc" } diff --git a/fluxer_messages/src/shard_impl.rs b/fluxer_messages/src/shard_impl.rs index d853d2eea..7bfe1a52c 100644 --- a/fluxer_messages/src/shard_impl.rs +++ b/fluxer_messages/src/shard_impl.rs @@ -90,7 +90,7 @@ pub struct MessagesShard { enum MessagesStorage { Postgres(PostgresMessagesStorage), #[cfg(feature = "scylla")] - Scylla(ScyllaMessagesStorage), + Scylla(Box), } #[derive(Clone)] @@ -339,7 +339,7 @@ impl MessagesShard { .await?; Ok(Self { - storage: MessagesStorage::Scylla(ScyllaMessagesStorage { + storage: MessagesStorage::Scylla(Box::new(ScyllaMessagesStorage { db, stmt_get_by_id, stmt_get_latest, @@ -352,7 +352,7 @@ impl MessagesShard { stmt_get_attachment_decay, stmt_get_attachment_decay_many, stmt_delete_message, - }), + })), transport, }) } diff --git a/fluxer_snowflakes/Cargo.toml b/fluxer_snowflakes/Cargo.toml index ac4d34343..c6b4447d6 100644 --- a/fluxer_snowflakes/Cargo.toml +++ b/fluxer_snowflakes/Cargo.toml @@ -3,9 +3,10 @@ name = "fluxer-snowflakes" version = "0.1.0" edition.workspace = true license.workspace = true +publish = false [dependencies] -anyhow = "1.0.102" +anyhow = "1.0.104" fluxer-svc = { path = "../fluxer_svc", default-features = false } rmp-serde = "1.3" serde = { version = "1.0.228", features = ["derive"] } diff --git a/fluxer_svc/Cargo.toml b/fluxer_svc/Cargo.toml index d50a7fc34..be261ae71 100644 --- a/fluxer_svc/Cargo.toml +++ b/fluxer_svc/Cargo.toml @@ -5,7 +5,7 @@ edition.workspace = true license.workspace = true [dependencies] -anyhow = "1.0.102" +anyhow = "1.0.104" async-nats = "0.49" async-trait = "0.1" axum = { version = "0.8.9", default-features = false, features = ["http1", "tokio"] } @@ -17,7 +17,6 @@ libc = "0.2" moka = { version = "0.12.15", features = ["future"] } rmp-serde = "1.3" rustls = { version = "0.23", features = ["ring"] } -rustls-pemfile = "2.2" scylla = { version = "1.6.0", features = ["chrono-04"], optional = true } serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.150" diff --git a/fluxer_svc/src/postgres.rs b/fluxer_svc/src/postgres.rs index decc0908d..478e1fb91 100644 --- a/fluxer_svc/src/postgres.rs +++ b/fluxer_svc/src/postgres.rs @@ -4,9 +4,11 @@ use crate::config::ServiceConfig; use anyhow::Context; use chrono::{DateTime, Utc}; use deadpool_postgres::{Client, Manager, Pool, Runtime, Transaction}; -use rustls::RootCertStore; +use rustls::{ + RootCertStore, + pki_types::{CertificateDer, pem::PemObject}, +}; use serde_json::{Map, Number, Value}; -use std::io::Cursor; use std::str::FromStr; use tokio_postgres::{Config as PgConfig, Row, Statement, config::SslMode, types::ToSql}; use tokio_postgres_rustls::MakeRustlsConnect; @@ -99,9 +101,8 @@ fn build_tls_connector(ca_pem: Option<&str>) -> anyhow::Result = {}): MasterConfig { return { @@ -55,12 +55,23 @@ describe('extractKVClientConfig', () => { }); describe('extractBuildInfoConfig', () => { - test('returns releaseChannel and buildVersion', () => { - const result = extractBuildInfoConfig(); - expect(result).toHaveProperty('releaseChannel'); - expect(result).toHaveProperty('buildVersion'); - expect(typeof result.releaseChannel).toBe('string'); - expect(typeof result.buildVersion).toBe('string'); + test('returns fallback build metadata and reports the missing environment variables', () => { + vi.stubEnv('BUILD_VERSION', undefined); + vi.stubEnv('RELEASE_CHANNEL', undefined); + const stdout = vi.spyOn(process.stdout, 'write').mockImplementation(() => true); + try { + const result = extractBuildInfoConfig(); + expect(result).toEqual({ + releaseChannel: 'stable', + buildVersion: 'dev', + }); + expect(stdout).toHaveBeenCalledExactlyOnceWith( + '[build-metadata] Using fallback values for: BUILD_VERSION, RELEASE_CHANNEL. This indicates missing env vars in CI/production.\n', + ); + } finally { + stdout.mockRestore(); + vi.unstubAllEnvs(); + } }); }); diff --git a/packages/errors/src/__tests__/AppErrorHandlers.test.ts b/packages/errors/src/__tests__/AppErrorHandlers.test.ts index e718ac438..c222ebfc3 100644 --- a/packages/errors/src/__tests__/AppErrorHandlers.test.ts +++ b/packages/errors/src/__tests__/AppErrorHandlers.test.ts @@ -6,8 +6,9 @@ import {BadRequestError} from '@fluxer/errors/src/domains/core/BadRequestError'; import {AppErrorHandler} from '@fluxer/errors/src/domains/core/ErrorHandlers'; import {getErrorMessage} from '@fluxer/errors/src/i18n/ErrorI18n'; import type {BaseHonoEnv} from '@fluxer/hono_types/src/HonoTypes'; +import {Logger} from '@fluxer/logger/src/Logger'; import {Hono} from 'hono'; -import {describe, expect, it} from 'vitest'; +import {describe, expect, it, vi} from 'vitest'; interface ErrorResponse { code: string; @@ -22,19 +23,30 @@ function createApp(): Hono { describe('AppErrorHandler i18n fallbacks', () => { it('localizes unexpected errors from Accept-Language when middleware locale is missing', async () => { + const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); + const error = new Error('boom'); const app = createApp(); app.get('/test', () => { - throw new Error('boom'); + throw error; }); - const response = await app.request('/test', { - headers: { - 'accept-language': 'fr-CA,fr;q=0.9,en;q=0.8', - }, - }); - expect(response.status).toBe(500); - const body = (await response.json()) as ErrorResponse; - expect(body.code).toBe(APIErrorCodes.INTERNAL_SERVER_ERROR); - expect(body.message).toBe('Erreur interne du serveur.'); + try { + const response = await app.request('/test', { + headers: { + 'accept-language': 'fr-CA,fr;q=0.9,en;q=0.8', + }, + }); + expect(response.status).toBe(500); + const body = (await response.json()) as ErrorResponse; + expect(body.code).toBe(APIErrorCodes.INTERNAL_SERVER_ERROR); + expect(body.message).toBe('Erreur interne du serveur.'); + expect(errorLoggerSpy).toHaveBeenCalledTimes(1); + expect(errorLoggerSpy).toHaveBeenCalledWith( + {err: error, status: 500, method: 'GET', path: '/test', requestId: undefined}, + 'Unhandled error occurred', + ); + } finally { + errorLoggerSpy.mockRestore(); + } }); it('localizes FluxerError responses without errorI18nService in context', async () => { const app = createApp(); @@ -52,32 +64,54 @@ describe('AppErrorHandler i18n fallbacks', () => { expect(body.message).toBe(getErrorMessage('http.bad_request', 'fr')); }); it('prefers requestLocale context over Accept-Language header', async () => { + const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); + const error = new Error('boom'); const app = createApp(); app.use('*', async (ctx, next) => { ctx.set('requestLocale', Locales.EN_US); await next(); }); app.get('/test', () => { - throw new Error('boom'); + throw error; }); - const response = await app.request('/test', { - headers: { - 'accept-language': 'fr', - }, - }); - expect(response.status).toBe(500); - const body = (await response.json()) as ErrorResponse; - expect(body.code).toBe(APIErrorCodes.INTERNAL_SERVER_ERROR); - expect(body.message).toBe('Internal server error.'); + try { + const response = await app.request('/test', { + headers: { + 'accept-language': 'fr', + }, + }); + expect(response.status).toBe(500); + const body = (await response.json()) as ErrorResponse; + expect(body.code).toBe(APIErrorCodes.INTERNAL_SERVER_ERROR); + expect(body.message).toBe('Internal server error.'); + expect(errorLoggerSpy).toHaveBeenCalledTimes(1); + expect(errorLoggerSpy).toHaveBeenCalledWith( + {err: error, status: 500, method: 'GET', path: '/test', requestId: undefined}, + 'Unhandled error occurred', + ); + } finally { + errorLoggerSpy.mockRestore(); + } }); it('returns 500 for unexpected errors with request metadata', async () => { + const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); + const error = new Error('boom'); const app = createApp(); app.get('/test', () => { - throw new Error('boom'); + throw error; }); - const response = await app.request('/test'); - expect(response.status).toBe(500); - const body = (await response.json()) as ErrorResponse; - expect(body.code).toBe(APIErrorCodes.INTERNAL_SERVER_ERROR); + try { + const response = await app.request('/test'); + expect(response.status).toBe(500); + const body = (await response.json()) as ErrorResponse; + expect(body.code).toBe(APIErrorCodes.INTERNAL_SERVER_ERROR); + expect(errorLoggerSpy).toHaveBeenCalledTimes(1); + expect(errorLoggerSpy).toHaveBeenCalledWith( + {err: error, status: 500, method: 'GET', path: '/test', requestId: undefined}, + 'Unhandled error occurred', + ); + } finally { + errorLoggerSpy.mockRestore(); + } }); }); diff --git a/packages/hono/src/middleware/tests/MiddlewareStack.test.ts b/packages/hono/src/middleware/tests/MiddlewareStack.test.ts index d17655f84..e0928df91 100644 --- a/packages/hono/src/middleware/tests/MiddlewareStack.test.ts +++ b/packages/hono/src/middleware/tests/MiddlewareStack.test.ts @@ -188,15 +188,23 @@ describe('applyMiddlewareStack', () => { expect(response.headers.get('Cache-Control')).toBeNull(); }); test('skips errorHandler when skipErrorHandler is true', async () => { + const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + const error = new Error('Test error'); const app = new Hono(); applyMiddlewareStack(app, { skipErrorHandler: true, }); app.get('/test', () => { - throw new Error('Test error'); + throw error; }); - const response = await app.request('/test'); - expect(response.status).toBe(500); + try { + const response = await app.request('/test'); + expect(response.status).toBe(500); + expect(consoleErrorSpy).toHaveBeenCalledTimes(1); + expect(consoleErrorSpy).toHaveBeenCalledWith(error); + } finally { + consoleErrorSpy.mockRestore(); + } }); test('applies custom middleware', async () => { const customMiddleware = vi.fn().mockImplementation(async (_c, next) => { diff --git a/patches/@hono__node-server@1.19.17.patch b/patches/@hono__node-server@1.19.17.patch new file mode 100644 index 000000000..eee9b4335 --- /dev/null +++ b/patches/@hono__node-server@1.19.17.patch @@ -0,0 +1,216 @@ +diff --git a/dist/index.js b/dist/index.js +index 35f72a956727fde717972442a9ad9cd079717d5f..ede82c2fc2859b4cd05acfa12be11d9b9bbea798 100644 +--- a/dist/index.js ++++ b/dist/index.js +@@ -486,7 +486,8 @@ var responseViaCache = async (res, outgoing) => { + } + } + } +- if (!hasContentLength) { ++ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); ++ if (!hasContentLength && hasContentRange) { + if (typeof body === "string") { + header["Content-Length"] = Buffer.byteLength(body); + } else if (body instanceof Uint8Array) { +@@ -560,7 +561,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { + break; + } + } +- if (done && !("content-length" in resHeaderRecord)) { ++ if ( ++ done && ++ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ++ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) ++ ) { + resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); + } + } +diff --git a/dist/index.mjs b/dist/index.mjs +index 4a699b73eb1ce21581aa5dd426e1870cb0723070..65729d6d8e2ab85de60b00062698a6b4618d9e50 100644 +--- a/dist/index.mjs ++++ b/dist/index.mjs +@@ -447,7 +447,8 @@ var responseViaCache = async (res, outgoing) => { + } + } + } +- if (!hasContentLength) { ++ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); ++ if (!hasContentLength && hasContentRange) { + if (typeof body === "string") { + header["Content-Length"] = Buffer.byteLength(body); + } else if (body instanceof Uint8Array) { +@@ -521,7 +522,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { + break; + } + } +- if (done && !("content-length" in resHeaderRecord)) { ++ if ( ++ done && ++ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ++ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) ++ ) { + resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); + } + } +diff --git a/dist/listener.js b/dist/listener.js +index ca27851e8346dedfbf16e3e2e4b9dababbe43c9a..7f422a28a9b3e79d22e143114932b48eb55bda0f 100644 +--- a/dist/listener.js ++++ b/dist/listener.js +@@ -478,7 +478,8 @@ var responseViaCache = async (res, outgoing) => { + } + } + } +- if (!hasContentLength) { ++ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); ++ if (!hasContentLength && hasContentRange) { + if (typeof body === "string") { + header["Content-Length"] = Buffer.byteLength(body); + } else if (body instanceof Uint8Array) { +@@ -552,7 +553,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { + break; + } + } +- if (done && !("content-length" in resHeaderRecord)) { ++ if ( ++ done && ++ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ++ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) ++ ) { + resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); + } + } +diff --git a/dist/listener.mjs b/dist/listener.mjs +index e9c75a9f94dd3465b6297aff638f546431a20157..03e0a4adafff5264804dcf4863dc609be55c5a5d 100644 +--- a/dist/listener.mjs ++++ b/dist/listener.mjs +@@ -444,7 +444,8 @@ var responseViaCache = async (res, outgoing) => { + } + } + } +- if (!hasContentLength) { ++ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); ++ if (!hasContentLength && hasContentRange) { + if (typeof body === "string") { + header["Content-Length"] = Buffer.byteLength(body); + } else if (body instanceof Uint8Array) { +@@ -518,7 +519,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { + break; + } + } +- if (done && !("content-length" in resHeaderRecord)) { ++ if ( ++ done && ++ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ++ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) ++ ) { + resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); + } + } +diff --git a/dist/server.js b/dist/server.js +index 2cebe018608110d8c2714b80070e409362bb357c..6ef93c11a75161162004387521e1eccaef4d3960 100644 +--- a/dist/server.js ++++ b/dist/server.js +@@ -482,7 +482,8 @@ var responseViaCache = async (res, outgoing) => { + } + } + } +- if (!hasContentLength) { ++ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); ++ if (!hasContentLength && hasContentRange) { + if (typeof body === "string") { + header["Content-Length"] = Buffer.byteLength(body); + } else if (body instanceof Uint8Array) { +@@ -556,7 +557,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { + break; + } + } +- if (done && !("content-length" in resHeaderRecord)) { ++ if ( ++ done && ++ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ++ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) ++ ) { + resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); + } + } +diff --git a/dist/server.mjs b/dist/server.mjs +index 252b2d9218ab6fa0280919b81b134367bf429f66..e69deb9ea98804014f295acbc98d729395a34c2f 100644 +--- a/dist/server.mjs ++++ b/dist/server.mjs +@@ -447,7 +447,8 @@ var responseViaCache = async (res, outgoing) => { + } + } + } +- if (!hasContentLength) { ++ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); ++ if (!hasContentLength && hasContentRange) { + if (typeof body === "string") { + header["Content-Length"] = Buffer.byteLength(body); + } else if (body instanceof Uint8Array) { +@@ -521,7 +522,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { + break; + } + } +- if (done && !("content-length" in resHeaderRecord)) { ++ if ( ++ done && ++ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ++ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) ++ ) { + resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); + } + } +diff --git a/dist/vercel.js b/dist/vercel.js +index cf8171b29548f7284587e9561e6a36290bcbb9cc..ec5831bd79d0093af0928aea4ed2f5afcda9cf80 100644 +--- a/dist/vercel.js ++++ b/dist/vercel.js +@@ -480,7 +480,8 @@ var responseViaCache = async (res, outgoing) => { + } + } + } +- if (!hasContentLength) { ++ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); ++ if (!hasContentLength && hasContentRange) { + if (typeof body === "string") { + header["Content-Length"] = Buffer.byteLength(body); + } else if (body instanceof Uint8Array) { +@@ -554,7 +555,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { + break; + } + } +- if (done && !("content-length" in resHeaderRecord)) { ++ if ( ++ done && ++ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ++ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) ++ ) { + resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); + } + } +diff --git a/dist/vercel.mjs b/dist/vercel.mjs +index aafdd30bb6d497c0277bd03864dc3d4de0c5e283..5762941816f7f7b25860e3329ac6947b2288b173 100644 +--- a/dist/vercel.mjs ++++ b/dist/vercel.mjs +@@ -444,7 +444,8 @@ var responseViaCache = async (res, outgoing) => { + } + } + } +- if (!hasContentLength) { ++ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); ++ if (!hasContentLength && hasContentRange) { + if (typeof body === "string") { + header["Content-Length"] = Buffer.byteLength(body); + } else if (body instanceof Uint8Array) { +@@ -518,7 +519,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { + break; + } + } +- if (done && !("content-length" in resHeaderRecord)) { ++ if ( ++ done && ++ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ++ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) ++ ) { + resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); + } + } diff --git a/patches/@hono__node-server@1.19.9.patch b/patches/@hono__node-server@1.19.9.patch deleted file mode 100644 index 13c6546ca..000000000 --- a/patches/@hono__node-server@1.19.9.patch +++ /dev/null @@ -1,232 +0,0 @@ -diff --git a/dist/index.js b/dist/index.js -index 5b00ade9d6e2916d42ea26cbb5a03d74c35778be..a4ab459fe66980cd88a132c1a35792d3d4d3b76f 100644 ---- a/dist/index.js -+++ b/dist/index.js -@@ -403,11 +403,12 @@ var responseViaCache = async (res, outgoing) => { - if (header instanceof Headers) { - header = buildOutgoingHttpHeaders(header); - } -- if (typeof body === "string") { -+ const hasContentRange = "content-range" in header || "Content-Range" in header; -+ if (!("content-length" in header || "Content-Length" in header) && hasContentRange && typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); -- } else if (body instanceof Uint8Array) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Uint8Array) { - header["Content-Length"] = body.byteLength; -- } else if (body instanceof Blob) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Blob) { - header["Content-Length"] = body.size; - } - outgoing.writeHead(status, header); -@@ -475,7 +476,7 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if (done && !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord)) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/index.mjs b/dist/index.mjs -index b30aec91c322070769e62128b41dd23c37e86c71..59dee1e1e4ddc5b36fefb19035cd92167ecba3fd 100644 ---- a/dist/index.mjs -+++ b/dist/index.mjs -@@ -364,11 +364,12 @@ var responseViaCache = async (res, outgoing) => { - if (header instanceof Headers) { - header = buildOutgoingHttpHeaders(header); - } -- if (typeof body === "string") { -+ const hasContentRange = "content-range" in header || "Content-Range" in header; -+ if (!("content-length" in header || "Content-Length" in header) && hasContentRange && typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); -- } else if (body instanceof Uint8Array) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Uint8Array) { - header["Content-Length"] = body.byteLength; -- } else if (body instanceof Blob) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Blob) { - header["Content-Length"] = body.size; - } - outgoing.writeHead(status, header); -@@ -436,7 +437,7 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if (done && !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord)) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/listener.js b/dist/listener.js -index cb081d2ac4205afce10e005d93baf0d8641f62f5..da390fa1dcf5c19c3ba714bf02c8fa87119dc73b 100644 ---- a/dist/listener.js -+++ b/dist/listener.js -@@ -395,11 +395,12 @@ var responseViaCache = async (res, outgoing) => { - if (header instanceof Headers) { - header = buildOutgoingHttpHeaders(header); - } -- if (typeof body === "string") { -+ const hasContentRange = "content-range" in header || "Content-Range" in header; -+ if (!("content-length" in header || "Content-Length" in header) && hasContentRange && typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); -- } else if (body instanceof Uint8Array) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Uint8Array) { - header["Content-Length"] = body.byteLength; -- } else if (body instanceof Blob) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Blob) { - header["Content-Length"] = body.size; - } - outgoing.writeHead(status, header); -@@ -467,7 +468,7 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if (done && !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord)) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/listener.mjs b/dist/listener.mjs -index d6942d693f700b693340a8d7ec076e9b21003a48..eeea2223c412214159ff2cd877eaa238cf14a888 100644 ---- a/dist/listener.mjs -+++ b/dist/listener.mjs -@@ -361,11 +361,12 @@ var responseViaCache = async (res, outgoing) => { - if (header instanceof Headers) { - header = buildOutgoingHttpHeaders(header); - } -- if (typeof body === "string") { -+ const hasContentRange = "content-range" in header || "Content-Range" in header; -+ if (!("content-length" in header || "Content-Length" in header) && hasContentRange && typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); -- } else if (body instanceof Uint8Array) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Uint8Array) { - header["Content-Length"] = body.byteLength; -- } else if (body instanceof Blob) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Blob) { - header["Content-Length"] = body.size; - } - outgoing.writeHead(status, header); -@@ -433,7 +434,7 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if (done && !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord)) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/server.js b/dist/server.js -index bec6481fe78d0d90967d2f7081150a4302ff1123..a943ad3c37e8b18c1b8a03ebbbe2e6f1d2b19a13 100644 ---- a/dist/server.js -+++ b/dist/server.js -@@ -399,11 +399,12 @@ var responseViaCache = async (res, outgoing) => { - if (header instanceof Headers) { - header = buildOutgoingHttpHeaders(header); - } -- if (typeof body === "string") { -+ const hasContentRange = "content-range" in header || "Content-Range" in header; -+ if (!("content-length" in header || "Content-Length" in header) && hasContentRange && typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); -- } else if (body instanceof Uint8Array) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Uint8Array) { - header["Content-Length"] = body.byteLength; -- } else if (body instanceof Blob) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Blob) { - header["Content-Length"] = body.size; - } - outgoing.writeHead(status, header); -@@ -471,7 +472,7 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if (done && !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord)) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/server.mjs b/dist/server.mjs -index c24137822067b1725df11983c780bcab544b2af4..e64d1d192edbcdb4280c0b910f4c0d28740f5b1f 100644 ---- a/dist/server.mjs -+++ b/dist/server.mjs -@@ -364,11 +364,12 @@ var responseViaCache = async (res, outgoing) => { - if (header instanceof Headers) { - header = buildOutgoingHttpHeaders(header); - } -- if (typeof body === "string") { -+ const hasContentRange = "content-range" in header || "Content-Range" in header; -+ if (!("content-length" in header || "Content-Length" in header) && hasContentRange && typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); -- } else if (body instanceof Uint8Array) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Uint8Array) { - header["Content-Length"] = body.byteLength; -- } else if (body instanceof Blob) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Blob) { - header["Content-Length"] = body.size; - } - outgoing.writeHead(status, header); -@@ -436,7 +437,7 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if (done && !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord)) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/vercel.js b/dist/vercel.js -index 63def623e8a86a0dd5bbea8cecb484407667396d..57bcf2cc7c6f8f642b07c9c72f4dea56bfcd1b0a 100644 ---- a/dist/vercel.js -+++ b/dist/vercel.js -@@ -397,11 +397,12 @@ var responseViaCache = async (res, outgoing) => { - if (header instanceof Headers) { - header = buildOutgoingHttpHeaders(header); - } -- if (typeof body === "string") { -+ const hasContentRange = "content-range" in header || "Content-Range" in header; -+ if (!("content-length" in header || "Content-Length" in header) && hasContentRange && typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); -- } else if (body instanceof Uint8Array) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Uint8Array) { - header["Content-Length"] = body.byteLength; -- } else if (body instanceof Blob) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Blob) { - header["Content-Length"] = body.size; - } - outgoing.writeHead(status, header); -@@ -469,7 +470,7 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if (done && !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord)) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/vercel.mjs b/dist/vercel.mjs -index 334c1c85ab8dcd389a3e3892e0e3378c9bdac87e..f5627c4f3473681dda9a6d9488145ff3f7d8c4b9 100644 ---- a/dist/vercel.mjs -+++ b/dist/vercel.mjs -@@ -361,11 +361,12 @@ var responseViaCache = async (res, outgoing) => { - if (header instanceof Headers) { - header = buildOutgoingHttpHeaders(header); - } -- if (typeof body === "string") { -+ const hasContentRange = "content-range" in header || "Content-Range" in header; -+ if (!("content-length" in header || "Content-Length" in header) && hasContentRange && typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); -- } else if (body instanceof Uint8Array) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Uint8Array) { - header["Content-Length"] = body.byteLength; -- } else if (body instanceof Blob) { -+ } else if (!("content-length" in header || "Content-Length" in header) && hasContentRange && body instanceof Blob) { - header["Content-Length"] = body.size; - } - outgoing.writeHead(status, header); -@@ -433,7 +434,7 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if (done && !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord)) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } diff --git a/patches/emscripten-wasm-loader@3.0.3.patch b/patches/emscripten-wasm-loader@3.0.3.patch new file mode 100644 index 000000000..e2570caba --- /dev/null +++ b/patches/emscripten-wasm-loader@3.0.3.patch @@ -0,0 +1,32 @@ +diff --git a/dist/cjs/path/mountBuffer.js b/dist/cjs/path/mountBuffer.js +index 86d8d65f384c98f50e78b117b6c1d4354e76320d..14944bd0cc299c69d4727df383a3a1ee7afb744a 100644 +--- a/dist/cjs/path/mountBuffer.js ++++ b/dist/cjs/path/mountBuffer.js +@@ -1,6 +1,6 @@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); +-const nanoid = require("nanoid"); ++const { nanoid } = require("nanoid"); + const logger_1 = require("../util/logger"); + const isMounted_1 = require("./isMounted"); + /** +diff --git a/dist/esm/path/mountBuffer.js b/dist/esm/path/mountBuffer.js +index a494e92439fa467745f010df220b3b131d0ce868..1f9926436c095b9f0e82c0893ad535735a16279f 100644 +--- a/dist/esm/path/mountBuffer.js ++++ b/dist/esm/path/mountBuffer.js +@@ -1,4 +1,4 @@ +-import * as nanoid from 'nanoid'; ++import { nanoid } from 'nanoid'; + import { log } from '../util/logger'; + import { isMounted } from './isMounted'; + /** +diff --git a/src/path/mountBuffer.ts b/src/path/mountBuffer.ts +index 2504332d11ac3eb7d1616da4e1986ec85ef8350a..4f3ff591a3aca3de340ae4854b55952f8874b150 100644 +--- a/src/path/mountBuffer.ts ++++ b/src/path/mountBuffer.ts +@@ -1,4 +1,4 @@ +-import * as nanoid from 'nanoid'; ++import { nanoid } from 'nanoid'; + import { FS } from '../BaseAsmModule'; + import { log } from '../util/logger'; + import { isMounted } from './isMounted'; diff --git a/patches/hunspell-asm@4.0.2.patch b/patches/hunspell-asm@4.0.2.patch new file mode 100644 index 000000000..a456d2bfd --- /dev/null +++ b/patches/hunspell-asm@4.0.2.patch @@ -0,0 +1,35 @@ +diff --git a/dist/cjs/hunspellLoader.js b/dist/cjs/hunspellLoader.js +index 1d22158374fc508bf3e5a5ea4c352962da33557e..70d5f5e8f69792b4b4af3ef526aaf5e3c04a6baf 100644 +--- a/dist/cjs/hunspellLoader.js ++++ b/dist/cjs/hunspellLoader.js +@@ -1,7 +1,7 @@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const emscripten_wasm_loader_1 = require("emscripten-wasm-loader"); +-const nanoid = require("nanoid"); ++const { nanoid } = require("nanoid"); + const logger_1 = require("./util/logger"); + const wrapHunspellInterface_1 = require("./wrapHunspellInterface"); + /** +diff --git a/dist/esm/hunspellLoader.js b/dist/esm/hunspellLoader.js +index 9673dcc391081c8a28ce8d81e3baf01309f52c33..9d0149211e5ef85b4b237e59f503de6a91133b67 100644 +--- a/dist/esm/hunspellLoader.js ++++ b/dist/esm/hunspellLoader.js +@@ -1,5 +1,5 @@ + import { mountBuffer, unmount } from 'emscripten-wasm-loader'; +-import * as nanoid from 'nanoid'; ++import { nanoid } from 'nanoid'; + import { log } from './util/logger'; + import { wrapHunspellInterface } from './wrapHunspellInterface'; + /** +diff --git a/src/hunspellLoader.ts b/src/hunspellLoader.ts +index 526bd375a270ad3fa9e453f0a034472e024e0143..55ee6d16ba3f5b00c548021bf8b4cebd67c34ca6 100644 +--- a/src/hunspellLoader.ts ++++ b/src/hunspellLoader.ts +@@ -1,5 +1,5 @@ + import { mountBuffer, unmount } from 'emscripten-wasm-loader'; +-import * as nanoid from 'nanoid'; ++import { nanoid } from 'nanoid'; + import { HunspellAsmModule } from './HunspellAsmModule'; + import { HunspellFactory } from './HunspellFactory'; + import { log } from './util/logger'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf3d59180..6f7f4f939 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,14 +13,14 @@ catalogs: specifier: 0.19.0 version: 0.19.0 '@aws-sdk/client-s3': - specifier: 3.996.0 - version: 3.996.0 + specifier: 3.1121.0 + version: 3.1121.0 '@aws-sdk/lib-storage': - specifier: 3.996.0 - version: 3.996.0 + specifier: 3.1121.0 + version: 3.1121.0 '@aws-sdk/s3-request-presigner': - specifier: 3.996.0 - version: 3.996.0 + specifier: 3.1121.0 + version: 3.1121.0 '@base-ui/react': specifier: 1.5.0 version: 1.5.0 @@ -46,8 +46,8 @@ catalogs: specifier: 2.0.2 version: 2.0.2 '@hono/node-server': - specifier: 1.19.9 - version: 1.19.9 + specifier: 1.19.17 + version: 1.19.17 '@lexical/history': specifier: 0.48.0 version: 0.48.0 @@ -139,8 +139,8 @@ catalogs: specifier: 7.0.0-dev.20260224.1 version: 7.0.0-dev.20260224.1 '@vitest/coverage-v8': - specifier: 4.0.18 - version: 4.0.18 + specifier: 4.1.11 + version: 4.1.11 '@vvo/tzdb': specifier: 6.198.0 version: 6.198.0 @@ -175,14 +175,14 @@ catalogs: specifier: 10.6.0 version: 10.6.0 esbuild: - specifier: 0.27.3 - version: 0.27.3 + specifier: 0.28.2 + version: 0.28.2 eventemitter3: specifier: 5.0.4 version: 5.0.4 fast-xml-parser: - specifier: 5.3.7 - version: 5.3.7 + specifier: 5.11.1 + version: 5.11.1 favico.js: specifier: 0.3.10 version: 0.3.10 @@ -193,8 +193,8 @@ catalogs: specifier: 0.5.1 version: 0.5.1 hono: - specifier: 4.12.2 - version: 4.12.2 + specifier: 4.13.5 + version: 4.13.5 html-entities: specifier: 2.6.0 version: 2.6.0 @@ -214,8 +214,8 @@ catalogs: specifier: 0.16.33 version: 0.16.33 knip: - specifier: 5.85.0 - version: 5.85.0 + specifier: 5.88.1 + version: 5.88.1 lexical: specifier: 0.48.0 version: 0.48.0 @@ -226,8 +226,8 @@ catalogs: specifier: 2.15.0 version: 2.15.0 lodash: - specifier: 4.17.23 - version: 4.17.23 + specifier: 4.18.1 + version: 4.18.1 lru-cache: specifier: 11.2.6 version: 11.2.6 @@ -262,8 +262,8 @@ catalogs: specifier: 2.29.3 version: 2.29.3 nodemailer: - specifier: 8.0.1 - version: 8.0.1 + specifier: 9.0.6 + version: 9.0.6 pg: specifier: 8.16.3 version: 8.16.3 @@ -274,8 +274,8 @@ catalogs: specifier: 13.1.3 version: 13.1.3 postcss: - specifier: 8.5.6 - version: 8.5.6 + specifier: 8.5.26 + version: 8.5.26 postcss-discard-comments: specifier: 7.0.5 version: 7.0.5 @@ -322,8 +322,8 @@ catalogs: specifier: 7.8.2 version: 7.8.2 sharp: - specifier: 0.34.5 - version: 0.34.5 + specifier: 0.35.4 + version: 0.35.4 stripe: specifier: 22.0.2 version: 22.0.2 @@ -361,20 +361,23 @@ catalogs: specifier: 10.1.0 version: 10.1.0 valibot: - specifier: 1.2.0 - version: 1.2.0 + specifier: 1.4.2 + version: 1.4.2 validator: specifier: 13.15.26 version: 13.15.26 + vite: + specifier: 7.3.6 + version: 7.3.6 vite-tsconfig-paths: specifier: 6.1.1 version: 6.1.1 vitest: - specifier: 4.0.18 - version: 4.0.18 + specifier: 4.1.11 + version: 4.1.11 yaml: - specifier: 2.8.2 - version: 2.8.2 + specifier: 2.9.0 + version: 2.9.0 zod: specifier: 4.3.6 version: 4.3.6 @@ -384,15 +387,27 @@ overrides: '@lingui/swc-plugin': 5.11.0 '@rspack/cli': 1.7.6 '@rspack/core': 1.7.6 + '@rspack/dev-server@1.1.5>webpack-dev-server': 5.2.6 + cassandra-driver@4.8.0>adm-zip: 0.6.0 + emscripten-wasm-loader@3.0.3>nanoid: 3.3.18 + hunspell-asm@4.0.2>nanoid: 3.3.18 + qs@6.14.2: 6.16.0 semver: 7.7.4 + sockjs@0.3.24>uuid: 11.1.1 patchedDependencies: - '@hono/node-server@1.19.9': - hash: 8736af0d82dad75a667b7daed93f88c00065adc9a809d526353e290b150827ed - path: patches/@hono__node-server@1.19.9.patch + '@hono/node-server@1.19.17': + hash: 71b3d7e8aa963d17fd5b48a0bb317e3ae0f2415c079f76c745b6a3bd1ace6a14 + path: patches/@hono__node-server@1.19.17.patch '@phosphor-icons/react@2.1.10': hash: 9b0b481de857aa7a7525f023baea9da72be4574ff72825e39d959e6979d78eea path: patches/@phosphor-icons__react@2.1.10.patch + emscripten-wasm-loader@3.0.3: + hash: 65d0567cd2da382764aee3839187feb5284662c4a9f0b755f1e52163c5e36399 + path: patches/emscripten-wasm-loader@3.0.3.patch + hunspell-asm@4.0.2: + hash: 594ff55f398ab3a575ba1b4d090c4838a26e4251a2f1d65ba0f02d5b098d02ae + path: patches/hunspell-asm@4.0.2.patch importers: @@ -403,10 +418,13 @@ importers: version: 2.4.4 '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.0.18(@vitest/browser@4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18))(vitest@4.0.18) + version: 4.1.11(vitest@4.1.11) knip: specifier: 'catalog:' - version: 5.85.0(@types/node@25.3.0)(typescript@5.9.3) + version: 5.88.1(@types/node@25.3.0)(typescript@5.9.3) + vite: + specifier: 'catalog:' + version: 7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0) fluxer_admin: devDependencies: @@ -424,13 +442,13 @@ importers: version: 0.19.0 '@aws-sdk/client-s3': specifier: 'catalog:' - version: 3.996.0 + version: 3.1121.0 '@aws-sdk/lib-storage': specifier: 'catalog:' - version: 3.996.0(@aws-sdk/client-s3@3.996.0) + version: 3.1121.0(@aws-sdk/client-s3@3.1121.0) '@aws-sdk/s3-request-presigner': specifier: 'catalog:' - version: 3.996.0 + version: 3.1121.0 '@bluesky-social/jwk-jose': specifier: 'catalog:' version: 0.1.11 @@ -481,7 +499,7 @@ importers: version: link:../packages/snowflake '@hono/node-server': specifier: 'catalog:' - version: 1.19.9(patch_hash=8736af0d82dad75a667b7daed93f88c00065adc9a809d526353e290b150827ed)(hono@4.12.2) + version: 1.19.17(patch_hash=71b3d7e8aa963d17fd5b48a0bb317e3ae0f2415c079f76c745b6a3bd1ace6a14)(hono@4.13.5) '@messageformat/core': specifier: 'catalog:' version: 3.4.0 @@ -568,13 +586,13 @@ importers: version: 10.6.0 fast-xml-parser: specifier: 'catalog:' - version: 5.3.7 + version: 5.11.1 hi-base32: specifier: 'catalog:' version: 0.5.1 hono: specifier: 'catalog:' - version: 4.12.2 + version: 4.13.5 html-entities: specifier: 'catalog:' version: 2.6.0 @@ -595,7 +613,7 @@ importers: version: 2.15.0 lodash: specifier: 'catalog:' - version: 4.17.23 + version: 4.18.1 luxon: specifier: 'catalog:' version: 3.7.2 @@ -610,7 +628,7 @@ importers: version: 2.29.3 nodemailer: specifier: 'catalog:' - version: 8.0.1 + version: 9.0.6 pg: specifier: 'catalog:' version: 8.16.3 @@ -619,7 +637,7 @@ importers: version: 10.3.1 sharp: specifier: 'catalog:' - version: 0.34.5 + version: 0.35.4(@types/node@25.3.0) stripe: specifier: 'catalog:' version: 22.0.2(@types/node@25.3.0) @@ -656,16 +674,16 @@ importers: version: 7.0.0-dev.20260224.1 esbuild: specifier: 'catalog:' - version: 0.27.3 + version: 0.28.2 msw: specifier: 'catalog:' version: 2.12.10(@types/node@25.3.0)(typescript@5.9.3) vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) fluxer_api/pkgs/cache: dependencies: @@ -681,10 +699,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) fluxer_api/pkgs/captcha: dependencies: @@ -744,7 +762,7 @@ importers: version: 2.0.2 nodemailer: specifier: 'catalog:' - version: 8.0.1 + version: 9.0.6 devDependencies: '@types/node': specifier: 'catalog:' @@ -757,16 +775,16 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) fluxer_api/pkgs/geoip: dependencies: '@aws-sdk/client-s3': specifier: 'catalog:' - version: 3.996.0 + version: 3.1121.0 '@fluxer/geo_utils': specifier: workspace:* version: link:../../../packages/geo_utils @@ -810,10 +828,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) fluxer_api/pkgs/initialization: devDependencies: @@ -844,10 +862,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) fluxer_api/pkgs/locale: dependencies: @@ -863,10 +881,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) fluxer_api/pkgs/media_proxy_utils: dependencies: @@ -879,10 +897,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) fluxer_api/pkgs/mime_utils: dependencies: @@ -940,10 +958,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) fluxer_api/pkgs/sms: dependencies: @@ -965,10 +983,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) fluxer_api/pkgs/virus_scan: dependencies: @@ -1486,7 +1504,7 @@ importers: version: link:pkgs/livekit-client lodash: specifier: 'catalog:' - version: 4.17.23 + version: 4.18.1 lru-cache: specifier: 'catalog:' version: 11.2.6 @@ -1567,7 +1585,7 @@ importers: version: 10.1.0 valibot: specifier: 'catalog:' - version: 1.2.0(typescript@5.9.3) + version: 1.4.2(typescript@5.9.3) xstate: specifier: 5.31.1 version: 5.31.1 @@ -1616,28 +1634,28 @@ importers: version: 7.0.0-dev.20260224.1 autoprefixer: specifier: 'catalog:' - version: 10.4.24(postcss@8.5.6) + version: 10.4.24(postcss@8.5.26) esbuild: specifier: 'catalog:' - version: 0.27.3 + version: 0.28.2 happy-dom: - specifier: 20.7.0 - version: 20.7.0 + specifier: 20.12.0 + version: 20.12.0 postcss: specifier: 'catalog:' - version: 8.5.6 + version: 8.5.26 postcss-discard-comments: specifier: 'catalog:' - version: 7.0.5(postcss@8.5.6) + version: 7.0.5(postcss@8.5.26) postcss-loader: specifier: 'catalog:' - version: 8.2.1(@rspack/core@1.7.6(@swc/helpers@0.5.19))(postcss@8.5.6)(typescript@5.9.3) + version: 8.2.1(@rspack/core@1.7.6(@swc/helpers@0.5.19))(postcss@8.5.26)(typescript@5.9.3) postcss-preset-env: specifier: 'catalog:' - version: 11.2.0(postcss@8.5.6) + version: 11.2.0(postcss@8.5.26) sharp: specifier: 'catalog:' - version: 0.34.5 + version: 0.35.4(@types/node@25.3.0) tsx: specifier: 'catalog:' version: 4.21.0 @@ -1646,10 +1664,10 @@ importers: version: 0.9.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) fluxer_app/pkgs/list_utils: dependencies: @@ -1695,7 +1713,7 @@ importers: version: 2.15.0 vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) fluxer_app/pkgs/number_utils: dependencies: @@ -1716,7 +1734,7 @@ importers: version: 6.2.0 hunspell-asm: specifier: 4.0.2 - version: 4.0.2 + version: 4.0.2(patch_hash=594ff55f398ab3a575ba1b4d090c4838a26e4251a2f1d65ba0f02d5b098d02ae) update-electron-app: specifier: 3.1.2 version: 3.1.2 @@ -1734,8 +1752,11 @@ importers: specifier: 42.10.0 version: 42.10.0 electron-builder: - specifier: 26.9.0 - version: 26.9.0(electron-builder-squirrel-windows@26.9.0) + specifier: 26.15.3 + version: 26.15.3(electron-builder-squirrel-windows@26.15.3) + electron-builder-squirrel-windows: + specifier: 26.15.3 + version: 26.15.3(dmg-builder@26.15.3) esbuild: specifier: 0.27.2 version: 0.27.2 @@ -1823,13 +1844,13 @@ importers: version: 7.0.0-dev.20260224.1 '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.0.18(@vitest/browser@4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18))(vitest@4.0.18) + version: 4.1.11(vitest@4.1.11) vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) packages/constants: devDependencies: @@ -1838,10 +1859,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) packages/date_utils: dependencies: @@ -1878,7 +1899,7 @@ importers: version: link:../logger hono: specifier: 'catalog:' - version: 4.12.2 + version: 4.13.5 devDependencies: '@types/node': specifier: 'catalog:' @@ -1888,10 +1909,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) packages/geo_utils: dependencies: @@ -1907,10 +1928,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) packages/hono: dependencies: @@ -1925,10 +1946,10 @@ importers: version: link:../ip_utils '@hono/node-server': specifier: 'catalog:' - version: 1.19.9(patch_hash=8736af0d82dad75a667b7daed93f88c00065adc9a809d526353e290b150827ed)(hono@4.12.2) + version: 1.19.17(patch_hash=71b3d7e8aa963d17fd5b48a0bb317e3ae0f2415c079f76c745b6a3bd1ace6a14)(hono@4.13.5) hono: specifier: 'catalog:' - version: 4.12.2 + version: 4.13.5 devDependencies: '@types/node': specifier: 'catalog:' @@ -1938,10 +1959,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) packages/hono_types: devDependencies: @@ -1959,7 +1980,7 @@ importers: version: 5.1.1 yaml: specifier: 'catalog:' - version: 2.8.2 + version: 2.9.0 devDependencies: '@types/node': specifier: 'catalog:' @@ -1972,10 +1993,10 @@ importers: version: 4.21.0 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) packages/instance_bootstrap: dependencies: @@ -2000,13 +2021,13 @@ importers: version: 7.0.0-dev.20260224.1 '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.0.18(@vitest/browser@4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18))(vitest@4.0.18) + version: 4.1.11(vitest@4.1.11) vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) packages/limits: dependencies: @@ -2019,7 +2040,7 @@ importers: version: 7.0.0-dev.20260224.1 vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) packages/logger: dependencies: @@ -2038,10 +2059,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) packages/openapi: dependencies: @@ -2112,10 +2133,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.4.5)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.4.5)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) packages/snowflake: dependencies: @@ -2134,10 +2155,10 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) packages/voice_engine_v2: devDependencies: @@ -2149,16 +2170,13 @@ importers: version: 7.0.0-dev.20260224.1 vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) packages: - 7zip-bin@5.2.0: - resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} - '@acemir/cssom@0.9.31': resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} @@ -2577,13 +2595,17 @@ packages: resolution: {integrity: sha512-mt3LNEpFPLXNzQ02sCzvU5IQ2lGzjLYX5n/B1D8IPfPdKZM7OenJLLzspizObhpab0xwcPNG+XO1iuROKvyc8g==} engines: {node: '>=18'} - '@asamuzakjp/css-color@5.0.1': - resolution: {integrity: sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==} + '@asamuzakjp/css-color@5.1.11': + resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} '@asamuzakjp/dom-selector@6.8.1': resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} + '@asamuzakjp/generational-cache@1.0.1': + resolution: {integrity: sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} @@ -2640,199 +2662,112 @@ packages: '@atproto/xrpc@0.7.7': resolution: {integrity: sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA==} - '@aws-crypto/crc32@5.2.0': - resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/crc32c@5.2.0': - resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} - - '@aws-crypto/sha1-browser@5.2.0': - resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} - - '@aws-crypto/sha256-browser@5.2.0': - resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} - - '@aws-crypto/sha256-js@5.2.0': - resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/supports-web-crypto@5.2.0': - resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} - - '@aws-crypto/util@5.2.0': - resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - - '@aws-sdk/client-s3@3.996.0': - resolution: {integrity: sha512-BZsCeq8Sgqbm6xs8VfjyVVwhQZvxDR45P22dcbNNDFaGkkQ/TbJ5KxER19APR9aK+IC7l4KuLxInqeVab2DFfg==} + '@aws-sdk/checksums@3.1000.29': + resolution: {integrity: sha512-Dtu0gr4dnATZAPwEYbpCsG+MpLM7OAliy2gTepEFQwl1vZ6DL3QMH2FveMa3HLvPsOdhJsPRB3KtxVhph9T75A==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-sso@3.996.0': - resolution: {integrity: sha512-QzlZozTam0modnGanLjXBHbHC53mMxH/4XmoA9f6ZjPYaGlCcHPYLcslO6w2w68v+F3qN0kxVldUAcL/edtBBA==} + '@aws-sdk/client-s3@3.1121.0': + resolution: {integrity: sha512-hBnoqaVBeWdkgXcJElMXA2yUZWkBCBntu2qmN+tfqmzC+j4LzJC3ox8qIgS2WdMS1cb8UwyBogUVrkRXybNm0A==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.973.12': - resolution: {integrity: sha512-hFiezao0lCEddPhSQEF6vCu+TepUN3edKxWYbswMoH87XpUvHJmFVX5+zttj4qi33saGiuOaJciswWcN6YSA9g==} + '@aws-sdk/core@3.977.9': + resolution: {integrity: sha512-reqPFEQrZxDZpeGj4PFMepBeR5LGYHRqq/L0motTzgFkCRBA4rFdaVXDSLYyGHhxVz7sT2PDnPN9CluGSfgyJA==} engines: {node: '>=20.0.0'} - '@aws-sdk/crc64-nvme@3.972.0': - resolution: {integrity: sha512-ThlLhTqX68jvoIVv+pryOdb5coP1cX1/MaTbB9xkGDCbWbsqQcLqzPxuSoW1DCnAAIacmXCWpzUNOB9pv+xXQw==} + '@aws-sdk/credential-provider-env@3.972.70': + resolution: {integrity: sha512-H404B7dJl2mCrBqahDEYsanB0xhdDp6tXnXcTUnXmmpy2Q3J0Ho0bUajZ2jr/RdwzCyS59Gi8xXIFwPLGBl6Uw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.10': - resolution: {integrity: sha512-YTWjM78Wiqix0Jv/anbq7+COFOFIBBMLZ+JsLKGwbTZNJ2DG4JNBnLVJAWylPOHwurMws9157pqzU8ODrpBOow==} + '@aws-sdk/credential-provider-http@3.972.72': + resolution: {integrity: sha512-X98zYOrVOeuosCX+6ktf29FC2N2GHPLia7qv6mzPzTc+RPAuHWCDS++Z6JK7eGYqb/v6uaW7bAXaOvDBfol+0w==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.12': - resolution: {integrity: sha512-adDRE3iFrgJJ7XhRHkb6RdFDMrA5x64WAWxygI3F6wND+3v5qQ4Uks12vsnEZgduU/+JQBgFB6L4vfwUS+rpBQ==} + '@aws-sdk/credential-provider-ini@3.973.15': + resolution: {integrity: sha512-Rykg6s5ceBuynMOGWgoowO4N+27JfnqXAnVaSunZl0hOO1XodSrxGNz6sCEbnmS0lAfQZDKyb3fbr46gSuv6Sg==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.972.10': - resolution: {integrity: sha512-uAXUMfnQJxJ25qeiX4e3Z36NTm1XT7woajV8BXx2yAUDD4jF6kubqnLEcqtiPzHANxmhta2SXm5PbDwSdhThBw==} + '@aws-sdk/credential-provider-login@3.972.77': + resolution: {integrity: sha512-Jb59xfEISoN5mmbnA+HYqdtrSX3CgCtJoof+V5D8/TgUI56W63GEEd5Y58WijU3Ou6+WEgaLD1feVzaRXV5IDQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.10': - resolution: {integrity: sha512-7Me+/EkY3kQC1nehBjb9ryc558N+a8R4Dg3rSV3zpiB7iQtvXh4gU3rV14h/dIbn2/VkK9sh55YdXamSjfdb/Q==} + '@aws-sdk/credential-provider-node@3.972.81': + resolution: {integrity: sha512-Rml+WitoFvXmv6JZ18U/xGdGDGGvB/mOin0ya0lTnTrdC0Z1lrVxTYh7iNklZBcvcRMrs4DoEf6xy1KWyrLQQw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.11': - resolution: {integrity: sha512-maPmjL7nOT93a1QdSDzdF/qLbI+jit3oslKp7g+pTbASewkSYax7FwboETdKRxufPfCdrsRzMW2pIJ+QA8e+Bg==} + '@aws-sdk/credential-provider-process@3.972.70': + resolution: {integrity: sha512-2ry03fGRJr4sV3jI+ocjj5JqALnFD6ymM5KiNCDZMvq8bX2GSbE0vji4aM43TVCl2nXqqLRZaUxdq/KeWRAY4Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.10': - resolution: {integrity: sha512-tk/XxFhk37rKviArOIYbJ8crXiN3Mzn7Tb147jH51JTweNgUOwmqN+s027uqc3d8UeAyUcPUH8Bmfj86SzOhBQ==} + '@aws-sdk/credential-provider-sso@3.973.14': + resolution: {integrity: sha512-jkhg/8ocAAoc0RFyLMhCw+/zZh7gystQgd4F4hznNa8P4Cc501PQmxd+jGLiMHodPJ+7Zv/3znM62gZojyasmA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.972.10': - resolution: {integrity: sha512-tIz/O0yV1s77/FjMTWvvzU2vsztap2POlbetheOyRXq+E3PQtLOzCYopasXP+aeO1oerw3PFd9eycLbiwpgZZA==} + '@aws-sdk/credential-provider-web-identity@3.972.76': + resolution: {integrity: sha512-d3AGyVu759PGr35mEB2s22xxlNEA5rpdxtSPJthfPFJvoQ8dt357iVPECqWfUxXp1toJAvKmbtcIYVGigaGsCA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.10': - resolution: {integrity: sha512-HFlIVx8mm+Au7hkO7Hq/ZkPomjTt26iRj8uWZqEE1cJWMZ2NKvieNiT1ngzWt60Bc2uD51LqQUqiwr5JDgS4iQ==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/lib-storage@3.996.0': - resolution: {integrity: sha512-on3PY2dunK6eMeVjkOVAlJtBDXvsHDXVi8nlhvBDdrS5cXc8yVjs72SmbV5rqml7V47Fikv95pdKT+WF9X9FYg==} + '@aws-sdk/lib-storage@3.1121.0': + resolution: {integrity: sha512-sx86QqM0/HjKNCS5eQGcaP9Q8GKg3FtCExO/6FfGyw00JNUsFJPmEKNCJIkWY7OmKS9jIOuJe/DtAgfr/+G/bQ==} engines: {node: '>=20.0.0'} peerDependencies: - '@aws-sdk/client-s3': ^3.996.0 + '@aws-sdk/client-s3': ^3.1121.0 - '@aws-sdk/middleware-bucket-endpoint@3.972.3': - resolution: {integrity: sha512-fmbgWYirF67YF1GfD7cg5N6HHQ96EyRNx/rDIrTF277/zTWVuPI2qS/ZHgofwR1NZPe/NWvoppflQY01LrbVLg==} + '@aws-sdk/middleware-sdk-s3@3.972.75': + resolution: {integrity: sha512-wMIsNumRVKaNMKhvU/s9VrdEwE8S6gSzXp4RygFG5BEMnGkkXf8cjh8zf7cKJBpUDpqTWqwbz5isEgp9rH6Lng==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-expect-continue@3.972.3': - resolution: {integrity: sha512-4msC33RZsXQpUKR5QR4HnvBSNCPLGHmB55oDiROqqgyOc+TOfVu2xgi5goA7ms6MdZLeEh2905UfWMnMMF4mRg==} + '@aws-sdk/nested-clients@3.997.44': + resolution: {integrity: sha512-NhEgryjlBF9w38ZXqGymQV28IhkYa1mKhlbYnqIis57AYwWGVYfUPgg/qC2rLRqOUfblxx++irvju10kVTa8Vw==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-flexible-checksums@3.972.10': - resolution: {integrity: sha512-7e6NIL+lay71PdKmkCeSJPQ6xkmc170Kc1wynoulh9iBEpu2jnVIL4zJ95pjvOg+njS6Og7Bmw2fiKCuXzPGrw==} + '@aws-sdk/s3-request-presigner@3.1121.0': + resolution: {integrity: sha512-uudb+S0RTbdmBd2ChRCnDbjK1lbZsBwNtFeCnC1lusWUYpZJ12cYzf7E0HhJzhPV4W83RQgxFNDAh2ZNhuGSJw==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-host-header@3.972.3': - resolution: {integrity: sha512-aknPTb2M+G3s+0qLCx4Li/qGZH8IIYjugHMv15JTYMe6mgZO8VBpYgeGYsNMGCqCZOcWzuf900jFBG5bopfzmA==} + '@aws-sdk/signature-v4-multi-region@3.996.46': + resolution: {integrity: sha512-L+2xZTye/2T96f3lwCws0Zw6GG2JHZW9e8FpVgGBeeExSKyeoZ6CWRpBml/7DNiK/O26jrgPM9F+Ay8VkgzUWQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-location-constraint@3.972.3': - resolution: {integrity: sha512-nIg64CVrsXp67vbK0U1/Is8rik3huS3QkRHn2DRDx4NldrEFMgdkZGI/+cZMKD9k4YOS110Dfu21KZLHrFA/1g==} + '@aws-sdk/token-providers@3.1116.0': + resolution: {integrity: sha512-ygIivKqh8aHzNkucOCXHyIBgBpLPfrSI0mCqXF+vLBsPTUKqj0VSqAY0GFPe7lQl4HntjOcQ+KSyS7oUV2C54Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-logger@3.972.3': - resolution: {integrity: sha512-Ftg09xNNRqaz9QNzlfdQWfpqMCJbsQdnZVJP55jfhbKi1+FTWxGuvfPoBhDHIovqWKjqbuiew3HuhxbJ0+OjgA==} + '@aws-sdk/types@3.974.5': + resolution: {integrity: sha512-LkwLL2BLbC6wNNm4JaH9mbEqBMdOZCct6VAYqhdN4U1xrWM+fUJQEfbHwQgDypapOWTRtlk25akb5afM0P8CIQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-recursion-detection@3.972.3': - resolution: {integrity: sha512-PY57QhzNuXHnwbJgbWYTrqIDHYSeOlhfYERTAuc16LKZpTZRJUjzBFokp9hF7u1fuGeE3D70ERXzdbMBOqQz7Q==} + '@aws-sdk/xml-builder@3.972.40': + resolution: {integrity: sha512-wlFmCIGUlwF4zx/kncw+bmxTQh1HeSJq4mYV/V5cZUSJadDP3kXvGW8Rn21cimj/7y9ju+47oYWXi97vF7czaA==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-sdk-s3@3.972.12': - resolution: {integrity: sha512-knUtPDxuaFDV7/vhKpzuhF1z8rs7ZZoGXPhu6pet/FmRNgi+vsHjO61mhiAH5ygbId7Nk0sM3G1wxUfSVt0QFA==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/middleware-ssec@3.972.3': - resolution: {integrity: sha512-dU6kDuULN3o3jEHcjm0c4zWJlY1zWVkjG9NPe9qxYLLpcbdj5kRYBS2DdWYD+1B9f910DezRuws7xDEqKkHQIg==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/middleware-user-agent@3.972.12': - resolution: {integrity: sha512-iv9toQZloEJp+dIuOr+1XWGmBMLU9c2qqNtgscfnEBZnUq3qKdBJHmLTKoq3mkLlV+41GrCWn8LrOunc6OlP6g==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/nested-clients@3.996.0': - resolution: {integrity: sha512-edZwYLgRI0rZlH9Hru9+JvTsR1OAxuCRGEtJohkZneIJ5JIYzvFoMR1gaASjl1aPKRhjkCv8SSAb7hes5a1GGA==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/region-config-resolver@3.972.3': - resolution: {integrity: sha512-v4J8qYAWfOMcZ4MJUyatntOicTzEMaU7j3OpkRCGGFSL2NgXQ5VbxauIyORA+pxdKZ0qQG2tCQjQjZDlXEC3Ow==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/s3-request-presigner@3.996.0': - resolution: {integrity: sha512-YcMYpdwEYlfDdd+n6YiyVUtsy+WaVZbiSIv8q8/kKyoCKLTNOFS17S6YBxxEMeKCF0LnKYq4SOUNDK4sdVGTQA==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/signature-v4-multi-region@3.996.0': - resolution: {integrity: sha512-CLSrCdBoyIXSthaUcDzKw3fzRNbbyA/BawEMQBxsybYTZhGeC9P9p2DXuqTqVvla+PtEXBgRq0/Sgz2fEOBKyg==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/token-providers@3.996.0': - resolution: {integrity: sha512-jzBmlG97hYPdHjFs7G11fBgVArcwUrZX+SbGeQMph7teEWLDqIruKV+N0uzxFJF2GJJJ0UnMaKhv3PcXMltySg==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/types@3.973.1': - resolution: {integrity: sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/util-arn-parser@3.972.2': - resolution: {integrity: sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/util-endpoints@3.996.0': - resolution: {integrity: sha512-EhSBGWSGQ6Jcbt6jRyX1/0EV7rf+6RGbIIskN0MTtHk0k8uj5FAa1FZhLf+1ETfnDTy/BT39t5IUOQiZL5X1jQ==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/util-format-url@3.972.3': - resolution: {integrity: sha512-n7F2ycckcKFXa01vAsT/SJdjFHfKH9s96QHcs5gn8AaaigASICeME8WdUL9uBp8XV/OVwEt8+6gzn6KFUgQa8g==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/util-locate-window@3.965.4': - resolution: {integrity: sha512-H1onv5SkgPBK2P6JR2MjGgbOnttoNzSPIRoeZTNPZYyaplwGg50zS3amXvXqF0/qfXpWEC9rLWU564QTB9bSog==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/util-user-agent-browser@3.972.3': - resolution: {integrity: sha512-JurOwkRUcXD/5MTDBcqdyQ9eVedtAsZgw5rBwktsPTN7QtPiS2Ld1jkJepNgYoCufz1Wcut9iup7GJDoIHp8Fw==} - - '@aws-sdk/util-user-agent-node@3.972.11': - resolution: {integrity: sha512-pQr35pSZANfUb0mJ9H87pziJQ39jW1D7xFRwh36eWfrEclbKoIqrzpOIVz49o1Jq9ZQzOtjS7rQVvt7V4w5awA==} - engines: {node: '>=20.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true - - '@aws-sdk/xml-builder@3.972.5': - resolution: {integrity: sha512-mCae5Ys6Qm1LDu0qdGwx2UQ63ONUe+FHw908fJzLDqFKTDBK4LDZUqKWm4OkTCNFq19bftjsBSESIGLD/s3/rA==} - engines: {node: '>=20.0.0'} - - '@aws/lambda-invoke-store@0.2.3': - resolution: {integrity: sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==} + '@aws/lambda-invoke-store@0.3.0': + resolution: {integrity: sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ==} engines: {node: '>=18.0.0'} '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.29.0': resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} engines: {node: '>=6.9.0'} - '@babel/core@7.29.0': - resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + '@babel/core@7.29.6': + resolution: {integrity: sha512-QdxmAo/ikZqqRGA8s43ww8lcql6naWRvEz0FFrl6MIlc7Gi6TroXnSdWa5U/kq6fzcpqpHesicQxFZIieZbyIA==} 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/generator@7.29.8': + resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} @@ -2904,10 +2839,18 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 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.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 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.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} @@ -2916,8 +2859,8 @@ packages: resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.6': - resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} engines: {node: '>=6.9.0'} '@babel/parser@7.29.0': @@ -2925,6 +2868,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.8': + resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} engines: {node: '>=6.9.0'} @@ -3141,8 +3089,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.29.0': - resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==} + '@babel/plugin-transform-modules-systemjs@7.29.4': + resolution: {integrity: sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3368,6 +3316,10 @@ packages: resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} 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.0': resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} @@ -3376,6 +3328,10 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.8': + resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} + engines: {node: '>=6.9.0'} + '@base-ui/react@1.5.0': resolution: {integrity: sha512-z1gSAlced1yY+iM+mHDEtIkD8UI3Ebs52MuBPxvV6f5hRutk+xvCH/wuB7hDqDzK9JG5FoMz5nhrqtSs1wjt1A==} engines: {node: '>=14.0.0'} @@ -3603,6 +3559,10 @@ packages: resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} engines: {node: '>=20.19.0'} + '@csstools/color-helpers@6.1.1': + resolution: {integrity: sha512-gLNsunvwf3mCi5u5o46/Z/JcJMnhbHSaZ69rkgPzNM3J4s8hWwpPUQB6/tt0EDFyCiWzxANlx+2LJwpYj4zS1w==} + engines: {node: '>=20.19.0'} + '@csstools/css-calc@3.1.1': resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} engines: {node: '>=20.19.0'} @@ -3610,6 +3570,13 @@ packages: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 + '@csstools/css-calc@3.3.0': + resolution: {integrity: sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + '@csstools/css-color-parser@4.0.2': resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} engines: {node: '>=20.19.0'} @@ -3617,14 +3584,26 @@ packages: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 + '@csstools/css-color-parser@4.2.1': + resolution: {integrity: sha512-YpAJZhaHplYQkG8ib+/Fx5Y0eF2lVWi3tIvMJA6i39TLyUNp2439cifzW8VMjhlqrBjHzK5hVGugRRm2zTKI/A==} + 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.0.28': - resolution: {integrity: sha512-1NRf1CUBjnr3K7hu8BLxjQrKCxEe8FP/xmPTenAxCRZWVLbmGotkFvG9mfNpjA6k7Bw1bw4BilZq9cu19RA5pg==} + '@csstools/css-syntax-patches-for-csstree@1.1.9': + resolution: {integrity: sha512-iGGw4OsAYsS6pD29MdJ2bX/nJx65a04ZZiw6x+VwWlP2DdXf6f++Zmuv/OzALpdyfVhjbduIIF2cXM7HWBIe9A==} + 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==} @@ -3910,10 +3889,6 @@ packages: '@date-fns/tz@1.4.1': resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} - '@develar/schema-utils@2.6.5': - resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} - engines: {node: '>= 8.9.0'} - '@discoveryjs/json-ext@0.5.7': resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} @@ -3922,8 +3897,8 @@ packages: resolution: {integrity: sha512-Td9+dajSx5KebnNgsxDxTDWSDL4bUILPiUGAFKiaCWRI0uSgmfOGrlFA8IUZDurjPpSy06o5cIBrVcPs37zHaQ==} engines: {node: '>=18'} - '@elastic/transport@9.3.3': - resolution: {integrity: sha512-0QeEKScXdpwE8pCU/F4aDv5OO7rgh/WNmVScDhrfHS6vNLjRa0/403hzcvmyqt2ULhfDuN6hNLgnI6mtvKuO/Q==} + '@elastic/transport@9.4.0': + resolution: {integrity: sha512-/lE1rEPoXWjbQD1pAFyI/zZuMU1XdsxYgfZIAbQGgDabhinKYpZbQh6Qc/dYS6tEPxHOqlJ/WSQvSHZap4+I+w==} engines: {node: '>=20'} '@electron-internal/extract-zip@1.0.5': @@ -3956,8 +3931,8 @@ packages: engines: {node: '>=12.0.0'} hasBin: true - '@electron/rebuild@4.0.4': - resolution: {integrity: sha512-Rzc39XPdk/+/wBG8MfwAHohXflep0ITUfulb6Rgz3R0NeSB1noE+E9/M/cb8ftCAiyDD9PPhLuuWgE1GaInbKg==} + '@electron/rebuild@4.2.0': + resolution: {integrity: sha512-RKL/O+jGoXJMxrx/5771y1n0xTKmFuOYGO3gMmwypBM6rsH0kou0mswwdXA2JrhIkE4xyC7v9vGk0n6NPzgOxQ==} engines: {node: '>=22.12.0'} hasBin: true @@ -3970,14 +3945,17 @@ packages: engines: {node: '>=14.14'} hasBin: true - '@emnapi/core@1.8.1': - resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} + '@emnapi/core@1.11.2': + resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} - '@emnapi/runtime@1.8.1': - resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} - '@emnapi/wasi-threads@1.1.0': - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} + + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} '@epic-web/invariant@1.0.0': resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} @@ -3994,8 +3972,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.3': - resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + '@esbuild/aix-ppc64@0.28.2': + resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -4012,8 +3990,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.3': - resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + '@esbuild/android-arm64@0.28.2': + resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -4030,8 +4008,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.3': - resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + '@esbuild/android-arm@0.28.2': + resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -4048,8 +4026,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.3': - resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + '@esbuild/android-x64@0.28.2': + resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -4066,8 +4044,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.3': - resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + '@esbuild/darwin-arm64@0.28.2': + resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -4084,8 +4062,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.3': - resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + '@esbuild/darwin-x64@0.28.2': + resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -4102,8 +4080,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.3': - resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + '@esbuild/freebsd-arm64@0.28.2': + resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -4120,8 +4098,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.3': - resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + '@esbuild/freebsd-x64@0.28.2': + resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -4138,8 +4116,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.3': - resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + '@esbuild/linux-arm64@0.28.2': + resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -4156,8 +4134,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.3': - resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + '@esbuild/linux-arm@0.28.2': + resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -4174,8 +4152,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.3': - resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + '@esbuild/linux-ia32@0.28.2': + resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -4192,8 +4170,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.3': - resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + '@esbuild/linux-loong64@0.28.2': + resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -4210,8 +4188,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.3': - resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + '@esbuild/linux-mips64el@0.28.2': + resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -4228,8 +4206,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.3': - resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + '@esbuild/linux-ppc64@0.28.2': + resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -4246,8 +4224,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.3': - resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + '@esbuild/linux-riscv64@0.28.2': + resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -4264,8 +4242,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.3': - resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + '@esbuild/linux-s390x@0.28.2': + resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -4282,8 +4260,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.3': - resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + '@esbuild/linux-x64@0.28.2': + resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -4300,8 +4278,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.3': - resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + '@esbuild/netbsd-arm64@0.28.2': + resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -4318,8 +4296,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.3': - resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + '@esbuild/netbsd-x64@0.28.2': + resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -4336,8 +4314,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.3': - resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + '@esbuild/openbsd-arm64@0.28.2': + resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -4354,8 +4332,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.3': - resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + '@esbuild/openbsd-x64@0.28.2': + resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -4372,8 +4350,8 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.27.3': - resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + '@esbuild/openharmony-arm64@0.28.2': + resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -4390,8 +4368,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.3': - resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + '@esbuild/sunos-x64@0.28.2': + resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -4408,8 +4386,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.3': - resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + '@esbuild/win32-arm64@0.28.2': + resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -4426,8 +4404,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.3': - resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + '@esbuild/win32-ia32@0.28.2': + resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -4444,14 +4422,14 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.3': - resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + '@esbuild/win32-x64@0.28.2': + resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@exodus/bytes@1.14.1': - resolution: {integrity: sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ==} + '@exodus/bytes@1.15.1': + resolution: {integrity: sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: '@noble/hashes': ^1.8.0 || ^2.0.0 @@ -4632,162 +4610,171 @@ packages: '@hexagon/base64@1.1.28': resolution: {integrity: sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==} - '@hono/node-server@1.19.9': - resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} + '@hono/node-server@1.19.17': + resolution: {integrity: sha512-dSneS5qhiauZWGDCeK4o695Xd9nUNjviSZCMQrj10eetr8Uln1ucn6bbphOM6UynAMMtNIzZNSpL9vnASJwrPQ==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 - '@img/colour@1.0.0': - resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-darwin-arm64@0.35.4': + resolution: {integrity: sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.5': - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-darwin-x64@0.35.4': + resolution: {integrity: sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + '@img/sharp-freebsd-wasm32@0.35.4': + resolution: {integrity: sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==} + engines: {node: '>=20.9.0'} + os: [freebsd] + + '@img/sharp-libvips-darwin-arm64@1.3.3': + resolution: {integrity: sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + '@img/sharp-libvips-darwin-x64@1.3.3': + resolution: {integrity: sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + '@img/sharp-libvips-linux-arm64@1.3.3': + resolution: {integrity: sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + '@img/sharp-libvips-linux-arm@1.3.3': + resolution: {integrity: sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + '@img/sharp-libvips-linux-ppc64@1.3.3': + resolution: {integrity: sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + '@img/sharp-libvips-linux-riscv64@1.3.3': + resolution: {integrity: sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==} cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + '@img/sharp-libvips-linux-s390x@1.3.3': + resolution: {integrity: sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + '@img/sharp-libvips-linux-x64@1.3.3': + resolution: {integrity: sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + '@img/sharp-libvips-linuxmusl-arm64@1.3.3': + resolution: {integrity: sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + '@img/sharp-libvips-linuxmusl-x64@1.3.3': + resolution: {integrity: sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-linux-arm64@0.34.5': - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-arm64@0.35.4': + resolution: {integrity: sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-linux-arm@0.34.5': - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-arm@0.35.4': + resolution: {integrity: sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==} + engines: {node: '>=20.9.0'} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-ppc64@0.35.4': + resolution: {integrity: sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==} + engines: {node: '>=20.9.0'} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-linux-riscv64@0.34.5': - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-riscv64@0.35.4': + resolution: {integrity: sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==} + engines: {node: '>=20.9.0'} cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-s390x@0.35.4': + resolution: {integrity: sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==} + engines: {node: '>=20.9.0'} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-x64@0.35.4': + resolution: {integrity: sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linuxmusl-arm64@0.35.4': + resolution: {integrity: sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linuxmusl-x64@0.35.4': + resolution: {integrity: sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-wasm32@0.35.4': + resolution: {integrity: sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==} + engines: {node: '>=20.9.0'} + + '@img/sharp-webcontainers-wasm32@0.35.4': + resolution: {integrity: sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==} + engines: {node: '>=20.9.0'} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.5': - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-win32-arm64@0.35.4': + resolution: {integrity: sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.5': - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-win32-ia32@0.35.4': + resolution: {integrity: sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==} + engines: {node: ^20.9.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.5': - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-win32-x64@0.35.4': + resolution: {integrity: sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [win32] @@ -5357,15 +5344,37 @@ packages: resolution: {integrity: sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==} engines: {node: '>=18'} + '@napi-rs/lzma-linux-x64-gnu@1.5.1': + resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==} + engines: {node: ^22.20 || ^24.12 || >=25} + cpu: [x64] + os: [linux] + libc: [glibc] + '@napi-rs/wasm-runtime@1.0.7': resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} - '@napi-rs/wasm-runtime@1.1.1': - resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} + '@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.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 '@neon-rs/load@0.1.82': resolution: {integrity: sha512-H4Gu2o5kPp+JOEhRrOQCnJnf7X6sv9FBLttM/wSbb4efsgFWeHzfU/ItZ01E5qqEk+U6QGdeVO7lxXIAtYHr5A==} + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@noble/hashes@2.4.0': + resolution: {integrity: sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==} + engines: {node: '>= 20.19.0'} + + '@nodable/entities@3.0.0': + resolution: {integrity: sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -5391,8 +5400,8 @@ packages: resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@opentelemetry/core@2.5.1': - resolution: {integrity: sha512-Dwlc+3HAZqpgTYq0MUyZABjFkcrKTePwuiFVLjahGD8cx3enqihmpAmdgNFO1R4m/sIe5afjJrA25Prqy4NXlA==} + '@opentelemetry/core@2.10.0': + resolution: {integrity: sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -5401,111 +5410,106 @@ packages: resolution: {integrity: sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==} engines: {node: '>=14'} - '@oxc-resolver/binding-android-arm-eabi@11.18.0': - resolution: {integrity: sha512-EhwJNzbfLwQQIeyak3n08EB3UHknMnjy1dFyL98r3xlorje2uzHOT2vkB5nB1zqtTtzT31uSot3oGZFfODbGUg==} + '@oxc-resolver/binding-android-arm-eabi@11.24.2': + resolution: {integrity: sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==} cpu: [arm] os: [android] - '@oxc-resolver/binding-android-arm64@11.18.0': - resolution: {integrity: sha512-esOPsT9S9B6vEMMp1qR9Yz5UepQXljoWRJYoyp7GV/4SYQOSTpN0+V2fTruxbMmzqLK+fjCEU2x3SVhc96LQLQ==} + '@oxc-resolver/binding-android-arm64@11.24.2': + resolution: {integrity: sha512-cl4icWaZFnLdg8m6qtnh5rBMuGbxc/ptStFHLeCNwr+2cZjkjNwQu/jYRS0CHlnPecOJMpuS5M6/BH+0J/YkEg==} cpu: [arm64] os: [android] - '@oxc-resolver/binding-darwin-arm64@11.18.0': - resolution: {integrity: sha512-iJknScn8fRLRhGR6VHG31bzOoyLihSDmsJHRjHwRUL0yF1MkLlvzmZ+liKl9MGl+WZkZHaOFT5T1jNlLSWTowQ==} + '@oxc-resolver/binding-darwin-arm64@11.24.2': + resolution: {integrity: sha512-At29QEMF6HajbQvgY8K6OXnHD1x9rad74xBEfmCB6ZqCGsdq75aK7tOYcTbOanMy8qdIBrfL3SMr3p/lfSlb9w==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@11.18.0': - resolution: {integrity: sha512-3rMweF2GQLzkaUoWgFKy1fRtk0dpj4JDqucoZLJN9IZG+TC+RZg7QMwG5WKMvmEjzdYmOTw1L1XqZDVXF2ksaQ==} + '@oxc-resolver/binding-darwin-x64@11.24.2': + resolution: {integrity: sha512-A5Kqr1EUj4oIL5CF4WRssq/o5P0Y11cwoFouMRmQ7YnC/A8V93nv1nb7aSU8HwcgmXropjLNkVTl4MN87cu28Q==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@11.18.0': - resolution: {integrity: sha512-TfXsFby4QvpGwmUP66+X+XXQsycddZe9ZUUu/vHhq2XGI1EkparCSzjpYW1Nz5fFncbI5oLymQLln/qR+qxyOw==} + '@oxc-resolver/binding-freebsd-x64@11.24.2': + resolution: {integrity: sha512-R5xkRBRRz7ceH/P5Jrc6G7FmdUdgpLYyESFAUDVTNQ9K0sGPxcp4ljiwEwEqsvNcQ4sYbMRrWcHHBCu7ksAJVw==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@11.18.0': - resolution: {integrity: sha512-WolOILquy9DJsHcfFMHeA5EjTCI9A7JoERFJru4UI2zKZcnfNPo5GApzYwiloscEp/s+fALPmyRntswUns0qHg==} + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': + resolution: {integrity: sha512-k/RuYL4L/R58IBn3wT5ma3Wh4k62bp1eYCFRWCmMsasUOqL+H6sW0VGFadEzKWXFFlz+2uIMoeMk9ySSZJHgbg==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm-musleabihf@11.18.0': - resolution: {integrity: sha512-r+5nHJyPdiBqOGTYAFyuq5RtuAQbm4y69GYWNG/uup9Cqr7RG9Ak0YZgGEbkQsc+XBs00ougu/D1+w3UAYIWHA==} + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': + resolution: {integrity: sha512-bnHAak3ujYfH5pKk4NieFNbvYvernfoQDgwLddbZ3OtMYrem87/qjlA+u+aKG0oZcqSLGCful/6/CEA+aeAgaA==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@11.18.0': - resolution: {integrity: sha512-bUzg6QxljqMLLwsxYajAQEHW1LYRLdKOg/aykt14PSqUUOmfnOJjPdSLTiHIZCluVzPCQxv1LjoyRcoTAXfQaQ==} + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': + resolution: {integrity: sha512-vDT3KHgzYp47gmtNOqL2VNhCyl5Zv643eyxm//A68J8DeUGXrvD1pZFiaT4jSfe+RInfnn1R2yVHye4enx6RnA==} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-arm64-musl@11.18.0': - resolution: {integrity: sha512-l43GVwls5+YR8WXOIez5x7Pp/MfhdkMOZOOjFUSWC/9qMnSLX1kd95j9oxDrkWdD321JdHTyd4eau5KQPxZM9w==} + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': + resolution: {integrity: sha512-+kMlQvbzfyEYtu5FcjE4p+ttBLpKW4d/AsAsuE69BxV6V4twZJeIQZFfD8gh/wqglY0MkPSezWXQH0jBV13MUw==} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-ppc64-gnu@11.18.0': - resolution: {integrity: sha512-ayj7TweYWi/azxWmRpUZGz41kKNvfkXam20UrFhaQDrSNGNqefQRODxhJn0iv6jt4qChh7TUxDIoavR6ftRsjw==} + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': + resolution: {integrity: sha512-shjfMhmZ3gq9fv/w7bi3PnZlgOPG+2QAOFf0BJF0EgBSIGZ6PMLN2zbGEblTUYB/NKVDRyYhE2ff3dJ1QqNPkA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-gnu@11.18.0': - resolution: {integrity: sha512-2Jz7jpq6BBNlBBup3usZB6sZWEZOBbjWn++/bKC2lpAT+sTEwdTonnf3rNcb+XY7+v53jYB9pM8LEKVXZfr8BA==} + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': + resolution: {integrity: sha512-zGelwFR5oRo+b69k8Lrzun86DyUHzfKN6cnjbR9l7Z7NIRznOE/2ZvPa1IUKqAL2PzAXOdwkfVqNvO1H2RlpAw==} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-musl@11.18.0': - resolution: {integrity: sha512-omw8/ISOc6ubR247iEMma4/JRfbY2I+nGJC59oKBhCIEZoyqEg/NmDSBc4ToMH+AsZDucqQUDOCku3k7pBiEag==} + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': + resolution: {integrity: sha512-qxZ1SWCXJY0eyhAlP6Lmo9F2Nrtx7EkYj9oCgL8apDPCwXwCEDA2U697bbT81JIc2IrVjxO4KX6WU2N+oN9Z4w==} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-s390x-gnu@11.18.0': - resolution: {integrity: sha512-uFipBXaS+honSL5r5G/rlvVrkffUjpKwD3S/aIiwp64bylK3+RztgV+mM1blk+OT5gBRG864auhH6jCfrOo3ZA==} + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': + resolution: {integrity: sha512-sGCecF3cx2DFlH4t/z7ApnOnXqN48p5p5mlHDEnHTAukQa2P+qMVE4CwyWE9W+q/m3QJ7kKfGrIjax31f44oFQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-gnu@11.18.0': - resolution: {integrity: sha512-bY4uMIoKRv8Ine3UiKLFPWRZ+fPCDamTHZFf5pNOjlfmTJIANtJo0mzWDUdFZLYhVgQdegrDL9etZbTMR8qieg==} + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': + resolution: {integrity: sha512-k/VlMMcSzMlahb3/fENM4rTlsJ0s3fFROA0KXPBmKggqmTSaE383sl8F3KCOXPLmVsYfW6hCitMhXCEtNeZxxg==} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-musl@11.18.0': - resolution: {integrity: sha512-40IicL/aitfNOWur06x7Do41WcqFJ9VUNAciFjZCXzF6wR2i6uVsi6N19ecqgSRoLYFCAoRYi9F50QteIxCwKQ==} + '@oxc-resolver/binding-linux-x64-musl@11.24.2': + resolution: {integrity: sha512-8hbnZyNi97b/8wapYaIF9+t9GmZKBW2vunaOc3h9HGJptH7b7XpvZqOTBSm/MpTjr7H497BlgOaSfLUdhmy2bw==} cpu: [x64] os: [linux] libc: [musl] - '@oxc-resolver/binding-openharmony-arm64@11.18.0': - resolution: {integrity: sha512-DJIzYjUnSJtz4Trs/J9TnzivtPcUKn9AeL3YjHlM5+RvK27ZL9xISs3gg2VAo2nWU7ThuadC1jSYkWaZyONMwg==} + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + resolution: {integrity: sha512-MvyGik3a6pVgZ0t/kWlbmFxFLmXQJwgLsY2eYFHLpy0wGwRbfzeIGgDwQ3kXqE30z+kSXennRkCrT7TUvkptNg==} cpu: [arm64] os: [openharmony] - '@oxc-resolver/binding-wasm32-wasi@11.18.0': - resolution: {integrity: sha512-57+R8Ioqc8g9k80WovoupOoyIOfLEceHTizkUcwOXspXLhiZ67ScM7Q8OuvhDoRRSZzH6yI0qML3WZwMFR3s7g==} + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + resolution: {integrity: sha512-vHcssMPwO08RTvj/c0iOBz90attxyG3wQJ0dTcyEQK43LRpcdLWZlV5feBhv6Isn6ahbQIzHbCgfa81+RiML0Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@11.18.0': - resolution: {integrity: sha512-t9Oa4BPptJqVlHTT1cV1frs+LY/vjsKhHI6ltj2EwoGM1TykJ0WW43UlQaU4SC8N+oTY8JRbAywVMNkfqjSu9w==} + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': + resolution: {integrity: sha512-uokJqro2iBqkFvJdKQLP7d8/BUmFwESQFVmIJUQKj1Xn1a/LysJoe1vmeECLF5b3jsV8CAL5sEMJXX6SdK9Nhg==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-ia32-msvc@11.18.0': - resolution: {integrity: sha512-4maf/f6ea5IEtIXqGwSw38srRtVHTre9iKShG4gjzat7c3Iq6B1OppXMj8gNmTuM4n8Xh1hQM9z2hBELccJr1g==} - cpu: [ia32] - os: [win32] - - '@oxc-resolver/binding-win32-x64-msvc@11.18.0': - resolution: {integrity: sha512-EhW8Su3AEACSw5HfzKMmyCtV0oArNrVViPdeOfvVYL9TrkL+/4c8fWHFTBtxUMUyCjhSG5xYNdwty1D/TAgL0Q==} + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + resolution: {integrity: sha512-UqGPmo56KDfLlfXFAFIrNflHT8tFxWGEivWg3Zeyp4Uy2NlKN1FGPr6/BxcLGG3+kZ6Wp14g5Uj+n71boqZfiw==} cpu: [x64] os: [win32] @@ -5624,12 +5628,27 @@ packages: '@peculiar/asn1-schema@2.6.0': resolution: {integrity: sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==} + '@peculiar/asn1-schema@2.9.4': + resolution: {integrity: sha512-GjzePcT9Iw8NzeOPf73iNS9xM+TBhd/FilAfP+RQGkTMQJTVWtytN3JHJACCjf/ABNau5S7mS3g+DcuxmRgYEg==} + engines: {node: '>=14'} + '@peculiar/asn1-x509-attr@2.6.1': resolution: {integrity: sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==} '@peculiar/asn1-x509@2.6.1': resolution: {integrity: sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==} + '@peculiar/json-schema@1.1.12': + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} + + '@peculiar/utils@2.0.3': + resolution: {integrity: sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==} + + '@peculiar/webcrypto@1.7.1': + resolution: {integrity: sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==} + engines: {node: '>=14.18.0'} + '@peculiar/x509@1.14.3': resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==} engines: {node: '>=20.0.0'} @@ -6446,141 +6465,141 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@rollup/rollup-android-arm-eabi@4.59.0': - resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} + '@rollup/rollup-android-arm-eabi@4.63.1': + resolution: {integrity: sha512-UZ8sUxPTiHWYX9QNdJedb1kDZSpS1t/VPWBWGSgqHNi9w3Cu6IXvu2mzbhiTiPvtrqgTQJ+zqiAq2iPIPilpaQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.59.0': - resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} + '@rollup/rollup-android-arm64@4.63.1': + resolution: {integrity: sha512-cQ4nFQABN5cDvDpbvJ7bMStCpnaVxynZrRMfUJYgxcIk9Sh54FIO1vtfkg0B69REjER77ioZ/ov+eAApx/KmLQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.59.0': - resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} + '@rollup/rollup-darwin-arm64@4.63.1': + resolution: {integrity: sha512-FQNqd1lRy/0QhDk3xeRIkSBiCpXCiDnZO3YLVdcDKN1UBiKToNftCzcXYNLshmPDUMlu2TdeS8tGcsU6f3YF1Q==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.59.0': - resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} + '@rollup/rollup-darwin-x64@4.63.1': + resolution: {integrity: sha512-pvD16V939D3CloK0+qikpGaxiPrDUXTe7Y5cWOMkMSy7m1cawa8EGy/kXYi/G/cKAC4HDAbSnzCIk1WmsoOKXg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.59.0': - resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} + '@rollup/rollup-freebsd-arm64@4.63.1': + resolution: {integrity: sha512-pcFGeL2345VwdTnJhA6zLbew+YgWB0qBG2+dMtXjCicf6+rm6kO6cOoh5VnTe0ZMrMRgRyuHmCJxZWrIdzYuOw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.59.0': - resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} + '@rollup/rollup-freebsd-x64@4.63.1': + resolution: {integrity: sha512-mRJlqSRulVzcKq/LKA6ICSIc3K/l4fzlVn/gePn2nXIHy8seRi5z/eeRE0d/XMBxcMldiXtQTSpRj0tkkC3g8Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.59.0': - resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} + '@rollup/rollup-linux-arm-gnueabihf@4.63.1': + resolution: {integrity: sha512-YDUNvVM85TI3g/1OpnqKP1h4NeW/j64DfWMf+G3M809xNk1bJSnpFp4sh83NpmVE5DXnkh8ULor4LTVZKoYLHw==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.59.0': - resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} + '@rollup/rollup-linux-arm-musleabihf@4.63.1': + resolution: {integrity: sha512-7Mcn71p9ZuQFAj+h+dhQXy/yeLePRS2yKRnmW1DijA9thKO5qap0GNOIQK4yQ6iP3SU0Mrb/yWo8h8vgRba8lw==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.59.0': - resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} + '@rollup/rollup-linux-arm64-gnu@4.63.1': + resolution: {integrity: sha512-4YiLQTX6U4CSl0L9cluep9A9W6UmTfqBDc2/CH6wlu54pl4E7Jn3cOD8oxzvBDEGk/JMKgJ47C8g+radF7mwvg==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.59.0': - resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} + '@rollup/rollup-linux-arm64-musl@4.63.1': + resolution: {integrity: sha512-2ra8F7w8OquwZN9z2/fKFnli69wa8PLwaVzRMIPGb13ByMJwC28Fbp8YcVGoUhlYMTt7j5j9bNgpysrN2UM+vw==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.59.0': - resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} + '@rollup/rollup-linux-loong64-gnu@4.63.1': + resolution: {integrity: sha512-Sy20ncyhjmBP0Ml+UvQbimjlk6VFgjW5uNP+qqwHB00mTE8Bl2C1TuHTlRwK2YoXeZbee5lP2XevBWVkAQAtSQ==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.59.0': - resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} + '@rollup/rollup-linux-loong64-musl@4.63.1': + resolution: {integrity: sha512-noITLp8oNjYliPnGWmLyelIHwULGqbHloQHGw1rtxbWhTuWooRpnZarZQJ1y9EUC4szuCusCc+HEpUtxpIwYvA==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.59.0': - resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} + '@rollup/rollup-linux-ppc64-gnu@4.63.1': + resolution: {integrity: sha512-hlxxXd+F1mWiAcaFR7Sv9ZQT6m6UfI8+Vy/kFJzztq2pDMU/0wZ9sish0iszNZvsQDo8Gc0i5yuFEOz5dDf6fA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.59.0': - resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} + '@rollup/rollup-linux-ppc64-musl@4.63.1': + resolution: {integrity: sha512-EF7OpqQTQ/BvGqLzUi4rEHuagCV9MugAUXSHemwPW5vxZ75RR+jxO/2j95Ph2dalMpFHSVECjRoioHZgA9zOYA==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.59.0': - resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} + '@rollup/rollup-linux-riscv64-gnu@4.63.1': + resolution: {integrity: sha512-wQO3JesW9PRkwlabQ27y7sPfVOOTLRG73I4F2UYHG5PXun3J9U3y+b7ezVKSYbsvSKGQ1k1cq8Qlun4C9kLt3w==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.59.0': - resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} + '@rollup/rollup-linux-riscv64-musl@4.63.1': + resolution: {integrity: sha512-ouAGwhO6wHRXdnOVCOsB0tRFkA7nhNB2Nwax6oECXN0YiN8EYUTBAOudADOB1PI+yDL61TeNx/u7MVCzksNbkQ==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.59.0': - resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} + '@rollup/rollup-linux-s390x-gnu@4.63.1': + resolution: {integrity: sha512-q2R38Sn+1J8RxhfJ+T54wSWmyKXWec+9jgDfqO2AtArEqHO5R2aeayp5H5OYLr5UYDVGsVaZPEFUooMhYCdz5A==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.59.0': - resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} + '@rollup/rollup-linux-x64-gnu@4.63.1': + resolution: {integrity: sha512-gfI5T24WLLuFfSKw7Go/zDXjAAV0fny0swTaDv+WjK7vqcw4cRhFfdsyKL1n+ukI+ooBxn3bVQnyrn06WpI50w==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.59.0': - resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} + '@rollup/rollup-linux-x64-musl@4.63.1': + resolution: {integrity: sha512-4h6XqthmB4Hspji84wvgk+ElodTsGj+dbZqHJHHtKxj4mYq0ANSEEPX9ys3moJueqsRjwpaJYH7874Itwnj2ow==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.59.0': - resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} + '@rollup/rollup-openbsd-x64@4.63.1': + resolution: {integrity: sha512-dlfCOa87o1VAYegLQ9EKilx2JCeRofiyPGhTCmqnuXZ6bMPiycO1rq1+sKoulAp7pGLIsTIw+1x5R+zgh5LhhA==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.59.0': - resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} + '@rollup/rollup-openharmony-arm64@4.63.1': + resolution: {integrity: sha512-cjkLbOlfcm3QGhMM1J5zaZjsw1GggbN6rw9UTSSRrPrR1KkcXnN7Uq9rPw34xImQ9VOY9GN+6u2Zj80B9ptkcw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.59.0': - resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} + '@rollup/rollup-win32-arm64-msvc@4.63.1': + resolution: {integrity: sha512-Li1KdUnWGE4N3e1F/B4RTB1ms+nG4WBgjByO46pkeBVX/2UBsY53xf5vK9WygVmnH3RwncIST7lkSdLSY6P9lg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.59.0': - resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} + '@rollup/rollup-win32-ia32-msvc@4.63.1': + resolution: {integrity: sha512-t4ZYOSoLTgwhuFMrmTMLx/+i1DQVK7HYqMc6kY46EApwi8X0nIVphzdNoThU3xt6n+N5urG1/gxBdCaKDLavfg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.59.0': - resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} + '@rollup/rollup-win32-x64-gnu@4.63.1': + resolution: {integrity: sha512-RgroPfMmKlD1RzSDxvwgcPiy2HNQKoYV7OmwIXDsk73uKW5t6B/V8KIy27SMv/FNXFo/oSBtWc9J0X7t91ezZg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.59.0': - resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} + '@rollup/rollup-win32-x64-msvc@4.63.1': + resolution: {integrity: sha512-at8QVep6S3h5Y6gSbdGU06bRY5WJkf6WUduM9YtvYMbYhB1MOFfUgc6kehitQXzOtMSaT70q7f9ydPhpqu821w==} cpu: [x64] os: [win32] @@ -6678,220 +6697,28 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - '@smithy/abort-controller@4.2.9': - resolution: {integrity: sha512-6YGSygFmck1vMjzSxbjEPKMm1xWUr2+w+F8kWVc8rqKQYd1C5zZftvxGii4ti4Mh5ulIXZtAUoXS88Hhu6fkjQ==} + '@smithy/core@3.33.3': + resolution: {integrity: sha512-CsOeKq/9kA3y6VJHt+/+VTCtBaxJ4OTFpgrjIUhPpDIKxBci1k2bJaQASF2h/ELWrulGp+t97DZ0mevfAD8idg==} engines: {node: '>=18.0.0'} - '@smithy/chunked-blob-reader-native@4.2.2': - resolution: {integrity: sha512-QzzYIlf4yg0w5TQaC9VId3B3ugSk1MI/wb7tgcHtd7CBV9gNRKZrhc2EPSxSZuDy10zUZ0lomNMgkc6/VVe8xg==} + '@smithy/credential-provider-imds@4.5.2': + resolution: {integrity: sha512-A9uSdn72ozbRUSit0eib0TW7nXuNPlaeM0zcGkJ+nE6tFcSDbnmtwoxbTCFBukVQcszDAyvsd7+rTduPTXpygg==} engines: {node: '>=18.0.0'} - '@smithy/chunked-blob-reader@5.2.1': - resolution: {integrity: sha512-y5d4xRiD6TzeP5BWlb+Ig/VFqF+t9oANNhGeMqyzU7obw7FYgTgVi50i5JqBTeKp+TABeDIeeXFZdz65RipNtA==} + '@smithy/fetch-http-handler@5.7.2': + resolution: {integrity: sha512-nZyWTmSpJEXl6VtWVMBJve/7x12DZu6sIX1z1a+ZMaHlQQRs9Zpu6NbTe/gmxYXVRpkjxyDYpZ5gx2IM6f/Wkw==} engines: {node: '>=18.0.0'} - '@smithy/config-resolver@4.4.7': - resolution: {integrity: sha512-RISbtc12JKdFRYadt2kW12Cp6XCSU00uFaBZPZqInNVSrRdJFPY/S6nd6/sV7+ySTgGPiKrERtnimEFI6sSweQ==} + '@smithy/node-http-handler@4.11.3': + resolution: {integrity: sha512-2jY1tSpERfPfWqyBV2pH+iGFaghVsIJszJNsT7hxtQYhVJpWDyc0LqOWI+nXOxOAHaEfZ4PXXtp1wW1TGpHhkA==} engines: {node: '>=18.0.0'} - '@smithy/core@3.23.4': - resolution: {integrity: sha512-IH7G3hWxUhd2Z6HtvjZ1EiyDBCRYRr2sngOB9KUWf96XQ8JP2O5ascUH6TouW5YCIMFaVnKADEscM/vUfI3TvA==} + '@smithy/signature-v4@5.7.3': + resolution: {integrity: sha512-7ImGm+FkHRLcBaRttIAMZ6bzJZWb2cJGoYjq46F2UjycujWzrL9GEN9h4w7eQyXJYnltrUhxbbieBAIRrdqpow==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.2.9': - resolution: {integrity: sha512-Jf723a38EGAzWHxJHzb9DtBq7lrvdJlkCAPWQdN/oiznovx5yWXCFCVspzDe8JU6b+k9hJXYB5duFZpb+3mB6Q==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-codec@4.2.9': - resolution: {integrity: sha512-8/wOb1wm/joXCj6SNHRFnfcNBR4xmumw869UnM+RrjoWeliNcTnOTw2WZXBWoKfszbL/v/AxdijIilqRMst+vA==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-browser@4.2.9': - resolution: {integrity: sha512-HbD4ptlSKHVfF84F77oqy2kswQR5H9basFILtCvnhtgzvRntiQtqstT1XFENzI7dQzrGD0HfhMjziSCs6EZEFA==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-config-resolver@4.3.9': - resolution: {integrity: sha512-W2KlYzjD1V7jCUsTxy/HWrWDa9RdnzqY8Aeskaoakrj+9aiZ53YzEC7lNb3JJ0zKFjWoLbXdaSXmftBBR8Wjsw==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-node@4.2.9': - resolution: {integrity: sha512-6nMJG2KJJ5cjmPmySomEdpqhGsfneanKCjb5uBJJIM2D6rZhemEpYBtes6zr910LkxWseWTIbWrif0vaOB9NTA==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-universal@4.2.9': - resolution: {integrity: sha512-RgkumJugvbFVcifYCFeYaFpMOuLiIAcvzKe21EeaM6/KKU/4XYyf8hs/So9GSN6SDe4bqZbwB4g/rr/pIxUZmA==} - engines: {node: '>=18.0.0'} - - '@smithy/fetch-http-handler@5.3.10': - resolution: {integrity: sha512-qF4EcrEtEf2P6f2kGGuSVe1lan26cn7PsWJBC3vZJ6D16Fm5FSN06udOMVoW6hjzQM3W7VDFwtyUG2szQY50dA==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-blob-browser@4.2.10': - resolution: {integrity: sha512-2lZvvcwTaXq6cGOcX72Ej9WU+z3T/C5NOuqIm+zLD3MlExRp9kW/Qa/p66NbBM74X0BdrdvpsMYwlkhtvHrxaQ==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-node@4.2.9': - resolution: {integrity: sha512-/iSYAwSIA/SAeLga2YEpPLLOmw3n86RW4/bkhxtY1DSTR9z5HGjbYTzPaBKv2m8a4nK1rqZWchhl41qTaqMLbg==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-stream-node@4.2.9': - resolution: {integrity: sha512-WFPbY/TysowQuoWR0xOCPT3RH1KMpThUWjx75RAMLkDlTYTANzyPHZiDRslf2e5bTmCYcqCshN7up70Ic/Zqug==} - engines: {node: '>=18.0.0'} - - '@smithy/invalid-dependency@4.2.9': - resolution: {integrity: sha512-J+0rlwWZKgOYugVgRE5VlVz/UFV+6cIpZkmfWBq1ld1x3htKDdHOutYhZTURIvSVztWn0T3aghCdEzGdXXsSMw==} - engines: {node: '>=18.0.0'} - - '@smithy/is-array-buffer@2.2.0': - resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} - engines: {node: '>=14.0.0'} - - '@smithy/is-array-buffer@4.2.1': - resolution: {integrity: sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q==} - engines: {node: '>=18.0.0'} - - '@smithy/md5-js@4.2.9': - resolution: {integrity: sha512-ZCCWfGj4wvqV+5OS9e/GvR5jlR7j1mMB1UkGE+V7P1USFMwcL4Z4j5mO9nGvQGkfe20KM87ymbvZIcU9tHNlIg==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-content-length@4.2.9': - resolution: {integrity: sha512-9ViCZhFkmLUDyIPeBAsW7h5/Tcix806gWqd/BBqwW6KB8mhgZTTqjRMsyTTmMo2zpF+KckpYQsSiiFrIGHRaFw==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-endpoint@4.4.18': - resolution: {integrity: sha512-4OS3TP3IWZysT8KlSG/UwfKdelJmuQ2CqVNfrkjm2Rsm146/DuSTfXiD1ulgWpp9L6lJmPYfWTp7/m4b4dQSdQ==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-retry@4.4.35': - resolution: {integrity: sha512-sz+Th9ofKypOtaboPTcyZtIfCs2LNb84bzxEhPffCElyMorVYDBdeGzxYqSLC6gWaZUqpPSbj5F6TIxYUlSCfQ==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-serde@4.2.10': - resolution: {integrity: sha512-BQsdoi7ma4siJAzD0S6MedNPhiMcTdTLUqEUjrHeT1TJppBKWnwqySg34Oh/uGRhJeBd1sAH2t5tghBvcyD6tw==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-stack@4.2.9': - resolution: {integrity: sha512-pid7ksBr7nm0X/3paIlGo9Fh3UK1pQ5yH0007tBmdkVvv+AsBZAOzC2dmLhlzDWKkSB+ZCiiyDArjAW3klkbMg==} - engines: {node: '>=18.0.0'} - - '@smithy/node-config-provider@4.3.9': - resolution: {integrity: sha512-EjdDTVGnnyJ9y8jXIfkF45UUZs21/Pp8xaMTZySLoC0xI3EhY7jq4co3LQnhh/bB6VVamd9ELpYJWLDw2ANhZA==} - engines: {node: '>=18.0.0'} - - '@smithy/node-http-handler@4.4.11': - resolution: {integrity: sha512-kQNJFwzYA9y+Fj3h9t1ToXYOJBobwUVEc6/WX45urJXyErgG0WOsres8Se8BAiFCMe8P06OkzRgakv7bQ5S+6Q==} - engines: {node: '>=18.0.0'} - - '@smithy/property-provider@4.2.9': - resolution: {integrity: sha512-ibHwLxq4KlbfueoNxMNrZkG+O7V/5XKrewhDGYn0p9DYKCsdsofuWHKdX3QW4zHlAUfLStqdCUSDi/q/9WSjwA==} - engines: {node: '>=18.0.0'} - - '@smithy/protocol-http@5.3.9': - resolution: {integrity: sha512-PRy4yZqsKI3Eab8TLc16Dj2NzC4dnw/8E95+++Jc+wwlkjBpAq3tNLqkLHMmSvDfxKQ+X5PmmCYt+rM/GcMKPA==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-builder@4.2.9': - resolution: {integrity: sha512-/AIDaq0+ehv+QfeyAjCUFShwHIt+FA1IodsV/2AZE5h4PUZcQYv5sjmy9V67UWfsBoTjOPKUFYSRfGoNW9T2UQ==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-parser@4.2.9': - resolution: {integrity: sha512-kZ9AHhrYTea3UoklXudEnyA4duy9KAWERC28+ft8y8HIhR3yGsjv1PFTgzMpB+5L4tQKXNTwFbVJMeRK20vpHQ==} - engines: {node: '>=18.0.0'} - - '@smithy/service-error-classification@4.2.9': - resolution: {integrity: sha512-DYYd4xrm9Ozik+ZT4f5ZqSXdzscVHF/tFCzqieIFcLrjRDxWSgRtvtXOohJGoniLfPcBcy5ltR3tp2Lw4/d9ag==} - engines: {node: '>=18.0.0'} - - '@smithy/shared-ini-file-loader@4.4.4': - resolution: {integrity: sha512-tA5Cm11BHQCk/67y6VPIWydLh/pMY90jqOEWIr/2VAzTOoDwGpwp0C/AuHBc3/xWSOA5m5PXLN+lIOrsnTm/PQ==} - engines: {node: '>=18.0.0'} - - '@smithy/signature-v4@5.3.9': - resolution: {integrity: sha512-QZKreDINuWf6KIcUUuurjBJiPPSRpMyU3sFPKk6urNAYcKkXhe6Ma+9MBX9e87yDnZfa/cqNMxobkdi9bpJt1A==} - engines: {node: '>=18.0.0'} - - '@smithy/smithy-client@4.11.7': - resolution: {integrity: sha512-gQP2J3qB/Wmc26gdmB8gA6zq2o2spG5sEU3o7TaTATBJEk29sYGWdEFoGEy91BczSpifTo0DQhVYjZXBEVcrpA==} - engines: {node: '>=18.0.0'} - - '@smithy/types@4.12.1': - resolution: {integrity: sha512-ow30Ze/DD02KH2p0eMyIF2+qJzGyNb0kFrnTRtPpuOkQ4hrgvLdaU4YC6r/K8aOrCML4FH0Cmm0aI4503L1Hwg==} - engines: {node: '>=18.0.0'} - - '@smithy/url-parser@4.2.9': - resolution: {integrity: sha512-gYs8FrnwKoIvL+GyPz6VvweCkrXqHeD+KnOAxB+NFy6mLr4l75lFrn3dZ413DG0K2TvFtN7L43x7r8hyyohYdg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-base64@4.3.1': - resolution: {integrity: sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-browser@4.2.1': - resolution: {integrity: sha512-SiJeLiozrAoCrgDBUgsVbmqHmMgg/2bA15AzcbcW+zan7SuyAVHN4xTSbq0GlebAIwlcaX32xacnrG488/J/6g==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-node@4.2.2': - resolution: {integrity: sha512-4rHqBvxtJEBvsZcFQSPQqXP2b/yy/YlB66KlcEgcH2WNoOKCKB03DSLzXmOsXjbl8dJ4OEYTn31knhdznwk7zw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} - engines: {node: '>=14.0.0'} - - '@smithy/util-buffer-from@4.2.1': - resolution: {integrity: sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig==} - engines: {node: '>=18.0.0'} - - '@smithy/util-config-provider@4.2.1': - resolution: {integrity: sha512-462id/00U8JWFw6qBuTSWfN5TxOHvDu4WliI97qOIOnuC/g+NDAknTU8eoGXEPlLkRVgWEr03jJBLV4o2FL8+A==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-browser@4.3.34': - resolution: {integrity: sha512-m75CH7xaVG8ErlnfXsIBLrgVrApejrvUpohr41CMdeWNcEu/Ouvj9fbNA7oW9Qpr0Awf+BmDRrYx72hEKgY+FQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-node@4.2.37': - resolution: {integrity: sha512-1LcAt0PV1dletxiGwcw2IJ8vLNhfkir02NTi1i/CFCY2ObtM5wDDjn/8V2dbPrbyoh6OTFH+uayI1rSVRBMT3A==} - engines: {node: '>=18.0.0'} - - '@smithy/util-endpoints@3.2.9': - resolution: {integrity: sha512-9FTqTzKxCFelCKdtHb22BTbrLgw7tTI+D6r/Ci/njI0tzqWLQctS0uEDTzraCR5K6IJItfFp1QmESlBytSpRhQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-hex-encoding@4.2.1': - resolution: {integrity: sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-middleware@4.2.9': - resolution: {integrity: sha512-pfnZneJ1S9X3TRmg2l3pG11Pvx2BW9O3NFhUN30llrK/yUKu8WbqMTx4/CzED+qKBYw0//ntUT00hvmaG+nLgA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-retry@4.2.9': - resolution: {integrity: sha512-79hfhL/oxP40SCXJGfjfE9pjbUVfHhXZFpCWXTHqXSluzaVy7jwWs9Ui7lLbfDBSp+7i+BIwgeVIRerbIRWN6g==} - engines: {node: '>=18.0.0'} - - '@smithy/util-stream@4.5.14': - resolution: {integrity: sha512-IOBEiJTOltSx6MAfwkx/GSVM8/UCJxdtw13haP5OEL543lb1DN6TAypsxv+qcj4l/rKcpapbS6zK9MQGBOhoaA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-uri-escape@4.2.1': - resolution: {integrity: sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q==} - engines: {node: '>=18.0.0'} - - '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} - engines: {node: '>=14.0.0'} - - '@smithy/util-utf8@4.2.1': - resolution: {integrity: sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g==} - engines: {node: '>=18.0.0'} - - '@smithy/util-waiter@4.2.9': - resolution: {integrity: sha512-/PYREwfBaj3fV5V4PfMksYj/WKwrjQ4gW/yo8KLpZSkAdBEkvXd68hovAubrw+n+Q8Rcr9XRn6uzcoQCEhrNFQ==} - engines: {node: '>=18.0.0'} - - '@smithy/uuid@1.1.1': - resolution: {integrity: sha512-dSfDCeihDmZlV2oyr0yWPTUfh07suS+R5OB+FZGiv/hHyK3hrFBW5rR1UYjfa57vBsrP9lciFkRPzebaV1Qujw==} + '@smithy/types@4.17.2': + resolution: {integrity: sha512-FOKpVZob9MPTn2znRzGrnsMHv7BOsKVw3XiP/cOyYLDVZ9qKp4nifIiSCuUU/fIj5Vu0UOAxCFr+qRAtG0NUkA==} engines: {node: '>=18.0.0'} '@standard-schema/spec@1.1.0': @@ -7084,15 +6911,11 @@ packages: '@tanstack/virtual-core@3.13.23': resolution: {integrity: sha512-zSz2Z2HNyLjCplANTDyl3BcdQJc2k1+yyFoKhNRmCr7V7dY8o8q5m8uFTI1/Pg1kL+Hgrz6u3Xo6eFUB7l66cg==} - '@trysound/sax@0.2.0': - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - '@ts-morph/common@0.29.0': resolution: {integrity: sha512-35oUmphHbJvQ/+UTwFNme/t2p3FoKiGJ5auTjjpNTop2dyREspirjMy82PLSC1pnDJ8ah1GU98hwpVt64YXQsg==} - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} '@types/archiver@7.0.0': resolution: {integrity: sha512-/3vwGwx9n+mCQdYZ2IKGGHEFL30I96UgBlk8EtRDDFQ9uxM1l4O5Ci6r00EMAkiDaTqD9DQ6nVrWRICnBPtzzg==} @@ -7133,6 +6956,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/events@3.0.3': resolution: {integrity: sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==} @@ -7181,9 +7007,6 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node-forge@1.3.14': - resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==} - '@types/node@18.19.130': resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} @@ -7202,9 +7025,6 @@ packages: '@types/pg@8.16.0': resolution: {integrity: sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==} - '@types/plist@3.0.5': - resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} - '@types/qrcode@1.5.6': resolution: {integrity: sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==} @@ -7258,9 +7078,6 @@ packages: '@types/validator@13.15.10': resolution: {integrity: sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==} - '@types/verror@1.10.11': - resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==} - '@types/whatwg-mimetype@3.0.2': resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} @@ -7356,54 +7173,43 @@ packages: peerDependencies: typescript: '*' - '@vitest/browser-playwright@4.0.18': - resolution: {integrity: sha512-gfajTHVCiwpxRj1qh0Sh/5bbGLG4F/ZH/V9xvFVoFddpITfMta9YGow0W6ZpTTORv2vdJuz9TnrNSmjKvpOf4g==} + '@vitest/coverage-v8@4.1.11': + resolution: {integrity: sha512-8MVGEFnJIcdGjcbfKmeq8z0pZHH0JlVtoVZH9Q/qwUp6wyFnEJUBMrw9DCaj+ra3vShGmhavjalMIhPNxZAUcw==} peerDependencies: - playwright: '*' - vitest: 4.0.18 - - '@vitest/browser@4.0.18': - resolution: {integrity: sha512-gVQqh7paBz3gC+ZdcCmNSWJMk70IUjDeVqi+5m5vYpEHsIwRgw3Y545jljtajhkekIpIp5Gg8oK7bctgY0E2Ng==} - peerDependencies: - vitest: 4.0.18 - - '@vitest/coverage-v8@4.0.18': - resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==} - peerDependencies: - '@vitest/browser': 4.0.18 - vitest: 4.0.18 + '@vitest/browser': 4.1.11 + vitest: 4.1.11 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.0.18': - resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} + '@vitest/expect@4.1.11': + resolution: {integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==} - '@vitest/mocker@4.0.18': - resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==} + '@vitest/mocker@4.1.11': + resolution: {integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==} peerDependencies: msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@4.0.18': - resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} + '@vitest/pretty-format@4.1.11': + resolution: {integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==} - '@vitest/runner@4.0.18': - resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==} + '@vitest/runner@4.1.11': + resolution: {integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==} - '@vitest/snapshot@4.0.18': - resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==} + '@vitest/snapshot@4.1.11': + resolution: {integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==} - '@vitest/spy@4.0.18': - resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==} + '@vitest/spy@4.1.11': + resolution: {integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==} - '@vitest/utils@4.0.18': - resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + '@vitest/utils@4.1.11': + resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==} '@vvo/tzdb@6.198.0': resolution: {integrity: sha512-bNRWBhWYl0edVgyX6AYbhoCM2tk2lXJjGCyO2VDc2xn6Dw8dLd7WGj2DDXkVOkmOIQTNjEAcxrEpIzz5pWVwFg==} @@ -7411,10 +7217,12 @@ packages: '@xmldom/xmldom@0.8.13': resolution: {integrity: sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==} engines: {node: '>=10.0.0'} + deprecated: this version has critical issues, please update to the latest version '@xmldom/xmldom@0.9.10': resolution: {integrity: sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==} engines: {node: '>=14.6'} + deprecated: this version has critical issues, please update to the latest version abbrev@4.0.0: resolution: {integrity: sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==} @@ -7437,9 +7245,9 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - adm-zip@0.5.16: - resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} - engines: {node: '>=12.0'} + adm-zip@0.6.0: + resolution: {integrity: sha512-XleryMhbuksdKtofnWZ9Sk+4CUTbms4Mb/EU32SZwToAyZ5RgVos/ki8n+yr0LWHOGKuakbXTuuYNHLQjhddgg==} + engines: {node: '>=14.0'} agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} @@ -7453,19 +7261,11 @@ packages: ajv: optional: true - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - ajv-keywords@5.1.0: resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 - ajv@6.15.0: - resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} @@ -7509,19 +7309,19 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + anynum@1.0.1: + resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} + apache-arrow@21.1.0: resolution: {integrity: sha512-kQrYLxhC+NTVVZ4CCzGF6L/uPVOzJmD1T3XgbiUnP7oTeVFOFgEUu6IKNwCDkpFoBVqDKQivlX4RUFqqnWFlEA==} hasBin: true - app-builder-bin@5.0.0-alpha.12: - resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} - - app-builder-lib@26.9.0: - resolution: {integrity: sha512-f/1GhVrDfBH7sSzhAwiXa1rpR/7pB7Av5woUjmt+QYE0QyNvrOAiY05rngtR/PK4/1BzS6/zVoYobIwDAsrtBA==} + app-builder-lib@26.15.3: + resolution: {integrity: sha512-2VnyWkqsP5v5XbBhL3tD5Syx8iNPBYsoU7kY4S2fz7wg8Rj/nztWKCUzGKaFRTv0Xwf3/H058CR1Kvtd/3lRow==} engines: {node: '>=14.0.0'} peerDependencies: - dmg-builder: 26.9.0 - electron-builder-squirrel-windows: 26.9.0 + dmg-builder: 26.15.3 + electron-builder-squirrel-windows: 26.15.3 archiver-utils@5.0.2: resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} @@ -7545,24 +7345,20 @@ packages: array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + asn1js@3.0.10: + resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} + engines: {node: '>=12.0.0'} + asn1js@3.0.7: resolution: {integrity: sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==} engines: {node: '>=12.0.0'} - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-v8-to-istanbul@0.3.11: - resolution: {integrity: sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==} - - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} + ast-v8-to-istanbul@1.0.5: + resolution: {integrity: sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA==} async-exit-hook@2.0.1: resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} @@ -7592,6 +7388,9 @@ packages: await-lock@2.2.2: resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} + aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + b4a@1.8.0: resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} peerDependencies: @@ -7655,8 +7454,11 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - body-parser@1.20.4: - resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + body-parser@1.20.6: + resolution: {integrity: sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} bonjour-service@1.3.0: @@ -7672,15 +7474,15 @@ packages: bowser@2.14.1: resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} - brace-expansion@1.1.15: - resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} + brace-expansion@1.1.18: + resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@2.1.4: + resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==} - brace-expansion@5.0.3: - resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==} - engines: {node: 18 || 20 || >=22} + brace-expansion@5.0.9: + resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} + engines: {node: 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -7698,6 +7500,10 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer-image-size@0.6.4: + resolution: {integrity: sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ==} + engines: {node: '>=4.0'} + buffer@5.6.0: resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} @@ -7707,12 +7513,13 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - builder-util-runtime@9.6.0: - resolution: {integrity: sha512-k9V5I18PXLepLZ8jVmPzsH+gVCVZ+9aMVLyCZ0ZLOkT2KSyiBblDCCN8WxDbjOpfLGNHZqqJPBmW0HYeqxlgkQ==} + builder-util-runtime@9.7.0: + resolution: {integrity: sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw==} engines: {node: '>=12.0.0'} - builder-util@26.9.0: - resolution: {integrity: sha512-+eocmbdisnyb40B9nAp/KREfYLXvGagxV50KZv/Zh4aflsr1fdY9Qxs6QG1Jtx1vH5d5NQ3hIcemUi4RSlFK/Q==} + builder-util@26.15.3: + resolution: {integrity: sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==} + engines: {node: '>=14.0.0'} bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} @@ -7722,6 +7529,10 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + bytestreamjs@2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} + cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} @@ -7812,10 +7623,6 @@ packages: resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} engines: {node: '>= 0.2.0'} - cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -7962,9 +7769,6 @@ packages: core-js@3.48.0: resolution: {integrity: sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==} - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -7999,9 +7803,6 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} - crc@3.8.0: - resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} - crelt@1.0.6: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} @@ -8050,8 +7851,8 @@ packages: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css-tree@3.1.0: - resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} css-what@6.2.2: @@ -8070,8 +7871,8 @@ packages: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - cssstyle@6.1.0: - resolution: {integrity: sha512-Ml4fP2UT2K3CUBQnVlbdV/8aFDdlY69E+YnwJM+3VUWl08S3J8c8aRuJqCkD9Py8DHZ7zNNvsfKl8psocHZEFg==} + cssstyle@6.2.0: + resolution: {integrity: sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==} engines: {node: '>=20'} csstype@3.2.3: @@ -8194,14 +7995,8 @@ packages: dir-compare@4.2.0: resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} - dmg-builder@26.9.0: - resolution: {integrity: sha512-5uSyg0yY+JRMMGwFjIweaukYkCGcZSZwvH5VPlBHiKkTEP1a1/uV+bs4y+VAxPMgzg67YB4CF1vD4U/2d3chfg==} - - dmg-license@1.0.11: - resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} - engines: {node: '>=8'} - os: [darwin] - hasBin: true + dmg-builder@26.15.3: + resolution: {integrity: sha512-O3zJUFUYHJKgzPqioHxfxzBzlSC1eXCSr79gMSBKBP5AgjjpmrydMsMLotEg9fAJF36vdUncb+4ndRNxoPdlSQ==} dnd-core@16.0.1: resolution: {integrity: sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==} @@ -8243,6 +8038,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + duplexer2@0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -8257,11 +8055,11 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-builder-squirrel-windows@26.9.0: - resolution: {integrity: sha512-Jzsxa3Kjv94ZRZDK7pc8bzu5iglwGsDOBMWTqLpWx2sCEvb3TLW9PMWqOjpDwizqkMBp8GjP6rceLzQYLFIVow==} + electron-builder-squirrel-windows@26.15.3: + resolution: {integrity: sha512-Jc19XPV9y9+2bAdZPkXuVNGNIEFBq9poHC61l8Kv6FdK7DRG3+Ic0rerC0DXOaeHNz8yW0fg/JnF8GQROOF5MA==} - electron-builder@26.9.0: - resolution: {integrity: sha512-7BEeGz8Xlk7Qvitj70nGAQaq7WQIZ2amsDvsyKSZbxgtL2pM9fm/woZrtn0hoID6Fl7wkn456dK3OmtFNzgiOA==} + electron-builder@26.15.3: + resolution: {integrity: sha512-a1KM5heqS3gQCZzizXEI8RjJy3QVogULPdeSknt76uLDpBIW/HDGsMg/XgP0riP6PI9COsRvFITKKGDqA8fJxA==} engines: {node: '>=14.0.0'} hasBin: true @@ -8269,8 +8067,8 @@ packages: resolution: {integrity: sha512-sOUsM3LjZdugatazSQ/XTyNcw8dfvH1SYhXWiJyfYodAAKOZdHs0txPiLDXFzOZbhXgAgshQkshH2ccq0feyLQ==} engines: {node: '>= 14'} - electron-publish@26.9.0: - resolution: {integrity: sha512-gsy+U7JfDuD1lPOrCXeECDQoUsWjFah3s1Fv3pqKnjdJuKYDDvGdvC74kLHVG6nl5G0uQ7YN0eftCQ4rUmhvVw==} + electron-publish@26.15.3: + resolution: {integrity: sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==} electron-to-chromium@1.5.302: resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} @@ -8312,14 +8110,14 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - 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'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -8342,8 +8140,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.3.2: + resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -8366,8 +8164,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.27.3: - resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + esbuild@0.28.2: + resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} engines: {node: '>=18'} hasBin: true @@ -8429,10 +8227,6 @@ packages: resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} engines: {node: '>= 0.10.0'} - extsprintf@1.4.1: - resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} - engines: {'0': node >=0.6.0} - fast-copy@4.0.2: resolution: {integrity: sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==} @@ -8446,24 +8240,20 @@ packages: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-png@8.0.0: resolution: {integrity: sha512-gCysNasJ8KEMgfdYIKd/wTDo6ENK1PWT0RJO7O+0pgmuHPw2O6tA1WvdxFRJoLf9V8yFYpG0FA1YgI8X97OhJA==} fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-uri@3.1.5: + resolution: {integrity: sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==} - fast-xml-parser@5.3.6: - resolution: {integrity: sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==} - hasBin: true + fast-xml-builder@1.3.1: + resolution: {integrity: sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug==} - fast-xml-parser@5.3.7: - resolution: {integrity: sha512-JzVLro9NQv92pOM/jTCR6mHlJh2FGwtomH8ZQjhFj/R29P2Fnj38OgPJVtcvYw6SuKClhgYuwUZf5b3rd8u2mA==} + fast-xml-parser@5.11.1: + resolution: {integrity: sha512-TBw6K/fxoQGGjCmZDw9w/ZwP3uDcnTM4YH/g+PFRWr8sbe5idXtxNN6vITh4+1ruCZaho6uBFurElsA7F0zzgw==} hasBin: true fastq@1.20.1: @@ -8518,8 +8308,8 @@ packages: flatbuffers@25.9.23: resolution: {integrity: sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ==} - follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -8531,8 +8321,8 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} engines: {node: '>= 6'} formatly@0.3.0: @@ -8572,8 +8362,12 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} - fs-extra@11.3.5: - resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} + fs-extra@11.3.1: + resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} + engines: {node: '>=14.14'} + + fs-extra@11.4.0: + resolution: {integrity: sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==} engines: {node: '>=14.14'} fs-extra@7.0.1: @@ -8591,11 +8385,6 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -8701,8 +8490,8 @@ packages: handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - happy-dom@20.7.0: - resolution: {integrity: sha512-hR/uLYQdngTyEfxnOoa+e6KTcfBFyc1hgFj/Cc144A5JJUuHFYqIEBDcD4FeGqUeKLRZqJ9eN9u7/GDjYEgS1g==} + happy-dom@20.12.0: + resolution: {integrity: sha512-7uMYJu2SEwwL8vVcKp0C0lnt6d2LSGGe+T+oY79PiCJNNSgFpbxW8n5KuzpDQvrU4mt+fYiK1+Jy7Z2v39YR6g==} engines: {node: '>=20.0.0'} has-flag@4.0.0: @@ -8720,8 +8509,8 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} headers-polyfill@4.0.3: @@ -8736,8 +8525,8 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hono@4.12.2: - resolution: {integrity: sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==} + hono@4.13.5: + resolution: {integrity: sha512-O6+/eCYRkzzzy0rPWwKLiGBR1nFuUPZynnwjxN1MBA62NNqbT0wQEzQyK2gSO5yDIDB336sXQleAhOHrzlYyKw==} engines: {node: '>=16.9.0'} hosted-git-info@4.1.0: @@ -8782,8 +8571,8 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} - http-proxy-middleware@2.0.9: - resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==} + http-proxy-middleware@2.0.10: + resolution: {integrity: sha512-RKzRWNPxUZqbuk3BC5mGVJbBnWgr+diEnjJexIOytFbBzDy88Fbh/YvBr3DsNrl1jYAfjWfpATEv0NO35FDuPQ==} engines: {node: '>=12.0.0'} peerDependencies: '@types/express': ^4.17.13 @@ -8811,19 +8600,10 @@ packages: resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} engines: {node: '>=10.18'} - iconv-corefoundation@1.1.7: - resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} - engines: {node: ^8.11.2 || >=10} - os: [darwin] - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - icss-replace-symbols@1.1.0: resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} @@ -8880,6 +8660,10 @@ packages: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} + engines: {node: '>= 0.4'} + is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -8943,6 +8727,9 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-unsafe@2.0.2: + resolution: {integrity: sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ==} + is-url@1.2.4: resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} @@ -9017,6 +8804,10 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + jose@5.10.0: resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} @@ -9042,8 +8833,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.3.2: + resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} hasBin: true jsdom@28.1.0: @@ -9070,9 +8861,6 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -9097,16 +8885,16 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - knip@5.85.0: - resolution: {integrity: sha512-V2kyON+DZiYdNNdY6GALseiNCwX7dYdpz9Pv85AUn69Gk0UKCts+glOKWfe5KmaMByRjM9q17Mzj/KinTVOyxg==} + knip@5.88.1: + resolution: {integrity: sha512-tpy5o7zu1MjawVkLPuahymVJekYY3kYjvzcoInhIchgePxTlo+api90tBv2KfhAIe5uXh+mez1tAfmbv8/TiZg==} engines: {node: '>=18.18.0'} hasBin: true peerDependencies: '@types/node': '>=18' typescript: '>=5.0.4 <7' - launch-editor@2.13.0: - resolution: {integrity: sha512-u+9asUHMJ99lA15VRMXw5XKfySFR9dGXwgsgS14YTbUq3GITP58mIM32At90P5fZ+MUId5Yw+IwI/yKub7jnCQ==} + launch-editor@2.14.1: + resolution: {integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==} lazy-val@1.0.5: resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} @@ -9232,8 +9020,8 @@ packages: lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} @@ -9264,6 +9052,10 @@ packages: resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} engines: {node: 20 || >=22} + lru-cache@11.5.2: + resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -9313,8 +9105,8 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - mdn-data@2.12.2: - resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} @@ -9389,19 +9181,19 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimatch@10.2.2: - resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} engines: {node: 18 || 20 || >=22} minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - minimatch@5.1.7: - resolution: {integrity: sha512-FjiwU9HaHW6YB3H4a1sFudnv93lvydNjz2lmyUXR6IwKhGI+bgL3SOZrBGn6kvvX2pJvhEkGSGjyTHN47O4rqA==} + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} engines: {node: '>=10'} - minimatch@9.0.6: - resolution: {integrity: sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: @@ -9510,11 +9302,8 @@ packages: n-gram@2.0.2: resolution: {integrity: sha512-S24aGsn+HLBxUGVAUFOwGpKs7LBcG4RudKU//eWzt/mQ97/NMKQxDWHyHx63UNWk/OOdihgmzoETn1tf5nQDzQ==} - nanoid@2.1.11: - resolution: {integrity: sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.18: + resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -9538,13 +9327,10 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - node-abi@4.31.0: - resolution: {integrity: sha512-Erq5w/t3syw3s4sDsUaX4QttIdBPsGKTT1DTRsCkTonGggczhlDKm/wDX3o+HPJpQ41EjXCbcmXf0tgr5YZJXw==} + node-abi@4.35.0: + resolution: {integrity: sha512-ymk4aIzxdPopw2giv8Fs1Ec6vybGkjmyxUwVqhkI4MCy2tVfXdkOGGWieWVjL0THgH+7a8lRdevyupoYj3Js/Q==} engines: {node: '>=22.12.0'} - node-addon-api@1.7.2: - resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} - node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} @@ -9555,10 +9341,6 @@ packages: node-api-version@0.2.1: resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} - node-forge@1.3.3: - resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==} - engines: {node: '>= 6.13.0'} - node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true @@ -9568,11 +9350,14 @@ packages: engines: {node: ^20.17.0 || >=22.9.0} hasBin: true + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} - nodemailer@8.0.1: - resolution: {integrity: sha512-5kcldIXmaEjZcHR6F28IKGSgpmZHaF1IXLWFTG+Xh3S+Cce4MiakLtWY+PlBU69fLbRa8HlaGIrC/QolUpHkhg==} + nodemailer@9.0.6: + resolution: {integrity: sha512-IQUGFdhdGwI9+AWX+FpUt4DLmvFaOjTMEoneTIWX/RXxuy1TdenPwWrvFMSfLkPKl+HQEXWuSAxEMMbPYXtBmg==} engines: {node: '>=6.0.0'} nopt@9.0.0: @@ -9646,8 +9431,8 @@ packages: outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} - oxc-resolver@11.18.0: - resolution: {integrity: sha512-Fv/b05AfhpYoCDvsog6tgsDm2yIwIeJafpMFLncNwKHRYu+Y1xQu5Q/rgUn7xBfuhNgjtPO7C0jCf7p2fLDj1g==} + oxc-resolver@11.24.2: + resolution: {integrity: sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==} p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} @@ -9687,8 +9472,8 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse5@8.0.0: - resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parse5@8.0.1: + resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} @@ -9701,6 +9486,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-expression-matcher@1.6.2: + resolution: {integrity: sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ==} + engines: {node: '>=14.0.0'} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -9720,8 +9509,8 @@ packages: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} - path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@0.1.13: + resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -9774,12 +9563,12 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} engines: {node: '>=12'} pino-abstract-transport@3.0.0: @@ -9796,19 +9585,9 @@ packages: resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} hasBin: true - pixelmatch@7.1.0: - resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} - hasBin: true - - playwright-core@1.59.1: - resolution: {integrity: sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==} - engines: {node: '>=18'} - hasBin: true - - playwright@1.59.1: - resolution: {integrity: sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==} - engines: {node: '>=18'} - hasBin: true + pkijs@3.4.0: + resolution: {integrity: sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==} + engines: {node: '>=16.0.0'} plist@3.1.0: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} @@ -9822,10 +9601,6 @@ packages: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} - pngjs@7.0.0: - resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} - engines: {node: '>=14.19.0'} - pofile@1.1.4: resolution: {integrity: sha512-r6Q21sKsY1AjTVVjOuU02VYKVNQGJNQHjTIvs4dEbeuuYfxgYk/DGD2mqqq4RDaVkwdSq0VEtmQUOPe/wH8X3g==} @@ -10032,8 +9807,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + postcss@8.5.26: + resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} engines: {node: ^10 || ^12 || >=14} postgres-array@2.0.0: @@ -10119,8 +9894,12 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - qs@6.14.2: - resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} + qs@6.15.3: + resolution: {integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==} + engines: {node: '>=0.6'} + + qs@6.16.0: + resolution: {integrity: sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==} engines: {node: '>=0.6'} queue-microtask@1.2.3: @@ -10338,6 +10117,11 @@ packages: engines: {node: '>= 0.4'} hasBin: true + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} + engines: {node: '>= 0.4'} + hasBin: true + responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} @@ -10369,8 +10153,8 @@ packages: resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} engines: {node: '>=8.0'} - rollup@4.59.0: - resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} + rollup@4.63.1: + resolution: {integrity: sha512-3Df9jsstwhccuEfmAMi9l8XUh/GOkVObmFTU7CCVBysEbcOZLl84jCtaAZMcPiMz2EGKsATzQcU+Xr3n/wU6cg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -10431,9 +10215,9 @@ packages: select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} + selfsigned@5.5.0: + resolution: {integrity: sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==} + engines: {node: '>=18'} semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} @@ -10465,9 +10249,14 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sharp@0.34.5: - resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + sharp@0.35.4: + resolution: {integrity: sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==} + engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -10477,12 +10266,12 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.3: - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + shell-quote@1.10.0: + resolution: {integrity: sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==} engines: {node: '>= 0.4'} - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} side-channel-map@1.0.1: @@ -10493,8 +10282,8 @@ packages: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} engines: {node: '>= 0.4'} - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} engines: {node: '>= 0.4'} siginfo@2.0.0: @@ -10515,20 +10304,8 @@ packages: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} - sirv@3.0.2: - resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} - engines: {node: '>=18'} - - slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - smol-toml@1.6.0: - resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==} + smol-toml@1.8.0: + resolution: {integrity: sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==} engines: {node: '>= 18'} snake-case@3.0.4: @@ -10587,8 +10364,8 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@4.2.0: + resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} stream-browserify@3.0.0: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} @@ -10634,8 +10411,8 @@ packages: '@types/node': optional: true - strnum@2.1.2: - resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==} + strnum@2.4.2: + resolution: {integrity: sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw==} style-mod@4.1.3: resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} @@ -10655,8 +10432,8 @@ packages: svg-parser@2.0.4: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - svgo@3.3.2: - resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + svgo@3.3.5: + resolution: {integrity: sha512-8SQMzdrvWaD8deUmrnYB+ASyxBVgWUOilg+A75nE/76WdLpj6LopCwiAVvkzkcqy/9b7t2Mg7faFLjg0ZRcZ3w==} engines: {node: '>=14.0.0'} hasBin: true @@ -10684,8 +10461,8 @@ packages: tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - tar@7.5.16: - resolution: {integrity: sha512-56adEpPMouktRlBLXiaYFFzZ/3+JXa8P9n7WbR+ibIjtviN55mEaOkiysCnPnWm+7kkui1Dn8J9l+g6zV8731w==} + tar@7.5.22: + resolution: {integrity: sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==} engines: {node: '>=18'} temp-dir@3.0.0: @@ -10749,8 +10526,12 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + tinyrainbow@3.1.1: + resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==} engines: {node: '>=14.0.0'} tlds@1.261.0: @@ -10760,10 +10541,17 @@ packages: tldts-core@7.0.23: resolution: {integrity: sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==} + tldts-core@7.4.11: + resolution: {integrity: sha512-CW3WN2rIIE/Of21mulhgnGOwoDyEFNygyIBOONSdyAuSATgMMUCpLeUlB+E8sAwA5xRV9hYPl+kyZ9citHCaKg==} + tldts@7.0.23: resolution: {integrity: sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==} hasBin: true + tldts@7.4.11: + resolution: {integrity: sha512-aBiNayCfTQxuIJBm06M+xR14cYaYlDlSXZbgsnKzKNxDKUVq7KFwTjwBSsb7m9Y5xO8WfPnBc63WaYFMTGlvqw==} + hasBin: true + tmp-promise@3.0.3: resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} @@ -10787,6 +10575,10 @@ packages: resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} engines: {node: '>=16'} + tough-cookie@6.0.2: + resolution: {integrity: sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==} + engines: {node: '>=16'} + tr46@6.0.0: resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} @@ -10896,6 +10688,10 @@ packages: uint8arrays@3.0.0: resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} + unbash@2.2.0: + resolution: {integrity: sha512-X2wH19RAPZE3+ldGicOkoj/SIA83OIxcJ6Cuaw23hf8Xc6fQpvZXY0SftE2JgS0QhYLUG4uwodSI3R53keyh7w==} + engines: {node: '>=14'} + undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -10905,12 +10701,8 @@ packages: undici-types@7.18.2: resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} - undici@6.23.0: - resolution: {integrity: sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==} - engines: {node: '>=18.17'} - - 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.29.0: @@ -10963,6 +10755,9 @@ packages: until-async@3.0.2: resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} + unzipper@0.12.5: + resolution: {integrity: sha512-tXYOi9R57Uj/2Z25SOs5RRSzq886MBQj2gY8dPL+xl/kv6s6SvByoKfAtvfVeEuhntWDgjd2o9p2lb4TVPAz0A==} + update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true @@ -10975,9 +10770,6 @@ packages: upng-js@2.1.0: resolution: {integrity: sha512-d3xzZzpMP64YkjP5pr8gNyvBt7dLk/uGI67EctzDuVp4lCZyVMo0aJO6l/VDlgbInJYDY6cnClLoBp29eKWI6g==} - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - urlpattern-polyfill@10.1.0: resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} @@ -11002,12 +10794,12 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + uuid@11.1.1: + resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} hasBin: true - valibot@1.2.0: - resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} + valibot@1.4.2: + resolution: {integrity: sha512-gjdCvJ6d3RyHAneqxMYMW9QMCwYMb3jpOO0IyHZV1bnRHFBHrX3VkIILt5XYR0WhwHiH7Mty8ovuPZ/O3gamrg==} peerDependencies: typescript: '>=5' peerDependenciesMeta: @@ -11026,17 +10818,13 @@ packages: resolution: {integrity: sha512-rG1pdRLpl5B/FeV2NS9Ewp4qpo3TzxN0rmwp5e284Ee/hhDITUn15eNeoCUp2hUi8DSf6JEMpbx2I3vuRitafg==} engines: {node: '>=18.0.0 <=22.16.0'} - verror@1.10.1: - resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} - engines: {node: '>=0.6.0'} - vite-tsconfig-paths@6.1.1: resolution: {integrity: sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==} peerDependencies: vite: '*' - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + vite@7.3.6: + resolution: {integrity: sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -11075,20 +10863,23 @@ packages: yaml: optional: true - vitest@4.0.18: - resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} + vitest@4.1.11: + resolution: {integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.18 - '@vitest/browser-preview': 4.0.18 - '@vitest/browser-webdriverio': 4.0.18 - '@vitest/ui': 4.0.18 + '@vitest/browser-playwright': 4.1.11 + '@vitest/browser-preview': 4.1.11 + '@vitest/browser-webdriverio': 4.1.11 + '@vitest/coverage-istanbul': 4.1.11 + '@vitest/coverage-v8': 4.1.11 + '@vitest/ui': 4.1.11 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -11102,6 +10893,10 @@ packages: optional: true '@vitest/browser-webdriverio': optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true '@vitest/ui': optional: true happy-dom: @@ -11126,6 +10921,9 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + webcrypto-core@1.9.2: + resolution: {integrity: sha512-gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q==} + webidl-conversions@8.0.1: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} @@ -11144,8 +10942,8 @@ packages: webpack: optional: true - webpack-dev-server@5.2.2: - resolution: {integrity: sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==} + webpack-dev-server@5.2.6: + resolution: {integrity: sha512-HNLRmamRvVavZQ+avceZifmv8hmdUjg43t6MI4SqJDwFdW7RPQwH5vzGhDRZSX59SgfbeHhLnq3g+uooWo7pVw==} engines: {node: '>= 18.12.0'} hasBin: true peerDependencies: @@ -11161,8 +10959,8 @@ packages: resolution: {integrity: sha512-5ZZY1+lGq8LEKuDlg9M2RPJHlH3R7OVwyHqMcUsLKCgd9Wvf+QrFTCItkXXYPmrJn8H6gRLXbSgxLLdexiqHxw==} engines: {node: '>=6.0.0', npm: '>=3.10.0'} - websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + websocket-driver@0.7.5: + resolution: {integrity: sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA==} engines: {node: '>=0.8.0'} websocket-extensions@0.1.4: @@ -11223,8 +11021,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + ws@7.5.13: + resolution: {integrity: sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -11235,8 +11033,8 @@ packages: utf-8-validate: optional: true - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + ws@8.21.3: + resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -11255,6 +11053,10 @@ packages: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} + xml-naming@0.3.0: + resolution: {integrity: sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==} + engines: {node: '>=16.0.0'} + xmlbuilder@15.1.1: resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} engines: {node: '>=8.0'} @@ -11286,12 +11088,12 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + yaml@1.10.3: + resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true @@ -11335,8 +11137,6 @@ packages: snapshots: - 7zip-bin@5.2.0: {} - '@acemir/cssom@0.9.31': optional: true @@ -11548,22 +11348,25 @@ snapshots: '@arborium/zsh@2.16.0': {} - '@asamuzakjp/css-color@5.0.1': + '@asamuzakjp/css-color@5.1.11': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@asamuzakjp/generational-cache': 1.0.1 + '@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-color-parser': 4.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-tokenizer': 4.0.0 - lru-cache: 11.2.6 optional: true '@asamuzakjp/dom-selector@6.8.1': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 - css-tree: 3.1.0 + css-tree: 3.2.1 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.2.6 + lru-cache: 11.5.2 + optional: true + + '@asamuzakjp/generational-cache@1.0.1': optional: true '@asamuzakjp/nwsapi@2.3.9': @@ -11583,7 +11386,7 @@ snapshots: '@atproto-labs/fetch': 0.2.3 '@atproto-labs/pipe': 0.1.1 ipaddr.js: 2.3.0 - undici: 6.23.0 + undici: 6.28.0 '@atproto-labs/fetch@0.2.3': dependencies: @@ -11667,519 +11470,189 @@ snapshots: '@atproto/lexicon': 0.6.1 zod: 3.25.76 - '@aws-crypto/crc32@5.2.0': + '@aws-sdk/checksums@3.1000.29': dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.1 + '@aws-sdk/core': 3.977.9 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-crypto/crc32c@5.2.0': + '@aws-sdk/client-s3@3.1121.0': dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.1 + '@aws-sdk/checksums': 3.1000.29 + '@aws-sdk/core': 3.977.9 + '@aws-sdk/credential-provider-node': 3.972.81 + '@aws-sdk/middleware-sdk-s3': 3.972.75 + '@aws-sdk/signature-v4-multi-region': 3.996.46 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/fetch-http-handler': 5.7.2 + '@smithy/node-http-handler': 4.11.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-crypto/sha1-browser@5.2.0': + '@aws-sdk/core@3.977.9': dependencies: - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-locate-window': 3.965.4 - '@smithy/util-utf8': 2.3.0 + '@aws-sdk/types': 3.974.5 + '@aws-sdk/xml-builder': 3.972.40 + '@aws/lambda-invoke-store': 0.3.0 + '@smithy/core': 3.33.3 + '@smithy/signature-v4': 5.7.3 + '@smithy/types': 4.17.2 + bowser: 2.14.1 tslib: 2.8.1 - '@aws-crypto/sha256-browser@5.2.0': + '@aws-sdk/credential-provider-env@3.972.70': dependencies: - '@aws-crypto/sha256-js': 5.2.0 - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-locate-window': 3.965.4 - '@smithy/util-utf8': 2.3.0 + '@aws-sdk/core': 3.977.9 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-crypto/sha256-js@5.2.0': + '@aws-sdk/credential-provider-http@3.972.72': dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.1 + '@aws-sdk/core': 3.977.9 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/fetch-http-handler': 5.7.2 + '@smithy/node-http-handler': 4.11.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-crypto/supports-web-crypto@5.2.0': + '@aws-sdk/credential-provider-ini@3.973.15': dependencies: + '@aws-sdk/core': 3.977.9 + '@aws-sdk/credential-provider-env': 3.972.70 + '@aws-sdk/credential-provider-http': 3.972.72 + '@aws-sdk/credential-provider-login': 3.972.77 + '@aws-sdk/credential-provider-process': 3.972.70 + '@aws-sdk/credential-provider-sso': 3.973.14 + '@aws-sdk/credential-provider-web-identity': 3.972.76 + '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/credential-provider-imds': 4.5.2 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-crypto/util@5.2.0': + '@aws-sdk/credential-provider-login@3.972.77': dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/util-utf8': 2.3.0 + '@aws-sdk/core': 3.977.9 + '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/client-s3@3.996.0': + '@aws-sdk/credential-provider-node@3.972.81': dependencies: - '@aws-crypto/sha1-browser': 5.2.0 - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.12 - '@aws-sdk/credential-provider-node': 3.972.11 - '@aws-sdk/middleware-bucket-endpoint': 3.972.3 - '@aws-sdk/middleware-expect-continue': 3.972.3 - '@aws-sdk/middleware-flexible-checksums': 3.972.10 - '@aws-sdk/middleware-host-header': 3.972.3 - '@aws-sdk/middleware-location-constraint': 3.972.3 - '@aws-sdk/middleware-logger': 3.972.3 - '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-sdk-s3': 3.972.12 - '@aws-sdk/middleware-ssec': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.12 - '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/signature-v4-multi-region': 3.996.0 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.996.0 - '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.11 - '@smithy/config-resolver': 4.4.7 - '@smithy/core': 3.23.4 - '@smithy/eventstream-serde-browser': 4.2.9 - '@smithy/eventstream-serde-config-resolver': 4.3.9 - '@smithy/eventstream-serde-node': 4.2.9 - '@smithy/fetch-http-handler': 5.3.10 - '@smithy/hash-blob-browser': 4.2.10 - '@smithy/hash-node': 4.2.9 - '@smithy/hash-stream-node': 4.2.9 - '@smithy/invalid-dependency': 4.2.9 - '@smithy/md5-js': 4.2.9 - '@smithy/middleware-content-length': 4.2.9 - '@smithy/middleware-endpoint': 4.4.18 - '@smithy/middleware-retry': 4.4.35 - '@smithy/middleware-serde': 4.2.10 - '@smithy/middleware-stack': 4.2.9 - '@smithy/node-config-provider': 4.3.9 - '@smithy/node-http-handler': 4.4.11 - '@smithy/protocol-http': 5.3.9 - '@smithy/smithy-client': 4.11.7 - '@smithy/types': 4.12.1 - '@smithy/url-parser': 4.2.9 - '@smithy/util-base64': 4.3.1 - '@smithy/util-body-length-browser': 4.2.1 - '@smithy/util-body-length-node': 4.2.2 - '@smithy/util-defaults-mode-browser': 4.3.34 - '@smithy/util-defaults-mode-node': 4.2.37 - '@smithy/util-endpoints': 3.2.9 - '@smithy/util-middleware': 4.2.9 - '@smithy/util-retry': 4.2.9 - '@smithy/util-stream': 4.5.14 - '@smithy/util-utf8': 4.2.1 - '@smithy/util-waiter': 4.2.9 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sso@3.996.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.12 - '@aws-sdk/middleware-host-header': 3.972.3 - '@aws-sdk/middleware-logger': 3.972.3 - '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.12 - '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.996.0 - '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.11 - '@smithy/config-resolver': 4.4.7 - '@smithy/core': 3.23.4 - '@smithy/fetch-http-handler': 5.3.10 - '@smithy/hash-node': 4.2.9 - '@smithy/invalid-dependency': 4.2.9 - '@smithy/middleware-content-length': 4.2.9 - '@smithy/middleware-endpoint': 4.4.18 - '@smithy/middleware-retry': 4.4.35 - '@smithy/middleware-serde': 4.2.10 - '@smithy/middleware-stack': 4.2.9 - '@smithy/node-config-provider': 4.3.9 - '@smithy/node-http-handler': 4.4.11 - '@smithy/protocol-http': 5.3.9 - '@smithy/smithy-client': 4.11.7 - '@smithy/types': 4.12.1 - '@smithy/url-parser': 4.2.9 - '@smithy/util-base64': 4.3.1 - '@smithy/util-body-length-browser': 4.2.1 - '@smithy/util-body-length-node': 4.2.2 - '@smithy/util-defaults-mode-browser': 4.3.34 - '@smithy/util-defaults-mode-node': 4.2.37 - '@smithy/util-endpoints': 3.2.9 - '@smithy/util-middleware': 4.2.9 - '@smithy/util-retry': 4.2.9 - '@smithy/util-utf8': 4.2.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/core@3.973.12': - dependencies: - '@aws-sdk/types': 3.973.1 - '@aws-sdk/xml-builder': 3.972.5 - '@smithy/core': 3.23.4 - '@smithy/node-config-provider': 4.3.9 - '@smithy/property-provider': 4.2.9 - '@smithy/protocol-http': 5.3.9 - '@smithy/signature-v4': 5.3.9 - '@smithy/smithy-client': 4.11.7 - '@smithy/types': 4.12.1 - '@smithy/util-base64': 4.3.1 - '@smithy/util-middleware': 4.2.9 - '@smithy/util-utf8': 4.2.1 + '@aws-sdk/credential-provider-env': 3.972.70 + '@aws-sdk/credential-provider-http': 3.972.72 + '@aws-sdk/credential-provider-ini': 3.973.15 + '@aws-sdk/credential-provider-process': 3.972.70 + '@aws-sdk/credential-provider-sso': 3.973.14 + '@aws-sdk/credential-provider-web-identity': 3.972.76 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/credential-provider-imds': 4.5.2 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/crc64-nvme@3.972.0': + '@aws-sdk/credential-provider-process@3.972.70': dependencies: - '@smithy/types': 4.12.1 + '@aws-sdk/core': 3.977.9 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.10': + '@aws-sdk/credential-provider-sso@3.973.14': dependencies: - '@aws-sdk/core': 3.973.12 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.9 - '@smithy/types': 4.12.1 + '@aws-sdk/core': 3.977.9 + '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/token-providers': 3.1116.0 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.12': + '@aws-sdk/credential-provider-web-identity@3.972.76': dependencies: - '@aws-sdk/core': 3.973.12 - '@aws-sdk/types': 3.973.1 - '@smithy/fetch-http-handler': 5.3.10 - '@smithy/node-http-handler': 4.4.11 - '@smithy/property-provider': 4.2.9 - '@smithy/protocol-http': 5.3.9 - '@smithy/smithy-client': 4.11.7 - '@smithy/types': 4.12.1 - '@smithy/util-stream': 4.5.14 + '@aws-sdk/core': 3.977.9 + '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.972.10': + '@aws-sdk/lib-storage@3.1121.0(@aws-sdk/client-s3@3.1121.0)': dependencies: - '@aws-sdk/core': 3.973.12 - '@aws-sdk/credential-provider-env': 3.972.10 - '@aws-sdk/credential-provider-http': 3.972.12 - '@aws-sdk/credential-provider-login': 3.972.10 - '@aws-sdk/credential-provider-process': 3.972.10 - '@aws-sdk/credential-provider-sso': 3.972.10 - '@aws-sdk/credential-provider-web-identity': 3.972.10 - '@aws-sdk/nested-clients': 3.996.0 - '@aws-sdk/types': 3.973.1 - '@smithy/credential-provider-imds': 4.2.9 - '@smithy/property-provider': 4.2.9 - '@smithy/shared-ini-file-loader': 4.4.4 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-login@3.972.10': - dependencies: - '@aws-sdk/core': 3.973.12 - '@aws-sdk/nested-clients': 3.996.0 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.9 - '@smithy/protocol-http': 5.3.9 - '@smithy/shared-ini-file-loader': 4.4.4 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-node@3.972.11': - dependencies: - '@aws-sdk/credential-provider-env': 3.972.10 - '@aws-sdk/credential-provider-http': 3.972.12 - '@aws-sdk/credential-provider-ini': 3.972.10 - '@aws-sdk/credential-provider-process': 3.972.10 - '@aws-sdk/credential-provider-sso': 3.972.10 - '@aws-sdk/credential-provider-web-identity': 3.972.10 - '@aws-sdk/types': 3.973.1 - '@smithy/credential-provider-imds': 4.2.9 - '@smithy/property-provider': 4.2.9 - '@smithy/shared-ini-file-loader': 4.4.4 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-process@3.972.10': - dependencies: - '@aws-sdk/core': 3.973.12 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.9 - '@smithy/shared-ini-file-loader': 4.4.4 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-sso@3.972.10': - dependencies: - '@aws-sdk/client-sso': 3.996.0 - '@aws-sdk/core': 3.973.12 - '@aws-sdk/token-providers': 3.996.0 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.9 - '@smithy/shared-ini-file-loader': 4.4.4 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-web-identity@3.972.10': - dependencies: - '@aws-sdk/core': 3.973.12 - '@aws-sdk/nested-clients': 3.996.0 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.9 - '@smithy/shared-ini-file-loader': 4.4.4 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/lib-storage@3.996.0(@aws-sdk/client-s3@3.996.0)': - dependencies: - '@aws-sdk/client-s3': 3.996.0 - '@smithy/abort-controller': 4.2.9 - '@smithy/middleware-endpoint': 4.4.18 - '@smithy/smithy-client': 4.11.7 + '@aws-sdk/client-s3': 3.1121.0 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 tslib: 2.8.1 - '@aws-sdk/middleware-bucket-endpoint@3.972.3': + '@aws-sdk/middleware-sdk-s3@3.972.75': dependencies: - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-arn-parser': 3.972.2 - '@smithy/node-config-provider': 4.3.9 - '@smithy/protocol-http': 5.3.9 - '@smithy/types': 4.12.1 - '@smithy/util-config-provider': 4.2.1 + '@aws-sdk/core': 3.977.9 + '@aws-sdk/signature-v4-multi-region': 3.996.46 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/middleware-expect-continue@3.972.3': + '@aws-sdk/nested-clients@3.997.44': dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/protocol-http': 5.3.9 - '@smithy/types': 4.12.1 + '@aws-sdk/core': 3.977.9 + '@aws-sdk/signature-v4-multi-region': 3.996.46 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/fetch-http-handler': 5.7.2 + '@smithy/node-http-handler': 4.11.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/middleware-flexible-checksums@3.972.10': + '@aws-sdk/s3-request-presigner@3.1121.0': dependencies: - '@aws-crypto/crc32': 5.2.0 - '@aws-crypto/crc32c': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.973.12 - '@aws-sdk/crc64-nvme': 3.972.0 - '@aws-sdk/types': 3.973.1 - '@smithy/is-array-buffer': 4.2.1 - '@smithy/node-config-provider': 4.3.9 - '@smithy/protocol-http': 5.3.9 - '@smithy/types': 4.12.1 - '@smithy/util-middleware': 4.2.9 - '@smithy/util-stream': 4.5.14 - '@smithy/util-utf8': 4.2.1 + '@aws-sdk/core': 3.977.9 + '@aws-sdk/signature-v4-multi-region': 3.996.46 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/middleware-host-header@3.972.3': + '@aws-sdk/signature-v4-multi-region@3.996.46': dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/protocol-http': 5.3.9 - '@smithy/types': 4.12.1 + '@aws-sdk/types': 3.974.5 + '@smithy/signature-v4': 5.7.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/middleware-location-constraint@3.972.3': + '@aws-sdk/token-providers@3.1116.0': dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.1 + '@aws-sdk/core': 3.977.9 + '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.972.3': + '@aws-sdk/types@3.974.5': dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.1 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.972.3': + '@aws-sdk/xml-builder@3.972.40': dependencies: - '@aws-sdk/types': 3.973.1 - '@aws/lambda-invoke-store': 0.2.3 - '@smithy/protocol-http': 5.3.9 - '@smithy/types': 4.12.1 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.972.12': - dependencies: - '@aws-sdk/core': 3.973.12 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-arn-parser': 3.972.2 - '@smithy/core': 3.23.4 - '@smithy/node-config-provider': 4.3.9 - '@smithy/protocol-http': 5.3.9 - '@smithy/signature-v4': 5.3.9 - '@smithy/smithy-client': 4.11.7 - '@smithy/types': 4.12.1 - '@smithy/util-config-provider': 4.2.1 - '@smithy/util-middleware': 4.2.9 - '@smithy/util-stream': 4.5.14 - '@smithy/util-utf8': 4.2.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-ssec@3.972.3': - dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-user-agent@3.972.12': - dependencies: - '@aws-sdk/core': 3.973.12 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.996.0 - '@smithy/core': 3.23.4 - '@smithy/protocol-http': 5.3.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@aws-sdk/nested-clients@3.996.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.12 - '@aws-sdk/middleware-host-header': 3.972.3 - '@aws-sdk/middleware-logger': 3.972.3 - '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.12 - '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.996.0 - '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.11 - '@smithy/config-resolver': 4.4.7 - '@smithy/core': 3.23.4 - '@smithy/fetch-http-handler': 5.3.10 - '@smithy/hash-node': 4.2.9 - '@smithy/invalid-dependency': 4.2.9 - '@smithy/middleware-content-length': 4.2.9 - '@smithy/middleware-endpoint': 4.4.18 - '@smithy/middleware-retry': 4.4.35 - '@smithy/middleware-serde': 4.2.10 - '@smithy/middleware-stack': 4.2.9 - '@smithy/node-config-provider': 4.3.9 - '@smithy/node-http-handler': 4.4.11 - '@smithy/protocol-http': 5.3.9 - '@smithy/smithy-client': 4.11.7 - '@smithy/types': 4.12.1 - '@smithy/url-parser': 4.2.9 - '@smithy/util-base64': 4.3.1 - '@smithy/util-body-length-browser': 4.2.1 - '@smithy/util-body-length-node': 4.2.2 - '@smithy/util-defaults-mode-browser': 4.3.34 - '@smithy/util-defaults-mode-node': 4.2.37 - '@smithy/util-endpoints': 3.2.9 - '@smithy/util-middleware': 4.2.9 - '@smithy/util-retry': 4.2.9 - '@smithy/util-utf8': 4.2.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/region-config-resolver@3.972.3': - dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/config-resolver': 4.4.7 - '@smithy/node-config-provider': 4.3.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@aws-sdk/s3-request-presigner@3.996.0': - dependencies: - '@aws-sdk/signature-v4-multi-region': 3.996.0 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-format-url': 3.972.3 - '@smithy/middleware-endpoint': 4.4.18 - '@smithy/protocol-http': 5.3.9 - '@smithy/smithy-client': 4.11.7 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@aws-sdk/signature-v4-multi-region@3.996.0': - dependencies: - '@aws-sdk/middleware-sdk-s3': 3.972.12 - '@aws-sdk/types': 3.973.1 - '@smithy/protocol-http': 5.3.9 - '@smithy/signature-v4': 5.3.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@aws-sdk/token-providers@3.996.0': - dependencies: - '@aws-sdk/core': 3.973.12 - '@aws-sdk/nested-clients': 3.996.0 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.9 - '@smithy/shared-ini-file-loader': 4.4.4 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/types@3.973.1': - dependencies: - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@aws-sdk/util-arn-parser@3.972.2': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-endpoints@3.996.0': - dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.1 - '@smithy/url-parser': 4.2.9 - '@smithy/util-endpoints': 3.2.9 - tslib: 2.8.1 - - '@aws-sdk/util-format-url@3.972.3': - dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/querystring-builder': 4.2.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@aws-sdk/util-locate-window@3.965.4': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-browser@3.972.3': - dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.1 - bowser: 2.14.1 - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-node@3.972.11': - dependencies: - '@aws-sdk/middleware-user-agent': 3.972.12 - '@aws-sdk/types': 3.973.1 - '@smithy/node-config-provider': 4.3.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@aws-sdk/xml-builder@3.972.5': - dependencies: - '@smithy/types': 4.12.1 - fast-xml-parser: 5.3.6 - tslib: 2.8.1 - - '@aws/lambda-invoke-store@0.2.3': {} + '@aws/lambda-invoke-store@0.3.0': {} '@babel/code-frame@7.29.0': dependencies: @@ -12187,16 +11660,22 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 + '@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.0': {} - '@babel/core@7.29.0': + '@babel/core@7.29.6': dependencies: '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 + '@babel/generator': 7.29.8 '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.8 '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 @@ -12217,6 +11696,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 + '@babel/generator@7.29.8': + dependencies: + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.27.3': dependencies: '@babel/types': 7.29.0 @@ -12229,29 +11716,29 @@ snapshots: lru-cache: 5.1.1 semver: 7.7.4 - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.6) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 '@babel/traverse': 7.29.0 semver: 7.7.4 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.4.0 semver: 7.7.4 - '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.0)': + '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 debug: 4.4.3 @@ -12276,9 +11763,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.29.0 @@ -12291,18 +11778,18 @@ snapshots: '@babel/helper-plugin-utils@7.28.6': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 '@babel/traverse': 7.29.0 @@ -12318,8 +11805,12 @@ snapshots: '@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-wrap-function@7.28.6': @@ -12330,561 +11821,565 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helpers@7.28.6': + '@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.8 '@babel/parser@7.29.0': dependencies: '@babel/types': 7.29.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)': + '@babel/parser@7.29.8': dependencies: - '@babel/core': 7.29.0 + '@babel/types': 7.29.8 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.6)': + dependencies: + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 - '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)': + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.6) '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.6) '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/template': 7.28.6 - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)': + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)': + '@babel/plugin-transform-modules-systemjs@7.29.4(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.6) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.6) '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.0)': + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.6) '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)': + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) '@babel/helper-plugin-utils': 7.28.6 - '@babel/preset-env@7.29.0(@babel/core@7.29.0)': + '@babel/preset-env@7.29.0(@babel/core@7.29.6)': dependencies: '@babel/compat-data': 7.29.0 - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) - '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) - '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) - babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.0) - babel-plugin-polyfill-corejs3: 0.14.0(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.0) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.6) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.6) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.6) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.6) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.6) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.6) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-modules-systemjs': 7.29.4(@babel/core@7.29.6) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.6) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.6) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.6) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.6) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.6) + babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.6) + babel-plugin-polyfill-corejs3: 0.14.0(@babel/core@7.29.6) + babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.6) core-js-compat: 3.48.0 semver: 7.7.4 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/types': 7.29.0 esutils: 2.0.3 - '@babel/preset-react@7.28.5(@babel/core@7.29.0)': + '@babel/preset-react@7.28.5(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.6) + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': + '@babel/preset-typescript@7.28.5(@babel/core@7.29.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.6) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.6) transitivePeerDependencies: - supports-color @@ -12898,6 +12393,12 @@ snapshots: '@babel/parser': 7.29.0 '@babel/types': 7.29.0 + '@babel/template@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 + '@babel/traverse@7.29.0': dependencies: '@babel/code-frame': 7.29.0 @@ -12915,6 +12416,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@7.29.8': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@base-ui/react@1.5.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.29.7 @@ -13055,7 +12561,7 @@ snapshots: '@bramus/specificity@2.4.2': dependencies: - css-tree: 3.1.0 + css-tree: 3.2.1 optional: true '@bufbuild/buf-darwin-arm64@1.69.0': @@ -13170,11 +12676,20 @@ snapshots: '@csstools/color-helpers@6.0.2': {} + '@csstools/color-helpers@6.1.1': + optional: true + '@csstools/css-calc@3.1.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-calc@3.3.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 + optional: true + '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/color-helpers': 6.0.2 @@ -13182,11 +12697,21 @@ snapshots: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 + '@csstools/css-color-parser@4.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/color-helpers': 6.1.1 + '@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-tokenizer': 4.0.0 + optional: true + '@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.0.28': + '@csstools/css-syntax-patches-for-csstree@1.1.9(css-tree@3.2.1)': + optionalDependencies: + css-tree: 3.2.1 optional: true '@csstools/css-tokenizer@4.0.0': {} @@ -13196,283 +12721,283 @@ snapshots: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-alpha-function@2.0.3(postcss@8.5.6)': + '@csstools/postcss-alpha-function@2.0.3(postcss@8.5.26)': dependencies: '@csstools/css-color-parser': 4.0.2(@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-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-cascade-layers@6.0.0(postcss@8.5.6)': + '@csstools/postcss-cascade-layers@6.0.0(postcss@8.5.26)': dependencies: '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 - '@csstools/postcss-color-function-display-p3-linear@2.0.2(postcss@8.5.6)': + '@csstools/postcss-color-function-display-p3-linear@2.0.2(postcss@8.5.26)': dependencies: '@csstools/css-color-parser': 4.0.2(@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-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-color-function@5.0.2(postcss@8.5.6)': + '@csstools/postcss-color-function@5.0.2(postcss@8.5.26)': dependencies: '@csstools/css-color-parser': 4.0.2(@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-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-color-mix-function@4.0.2(postcss@8.5.6)': + '@csstools/postcss-color-mix-function@4.0.2(postcss@8.5.26)': dependencies: '@csstools/css-color-parser': 4.0.2(@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-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-color-mix-variadic-function-arguments@2.0.2(postcss@8.5.6)': + '@csstools/postcss-color-mix-variadic-function-arguments@2.0.2(postcss@8.5.26)': dependencies: '@csstools/css-color-parser': 4.0.2(@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-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-content-alt-text@3.0.0(postcss@8.5.6)': + '@csstools/postcss-content-alt-text@3.0.0(postcss@8.5.26)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-contrast-color-function@3.0.2(postcss@8.5.6)': + '@csstools/postcss-contrast-color-function@3.0.2(postcss@8.5.26)': dependencies: '@csstools/css-color-parser': 4.0.2(@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-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-exponential-functions@3.0.1(postcss@8.5.6)': + '@csstools/postcss-exponential-functions@3.0.1(postcss@8.5.26)': dependencies: '@csstools/css-calc': 3.1.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-tokenizer': 4.0.0 - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-font-format-keywords@5.0.0(postcss@8.5.6)': + '@csstools/postcss-font-format-keywords@5.0.0(postcss@8.5.26)': dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 postcss-value-parser: 4.2.0 - '@csstools/postcss-font-width-property@1.0.0(postcss@8.5.6)': + '@csstools/postcss-font-width-property@1.0.0(postcss@8.5.26)': dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-gamut-mapping@3.0.2(postcss@8.5.6)': + '@csstools/postcss-gamut-mapping@3.0.2(postcss@8.5.26)': dependencies: '@csstools/css-color-parser': 4.0.2(@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-tokenizer': 4.0.0 - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-gradients-interpolation-method@6.0.2(postcss@8.5.6)': + '@csstools/postcss-gradients-interpolation-method@6.0.2(postcss@8.5.26)': dependencies: '@csstools/css-color-parser': 4.0.2(@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-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-hwb-function@5.0.2(postcss@8.5.6)': + '@csstools/postcss-hwb-function@5.0.2(postcss@8.5.26)': dependencies: '@csstools/css-color-parser': 4.0.2(@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-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-ic-unit@5.0.0(postcss@8.5.6)': + '@csstools/postcss-ic-unit@5.0.0(postcss@8.5.26)': dependencies: - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 postcss-value-parser: 4.2.0 - '@csstools/postcss-initial@3.0.0(postcss@8.5.6)': + '@csstools/postcss-initial@3.0.0(postcss@8.5.26)': dependencies: - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-is-pseudo-class@6.0.0(postcss@8.5.6)': + '@csstools/postcss-is-pseudo-class@6.0.0(postcss@8.5.26)': dependencies: '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 - '@csstools/postcss-light-dark-function@3.0.0(postcss@8.5.6)': + '@csstools/postcss-light-dark-function@3.0.0(postcss@8.5.26)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-logical-float-and-clear@4.0.0(postcss@8.5.6)': + '@csstools/postcss-logical-float-and-clear@4.0.0(postcss@8.5.26)': dependencies: - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-logical-overflow@3.0.0(postcss@8.5.6)': + '@csstools/postcss-logical-overflow@3.0.0(postcss@8.5.26)': dependencies: - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-logical-overscroll-behavior@3.0.0(postcss@8.5.6)': + '@csstools/postcss-logical-overscroll-behavior@3.0.0(postcss@8.5.26)': dependencies: - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-logical-resize@4.0.0(postcss@8.5.6)': + '@csstools/postcss-logical-resize@4.0.0(postcss@8.5.26)': dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-value-parser: 4.2.0 - '@csstools/postcss-logical-viewport-units@4.0.0(postcss@8.5.6)': + '@csstools/postcss-logical-viewport-units@4.0.0(postcss@8.5.26)': dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-media-minmax@3.0.1(postcss@8.5.6)': + '@csstools/postcss-media-minmax@3.0.1(postcss@8.5.26)': dependencies: '@csstools/css-calc': 3.1.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-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) - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-media-queries-aspect-ratio-number-values@4.0.0(postcss@8.5.6)': + '@csstools/postcss-media-queries-aspect-ratio-number-values@4.0.0(postcss@8.5.26)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@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) - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-mixins@1.0.0(postcss@8.5.6)': + '@csstools/postcss-mixins@1.0.0(postcss@8.5.26)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-nested-calc@5.0.0(postcss@8.5.6)': + '@csstools/postcss-nested-calc@5.0.0(postcss@8.5.26)': dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 postcss-value-parser: 4.2.0 - '@csstools/postcss-normalize-display-values@5.0.1(postcss@8.5.6)': + '@csstools/postcss-normalize-display-values@5.0.1(postcss@8.5.26)': dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-value-parser: 4.2.0 - '@csstools/postcss-oklab-function@5.0.2(postcss@8.5.6)': + '@csstools/postcss-oklab-function@5.0.2(postcss@8.5.26)': dependencies: '@csstools/css-color-parser': 4.0.2(@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-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-position-area-property@2.0.0(postcss@8.5.6)': + '@csstools/postcss-position-area-property@2.0.0(postcss@8.5.26)': dependencies: - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-progressive-custom-properties@5.0.0(postcss@8.5.6)': + '@csstools/postcss-progressive-custom-properties@5.0.0(postcss@8.5.26)': dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-value-parser: 4.2.0 - '@csstools/postcss-property-rule-prelude-list@2.0.0(postcss@8.5.6)': + '@csstools/postcss-property-rule-prelude-list@2.0.0(postcss@8.5.26)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-random-function@3.0.1(postcss@8.5.6)': + '@csstools/postcss-random-function@3.0.1(postcss@8.5.26)': dependencies: '@csstools/css-calc': 3.1.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-tokenizer': 4.0.0 - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-relative-color-syntax@4.0.2(postcss@8.5.6)': + '@csstools/postcss-relative-color-syntax@4.0.2(postcss@8.5.26)': dependencies: '@csstools/css-color-parser': 4.0.2(@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-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - '@csstools/postcss-scope-pseudo-class@5.0.0(postcss@8.5.6)': + '@csstools/postcss-scope-pseudo-class@5.0.0(postcss@8.5.26)': dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 - '@csstools/postcss-sign-functions@2.0.1(postcss@8.5.6)': + '@csstools/postcss-sign-functions@2.0.1(postcss@8.5.26)': dependencies: '@csstools/css-calc': 3.1.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-tokenizer': 4.0.0 - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-stepped-value-functions@5.0.1(postcss@8.5.6)': + '@csstools/postcss-stepped-value-functions@5.0.1(postcss@8.5.26)': dependencies: '@csstools/css-calc': 3.1.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-tokenizer': 4.0.0 - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-syntax-descriptor-syntax-production@2.0.0(postcss@8.5.6)': + '@csstools/postcss-syntax-descriptor-syntax-production@2.0.0(postcss@8.5.26)': dependencies: '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-system-ui-font-family@2.0.0(postcss@8.5.6)': + '@csstools/postcss-system-ui-font-family@2.0.0(postcss@8.5.26)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-text-decoration-shorthand@5.0.3(postcss@8.5.6)': + '@csstools/postcss-text-decoration-shorthand@5.0.3(postcss@8.5.26)': dependencies: '@csstools/color-helpers': 6.0.2 - postcss: 8.5.6 + postcss: 8.5.26 postcss-value-parser: 4.2.0 - '@csstools/postcss-trigonometric-functions@5.0.1(postcss@8.5.6)': + '@csstools/postcss-trigonometric-functions@5.0.1(postcss@8.5.26)': dependencies: '@csstools/css-calc': 3.1.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-tokenizer': 4.0.0 - postcss: 8.5.6 + postcss: 8.5.26 - '@csstools/postcss-unset-value@5.0.0(postcss@8.5.6)': + '@csstools/postcss-unset-value@5.0.0(postcss@8.5.26)': dependencies: - postcss: 8.5.6 + postcss: 8.5.26 '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.1)': dependencies: @@ -13482,32 +13007,27 @@ snapshots: dependencies: postcss-selector-parser: 7.1.1 - '@csstools/utilities@3.0.0(postcss@8.5.6)': + '@csstools/utilities@3.0.0(postcss@8.5.26)': dependencies: - postcss: 8.5.6 + postcss: 8.5.26 '@date-fns/tz@1.4.1': {} - '@develar/schema-utils@2.6.5': - dependencies: - ajv: 6.15.0 - ajv-keywords: 3.5.2(ajv@6.15.0) - '@discoveryjs/json-ext@0.5.7': {} '@elastic/elasticsearch@9.3.2': dependencies: - '@elastic/transport': 9.3.3 + '@elastic/transport': 9.4.0 apache-arrow: 21.1.0 tslib: 2.8.1 transitivePeerDependencies: - '@75lb/nature' - supports-color - '@elastic/transport@9.3.3': + '@elastic/transport@9.4.0': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) debug: 4.4.3 hpagent: 1.2.0 ms: 2.1.3 @@ -13573,15 +13093,15 @@ snapshots: fs-extra: 10.1.0 isbinaryfile: 4.0.10 minimist: 1.2.8 - plist: 3.1.0 + plist: 3.1.1 transitivePeerDependencies: - supports-color - '@electron/rebuild@4.0.4': + '@electron/rebuild@4.2.0': dependencies: '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3 - node-abi: 4.31.0 + node-abi: 4.35.0 node-api-version: 0.2.1 node-gyp: 12.4.0 read-binary-file-arch: 1.0.6 @@ -13594,9 +13114,9 @@ snapshots: '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3 dir-compare: 4.2.0 - fs-extra: 11.3.5 - minimatch: 9.0.6 - plist: 3.1.0 + fs-extra: 11.4.0 + minimatch: 9.0.9 + plist: 3.1.1 transitivePeerDependencies: - supports-color @@ -13604,25 +13124,30 @@ snapshots: dependencies: cross-dirname: 0.1.0 debug: 4.4.3 - fs-extra: 11.3.5 + fs-extra: 11.4.0 minimist: 1.2.8 postject: 1.0.0-alpha.6 transitivePeerDependencies: - supports-color optional: true - '@emnapi/core@1.8.1': + '@emnapi/core@1.11.2': dependencies: - '@emnapi/wasi-threads': 1.1.0 + '@emnapi/wasi-threads': 1.2.2 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.8.1': + '@emnapi/runtime@1.11.2': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.1.0': + '@emnapi/runtime@1.11.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.2': dependencies: tslib: 2.8.1 optional: true @@ -13635,7 +13160,7 @@ snapshots: '@esbuild/aix-ppc64@0.27.2': optional: true - '@esbuild/aix-ppc64@0.27.3': + '@esbuild/aix-ppc64@0.28.2': optional: true '@esbuild/android-arm64@0.25.12': @@ -13644,7 +13169,7 @@ snapshots: '@esbuild/android-arm64@0.27.2': optional: true - '@esbuild/android-arm64@0.27.3': + '@esbuild/android-arm64@0.28.2': optional: true '@esbuild/android-arm@0.25.12': @@ -13653,7 +13178,7 @@ snapshots: '@esbuild/android-arm@0.27.2': optional: true - '@esbuild/android-arm@0.27.3': + '@esbuild/android-arm@0.28.2': optional: true '@esbuild/android-x64@0.25.12': @@ -13662,7 +13187,7 @@ snapshots: '@esbuild/android-x64@0.27.2': optional: true - '@esbuild/android-x64@0.27.3': + '@esbuild/android-x64@0.28.2': optional: true '@esbuild/darwin-arm64@0.25.12': @@ -13671,7 +13196,7 @@ snapshots: '@esbuild/darwin-arm64@0.27.2': optional: true - '@esbuild/darwin-arm64@0.27.3': + '@esbuild/darwin-arm64@0.28.2': optional: true '@esbuild/darwin-x64@0.25.12': @@ -13680,7 +13205,7 @@ snapshots: '@esbuild/darwin-x64@0.27.2': optional: true - '@esbuild/darwin-x64@0.27.3': + '@esbuild/darwin-x64@0.28.2': optional: true '@esbuild/freebsd-arm64@0.25.12': @@ -13689,7 +13214,7 @@ snapshots: '@esbuild/freebsd-arm64@0.27.2': optional: true - '@esbuild/freebsd-arm64@0.27.3': + '@esbuild/freebsd-arm64@0.28.2': optional: true '@esbuild/freebsd-x64@0.25.12': @@ -13698,7 +13223,7 @@ snapshots: '@esbuild/freebsd-x64@0.27.2': optional: true - '@esbuild/freebsd-x64@0.27.3': + '@esbuild/freebsd-x64@0.28.2': optional: true '@esbuild/linux-arm64@0.25.12': @@ -13707,7 +13232,7 @@ snapshots: '@esbuild/linux-arm64@0.27.2': optional: true - '@esbuild/linux-arm64@0.27.3': + '@esbuild/linux-arm64@0.28.2': optional: true '@esbuild/linux-arm@0.25.12': @@ -13716,7 +13241,7 @@ snapshots: '@esbuild/linux-arm@0.27.2': optional: true - '@esbuild/linux-arm@0.27.3': + '@esbuild/linux-arm@0.28.2': optional: true '@esbuild/linux-ia32@0.25.12': @@ -13725,7 +13250,7 @@ snapshots: '@esbuild/linux-ia32@0.27.2': optional: true - '@esbuild/linux-ia32@0.27.3': + '@esbuild/linux-ia32@0.28.2': optional: true '@esbuild/linux-loong64@0.25.12': @@ -13734,7 +13259,7 @@ snapshots: '@esbuild/linux-loong64@0.27.2': optional: true - '@esbuild/linux-loong64@0.27.3': + '@esbuild/linux-loong64@0.28.2': optional: true '@esbuild/linux-mips64el@0.25.12': @@ -13743,7 +13268,7 @@ snapshots: '@esbuild/linux-mips64el@0.27.2': optional: true - '@esbuild/linux-mips64el@0.27.3': + '@esbuild/linux-mips64el@0.28.2': optional: true '@esbuild/linux-ppc64@0.25.12': @@ -13752,7 +13277,7 @@ snapshots: '@esbuild/linux-ppc64@0.27.2': optional: true - '@esbuild/linux-ppc64@0.27.3': + '@esbuild/linux-ppc64@0.28.2': optional: true '@esbuild/linux-riscv64@0.25.12': @@ -13761,7 +13286,7 @@ snapshots: '@esbuild/linux-riscv64@0.27.2': optional: true - '@esbuild/linux-riscv64@0.27.3': + '@esbuild/linux-riscv64@0.28.2': optional: true '@esbuild/linux-s390x@0.25.12': @@ -13770,7 +13295,7 @@ snapshots: '@esbuild/linux-s390x@0.27.2': optional: true - '@esbuild/linux-s390x@0.27.3': + '@esbuild/linux-s390x@0.28.2': optional: true '@esbuild/linux-x64@0.25.12': @@ -13779,7 +13304,7 @@ snapshots: '@esbuild/linux-x64@0.27.2': optional: true - '@esbuild/linux-x64@0.27.3': + '@esbuild/linux-x64@0.28.2': optional: true '@esbuild/netbsd-arm64@0.25.12': @@ -13788,7 +13313,7 @@ snapshots: '@esbuild/netbsd-arm64@0.27.2': optional: true - '@esbuild/netbsd-arm64@0.27.3': + '@esbuild/netbsd-arm64@0.28.2': optional: true '@esbuild/netbsd-x64@0.25.12': @@ -13797,7 +13322,7 @@ snapshots: '@esbuild/netbsd-x64@0.27.2': optional: true - '@esbuild/netbsd-x64@0.27.3': + '@esbuild/netbsd-x64@0.28.2': optional: true '@esbuild/openbsd-arm64@0.25.12': @@ -13806,7 +13331,7 @@ snapshots: '@esbuild/openbsd-arm64@0.27.2': optional: true - '@esbuild/openbsd-arm64@0.27.3': + '@esbuild/openbsd-arm64@0.28.2': optional: true '@esbuild/openbsd-x64@0.25.12': @@ -13815,7 +13340,7 @@ snapshots: '@esbuild/openbsd-x64@0.27.2': optional: true - '@esbuild/openbsd-x64@0.27.3': + '@esbuild/openbsd-x64@0.28.2': optional: true '@esbuild/openharmony-arm64@0.25.12': @@ -13824,7 +13349,7 @@ snapshots: '@esbuild/openharmony-arm64@0.27.2': optional: true - '@esbuild/openharmony-arm64@0.27.3': + '@esbuild/openharmony-arm64@0.28.2': optional: true '@esbuild/sunos-x64@0.25.12': @@ -13833,7 +13358,7 @@ snapshots: '@esbuild/sunos-x64@0.27.2': optional: true - '@esbuild/sunos-x64@0.27.3': + '@esbuild/sunos-x64@0.28.2': optional: true '@esbuild/win32-arm64@0.25.12': @@ -13842,7 +13367,7 @@ snapshots: '@esbuild/win32-arm64@0.27.2': optional: true - '@esbuild/win32-arm64@0.27.3': + '@esbuild/win32-arm64@0.28.2': optional: true '@esbuild/win32-ia32@0.25.12': @@ -13851,7 +13376,7 @@ snapshots: '@esbuild/win32-ia32@0.27.2': optional: true - '@esbuild/win32-ia32@0.27.3': + '@esbuild/win32-ia32@0.28.2': optional: true '@esbuild/win32-x64@0.25.12': @@ -13860,10 +13385,12 @@ snapshots: '@esbuild/win32-x64@0.27.2': optional: true - '@esbuild/win32-x64@0.27.3': + '@esbuild/win32-x64@0.28.2': optional: true - '@exodus/bytes@1.14.1': + '@exodus/bytes@1.15.1(@noble/hashes@2.4.0)': + optionalDependencies: + '@noble/hashes': 2.4.0 optional: true '@floating-ui/core@1.7.4': @@ -14011,104 +13538,114 @@ snapshots: '@hexagon/base64@1.1.28': {} - '@hono/node-server@1.19.9(patch_hash=8736af0d82dad75a667b7daed93f88c00065adc9a809d526353e290b150827ed)(hono@4.12.2)': + '@hono/node-server@1.19.17(patch_hash=71b3d7e8aa963d17fd5b48a0bb317e3ae0f2415c079f76c745b6a3bd1ace6a14)(hono@4.13.5)': dependencies: - hono: 4.12.2 + hono: 4.13.5 - '@img/colour@1.0.0': {} + '@img/colour@1.1.0': {} - '@img/sharp-darwin-arm64@0.34.5': + '@img/sharp-darwin-arm64@0.35.4': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-arm64': 1.3.3 optional: true - '@img/sharp-darwin-x64@0.34.5': + '@img/sharp-darwin-x64@0.35.4': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.3.3 optional: true - '@img/sharp-libvips-darwin-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-arm@1.2.4': - optional: true - - '@img/sharp-libvips-linux-ppc64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-riscv64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-s390x@1.2.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.2.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - optional: true - - '@img/sharp-linux-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 - optional: true - - '@img/sharp-linux-arm@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.4 - optional: true - - '@img/sharp-linux-ppc64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.4 - optional: true - - '@img/sharp-linux-riscv64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.2.4 - optional: true - - '@img/sharp-linux-s390x@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.4 - optional: true - - '@img/sharp-linux-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - optional: true - - '@img/sharp-wasm32@0.34.5': + '@img/sharp-freebsd-wasm32@0.35.4': dependencies: - '@emnapi/runtime': 1.8.1 + '@img/sharp-wasm32': 0.35.4 optional: true - '@img/sharp-win32-arm64@0.34.5': + '@img/sharp-libvips-darwin-arm64@1.3.3': optional: true - '@img/sharp-win32-ia32@0.34.5': + '@img/sharp-libvips-darwin-x64@1.3.3': optional: true - '@img/sharp-win32-x64@0.34.5': + '@img/sharp-libvips-linux-arm64@1.3.3': + optional: true + + '@img/sharp-libvips-linux-arm@1.3.3': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.3.3': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.3.3': + optional: true + + '@img/sharp-libvips-linux-s390x@1.3.3': + optional: true + + '@img/sharp-libvips-linux-x64@1.3.3': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.3.3': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.3.3': + optional: true + + '@img/sharp-linux-arm64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.3.3 + optional: true + + '@img/sharp-linux-arm@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.3.3 + optional: true + + '@img/sharp-linux-ppc64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.3.3 + optional: true + + '@img/sharp-linux-riscv64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.3.3 + optional: true + + '@img/sharp-linux-s390x@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.3.3 + optional: true + + '@img/sharp-linux-x64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.3.3 + optional: true + + '@img/sharp-linuxmusl-arm64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.3.3 + optional: true + + '@img/sharp-linuxmusl-x64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.3.3 + optional: true + + '@img/sharp-wasm32@0.35.4': + dependencies: + '@emnapi/runtime': 1.11.3 + optional: true + + '@img/sharp-webcontainers-wasm32@0.35.4': + dependencies: + '@img/sharp-wasm32': 0.35.4 + optional: true + + '@img/sharp-win32-arm64@0.35.4': + optional: true + + '@img/sharp-win32-ia32@0.35.4': + optional: true + + '@img/sharp-win32-x64@0.35.4': optional: true '@inquirer/ansi@1.0.2': {} @@ -14586,8 +14123,8 @@ snapshots: '@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@5.9.3)': dependencies: - '@babel/core': 7.29.0 - '@babel/runtime': 7.28.6 + '@babel/core': 7.29.6 + '@babel/runtime': 7.29.7 '@babel/types': 7.29.0 '@lingui/conf': 5.9.2(typescript@5.9.3) '@lingui/core': 5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0) @@ -14600,10 +14137,10 @@ snapshots: '@lingui/cli@5.9.2(babel-plugin-macros@3.1.0)(typescript@5.9.3)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 '@babel/generator': 7.29.1 '@babel/parser': 7.29.0 - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.7 '@babel/types': 7.29.0 '@lingui/babel-plugin-extract-messages': 5.9.2 '@lingui/babel-plugin-lingui-macro': 5.9.2(babel-plugin-macros@3.1.0)(typescript@5.9.3) @@ -14634,7 +14171,7 @@ snapshots: '@lingui/conf@5.9.2(typescript@5.9.3)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.7 cosmiconfig: 8.3.6(typescript@5.9.3) jest-validate: 29.7.0 jiti: 2.6.1 @@ -14644,7 +14181,7 @@ snapshots: '@lingui/core@5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.7 '@lingui/message-utils': 5.9.2 optionalDependencies: '@lingui/babel-plugin-lingui-macro': 5.9.2(babel-plugin-macros@3.1.0)(typescript@5.9.3) @@ -14666,7 +14203,7 @@ snapshots: '@lingui/react@5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0)(react@19.2.4)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.7 '@lingui/core': 5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0) react: 19.2.4 optionalDependencies: @@ -14715,7 +14252,7 @@ snapshots: dependencies: debug: 4.4.3 fs-extra: 9.1.0 - lodash: 4.17.23 + lodash: 4.18.1 tmp-promise: 3.0.3 transitivePeerDependencies: - supports-color @@ -14782,22 +14319,31 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 - '@napi-rs/wasm-runtime@1.0.7': - dependencies: - '@emnapi/core': 1.8.1 - '@emnapi/runtime': 1.8.1 - '@tybys/wasm-util': 0.10.1 + '@napi-rs/lzma-linux-x64-gnu@1.5.1': optional: true - '@napi-rs/wasm-runtime@1.1.1': + '@napi-rs/wasm-runtime@1.0.7': dependencies: - '@emnapi/core': 1.8.1 - '@emnapi/runtime': 1.8.1 - '@tybys/wasm-util': 0.10.1 + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.3 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@tybys/wasm-util': 0.10.3 optional: true '@neon-rs/load@0.1.82': {} + '@noble/hashes@1.4.0': {} + + '@noble/hashes@2.4.0': {} + + '@nodable/entities@3.0.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -14821,73 +14367,72 @@ snapshots: '@opentelemetry/api@1.9.0': {} - '@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.39.0 '@opentelemetry/semantic-conventions@1.39.0': {} - '@oxc-resolver/binding-android-arm-eabi@11.18.0': + '@oxc-resolver/binding-android-arm-eabi@11.24.2': optional: true - '@oxc-resolver/binding-android-arm64@11.18.0': + '@oxc-resolver/binding-android-arm64@11.24.2': optional: true - '@oxc-resolver/binding-darwin-arm64@11.18.0': + '@oxc-resolver/binding-darwin-arm64@11.24.2': optional: true - '@oxc-resolver/binding-darwin-x64@11.18.0': + '@oxc-resolver/binding-darwin-x64@11.24.2': optional: true - '@oxc-resolver/binding-freebsd-x64@11.18.0': + '@oxc-resolver/binding-freebsd-x64@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@11.18.0': + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm-musleabihf@11.18.0': + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@11.18.0': + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm64-musl@11.18.0': + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': optional: true - '@oxc-resolver/binding-linux-ppc64-gnu@11.18.0': + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-riscv64-gnu@11.18.0': + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-riscv64-musl@11.18.0': + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': optional: true - '@oxc-resolver/binding-linux-s390x-gnu@11.18.0': + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-x64-gnu@11.18.0': + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-x64-musl@11.18.0': + '@oxc-resolver/binding-linux-x64-musl@11.24.2': optional: true - '@oxc-resolver/binding-openharmony-arm64@11.18.0': + '@oxc-resolver/binding-openharmony-arm64@11.24.2': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.18.0': + '@oxc-resolver/binding-wasm32-wasi@11.24.2': dependencies: - '@napi-rs/wasm-runtime': 1.1.1 + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true - '@oxc-resolver/binding-win32-arm64-msvc@11.18.0': + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': optional: true - '@oxc-resolver/binding-win32-ia32-msvc@11.18.0': - optional: true - - '@oxc-resolver/binding-win32-x64-msvc@11.18.0': + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': optional: true '@parcel/watcher-android-arm64@2.5.6': @@ -14934,7 +14479,7 @@ snapshots: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 - picomatch: 4.0.3 + picomatch: 4.0.7 optionalDependencies: '@parcel/watcher-android-arm64': 2.5.6 '@parcel/watcher-darwin-arm64': 2.5.6 @@ -14984,14 +14529,14 @@ snapshots: '@peculiar/asn1-pkcs8': 2.6.1 '@peculiar/asn1-rsa': 2.6.1 '@peculiar/asn1-schema': 2.6.0 - asn1js: 3.0.7 + asn1js: 3.0.10 tslib: 2.8.1 '@peculiar/asn1-pkcs8@2.6.1': dependencies: '@peculiar/asn1-schema': 2.6.0 '@peculiar/asn1-x509': 2.6.1 - asn1js: 3.0.7 + asn1js: 3.0.10 tslib: 2.8.1 '@peculiar/asn1-pkcs9@2.6.1': @@ -15018,11 +14563,17 @@ snapshots: pvtsutils: 1.3.6 tslib: 2.8.1 + '@peculiar/asn1-schema@2.9.4': + dependencies: + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 + '@peculiar/asn1-x509-attr@2.6.1': dependencies: '@peculiar/asn1-schema': 2.6.0 '@peculiar/asn1-x509': 2.6.1 - asn1js: 3.0.7 + asn1js: 3.0.10 tslib: 2.8.1 '@peculiar/asn1-x509@2.6.1': @@ -15032,6 +14583,22 @@ snapshots: pvtsutils: 1.3.6 tslib: 2.8.1 + '@peculiar/json-schema@1.1.12': + dependencies: + tslib: 2.8.1 + + '@peculiar/utils@2.0.3': + dependencies: + tslib: 2.8.1 + + '@peculiar/webcrypto@1.7.1': + dependencies: + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/json-schema': 1.1.12 + '@peculiar/utils': 2.0.3 + tslib: 2.8.1 + webcrypto-core: 1.9.2 + '@peculiar/x509@1.14.3': dependencies: '@peculiar/asn1-cms': 2.6.1 @@ -16281,79 +15848,79 @@ snapshots: '@react-types/shared': 3.33.0(react@19.2.4) react: 19.2.4 - '@rollup/rollup-android-arm-eabi@4.59.0': + '@rollup/rollup-android-arm-eabi@4.63.1': optional: true - '@rollup/rollup-android-arm64@4.59.0': + '@rollup/rollup-android-arm64@4.63.1': optional: true - '@rollup/rollup-darwin-arm64@4.59.0': + '@rollup/rollup-darwin-arm64@4.63.1': optional: true - '@rollup/rollup-darwin-x64@4.59.0': + '@rollup/rollup-darwin-x64@4.63.1': optional: true - '@rollup/rollup-freebsd-arm64@4.59.0': + '@rollup/rollup-freebsd-arm64@4.63.1': optional: true - '@rollup/rollup-freebsd-x64@4.59.0': + '@rollup/rollup-freebsd-x64@4.63.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + '@rollup/rollup-linux-arm-gnueabihf@4.63.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.59.0': + '@rollup/rollup-linux-arm-musleabihf@4.63.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.59.0': + '@rollup/rollup-linux-arm64-gnu@4.63.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.59.0': + '@rollup/rollup-linux-arm64-musl@4.63.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.59.0': + '@rollup/rollup-linux-loong64-gnu@4.63.1': optional: true - '@rollup/rollup-linux-loong64-musl@4.59.0': + '@rollup/rollup-linux-loong64-musl@4.63.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.59.0': + '@rollup/rollup-linux-ppc64-gnu@4.63.1': optional: true - '@rollup/rollup-linux-ppc64-musl@4.59.0': + '@rollup/rollup-linux-ppc64-musl@4.63.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.59.0': + '@rollup/rollup-linux-riscv64-gnu@4.63.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.59.0': + '@rollup/rollup-linux-riscv64-musl@4.63.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.59.0': + '@rollup/rollup-linux-s390x-gnu@4.63.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.59.0': + '@rollup/rollup-linux-x64-gnu@4.63.1': optional: true - '@rollup/rollup-linux-x64-musl@4.59.0': + '@rollup/rollup-linux-x64-musl@4.63.1': optional: true - '@rollup/rollup-openbsd-x64@4.59.0': + '@rollup/rollup-openbsd-x64@4.63.1': optional: true - '@rollup/rollup-openharmony-arm64@4.59.0': + '@rollup/rollup-openharmony-arm64@4.63.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.59.0': + '@rollup/rollup-win32-arm64-msvc@4.63.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.59.0': + '@rollup/rollup-win32-ia32-msvc@4.63.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.59.0': + '@rollup/rollup-win32-x64-gnu@4.63.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.59.0': + '@rollup/rollup-win32-x64-msvc@4.63.1': optional: true '@rspack/binding-darwin-arm64@1.7.6': @@ -16430,10 +15997,10 @@ snapshots: dependencies: '@rspack/core': 1.7.6(@swc/helpers@0.5.19) chokidar: 3.6.0 - http-proxy-middleware: 2.0.9(@types/express@4.17.25) + http-proxy-middleware: 2.0.10(@types/express@4.17.25) p-retry: 6.2.1 - webpack-dev-server: 5.2.2(tslib@2.8.1) - ws: 8.19.0 + webpack-dev-server: 5.2.6(tslib@2.8.1) + ws: 8.21.3 transitivePeerDependencies: - '@types/express' - bufferutil @@ -16463,394 +16030,89 @@ snapshots: '@sindresorhus/is@4.6.0': {} - '@smithy/abort-controller@4.2.9': + '@smithy/core@3.33.3': dependencies: - '@smithy/types': 4.12.1 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@smithy/chunked-blob-reader-native@4.2.2': + '@smithy/credential-provider-imds@4.5.2': dependencies: - '@smithy/util-base64': 4.3.1 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@smithy/chunked-blob-reader@5.2.1': + '@smithy/fetch-http-handler@5.7.2': dependencies: + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@smithy/config-resolver@4.4.7': + '@smithy/node-http-handler@4.11.3': dependencies: - '@smithy/node-config-provider': 4.3.9 - '@smithy/types': 4.12.1 - '@smithy/util-config-provider': 4.2.1 - '@smithy/util-endpoints': 3.2.9 - '@smithy/util-middleware': 4.2.9 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@smithy/core@3.23.4': + '@smithy/signature-v4@5.7.3': dependencies: - '@smithy/middleware-serde': 4.2.10 - '@smithy/protocol-http': 5.3.9 - '@smithy/types': 4.12.1 - '@smithy/util-base64': 4.3.1 - '@smithy/util-body-length-browser': 4.2.1 - '@smithy/util-middleware': 4.2.9 - '@smithy/util-stream': 4.5.14 - '@smithy/util-utf8': 4.2.1 - '@smithy/uuid': 1.1.1 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.2.9': - dependencies: - '@smithy/node-config-provider': 4.3.9 - '@smithy/property-provider': 4.2.9 - '@smithy/types': 4.12.1 - '@smithy/url-parser': 4.2.9 - tslib: 2.8.1 - - '@smithy/eventstream-codec@4.2.9': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.12.1 - '@smithy/util-hex-encoding': 4.2.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-browser@4.2.9': - dependencies: - '@smithy/eventstream-serde-universal': 4.2.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-config-resolver@4.3.9': - dependencies: - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-node@4.2.9': - dependencies: - '@smithy/eventstream-serde-universal': 4.2.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-universal@4.2.9': - dependencies: - '@smithy/eventstream-codec': 4.2.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/fetch-http-handler@5.3.10': - dependencies: - '@smithy/protocol-http': 5.3.9 - '@smithy/querystring-builder': 4.2.9 - '@smithy/types': 4.12.1 - '@smithy/util-base64': 4.3.1 - tslib: 2.8.1 - - '@smithy/hash-blob-browser@4.2.10': - dependencies: - '@smithy/chunked-blob-reader': 5.2.1 - '@smithy/chunked-blob-reader-native': 4.2.2 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/hash-node@4.2.9': - dependencies: - '@smithy/types': 4.12.1 - '@smithy/util-buffer-from': 4.2.1 - '@smithy/util-utf8': 4.2.1 - tslib: 2.8.1 - - '@smithy/hash-stream-node@4.2.9': - dependencies: - '@smithy/types': 4.12.1 - '@smithy/util-utf8': 4.2.1 - tslib: 2.8.1 - - '@smithy/invalid-dependency@4.2.9': - dependencies: - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/is-array-buffer@2.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/is-array-buffer@4.2.1': - dependencies: - tslib: 2.8.1 - - '@smithy/md5-js@4.2.9': - dependencies: - '@smithy/types': 4.12.1 - '@smithy/util-utf8': 4.2.1 - tslib: 2.8.1 - - '@smithy/middleware-content-length@4.2.9': - dependencies: - '@smithy/protocol-http': 5.3.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/middleware-endpoint@4.4.18': - dependencies: - '@smithy/core': 3.23.4 - '@smithy/middleware-serde': 4.2.10 - '@smithy/node-config-provider': 4.3.9 - '@smithy/shared-ini-file-loader': 4.4.4 - '@smithy/types': 4.12.1 - '@smithy/url-parser': 4.2.9 - '@smithy/util-middleware': 4.2.9 - tslib: 2.8.1 - - '@smithy/middleware-retry@4.4.35': - dependencies: - '@smithy/node-config-provider': 4.3.9 - '@smithy/protocol-http': 5.3.9 - '@smithy/service-error-classification': 4.2.9 - '@smithy/smithy-client': 4.11.7 - '@smithy/types': 4.12.1 - '@smithy/util-middleware': 4.2.9 - '@smithy/util-retry': 4.2.9 - '@smithy/uuid': 1.1.1 - tslib: 2.8.1 - - '@smithy/middleware-serde@4.2.10': - dependencies: - '@smithy/protocol-http': 5.3.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/middleware-stack@4.2.9': - dependencies: - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/node-config-provider@4.3.9': - dependencies: - '@smithy/property-provider': 4.2.9 - '@smithy/shared-ini-file-loader': 4.4.4 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/node-http-handler@4.4.11': - dependencies: - '@smithy/abort-controller': 4.2.9 - '@smithy/protocol-http': 5.3.9 - '@smithy/querystring-builder': 4.2.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/property-provider@4.2.9': - dependencies: - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/protocol-http@5.3.9': - dependencies: - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/querystring-builder@4.2.9': - dependencies: - '@smithy/types': 4.12.1 - '@smithy/util-uri-escape': 4.2.1 - tslib: 2.8.1 - - '@smithy/querystring-parser@4.2.9': - dependencies: - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/service-error-classification@4.2.9': - dependencies: - '@smithy/types': 4.12.1 - - '@smithy/shared-ini-file-loader@4.4.4': - dependencies: - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/signature-v4@5.3.9': - dependencies: - '@smithy/is-array-buffer': 4.2.1 - '@smithy/protocol-http': 5.3.9 - '@smithy/types': 4.12.1 - '@smithy/util-hex-encoding': 4.2.1 - '@smithy/util-middleware': 4.2.9 - '@smithy/util-uri-escape': 4.2.1 - '@smithy/util-utf8': 4.2.1 - tslib: 2.8.1 - - '@smithy/smithy-client@4.11.7': - dependencies: - '@smithy/core': 3.23.4 - '@smithy/middleware-endpoint': 4.4.18 - '@smithy/middleware-stack': 4.2.9 - '@smithy/protocol-http': 5.3.9 - '@smithy/types': 4.12.1 - '@smithy/util-stream': 4.5.14 - tslib: 2.8.1 - - '@smithy/types@4.12.1': - dependencies: - tslib: 2.8.1 - - '@smithy/url-parser@4.2.9': - dependencies: - '@smithy/querystring-parser': 4.2.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/util-base64@4.3.1': - dependencies: - '@smithy/util-buffer-from': 4.2.1 - '@smithy/util-utf8': 4.2.1 - tslib: 2.8.1 - - '@smithy/util-body-length-browser@4.2.1': - dependencies: - tslib: 2.8.1 - - '@smithy/util-body-length-node@4.2.2': - dependencies: - tslib: 2.8.1 - - '@smithy/util-buffer-from@2.2.0': - dependencies: - '@smithy/is-array-buffer': 2.2.0 - tslib: 2.8.1 - - '@smithy/util-buffer-from@4.2.1': - dependencies: - '@smithy/is-array-buffer': 4.2.1 - tslib: 2.8.1 - - '@smithy/util-config-provider@4.2.1': - dependencies: - tslib: 2.8.1 - - '@smithy/util-defaults-mode-browser@4.3.34': - dependencies: - '@smithy/property-provider': 4.2.9 - '@smithy/smithy-client': 4.11.7 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/util-defaults-mode-node@4.2.37': - dependencies: - '@smithy/config-resolver': 4.4.7 - '@smithy/credential-provider-imds': 4.2.9 - '@smithy/node-config-provider': 4.3.9 - '@smithy/property-provider': 4.2.9 - '@smithy/smithy-client': 4.11.7 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/util-endpoints@3.2.9': - dependencies: - '@smithy/node-config-provider': 4.3.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/util-hex-encoding@4.2.1': - dependencies: - tslib: 2.8.1 - - '@smithy/util-middleware@4.2.9': - dependencies: - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/util-retry@4.2.9': - dependencies: - '@smithy/service-error-classification': 4.2.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/util-stream@4.5.14': - dependencies: - '@smithy/fetch-http-handler': 5.3.10 - '@smithy/node-http-handler': 4.4.11 - '@smithy/types': 4.12.1 - '@smithy/util-base64': 4.3.1 - '@smithy/util-buffer-from': 4.2.1 - '@smithy/util-hex-encoding': 4.2.1 - '@smithy/util-utf8': 4.2.1 - tslib: 2.8.1 - - '@smithy/util-uri-escape@4.2.1': - dependencies: - tslib: 2.8.1 - - '@smithy/util-utf8@2.3.0': - dependencies: - '@smithy/util-buffer-from': 2.2.0 - tslib: 2.8.1 - - '@smithy/util-utf8@4.2.1': - dependencies: - '@smithy/util-buffer-from': 4.2.1 - tslib: 2.8.1 - - '@smithy/util-waiter@4.2.9': - dependencies: - '@smithy/abort-controller': 4.2.9 - '@smithy/types': 4.12.1 - tslib: 2.8.1 - - '@smithy/uuid@1.1.1': + '@smithy/types@4.17.2': dependencies: tslib: 2.8.1 '@standard-schema/spec@1.1.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.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 - '@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.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 - '@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.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 - '@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.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 - '@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.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 - '@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.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 - '@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.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 - '@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.6)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.6 - '@svgr/babel-preset@8.1.0(@babel/core@7.29.0)': + '@svgr/babel-preset@8.1.0(@babel/core@7.29.6)': 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.6 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.6) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.6) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.6) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.6) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.6) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.6) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.6) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.6) '@svgr/core@8.1.0(typescript@5.9.3)': dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.6) camelcase: 6.3.0 cosmiconfig: 8.3.6(typescript@5.9.3) snake-case: 3.0.4 @@ -16865,8 +16127,8 @@ snapshots: '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))': dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.6) '@svgr/core': 8.1.0(typescript@5.9.3) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 @@ -16878,17 +16140,17 @@ snapshots: '@svgr/core': 8.1.0(typescript@5.9.3) cosmiconfig: 8.3.6(typescript@5.9.3) deepmerge: 4.3.1 - svgo: 3.3.2 + svgo: 3.3.5 transitivePeerDependencies: - typescript '@svgr/webpack@8.1.0(typescript@5.9.3)': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.29.0) - '@babel/preset-env': 7.29.0(@babel/core@7.29.0) - '@babel/preset-react': 7.28.5(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.29.6) + '@babel/preset-env': 7.29.0(@babel/core@7.29.6) + '@babel/preset-react': 7.28.5(@babel/core@7.29.6) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.6) '@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-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3) @@ -16983,15 +16245,13 @@ snapshots: '@tanstack/virtual-core@3.13.23': {} - '@trysound/sax@0.2.0': {} - '@ts-morph/common@0.29.0': dependencies: - minimatch: 10.2.2 + minimatch: 10.2.6 path-browserify: 1.0.1 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 - '@tybys/wasm-util@0.10.1': + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 optional: true @@ -17044,6 +16304,8 @@ snapshots: '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} + '@types/events@3.0.3': {} '@types/express-serve-static-core@4.19.8': @@ -17096,10 +16358,6 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node-forge@1.3.14': - dependencies: - '@types/node': 24.10.9 - '@types/node@18.19.130': dependencies: undici-types: 5.26.5 @@ -17125,12 +16383,6 @@ snapshots: pg-protocol: 1.14.0 pg-types: 2.2.0 - '@types/plist@3.0.5': - dependencies: - '@types/node': 24.10.9 - xmlbuilder: 15.1.1 - optional: true - '@types/qrcode@1.5.6': dependencies: '@types/node': 24.10.9 @@ -17188,9 +16440,6 @@ snapshots: '@types/validator@13.15.10': {} - '@types/verror@1.10.11': - optional: true - '@types/whatwg-mimetype@3.0.2': {} '@types/ws@8.18.1': @@ -17272,141 +16521,76 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/browser-playwright@4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(playwright@1.59.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18)': - dependencies: - '@vitest/browser': 4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) - '@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) - playwright: 1.59.1 - tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(tsx@4.21.0)(yaml@2.8.2) - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite - optional: true - - '@vitest/browser-playwright@4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(playwright@1.59.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18)': - dependencies: - '@vitest/browser': 4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) - '@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) - playwright: 1.59.1 - tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite - optional: true - - '@vitest/browser@4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18)': - dependencies: - '@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/utils': 4.0.18 - magic-string: 0.30.21 - pixelmatch: 7.1.0 - pngjs: 7.0.0 - sirv: 3.0.2 - tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(tsx@4.21.0)(yaml@2.8.2) - ws: 8.19.0 - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite - optional: true - - '@vitest/browser@4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18)': - dependencies: - '@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/utils': 4.0.18 - magic-string: 0.30.21 - pixelmatch: 7.1.0 - pngjs: 7.0.0 - sirv: 3.0.2 - tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) - ws: 8.19.0 - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite - optional: true - - '@vitest/coverage-v8@4.0.18(@vitest/browser@4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18))(vitest@4.0.18)': + '@vitest/coverage-v8@4.1.11(vitest@4.1.11)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.18 - ast-v8-to-istanbul: 0.3.11 + '@vitest/utils': 4.1.11 + ast-v8-to-istanbul: 1.0.5 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 magicast: 0.5.2 obug: 2.1.1 - std-env: 3.10.0 - tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) - optionalDependencies: - '@vitest/browser': 4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) + std-env: 4.2.0 + tinyrainbow: 3.1.1 + vitest: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) - '@vitest/expect@4.0.18': + '@vitest/expect@4.1.11': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 chai: 6.2.2 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.1 - '@vitest/mocker@4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.11(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0))': dependencies: - '@vitest/spy': 4.0.18 + '@vitest/spy': 4.1.11 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.12.10(@types/node@25.3.0)(typescript@5.4.5) - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0) - '@vitest/mocker@4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.11(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0))': dependencies: - '@vitest/spy': 4.0.18 + '@vitest/spy': 4.1.11 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.12.10(@types/node@25.3.0)(typescript@5.9.3) - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0) - '@vitest/pretty-format@4.0.18': + '@vitest/pretty-format@4.1.11': dependencies: - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.1 - '@vitest/runner@4.0.18': + '@vitest/runner@4.1.11': dependencies: - '@vitest/utils': 4.0.18 + '@vitest/utils': 4.1.11 pathe: 2.0.3 - '@vitest/snapshot@4.0.18': + '@vitest/snapshot@4.1.11': dependencies: - '@vitest/pretty-format': 4.0.18 + '@vitest/pretty-format': 4.1.11 + '@vitest/utils': 4.1.11 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.0.18': {} + '@vitest/spy@4.1.11': {} - '@vitest/utils@4.0.18': + '@vitest/utils@4.1.11': dependencies: - '@vitest/pretty-format': 4.0.18 - tinyrainbow: 3.0.3 + '@vitest/pretty-format': 4.1.11 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.1 '@vvo/tzdb@6.198.0': {} '@xmldom/xmldom@0.8.13': {} - '@xmldom/xmldom@0.9.10': - optional: true + '@xmldom/xmldom@0.9.10': {} abbrev@4.0.0: {} @@ -17425,7 +16609,7 @@ snapshots: acorn@8.16.0: {} - adm-zip@0.5.16: {} + adm-zip@0.6.0: {} agent-base@7.1.4: {} @@ -17433,26 +16617,15 @@ snapshots: optionalDependencies: ajv: 8.18.0 - ajv-keywords@3.5.2(ajv@6.15.0): - dependencies: - ajv: 6.15.0 - ajv-keywords@5.1.0(ajv@8.18.0): dependencies: ajv: 8.18.0 fast-deep-equal: 3.1.3 - ajv@6.15.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 + fast-uri: 3.1.5 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -17475,7 +16648,9 @@ snapshots: anymatch@3.1.3: dependencies: normalize-path: 3.0.0 - picomatch: 2.3.1 + picomatch: 2.3.2 + + anynum@1.0.1: {} apache-arrow@21.1.0: dependencies: @@ -17491,47 +16666,50 @@ snapshots: transitivePeerDependencies: - '@75lb/nature' - app-builder-bin@5.0.0-alpha.12: {} - - app-builder-lib@26.9.0(dmg-builder@26.9.0)(electron-builder-squirrel-windows@26.9.0): + app-builder-lib@26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3): dependencies: - '@develar/schema-utils': 2.6.5 '@electron/asar': 3.4.1 '@electron/fuses': 1.8.0 '@electron/get': 3.1.0 '@electron/notarize': 2.5.0 '@electron/osx-sign': 1.3.3 - '@electron/rebuild': 4.0.4 + '@electron/rebuild': 4.2.0 '@electron/universal': 2.0.3 '@malept/flatpak-bundler': 0.4.0 + '@noble/hashes': 2.4.0 + '@peculiar/webcrypto': 1.7.1 '@types/fs-extra': 9.0.13 + ajv: 8.18.0 + asn1js: 3.0.10 async-exit-hook: 2.0.1 - builder-util: 26.9.0 - builder-util-runtime: 9.6.0 + builder-util: 26.15.3 + builder-util-runtime: 9.7.0 chromium-pickle-js: 0.2.0 ci-info: 4.3.1 debug: 4.4.3 - dmg-builder: 26.9.0(electron-builder-squirrel-windows@26.9.0) + dmg-builder: 26.15.3(electron-builder-squirrel-windows@26.15.3) dotenv: 16.6.1 dotenv-expand: 11.0.7 ejs: 3.1.10 - electron-builder-squirrel-windows: 26.9.0(dmg-builder@26.9.0) - electron-publish: 26.9.0 + electron-builder-squirrel-windows: 26.15.3(dmg-builder@26.15.3) + electron-publish: 26.15.3 fs-extra: 10.1.0 hosted-git-info: 4.1.0 isbinaryfile: 5.0.7 - jiti: 2.6.1 - js-yaml: 4.1.1 + jiti: 2.7.0 + js-yaml: 4.3.2 json5: 2.2.3 lazy-val: 1.0.5 - minimatch: 10.2.2 + minimatch: 10.2.6 + pkijs: 3.4.0 plist: 3.1.0 proper-lockfile: 4.1.2 resedit: 1.7.2 semver: 7.7.4 - tar: 7.5.16 + tar: 7.5.22 temp-file: 3.4.0 tiny-async-pool: 1.3.0 + unzipper: 0.12.5 which: 5.0.0 transitivePeerDependencies: - supports-color @@ -17542,7 +16720,7 @@ snapshots: graceful-fs: 4.2.11 is-stream: 2.0.1 lazystream: 1.0.1 - lodash: 4.17.23 + lodash: 4.18.1 normalize-path: 3.0.0 readable-stream: 4.7.0 @@ -17572,26 +16750,26 @@ snapshots: array-flatten@1.1.1: {} + asn1js@3.0.10: + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + asn1js@3.0.7: dependencies: pvtsutils: 1.3.6 pvutils: 1.1.5 tslib: 2.8.1 - assert-plus@1.0.0: - optional: true - assertion-error@2.0.1: {} - ast-v8-to-istanbul@0.3.11: + ast-v8-to-istanbul@1.0.5: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 js-tokens: 10.0.0 - astral-regex@2.0.0: - optional: true - async-exit-hook@2.0.1: {} async@3.2.6: {} @@ -17602,47 +16780,49 @@ snapshots: atomic-sleep@1.0.0: {} - autoprefixer@10.4.24(postcss@8.5.6): + autoprefixer@10.4.24(postcss@8.5.26): dependencies: browserslist: 4.28.1 caniuse-lite: 1.0.30001810 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.6 + postcss: 8.5.26 postcss-value-parser: 4.2.0 await-lock@2.2.2: {} + aws4@1.13.2: {} + b4a@1.8.0: {} babel-plugin-macros@3.1.0: dependencies: '@babel/runtime': 7.29.7 cosmiconfig: 7.1.0 - resolve: 1.22.11 + resolve: 1.22.12 optional: true - babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0): + babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.6): dependencies: '@babel/compat-data': 7.29.0 - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.6) semver: 7.7.4 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.14.0(@babel/core@7.29.0): + babel-plugin-polyfill-corejs3@0.14.0(@babel/core@7.29.6): dependencies: - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.6) core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.29.0): + babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.29.6): dependencies: - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) + '@babel/core': 7.29.6 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.6) transitivePeerDependencies: - supports-color @@ -17671,7 +16851,9 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - body-parser@1.20.4: + bluebird@3.7.2: {} + + body-parser@1.20.6: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -17681,7 +16863,7 @@ snapshots: http-errors: 2.0.1 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.14.2 + qs: 6.15.3 raw-body: 2.5.3 type-is: 1.6.18 unpipe: 1.0.0 @@ -17700,16 +16882,16 @@ snapshots: bowser@2.14.1: {} - brace-expansion@1.1.15: + brace-expansion@1.1.18: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.2: + brace-expansion@2.1.4: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.3: + brace-expansion@5.0.9: dependencies: balanced-match: 4.0.4 @@ -17729,6 +16911,10 @@ snapshots: buffer-from@1.1.2: {} + buffer-image-size@0.6.4: + dependencies: + '@types/node': 24.10.9 + buffer@5.6.0: dependencies: base64-js: 1.5.1 @@ -17744,26 +16930,24 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - builder-util-runtime@9.6.0: + builder-util-runtime@9.7.0: dependencies: debug: 4.4.3 sax: 1.6.0 transitivePeerDependencies: - supports-color - builder-util@26.9.0: + builder-util@26.15.3: dependencies: - 7zip-bin: 5.2.0 '@types/debug': 4.1.13 - app-builder-bin: 5.0.0-alpha.12 - builder-util-runtime: 9.6.0 + builder-util-runtime: 9.7.0 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3 fs-extra: 10.1.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 - js-yaml: 4.1.1 + js-yaml: 4.3.2 sanitize-filename: 1.6.4 source-map-support: 0.5.21 stat-mode: 1.0.0 @@ -17778,6 +16962,8 @@ snapshots: bytes@3.1.2: {} + bytestreamjs@2.0.1: {} + cacheable-lookup@5.0.4: {} cacheable-request@7.0.4: @@ -17820,7 +17006,7 @@ snapshots: cassandra-driver@4.8.0: dependencies: '@types/node': 18.19.130 - adm-zip: 0.5.16 + adm-zip: 0.6.0 long: 5.2.5 chai@6.2.2: {} @@ -17876,12 +17062,6 @@ snapshots: dependencies: colors: 1.0.3 - cli-truncate@2.1.0: - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - optional: true - cli-width@4.1.0: {} client-only@0.0.1: {} @@ -18015,9 +17195,6 @@ snapshots: core-js@3.48.0: {} - core-util-is@1.0.2: - optional: true - core-util-is@1.0.3: {} cosmiconfig@7.1.0: @@ -18026,13 +17203,13 @@ snapshots: import-fresh: 3.3.1 parse-json: 5.2.0 path-type: 4.0.0 - yaml: 1.10.2 + yaml: 1.10.3 optional: true cosmiconfig@8.3.6(typescript@5.9.3): dependencies: import-fresh: 3.3.1 - js-yaml: 4.1.1 + js-yaml: 4.3.2 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: @@ -18042,7 +17219,7 @@ snapshots: dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 - js-yaml: 4.1.1 + js-yaml: 4.3.2 parse-json: 5.2.0 optionalDependencies: typescript: 5.9.3 @@ -18054,11 +17231,6 @@ snapshots: crc-32: 1.2.2 readable-stream: 4.7.0 - crc@3.8.0: - dependencies: - buffer: 5.7.1 - optional: true - crelt@1.0.6: {} cross-dirname@0.1.0: @@ -18079,21 +17251,21 @@ snapshots: dependencies: type-fest: 1.4.0 - css-blank-pseudo@8.0.1(postcss@8.5.6): + css-blank-pseudo@8.0.1(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 - css-has-pseudo@8.0.0(postcss@8.5.6): + css-has-pseudo@8.0.0(postcss@8.5.26): dependencies: '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - css-prefers-color-scheme@11.0.0(postcss@8.5.6): + css-prefers-color-scheme@11.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 css-select@5.2.2: dependencies: @@ -18113,9 +17285,9 @@ snapshots: mdn-data: 2.0.30 source-map-js: 1.2.1 - css-tree@3.1.0: + css-tree@3.2.1: dependencies: - mdn-data: 2.12.2 + mdn-data: 2.27.1 source-map-js: 1.2.1 optional: true @@ -18129,20 +17301,20 @@ snapshots: dependencies: css-tree: 2.2.1 - cssstyle@6.1.0: + cssstyle@6.2.0: dependencies: - '@asamuzakjp/css-color': 5.0.1 - '@csstools/css-syntax-patches-for-csstree': 1.0.28 - css-tree: 3.1.0 - lru-cache: 11.2.6 + '@asamuzakjp/css-color': 5.1.11 + '@csstools/css-syntax-patches-for-csstree': 1.1.9(css-tree@3.2.1) + css-tree: 3.2.1 + lru-cache: 11.5.2 optional: true csstype@3.2.3: {} - data-urls@7.0.0: + data-urls@7.0.0(@noble/hashes@2.4.0): dependencies: whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.1 + whatwg-url: 16.0.1(@noble/hashes@2.4.0) transitivePeerDependencies: - '@noble/hashes' optional: true @@ -18229,31 +17401,16 @@ snapshots: minimatch: 3.1.5 p-limit: 3.1.0 - dmg-builder@26.9.0(electron-builder-squirrel-windows@26.9.0): + dmg-builder@26.15.3(electron-builder-squirrel-windows@26.15.3): dependencies: - app-builder-lib: 26.9.0(dmg-builder@26.9.0)(electron-builder-squirrel-windows@26.9.0) - builder-util: 26.9.0 + app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3) + builder-util: 26.15.3 fs-extra: 10.1.0 - iconv-lite: 0.6.3 - js-yaml: 4.1.1 - optionalDependencies: - dmg-license: 1.0.11 + js-yaml: 4.3.2 transitivePeerDependencies: - electron-builder-squirrel-windows - supports-color - dmg-license@1.0.11: - dependencies: - '@types/plist': 3.0.5 - '@types/verror': 1.10.11 - ajv: 6.15.0 - crc: 3.8.0 - iconv-corefoundation: 1.1.7 - plist: 3.1.1 - smart-buffer: 4.2.0 - verror: 1.10.1 - optional: true - dnd-core@16.0.1: dependencies: '@react-dnd/asap': 5.0.2 @@ -18303,6 +17460,10 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + duplexer2@0.1.4: + dependencies: + readable-stream: 2.3.8 + duplexer@0.1.2: {} eastasianwidth@0.2.0: {} @@ -18313,23 +17474,23 @@ snapshots: dependencies: jake: 10.9.4 - electron-builder-squirrel-windows@26.9.0(dmg-builder@26.9.0): + electron-builder-squirrel-windows@26.15.3(dmg-builder@26.15.3): dependencies: - app-builder-lib: 26.9.0(dmg-builder@26.9.0)(electron-builder-squirrel-windows@26.9.0) - builder-util: 26.9.0 + app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3) + builder-util: 26.15.3 electron-winstaller: 5.4.0 transitivePeerDependencies: - dmg-builder - supports-color - electron-builder@26.9.0(electron-builder-squirrel-windows@26.9.0): + electron-builder@26.15.3(electron-builder-squirrel-windows@26.15.3): dependencies: - app-builder-lib: 26.9.0(dmg-builder@26.9.0)(electron-builder-squirrel-windows@26.9.0) - builder-util: 26.9.0 - builder-util-runtime: 9.6.0 + app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3) + builder-util: 26.15.3 + builder-util-runtime: 9.7.0 chalk: 4.1.2 ci-info: 4.4.0 - dmg-builder: 26.9.0(electron-builder-squirrel-windows@26.9.0) + dmg-builder: 26.15.3(electron-builder-squirrel-windows@26.15.3) fs-extra: 10.1.0 lazy-val: 1.0.5 simple-update-notifier: 2.0.0 @@ -18341,13 +17502,14 @@ snapshots: electron-log@5.4.3: optional: true - electron-publish@26.9.0: + electron-publish@26.15.3: dependencies: '@types/fs-extra': 9.0.13 - builder-util: 26.9.0 - builder-util-runtime: 9.6.0 + aws4: 1.13.2 + builder-util: 26.15.3 + builder-util-runtime: 9.7.0 chalk: 4.1.2 - form-data: 4.0.5 + form-data: 4.0.6 fs-extra: 10.1.0 lazy-val: 1.0.5 mime: 2.6.0 @@ -18361,7 +17523,7 @@ snapshots: '@electron/asar': 3.4.1 debug: 4.4.3 fs-extra: 7.0.1 - lodash: 4.17.23 + lodash: 4.18.1 temp: 0.9.4 optionalDependencies: '@electron/windows-sign': 1.2.2 @@ -18382,10 +17544,10 @@ snapshots: emoji-regex@9.2.2: {} - emscripten-wasm-loader@3.0.3: + emscripten-wasm-loader@3.0.3(patch_hash=65d0567cd2da382764aee3839187feb5284662c4a9f0b755f1e52163c5e36399): dependencies: getroot: 1.0.0 - nanoid: 2.1.11 + nanoid: 3.3.18 unixify: 1.0.0 encodeurl@2.0.0: {} @@ -18401,11 +17563,11 @@ snapshots: entities@4.5.0: {} - entities@6.0.1: - optional: true - entities@7.0.1: {} + entities@8.0.0: + optional: true + env-paths@2.2.1: {} env-paths@3.0.0: {} @@ -18420,7 +17582,7 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.7.0: {} + es-module-lexer@2.3.2: {} es-object-atoms@1.1.1: dependencies: @@ -18431,7 +17593,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.4 es6-error@4.1.1: optional: true @@ -18494,34 +17656,34 @@ snapshots: '@esbuild/win32-ia32': 0.27.2 '@esbuild/win32-x64': 0.27.2 - esbuild@0.27.3: + esbuild@0.28.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.3 - '@esbuild/android-arm': 0.27.3 - '@esbuild/android-arm64': 0.27.3 - '@esbuild/android-x64': 0.27.3 - '@esbuild/darwin-arm64': 0.27.3 - '@esbuild/darwin-x64': 0.27.3 - '@esbuild/freebsd-arm64': 0.27.3 - '@esbuild/freebsd-x64': 0.27.3 - '@esbuild/linux-arm': 0.27.3 - '@esbuild/linux-arm64': 0.27.3 - '@esbuild/linux-ia32': 0.27.3 - '@esbuild/linux-loong64': 0.27.3 - '@esbuild/linux-mips64el': 0.27.3 - '@esbuild/linux-ppc64': 0.27.3 - '@esbuild/linux-riscv64': 0.27.3 - '@esbuild/linux-s390x': 0.27.3 - '@esbuild/linux-x64': 0.27.3 - '@esbuild/netbsd-arm64': 0.27.3 - '@esbuild/netbsd-x64': 0.27.3 - '@esbuild/openbsd-arm64': 0.27.3 - '@esbuild/openbsd-x64': 0.27.3 - '@esbuild/openharmony-arm64': 0.27.3 - '@esbuild/sunos-x64': 0.27.3 - '@esbuild/win32-arm64': 0.27.3 - '@esbuild/win32-ia32': 0.27.3 - '@esbuild/win32-x64': 0.27.3 + '@esbuild/aix-ppc64': 0.28.2 + '@esbuild/android-arm': 0.28.2 + '@esbuild/android-arm64': 0.28.2 + '@esbuild/android-x64': 0.28.2 + '@esbuild/darwin-arm64': 0.28.2 + '@esbuild/darwin-x64': 0.28.2 + '@esbuild/freebsd-arm64': 0.28.2 + '@esbuild/freebsd-x64': 0.28.2 + '@esbuild/linux-arm': 0.28.2 + '@esbuild/linux-arm64': 0.28.2 + '@esbuild/linux-ia32': 0.28.2 + '@esbuild/linux-loong64': 0.28.2 + '@esbuild/linux-mips64el': 0.28.2 + '@esbuild/linux-ppc64': 0.28.2 + '@esbuild/linux-riscv64': 0.28.2 + '@esbuild/linux-s390x': 0.28.2 + '@esbuild/linux-x64': 0.28.2 + '@esbuild/netbsd-arm64': 0.28.2 + '@esbuild/netbsd-x64': 0.28.2 + '@esbuild/openbsd-arm64': 0.28.2 + '@esbuild/openbsd-x64': 0.28.2 + '@esbuild/openharmony-arm64': 0.28.2 + '@esbuild/sunos-x64': 0.28.2 + '@esbuild/win32-arm64': 0.28.2 + '@esbuild/win32-ia32': 0.28.2 + '@esbuild/win32-x64': 0.28.2 escalade@3.2.0: {} @@ -18564,7 +17726,7 @@ snapshots: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.4 + body-parser: 1.20.6 content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.7.2 @@ -18581,9 +17743,9 @@ snapshots: methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.12 + path-to-regexp: 0.1.13 proxy-addr: 2.0.7 - qs: 6.14.2 + qs: 6.16.0 range-parser: 1.2.1 safe-buffer: 5.2.1 send: 0.19.2 @@ -18596,9 +17758,6 @@ snapshots: transitivePeerDependencies: - supports-color - extsprintf@1.4.1: - optional: true - fast-copy@4.0.2: {} fast-deep-equal@3.1.3: {} @@ -18613,8 +17772,6 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 - fast-json-stable-stringify@2.1.0: {} - fast-png@8.0.0: dependencies: fflate: 0.8.2 @@ -18622,15 +17779,21 @@ snapshots: fast-safe-stringify@2.1.1: {} - fast-uri@3.1.0: {} + fast-uri@3.1.5: {} - fast-xml-parser@5.3.6: + fast-xml-builder@1.3.1: dependencies: - strnum: 2.1.2 + path-expression-matcher: 1.6.2 + xml-naming: 0.3.0 - fast-xml-parser@5.3.7: + fast-xml-parser@5.11.1: dependencies: - strnum: 2.1.2 + '@nodable/entities': 3.0.0 + fast-xml-builder: 1.3.1 + is-unsafe: 2.0.2 + path-expression-matcher: 1.6.2 + strnum: 2.4.2 + xml-naming: 0.3.0 fastq@1.20.1: dependencies: @@ -18640,21 +17803,21 @@ snapshots: faye-websocket@0.11.4: dependencies: - websocket-driver: 0.7.4 + websocket-driver: 0.7.5 fd-package-json@2.0.0: dependencies: walk-up-path: 4.0.0 - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.7): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.7 fflate@0.8.2: {} filelist@1.0.6: dependencies: - minimatch: 5.1.7 + minimatch: 5.1.9 fill-range@7.1.1: dependencies: @@ -18681,19 +17844,19 @@ snapshots: flatbuffers@25.9.23: {} - follow-redirects@1.15.11: {} + follow-redirects@1.16.0: {} foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.5: + form-data@4.0.6: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 - hasown: 2.0.2 + hasown: 2.0.4 mime-types: 2.1.35 formatly@0.3.0: @@ -18725,7 +17888,13 @@ snapshots: jsonfile: 6.2.1 universalify: 2.0.1 - fs-extra@11.3.5: + fs-extra@11.3.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + + fs-extra@11.4.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.1 @@ -18752,9 +17921,6 @@ snapshots: fs.realpath@1.0.0: {} - fsevents@2.3.2: - optional: true - fsevents@2.3.3: optional: true @@ -18774,7 +17940,7 @@ snapshots: get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.4 math-intrinsics: 1.1.0 get-proto@1.0.1: @@ -18816,7 +17982,7 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 9.0.6 + minimatch: 9.0.9 minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -18825,7 +17991,7 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 4.2.3 - minimatch: 10.2.2 + minimatch: 10.2.6 minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 2.0.2 @@ -18885,14 +18051,15 @@ snapshots: handle-thing@2.0.1: {} - happy-dom@20.7.0: + happy-dom@20.12.0: dependencies: '@types/node': 24.10.9 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 + buffer-image-size: 0.6.4 entities: 7.0.1 whatwg-mimetype: 3.0.0 - ws: 8.19.0 + ws: 8.21.3 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -18910,7 +18077,7 @@ snapshots: dependencies: has-symbols: 1.1.0 - hasown@2.0.2: + hasown@2.0.4: dependencies: function-bind: 1.1.2 @@ -18924,7 +18091,7 @@ snapshots: dependencies: react-is: 16.13.1 - hono@4.12.2: {} + hono@4.13.5: {} hosted-git-info@4.1.0: dependencies: @@ -18939,9 +18106,9 @@ snapshots: hpagent@1.2.0: {} - html-encoding-sniffer@6.0.0: + html-encoding-sniffer@6.0.0(@noble/hashes@2.4.0): dependencies: - '@exodus/bytes': 1.14.1 + '@exodus/bytes': 1.15.1(@noble/hashes@2.4.0) transitivePeerDependencies: - '@noble/hashes' optional: true @@ -18979,7 +18146,7 @@ snapshots: transitivePeerDependencies: - supports-color - http-proxy-middleware@2.0.9(@types/express@4.17.25): + http-proxy-middleware@2.0.10(@types/express@4.17.25): dependencies: '@types/http-proxy': 1.17.17 http-proxy: 1.18.1 @@ -18994,7 +18161,7 @@ snapshots: http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.11 + follow-redirects: 1.16.0 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -19011,32 +18178,22 @@ snapshots: transitivePeerDependencies: - supports-color - hunspell-asm@4.0.2: + hunspell-asm@4.0.2(patch_hash=594ff55f398ab3a575ba1b4d090c4838a26e4251a2f1d65ba0f02d5b098d02ae): dependencies: - emscripten-wasm-loader: 3.0.3 - nanoid: 2.1.11 + emscripten-wasm-loader: 3.0.3(patch_hash=65d0567cd2da382764aee3839187feb5284662c4a9f0b755f1e52163c5e36399) + nanoid: 3.3.18 hyperdyperid@1.2.0: {} - iconv-corefoundation@1.1.7: - dependencies: - cli-truncate: 2.1.0 - node-addon-api: 1.7.2 - optional: true - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - icss-replace-symbols@1.1.0: {} - icss-utils@5.1.0(postcss@8.5.6): + icss-utils@5.1.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 idna-uts46-hx@6.1.1: dependencies: @@ -19091,7 +18248,12 @@ snapshots: is-core-module@2.16.1: dependencies: - hasown: 2.0.2 + hasown: 2.0.4 + + is-core-module@2.16.2: + dependencies: + hasown: 2.0.4 + optional: true is-docker@3.0.0: {} @@ -19130,6 +18292,8 @@ snapshots: is-unicode-supported@0.1.0: {} + is-unsafe@2.0.2: {} + is-url@1.2.4: {} is-wsl@3.1.1: @@ -19196,6 +18360,8 @@ snapshots: jiti@2.6.1: {} + jiti@2.7.0: {} + jose@5.10.0: {} jose@6.1.3: {} @@ -19212,32 +18378,32 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.1.1: + js-yaml@4.3.2: dependencies: argparse: 2.0.1 - jsdom@28.1.0: + jsdom@28.1.0(@noble/hashes@2.4.0): dependencies: '@acemir/cssom': 0.9.31 '@asamuzakjp/dom-selector': 6.8.1 '@bramus/specificity': 2.4.2 - '@exodus/bytes': 1.14.1 - cssstyle: 6.1.0 - data-urls: 7.0.0 + '@exodus/bytes': 1.15.1(@noble/hashes@2.4.0) + cssstyle: 6.2.0 + data-urls: 7.0.0(@noble/hashes@2.4.0) decimal.js: 10.6.0 - html-encoding-sniffer: 6.0.0 + html-encoding-sniffer: 6.0.0(@noble/hashes@2.4.0) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 - parse5: 8.0.0 + parse5: 8.0.1 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 6.0.0 + tough-cookie: 6.0.2 undici: 7.29.0 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.1 + whatwg-url: 16.0.1(@noble/hashes@2.4.0) xml-name-validator: 5.0.0 transitivePeerDependencies: - '@noble/hashes' @@ -19252,8 +18418,6 @@ snapshots: json-parse-even-better-errors@2.3.1: {} - json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} json-stringify-safe@5.0.1: @@ -19279,27 +18443,28 @@ snapshots: dependencies: json-buffer: 3.0.1 - knip@5.85.0(@types/node@25.3.0)(typescript@5.9.3): + knip@5.88.1(@types/node@25.3.0)(typescript@5.9.3): dependencies: '@nodelib/fs.walk': 1.2.8 '@types/node': 25.3.0 fast-glob: 3.3.3 formatly: 0.3.0 jiti: 2.6.1 - js-yaml: 4.1.1 minimist: 1.2.8 - oxc-resolver: 11.18.0 + oxc-resolver: 11.24.2 picocolors: 1.1.1 - picomatch: 4.0.3 - smol-toml: 1.6.0 + picomatch: 4.0.7 + smol-toml: 1.8.0 strip-json-comments: 5.0.3 typescript: 5.9.3 + unbash: 2.2.0 + yaml: 2.9.0 zod: 4.3.6 - launch-editor@2.13.0: + launch-editor@2.14.1: dependencies: picocolors: 1.1.1 - shell-quote: 1.8.3 + shell-quote: 1.10.0 lazy-val@1.0.5: {} @@ -19391,7 +18556,7 @@ snapshots: lodash.isarguments@3.1.0: {} - lodash@4.17.23: {} + lodash@4.18.1: {} log-symbols@4.1.0: dependencies: @@ -19414,6 +18579,9 @@ snapshots: lru-cache@11.2.6: {} + lru-cache@11.5.2: + optional: true + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -19463,7 +18631,7 @@ snapshots: mdn-data@2.0.30: {} - mdn-data@2.12.2: + mdn-data@2.27.1: optional: true media-typer@0.3.0: {} @@ -19496,7 +18664,7 @@ snapshots: micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 mime-db@1.52.0: {} @@ -19524,21 +18692,21 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@10.2.2: + minimatch@10.2.6: dependencies: - brace-expansion: 5.0.3 + brace-expansion: 5.0.9 minimatch@3.1.5: dependencies: - brace-expansion: 1.1.15 + brace-expansion: 1.1.18 - minimatch@5.1.7: + minimatch@5.1.9: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.1.4 - minimatch@9.0.6: + minimatch@9.0.9: dependencies: - brace-expansion: 5.0.3 + brace-expansion: 2.1.4 minimist@1.2.8: {} @@ -19656,9 +18824,7 @@ snapshots: n-gram@2.0.2: {} - nanoid@2.1.11: {} - - nanoid@3.3.11: {} + nanoid@3.3.18: {} nats@2.29.3: dependencies: @@ -19677,13 +18843,10 @@ snapshots: lower-case: 2.0.2 tslib: 2.8.1 - node-abi@4.31.0: + node-abi@4.35.0: dependencies: semver: 7.7.4 - node-addon-api@1.7.2: - optional: true - node-addon-api@7.1.1: {} node-addon-api@8.5.0: {} @@ -19692,8 +18855,6 @@ snapshots: dependencies: semver: 7.7.4 - node-forge@1.3.3: {} - node-gyp-build@4.8.4: {} node-gyp@12.4.0: @@ -19704,14 +18865,16 @@ snapshots: nopt: 9.0.0 proc-log: 6.1.0 semver: 7.7.4 - tar: 7.5.16 - tinyglobby: 0.2.15 - undici: 6.26.0 + tar: 7.5.22 + tinyglobby: 0.2.17 + undici: 6.28.0 which: 6.0.1 + node-int64@0.4.0: {} + node-releases@2.0.27: {} - nodemailer@8.0.1: {} + nodemailer@9.0.6: {} nopt@9.0.0: dependencies: @@ -19779,28 +18942,27 @@ snapshots: outvariant@1.4.3: {} - oxc-resolver@11.18.0: + oxc-resolver@11.24.2: optionalDependencies: - '@oxc-resolver/binding-android-arm-eabi': 11.18.0 - '@oxc-resolver/binding-android-arm64': 11.18.0 - '@oxc-resolver/binding-darwin-arm64': 11.18.0 - '@oxc-resolver/binding-darwin-x64': 11.18.0 - '@oxc-resolver/binding-freebsd-x64': 11.18.0 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.18.0 - '@oxc-resolver/binding-linux-arm-musleabihf': 11.18.0 - '@oxc-resolver/binding-linux-arm64-gnu': 11.18.0 - '@oxc-resolver/binding-linux-arm64-musl': 11.18.0 - '@oxc-resolver/binding-linux-ppc64-gnu': 11.18.0 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.18.0 - '@oxc-resolver/binding-linux-riscv64-musl': 11.18.0 - '@oxc-resolver/binding-linux-s390x-gnu': 11.18.0 - '@oxc-resolver/binding-linux-x64-gnu': 11.18.0 - '@oxc-resolver/binding-linux-x64-musl': 11.18.0 - '@oxc-resolver/binding-openharmony-arm64': 11.18.0 - '@oxc-resolver/binding-wasm32-wasi': 11.18.0 - '@oxc-resolver/binding-win32-arm64-msvc': 11.18.0 - '@oxc-resolver/binding-win32-ia32-msvc': 11.18.0 - '@oxc-resolver/binding-win32-x64-msvc': 11.18.0 + '@oxc-resolver/binding-android-arm-eabi': 11.24.2 + '@oxc-resolver/binding-android-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-x64': 11.24.2 + '@oxc-resolver/binding-freebsd-x64': 11.24.2 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-arm64-musl': 11.24.2 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-musl': 11.24.2 + '@oxc-resolver/binding-linux-s390x-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-musl': 11.24.2 + '@oxc-resolver/binding-openharmony-arm64': 11.24.2 + '@oxc-resolver/binding-wasm32-wasi': 11.24.2 + '@oxc-resolver/binding-win32-arm64-msvc': 11.24.2 + '@oxc-resolver/binding-win32-x64-msvc': 11.24.2 p-cancelable@2.1.1: {} @@ -19839,9 +19001,9 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse5@8.0.0: + parse5@8.0.1: dependencies: - entities: 6.0.1 + entities: 8.0.0 optional: true parseurl@1.3.3: {} @@ -19850,6 +19012,8 @@ snapshots: path-exists@4.0.0: {} + path-expression-matcher@1.6.2: {} + path-is-absolute@1.0.1: {} path-key@3.1.1: {} @@ -19866,7 +19030,7 @@ snapshots: lru-cache: 11.2.6 minipass: 7.1.3 - path-to-regexp@0.1.12: {} + path-to-regexp@0.1.13: {} path-to-regexp@6.3.0: {} @@ -19913,9 +19077,9 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.1: {} + picomatch@2.3.2: {} - picomatch@4.0.3: {} + picomatch@4.0.7: {} pino-abstract-transport@3.0.0: dependencies: @@ -19953,20 +19117,14 @@ snapshots: sonic-boom: 4.2.1 thread-stream: 4.0.0 - pixelmatch@7.1.0: + pkijs@3.4.0: dependencies: - pngjs: 7.0.0 - optional: true - - playwright-core@1.59.1: - optional: true - - playwright@1.59.1: - dependencies: - playwright-core: 1.59.1 - optionalDependencies: - fsevents: 2.3.2 - optional: true + '@noble/hashes': 1.4.0 + asn1js: 3.0.10 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 plist@3.1.0: dependencies: @@ -19979,272 +19137,268 @@ snapshots: '@xmldom/xmldom': 0.9.10 base64-js: 1.5.1 xmlbuilder: 15.1.1 - optional: true pngjs@5.0.0: {} - pngjs@7.0.0: - optional: true - pofile@1.1.4: {} - postcss-attribute-case-insensitive@8.0.0(postcss@8.5.6): + postcss-attribute-case-insensitive@8.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 - postcss-clamp@4.1.0(postcss@8.5.6): + postcss-clamp@4.1.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-value-parser: 4.2.0 - postcss-color-functional-notation@8.0.2(postcss@8.5.6): + postcss-color-functional-notation@8.0.2(postcss@8.5.26): dependencies: '@csstools/css-color-parser': 4.0.2(@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-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - postcss-color-hex-alpha@11.0.0(postcss@8.5.6): + postcss-color-hex-alpha@11.0.0(postcss@8.5.26): dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 postcss-value-parser: 4.2.0 - postcss-color-rebeccapurple@11.0.0(postcss@8.5.6): + postcss-color-rebeccapurple@11.0.0(postcss@8.5.26): dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 postcss-value-parser: 4.2.0 - postcss-custom-media@12.0.1(postcss@8.5.6): + postcss-custom-media@12.0.1(postcss@8.5.26): dependencies: '@csstools/cascade-layer-name-parser': 3.0.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-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) - postcss: 8.5.6 + postcss: 8.5.26 - postcss-custom-properties@15.0.1(postcss@8.5.6): + postcss-custom-properties@15.0.1(postcss@8.5.26): dependencies: '@csstools/cascade-layer-name-parser': 3.0.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-tokenizer': 4.0.0 - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 postcss-value-parser: 4.2.0 - postcss-custom-selectors@9.0.1(postcss@8.5.6): + postcss-custom-selectors@9.0.1(postcss@8.5.26): dependencies: '@csstools/cascade-layer-name-parser': 3.0.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-tokenizer': 4.0.0 - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 - postcss-dir-pseudo-class@10.0.0(postcss@8.5.6): + postcss-dir-pseudo-class@10.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 - postcss-discard-comments@7.0.5(postcss@8.5.6): + postcss-discard-comments@7.0.5(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 - postcss-double-position-gradients@7.0.0(postcss@8.5.6): + postcss-double-position-gradients@7.0.0(postcss@8.5.26): dependencies: - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 postcss-value-parser: 4.2.0 - postcss-focus-visible@11.0.0(postcss@8.5.6): + postcss-focus-visible@11.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 - postcss-focus-within@10.0.0(postcss@8.5.6): + postcss-focus-within@10.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 - postcss-font-variant@5.0.0(postcss@8.5.6): + postcss-font-variant@5.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 - postcss-gap-properties@7.0.0(postcss@8.5.6): + postcss-gap-properties@7.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 - postcss-image-set-function@8.0.0(postcss@8.5.6): + postcss-image-set-function@8.0.0(postcss@8.5.26): dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 postcss-value-parser: 4.2.0 - postcss-lab-function@8.0.2(postcss@8.5.6): + postcss-lab-function@8.0.2(postcss@8.5.26): dependencies: '@csstools/css-color-parser': 4.0.2(@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-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/utilities': 3.0.0(postcss@8.5.26) + postcss: 8.5.26 - postcss-loader@8.2.1(@rspack/core@1.7.6(@swc/helpers@0.5.19))(postcss@8.5.6)(typescript@5.9.3): + postcss-loader@8.2.1(@rspack/core@1.7.6(@swc/helpers@0.5.19))(postcss@8.5.26)(typescript@5.9.3): dependencies: cosmiconfig: 9.0.0(typescript@5.9.3) jiti: 2.6.1 - postcss: 8.5.6 + postcss: 8.5.26 semver: 7.7.4 optionalDependencies: '@rspack/core': 1.7.6(@swc/helpers@0.5.19) transitivePeerDependencies: - typescript - postcss-logical@9.0.0(postcss@8.5.6): + postcss-logical@9.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-value-parser: 4.2.0 - postcss-modules-extract-imports@3.1.0(postcss@8.5.6): + postcss-modules-extract-imports@3.1.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 - postcss-modules-local-by-default@4.2.0(postcss@8.5.6): + postcss-modules-local-by-default@4.2.0(postcss@8.5.26): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 + icss-utils: 5.1.0(postcss@8.5.26) + postcss: 8.5.26 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.6): + postcss-modules-scope@3.2.1(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 - postcss-modules-values@4.0.0(postcss@8.5.6): + postcss-modules-values@4.0.0(postcss@8.5.26): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 + icss-utils: 5.1.0(postcss@8.5.26) + postcss: 8.5.26 - postcss-nesting@14.0.0(postcss@8.5.6): + postcss-nesting@14.0.0(postcss@8.5.26): dependencies: '@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) - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 - postcss-opacity-percentage@3.0.0(postcss@8.5.6): + postcss-opacity-percentage@3.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 - postcss-overflow-shorthand@7.0.0(postcss@8.5.6): + postcss-overflow-shorthand@7.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-value-parser: 4.2.0 - postcss-page-break@3.0.4(postcss@8.5.6): + postcss-page-break@3.0.4(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 - postcss-place@11.0.0(postcss@8.5.6): + postcss-place@11.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-value-parser: 4.2.0 - postcss-preset-env@11.2.0(postcss@8.5.6): + postcss-preset-env@11.2.0(postcss@8.5.26): dependencies: - '@csstools/postcss-alpha-function': 2.0.3(postcss@8.5.6) - '@csstools/postcss-cascade-layers': 6.0.0(postcss@8.5.6) - '@csstools/postcss-color-function': 5.0.2(postcss@8.5.6) - '@csstools/postcss-color-function-display-p3-linear': 2.0.2(postcss@8.5.6) - '@csstools/postcss-color-mix-function': 4.0.2(postcss@8.5.6) - '@csstools/postcss-color-mix-variadic-function-arguments': 2.0.2(postcss@8.5.6) - '@csstools/postcss-content-alt-text': 3.0.0(postcss@8.5.6) - '@csstools/postcss-contrast-color-function': 3.0.2(postcss@8.5.6) - '@csstools/postcss-exponential-functions': 3.0.1(postcss@8.5.6) - '@csstools/postcss-font-format-keywords': 5.0.0(postcss@8.5.6) - '@csstools/postcss-font-width-property': 1.0.0(postcss@8.5.6) - '@csstools/postcss-gamut-mapping': 3.0.2(postcss@8.5.6) - '@csstools/postcss-gradients-interpolation-method': 6.0.2(postcss@8.5.6) - '@csstools/postcss-hwb-function': 5.0.2(postcss@8.5.6) - '@csstools/postcss-ic-unit': 5.0.0(postcss@8.5.6) - '@csstools/postcss-initial': 3.0.0(postcss@8.5.6) - '@csstools/postcss-is-pseudo-class': 6.0.0(postcss@8.5.6) - '@csstools/postcss-light-dark-function': 3.0.0(postcss@8.5.6) - '@csstools/postcss-logical-float-and-clear': 4.0.0(postcss@8.5.6) - '@csstools/postcss-logical-overflow': 3.0.0(postcss@8.5.6) - '@csstools/postcss-logical-overscroll-behavior': 3.0.0(postcss@8.5.6) - '@csstools/postcss-logical-resize': 4.0.0(postcss@8.5.6) - '@csstools/postcss-logical-viewport-units': 4.0.0(postcss@8.5.6) - '@csstools/postcss-media-minmax': 3.0.1(postcss@8.5.6) - '@csstools/postcss-media-queries-aspect-ratio-number-values': 4.0.0(postcss@8.5.6) - '@csstools/postcss-mixins': 1.0.0(postcss@8.5.6) - '@csstools/postcss-nested-calc': 5.0.0(postcss@8.5.6) - '@csstools/postcss-normalize-display-values': 5.0.1(postcss@8.5.6) - '@csstools/postcss-oklab-function': 5.0.2(postcss@8.5.6) - '@csstools/postcss-position-area-property': 2.0.0(postcss@8.5.6) - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/postcss-property-rule-prelude-list': 2.0.0(postcss@8.5.6) - '@csstools/postcss-random-function': 3.0.1(postcss@8.5.6) - '@csstools/postcss-relative-color-syntax': 4.0.2(postcss@8.5.6) - '@csstools/postcss-scope-pseudo-class': 5.0.0(postcss@8.5.6) - '@csstools/postcss-sign-functions': 2.0.1(postcss@8.5.6) - '@csstools/postcss-stepped-value-functions': 5.0.1(postcss@8.5.6) - '@csstools/postcss-syntax-descriptor-syntax-production': 2.0.0(postcss@8.5.6) - '@csstools/postcss-system-ui-font-family': 2.0.0(postcss@8.5.6) - '@csstools/postcss-text-decoration-shorthand': 5.0.3(postcss@8.5.6) - '@csstools/postcss-trigonometric-functions': 5.0.1(postcss@8.5.6) - '@csstools/postcss-unset-value': 5.0.0(postcss@8.5.6) - autoprefixer: 10.4.24(postcss@8.5.6) + '@csstools/postcss-alpha-function': 2.0.3(postcss@8.5.26) + '@csstools/postcss-cascade-layers': 6.0.0(postcss@8.5.26) + '@csstools/postcss-color-function': 5.0.2(postcss@8.5.26) + '@csstools/postcss-color-function-display-p3-linear': 2.0.2(postcss@8.5.26) + '@csstools/postcss-color-mix-function': 4.0.2(postcss@8.5.26) + '@csstools/postcss-color-mix-variadic-function-arguments': 2.0.2(postcss@8.5.26) + '@csstools/postcss-content-alt-text': 3.0.0(postcss@8.5.26) + '@csstools/postcss-contrast-color-function': 3.0.2(postcss@8.5.26) + '@csstools/postcss-exponential-functions': 3.0.1(postcss@8.5.26) + '@csstools/postcss-font-format-keywords': 5.0.0(postcss@8.5.26) + '@csstools/postcss-font-width-property': 1.0.0(postcss@8.5.26) + '@csstools/postcss-gamut-mapping': 3.0.2(postcss@8.5.26) + '@csstools/postcss-gradients-interpolation-method': 6.0.2(postcss@8.5.26) + '@csstools/postcss-hwb-function': 5.0.2(postcss@8.5.26) + '@csstools/postcss-ic-unit': 5.0.0(postcss@8.5.26) + '@csstools/postcss-initial': 3.0.0(postcss@8.5.26) + '@csstools/postcss-is-pseudo-class': 6.0.0(postcss@8.5.26) + '@csstools/postcss-light-dark-function': 3.0.0(postcss@8.5.26) + '@csstools/postcss-logical-float-and-clear': 4.0.0(postcss@8.5.26) + '@csstools/postcss-logical-overflow': 3.0.0(postcss@8.5.26) + '@csstools/postcss-logical-overscroll-behavior': 3.0.0(postcss@8.5.26) + '@csstools/postcss-logical-resize': 4.0.0(postcss@8.5.26) + '@csstools/postcss-logical-viewport-units': 4.0.0(postcss@8.5.26) + '@csstools/postcss-media-minmax': 3.0.1(postcss@8.5.26) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 4.0.0(postcss@8.5.26) + '@csstools/postcss-mixins': 1.0.0(postcss@8.5.26) + '@csstools/postcss-nested-calc': 5.0.0(postcss@8.5.26) + '@csstools/postcss-normalize-display-values': 5.0.1(postcss@8.5.26) + '@csstools/postcss-oklab-function': 5.0.2(postcss@8.5.26) + '@csstools/postcss-position-area-property': 2.0.0(postcss@8.5.26) + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) + '@csstools/postcss-property-rule-prelude-list': 2.0.0(postcss@8.5.26) + '@csstools/postcss-random-function': 3.0.1(postcss@8.5.26) + '@csstools/postcss-relative-color-syntax': 4.0.2(postcss@8.5.26) + '@csstools/postcss-scope-pseudo-class': 5.0.0(postcss@8.5.26) + '@csstools/postcss-sign-functions': 2.0.1(postcss@8.5.26) + '@csstools/postcss-stepped-value-functions': 5.0.1(postcss@8.5.26) + '@csstools/postcss-syntax-descriptor-syntax-production': 2.0.0(postcss@8.5.26) + '@csstools/postcss-system-ui-font-family': 2.0.0(postcss@8.5.26) + '@csstools/postcss-text-decoration-shorthand': 5.0.3(postcss@8.5.26) + '@csstools/postcss-trigonometric-functions': 5.0.1(postcss@8.5.26) + '@csstools/postcss-unset-value': 5.0.0(postcss@8.5.26) + autoprefixer: 10.4.24(postcss@8.5.26) browserslist: 4.28.1 - css-blank-pseudo: 8.0.1(postcss@8.5.6) - css-has-pseudo: 8.0.0(postcss@8.5.6) - css-prefers-color-scheme: 11.0.0(postcss@8.5.6) + css-blank-pseudo: 8.0.1(postcss@8.5.26) + css-has-pseudo: 8.0.0(postcss@8.5.26) + css-prefers-color-scheme: 11.0.0(postcss@8.5.26) cssdb: 8.8.0 - postcss: 8.5.6 - postcss-attribute-case-insensitive: 8.0.0(postcss@8.5.6) - postcss-clamp: 4.1.0(postcss@8.5.6) - postcss-color-functional-notation: 8.0.2(postcss@8.5.6) - postcss-color-hex-alpha: 11.0.0(postcss@8.5.6) - postcss-color-rebeccapurple: 11.0.0(postcss@8.5.6) - postcss-custom-media: 12.0.1(postcss@8.5.6) - postcss-custom-properties: 15.0.1(postcss@8.5.6) - postcss-custom-selectors: 9.0.1(postcss@8.5.6) - postcss-dir-pseudo-class: 10.0.0(postcss@8.5.6) - postcss-double-position-gradients: 7.0.0(postcss@8.5.6) - postcss-focus-visible: 11.0.0(postcss@8.5.6) - postcss-focus-within: 10.0.0(postcss@8.5.6) - postcss-font-variant: 5.0.0(postcss@8.5.6) - postcss-gap-properties: 7.0.0(postcss@8.5.6) - postcss-image-set-function: 8.0.0(postcss@8.5.6) - postcss-lab-function: 8.0.2(postcss@8.5.6) - postcss-logical: 9.0.0(postcss@8.5.6) - postcss-nesting: 14.0.0(postcss@8.5.6) - postcss-opacity-percentage: 3.0.0(postcss@8.5.6) - postcss-overflow-shorthand: 7.0.0(postcss@8.5.6) - postcss-page-break: 3.0.4(postcss@8.5.6) - postcss-place: 11.0.0(postcss@8.5.6) - postcss-pseudo-class-any-link: 11.0.0(postcss@8.5.6) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.6) - postcss-selector-not: 9.0.0(postcss@8.5.6) + postcss: 8.5.26 + postcss-attribute-case-insensitive: 8.0.0(postcss@8.5.26) + postcss-clamp: 4.1.0(postcss@8.5.26) + postcss-color-functional-notation: 8.0.2(postcss@8.5.26) + postcss-color-hex-alpha: 11.0.0(postcss@8.5.26) + postcss-color-rebeccapurple: 11.0.0(postcss@8.5.26) + postcss-custom-media: 12.0.1(postcss@8.5.26) + postcss-custom-properties: 15.0.1(postcss@8.5.26) + postcss-custom-selectors: 9.0.1(postcss@8.5.26) + postcss-dir-pseudo-class: 10.0.0(postcss@8.5.26) + postcss-double-position-gradients: 7.0.0(postcss@8.5.26) + postcss-focus-visible: 11.0.0(postcss@8.5.26) + postcss-focus-within: 10.0.0(postcss@8.5.26) + postcss-font-variant: 5.0.0(postcss@8.5.26) + postcss-gap-properties: 7.0.0(postcss@8.5.26) + postcss-image-set-function: 8.0.0(postcss@8.5.26) + postcss-lab-function: 8.0.2(postcss@8.5.26) + postcss-logical: 9.0.0(postcss@8.5.26) + postcss-nesting: 14.0.0(postcss@8.5.26) + postcss-opacity-percentage: 3.0.0(postcss@8.5.26) + postcss-overflow-shorthand: 7.0.0(postcss@8.5.26) + postcss-page-break: 3.0.4(postcss@8.5.26) + postcss-place: 11.0.0(postcss@8.5.26) + postcss-pseudo-class-any-link: 11.0.0(postcss@8.5.26) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.26) + postcss-selector-not: 9.0.0(postcss@8.5.26) - postcss-pseudo-class-any-link@11.0.0(postcss@8.5.6): + postcss-pseudo-class-any-link@11.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 - postcss-replace-overflow-wrap@4.0.0(postcss@8.5.6): + postcss-replace-overflow-wrap@4.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 - postcss-selector-not@9.0.0(postcss@8.5.6): + postcss-selector-not@9.0.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 7.1.1 postcss-selector-parser@7.1.1: @@ -20254,9 +19408,9 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.6: + postcss@8.5.26: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.18 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -20332,9 +19486,15 @@ snapshots: pngjs: 5.0.0 yargs: 15.4.1 - qs@6.14.2: + qs@6.15.3: dependencies: - side-channel: 1.1.0 + es-define-property: 1.0.1 + side-channel: 1.1.1 + + qs@6.16.0: + dependencies: + es-define-property: 1.0.1 + side-channel: 1.1.1 queue-microtask@1.2.3: {} @@ -20559,15 +19719,15 @@ snapshots: readdir-glob@1.1.3: dependencies: - minimatch: 5.1.7 + minimatch: 5.1.9 readdirp@3.5.0: dependencies: - picomatch: 2.3.1 + picomatch: 2.3.2 readdirp@3.6.0: dependencies: - picomatch: 2.3.1 + picomatch: 2.3.2 real-require@0.2.0: {} @@ -20579,7 +19739,7 @@ snapshots: redux@4.2.1: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.7 reflect-metadata@0.2.2: {} @@ -20634,6 +19794,14 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.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 + optional: true + responselike@2.0.1: dependencies: lowercase-keys: 2.0.0 @@ -20665,35 +19833,36 @@ snapshots: sprintf-js: 1.1.3 optional: true - rollup@4.59.0: + rollup@4.63.1: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.59.0 - '@rollup/rollup-android-arm64': 4.59.0 - '@rollup/rollup-darwin-arm64': 4.59.0 - '@rollup/rollup-darwin-x64': 4.59.0 - '@rollup/rollup-freebsd-arm64': 4.59.0 - '@rollup/rollup-freebsd-x64': 4.59.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 - '@rollup/rollup-linux-arm-musleabihf': 4.59.0 - '@rollup/rollup-linux-arm64-gnu': 4.59.0 - '@rollup/rollup-linux-arm64-musl': 4.59.0 - '@rollup/rollup-linux-loong64-gnu': 4.59.0 - '@rollup/rollup-linux-loong64-musl': 4.59.0 - '@rollup/rollup-linux-ppc64-gnu': 4.59.0 - '@rollup/rollup-linux-ppc64-musl': 4.59.0 - '@rollup/rollup-linux-riscv64-gnu': 4.59.0 - '@rollup/rollup-linux-riscv64-musl': 4.59.0 - '@rollup/rollup-linux-s390x-gnu': 4.59.0 - '@rollup/rollup-linux-x64-gnu': 4.59.0 - '@rollup/rollup-linux-x64-musl': 4.59.0 - '@rollup/rollup-openbsd-x64': 4.59.0 - '@rollup/rollup-openharmony-arm64': 4.59.0 - '@rollup/rollup-win32-arm64-msvc': 4.59.0 - '@rollup/rollup-win32-ia32-msvc': 4.59.0 - '@rollup/rollup-win32-x64-gnu': 4.59.0 - '@rollup/rollup-win32-x64-msvc': 4.59.0 + '@napi-rs/lzma-linux-x64-gnu': 1.5.1 + '@rollup/rollup-android-arm-eabi': 4.63.1 + '@rollup/rollup-android-arm64': 4.63.1 + '@rollup/rollup-darwin-arm64': 4.63.1 + '@rollup/rollup-darwin-x64': 4.63.1 + '@rollup/rollup-freebsd-arm64': 4.63.1 + '@rollup/rollup-freebsd-x64': 4.63.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.63.1 + '@rollup/rollup-linux-arm-musleabihf': 4.63.1 + '@rollup/rollup-linux-arm64-gnu': 4.63.1 + '@rollup/rollup-linux-arm64-musl': 4.63.1 + '@rollup/rollup-linux-loong64-gnu': 4.63.1 + '@rollup/rollup-linux-loong64-musl': 4.63.1 + '@rollup/rollup-linux-ppc64-gnu': 4.63.1 + '@rollup/rollup-linux-ppc64-musl': 4.63.1 + '@rollup/rollup-linux-riscv64-gnu': 4.63.1 + '@rollup/rollup-linux-riscv64-musl': 4.63.1 + '@rollup/rollup-linux-s390x-gnu': 4.63.1 + '@rollup/rollup-linux-x64-gnu': 4.63.1 + '@rollup/rollup-linux-x64-musl': 4.63.1 + '@rollup/rollup-openbsd-x64': 4.63.1 + '@rollup/rollup-openharmony-arm64': 4.63.1 + '@rollup/rollup-win32-arm64-msvc': 4.63.1 + '@rollup/rollup-win32-ia32-msvc': 4.63.1 + '@rollup/rollup-win32-x64-gnu': 4.63.1 + '@rollup/rollup-win32-x64-msvc': 4.63.1 fsevents: 2.3.3 run-applescript@7.1.0: {} @@ -20744,10 +19913,10 @@ snapshots: select-hose@2.0.0: {} - selfsigned@2.4.1: + selfsigned@5.5.0: dependencies: - '@types/node-forge': 1.3.14 - node-forge: 1.3.3 + '@peculiar/x509': 1.14.3 + pkijs: 3.4.0 semver-compare@1.0.0: optional: true @@ -20802,36 +19971,38 @@ snapshots: setprototypeof@1.2.0: {} - sharp@0.34.5: + sharp@0.35.4(@types/node@25.3.0): dependencies: - '@img/colour': 1.0.0 + '@img/colour': 1.1.0 detect-libc: 2.1.2 semver: 7.7.4 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.5 - '@img/sharp-darwin-x64': 0.34.5 - '@img/sharp-libvips-darwin-arm64': 1.2.4 - '@img/sharp-libvips-darwin-x64': 1.2.4 - '@img/sharp-libvips-linux-arm': 1.2.4 - '@img/sharp-libvips-linux-arm64': 1.2.4 - '@img/sharp-libvips-linux-ppc64': 1.2.4 - '@img/sharp-libvips-linux-riscv64': 1.2.4 - '@img/sharp-libvips-linux-s390x': 1.2.4 - '@img/sharp-libvips-linux-x64': 1.2.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - '@img/sharp-linux-arm': 0.34.5 - '@img/sharp-linux-arm64': 0.34.5 - '@img/sharp-linux-ppc64': 0.34.5 - '@img/sharp-linux-riscv64': 0.34.5 - '@img/sharp-linux-s390x': 0.34.5 - '@img/sharp-linux-x64': 0.34.5 - '@img/sharp-linuxmusl-arm64': 0.34.5 - '@img/sharp-linuxmusl-x64': 0.34.5 - '@img/sharp-wasm32': 0.34.5 - '@img/sharp-win32-arm64': 0.34.5 - '@img/sharp-win32-ia32': 0.34.5 - '@img/sharp-win32-x64': 0.34.5 + '@img/sharp-darwin-arm64': 0.35.4 + '@img/sharp-darwin-x64': 0.35.4 + '@img/sharp-freebsd-wasm32': 0.35.4 + '@img/sharp-libvips-darwin-arm64': 1.3.3 + '@img/sharp-libvips-darwin-x64': 1.3.3 + '@img/sharp-libvips-linux-arm': 1.3.3 + '@img/sharp-libvips-linux-arm64': 1.3.3 + '@img/sharp-libvips-linux-ppc64': 1.3.3 + '@img/sharp-libvips-linux-riscv64': 1.3.3 + '@img/sharp-libvips-linux-s390x': 1.3.3 + '@img/sharp-libvips-linux-x64': 1.3.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.3 + '@img/sharp-libvips-linuxmusl-x64': 1.3.3 + '@img/sharp-linux-arm': 0.35.4 + '@img/sharp-linux-arm64': 0.35.4 + '@img/sharp-linux-ppc64': 0.35.4 + '@img/sharp-linux-riscv64': 0.35.4 + '@img/sharp-linux-s390x': 0.35.4 + '@img/sharp-linux-x64': 0.35.4 + '@img/sharp-linuxmusl-arm64': 0.35.4 + '@img/sharp-linuxmusl-x64': 0.35.4 + '@img/sharp-webcontainers-wasm32': 0.35.4 + '@img/sharp-win32-arm64': 0.35.4 + '@img/sharp-win32-ia32': 0.35.4 + '@img/sharp-win32-x64': 0.35.4 + '@types/node': 25.3.0 shebang-command@2.0.0: dependencies: @@ -20839,9 +20010,9 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.3: {} + shell-quote@1.10.0: {} - side-channel-list@1.0.0: + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 @@ -20861,11 +20032,11 @@ snapshots: object-inspect: 1.13.4 side-channel-map: 1.0.1 - side-channel@1.1.0: + side-channel@1.1.1: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 - side-channel-list: 1.0.0 + side-channel-list: 1.0.1 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 @@ -20885,24 +20056,7 @@ snapshots: mrmime: 2.0.1 totalist: 3.0.1 - sirv@3.0.2: - dependencies: - '@polka/url': 1.0.0-next.29 - mrmime: 2.0.1 - totalist: 3.0.1 - optional: true - - slice-ansi@3.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - optional: true - - smart-buffer@4.2.0: - optional: true - - smol-toml@1.6.0: {} + smol-toml@1.8.0: {} snake-case@3.0.4: dependencies: @@ -20912,8 +20066,8 @@ snapshots: sockjs@0.3.24: dependencies: faye-websocket: 0.11.4 - uuid: 8.3.2 - websocket-driver: 0.7.4 + uuid: 11.1.1 + websocket-driver: 0.7.5 sonic-boom@4.2.1: dependencies: @@ -20966,7 +20120,7 @@ snapshots: statuses@2.0.2: {} - std-env@3.10.0: {} + std-env@4.2.0: {} stream-browserify@3.0.0: dependencies: @@ -21018,7 +20172,9 @@ snapshots: optionalDependencies: '@types/node': 25.3.0 - strnum@2.1.2: {} + strnum@2.4.2: + dependencies: + anynum: 1.0.1 style-mod@4.1.3: {} @@ -21036,15 +20192,15 @@ snapshots: svg-parser@2.0.4: {} - svgo@3.3.2: + svgo@3.3.5: dependencies: - '@trysound/sax': 0.2.0 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 symbol-tree@3.2.4: optional: true @@ -21071,7 +20227,7 @@ snapshots: - bare-abort-controller - react-native-b4a - tar@7.5.16: + tar@7.5.22: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -21146,19 +20302,32 @@ snapshots: tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 - tinyrainbow@3.0.3: {} + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + + tinyrainbow@3.1.1: {} tlds@1.261.0: {} tldts-core@7.0.23: {} + tldts-core@7.4.11: + optional: true + tldts@7.0.23: dependencies: tldts-core: 7.0.23 + tldts@7.4.11: + dependencies: + tldts-core: 7.4.11 + optional: true + tmp-promise@3.0.3: dependencies: tmp: 0.2.7 @@ -21177,6 +20346,11 @@ snapshots: dependencies: tldts: 7.0.23 + tough-cookie@6.0.2: + dependencies: + tldts: 7.4.11 + optional: true + tr46@6.0.0: dependencies: punycode: 2.3.1 @@ -21255,11 +20429,11 @@ snapshots: icss-replace-symbols: 1.1.0 is-there: 4.5.2 mkdirp: 3.0.1 - postcss: 8.5.6 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) - postcss-modules-scope: 3.2.1(postcss@8.5.6) - postcss-modules-values: 4.0.0(postcss@8.5.6) + postcss: 8.5.26 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.26) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.26) + postcss-modules-scope: 3.2.1(postcss@8.5.26) + postcss-modules-values: 4.0.0(postcss@8.5.26) yargs: 17.7.2 typed-emitter@2.1.0: @@ -21278,15 +20452,15 @@ snapshots: dependencies: multiformats: 9.9.0 + unbash@2.2.0: {} + undici-types@5.26.5: {} undici-types@7.16.0: {} undici-types@7.18.2: {} - undici@6.23.0: {} - - undici@6.26.0: {} + undici@6.28.0: {} undici@7.29.0: {} @@ -21321,6 +20495,14 @@ snapshots: until-async@3.0.2: {} + unzipper@0.12.5: + dependencies: + bluebird: 3.7.2 + duplexer2: 0.1.4 + fs-extra: 11.3.1 + graceful-fs: 4.2.11 + node-int64: 0.4.0 + update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: browserslist: 4.28.1 @@ -21336,10 +20518,6 @@ snapshots: dependencies: pako: 1.0.11 - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - urlpattern-polyfill@10.1.0: {} use-sync-external-store@1.6.0(react@19.2.4): @@ -21357,9 +20535,9 @@ snapshots: utils-merge@1.0.1: {} - uuid@8.3.2: {} + uuid@11.1.1: {} - valibot@1.2.0(typescript@5.9.3): + valibot@1.4.2(typescript@5.9.3): optionalDependencies: typescript: 5.9.3 @@ -21371,130 +20549,103 @@ snapshots: dependencies: '@neon-rs/load': 0.1.82 - verror@1.10.1: - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.4.1 - optional: true - - vite-tsconfig-paths@6.1.1(typescript@5.4.5)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)): + vite-tsconfig-paths@6.1.1(typescript@5.4.5)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.4.5) - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - typescript - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)): + vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - typescript - vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0): dependencies: esbuild: 0.27.2 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.59.0 - tinyglobby: 0.2.15 + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + postcss: 8.5.26 + rollup: 4.63.1 + tinyglobby: 0.2.17 optionalDependencies: '@types/node': 25.3.0 fsevents: 2.3.3 - jiti: 2.6.1 + jiti: 2.7.0 lightningcss: 1.31.1 tsx: 4.21.0 - yaml: 2.8.2 + yaml: 2.9.0 - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(tsx@4.21.0)(yaml@2.8.2): + vitest@4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)): dependencies: - '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/pretty-format': 4.0.18 - '@vitest/runner': 4.0.18 - '@vitest/snapshot': 4.0.18 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 - es-module-lexer: 1.7.0 + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + es-module-lexer: 2.3.2 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 + picomatch: 4.0.7 + std-env: 4.2.0 tinybench: 2.9.0 tinyexec: 1.0.2 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + tinyrainbow: 3.1.1 + vite: 7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 25.3.0 - '@vitest/browser-playwright': 4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(playwright@1.59.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) - happy-dom: 20.7.0 - jsdom: 28.1.0 + '@vitest/coverage-v8': 4.1.11(vitest@4.1.11) + happy-dom: 20.12.0 + jsdom: 28.1.0(@noble/hashes@2.4.0) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2): + vitest@4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)): dependencies: - '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/pretty-format': 4.0.18 - '@vitest/runner': 4.0.18 - '@vitest/snapshot': 4.0.18 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 - es-module-lexer: 1.7.0 + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + es-module-lexer: 2.3.2 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 + picomatch: 4.0.7 + std-env: 4.2.0 tinybench: 2.9.0 tinyexec: 1.0.2 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + tinyrainbow: 3.1.1 + vite: 7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 25.3.0 - '@vitest/browser-playwright': 4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(playwright@1.59.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) - happy-dom: 20.7.0 - jsdom: 28.1.0 + '@vitest/coverage-v8': 4.1.11(vitest@4.1.11) + happy-dom: 20.12.0 + jsdom: 28.1.0(@noble/hashes@2.4.0) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml w3c-keyname@2.2.8: {} @@ -21513,6 +20664,14 @@ snapshots: dependencies: defaults: 1.0.4 + webcrypto-core@1.9.2: + dependencies: + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/json-schema': 1.1.12 + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 + webidl-conversions@8.0.1: optional: true @@ -21529,7 +20688,7 @@ snapshots: opener: 1.5.2 picocolors: 1.1.1 sirv: 2.0.4 - ws: 7.5.10 + ws: 7.5.13 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -21545,7 +20704,7 @@ snapshots: transitivePeerDependencies: - tslib - webpack-dev-server@5.2.2(tslib@2.8.1): + webpack-dev-server@5.2.6(tslib@2.8.1): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -21563,18 +20722,18 @@ snapshots: connect-history-api-fallback: 2.0.0 express: 4.22.1 graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.25) + http-proxy-middleware: 2.0.10(@types/express@4.17.25) ipaddr.js: 2.3.0 - launch-editor: 2.13.0 + launch-editor: 2.14.1 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 - selfsigned: 2.4.1 + selfsigned: 5.5.0 serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 webpack-dev-middleware: 7.4.5(tslib@2.8.1) - ws: 8.19.0 + ws: 8.21.3 transitivePeerDependencies: - bufferutil - debug @@ -21586,7 +20745,7 @@ snapshots: dependencies: sdp: 3.2.1 - websocket-driver@0.7.4: + websocket-driver@0.7.5: dependencies: http-parser-js: 0.5.10 safe-buffer: 5.2.1 @@ -21599,9 +20758,9 @@ snapshots: whatwg-mimetype@5.0.0: optional: true - whatwg-url@16.0.1: + whatwg-url@16.0.1(@noble/hashes@2.4.0): dependencies: - '@exodus/bytes': 1.14.1 + '@exodus/bytes': 1.15.1(@noble/hashes@2.4.0) tr46: 6.0.0 webidl-conversions: 8.0.1 transitivePeerDependencies: @@ -21649,9 +20808,9 @@ snapshots: wrappy@1.0.2: {} - ws@7.5.10: {} + ws@7.5.13: {} - ws@8.19.0: {} + ws@8.21.3: {} wsl-utils@0.1.0: dependencies: @@ -21660,6 +20819,8 @@ snapshots: xml-name-validator@5.0.0: optional: true + xml-naming@0.3.0: {} + xmlbuilder@15.1.1: {} xmlchars@2.2.0: @@ -21679,10 +20840,10 @@ snapshots: yallist@5.0.0: {} - yaml@1.10.2: + yaml@1.10.3: optional: true - yaml@2.8.2: {} + yaml@2.9.0: {} yargs-parser@18.1.3: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index b2db68e4a..51d5e93b6 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -33,9 +33,9 @@ blockExoticSubdeps: true catalog: '@arborium/arborium': 2.16.0 '@atproto/api': 0.19.0 - '@aws-sdk/client-s3': 3.996.0 - '@aws-sdk/lib-storage': 3.996.0 - '@aws-sdk/s3-request-presigner': 3.996.0 + '@aws-sdk/client-s3': 3.1121.0 + '@aws-sdk/lib-storage': 3.1121.0 + '@aws-sdk/s3-request-presigner': 3.1121.0 '@base-ui/react': 1.5.0 '@biomejs/biome': 2.4.4 '@bluesky-social/jwk-jose': 0.1.11 @@ -44,7 +44,7 @@ catalog: '@floating-ui/react': 0.27.18 '@floating-ui/react-dom': 2.1.7 '@hcaptcha/react-hcaptcha': 2.0.2 - '@hono/node-server': 1.19.9 + '@hono/node-server': 1.19.17 '@lexical/history': 0.48.0 '@lexical/react': 0.48.0 '@lexical/utils': 0.48.0 @@ -78,7 +78,7 @@ catalog: '@types/react-dom': 19.2.3 '@types/validator': 13.15.10 '@typescript/native-preview': 7.0.0-dev.20260224.1 - '@vitest/coverage-v8': 4.0.18 + '@vitest/coverage-v8': 4.1.11 '@vvo/tzdb': 6.198.0 ajv: 8.18.0 archiver: 7.0.1 @@ -91,40 +91,40 @@ catalog: combokeys: 3.0.1 deepfilternet3-noise-filter: 1.2.1 emoji-regex: 10.6.0 - esbuild: 0.27.3 + esbuild: 0.28.2 eventemitter3: 5.0.4 - fast-xml-parser: 5.3.7 + fast-xml-parser: 5.11.1 favico.js: 0.3.10 framer-motion: 12.34.3 hi-base32: 0.5.1 - hono: 4.12.2 + hono: 4.13.5 html-entities: 2.6.0 idna-uts46-hx: 6.1.1 ioredis: 5.9.3 itty-time: 2.0.2 jose: 6.1.3 katex: 0.16.33 + knip: 5.88.1 lexical: 0.48.0 - knip: 5.85.0 libphonenumber-js: 1.12.41 livekit-server-sdk: 2.15.0 - lodash: 4.17.23 + lodash: 4.18.1 lru-cache: 11.2.6 luxon: 3.7.2 match-sorter: 8.2.0 + maxmind: 5.0.5 mime: 4.1.0 mobx: 6.15.0 mobx-persist-store: 1.1.8 mobx-react-lite: 4.1.1 motion: 12.34.3 - maxmind: 5.0.5 msw: 2.12.10 nats: 2.29.3 - nodemailer: 8.0.1 + nodemailer: 9.0.6 + pg: 8.16.3 pino: 10.3.1 pino-pretty: 13.1.3 - pg: 8.16.3 - postcss: 8.5.6 + postcss: 8.5.26 postcss-discard-comments: 7.0.5 postcss-loader: 8.2.1 postcss-preset-env: 11.2.0 @@ -140,12 +140,12 @@ catalog: react-hook-form: 7.71.2 react-hotkeys-hook: 5.2.4 rxjs: 7.8.2 - sharp: 0.34.5 + sharp: 0.35.4 stripe: 22.0.2 tailwindcss: 4.2.1 - tiny-invariant: 1.3.3 tempy: 3.2.0 thumbhash: 0.1.1 + tiny-invariant: 1.3.3 transliteration: 2.6.1 ts-morph: 28.0.0 tsx: 4.21.0 @@ -153,15 +153,35 @@ catalog: uint8array-extras: 1.5.0 unique-names-generator: 4.7.1 urlpattern-polyfill: 10.1.0 - valibot: 1.2.0 + valibot: 1.4.2 validator: 13.15.26 + vite: 7.3.6 vite-tsconfig-paths: 6.1.1 - vitest: 4.0.18 - yaml: 2.8.2 + vitest: 4.1.11 + yaml: 2.9.0 zod: 4.3.6 minimumReleaseAge: 1440 +overrides: + '@floating-ui/dom': 1.7.5 + '@lingui/swc-plugin': 'catalog:' + '@rspack/cli': 'catalog:' + '@rspack/core': 'catalog:' + '@rspack/dev-server@1.1.5>webpack-dev-server': 5.2.6 + cassandra-driver@4.8.0>adm-zip: 0.6.0 + emscripten-wasm-loader@3.0.3>nanoid: 3.3.18 + hunspell-asm@4.0.2>nanoid: 3.3.18 + qs@6.14.2: 6.16.0 + semver: 7.7.4 + sockjs@0.3.24>uuid: 11.1.1 + +patchedDependencies: + '@hono/node-server@1.19.17': patches/@hono__node-server@1.19.17.patch + '@phosphor-icons/react@2.1.10': patches/@phosphor-icons__react@2.1.10.patch + emscripten-wasm-loader@3.0.3: patches/emscripten-wasm-loader@3.0.3.patch + hunspell-asm@4.0.2: patches/hunspell-asm@4.0.2.patch + peerDependencyRules: allowedVersions: react: '*' @@ -169,17 +189,6 @@ peerDependencyRules: - webpack - babel-plugin-macros -overrides: - '@floating-ui/dom': 1.7.5 - '@lingui/swc-plugin': 'catalog:' - '@rspack/cli': 'catalog:' - '@rspack/core': 'catalog:' - semver: 7.7.4 - -patchedDependencies: - '@hono/node-server@1.19.9': patches/@hono__node-server@1.19.9.patch - '@phosphor-icons/react@2.1.10': patches/@phosphor-icons__react@2.1.10.patch - strictDepBuilds: true trustPolicy: no-downgrade diff --git a/tools/bench/check-all.sh b/tools/bench/check-all.sh index e5507857d..1fd5677e4 100755 --- a/tools/bench/check-all.sh +++ b/tools/bench/check-all.sh @@ -6,7 +6,8 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" -DEFAULT_CRATES=$(cat <<'ENTRIES' +DEFAULT_CRATES=$( + cat <<'ENTRIES' fluxer_desktop/native/rt-thread:tick fluxer_desktop/native/audio-mix:mix fluxer_desktop/native/screen-frame-bus:staging @@ -27,29 +28,29 @@ fail_count=0 failed_names=() while IFS= read -r entry; do - [ -n "$entry" ] || continue - case "$entry" in - \#*) continue;; - esac - crate="${entry%%:*}" - bench="${entry##*:}" - log "==> $crate :: $bench" - if "$SCRIPT_DIR/check-regression.sh" "$REPO_ROOT/$crate" "$bench"; then - pass_count=$((pass_count + 1)) - else - fail_count=$((fail_count + 1)) - failed_names+=("$crate::$bench") - fi -done <<< "$ENTRIES" + [ -n "$entry" ] || continue + case "$entry" in + \#*) continue ;; + esac + crate="${entry%%:*}" + bench="${entry##*:}" + log "==> $crate :: $bench" + if "$SCRIPT_DIR/check-regression.sh" "$REPO_ROOT/$crate" "$bench"; then + pass_count=$((pass_count + 1)) + else + fail_count=$((fail_count + 1)) + failed_names+=("$crate::$bench") + fi +done <<<"$ENTRIES" printf '\n[check-all] summary: %d passed, %d failed\n' "$pass_count" "$fail_count" if [ "$fail_count" -gt 0 ]; then - printf '[check-all] failed entries:\n' - for name in "${failed_names[@]}"; do - printf ' - %s\n' "$name" - done - exit 1 + printf '[check-all] failed entries:\n' + for name in "${failed_names[@]}"; do + printf ' - %s\n' "$name" + done + exit 1 fi exit 0 diff --git a/tools/bench/check-regression.sh b/tools/bench/check-regression.sh index 859d3b5ab..0d3b6c0bd 100755 --- a/tools/bench/check-regression.sh +++ b/tools/bench/check-regression.sh @@ -8,10 +8,13 @@ MEASUREMENT_TIME="${BENCH_MEASUREMENT_TIME:-5}" WARM_UP_TIME="${BENCH_WARM_UP_TIME:-2}" log() { printf '[check-regression] %s\n' "$*" >&2; } -fail() { log "ERROR: $*"; exit 1; } +fail() { + log "ERROR: $*" + exit 1 +} if [ "$#" -ne 2 ]; then - fail "usage: $0 " + fail "usage: $0 " fi CRATE_PATH="$1" @@ -29,14 +32,14 @@ trap 'rm -f "$LOG_FILE"' EXIT log "running cargo bench --bench $BENCH_NAME in $CRATE_PATH" ( - cd "$CRATE_PATH" - cargo bench --bench "$BENCH_NAME" -- \ - --warm-up-time "$WARM_UP_TIME" \ - --measurement-time "$MEASUREMENT_TIME" + cd "$CRATE_PATH" + cargo bench --bench "$BENCH_NAME" -- \ + --warm-up-time "$WARM_UP_TIME" \ + --measurement-time "$MEASUREMENT_TIME" ) >"$LOG_FILE" 2>&1 || { - tail -50 "$LOG_FILE" >&2 - fail "cargo bench failed; see log above" + tail -50 "$LOG_FILE" >&2 + fail "cargo bench failed; see log above" } BUDGET_PERCENT="$BUDGET" BASELINE_PATH="$BASELINE" \ - python3 "$(dirname "$0")/_compare_criterion.py" "$LOG_FILE" + python3 "$(dirname "$0")/_compare_criterion.py" "$LOG_FILE" diff --git a/tools/ci/Cargo.lock b/tools/ci/Cargo.lock index 1f170b5dd..786b5d581 100644 --- a/tools/ci/Cargo.lock +++ b/tools/ci/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - [[package]] name = "allocator-api2" version = "0.2.21" @@ -16,9 +10,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android_system_properties" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" dependencies = [ "libc", ] @@ -75,15 +69,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arc-swap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" dependencies = [ "rustversion", ] @@ -96,9 +90,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-config" @@ -122,8 +116,8 @@ dependencies = [ "bytes", "fastrand", "hex", - "http 1.4.2", - "sha1 0.10.6", + "http 1.5.0", + "sha1 0.10.7", "time", "tokio", "tracing", @@ -145,9 +139,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.16.3" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f" +checksum = "ce2b2dcc879c3bae0d371e77c99f2238400ef24ec001394befa67b6e543add9e" dependencies = [ "aws-lc-sys", "zeroize", @@ -155,21 +149,22 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.40.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7" +checksum = "f09fae7be8bb3174e05c6afdb34199e6dc0c7c04ba9fa237b1967adfbde27483" dependencies = [ "cc", "cmake", "dunce", "fs_extra", + "pkg-config", ] [[package]] name = "aws-runtime" -version = "1.7.4" +version = "1.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ed8e8c52d2dc2390ad9f15647fe663f71e9780b4262c190fbb823a32721566" +checksum = "6c9b9de216a988dd54b754a82a7660cfe14cee4f6782ae4524470972fa0ccb39" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -184,9 +179,9 @@ dependencies = [ "bytes-utils", "fastrand", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "http-body 0.4.6", - "http-body 1.0.1", + "http-body 1.1.0", "percent-encoding", "pin-project-lite", "tracing", @@ -195,9 +190,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.135.0" +version = "1.137.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f97e3e7e7d86fd26fcdc18bc382da5ca9e8b2ff8d54030d187fd0dac8a236d96" +checksum = "c2dd7213994e2ff9382ff100403b78c30d1b74cdfcd8fa9d0d1dc3a94a5c4874" dependencies = [ "arc-swap", "aws-credential-types", @@ -219,8 +214,8 @@ dependencies = [ "hex", "hmac 0.13.0", "http 0.2.12", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "lru", "percent-encoding", "regex-lite", @@ -231,9 +226,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.101.0" +version = "1.102.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b647baea49ff551960b904f905681e9b4765a6c4ea08631e89dc52d8bd3f5896" +checksum = "8c82b3ac19f1431854f7ace3a7531674633e286bfdde21976893bfee36fd493b" dependencies = [ "arc-swap", "aws-credential-types", @@ -249,16 +244,16 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "regex-lite", "tracing", ] [[package]] name = "aws-sdk-ssooidc" -version = "1.103.0" +version = "1.104.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ae401c65ff288aa7873117fe535cd32b7b1bb0bc43751d28901a1d5f20636b9" +checksum = "321000d2b4c5519ee573f73167f612efd7329322d9b26969ad1979f0427f1913" dependencies = [ "arc-swap", "aws-credential-types", @@ -274,16 +269,16 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "regex-lite", "tracing", ] [[package]] name = "aws-sdk-sts" -version = "1.106.0" +version = "1.107.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c80de7bb7d03e9ca8c9fd7b489f20f3948d3f3be91a7953591347d238115408" +checksum = "3d0d328ba962af23ecfa3c9f23b98d3d35e325fa218d7f13d17a6bf522f8a560" dependencies = [ "arc-swap", "aws-credential-types", @@ -300,7 +295,7 @@ dependencies = [ "aws-types", "fastrand", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "regex-lite", "tracing", ] @@ -322,7 +317,7 @@ dependencies = [ "hex", "hmac 0.13.0", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "p256", "percent-encoding", "sha2 0.11.0", @@ -354,8 +349,8 @@ dependencies = [ "bytes", "crc-fast", "hex", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", "md-5", "pin-project-lite", @@ -366,9 +361,9 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.20" +version = "0.60.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf09d74e5e32f76b8762da505a3cd59303e367a664ca67295387baa8c1d7548" +checksum = "78d8391e65fcea47c586a22e1a41f173b38615b112b2c6b7a44e80cec3e6b706" dependencies = [ "aws-smithy-types", "bytes", @@ -388,8 +383,8 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", "percent-encoding", "pin-project-lite", @@ -406,23 +401,17 @@ dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", "aws-smithy-types", - "h2 0.3.27", - "h2 0.4.14", - "http 0.2.12", - "http 1.4.2", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper 1.10.1", - "hyper-rustls 0.24.2", - "hyper-rustls 0.27.9", + "h2", + "http 1.5.0", + "hyper", + "hyper-rustls", "hyper-util", "pin-project-lite", - "rustls 0.21.12", - "rustls 0.23.40", + "rustls", "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower", "tracing", ] @@ -473,9 +462,9 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "http-body 0.4.6", - "http-body 1.0.1", + "http-body 1.1.0", "http-body-util", "pin-project-lite", "pin-utils", @@ -494,7 +483,7 @@ dependencies = [ "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "pin-project-lite", "tokio", "tracing", @@ -509,7 +498,7 @@ checksum = "8d7396fd9500589e62e460e987ecb671bad374934e55ec3b5f498cc7a8a8a7b7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -520,23 +509,23 @@ checksum = "7442cb268338f0eb8278140a107c046756aa01093d8ef5e99628d34ae09c94f5" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", - "http 1.4.2", + "http 1.5.0", ] [[package]] name = "aws-smithy-types" -version = "1.4.9" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53f93074121a1be41317b9aa607143ae17900631f7f59a99f2b905d519d6783b" +checksum = "32b42fcf341259d85ca10fac9a2f6448a8ec691c6955a18e45bc3b71a85fab85" dependencies = [ "base64-simd", "bytes", "bytes-utils", "futures-core", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "http-body 0.4.6", - "http-body 1.0.1", + "http-body 1.1.0", "http-body-util", "itoa", "num-integer", @@ -603,9 +592,9 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "block-buffer" @@ -618,24 +607,24 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] [[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 = "bytes" -version = "1.11.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "bytes-utils" @@ -649,9 +638,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.63" +version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" dependencies = [ "find-msvc-tools", "jobserver", @@ -667,9 +656,20 @@ 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" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.1", + "rand_core 0.10.1", +] [[package]] name = "chrono" @@ -686,9 +686,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" dependencies = [ "clap_builder", "clap_derive", @@ -696,9 +696,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" dependencies = [ "anstream", "anstyle", @@ -708,14 +708,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", "proc-macro2", "quote", - "syn", + "syn 3.0.4", ] [[package]] @@ -735,9 +735,9 @@ dependencies = [ [[package]] name = "cmov" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "colorchoice" @@ -747,9 +747,9 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "combine" -version = "4.6.7" +version = "4.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" dependencies = [ "bytes", "memchr", @@ -794,9 +794,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ "libc", ] @@ -813,9 +813,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +checksum = "8498c871161e1742aaa9d52551b2d6ebdd4c3d45a3be423e3728f33b955be550" dependencies = [ "cfg-if", ] @@ -876,9 +876,6 @@ name = "deranged" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" -dependencies = [ - "powerfmt", -] [[package]] name = "digest" @@ -898,7 +895,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "block-buffer 0.12.0", + "block-buffer 0.12.1", "const-oid 0.10.2", "crypto-common 0.2.2", "ctutils", @@ -906,13 +903,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.4", ] [[package]] @@ -937,9 +934,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "elliptic-curve" @@ -979,9 +976,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 = "ff" @@ -995,17 +992,16 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" [[package]] name = "flate2" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" dependencies = [ - "miniz_oxide", "zlib-rs", ] @@ -1038,12 +1034,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "foldhash" version = "0.2.0" @@ -1067,36 +1057,36 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", ] [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-task", @@ -1130,31 +1120,18 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi 5.3.0", - "wasip2", + "r-efi", + "rand_core 0.10.1", "wasm-bindgen", ] -[[package]] -name = "getrandom" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" -dependencies = [ - "cfg-if", - "libc", - "r-efi 6.0.0", - "wasip2", - "wasip3", -] - [[package]] name = "group" version = "0.13.0" @@ -1168,35 +1145,16 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.27" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "h2" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733" +checksum = "ef8e5e5a340588f4452631496976cf8636d4a7ecf600239fdc27615d2530bc16" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.4.2", + "http 1.5.0", "indexmap", "slab", "tokio", @@ -1204,15 +1162,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash 0.1.5", -] - [[package]] name = "hashbrown" version = "0.16.1" @@ -1221,7 +1170,7 @@ checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", - "foldhash 0.2.0", + "foldhash", ] [[package]] @@ -1273,9 +1222,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" dependencies = [ "bytes", "itoa", @@ -1294,24 +1243,24 @@ 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 1.4.2", + "http 1.5.0", ] [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" dependencies = [ "bytes", "futures-core", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "pin-project-lite", ] @@ -1321,58 +1270,28 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" dependencies = [ "typenum", ] [[package]] name = "hyper" -version = "0.14.32" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.5.10", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", - "h2 0.4.14", - "http 1.4.2", - "http-body 1.0.1", + "h2", + "http 1.5.0", + "http-body 1.1.0", "httparse", "itoa", "pin-project-lite", @@ -1381,34 +1300,19 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "log", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", -] - [[package]] name = "hyper-rustls" version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http 1.4.2", - "hyper 1.10.1", + "http 1.5.0", + "hyper", "hyper-util", - "rustls 0.23.40", + "rustls", "rustls-native-certs", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower-service", ] @@ -1422,14 +1326,14 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.4.2", - "http-body 1.0.1", - "hyper 1.10.1", + "http 1.5.0", + "http-body 1.1.0", + "hyper", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.3", + "socket2", "tokio", "tower-service", "tracing", @@ -1461,9 +1365,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" dependencies = [ "displaydoc", "potential_utf", @@ -1475,9 +1379,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" dependencies = [ "displaydoc", "litemap", @@ -1488,9 +1392,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -1502,16 +1406,17 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" [[package]] name = "icu_properties" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" dependencies = [ + "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", @@ -1522,15 +1427,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" [[package]] name = "icu_provider" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" dependencies = [ "displaydoc", "icu_locale_core", @@ -1541,12 +1446,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "idna" version = "1.1.0" @@ -1570,21 +1469,19 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "07aa2048142242915a31d35844fb311e0e53fcca590c3a0a40dcf1b841fa09eb" dependencies = [ "equivalent", "hashbrown 0.17.1", - "serde", - "serde_core", ] [[package]] name = "ipnet" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" [[package]] name = "is_terminal_polyfill" @@ -1625,7 +1522,7 @@ dependencies = [ "quote", "rustc_version", "simd_cesu8", - "syn", + "syn 2.0.119", ] [[package]] @@ -1644,42 +1541,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[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 = "linux-raw-sys" @@ -1689,15 +1579,15 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "log" -version = "0.4.29" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "lru" @@ -1726,25 +1616,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", - "simd-adler32", -] +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "mio" -version = "1.2.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "wasi", @@ -1753,15 +1633,15 @@ 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" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" dependencies = [ "num-traits", ] @@ -1849,10 +1729,16 @@ dependencies = [ ] [[package]] -name = "potential_utf" -version = "0.1.5" +name = "pkg-config" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" + +[[package]] +name = "potential_utf" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" dependencies = [ "zerovec", ] @@ -1863,25 +1749,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "primeorder" version = "0.13.6" @@ -1893,18 +1760,18 @@ 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", ] [[package]] name = "quinn" -version = "0.11.9" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" dependencies = [ "bytes", "cfg_aliases", @@ -1912,8 +1779,8 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.40", - "socket2 0.6.3", + "rustls", + "socket2", "thiserror", "tokio", "tracing", @@ -1922,18 +1789,19 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.14" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +checksum = "04759210543be93709136e28212294a659ef5001836ff4eab4d663e4529bba83" dependencies = [ "aws-lc-rs", "bytes", - "getrandom 0.3.4", + "getrandom 0.4.3", "lru-slab", "rand", + "rand_pcg", "ring", "rustc-hash", - "rustls 0.23.40", + "rustls", "rustls-pki-types", "slab", "thiserror", @@ -1944,33 +1812,27 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.3", + "socket2", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - [[package]] name = "r-efi" version = "6.0.0" @@ -1979,22 +1841,13 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.9.4" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ - "rand_chacha", - "rand_core 0.9.5", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.5", + "chacha20", + "getrandom 0.4.3", + "rand_core 0.10.1", ] [[package]] @@ -2008,11 +1861,17 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.9.5" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" dependencies = [ - "getrandom 0.3.4", + "rand_core 0.10.1", ] [[package]] @@ -2030,25 +1889,25 @@ dependencies = [ "base64", "bytes", "futures-core", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", - "hyper 1.10.1", - "hyper-rustls 0.27.9", + "hyper", + "hyper-rustls", "hyper-util", "js-sys", "log", "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.40", + "rustls", "rustls-pki-types", "rustls-platform-verifier", "serde", "serde_json", "sync_wrapper", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower", "tower-http", "tower-service", @@ -2084,9 +1943,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -2112,35 +1971,23 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.12" +version = "0.23.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.23.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" dependencies = [ "aws-lc-rs", "once_cell", "rustls-pki-types", - "rustls-webpki 0.103.13", + "rustls-webpki", "subtle", "zeroize", ] [[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", @@ -2150,9 +1997,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.1" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ "web-time", "zeroize", @@ -2169,10 +2016,10 @@ dependencies = [ "jni", "log", "once_cell", - "rustls 0.23.40", + "rustls", "rustls-native-certs", "rustls-platform-verifier-android", - "rustls-webpki 0.103.13", + "rustls-webpki", "security-framework", "security-framework-sys", "webpki-root-certs", @@ -2187,19 +2034,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.101.7" +version = "0.103.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" dependencies = [ "aws-lc-rs", "ring", @@ -2209,9 +2046,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "ryu" @@ -2237,16 +2074,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sec1" version = "0.7.3" @@ -2292,9 +2119,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[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", @@ -2302,29 +2129,29 @@ 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", + "syn 3.0.4", ] [[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", @@ -2335,9 +2162,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", @@ -2351,7 +2178,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", + "cpufeatures 0.3.1", "digest 0.11.3", ] @@ -2373,7 +2200,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", + "cpufeatures 0.3.1", "digest 0.11.3", ] @@ -2405,15 +2232,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", @@ -2433,25 +2260,15 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "socket2" -version = "0.5.10" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "socket2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -2459,9 +2276,9 @@ dependencies = [ [[package]] name = "spin" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" +checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3" [[package]] name = "spki" @@ -2493,9 +2310,20 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" dependencies = [ "proc-macro2", "quote", @@ -2519,7 +2347,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2529,7 +2357,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix", "windows-sys 0.61.2", @@ -2537,29 +2365,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.4", ] [[package]] name = "time" -version = "0.3.47" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" dependencies = [ "deranged", "num-conv", @@ -2571,15 +2399,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", @@ -2587,9 +2415,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" dependencies = [ "displaydoc", "zerovec", @@ -2597,9 +2425,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", ] @@ -2612,39 +2440,29 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", "mio", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", + "socket2", "tokio-macros", "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", + "syn 3.0.4", ] [[package]] @@ -2653,19 +2471,20 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.40", + "rustls", "tokio", ] [[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", ] @@ -2694,8 +2513,8 @@ dependencies = [ "bitflags", "bytes", "futures-util", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "pin-project-lite", "tower", "tower-layer", @@ -2734,7 +2553,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2760,9 +2579,9 @@ checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" [[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 = "unicode-ident" @@ -2770,12 +2589,6 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "untrusted" version = "0.9.0" @@ -2814,9 +2627,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.1" +version = "1.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "b5772d71c9be8a8a6ac2117d949c5b224c1b72241bb611d9a3012edcf8af7812" dependencies = [ "js-sys", "wasm-bindgen", @@ -2859,29 +2672,11 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", -] - [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" dependencies = [ "cfg-if", "once_cell", @@ -2892,9 +2687,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" dependencies = [ "js-sys", "wasm-bindgen", @@ -2902,9 +2697,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2912,65 +2707,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 2.0.119", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" dependencies = [ "js-sys", "wasm-bindgen", @@ -2988,9 +2749,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" +checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" dependencies = [ "rustls-pki-types", ] @@ -3025,7 +2786,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3036,7 +2797,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3072,15 +2833,6 @@ dependencies = [ "windows-targets", ] -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-sys" version = "0.61.2" @@ -3154,105 +2906,11 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "writeable" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "xmlparser" @@ -3262,9 +2920,9 @@ checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" [[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", @@ -3279,30 +2937,10 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] -[[package]] -name = "zerocopy" -version = "0.8.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "zerofrom" version = "0.1.8" @@ -3320,21 +2958,21 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" [[package]] name = "zerotrie" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" dependencies = [ "displaydoc", "yoke", @@ -3343,9 +2981,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" dependencies = [ "yoke", "zerofrom", @@ -3354,13 +2992,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.4", ] [[package]] @@ -3379,15 +3017,15 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.3" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" +checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" [[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 = "zopfli" diff --git a/tools/ci/Cargo.toml b/tools/ci/Cargo.toml index d50f4da12..6ab0bdbd2 100644 --- a/tools/ci/Cargo.toml +++ b/tools/ci/Cargo.toml @@ -5,9 +5,9 @@ edition = "2024" license = "AGPL-3.0-or-later" [dependencies] -anyhow = "1.0.102" +anyhow = "1.0.104" aws-config = "1.8.18" -aws-sdk-s3 = "1.135.0" +aws-sdk-s3 = { version = "1.135.0", default-features = false, features = ["default-https-client", "http-1x", "rt-tokio", "sigv4a"] } base64 = "0.22.1" bytes = "1.11.1" chrono = "0.4.45" diff --git a/tools/ci/check-desktop-native-workspaces.sh b/tools/ci/check-desktop-native-workspaces.sh new file mode 100755 index 000000000..a70f31abc --- /dev/null +++ b/tools/ci/check-desktop-native-workspaces.sh @@ -0,0 +1,253 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: AGPL-3.0-or-later + +set -euo pipefail + +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +repo_root="$(cd "$script_dir/../.." && pwd)" +native_root="$repo_root/fluxer_desktop/native" +cargo_bin="${CARGO_BIN:-cargo}" +cargo_deny_bin="${CARGO_DENY_BIN:-cargo-deny}" +native_target_dir="${DESKTOP_NATIVE_CARGO_TARGET_DIR:-$repo_root/target/desktop-native-workspaces}" +mode="${1:-}" + +linux_workspaces=( + "audio-apm/Cargo.toml" + "audio-mix/Cargo.toml" + "audio-timing/Cargo.toml" + "encoder-ring/Cargo.toml" + "gpu-rebuild/Cargo.toml" + "hardware-encoder/Cargo.toml" + "linux-audio-capture/Cargo.toml" + "linux-evdev/Cargo.toml" + "linux-input-hook/Cargo.toml" + "linux-notifications/Cargo.toml" + "linux-portals/Cargo.toml" + "linux-screen-capture/Cargo.toml" + "platform-info/Cargo.toml" + "rt-thread/Cargo.toml" + "rust/Cargo.toml" + "screen-frame-bus/Cargo.toml" + "system-hunspell/Cargo.toml" + "webauthn/Cargo.toml" +) + +fuzz_workspaces=( + "rust/fuzz/Cargo.toml" +) + +macos_workspaces=( + "mac-app-audio/Cargo.toml" + "mac-clipboard/Cargo.toml" + "mac-screen-capture/Cargo.toml" + "mac-sysctl/Cargo.toml" + "mac-tcc/Cargo.toml" + "macos-input-hook/Cargo.toml" +) + +windows_workspaces=( + "win-clipboard/Cargo.toml" + "win-game-capture/Cargo.toml" + "win-process-loopback/Cargo.toml" + "win-shell/Cargo.toml" + "win-toast/Cargo.toml" + "windows-input-hook/Cargo.toml" +) + +fail() { + printf '%s\n' "$1" >&2 + exit 1 +} + +if [ "$#" -ne 1 ]; then + fail "Usage: $0 dependencies|fmt|clippy|test" +fi + +case "$mode" in +dependencies | fmt | clippy | test) ;; +*) fail "Unknown desktop native workspace check: $mode" ;; +esac + +manifest_list="$(mktemp)" +discovered_inventory="$(mktemp)" +expected_inventory="$(mktemp)" + +cleanup() { + rm -f "$manifest_list" "$discovered_inventory" "$expected_inventory" +} + +trap cleanup EXIT + +workspace_category() { + local relative_manifest="$1" + local classified_manifest + + for classified_manifest in "${linux_workspaces[@]}"; do + if [ "$relative_manifest" = "$classified_manifest" ]; then + printf 'linux\n' + return + fi + done + + for classified_manifest in "${fuzz_workspaces[@]}"; do + if [ "$relative_manifest" = "$classified_manifest" ]; then + printf 'fuzz\n' + return + fi + done + + for classified_manifest in "${macos_workspaces[@]}"; do + if [ "$relative_manifest" = "$classified_manifest" ]; then + printf 'macos\n' + return + fi + done + + for classified_manifest in "${windows_workspaces[@]}"; do + if [ "$relative_manifest" = "$classified_manifest" ]; then + printf 'windows\n' + return + fi + done + + printf 'unknown\n' +} + +run_dependencies() { + local manifest="$1" + + "$cargo_deny_bin" \ + --manifest-path "$manifest" \ + --all-features \ + --locked \ + check \ + -D warnings \ + -A unmatched-skip \ + -A unnecessary-skip \ + -D duplicate +} + +run_format() { + local manifest="$1" + + "$cargo_bin" fmt --manifest-path "$manifest" --all -- --check +} + +run_clippy() { + local manifest="$1" + + CARGO_TARGET_DIR="$native_target_dir" \ + "$cargo_bin" clippy \ + --manifest-path "$manifest" \ + --workspace \ + --all-targets \ + --all-features \ + --locked \ + -- \ + -D warnings +} + +run_tests() { + local manifest="$1" + + CI=true CARGO_TARGET_DIR="$native_target_dir" \ + "$cargo_bin" test \ + --manifest-path "$manifest" \ + --workspace \ + --all-features \ + --locked +} + +find "$native_root" -type d -name target -prune -o -type f -name Cargo.toml -print | LC_ALL=C sort >"$manifest_list" + +if [ ! -s "$manifest_list" ]; then + fail "No independent desktop native workspaces found" +fi + +linux_count=0 +fuzz_count=0 +macos_count=0 +windows_count=0 + +while IFS= read -r manifest; do + if ! grep -Eq '^[[:space:]]*\[workspace\][[:space:]]*$' "$manifest"; then + fail "Desktop native manifest is not an independent workspace: $manifest" + fi + + manifest_dir="${manifest%/Cargo.toml}" + if [ ! -f "$manifest_dir/Cargo.lock" ]; then + fail "Desktop native workspace has no adjacent Cargo.lock: $manifest" + fi + + relative_manifest="${manifest#"$native_root/"}" + category="$(workspace_category "$relative_manifest")" + case "$category" in + linux) linux_count=$((linux_count + 1)) ;; + fuzz) fuzz_count=$((fuzz_count + 1)) ;; + macos) macos_count=$((macos_count + 1)) ;; + windows) windows_count=$((windows_count + 1)) ;; + *) fail "Unclassified desktop native workspace: $relative_manifest" ;; + esac + printf '%s\n' "$relative_manifest" >>"$discovered_inventory" +done <"$manifest_list" + +printf '%s\n' \ + "${linux_workspaces[@]}" \ + "${fuzz_workspaces[@]}" \ + "${macos_workspaces[@]}" \ + "${windows_workspaces[@]}" | + LC_ALL=C sort >"$expected_inventory" + +if ! diff -u "$expected_inventory" "$discovered_inventory"; then + fail "Desktop native workspace inventory does not match discovery" +fi + +if [ "$mode" = clippy ] || [ "$mode" = test ]; then + host_kernel="$(uname -s)" + if [ "$host_kernel" != Linux ]; then + fail "Desktop native $mode checks require a Linux host, found: $host_kernel" + fi +fi + +checked_count=0 + +cd "$native_root" + +while IFS= read -r manifest; do + relative_manifest="${manifest#"$native_root/"}" + category="$(workspace_category "$relative_manifest")" + + case "$mode" in + dependencies) + printf 'Dependencies: %s\n' "$relative_manifest" + run_dependencies "$manifest" + ;; + fmt) + printf 'Format: %s\n' "$relative_manifest" + run_format "$manifest" + ;; + clippy) + case "$category" in + linux) printf 'Clippy full Linux/shared coverage: %s\n' "$relative_manifest" ;; + fuzz) printf 'Clippy fuzz-target coverage: %s\n' "$relative_manifest" ;; + macos) printf 'Clippy Linux stub/common coverage; macOS backend not validated: %s\n' "$relative_manifest" ;; + windows) printf 'Clippy Linux stub/common coverage; Windows backend not validated: %s\n' "$relative_manifest" ;; + esac + run_clippy "$manifest" + ;; + test) + case "$category" in + linux) printf 'Test full Linux/shared coverage: %s\n' "$relative_manifest" ;; + fuzz) printf 'Test command is a no-op for test=false fuzz binaries: %s\n' "$relative_manifest" ;; + macos) printf 'Test Linux stub/common coverage; macOS backend not validated: %s\n' "$relative_manifest" ;; + windows) printf 'Test Linux stub/common coverage; Windows backend not validated: %s\n' "$relative_manifest" ;; + esac + run_tests "$manifest" + ;; + esac + checked_count=$((checked_count + 1)) +done <"$manifest_list" + +discovered_count=$((linux_count + fuzz_count + macos_count + windows_count)) +printf 'Desktop native workspace categories: discovered=%s linux-full=%s fuzz=%s macos-stub-common=%s windows-stub-common=%s\n' "$discovered_count" "$linux_count" "$fuzz_count" "$macos_count" "$windows_count" +printf 'Desktop native %s summary: checked=%s\n' "$mode" "$checked_count" diff --git a/tools/ci/src/app_wasm.rs b/tools/ci/src/app_wasm.rs index 1bca0f1b8..6622753b6 100644 --- a/tools/ci/src/app_wasm.rs +++ b/tools/ci/src/app_wasm.rs @@ -11,7 +11,7 @@ use std::fs; use std::path::{Path, PathBuf}; use tempfile::TempDir; -const LIBFLUXCORE_WASM_BINDGEN_VERSION: &str = "0.2.122"; +const LIBFLUXCORE_WASM_BINDGEN_VERSION: &str = "0.2.123"; const LIBFLUXCORE_WASM_SIZE_BUDGET_BYTES: u64 = 300 * 1024; const LIBFLUXCORE_WRAPPER_JS: &str = include_str!("../templates/libfluxcore_wrapper.js"); const LIBFLUXCORE_WRAPPER_DTS: &str = include_str!("../templates/libfluxcore_wrapper.d.ts"); diff --git a/tools/ci/src/gateway.rs b/tools/ci/src/gateway.rs index de6b6d39a..b7a1434fb 100644 --- a/tools/ci/src/gateway.rs +++ b/tools/ci/src/gateway.rs @@ -1,14 +1,15 @@ // SPDX-License-Identifier: AGPL-3.0-or-later use crate::common::{CommandSpec, command_succeeds, output_text, run_command}; -use anyhow::{Context, Result, anyhow, bail, ensure}; +use anyhow::{Context, Result, anyhow, ensure}; use clap::{Args, ValueEnum}; use std::env; -use std::ffi::OsString; +use std::ffi::{OsStr, OsString}; use std::fs; use std::path::{Path, PathBuf}; const GATEWAY_NIF_CRATES: &[&str] = &["push_markdown_plaintext_nif", "guild_member_list_oset_nif"]; +const GNU_LD_FATAL_WARNINGS: &str = "-Wl,--fatal-warnings"; #[derive(Debug, Args, Clone)] pub struct BuildGatewayNifsArgs { @@ -168,13 +169,7 @@ fn build_gateway_nifs(gateway_dir: &Path) -> Result<()> { "Expected NIF artifact was not produced: {}", build.artifact_path.display() ); - fs::copy(&build.artifact_path, &build.output_path).with_context(|| { - format!( - "Failed to copy {} to {}", - build.artifact_path.display(), - build.output_path.display() - ) - })?; + install_gateway_nif(&build.artifact_path, &build.output_path)?; println!( "Installed gateway NIF {} -> {}", build.crate_name, @@ -185,6 +180,38 @@ fn build_gateway_nifs(gateway_dir: &Path) -> Result<()> { Ok(()) } +fn install_gateway_nif(artifact_path: &Path, output_path: &Path) -> Result<()> { + let output_dir = output_path.parent().ok_or_else(|| { + anyhow!( + "Gateway NIF output path has no parent: {}", + output_path.display() + ) + })?; + let staged_artifact = tempfile::NamedTempFile::new_in(output_dir).with_context(|| { + format!( + "Failed to create staged gateway NIF beside {}", + output_path.display() + ) + })?; + fs::copy(artifact_path, staged_artifact.path()).with_context(|| { + format!( + "Failed to stage gateway NIF {} for {}", + artifact_path.display(), + output_path.display() + ) + })?; + staged_artifact + .persist(output_path) + .map_err(|error| error.error) + .with_context(|| { + format!( + "Failed to atomically install gateway NIF {}", + output_path.display() + ) + })?; + Ok(()) +} + fn run_gateway_check_step(label: &str, run: impl FnOnce() -> Result<()>) -> Result<()> { println!("========================================"); println!(" {label}"); @@ -207,22 +234,12 @@ fn run_gateway_fmt_check(gateway_dir: &Path) -> Result<()> { "rebar3 is required for gateway formatting" ); let output = crate::common::capture(rebar_command(gateway_dir, ["fmt", "--check"]))?; - if output.status == 0 { - return Ok(()); - } - - let combined = format!( - "{}{}", - String::from_utf8_lossy(&output.stdout), - String::from_utf8_lossy(&output.stderr) + ensure!( + output.status == 0, + "gateway formatting failed with exit code {}", + output.status ); - if combined.contains("Command fmt not found") - || combined.to_ascii_lowercase().contains("not found") - { - println!("rebar3 fmt plugin is not configured; skipping gateway formatting check."); - return Ok(()); - } - bail!("gateway formatting failed with exit code {}", output.status) + Ok(()) } fn run_eqwalizer(gateway_dir: &Path, profile: &str) -> Result<()> { @@ -292,9 +309,29 @@ fn rebar_command( if should_skip_plugins { spec = spec.env("REBAR_SKIP_PROJECT_PLUGINS", "1"); } + let current_ldflags = env::var_os("LDFLAGS"); + if let Some(ldflags) = zstd_probe_ldflags( + env::consts::OS, + env::consts::ARCH, + current_ldflags.as_deref(), + ) { + spec = spec.env("LDFLAGS", ldflags); + } spec } +fn zstd_probe_ldflags(os: &str, arch: &str, current: Option<&OsStr>) -> Option { + if os != "linux" || arch != "aarch64" { + return None; + } + let mut ldflags = current.unwrap_or_default().to_os_string(); + if !ldflags.is_empty() { + ldflags.push(" "); + } + ldflags.push(GNU_LD_FATAL_WARNINGS); + Some(ldflags) +} + fn should_skip_rebar_project_plugins(args: &[OsString]) -> bool { !args .iter() @@ -493,4 +530,18 @@ mod tests { .any(|(key, _)| key == &OsString::from("REBAR_SKIP_PROJECT_PLUGINS")) ); } + + #[test] + fn zstd_probe_linker_warnings_are_fatal_only_on_aarch64_linux() { + assert_eq!( + zstd_probe_ldflags("linux", "aarch64", None), + Some(OsString::from(GNU_LD_FATAL_WARNINGS)) + ); + assert_eq!( + zstd_probe_ldflags("linux", "aarch64", Some(OsStr::new("-Wl,--as-needed"))), + Some(OsString::from("-Wl,--as-needed -Wl,--fatal-warnings")) + ); + assert_eq!(zstd_probe_ldflags("linux", "x86_64", None), None); + assert_eq!(zstd_probe_ldflags("macos", "aarch64", None), None); + } } diff --git a/tools/content/update-frozen-snapshot/Cargo.toml b/tools/content/update-frozen-snapshot/Cargo.toml index 77aee14a8..a94492dce 100644 --- a/tools/content/update-frozen-snapshot/Cargo.toml +++ b/tools/content/update-frozen-snapshot/Cargo.toml @@ -5,7 +5,7 @@ edition.workspace = true license.workspace = true [dependencies] -anyhow = "1.0.102" +anyhow = "1.0.104" base64 = "0.22.1" sha2 = "0.11.0" diff --git a/tools/dev/Cargo.toml b/tools/dev/Cargo.toml index 6c03cba23..cbfbc3ff9 100644 --- a/tools/dev/Cargo.toml +++ b/tools/dev/Cargo.toml @@ -3,10 +3,11 @@ name = "fluxer-dev" version = "0.1.0" edition.workspace = true license.workspace = true +publish = false [dependencies] fluxer_common = { path = "../../fluxer_common" } -anyhow = "1.0.102" +anyhow = "1.0.104" axum = "0.8.9" base64 = "0.22.1" clap = { version = "4.6.1", features = ["derive", "env"] } diff --git a/tools/i18n_auto/Cargo.toml b/tools/i18n_auto/Cargo.toml index e910d08d9..acb01ad59 100644 --- a/tools/i18n_auto/Cargo.toml +++ b/tools/i18n_auto/Cargo.toml @@ -5,7 +5,7 @@ edition.workspace = true license.workspace = true [dependencies] -anyhow = "1.0.102" +anyhow = "1.0.104" clap = { version = "4.6.1", features = ["derive"] } regex = "1.12" reqwest = { version = "0.13.4", default-features = false, features = ["blocking", "json", "rustls"] }