diff --git a/.github/update.log b/.github/update.log index 66c029a364..2d045faab1 100644 --- a/.github/update.log +++ b/.github/update.log @@ -1043,3 +1043,4 @@ Update On Thu Jun 26 20:39:25 CEST 2025 Update On Fri Jun 27 20:36:54 CEST 2025 Update On Sat Jun 28 20:36:43 CEST 2025 Update On Sun Jun 29 20:38:58 CEST 2025 +Update On Mon Jun 30 20:37:40 CEST 2025 diff --git a/clash-nyanpasu/backend/Cargo.lock b/clash-nyanpasu/backend/Cargo.lock index b7d534c822..0751936f28 100644 --- a/clash-nyanpasu/backend/Cargo.lock +++ b/clash-nyanpasu/backend/Cargo.lock @@ -989,7 +989,7 @@ dependencies = [ "boa_interner", "boa_macros", "boa_string", - "indexmap 2.9.0", + "indexmap 2.10.0", "num-bigint", "rustc-hash 2.1.1", ] @@ -1015,7 +1015,7 @@ dependencies = [ "fast-float2", "hashbrown 0.15.4", "icu_normalizer 1.5.0", - "indexmap 2.9.0", + "indexmap 2.10.0", "intrusive-collections", "itertools 0.13.0", "num-bigint", @@ -1061,7 +1061,7 @@ dependencies = [ "boa_gc", "boa_macros", "hashbrown 0.15.4", - "indexmap 2.9.0", + "indexmap 2.10.0", "once_cell", "phf 0.11.3", "rustc-hash 2.1.1", @@ -1547,7 +1547,7 @@ dependencies = [ "hex", "humansize", "image", - "indexmap 2.9.0", + "indexmap 2.10.0", "itertools 0.14.0", "log", "md-5", @@ -3796,7 +3796,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.9.0", + "indexmap 2.10.0", "slab", "tokio", "tokio-util", @@ -4445,9 +4445,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", "hashbrown 0.15.4", @@ -5418,7 +5418,7 @@ dependencies = [ "cfg_aliases", "codespan-reporting", "hexf-parse", - "indexmap 2.9.0", + "indexmap 2.10.0", "log", "rustc-hash 1.1.0", "spirv", @@ -5838,7 +5838,7 @@ dependencies = [ "http-body-util", "hyper", "hyper-util", - "indexmap 2.9.0", + "indexmap 2.10.0", "interprocess", "nyanpasu-utils", "pin-project-lite", @@ -6844,7 +6844,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.9.0", + "indexmap 2.10.0", ] [[package]] @@ -7098,7 +7098,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eac26e981c03a6e53e0aee43c113e3202f5581d5360dae7bd2c70e800dd0451d" dependencies = [ "base64 0.22.1", - "indexmap 2.9.0", + "indexmap 2.10.0", "quick-xml 0.32.0", "serde", "time", @@ -8299,7 +8299,7 @@ version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "itoa 1.0.15", "memchr", "ryu", @@ -8358,7 +8358,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.9.0", + "indexmap 2.10.0", "serde", "serde_derive", "serde_json", @@ -8384,7 +8384,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "itoa 1.0.15", "ryu", "serde", @@ -8396,7 +8396,7 @@ name = "serde_yaml_ng" version = "0.10.0" source = "git+https://github.com/libnyanpasu/serde-yaml-ng.git?branch=feat/specta#3078760ab9e9a3a9e18ebb4c5d3e577eb74c4a5c" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "itoa 1.0.15", "ryu", "serde", @@ -8762,7 +8762,7 @@ version = "2.0.0-rc.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab7f01e9310a820edd31c80fde3cae445295adde21a3f9416517d7d65015b971" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "paste", "serde", "serde_json", @@ -9589,7 +9589,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8d321dbc6f998d825ab3f0d62673e810c861aac2d0de2cc2c395328f1d113b4" dependencies = [ "embed-resource", - "indexmap 2.9.0", + "indexmap 2.10.0", "toml", ] @@ -10019,7 +10019,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "toml_datetime", "winnow 0.5.40", ] @@ -10030,7 +10030,7 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "toml_datetime", "winnow 0.5.40", ] @@ -10041,7 +10041,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "serde", "serde_spanned", "toml_datetime", @@ -11130,7 +11130,7 @@ dependencies = [ "bitflags 2.9.1", "cfg_aliases", "document-features", - "indexmap 2.9.0", + "indexmap 2.10.0", "log", "naga", "once_cell", @@ -12496,7 +12496,7 @@ dependencies = [ "crc32fast", "crossbeam-utils", "displaydoc", - "indexmap 2.9.0", + "indexmap 2.10.0", "memchr", "thiserror 2.0.12", ] @@ -12516,7 +12516,7 @@ dependencies = [ "flate2", "getrandom 0.3.3", "hmac", - "indexmap 2.9.0", + "indexmap 2.10.0", "lzma-rs", "memchr", "pbkdf2", diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index ccd08f8448..5fd1b4ff8f 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -16,10 +16,10 @@ "@emotion/styled": "11.14.1", "@juggle/resize-observer": "3.4.0", "@material/material-color-utilities": "0.3.0", - "@mui/icons-material": "7.1.2", + "@mui/icons-material": "7.2.0", "@mui/lab": "7.0.0-beta.14", "@mui/x-date-pickers": "8.6.0", - "@mui/material": "7.1.2", + "@mui/material": "7.2.0", "@nyanpasu/interface": "workspace:^", "@nyanpasu/ui": "workspace:^", "@tailwindcss/postcss": "4.1.11", @@ -55,12 +55,12 @@ "@csstools/normalize.css": "12.1.1", "@emotion/babel-plugin": "11.13.5", "@emotion/react": "11.14.0", - "@iconify/json": "2.2.353", + "@iconify/json": "2.2.354", "@monaco-editor/react": "4.7.0", "@tanstack/react-query": "5.81.5", - "@tanstack/react-router": "1.122.0", - "@tanstack/react-router-devtools": "1.122.0", - "@tanstack/router-plugin": "1.122.1", + "@tanstack/react-router": "1.123.0", + "@tanstack/react-router-devtools": "1.123.0", + "@tanstack/router-plugin": "1.123.0", "@tauri-apps/plugin-clipboard-manager": "2.2.2", "@tauri-apps/plugin-dialog": "2.2.2", "@tauri-apps/plugin-fs": "2.3.0", diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json index f57942a97f..7a317f66bd 100644 --- a/clash-nyanpasu/frontend/ui/package.json +++ b/clash-nyanpasu/frontend/ui/package.json @@ -12,9 +12,9 @@ }, "dependencies": { "@material/material-color-utilities": "0.3.0", - "@mui/icons-material": "7.1.2", + "@mui/icons-material": "7.2.0", "@mui/lab": "7.0.0-beta.14", - "@mui/material": "7.1.2", + "@mui/material": "7.2.0", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-scroll-area": "1.2.9", "@tauri-apps/api": "2.5.0", diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index 7044b24e35..1a6c790642 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -225,17 +225,17 @@ importers: specifier: 0.3.0 version: 0.3.0 '@mui/icons-material': - specifier: 7.1.2 - version: 7.1.2(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + specifier: 7.2.0 + version: 7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@mui/lab': specifier: 7.0.0-beta.14 - version: 7.0.0-beta.14(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.0.0-beta.14(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mui/material': - specifier: 7.1.2 - version: 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 7.2.0 + version: 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mui/x-date-pickers': specifier: 8.6.0 - version: 8.6.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 8.6.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@nyanpasu/interface': specifier: workspace:^ version: link:../interface @@ -247,7 +247,7 @@ importers: version: 4.1.11 '@tanstack/router-zod-adapter': specifier: 1.81.5 - version: 1.81.5(@tanstack/react-router@1.122.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(zod@3.25.67) + version: 1.81.5(@tanstack/react-router@1.123.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(zod@3.25.67) '@tauri-apps/api': specifier: 2.5.0 version: 2.5.0 @@ -283,13 +283,13 @@ importers: version: 0.4.0 material-react-table: specifier: npm:@greenhat616/material-react-table@4.0.0 - version: '@greenhat616/material-react-table@4.0.0(c5381dcc741471ab570cccc6ddebbd6b)' + version: '@greenhat616/material-react-table@4.0.0(874cdb2714dc804f7464df7a448236e1)' monaco-editor: specifier: 0.52.2 version: 0.52.2 mui-color-input: specifier: 7.0.0 - version: 7.0.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.0.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: specifier: 19.1.0 version: 19.1.0 @@ -304,7 +304,7 @@ importers: version: 1.6.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-hook-form-mui: specifier: 7.6.2 - version: 7.6.2(9b2bbb78e62f42055660efe83fb5fc62) + version: 7.6.2(f8250d127bbd4b125e98baa2462a5072) react-i18next: specifier: 15.5.3 version: 15.5.3(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) @@ -337,8 +337,8 @@ importers: specifier: 11.14.0 version: 11.14.0(@types/react@19.1.8)(react@19.1.0) '@iconify/json': - specifier: 2.2.353 - version: 2.2.353 + specifier: 2.2.354 + version: 2.2.354 '@monaco-editor/react': specifier: 4.7.0 version: 4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -346,14 +346,14 @@ importers: specifier: 5.81.5 version: 5.81.5(react@19.1.0) '@tanstack/react-router': - specifier: 1.122.0 - version: 1.122.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 1.123.0 + version: 1.123.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router-devtools': - specifier: 1.122.0 - version: 1.122.0(@tanstack/react-router@1.122.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.122.0)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) + specifier: 1.123.0 + version: 1.123.0(@tanstack/react-router@1.123.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.123.0)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) '@tanstack/router-plugin': - specifier: 1.122.1 - version: 1.122.1(@tanstack/react-router@1.122.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.0(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)) + specifier: 1.123.0 + version: 1.123.0(@tanstack/react-router@1.123.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.0(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)) '@tauri-apps/plugin-clipboard-manager': specifier: 2.2.2 version: 2.2.2 @@ -457,14 +457,14 @@ importers: specifier: 0.3.0 version: 0.3.0 '@mui/icons-material': - specifier: 7.1.2 - version: 7.1.2(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + specifier: 7.2.0 + version: 7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@mui/lab': specifier: 7.0.0-beta.14 - version: 7.0.0-beta.14(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.0.0-beta.14(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mui/material': - specifier: 7.1.2 - version: 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 7.2.0 + version: 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-portal': specifier: 1.1.9 version: 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -1782,8 +1782,8 @@ packages: '@vue/compiler-sfc': optional: true - '@iconify/json@2.2.353': - resolution: {integrity: sha512-X9vslZVyHn3VT9KnFthpQZMzClvCK6IwAO6CC8h3B/4McNY9AlBeN0f6S+UehIH8B/0dtYejxcoIWNo6HrGc+Q==} + '@iconify/json@2.2.354': + resolution: {integrity: sha512-I7sYXaLfvGw0msuc5p2VdQJ4nthbsqLW8IF9j1jaekUcs/xwGVgs3SHO5lEiFglv0odlkCu26CMbboZMvwkTcw==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -1852,14 +1852,14 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@mui/core-downloads-tracker@7.1.2': - resolution: {integrity: sha512-0gLO1PvbJwSYe5ji021tGj6HFqrtEPMGKK4L1zWwRbhzrWWUumUJvMvJUsIgWQIYQsgOnhq9k2Fc1BxLGHDsAg==} + '@mui/core-downloads-tracker@7.2.0': + resolution: {integrity: sha512-d49s7kEgI5iX40xb2YPazANvo7Bx0BLg/MNRwv+7BVpZUzXj1DaVCKlQTDex3gy/0jsCb4w7AY2uH4t4AJvSog==} - '@mui/icons-material@7.1.2': - resolution: {integrity: sha512-slqJByDub7Y1UcokrM17BoMBMvn8n7daXFXVoTv0MEH5k3sHjmsH8ql/Mt3s9vQ20cORDr83UZ448TEGcbrXtw==} + '@mui/icons-material@7.2.0': + resolution: {integrity: sha512-gRCspp3pfjHQyTmSOmYw7kUQTd9Udpdan4R8EnZvqPeoAtHnPzkvjBrBqzKaoAbbBp5bGF7BcD18zZJh4nwu0A==} engines: {node: '>=14.0.0'} peerDependencies: - '@mui/material': ^7.1.2 + '@mui/material': ^7.2.0 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: @@ -1887,13 +1887,13 @@ packages: '@types/react': optional: true - '@mui/material@7.1.2': - resolution: {integrity: sha512-Z5PYKkA6Kd8vS04zKxJNpwuvt6IoMwqpbidV7RCrRQQKwczIwcNcS8L6GnN4pzFYfEs+N9v6co27DmG07rcnoA==} + '@mui/material@7.2.0': + resolution: {integrity: sha512-NTuyFNen5Z2QY+I242MDZzXnFIVIR6ERxo7vntFi9K1wCgSwvIl0HcAO2OOydKqqKApE6omRiYhpny1ZhGuH7Q==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@mui/material-pigment-css': ^7.1.1 + '@mui/material-pigment-css': ^7.2.0 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1917,6 +1917,16 @@ packages: '@types/react': optional: true + '@mui/private-theming@7.2.0': + resolution: {integrity: sha512-y6N1Yt3T5RMxVFnCh6+zeSWBuQdNDm5/UlM0EAYZzZR/1u+XKJWYQmbpx4e+F+1EpkYi3Nk8KhPiQDi83M3zIw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@mui/styled-engine@7.1.1': resolution: {integrity: sha512-R2wpzmSN127j26HrCPYVQ53vvMcT5DaKLoWkrfwUYq3cYytL6TQrCH8JBH3z79B6g4nMZZVoaXrxO757AlShaw==} engines: {node: '>=14.0.0'} @@ -1930,6 +1940,19 @@ packages: '@emotion/styled': optional: true + '@mui/styled-engine@7.2.0': + resolution: {integrity: sha512-yq08xynbrNYcB1nBcW9Fn8/h/iniM3ewRguGJXPIAbHvxEF7Pz95kbEEOAAhwzxMX4okhzvHmk0DFuC5ayvgIQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@mui/system@7.1.1': resolution: {integrity: sha512-Kj1uhiqnj4Zo7PDjAOghtXJtNABunWvhcRU0O7RQJ7WOxeynoH6wXPcilphV8QTFtkKaip8EiNJRiCD+B3eROA==} engines: {node: '>=14.0.0'} @@ -1946,6 +1969,22 @@ packages: '@types/react': optional: true + '@mui/system@7.2.0': + resolution: {integrity: sha512-PG7cm/WluU6RAs+gNND2R9vDwNh+ERWxPkqTaiXQJGIFAyJ+VxhyKfzpdZNk0z0XdmBxxi9KhFOpgxjehf/O0A==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + '@mui/types@7.4.3': resolution: {integrity: sha512-2UCEiK29vtiZTeLdS2d4GndBKacVyxGvReznGXGr+CzW/YhjIX+OHUdCIczZjzcRAgKBGmE9zCIgoV9FleuyRQ==} peerDependencies: @@ -1954,6 +1993,14 @@ packages: '@types/react': optional: true + '@mui/types@7.4.4': + resolution: {integrity: sha512-p63yhbX52MO/ajXC7hDHJA5yjzJekvWD3q4YDLl1rSg+OXLczMYPvTuSuviPRCgRX8+E42RXz1D/dz9SxPSlWg==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@mui/utils@7.1.1': resolution: {integrity: sha512-BkOt2q7MBYl7pweY2JWwfrlahhp+uGLR8S+EhiyRaofeRYUWL2YKbSGQvN4hgSN1i8poN0PaUiii1kEMrchvzg==} engines: {node: '>=14.0.0'} @@ -1964,6 +2011,16 @@ packages: '@types/react': optional: true + '@mui/utils@7.2.0': + resolution: {integrity: sha512-O0i1GQL6MDzhKdy9iAu5Yr0Sz1wZjROH1o3aoztuivdCXqEeQYnEjTDiRLGuFxI9zrUbTHBwobMyQH5sNtyacw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@mui/x-date-pickers@8.6.0': resolution: {integrity: sha512-zZsyEJrmC2zv9noQGTLpjsKmbHxiaO0exKwQgvn/CbCIl6Dqlo6E6l+R3V5uB93u5mUK3yLsVHzeLWARLZBC9A==} engines: {node: '>=14.0.0'} @@ -2881,16 +2938,16 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-devtools@1.122.0': - resolution: {integrity: sha512-UClUnO+PFvX5Ddlhhfkgo/7qSRTM/a/jsT7V5dz9LrSaPCsh7oLQgm6lj1Yu8U9GfpCQBLzWzbsvmYAdpOa/TQ==} + '@tanstack/react-router-devtools@1.123.0': + resolution: {integrity: sha512-3RWWPCTcPJ9gyEFVvj1VPrH9KlaGm/+BzE5CgInwYzylNg2CHeVWTgdfeLAb7pIawFyhXln+TlJ/4fspzP9TjQ==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.122.0 + '@tanstack/react-router': ^1.123.0 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.122.0': - resolution: {integrity: sha512-vppDHkAxpy0SrpPFDiov70TCyzzKyC5OjADBTnWUq/3bEZFUD5jFGqQn2PwBHZup6dCjFUq95oWkHiv50Xgl2g==} + '@tanstack/react-router@1.123.0': + resolution: {integrity: sha512-cYCwqcKzoHG3uBtEO7ynOxwAcSUOpbrPm9aQCbqtI2fD9Q9qvsd6hmYJ2iQ+RPA2eSLRTAoGW5KckVSQYPfqxw==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -2915,15 +2972,15 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.122.0': - resolution: {integrity: sha512-4b5ID+OKxBfoXr/k3y/GTDJeFDrbNnNRw+pUnEDGVHPfN+L5ocbZXSUl6adSIMP9W3W3ydTyhPw9ge9TH5vVGw==} + '@tanstack/router-core@1.123.0': + resolution: {integrity: sha512-trp4swyaNZaHf5SLutVLcsBJvAtfainr95QIV6OVJy7/3LZgiJLELOAF1eSg5hCkV3PnmSgFcsonYIkF7Dw7xg==} engines: {node: '>=12'} - '@tanstack/router-devtools-core@1.122.0': - resolution: {integrity: sha512-3AWnGAlC6GBrS9ral+CeThwHt690T0RtxMoRpTYdK5aJ5qyegWeQXqIjd6WPWNRjxYSKsDjPY2h77HPoAm7F5Q==} + '@tanstack/router-devtools-core@1.123.0': + resolution: {integrity: sha512-/YQdKXpBuJ/aQ+80UNyXdYTKcF2ffNjzJuLMDWY4oXQpBTDLiAsyZnRMz4Ka1WEZeivIqTapDnSDKOSFLHt15g==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.122.0 + '@tanstack/router-core': ^1.123.0 csstype: ^3.0.10 solid-js: '>=1.9.5' tiny-invariant: ^1.3.3 @@ -2931,16 +2988,16 @@ packages: csstype: optional: true - '@tanstack/router-generator@1.122.0': - resolution: {integrity: sha512-t7ulpzaHs+xrR3UuSV/JxtXa9BM1Glc65kpJCpKuxYAKGmCFMfYKWq9BVl0gJtlM2DrO2OgteoqTc5ooP2jfvg==} + '@tanstack/router-generator@1.123.0': + resolution: {integrity: sha512-F9Rl1qKoe7UmYkYTQQsYnlcYFtEHB2zG5jhk5rBdRk6Y8HalzdvhVTUHZmAQdJhKGi7deRlIYh3PQJLiTC0qYQ==} engines: {node: '>=12'} - '@tanstack/router-plugin@1.122.1': - resolution: {integrity: sha512-8H4H6W+1xqY5gpcqE3eOiSK3qkFx+OWN3VkgAgpsdIz5ly8+r+MljvQaH9rvFndVXsCmRbmejQ5m8BpQDHnSjw==} + '@tanstack/router-plugin@1.123.0': + resolution: {integrity: sha512-+H4jtDReTbAkxFec8TeJ8sljzUCkUNUt2tNGIa0qYvlv765cFH/n1oi+swEI7olgGjdKNTx7i5J1XvG+vCXVOw==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.122.0 + '@tanstack/react-router': ^1.123.0 vite: '>=5.0.0 || >=6.0.0' vite-plugin-solid: ^2.11.2 webpack: '>=5.92.0' @@ -3289,6 +3346,9 @@ packages: '@types/prop-types@15.7.14': resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + '@types/react-dom@19.1.6': resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} peerDependencies: @@ -8564,18 +8624,18 @@ snapshots: '@babel/generator@7.27.5': dependencies: '@babel/parser': 7.27.5 - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@babel/helper-compilation-targets@7.26.5': dependencies: @@ -8601,7 +8661,7 @@ snapshots: '@babel/helper-optimise-call-expression': 7.25.9 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.10) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -8614,7 +8674,7 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -8627,7 +8687,7 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.7) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -8675,15 +8735,15 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 + '@babel/traverse': 7.27.7 + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 + '@babel/traverse': 7.27.7 + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color @@ -8696,8 +8756,8 @@ snapshots: '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 + '@babel/traverse': 7.27.7 + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color @@ -8706,7 +8766,7 @@ snapshots: '@babel/core': 7.26.10 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color @@ -8715,7 +8775,7 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color @@ -8724,17 +8784,17 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@babel/helper-plugin-utils@7.26.5': {} @@ -8745,7 +8805,7 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color @@ -8754,7 +8814,7 @@ snapshots: '@babel/core': 7.26.10 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color @@ -8763,7 +8823,7 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color @@ -8772,21 +8832,21 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 + '@babel/traverse': 7.27.7 + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 + '@babel/traverse': 7.27.7 + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color @@ -8810,20 +8870,20 @@ snapshots: '@babel/helper-wrap-function@7.27.1': dependencies: '@babel/template': 7.27.2 - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 + '@babel/traverse': 7.27.7 + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color '@babel/helpers@7.27.0': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@babel/helpers@7.27.6': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@babel/parser@7.27.0': dependencies: @@ -8831,7 +8891,7 @@ snapshots: '@babel/parser@7.27.5': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@babel/parser@7.27.7': dependencies: @@ -8841,7 +8901,7 @@ snapshots: dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color @@ -8868,7 +8928,7 @@ snapshots: dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color @@ -8920,7 +8980,7 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.4) - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color @@ -8966,7 +9026,7 @@ snapshots: '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -9027,7 +9087,7 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color @@ -9081,7 +9141,7 @@ snapshots: '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color @@ -9337,7 +9397,7 @@ snapshots: dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 esutils: 2.0.3 '@babel/preset-typescript@7.27.1(@babel/core@7.27.7)': @@ -9363,12 +9423,12 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 '@babel/parser': 7.27.0 - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.27.5 + '@babel/parser': 7.27.7 '@babel/types': 7.27.7 '@babel/traverse@7.23.2': @@ -9393,7 +9453,7 @@ snapshots: '@babel/generator': 7.27.0 '@babel/parser': 7.27.0 '@babel/template': 7.27.2 - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 debug: 4.4.1 globals: 11.12.0 transitivePeerDependencies: @@ -9417,7 +9477,7 @@ snapshots: '@babel/generator': 7.27.5 '@babel/parser': 7.27.5 '@babel/template': 7.27.2 - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 debug: 4.4.1 globals: 11.12.0 transitivePeerDependencies: @@ -9864,13 +9924,13 @@ snapshots: '@fastify/busboy@2.1.1': {} - '@greenhat616/material-react-table@4.0.0(c5381dcc741471ab570cccc6ddebbd6b)': + '@greenhat616/material-react-table@4.0.0(874cdb2714dc804f7464df7a448236e1)': dependencies: '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@mui/icons-material': 7.1.2(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@mui/material': 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@mui/x-date-pickers': 8.6.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mui/icons-material': 7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mui/x-date-pickers': 8.6.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/match-sorter-utils': 8.19.4 '@tanstack/react-table': 8.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-virtual': 3.13.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -9904,7 +9964,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@iconify/json@2.2.353': + '@iconify/json@2.2.354': dependencies: '@iconify/types': 2.0.0 pathe: 1.1.2 @@ -10013,20 +10073,20 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@mui/core-downloads-tracker@7.1.2': {} + '@mui/core-downloads-tracker@7.2.0': {} - '@mui/icons-material@7.1.2(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': + '@mui/icons-material@7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/material': 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 optionalDependencies: '@types/react': 19.1.8 - '@mui/lab@7.0.0-beta.14(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mui/lab@7.0.0-beta.14(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/material': 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@mui/types': 7.4.3(@types/react@19.1.8) '@mui/utils': 7.1.1(@types/react@19.1.8)(react@19.1.0) @@ -10039,13 +10099,13 @@ snapshots: '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@types/react': 19.1.8 - '@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/core-downloads-tracker': 7.1.2 - '@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@mui/types': 7.4.3(@types/react@19.1.8) - '@mui/utils': 7.1.1(@types/react@19.1.8)(react@19.1.0) + '@mui/core-downloads-tracker': 7.2.0 + '@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/types': 7.4.4(@types/react@19.1.8) + '@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.0) '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.12(@types/react@19.1.8) clsx: 2.1.1 @@ -10069,6 +10129,15 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@mui/private-theming@7.2.0(@types/react@19.1.8)(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.6 + '@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.0) + prop-types: 15.8.1 + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@mui/styled-engine@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 @@ -10082,6 +10151,19 @@ snapshots: '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/styled-engine@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.6 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/sheet': 1.4.0 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.1.0 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 @@ -10098,12 +10180,34 @@ snapshots: '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@types/react': 19.1.8 + '@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.6 + '@mui/private-theming': 7.2.0(@types/react@19.1.8)(react@19.1.0) + '@mui/styled-engine': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(react@19.1.0) + '@mui/types': 7.4.4(@types/react@19.1.8) + '@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.0) + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.1.0 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@types/react': 19.1.8 + '@mui/types@7.4.3(@types/react@19.1.8)': dependencies: '@babel/runtime': 7.27.6 optionalDependencies: '@types/react': 19.1.8 + '@mui/types@7.4.4(@types/react@19.1.8)': + dependencies: + '@babel/runtime': 7.27.6 + optionalDependencies: + '@types/react': 19.1.8 + '@mui/utils@7.1.1(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 @@ -10116,13 +10220,25 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 - '@mui/x-date-pickers@8.6.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mui/utils@7.2.0(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/material': 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/types': 7.4.4(@types/react@19.1.8) + '@types/prop-types': 15.7.15 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.1.0 + react-is: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + + '@mui/x-date-pickers@8.6.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.6 + '@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@mui/utils': 7.1.1(@types/react@19.1.8)(react@19.1.0) - '@mui/x-internals': 8.6.0(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/x-internals': 8.6.0(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@types/react-transition-group': 4.4.12(@types/react@19.1.8) clsx: 2.1.1 prop-types: 15.8.1 @@ -10136,10 +10252,10 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-internals@8.6.0(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': + '@mui/x-internals@8.6.0(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@mui/utils': 7.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 reselect: 5.1.1 @@ -10791,7 +10907,7 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 entities: 4.5.0 '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.8.3))': @@ -10945,10 +11061,10 @@ snapshots: '@tanstack/query-core': 5.81.5 react: 19.1.0 - '@tanstack/react-router-devtools@1.122.0(@tanstack/react-router@1.122.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.122.0)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/react-router-devtools@1.123.0(@tanstack/react-router@1.123.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.123.0)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/react-router': 1.122.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-devtools-core': 1.122.0(@tanstack/router-core@1.122.0)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) + '@tanstack/react-router': 1.123.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/router-devtools-core': 1.123.0(@tanstack/router-core@1.123.0)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: @@ -10957,11 +11073,11 @@ snapshots: - solid-js - tiny-invariant - '@tanstack/react-router@1.122.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-router@1.123.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/history': 1.121.34 '@tanstack/react-store': 0.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-core': 1.122.0 + '@tanstack/router-core': 1.123.0 isbot: 5.1.28 jsesc: 3.1.0 react: 19.1.0 @@ -10988,7 +11104,7 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@tanstack/router-core@1.122.0': + '@tanstack/router-core@1.123.0': dependencies: '@tanstack/history': 1.121.34 '@tanstack/store': 0.7.0 @@ -10997,9 +11113,9 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.122.0(@tanstack/router-core@1.122.0)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/router-devtools-core@1.123.0(@tanstack/router-core@1.123.0)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/router-core': 1.122.0 + '@tanstack/router-core': 1.123.0 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) solid-js: 1.9.5 @@ -11007,9 +11123,9 @@ snapshots: optionalDependencies: csstype: 3.1.3 - '@tanstack/router-generator@1.122.0': + '@tanstack/router-generator@1.123.0': dependencies: - '@tanstack/router-core': 1.122.0 + '@tanstack/router-core': 1.123.0 '@tanstack/router-utils': 1.121.21 '@tanstack/virtual-file-routes': 1.121.21 prettier: 3.6.2 @@ -11020,7 +11136,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.122.1(@tanstack/react-router@1.122.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.0(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))': + '@tanstack/router-plugin@1.123.0(@tanstack/react-router@1.123.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.0(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))': dependencies: '@babel/core': 7.27.7 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) @@ -11028,8 +11144,8 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.27.7 '@babel/types': 7.27.7 - '@tanstack/router-core': 1.122.0 - '@tanstack/router-generator': 1.122.0 + '@tanstack/router-core': 1.123.0 + '@tanstack/router-generator': 1.123.0 '@tanstack/router-utils': 1.121.21 '@tanstack/virtual-file-routes': 1.121.21 babel-dead-code-elimination: 1.0.10 @@ -11037,7 +11153,7 @@ snapshots: unplugin: 2.3.5 zod: 3.25.67 optionalDependencies: - '@tanstack/react-router': 1.122.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/react-router': 1.123.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) vite: 7.0.0(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0) transitivePeerDependencies: - supports-color @@ -11046,16 +11162,16 @@ snapshots: dependencies: '@babel/core': 7.27.7 '@babel/generator': 7.27.5 - '@babel/parser': 7.27.5 + '@babel/parser': 7.27.7 '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) ansis: 4.1.0 diff: 8.0.2 transitivePeerDependencies: - supports-color - '@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.122.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(zod@3.25.67)': + '@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.123.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(zod@3.25.67)': dependencies: - '@tanstack/react-router': 1.122.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/react-router': 1.123.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) zod: 3.25.67 '@tanstack/store@0.7.0': {} @@ -11189,16 +11305,16 @@ snapshots: '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.27.5 - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@types/cacheable-request@6.0.3': dependencies: @@ -11399,6 +11515,8 @@ snapshots: '@types/prop-types@15.7.14': {} + '@types/prop-types@15.7.15': {} + '@types/react-dom@19.1.6(@types/react@19.1.8)': dependencies: '@types/react': 19.1.8 @@ -11683,7 +11801,7 @@ snapshots: '@vue/compiler-core@3.5.13': dependencies: - '@babel/parser': 7.27.5 + '@babel/parser': 7.27.7 '@vue/shared': 3.5.13 entities: 4.5.0 estree-walker: 2.0.2 @@ -11975,7 +12093,7 @@ snapshots: babel-dead-code-elimination@1.0.10: dependencies: '@babel/core': 7.27.7 - '@babel/parser': 7.27.5 + '@babel/parser': 7.27.7 '@babel/traverse': 7.27.7 '@babel/types': 7.27.7 transitivePeerDependencies: @@ -14999,12 +15117,12 @@ snapshots: muggle-string@0.4.1: {} - mui-color-input@7.0.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + mui-color-input@7.0.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@ctrl/tinycolor': 4.1.0 '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@mui/material': 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: @@ -15566,14 +15684,14 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-hook-form-mui@7.6.2(9b2bbb78e62f42055660efe83fb5fc62): + react-hook-form-mui@7.6.2(f8250d127bbd4b125e98baa2462a5072): dependencies: - '@mui/material': 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-hook-form: 7.52.1(react@19.1.0) optionalDependencies: - '@mui/icons-material': 7.1.2(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@mui/x-date-pickers': 8.6.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mui/icons-material': 7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/x-date-pickers': 8.6.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-hook-form@7.52.1(react@19.1.0): dependencies: diff --git a/clash-verge-rev/UPDATELOG.md b/clash-verge-rev/UPDATELOG.md index a8ee02f593..7c4ac30085 100644 --- a/clash-verge-rev/UPDATELOG.md +++ b/clash-verge-rev/UPDATELOG.md @@ -8,18 +8,22 @@ - 修复同时开启静默启动与自动进入轻量模式后,自动进入轻量模式失效的问题 - 修复静默启动时托盘工具栏轻量模式开启与关闭状态的同步 - 修复导入订阅时非 http 协议链接被错误尝试导入 +- 修复切换节点后页面长时间 loading 及缓存过期导致的数据不同步问题 ### ✨ 新增功能 - `sidecar` 模式下清理多余的内核进程,防止运行出现异常 - 新 macOS 下 TUN 和系统代理模式托盘图标(暂测) - 快捷键事件通过系统通知 +- 添加外部 `cors` 控制面板 ### 🚀 优化改进 - 优化重构订阅切换逻辑,可以随时中断载入过程,防止卡死 - 引入事件驱动代理管理器,优化代理配置更新逻辑,防止卡死 - 改进主页订阅卡流量已使用比例计算精度 +- 优化后端缓存刷新机制,支持毫秒级 TTL(默认 3000ms),减少重复请求并提升性能,切换节点时强制刷新后端数据,前端 UI 实时更新,操作更流畅 +- 解耦前端数据拉取与后端缓存刷新,提升节点切换速度和一致性 ### 🗑️ 移除内容 diff --git a/clash-verge-rev/package.json b/clash-verge-rev/package.json index edd7e232cf..9a6c1e1b2e 100644 --- a/clash-verge-rev/package.json +++ b/clash-verge-rev/package.json @@ -31,9 +31,9 @@ "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", "@juggle/resize-observer": "^3.4.0", - "@mui/icons-material": "^7.1.2", + "@mui/icons-material": "^7.2.0", "@mui/lab": "7.0.0-beta.14", - "@mui/material": "^7.1.2", + "@mui/material": "^7.2.0", "@mui/x-data-grid": "^8.6.0", "@tauri-apps/api": "2.6.0", "@tauri-apps/plugin-clipboard-manager": "^2.3.0", @@ -46,7 +46,7 @@ "@tauri-apps/plugin-updater": "2.9.0", "@tauri-apps/plugin-window-state": "^2.3.0", "@types/json-schema": "^7.0.15", - "ahooks": "^3.8.5", + "ahooks": "^3.9.0", "axios": "^1.10.0", "chart.js": "^4.5.0", "cli-color": "^2.0.4", @@ -64,11 +64,11 @@ "react-chartjs-2": "^5.3.0", "react-dom": "19.1.0", "react-error-boundary": "6.0.0", - "react-hook-form": "^7.58.1", + "react-hook-form": "^7.59.0", "react-i18next": "15.5.3", "react-markdown": "10.1.0", "react-monaco-editor": "0.58.0", - "react-router-dom": "7.6.2", + "react-router-dom": "7.6.3", "react-virtuoso": "^4.13.0", "sockette": "^2.0.6", "swr": "^2.3.3", @@ -78,7 +78,7 @@ }, "devDependencies": { "@actions/github": "^6.0.1", - "@tauri-apps/cli": "2.6.1", + "@tauri-apps/cli": "2.6.2", "@types/js-yaml": "^4.0.9", "@types/lodash-es": "^4.17.12", "@types/react": "19.1.8", diff --git a/clash-verge-rev/pnpm-lock.yaml b/clash-verge-rev/pnpm-lock.yaml index 0f287a62fd..a17f24d2bb 100644 --- a/clash-verge-rev/pnpm-lock.yaml +++ b/clash-verge-rev/pnpm-lock.yaml @@ -27,17 +27,17 @@ importers: specifier: ^3.4.0 version: 3.4.0 '@mui/icons-material': - specifier: ^7.1.2 - version: 7.1.2(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + specifier: ^7.2.0 + version: 7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@mui/lab': specifier: 7.0.0-beta.14 - version: 7.0.0-beta.14(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.0.0-beta.14(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mui/material': - specifier: ^7.1.2 - version: 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^7.2.0 + version: 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mui/x-data-grid': specifier: ^8.6.0 - version: 8.6.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 8.6.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tauri-apps/api': specifier: 2.6.0 version: 2.6.0 @@ -72,8 +72,8 @@ importers: specifier: ^7.0.15 version: 7.0.15 ahooks: - specifier: ^3.8.5 - version: 3.8.5(react@19.1.0) + specifier: ^3.9.0 + version: 3.9.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) axios: specifier: ^1.10.0 version: 1.10.0 @@ -126,8 +126,8 @@ importers: specifier: 6.0.0 version: 6.0.0(react@19.1.0) react-hook-form: - specifier: ^7.58.1 - version: 7.58.1(react@19.1.0) + specifier: ^7.59.0 + version: 7.59.0(react@19.1.0) react-i18next: specifier: 15.5.3 version: 15.5.3(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) @@ -138,8 +138,8 @@ importers: specifier: 0.58.0 version: 0.58.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-router-dom: - specifier: 7.6.2 - version: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 7.6.3 + version: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-virtuoso: specifier: ^4.13.0 version: 4.13.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -163,8 +163,8 @@ importers: specifier: ^6.0.1 version: 6.0.1 '@tauri-apps/cli': - specifier: 2.6.1 - version: 2.6.1 + specifier: 2.6.2 + version: 2.6.2 '@types/js-yaml': specifier: ^4.0.9 version: 4.0.9 @@ -1008,14 +1008,14 @@ packages: '@kurkle/color@0.3.4': resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} - '@mui/core-downloads-tracker@7.1.2': - resolution: {integrity: sha512-0gLO1PvbJwSYe5ji021tGj6HFqrtEPMGKK4L1zWwRbhzrWWUumUJvMvJUsIgWQIYQsgOnhq9k2Fc1BxLGHDsAg==} + '@mui/core-downloads-tracker@7.2.0': + resolution: {integrity: sha512-d49s7kEgI5iX40xb2YPazANvo7Bx0BLg/MNRwv+7BVpZUzXj1DaVCKlQTDex3gy/0jsCb4w7AY2uH4t4AJvSog==} - '@mui/icons-material@7.1.2': - resolution: {integrity: sha512-slqJByDub7Y1UcokrM17BoMBMvn8n7daXFXVoTv0MEH5k3sHjmsH8ql/Mt3s9vQ20cORDr83UZ448TEGcbrXtw==} + '@mui/icons-material@7.2.0': + resolution: {integrity: sha512-gRCspp3pfjHQyTmSOmYw7kUQTd9Udpdan4R8EnZvqPeoAtHnPzkvjBrBqzKaoAbbBp5bGF7BcD18zZJh4nwu0A==} engines: {node: '>=14.0.0'} peerDependencies: - '@mui/material': ^7.1.2 + '@mui/material': ^7.2.0 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: @@ -1043,13 +1043,13 @@ packages: '@types/react': optional: true - '@mui/material@7.1.2': - resolution: {integrity: sha512-Z5PYKkA6Kd8vS04zKxJNpwuvt6IoMwqpbidV7RCrRQQKwczIwcNcS8L6GnN4pzFYfEs+N9v6co27DmG07rcnoA==} + '@mui/material@7.2.0': + resolution: {integrity: sha512-NTuyFNen5Z2QY+I242MDZzXnFIVIR6ERxo7vntFi9K1wCgSwvIl0HcAO2OOydKqqKApE6omRiYhpny1ZhGuH7Q==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@mui/material-pigment-css': ^7.1.1 + '@mui/material-pigment-css': ^7.2.0 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1063,8 +1063,8 @@ packages: '@types/react': optional: true - '@mui/private-theming@7.1.1': - resolution: {integrity: sha512-M8NbLUx+armk2ZuaxBkkMk11ultnWmrPlN0Xe3jUEaBChg/mcxa5HWIWS1EE4DF36WRACaAHVAvyekWlDQf0PQ==} + '@mui/private-theming@7.2.0': + resolution: {integrity: sha512-y6N1Yt3T5RMxVFnCh6+zeSWBuQdNDm5/UlM0EAYZzZR/1u+XKJWYQmbpx4e+F+1EpkYi3Nk8KhPiQDi83M3zIw==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1073,8 +1073,8 @@ packages: '@types/react': optional: true - '@mui/styled-engine@7.1.1': - resolution: {integrity: sha512-R2wpzmSN127j26HrCPYVQ53vvMcT5DaKLoWkrfwUYq3cYytL6TQrCH8JBH3z79B6g4nMZZVoaXrxO757AlShaw==} + '@mui/styled-engine@7.2.0': + resolution: {integrity: sha512-yq08xynbrNYcB1nBcW9Fn8/h/iniM3ewRguGJXPIAbHvxEF7Pz95kbEEOAAhwzxMX4okhzvHmk0DFuC5ayvgIQ==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.4.1 @@ -1086,8 +1086,8 @@ packages: '@emotion/styled': optional: true - '@mui/system@7.1.1': - resolution: {integrity: sha512-Kj1uhiqnj4Zo7PDjAOghtXJtNABunWvhcRU0O7RQJ7WOxeynoH6wXPcilphV8QTFtkKaip8EiNJRiCD+B3eROA==} + '@mui/system@7.2.0': + resolution: {integrity: sha512-PG7cm/WluU6RAs+gNND2R9vDwNh+ERWxPkqTaiXQJGIFAyJ+VxhyKfzpdZNk0z0XdmBxxi9KhFOpgxjehf/O0A==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -1102,16 +1102,16 @@ packages: '@types/react': optional: true - '@mui/types@7.4.3': - resolution: {integrity: sha512-2UCEiK29vtiZTeLdS2d4GndBKacVyxGvReznGXGr+CzW/YhjIX+OHUdCIczZjzcRAgKBGmE9zCIgoV9FleuyRQ==} + '@mui/types@7.4.4': + resolution: {integrity: sha512-p63yhbX52MO/ajXC7hDHJA5yjzJekvWD3q4YDLl1rSg+OXLczMYPvTuSuviPRCgRX8+E42RXz1D/dz9SxPSlWg==} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - '@mui/utils@7.1.1': - resolution: {integrity: sha512-BkOt2q7MBYl7pweY2JWwfrlahhp+uGLR8S+EhiyRaofeRYUWL2YKbSGQvN4hgSN1i8poN0PaUiii1kEMrchvzg==} + '@mui/utils@7.2.0': + resolution: {integrity: sha512-O0i1GQL6MDzhKdy9iAu5Yr0Sz1wZjROH1o3aoztuivdCXqEeQYnEjTDiRLGuFxI9zrUbTHBwobMyQH5sNtyacw==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1459,74 +1459,74 @@ packages: '@tauri-apps/api@2.6.0': resolution: {integrity: sha512-hRNcdercfgpzgFrMXWwNDBN0B7vNzOzRepy6ZAmhxi5mDLVPNrTpo9MGg2tN/F7JRugj4d2aF7E1rtPXAHaetg==} - '@tauri-apps/cli-darwin-arm64@2.6.1': - resolution: {integrity: sha512-67aVLeXcJrl9D+4xQLR8NCQYKXQyZB96Tai+uy53jOY0u+uKvFngjbSS9CmntILFhLWoueDxQj3Ws5OSvjekiA==} + '@tauri-apps/cli-darwin-arm64@2.6.2': + resolution: {integrity: sha512-YlvT+Yb7u2HplyN2Cf/nBplCQARC/I4uedlYHlgtxg6rV7xbo9BvG1jLOo29IFhqA2rOp5w1LtgvVGwsOf2kxw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tauri-apps/cli-darwin-x64@2.6.1': - resolution: {integrity: sha512-6mQp/VikM0pKVKau1p/NMVyGq1JakOFbk6YlCzwdd04OwmiDuVe9PTxzqcA/JnqWXEhSGlRKeyMXUxqifPBPYw==} + '@tauri-apps/cli-darwin-x64@2.6.2': + resolution: {integrity: sha512-21gdPWfv1bP8rkTdCL44in70QcYcPaDM70L+y78N8TkBuC+/+wqnHcwwjzb+mUyck6UoEw2DORagSI/oKKUGJw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tauri-apps/cli-linux-arm-gnueabihf@2.6.1': - resolution: {integrity: sha512-iY9cr2k3h2nh6I0bExEWCOgWloN4q0p/evhfNBIAIly1kycy+xWHEsFj2WfzU31Ce8RkqxilPHNuCp36gDM+Yw==} + '@tauri-apps/cli-linux-arm-gnueabihf@2.6.2': + resolution: {integrity: sha512-MW8Y6HqHS5yzQkwGoLk/ZyE1tWpnz/seDoY4INsbvUZdknuUf80yn3H+s6eGKtT/0Bfqon/W9sY7pEkgHRPQgA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tauri-apps/cli-linux-arm64-gnu@2.6.1': - resolution: {integrity: sha512-AT+SpHShi/uJipzj+A9kHPDUgZfzHYyl0B3/4UXYtHB9hQfQUmjh9wLadmx0ai/ESyJFxkJJK6FFRvxotQ3gIQ==} + '@tauri-apps/cli-linux-arm64-gnu@2.6.2': + resolution: {integrity: sha512-9PdINTUtnyrnQt9hvC4y1m0NoxKSw/wUB9OTBAQabPj8WLAdvySWiUpEiqJjwLhlu4T6ltXZRpNTEzous3/RXg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-arm64-musl@2.6.1': - resolution: {integrity: sha512-CCgE0uqcWTtU48TmK/J03h5x/hxi3PEc11ci3LQ9WqIE15btyhynNzDKbxKwOyDCMcfbDT+MweoiCPnely2ZRA==} + '@tauri-apps/cli-linux-arm64-musl@2.6.2': + resolution: {integrity: sha512-LrcJTRr7FrtQlTDkYaRXIGo/8YU/xkWmBPC646WwKNZ/S6yqCiDcOMoPe7Cx4ZvcG6sK6LUCLQMfaSNEL7PT0A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-riscv64-gnu@2.6.1': - resolution: {integrity: sha512-2i3MYr2oKaJk7Tz2FZ+R5x8cV827CudvEXW6FzCER26pfx/PofH/55N7aRQf4+qPXi5O3T+3myq88nRerzHr6g==} + '@tauri-apps/cli-linux-riscv64-gnu@2.6.2': + resolution: {integrity: sha512-GnTshO/BaZ9KGIazz2EiFfXGWgLur5/pjqklRA/ck42PGdUQJhV/Ao7A7TdXPjqAzpFxNo6M/Hx0GCH2iMS7IA==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] - '@tauri-apps/cli-linux-x64-gnu@2.6.1': - resolution: {integrity: sha512-of5i3FW1tjTXECtMdirQsQnVIzcKq1s5Cad9YLVa6agEnFnZbFU3rKQ6/Wfu5SZbjSiI7SBO1hksjIAq1vkVcg==} + '@tauri-apps/cli-linux-x64-gnu@2.6.2': + resolution: {integrity: sha512-QDG3WeJD6UJekmrtVPCJRzlKgn9sGzhvD58oAw5gIU+DRovgmmG2U1jH9fS361oYGjWWO7d/KM9t0kugZzi4lQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-linux-x64-musl@2.6.1': - resolution: {integrity: sha512-QfAgg7VIlOrTa2X3fBLRp6ugbC5ZonSWgVhNCLDgHLp5Cga41XOi5qU7ZtZhjjCdcWNiE0DtBQmSb1YVhCp+SA==} + '@tauri-apps/cli-linux-x64-musl@2.6.2': + resolution: {integrity: sha512-TNVTDDtnWzuVqWBFdZ4+8ZTg17tc21v+CT5XBQ+KYCoYtCrIaHpW04fS5Tmudi+vYdBwoPDfwpKEB6LhCeFraQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-win32-arm64-msvc@2.6.1': - resolution: {integrity: sha512-ee1h3jwamumGjLEXZA4VsSUcVWTtGpuvxy+nqFfu7wb2k6IcBrFEJGa6yXa7sQjuCAAorLfSIXGuDEJARqnpFw==} + '@tauri-apps/cli-win32-arm64-msvc@2.6.2': + resolution: {integrity: sha512-z77C1oa/hMLO/jM1JF39tK3M3v9nou7RsBnQoOY54z5WPcpVAbS0XdFhXB7sSN72BOiO3moDky9lQANQz6L3CA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tauri-apps/cli-win32-ia32-msvc@2.6.1': - resolution: {integrity: sha512-WEZVYekxuG9X9mFJEeJPHsSAl8sHOEEbJQriim+OziFbLA9pv/gfcRRqsbmEJL8uBC8GLTEOdUVolohwXk6S9g==} + '@tauri-apps/cli-win32-ia32-msvc@2.6.2': + resolution: {integrity: sha512-TmD8BbzbjluBw8+QEIWUVmFa9aAluSkT1N937n1mpYLXcPbTpbunqRFiIznTwupoJNJIdtpF/t7BdZDRh5rrcg==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@tauri-apps/cli-win32-x64-msvc@2.6.1': - resolution: {integrity: sha512-fBsjPqIIHaaQt7tnjIGmPHu5p/BNBVD4JfOhO3QqIVBzAb+W2bDyIQPdoDMI943soLr/+N10xeTiPu+3L74+dQ==} + '@tauri-apps/cli-win32-x64-msvc@2.6.2': + resolution: {integrity: sha512-ItB8RCKk+nCmqOxOvbNtltz6x1A4QX6cSM21kj3NkpcnjT9rHSMcfyf8WVI2fkoMUJR80iqCblUX6ARxC3lj6w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tauri-apps/cli@2.6.1': - resolution: {integrity: sha512-8NrwfZjeyKH1zwg+Xu4epx8WLjffoiW1Zs9CCFYCJns7uUghzudDm92o+8ROosg5Njlvp1GXBuIRsdrEwBsDhg==} + '@tauri-apps/cli@2.6.2': + resolution: {integrity: sha512-s1/eyBHxk0wG1blLeOY2IDjgZcxVrkxU5HFL8rNDwjYGr0o7yr3RAtwmuUPhz13NO+xGAL1bJZaLFBdp+5joKg==} engines: {node: '>= 10'} hasBin: true @@ -1602,8 +1602,8 @@ packages: '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/prop-types@15.7.14': - resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} '@types/react-dom@19.1.6': resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} @@ -1653,11 +1653,12 @@ packages: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} - ahooks@3.8.5: - resolution: {integrity: sha512-Y+MLoJpBXVdjsnnBjE5rOSPkQ4DK+8i5aPDzLJdIOsCpo/fiAeXcBY1Y7oWgtOK0TpOz0gFa/XcyO1UGdoqLcw==} + ahooks@3.9.0: + resolution: {integrity: sha512-r20/C38aFyU3Zqp3620gkdLnxmQhnmWORB3eGGTDlM4i/fOc0GUvM+f2oleMzEu7b3+pHXyzz+FB6ojxsUdYdw==} engines: {node: '>=8.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -2517,8 +2518,8 @@ packages: react-fast-compare@3.2.2: resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} - react-hook-form@7.58.1: - resolution: {integrity: sha512-Lml/KZYEEFfPhUVgE0RdCVpnC4yhW+PndRhbiTtdvSlQTL8IfVR+iQkBjLIvmmc6+GGoVeM11z37ktKFPAb0FA==} + react-hook-form@7.59.0: + resolution: {integrity: sha512-kmkek2/8grqarTJExFNjy+RXDIP8yM+QTl3QL6m6Q8b2bih4ltmiXxH7T9n+yXNK477xPh5yZT/6vD8sYGzJTA==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 @@ -2562,15 +2563,15 @@ packages: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} - react-router-dom@7.6.2: - resolution: {integrity: sha512-Q8zb6VlTbdYKK5JJBLQEN06oTUa/RAbG/oQS1auK1I0TbJOXktqm+QENEVJU6QvWynlXPRBXI3fiOQcSEA78rA==} + react-router-dom@7.6.3: + resolution: {integrity: sha512-DiWJm9qdUAmiJrVWaeJdu4TKu13+iB/8IEi0EW/XgaHCjW/vWGrwzup0GVvaMteuZjKnh5bEvJP/K0MDnzawHw==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.6.2: - resolution: {integrity: sha512-U7Nv3y+bMimgWjhlT5CRdzHPu2/KVmqPwKUCChW8en5P3znxUqwlYFlbmyj8Rgp1SF6zs5X4+77kBVknkg6a0w==} + react-router@7.6.3: + resolution: {integrity: sha512-zf45LZp5skDC6I3jDLXQUu0u26jtuP4lEGbc7BbdyxenBN1vJSTA18czM2D+h5qyMBuMrD+9uB+mU37HIoKGRA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -3876,23 +3877,23 @@ snapshots: '@kurkle/color@0.3.4': {} - '@mui/core-downloads-tracker@7.1.2': {} + '@mui/core-downloads-tracker@7.2.0': {} - '@mui/icons-material@7.1.2(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': + '@mui/icons-material@7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/material': 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 optionalDependencies: '@types/react': 19.1.8 - '@mui/lab@7.0.0-beta.14(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mui/lab@7.0.0-beta.14(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/material': 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@mui/types': 7.4.3(@types/react@19.1.8) - '@mui/utils': 7.1.1(@types/react@19.1.8)(react@19.1.0) + '@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/types': 7.4.4(@types/react@19.1.8) + '@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.0) clsx: 2.1.1 prop-types: 15.8.1 react: 19.1.0 @@ -3902,13 +3903,13 @@ snapshots: '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@types/react': 19.1.8 - '@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/core-downloads-tracker': 7.1.2 - '@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@mui/types': 7.4.3(@types/react@19.1.8) - '@mui/utils': 7.1.1(@types/react@19.1.8)(react@19.1.0) + '@mui/core-downloads-tracker': 7.2.0 + '@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/types': 7.4.4(@types/react@19.1.8) + '@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.0) '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.12(@types/react@19.1.8) clsx: 2.1.1 @@ -3923,16 +3924,16 @@ snapshots: '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@types/react': 19.1.8 - '@mui/private-theming@7.1.1(@types/react@19.1.8)(react@19.1.0)': + '@mui/private-theming@7.2.0(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/utils': 7.1.1(@types/react@19.1.8)(react@19.1.0) + '@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.0) prop-types: 15.8.1 react: 19.1.0 optionalDependencies: '@types/react': 19.1.8 - '@mui/styled-engine@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(react@19.1.0)': + '@mui/styled-engine@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 '@emotion/cache': 11.14.0 @@ -3945,13 +3946,13 @@ snapshots: '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': + '@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/private-theming': 7.1.1(@types/react@19.1.8)(react@19.1.0) - '@mui/styled-engine': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(react@19.1.0) - '@mui/types': 7.4.3(@types/react@19.1.8) - '@mui/utils': 7.1.1(@types/react@19.1.8)(react@19.1.0) + '@mui/private-theming': 7.2.0(@types/react@19.1.8)(react@19.1.0) + '@mui/styled-engine': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(react@19.1.0) + '@mui/types': 7.4.4(@types/react@19.1.8) + '@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.0) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -3961,17 +3962,17 @@ snapshots: '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@types/react': 19.1.8 - '@mui/types@7.4.3(@types/react@19.1.8)': + '@mui/types@7.4.4(@types/react@19.1.8)': dependencies: '@babel/runtime': 7.27.6 optionalDependencies: '@types/react': 19.1.8 - '@mui/utils@7.1.1(@types/react@19.1.8)(react@19.1.0)': + '@mui/utils@7.2.0(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/types': 7.4.3(@types/react@19.1.8) - '@types/prop-types': 15.7.14 + '@mui/types': 7.4.4(@types/react@19.1.8) + '@types/prop-types': 15.7.15 clsx: 2.1.1 prop-types: 15.8.1 react: 19.1.0 @@ -3979,13 +3980,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 - '@mui/x-data-grid@8.6.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mui/x-data-grid@8.6.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/material': 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@mui/utils': 7.1.1(@types/react@19.1.8)(react@19.1.0) - '@mui/x-internals': 8.6.0(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.0) + '@mui/x-internals': 8.6.0(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) clsx: 2.1.1 prop-types: 15.8.1 react: 19.1.0 @@ -3997,11 +3998,11 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-internals@8.6.0(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': + '@mui/x-internals@8.6.0(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@mui/utils': 7.1.1(@types/react@19.1.8)(react@19.1.0) + '@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 reselect: 5.1.1 transitivePeerDependencies: @@ -4270,52 +4271,52 @@ snapshots: '@tauri-apps/api@2.6.0': {} - '@tauri-apps/cli-darwin-arm64@2.6.1': + '@tauri-apps/cli-darwin-arm64@2.6.2': optional: true - '@tauri-apps/cli-darwin-x64@2.6.1': + '@tauri-apps/cli-darwin-x64@2.6.2': optional: true - '@tauri-apps/cli-linux-arm-gnueabihf@2.6.1': + '@tauri-apps/cli-linux-arm-gnueabihf@2.6.2': optional: true - '@tauri-apps/cli-linux-arm64-gnu@2.6.1': + '@tauri-apps/cli-linux-arm64-gnu@2.6.2': optional: true - '@tauri-apps/cli-linux-arm64-musl@2.6.1': + '@tauri-apps/cli-linux-arm64-musl@2.6.2': optional: true - '@tauri-apps/cli-linux-riscv64-gnu@2.6.1': + '@tauri-apps/cli-linux-riscv64-gnu@2.6.2': optional: true - '@tauri-apps/cli-linux-x64-gnu@2.6.1': + '@tauri-apps/cli-linux-x64-gnu@2.6.2': optional: true - '@tauri-apps/cli-linux-x64-musl@2.6.1': + '@tauri-apps/cli-linux-x64-musl@2.6.2': optional: true - '@tauri-apps/cli-win32-arm64-msvc@2.6.1': + '@tauri-apps/cli-win32-arm64-msvc@2.6.2': optional: true - '@tauri-apps/cli-win32-ia32-msvc@2.6.1': + '@tauri-apps/cli-win32-ia32-msvc@2.6.2': optional: true - '@tauri-apps/cli-win32-x64-msvc@2.6.1': + '@tauri-apps/cli-win32-x64-msvc@2.6.2': optional: true - '@tauri-apps/cli@2.6.1': + '@tauri-apps/cli@2.6.2': optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 2.6.1 - '@tauri-apps/cli-darwin-x64': 2.6.1 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.6.1 - '@tauri-apps/cli-linux-arm64-gnu': 2.6.1 - '@tauri-apps/cli-linux-arm64-musl': 2.6.1 - '@tauri-apps/cli-linux-riscv64-gnu': 2.6.1 - '@tauri-apps/cli-linux-x64-gnu': 2.6.1 - '@tauri-apps/cli-linux-x64-musl': 2.6.1 - '@tauri-apps/cli-win32-arm64-msvc': 2.6.1 - '@tauri-apps/cli-win32-ia32-msvc': 2.6.1 - '@tauri-apps/cli-win32-x64-msvc': 2.6.1 + '@tauri-apps/cli-darwin-arm64': 2.6.2 + '@tauri-apps/cli-darwin-x64': 2.6.2 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.6.2 + '@tauri-apps/cli-linux-arm64-gnu': 2.6.2 + '@tauri-apps/cli-linux-arm64-musl': 2.6.2 + '@tauri-apps/cli-linux-riscv64-gnu': 2.6.2 + '@tauri-apps/cli-linux-x64-gnu': 2.6.2 + '@tauri-apps/cli-linux-x64-musl': 2.6.2 + '@tauri-apps/cli-win32-arm64-msvc': 2.6.2 + '@tauri-apps/cli-win32-ia32-msvc': 2.6.2 + '@tauri-apps/cli-win32-x64-msvc': 2.6.2 '@tauri-apps/plugin-clipboard-manager@2.3.0': dependencies: @@ -4406,7 +4407,7 @@ snapshots: '@types/parse-json@4.0.2': {} - '@types/prop-types@15.7.14': {} + '@types/prop-types@15.7.15': {} '@types/react-dom@19.1.6(@types/react@19.1.8)': dependencies: @@ -4459,7 +4460,7 @@ snapshots: agent-base@7.1.3: {} - ahooks@3.8.5(react@19.1.0): + ahooks@3.9.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@babel/runtime': 7.27.6 dayjs: 1.11.13 @@ -4467,6 +4468,7 @@ snapshots: js-cookie: 3.0.5 lodash: 4.17.21 react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) react-fast-compare: 3.2.2 resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 @@ -5453,7 +5455,7 @@ snapshots: react-fast-compare@3.2.2: {} - react-hook-form@7.58.1(react@19.1.0): + react-hook-form@7.59.0(react@19.1.0): dependencies: react: 19.1.0 @@ -5497,13 +5499,13 @@ snapshots: react-refresh@0.17.0: {} - react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-router: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-router: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-router@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: cookie: 1.0.2 react: 19.1.0 diff --git a/clash-verge-rev/src-tauri/Cargo.lock b/clash-verge-rev/src-tauri/Cargo.lock index 65f5da017e..7cee15e00a 100644 --- a/clash-verge-rev/src-tauri/Cargo.lock +++ b/clash-verge-rev/src-tauri/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "ab_glyph" -version = "0.2.29" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0" +checksum = "1e0f4f6fbdc5ee39f2ede9f5f3ec79477271a6d6a2baff22310d51736bda6cea" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -1070,6 +1070,7 @@ dependencies = [ "base64 0.22.1", "boa_engine", "chrono", + "dashmap 7.0.0-rc2", "deelevate", "delay_timer", "dirs 6.0.0", @@ -1512,6 +1513,20 @@ dependencies = [ "parking_lot_core", ] +[[package]] +name = "dashmap" +version = "7.0.0-rc2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a1e35a65fe0538a60167f0ada6e195ad5d477f6ddae273943596d4a1a5730b" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "equivalent", + "hashbrown 0.15.4", + "lock_api", + "parking_lot_core", +] + [[package]] name = "data-encoding" version = "2.9.0" diff --git a/clash-verge-rev/src-tauri/Cargo.toml b/clash-verge-rev/src-tauri/Cargo.toml index b66203d35d..601df2c8b4 100755 --- a/clash-verge-rev/src-tauri/Cargo.toml +++ b/clash-verge-rev/src-tauri/Cargo.toml @@ -73,7 +73,7 @@ futures = "0.3.31" sys-locale = "0.3.2" async-trait = "0.1.88" mihomo_api = { path = "src_crates/crate_mihomo_api" } -ab_glyph = "0.2.29" +ab_glyph = "0.2.30" tungstenite = "0.27.0" libc = "0.2.174" gethostname = "1.0.2" @@ -82,6 +82,7 @@ sha2 = "0.10.9" hex = "0.4.3" scopeguard = "1.2.0" tauri-plugin-notification = "2.3.0" +dashmap = "7.0.0-rc2" [target.'cfg(windows)'.dependencies] runas = "=1.2.0" diff --git a/clash-verge-rev/src-tauri/src/cmd/proxy.rs b/clash-verge-rev/src-tauri/src/cmd/proxy.rs index 48be7c2cea..1ba6eec439 100644 --- a/clash-verge-rev/src-tauri/src/cmd/proxy.rs +++ b/clash-verge-rev/src-tauri/src/cmd/proxy.rs @@ -1,99 +1,43 @@ use super::CmdResult; -use crate::{core::handle, module::mihomo::MihomoManager, state::proxy::CmdProxyState}; -use std::{ - sync::Mutex, - time::{Duration, Instant}, -}; -use tauri::Manager; +use crate::module::mihomo::MihomoManager; +use std::time::Duration; -const PROVIDERS_REFRESH_INTERVAL: Duration = Duration::from_secs(3); -const PROXIES_REFRESH_INTERVAL: Duration = Duration::from_secs(1); +use crate::state::proxy::ProxyRequestCache; + +const PROXIES_REFRESH_INTERVAL: Duration = Duration::from_secs(60); +const PROVIDERS_REFRESH_INTERVAL: Duration = Duration::from_secs(60); #[tauri::command] pub async fn get_proxies() -> CmdResult { let manager = MihomoManager::global(); - - let app_handle = handle::Handle::global().app_handle().unwrap(); - let cmd_proxy_state = app_handle.state::>(); - - let should_refresh = { - let mut state = cmd_proxy_state.lock().unwrap(); - let now = Instant::now(); - if now.duration_since(state.last_refresh_time) > PROXIES_REFRESH_INTERVAL { - state.need_refresh = true; - state.last_refresh_time = now; - } - state.need_refresh - }; - - if should_refresh { - let proxies = manager.get_refresh_proxies().await?; - { - let mut state = cmd_proxy_state.lock().unwrap(); - state.proxies = Box::new(proxies); - state.need_refresh = false; - } - log::debug!(target: "app", "proxies刷新成功"); - } - - let proxies = { - let state = cmd_proxy_state.lock().unwrap(); - state.proxies.clone() - }; - Ok(*proxies) + let cache = ProxyRequestCache::global(); + let key = ProxyRequestCache::make_key("proxies", "default"); + let value = cache + .get_or_fetch(key, PROXIES_REFRESH_INTERVAL, || async { + manager.get_refresh_proxies().await.expect("fetch failed") + }) + .await; + Ok((*value).clone()) } /// 强制刷新代理缓存用于profile切换 #[tauri::command] pub async fn force_refresh_proxies() -> CmdResult { - let manager = MihomoManager::global(); - let app_handle = handle::Handle::global().app_handle().unwrap(); - let cmd_proxy_state = app_handle.state::>(); - - log::debug!(target: "app", "强制刷新代理缓存"); - - let proxies = manager.get_refresh_proxies().await?; - - { - let mut state = cmd_proxy_state.lock().unwrap(); - state.proxies = Box::new(proxies.clone()); - state.need_refresh = false; - state.last_refresh_time = Instant::now(); - } - - log::debug!(target: "app", "强制刷新代理缓存完成"); - Ok(proxies) + let cache = ProxyRequestCache::global(); + let key = ProxyRequestCache::make_key("proxies", "default"); + cache.map.remove(&key); + get_proxies().await } #[tauri::command] pub async fn get_providers_proxies() -> CmdResult { - let app_handle = handle::Handle::global().app_handle().unwrap(); - let cmd_proxy_state = app_handle.state::>(); - - let should_refresh = { - let mut state = cmd_proxy_state.lock().unwrap(); - let now = Instant::now(); - if now.duration_since(state.last_refresh_time) > PROVIDERS_REFRESH_INTERVAL { - state.need_refresh = true; - state.last_refresh_time = now; - } - state.need_refresh - }; - - if should_refresh { - let manager = MihomoManager::global(); - let providers = manager.get_providers_proxies().await?; - { - let mut state = cmd_proxy_state.lock().unwrap(); - state.providers_proxies = Box::new(providers); - state.need_refresh = false; - } - log::debug!(target: "app", "providers_proxies刷新成功"); - } - - let providers_proxies = { - let state = cmd_proxy_state.lock().unwrap(); - state.providers_proxies.clone() - }; - Ok(*providers_proxies) + let manager = MihomoManager::global(); + let cache = ProxyRequestCache::global(); + let key = ProxyRequestCache::make_key("providers", "default"); + let value = cache + .get_or_fetch(key, PROVIDERS_REFRESH_INTERVAL, || async { + manager.get_providers_proxies().await.expect("fetch failed") + }) + .await; + Ok((*value).clone()) } diff --git a/clash-verge-rev/src-tauri/src/config/clash.rs b/clash-verge-rev/src-tauri/src/config/clash.rs index 2379b298d9..df3eec24f6 100644 --- a/clash-verge-rev/src-tauri/src/config/clash.rs +++ b/clash-verge-rev/src-tauri/src/config/clash.rs @@ -97,25 +97,6 @@ impl IClashTemp { config.insert("port".into(), port.into()); config.insert("external-controller".into(), ctrl.into()); - // 强制覆盖 external-controller-cors 字段,允许本地和 tauri 前端 - let mut cors_map = Mapping::new(); - cors_map.insert("allow-private-network".into(), true.into()); - cors_map.insert( - "allow-origins".into(), - vec![ - "tauri://localhost", - "http://tauri.localhost", - // Only enable this in dev mode - #[cfg(feature = "verge-dev")] - "http://localhost:3000", - "https://yacd.metacubex.one", - "https://metacubex.github.io", - "https://board.zash.run.place", - ] - .into(), - ); - config.insert("external-controller-cors".into(), cors_map.into()); - config } diff --git a/clash-verge-rev/src-tauri/src/core/async_proxy_query.rs b/clash-verge-rev/src-tauri/src/core/async_proxy_query.rs index 788a6d2680..a6a20cc1f6 100644 --- a/clash-verge-rev/src-tauri/src/core/async_proxy_query.rs +++ b/clash-verge-rev/src-tauri/src/core/async_proxy_query.rs @@ -123,7 +123,7 @@ impl AsyncProxyQuery { .position(|&x| x == 0) .unwrap_or(url_buffer.len()); pac_url = String::from_utf16_lossy(&url_buffer[..end_pos]); - log::debug!(target: "app", "从注册表读取到PAC URL: {}", pac_url); + log::debug!(target: "app", "从注册表读取到PAC URL: {pac_url}"); } // 2. 检查自动检测设置是否启用 @@ -148,7 +148,7 @@ impl AsyncProxyQuery { || (detect_query_result == 0 && detect_value_type == REG_DWORD && auto_detect != 0); if pac_enabled { - log::debug!(target: "app", "PAC配置启用: URL={}, AutoDetect={}", pac_url, auto_detect); + log::debug!(target: "app", "PAC配置启用: URL={pac_url}, AutoDetect={auto_detect}"); if pac_url.is_empty() && auto_detect != 0 { pac_url = "auto-detect".to_string(); @@ -361,7 +361,7 @@ impl AsyncProxyQuery { (proxy_server, 8080) }; - log::debug!(target: "app", "从注册表读取到代理设置: {}:{}, bypass: {}", host, port, bypass_list); + log::debug!(target: "app", "从注册表读取到代理设置: {host}:{port}, bypass: {bypass_list}"); Ok(AsyncSysproxy { enable: true, diff --git a/clash-verge-rev/src-tauri/src/core/event_driven_proxy.rs b/clash-verge-rev/src-tauri/src/core/event_driven_proxy.rs index 6937e43a04..933d241084 100644 --- a/clash-verge-rev/src-tauri/src/core/event_driven_proxy.rs +++ b/clash-verge-rev/src-tauri/src/core/event_driven_proxy.rs @@ -534,7 +534,7 @@ impl EventDrivenProxyManager { let binary_path = match dirs::service_path() { Ok(path) => path, Err(e) => { - log::error!(target: "app", "获取服务路径失败: {}", e); + log::error!(target: "app", "获取服务路径失败: {e}"); return; } }; @@ -554,17 +554,17 @@ impl EventDrivenProxyManager { match output { Ok(output) => { if !output.status.success() { - log::error!(target: "app", "执行sysproxy命令失败: {:?}", args); + log::error!(target: "app", "执行sysproxy命令失败: {args:?}"); let stderr = String::from_utf8_lossy(&output.stderr); if !stderr.is_empty() { - log::error!(target: "app", "sysproxy错误输出: {}", stderr); + log::error!(target: "app", "sysproxy错误输出: {stderr}"); } } else { - log::debug!(target: "app", "成功执行sysproxy命令: {:?}", args); + log::debug!(target: "app", "成功执行sysproxy命令: {args:?}"); } } Err(e) => { - log::error!(target: "app", "执行sysproxy命令出错: {}", e); + log::error!(target: "app", "执行sysproxy命令出错: {e}"); } } } diff --git a/clash-verge-rev/src-tauri/src/core/service.rs b/clash-verge-rev/src-tauri/src/core/service.rs index 91b2ce28b6..5c269db4e6 100644 --- a/clash-verge-rev/src-tauri/src/core/service.rs +++ b/clash-verge-rev/src-tauri/src/core/service.rs @@ -218,7 +218,7 @@ pub async fn reinstall_service() -> Result<()> { Ok(()) } Err(err) => { - let error = format!("failed to install service: {}", err); + let error = format!("failed to install service: {err}"); service_state.last_error = Some(error.clone()); service_state.prefer_sidecar = true; service_state.save()?; @@ -346,7 +346,7 @@ pub async fn reinstall_service() -> Result<()> { Ok(()) } Err(err) => { - let error = format!("failed to install service: {}", err); + let error = format!("failed to install service: {err}"); service_state.last_error = Some(error.clone()); service_state.prefer_sidecar = true; service_state.save()?; diff --git a/clash-verge-rev/src-tauri/src/core/service_ipc.rs b/clash-verge-rev/src-tauri/src/core/service_ipc.rs index 4aad2e62ff..d14d8484a5 100644 --- a/clash-verge-rev/src-tauri/src/core/service_ipc.rs +++ b/clash-verge-rev/src-tauri/src/core/service_ipc.rs @@ -131,7 +131,7 @@ pub async fn send_ipc_request( logging!(info, Type::Service, true, "正在连接服务 (Windows)..."); - let command_type = format!("{:?}", command); + let command_type = format!("{command:?}"); let request = match create_signed_request(command, payload) { Ok(req) => req, diff --git a/clash-verge-rev/src-tauri/src/core/sysopt.rs b/clash-verge-rev/src-tauri/src/core/sysopt.rs index e7c4b4c52e..8e72fa39be 100644 --- a/clash-verge-rev/src-tauri/src/core/sysopt.rs +++ b/clash-verge-rev/src-tauri/src/core/sysopt.rs @@ -153,7 +153,7 @@ impl Sysopt { let shell = app_handle.shell(); let output = if pac_enable { - let address = format!("http://{}:{}/commands/pac", proxy_host, pac_port); + let address = format!("http://{proxy_host}:{pac_port}/commands/pac"); let output = shell .command(sysproxy_exe.as_path().to_str().unwrap()) .args(["pac", address.as_str()]) @@ -162,7 +162,7 @@ impl Sysopt { .unwrap(); output } else { - let address = format!("{}:{}", proxy_host, port); + let address = format!("{proxy_host}:{port}"); let bypass = get_bypass(); let output = shell .command(sysproxy_exe.as_path().to_str().unwrap()) @@ -248,14 +248,14 @@ impl Sysopt { { if is_enable { if let Err(e) = startup_shortcut::create_shortcut() { - log::error!(target: "app", "创建启动快捷方式失败: {}", e); + log::error!(target: "app", "创建启动快捷方式失败: {e}"); // 如果快捷方式创建失败,回退到原来的方法 self.try_original_autostart_method(is_enable); } else { return Ok(()); } } else if let Err(e) = startup_shortcut::remove_shortcut() { - log::error!(target: "app", "删除启动快捷方式失败: {}", e); + log::error!(target: "app", "删除启动快捷方式失败: {e}"); self.try_original_autostart_method(is_enable); } else { return Ok(()); @@ -290,11 +290,11 @@ impl Sysopt { { match startup_shortcut::is_shortcut_enabled() { Ok(enabled) => { - log::info!(target: "app", "快捷方式自启动状态: {}", enabled); + log::info!(target: "app", "快捷方式自启动状态: {enabled}"); return Ok(enabled); } Err(e) => { - log::error!(target: "app", "检查快捷方式失败,尝试原来的方法: {}", e); + log::error!(target: "app", "检查快捷方式失败,尝试原来的方法: {e}"); } } } diff --git a/clash-verge-rev/src-tauri/src/enhance/script.rs b/clash-verge-rev/src-tauri/src/enhance/script.rs index d1ced5ed02..09ef378d3f 100644 --- a/clash-verge-rev/src-tauri/src/enhance/script.rs +++ b/clash-verge-rev/src-tauri/src/enhance/script.rs @@ -141,8 +141,8 @@ fn test_script() { fn test_escape_unescape() { let test_string = r#"Hello "World"!\nThis is a test with \u00A9 copyright symbol."#; let escaped = escape_js_string_for_single_quote(test_string); - println!("Original: {}", test_string); - println!("Escaped: {}", escaped); + println!("Original: {test_string}"); + println!("Escaped: {escaped}"); let json_str = r#"{"key":"value","nested":{"key":"value"}}"#; let parsed = parse_json_safely(json_str).unwrap(); diff --git a/clash-verge-rev/src-tauri/src/lib.rs b/clash-verge-rev/src-tauri/src/lib.rs index 712e852df9..461c8cc3f0 100644 --- a/clash-verge-rev/src-tauri/src/lib.rs +++ b/clash-verge-rev/src-tauri/src/lib.rs @@ -213,7 +213,6 @@ pub fn run() { logging!(error, Type::Setup, true, "初始化资源失败: {}", e); } - app.manage(Mutex::new(state::proxy::CmdProxyState::default())); app.manage(Mutex::new(state::lightweight::LightWeightState::default())); logging!(info, Type::Setup, true, "初始化完成,继续执行"); diff --git a/clash-verge-rev/src-tauri/src/state/proxy.rs b/clash-verge-rev/src-tauri/src/state/proxy.rs index c3df7d8dbc..be7d153bb0 100644 --- a/clash-verge-rev/src-tauri/src/state/proxy.rs +++ b/clash-verge-rev/src-tauri/src/state/proxy.rs @@ -1,19 +1,65 @@ +use std::time::{Duration, Instant}; +pub struct CacheEntry { + pub value: Arc, + pub expires_at: Instant, +} +use dashmap::DashMap; use serde_json::Value; +use std::sync::Arc; +use tokio::sync::OnceCell; -pub struct CmdProxyState { - pub last_refresh_time: std::time::Instant, - pub need_refresh: bool, - pub proxies: Box, - pub providers_proxies: Box, +pub struct ProxyRequestCache { + pub map: DashMap>>, } -impl Default for CmdProxyState { - fn default() -> Self { - Self { - last_refresh_time: std::time::Instant::now(), - need_refresh: true, - proxies: Box::new(Value::Null), - providers_proxies: Box::new(Value::Null), +impl ProxyRequestCache { + pub fn global() -> &'static Self { + static INSTANCE: once_cell::sync::OnceCell = + once_cell::sync::OnceCell::new(); + INSTANCE.get_or_init(|| ProxyRequestCache { + map: DashMap::new(), + }) + } + + pub fn make_key(prefix: &str, id: &str) -> String { + format!("{}:{}", prefix, id) + } + + pub async fn get_or_fetch(&self, key: String, ttl: Duration, fetch_fn: F) -> Arc + where + F: Fn() -> Fut, + Fut: std::future::Future, + { + let now = Instant::now(); + let key_cloned = key.clone(); + let cell = self + .map + .entry(key) + .or_insert_with(|| Arc::new(OnceCell::new())) + .clone(); + + if let Some(entry) = cell.get() { + if entry.expires_at > now { + return Arc::clone(&entry.value); + } } + + if let Some(entry) = cell.get() { + if entry.expires_at <= now { + self.map + .remove_if(&key_cloned, |_, v| Arc::ptr_eq(v, &cell)); + let new_cell = Arc::new(OnceCell::new()); + self.map.insert(key_cloned.clone(), new_cell.clone()); + return Box::pin(self.get_or_fetch(key_cloned, ttl, fetch_fn)).await; + } + } + + let value = fetch_fn().await; + let entry = CacheEntry { + value: Arc::new(value), + expires_at: Instant::now() + ttl, + }; + let _ = cell.set(entry); + Arc::clone(&cell.get().unwrap().value) } } diff --git a/clash-verge-rev/src/components/proxy/proxy-groups.tsx b/clash-verge-rev/src/components/proxy/proxy-groups.tsx index fdfe4d9505..fc2279d0c6 100644 --- a/clash-verge-rev/src/components/proxy/proxy-groups.tsx +++ b/clash-verge-rev/src/components/proxy/proxy-groups.tsx @@ -8,6 +8,7 @@ import { deleteConnection, getGroupProxyDelays, } from "@/services/api"; +import { forceRefreshProxies } from "@/services/cmds"; import { useProfiles } from "@/hooks/use-profiles"; import { useVerge } from "@/hooks/use-verge"; import { BaseEmpty } from "../base"; @@ -341,6 +342,9 @@ export const ProxyGroups = (props: Props) => { const { name, now } = group; await updateProxy(name, proxy.name); + + await forceRefreshProxies(); + onProxies(); // 断开连接 diff --git a/clash-verge-rev/src/components/setting/mods/external-controller-cors.tsx b/clash-verge-rev/src/components/setting/mods/external-controller-cors.tsx new file mode 100644 index 0000000000..0571801207 --- /dev/null +++ b/clash-verge-rev/src/components/setting/mods/external-controller-cors.tsx @@ -0,0 +1,354 @@ +import { BaseDialog } from "@/components/base"; +import { useClash } from "@/hooks/use-clash"; +import { showNotice } from "@/services/noticeService"; +import { Delete as DeleteIcon } from "@mui/icons-material"; +import { + Box, + Button, + Divider, + List, + ListItem, + styled, + TextField, +} from "@mui/material"; +import { useLockFn, useRequest } from "ahooks"; +import { forwardRef, useImperativeHandle, useState } from "react"; +import { useTranslation } from "react-i18next"; + +// 自定义开关按钮样式 +const ToggleButton = styled("label")` + position: relative; + display: inline-block; + width: 48px; + height: 24px; + + input { + opacity: 0; + width: 0; + height: 0; + } + + .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #e0e0e0; + transition: 0.4s; + border-radius: 34px; + + &:before { + position: absolute; + content: ""; + height: 16px; + width: 16px; + left: 4px; + bottom: 4px; + background-color: white; + transition: 0.4s; + border-radius: 50%; + } + } + + input:checked + .slider { + background-color: #2196f3; + } + + input:focus + .slider { + box-shadow: 0 0 1px #2196f3; + } + + input:checked + .slider:before { + transform: translateX(24px); + } +`; + +// 定义开发环境的URL列表 +// 这些URL在开发模式下会被自动包含在允许的来源中 +// 在生产环境中,这些URL会被过滤掉 +// 这样可以确保在生产环境中不会意外暴露开发环境的URL +const DEV_URLS = [ + "tauri://localhost", + "http://tauri.localhost", + "http://localhost:3000", +]; + +// 判断是否处于开发模式 +const isDevMode = import.meta.env.MODE === "development"; + +// 过滤开发环境URL +const filterDevOrigins = (origins: string[]) => { + if (isDevMode) { + return origins; + } + return origins.filter((origin: string) => !DEV_URLS.includes(origin.trim())); +}; + +// 获取完整的源列表,包括开发URL +const getFullOrigins = (origins: string[]) => { + if (!isDevMode) { + return origins; + } + + // 合并现有源和开发URL,并去重 + const allOrigins = [...origins, ...DEV_URLS]; + const uniqueOrigins = [...new Set(allOrigins)]; + return uniqueOrigins; +}; + +// 统一使用的按钮样式 +const buttonStyle = { + borderRadius: "8px", + textTransform: "none", + boxShadow: "0 2px 4px rgba(0,0,0,0.1)", + transition: "all 0.3s ease", + "&:hover": { + boxShadow: "0 4px 8px rgba(0,0,0,0.15)", + transform: "translateY(-1px)", + }, + "&:active": { + transform: "translateY(0)", + }, +}; + +// 保存按钮样式 +const saveButtonStyle = { + ...buttonStyle, + backgroundColor: "#165DFF", + color: "white", + "&:hover": { + backgroundColor: "#0E42D2", + }, +}; + +// 添加按钮样式 +const addButtonStyle = { + ...buttonStyle, + backgroundColor: "#4CAF50", + color: "white", + "&:hover": { + backgroundColor: "#388E3C", + }, +}; + +// 删除按钮样式 +const deleteButtonStyle = { + ...buttonStyle, + backgroundColor: "#FF5252", + color: "white", + "&:hover": { + backgroundColor: "#D32F2F", + }, +}; + +interface ClashHeaderConfigingRef { + open: () => void; + close: () => void; +} + +export const HeaderConfiguration = forwardRef( + (props, ref) => { + const { t } = useTranslation(); + const { clash, mutateClash, patchClash } = useClash(); + const [open, setOpen] = useState(false); + + // CORS配置状态管理 + const [corsConfig, setCorsConfig] = useState<{ + allowPrivateNetwork: boolean; + allowOrigins: string[]; + }>(() => { + const cors = clash?.["external-controller-cors"]; + const origins = cors?.["allow-origins"] ?? ["*"]; + return { + allowPrivateNetwork: cors?.["allow-private-network"] ?? true, + allowOrigins: filterDevOrigins(origins), + }; + }); + + // 处理CORS配置变更 + const handleCorsConfigChange = ( + key: "allowPrivateNetwork" | "allowOrigins", + value: boolean | string[], + ) => { + setCorsConfig((prev) => ({ + ...prev, + [key]: value, + })); + }; + + // 添加新的允许来源 + const handleAddOrigin = () => { + handleCorsConfigChange("allowOrigins", [...corsConfig.allowOrigins, ""]); + }; + + // 更新允许来源列表中的某一项 + const handleUpdateOrigin = (index: number, value: string) => { + const newOrigins = [...corsConfig.allowOrigins]; + newOrigins[index] = value; + handleCorsConfigChange("allowOrigins", newOrigins); + }; + + // 删除允许来源列表中的某一项 + const handleDeleteOrigin = (index: number) => { + const newOrigins = [...corsConfig.allowOrigins]; + newOrigins.splice(index, 1); + handleCorsConfigChange("allowOrigins", newOrigins); + }; + + // 保存配置请求 + const { loading, run: saveConfig } = useRequest( + async () => { + // 保存时使用完整的源列表(包括开发URL) + const fullOrigins = getFullOrigins(corsConfig.allowOrigins); + + await patchClash({ + "external-controller-cors": { + "allow-private-network": corsConfig.allowPrivateNetwork, + "allow-origins": fullOrigins.filter( + (origin: string) => origin.trim() !== "", + ), + }, + }); + await mutateClash(); + }, + { + manual: true, + onSuccess: () => { + setOpen(false); + showNotice("success", t("Configuration saved successfully")); + }, + onError: () => { + showNotice("error", t("Failed to save configuration")); + }, + }, + ); + + useImperativeHandle(ref, () => ({ + open: () => { + const cors = clash?.["external-controller-cors"]; + const origins = cors?.["allow-origins"] ?? ["*"]; + setCorsConfig({ + allowPrivateNetwork: cors?.["allow-private-network"] ?? true, + allowOrigins: filterDevOrigins(origins), + }); + setOpen(true); + }, + close: () => setOpen(false), + })); + + const handleSave = useLockFn(async () => { + await saveConfig(); + }); + + return ( + setOpen(false)} + onCancel={() => setOpen(false)} + onOk={handleSave} + > + + + + + {t("Allow private network access")} + + + + handleCorsConfigChange( + "allowPrivateNetwork", + e.target.checked, + ) + } + id="private-network-toggle" + /> + + + + + + + + +
+
+ {t("Allowed Origins")} +
+ {corsConfig.allowOrigins.map((origin, index) => ( +
+ handleUpdateOrigin(index, e.target.value)} + placeholder={t("Please enter a valid url")} + inputProps={{ style: { fontSize: 14 } }} + /> + +
+ ))} + + + {isDevMode && ( +
+
+ {t( + "Development mode: Automatically includes Tauri and localhost origins", + )} +
+
+ )} +
+
+
+
+ ); + }, +); diff --git a/clash-verge-rev/src/components/setting/mods/hotkey-viewer.tsx b/clash-verge-rev/src/components/setting/mods/hotkey-viewer.tsx index 28aa6d5511..29ae13e365 100644 --- a/clash-verge-rev/src/components/setting/mods/hotkey-viewer.tsx +++ b/clash-verge-rev/src/components/setting/mods/hotkey-viewer.tsx @@ -1,12 +1,62 @@ import { forwardRef, useImperativeHandle, useState } from "react"; import { useTranslation } from "react-i18next"; import { useLockFn } from "ahooks"; -import { styled, Typography, Switch } from "@mui/material"; +import { styled, Typography } from "@mui/material"; import { useVerge } from "@/hooks/use-verge"; import { BaseDialog, DialogRef } from "@/components/base"; import { HotkeyInput } from "./hotkey-input"; import { showNotice } from "@/services/noticeService"; +// 修复后的自定义开关组件 +const ToggleButton = styled("label")` + position: relative; + display: inline-block; + width: 48px; + height: 24px; + + input { + opacity: 0; + width: 0; + height: 0; + } + + .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #e0e0e0; + transition: 0.4s; + border-radius: 34px; + + &:before { + position: absolute; + content: ""; + height: 16px; + width: 16px; + left: 4px; + bottom: 4px; + background-color: white; + transition: 0.4s; + border-radius: 50%; + } + } + + input:checked + .slider { + background-color: #2196f3; + } + + input:focus + .slider { + box-shadow: 0 0 1px #2196f3; + } + + input:checked + .slider:before { + transform: translateX(24px); + } +`; + const ItemWrapper = styled("div")` display: flex; align-items: center; @@ -97,11 +147,15 @@ export const HotkeyViewer = forwardRef((props, ref) => { > {t("Enable Global Hotkey")} - setEnableHotkey(e.target.checked)} - /> + + setEnableHotkey(e.target.checked)} + id="global-hotkey-toggle" + /> + + {HOTKEY_FUNC.map((func) => ( diff --git a/clash-verge-rev/src/components/setting/setting-clash.tsx b/clash-verge-rev/src/components/setting/setting-clash.tsx index a56bf3ce84..01f648c1f1 100644 --- a/clash-verge-rev/src/components/setting/setting-clash.tsx +++ b/clash-verge-rev/src/components/setting/setting-clash.tsx @@ -21,6 +21,7 @@ import { GuardState } from "./mods/guard-state"; import { NetworkInterfaceViewer } from "./mods/network-interface-viewer"; import { SettingItem, SettingList } from "./mods/setting-comp"; import { WebUIViewer } from "./mods/web-ui-viewer"; +import { HeaderConfiguration } from "./mods/external-controller-cors"; const isWIN = getSystem() === "windows"; @@ -57,6 +58,7 @@ const SettingClash = ({ onError }: Props) => { const coreRef = useRef(null); const networkRef = useRef(null); const dnsRef = useRef(null); + const corsRef = useRef(null); const onSwitchFormat = (_e: any, value: boolean) => value; const onChangeData = (patch: Partial) => { @@ -101,6 +103,7 @@ const SettingClash = ({ onError }: Props) => { + { ctrlRef.current?.open()} - label={ - <> - {t("External")} - - + label={<>{t("External")}} + extra={ + { + e.stopPropagation(); + corsRef.current?.open(); + }} + /> } + onClick={() => { + ctrlRef.current?.open(); + }} /> webRef.current?.open()} label={t("Web UI")} /> diff --git a/clash-verge-rev/src/hooks/use-profiles.ts b/clash-verge-rev/src/hooks/use-profiles.ts index 836ddb4438..c8f2cea04b 100644 --- a/clash-verge-rev/src/hooks/use-profiles.ts +++ b/clash-verge-rev/src/hooks/use-profiles.ts @@ -3,6 +3,7 @@ import { getProfiles, patchProfile, patchProfilesConfig, + forceRefreshProxies, } from "@/services/cmds"; import { getProxies, updateProxy } from "@/services/api"; @@ -128,6 +129,9 @@ export const useProfiles = () => { await patchProfile(profileData.current!, { selected: newSelected }); console.log("[ActivateSelected] 代理选择配置保存成功"); + // 切换节点后强制刷新后端缓存 + await forceRefreshProxies(); + setTimeout(() => { mutate("getProxies", getProxies()); }, 100); diff --git a/clash-verge-rev/src/locales/en.json b/clash-verge-rev/src/locales/en.json index 43cd38c690..544c14fed6 100644 --- a/clash-verge-rev/src/locales/en.json +++ b/clash-verge-rev/src/locales/en.json @@ -639,5 +639,13 @@ "AppHiddenTitle": "APP Hidden", "AppHiddenBody": "APP window hidden by hotkey", "Invalid Profile URL": "Invalid profile URL. Please enter a URL starting with http:// or https://", - "Saved Successfully": "Saved successfully" + "Saved Successfully": "Saved successfully", + "External Cors": "External Cors", + "Enable one-click CORS for external API. Click to toggle CORS": "Enable one-click CORS for external API. Click to toggle CORS", + "External Cors Configuration": "External Cors Configuration", + "Allow private network access": "Allow private network access", + "Allowed Origins": "Allowed Origins", + "Please enter a valid url": "Please enter a valid url", + "Add": "Add", + "Development mode: Automatically includes Tauri and localhost origins": "Development mode: Automatically includes Tauri and localhost origins" } diff --git a/clash-verge-rev/src/locales/zh.json b/clash-verge-rev/src/locales/zh.json index a64efe0221..00ce9b5bd9 100644 --- a/clash-verge-rev/src/locales/zh.json +++ b/clash-verge-rev/src/locales/zh.json @@ -639,5 +639,13 @@ "AppHiddenTitle": "应用隐藏", "AppHiddenBody": "已通过快捷键隐藏应用窗口", "Invalid Profile URL": "无效的订阅链接,请输入以 http:// 或 https:// 开头的地址", - "Saved Successfully": "保存成功" + "Saved Successfully": "保存成功", + "External Cors": "外部控制跨域", + "Enable one-click CORS for external API. Click to toggle CORS": "设置内核跨域访问,点击切换 CORS是否启用", + "External Cors Configuration": "外部控制跨域配置", + "Allow private network access": "允许专用网络访问", + "Allowed Origins": "允许的来源", + "Please enter a valid url": "请输入有效的网址", + "Add": "添加", + "Development mode: Automatically includes Tauri and localhost origins": "开发模式:自动包含 Tauri 和 localhost 来源" } diff --git a/clash-verge-rev/src/providers/app-data-provider.tsx b/clash-verge-rev/src/providers/app-data-provider.tsx index 9e7ab3afd8..cbaebc9895 100644 --- a/clash-verge-rev/src/providers/app-data-provider.tsx +++ b/clash-verge-rev/src/providers/app-data-provider.tsx @@ -101,33 +101,19 @@ export const AppDataProvider = ({ lastProfileId = newProfileId; lastUpdateTime = now; - setTimeout(async () => { - try { - console.log("[AppDataProvider] 强制刷新代理缓存"); - - const refreshPromise = Promise.race([ - forceRefreshProxies(), - new Promise((_, reject) => - setTimeout( - () => reject(new Error("forceRefreshProxies timeout")), - 8000, - ), - ), - ]); - - await refreshPromise; - - console.log("[AppDataProvider] 刷新前端代理数据"); - await refreshProxy(); - - console.log("[AppDataProvider] Profile切换的代理数据刷新完成"); - } catch (error) { - console.error("[AppDataProvider] 强制刷新代理缓存失败:", error); - - refreshProxy().catch((e) => - console.warn("[AppDataProvider] 普通刷新也失败:", e), - ); - } + setTimeout(() => { + // 先执行 forceRefreshProxies,完成后稍延迟再刷新前端数据,避免页面一直 loading + forceRefreshProxies() + .catch((e) => + console.warn("[AppDataProvider] forceRefreshProxies 失败:", e), + ) + .finally(() => { + setTimeout(() => { + refreshProxy().catch((e) => + console.warn("[AppDataProvider] 普通刷新也失败:", e), + ); + }, 200); // 200ms 延迟,保证后端缓存已清理 + }); }, 0); }); diff --git a/clash-verge-rev/src/services/types.d.ts b/clash-verge-rev/src/services/types.d.ts index 4bd03235c7..4ded6a0f5f 100644 --- a/clash-verge-rev/src/services/types.d.ts +++ b/clash-verge-rev/src/services/types.d.ts @@ -31,6 +31,10 @@ interface IConfigData { "socks-port": number; "tproxy-port": number; "external-controller": string; + "external-controller-cors": { + "allow-private-network": boolean; + "allow-origins": string[]; + }; secret: string; "unified-delay": boolean; tun: { diff --git a/filebrowser/CHANGELOG.md b/filebrowser/CHANGELOG.md index efff401052..e01ddfe96b 100644 --- a/filebrowser/CHANGELOG.md +++ b/filebrowser/CHANGELOG.md @@ -2,6 +2,19 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.35.0](https://github.com/filebrowser/filebrowser/compare/v2.34.2...v2.35.0) (2025-06-30) + + +### Features + +* Long press selects item in single click mode ([8d75220](https://github.com/filebrowser/filebrowser/commit/8d7522049ced83f28f0933b55772c32e3ad04627)) + + +### Bug Fixes + +* shell value must be joined by blank space ([4403cd3](https://github.com/filebrowser/filebrowser/commit/4403cd35720dbda5a8bb1013b92582accf3317bc)) +* update documentation links ([38d0366](https://github.com/filebrowser/filebrowser/commit/38d0366acf88352b5a9a97c45837b0f865efae0b)) + ### [2.34.2](https://github.com/filebrowser/filebrowser/compare/v2.34.1...v2.34.2) (2025-06-29) diff --git a/filebrowser/docker/alpine/init.sh b/filebrowser/docker/alpine/init.sh index da620b0955..209757d8c7 100755 --- a/filebrowser/docker/alpine/init.sh +++ b/filebrowser/docker/alpine/init.sh @@ -12,7 +12,7 @@ if [ -f "/.filebrowser.json" ]; then echo "" echo "The volume mount configuration has changed in the latest release." echo "Please rename .filebrowser.json to settings.json and mount the parent directory to /config". - echo "Read more on https://github.com/filebrowser/filebrowser/blob/master/docs/installation.md#docker" + echo "Read more on https://filebrowser.org/installation.html#docker" echo "" echo "This workaround will be removed in a future release." echo "" @@ -27,7 +27,7 @@ if [ -f "/database.db" ]; then echo "" echo "The volume mount configuration has changed in the latest release." echo "Please rename database.db to filebrowser.db and mount the parent directory to /database". - echo "Read more on https://github.com/filebrowser/filebrowser/blob/master/docs/installation.md#docker" + echo "Read more on https://filebrowser.org/installation.html#docker" echo "" echo "This workaround will be removed in a future release." echo "" diff --git a/filebrowser/frontend/src/components/files/ListingItem.vue b/filebrowser/frontend/src/components/files/ListingItem.vue index 75326f4cfc..14d897cf73 100644 --- a/filebrowser/frontend/src/components/files/ListingItem.vue +++ b/filebrowser/frontend/src/components/files/ListingItem.vue @@ -8,6 +8,13 @@ @dragover="dragOver" @drop="drop" @click="itemClick" + @mousedown="handleMouseDown" + @mouseup="handleMouseUp" + @mouseleave="handleMouseLeave" + @touchstart="handleTouchStart" + @touchend="handleTouchEnd" + @touchcancel="handleTouchCancel" + @touchmove="handleTouchMove" :data-dir="isDir" :data-type="type" :aria-label="name" @@ -50,6 +57,12 @@ import { useRouter } from "vue-router"; const touches = ref(0); +const longPressTimer = ref(null); +const longPressTriggered = ref(false); +const longPressDelay = ref(500); +const startPosition = ref<{ x: number; y: number } | null>(null); +const moveThreshold = ref(10); + const $showError = inject("$showError")!; const router = useRouter(); @@ -209,6 +222,12 @@ const drop = async (event: Event) => { }; const itemClick = (event: Event | KeyboardEvent) => { + // If long press was triggered, prevent normal click behavior + if (longPressTriggered.value) { + longPressTriggered.value = false; + return; + } + if ( singleClick.value && !(event as KeyboardEvent).ctrlKey && @@ -281,4 +300,76 @@ const getExtension = (fileName: string): string => { } return fileName.substring(lastDotIndex); }; + +// Long-press helper functions +const startLongPress = (clientX: number, clientY: number) => { + startPosition.value = { x: clientX, y: clientY }; + longPressTimer.value = window.setTimeout(() => { + handleLongPress(); + }, longPressDelay.value); +}; + +const cancelLongPress = () => { + if (longPressTimer.value !== null) { + window.clearTimeout(longPressTimer.value); + longPressTimer.value = null; + } + startPosition.value = null; +}; + +const handleLongPress = () => { + if (singleClick.value) { + longPressTriggered.value = true; + click(new Event("longpress")); + } + cancelLongPress(); +}; + +const checkMovement = (clientX: number, clientY: number): boolean => { + if (!startPosition.value) return false; + + const deltaX = Math.abs(clientX - startPosition.value.x); + const deltaY = Math.abs(clientY - startPosition.value.y); + + return deltaX > moveThreshold.value || deltaY > moveThreshold.value; +}; + +// Event handlers +const handleMouseDown = (event: MouseEvent) => { + if (event.button === 0) { + startLongPress(event.clientX, event.clientY); + } +}; + +const handleMouseUp = () => { + cancelLongPress(); +}; + +const handleMouseLeave = () => { + cancelLongPress(); +}; + +const handleTouchStart = (event: TouchEvent) => { + if (event.touches.length === 1) { + const touch = event.touches[0]; + startLongPress(touch.clientX, touch.clientY); + } +}; + +const handleTouchEnd = () => { + cancelLongPress(); +}; + +const handleTouchCancel = () => { + cancelLongPress(); +}; + +const handleTouchMove = (event: TouchEvent) => { + if (event.touches.length === 1 && startPosition.value) { + const touch = event.touches[0]; + if (checkMovement(touch.clientX, touch.clientY)) { + cancelLongPress(); + } + } +}; diff --git a/filebrowser/frontend/src/views/settings/Global.vue b/filebrowser/frontend/src/views/settings/Global.vue index 331dd438c8..e397c6f7ca 100644 --- a/filebrowser/frontend/src/views/settings/Global.vue +++ b/filebrowser/frontend/src/views/settings/Global.vue @@ -65,7 +65,7 @@ {{ t("settings.documentation") }} @@ -204,7 +204,7 @@ {{ t("settings.documentation") }} @@ -401,7 +401,7 @@ onMounted(async () => { originalSettings.value = original; settings.value = newSettings; - shellValue.value = newSettings.shell.join("\n"); + shellValue.value = newSettings.shell.join(" "); } catch (err) { if (err instanceof Error) { error.value = err; diff --git a/filebrowser/www/docs/configuration.md b/filebrowser/www/docs/configuration.md index bc4f0ac87f..2b7299e3c3 100644 --- a/filebrowser/www/docs/configuration.md +++ b/filebrowser/www/docs/configuration.md @@ -97,6 +97,10 @@ filebrowser config set --auth.method=noauth ## Command Runner +> [!CAUTION] +> +> The **command execution** functionality has been disabled for all existent and new installations by default from version v2.33.8 and onwards, due to continuous and known security vulnerabilities. You should only use this feature if you are aware of all of the security risks involved. For more up to date information, consult issue [#5199](https://github.com/filebrowser/filebrowser/issues/5199). + The command runner is a feature that enables you to execute any shell command you want before or after a certain event. Right now, these are the events: * Copy diff --git a/juicity/.github/workflows/seed-upload-release.yml b/juicity/.github/workflows/seed-upload-release.yml index ad6d2d3b4d..1ef26d3d8b 100644 --- a/juicity/.github/workflows/seed-upload-release.yml +++ b/juicity/.github/workflows/seed-upload-release.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download all artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: path: release/ @@ -36,7 +36,7 @@ jobs: ls -lh | grep ".zip" - name: Upload full source and artifacts to GitHub release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: tag_name: ${{ inputs.tag }} files: | diff --git a/juicity/CHANGELOGS.md b/juicity/CHANGELOGS.md index 13f18ef5bb..fc4c90f6a1 100644 --- a/juicity/CHANGELOGS.md +++ b/juicity/CHANGELOGS.md @@ -12,7 +12,8 @@ curl --silent "https://api.github.com/repos/juicity/juicity/releases" | jq -r '. -- [v0.4.3 (Latest)](#v043-latest) +- [v0.5.0 (Latest)](#v050-latest) +- [v0.4.3](#v043) - [v0.4.2](#v042) - [v0.4.1](#v041) - [v0.4.0](#v040) @@ -25,7 +26,20 @@ curl --silent "https://api.github.com/repos/juicity/juicity/releases" | jq -r '. - [v0.1.0](#v010) -### v0.4.3 (Latest) +### v0.5.0 (Latest) + +> Release date: 2025/06/30 + +#### Others + +- ci(release): draft release v0.4.3 in [#167](https://github.com/juicity/juicity/pull/167) by (@juicity-bot) +- ci: update checkout and setup-go to latest in [#177](https://github.com/juicity/juicity/pull/177) by (@MarksonHon) +- chore: update outbound in [#176](https://github.com/juicity/juicity/pull/176) by (@mzz2017) +- ci: reset to use origin seed in [#178](https://github.com/juicity/juicity/pull/178) by (@MarksonHon) + +**Full Changelog**: https://github.com/juicity/juicity/compare/v0.4.3...v0.5.0 + +### v0.4.3 > Release date: 2024/05/14 diff --git a/lede/package/kernel/ksmbd/Makefile b/lede/package/kernel/ksmbd/Makefile index 1b11c89a5a..7233041a8e 100644 --- a/lede/package/kernel/ksmbd/Makefile +++ b/lede/package/kernel/ksmbd/Makefile @@ -1,13 +1,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ksmbd -PKG_VERSION:=2024.10.14 PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git +PKG_SOURCE_DATE:=2025-04-04 PKG_SOURCE_URL:=https://github.com/namjaejeon/ksmbd.git -PKG_SOURCE_VERSION:=6a0efcd1301d72ccd76b2f457c1d0b56702f4908 -PKG_MIRROR_HASH:=02ba5828aae66d4fac202b8c4dcb1f45beb255655927741eb293d4a257822624 +PKG_SOURCE_VERSION:=5ce517e5d08fa748074ba1422592da739da31e07 +PKG_MIRROR_HASH:=c088ea320fe7ff15f940774884b7c3a70178f58a8e9ddc425c8ddb37df67ab2a PKG_LICENSE:=GPL-2.0-or-later PKG_LICENSE_FILES:=COPYING @@ -46,14 +46,16 @@ define KernelPackage/fs-ksmbd/description Ksmbd is an In-kernel SMBv(1)2/3 fileserver. It's an implementation of the SMB protocol in kernel space for sharing files and IPC services over network. endef + define KernelPackage/fs-ksmbd/config config KSMBD_SMB_INSECURE_SERVER bool "Support for insecure SMB1/CIFS and SMB2.0 protocols" depends on PACKAGE_kmod-fs-ksmbd + default n help This enables deprecated insecure protocols dialects: SMB1/CIFS and SMB2.0. - default n endef + ifeq ($(CONFIG_KSMBD_SMB_INSECURE_SERVER),y) PKG_EXTRA_KCONFIG:=CONFIG_SMB_INSECURE_SERVER=y EXTRA_CFLAGS += -DCONFIG_SMB_INSECURE_SERVER=1 diff --git a/lede/package/kernel/ksmbd/patches/02-linux-is_dot_dotdot.patch b/lede/package/kernel/ksmbd/patches/02-linux-is_dot_dotdot.patch deleted file mode 100644 index cba45cdc0d..0000000000 --- a/lede/package/kernel/ksmbd/patches/02-linux-is_dot_dotdot.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/vfs.c -+++ b/vfs.c -@@ -2662,7 +2662,7 @@ - } - #endif - --#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 9, 0) -+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 1, 110) - static inline bool is_dot_dotdot(const char *name, size_t len) - { - return len && unlikely(name[0] == '.') && diff --git a/lede/target/linux/ath79/patches-6.12/900-unaligned_access_hacks.patch b/lede/target/linux/ath79/patches-6.12/900-unaligned_access_hacks.patch index 224b8097e2..ea51478fd0 100644 --- a/lede/target/linux/ath79/patches-6.12/900-unaligned_access_hacks.patch +++ b/lede/target/linux/ath79/patches-6.12/900-unaligned_access_hacks.patch @@ -623,7 +623,7 @@ SVN-Revision: 35130 /* * Jumbo payload option, as described in RFC 2675 2. -@@ -651,8 +651,8 @@ static inline void __ipv6_addr_set_half( +@@ -642,8 +642,8 @@ static inline void __ipv6_addr_set_half( } #endif #endif @@ -634,7 +634,7 @@ SVN-Revision: 35130 } static inline void ipv6_addr_set(struct in6_addr *addr, -@@ -711,6 +711,8 @@ static inline bool ipv6_prefix_equal(con +@@ -702,6 +702,8 @@ static inline bool ipv6_prefix_equal(con const __be32 *a1 = addr1->s6_addr32; const __be32 *a2 = addr2->s6_addr32; unsigned int pdw, pbi; @@ -643,7 +643,7 @@ SVN-Revision: 35130 /* check complete u32 in prefix */ pdw = prefixlen >> 5; -@@ -719,7 +721,9 @@ static inline bool ipv6_prefix_equal(con +@@ -710,7 +712,9 @@ static inline bool ipv6_prefix_equal(con /* check incomplete u32 in prefix */ pbi = prefixlen & 0x1f; @@ -654,7 +654,7 @@ SVN-Revision: 35130 return false; return true; -@@ -836,13 +840,13 @@ static inline void ipv6_addr_set_v4mappe +@@ -827,13 +831,13 @@ static inline void ipv6_addr_set_v4mappe */ static inline int __ipv6_addr_diff32(const void *token1, const void *token2, int addrlen) { @@ -670,7 +670,7 @@ SVN-Revision: 35130 if (xb) return i * 32 + 31 - __fls(ntohl(xb)); } -@@ -1037,17 +1041,18 @@ static inline u32 ip6_multipath_hash_fie +@@ -1028,17 +1032,18 @@ static inline u32 ip6_multipath_hash_fie static inline void ip6_flow_hdr(struct ipv6hdr *hdr, unsigned int tclass, __be32 flowlabel) { @@ -750,7 +750,7 @@ SVN-Revision: 35130 EXPORT_SYMBOL(xfrm_parse_spi); --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c -@@ -4329,14 +4329,16 @@ static bool tcp_parse_aligned_timestamp( +@@ -4338,14 +4338,16 @@ static bool tcp_parse_aligned_timestamp( { const __be32 *ptr = (const __be32 *)(th + 1); diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0057-MMC-added-alternative-MMC-driver.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0057-MMC-added-alternative-MMC-driver.patch index 57f8f2f970..8535111890 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0057-MMC-added-alternative-MMC-driver.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0057-MMC-added-alternative-MMC-driver.patch @@ -344,7 +344,7 @@ Signed-off-by: Phil Elwell } --- a/drivers/mmc/core/quirks.h +++ b/drivers/mmc/core/quirks.h -@@ -143,6 +143,14 @@ static const struct mmc_fixup __maybe_un +@@ -153,6 +153,14 @@ static const struct mmc_fixup __maybe_un MMC_FIXUP(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, add_quirk_sd, MMC_QUIRK_BROKEN_SD_DISCARD), @@ -2011,10 +2011,10 @@ Signed-off-by: Phil Elwell sdhci_dumpregs(host); --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h -@@ -295,6 +295,7 @@ struct mmc_card { - #define MMC_QUIRK_BROKEN_SD_CACHE (1<<15) /* Disable broken SD cache support */ +@@ -296,6 +296,7 @@ struct mmc_card { #define MMC_QUIRK_BROKEN_CACHE_FLUSH (1<<16) /* Don't flush cache until the write has occurred */ #define MMC_QUIRK_BROKEN_SD_POWEROFF_NOTIFY (1<<17) /* Disable broken SD poweroff notify support */ + #define MMC_QUIRK_NO_UHS_DDR50_TUNING (1<<18) /* Disable DDR50 tuning */ +#define MMC_QUIRK_ERASE_BROKEN (1<<31) /* Skip erase */ bool written_flag; /* Indicates eMMC has been written since power on */ diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0347-net-macb-Also-set-DMA-coherent-mask.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0347-net-macb-Also-set-DMA-coherent-mask.patch index 6b4058b725..d275ee438a 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0347-net-macb-Also-set-DMA-coherent-mask.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0347-net-macb-Also-set-DMA-coherent-mask.patch @@ -367,7 +367,7 @@ Signed-off-by: Jonathan Bell spin_lock_init(&bp->lock); spin_lock_init(&bp->stats_lock); -@@ -5165,6 +5284,21 @@ static int macb_probe(struct platform_de +@@ -5169,6 +5288,21 @@ static int macb_probe(struct platform_de else bp->phy_interface = interface; @@ -389,7 +389,7 @@ Signed-off-by: Jonathan Bell /* IP specific init */ err = init(pdev); if (err) -@@ -5239,6 +5373,19 @@ static void macb_remove(struct platform_ +@@ -5243,6 +5377,19 @@ static void macb_remove(struct platform_ } } @@ -409,7 +409,7 @@ Signed-off-by: Jonathan Bell static int __maybe_unused macb_suspend(struct device *dev) { struct net_device *netdev = dev_get_drvdata(dev); -@@ -5492,6 +5639,7 @@ static const struct dev_pm_ops macb_pm_o +@@ -5496,6 +5643,7 @@ static const struct dev_pm_ops macb_pm_o static struct platform_driver macb_driver = { .probe = macb_probe, .remove_new = macb_remove, diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0392-fbdev-Allow-client-to-request-a-particular-dev-fbN-n.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0392-fbdev-Allow-client-to-request-a-particular-dev-fbN-n.patch index 12b86534ce..9322cedab0 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0392-fbdev-Allow-client-to-request-a-particular-dev-fbN-n.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0392-fbdev-Allow-client-to-request-a-particular-dev-fbN-n.patch @@ -22,33 +22,40 @@ Signed-off-by: Dave Stevenson #define for_each_registered_fb(i) \ for (i = 0; i < FB_MAX; i++) \ if (!registered_fb[i]) {} else -@@ -398,10 +399,12 @@ static int do_register_framebuffer(struc +@@ -399,9 +400,12 @@ static int do_register_framebuffer(struc + if (num_registered_fb == FB_MAX) return -ENXIO; - num_registered_fb++; - for (i = 0 ; i < FB_MAX; i++) - if (!registered_fb[i]) - break; -- fb_info->node = i; + if (!fb_info->custom_fb_num || fb_info->node >= FB_MAX || registered_fb[fb_info->node]) { + for (i = min_dynamic_fb ; i < FB_MAX; i++) + if (!registered_fb[i]) + break; + fb_info->node = i; + } + + if (!fb_info->modelist.prev || !fb_info->modelist.next) + INIT_LIST_HEAD(&fb_info->modelist); +@@ -411,7 +415,6 @@ static int do_register_framebuffer(struc + if (err < 0) + return err; + +- fb_info->node = i; refcount_set(&fb_info->count, 1); mutex_init(&fb_info->lock); mutex_init(&fb_info->mm_lock); -@@ -436,7 +439,7 @@ static int do_register_framebuffer(struc +@@ -442,7 +445,7 @@ static int do_register_framebuffer(struc + pm_vt_switch_required(fb_info->device, true); - fb_var_to_videomode(&mode, &fb_info->var); - fb_add_videomode(&mode, &fb_info->modelist); + num_registered_fb++; - registered_fb[i] = fb_info; + registered_fb[fb_info->node] = fb_info; #ifdef CONFIG_GUMSTIX_AM200EPD { -@@ -497,6 +500,12 @@ static void do_unregister_framebuffer(st +@@ -503,6 +506,12 @@ static void do_unregister_framebuffer(st put_fb_info(fb_info); } diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0427-drivers-mmc-add-SD-support-for-Command-Queueing.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0427-drivers-mmc-add-SD-support-for-Command-Queueing.patch index 99aa00e319..550264ef6f 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0427-drivers-mmc-add-SD-support-for-Command-Queueing.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0427-drivers-mmc-add-SD-support-for-Command-Queueing.patch @@ -91,7 +91,7 @@ Signed-off-by: Jonathan Bell cmd.flags &= ~MMC_RSP_CRC; /* Ignore CRC */ --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c -@@ -1011,8 +1011,8 @@ static bool mmc_sd_card_using_v18(struct +@@ -1027,8 +1027,8 @@ static bool mmc_sd_card_using_v18(struct (SD_MODE_UHS_SDR50 | SD_MODE_UHS_SDR104 | SD_MODE_UHS_DDR50); } @@ -102,7 +102,7 @@ Signed-off-by: Jonathan Bell { struct mmc_host *host = card->host; struct mmc_request mrq = {}; -@@ -1170,8 +1170,14 @@ static int sd_parse_ext_reg_perf(struct +@@ -1186,8 +1186,14 @@ static int sd_parse_ext_reg_perf(struct card->ext_perf.feature_support |= SD_EXT_PERF_CACHE; /* Command queue support indicated via queue depth bits (0 to 4). */ @@ -118,7 +118,7 @@ Signed-off-by: Jonathan Bell card->ext_perf.fno = fno; card->ext_perf.page = page; -@@ -1558,13 +1564,41 @@ cont: +@@ -1574,13 +1580,41 @@ cont: goto free_card; } diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0428-drivers-mmc-preallocate-a-block-for-SD-extension-reg.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0428-drivers-mmc-preallocate-a-block-for-SD-extension-reg.patch index 554606f83f..0cf6030c76 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0428-drivers-mmc-preallocate-a-block-for-SD-extension-reg.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0428-drivers-mmc-preallocate-a-block-for-SD-extension-reg.patch @@ -30,7 +30,7 @@ Signed-off-by: Jonathan Bell kfree(card); --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c -@@ -1021,9 +1021,8 @@ int sd_write_ext_reg(struct mmc_card *ca +@@ -1037,9 +1037,8 @@ int sd_write_ext_reg(struct mmc_card *ca struct scatterlist sg; u8 *reg_buf; @@ -42,7 +42,7 @@ Signed-off-by: Jonathan Bell mrq.cmd = &cmd; mrq.data = &data; -@@ -1055,8 +1054,6 @@ int sd_write_ext_reg(struct mmc_card *ca +@@ -1071,8 +1070,6 @@ int sd_write_ext_reg(struct mmc_card *ca mmc_set_data_timeout(&data, card); mmc_wait_for_req(host, &mrq); @@ -51,7 +51,7 @@ Signed-off-by: Jonathan Bell /* * Note that, the SD card is allowed to signal busy on DAT0 up to 1s * after the CMD49. Although, let's leave this to be managed by the -@@ -1097,9 +1094,7 @@ static int sd_parse_ext_reg_power(struct +@@ -1113,9 +1110,7 @@ static int sd_parse_ext_reg_power(struct int err; u8 *reg_buf; @@ -62,7 +62,7 @@ Signed-off-by: Jonathan Bell /* Read the extension register for power management function. */ err = sd_read_ext_reg(card, fno, page, offset, 512, reg_buf); -@@ -1129,7 +1124,6 @@ static int sd_parse_ext_reg_power(struct +@@ -1145,7 +1140,6 @@ static int sd_parse_ext_reg_power(struct card->ext_power.offset = offset; out: @@ -70,7 +70,7 @@ Signed-off-by: Jonathan Bell return err; } -@@ -1139,9 +1133,7 @@ static int sd_parse_ext_reg_perf(struct +@@ -1155,9 +1149,7 @@ static int sd_parse_ext_reg_perf(struct int err; u8 *reg_buf; @@ -81,7 +81,7 @@ Signed-off-by: Jonathan Bell err = sd_read_ext_reg(card, fno, page, offset, 512, reg_buf); if (err) { -@@ -1184,7 +1176,6 @@ static int sd_parse_ext_reg_perf(struct +@@ -1200,7 +1192,6 @@ static int sd_parse_ext_reg_perf(struct card->ext_perf.offset = offset; out: @@ -89,7 +89,7 @@ Signed-off-by: Jonathan Bell return err; } -@@ -1255,6 +1246,12 @@ static int sd_read_ext_regs(struct mmc_c +@@ -1271,6 +1262,12 @@ static int sd_read_ext_regs(struct mmc_c if (!gen_info_buf) return -ENOMEM; @@ -102,7 +102,7 @@ Signed-off-by: Jonathan Bell /* * Read 512 bytes of general info, which is found at function number 0, * at page 0 and with no offset. -@@ -1321,9 +1318,7 @@ static int sd_flush_cache(struct mmc_hos +@@ -1337,9 +1334,7 @@ static int sd_flush_cache(struct mmc_hos if (!sd_cache_enabled(host)) return 0; @@ -113,7 +113,7 @@ Signed-off-by: Jonathan Bell /* * Set Flush Cache at bit 0 in the performance enhancement register at -@@ -1359,21 +1354,15 @@ static int sd_flush_cache(struct mmc_hos +@@ -1375,21 +1370,15 @@ static int sd_flush_cache(struct mmc_hos if (reg_buf[0] & BIT(0)) err = -ETIMEDOUT; out: @@ -135,7 +135,7 @@ Signed-off-by: Jonathan Bell /* * Set Cache Enable at bit 0 in the performance enhancement register at * 260 bytes offset. -@@ -1392,7 +1381,6 @@ static int sd_enable_cache(struct mmc_ca +@@ -1408,7 +1397,6 @@ static int sd_enable_cache(struct mmc_ca card->ext_perf.feature_enabled |= SD_EXT_PERF_CACHE; out: @@ -145,7 +145,7 @@ Signed-off-by: Jonathan Bell --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h -@@ -320,6 +320,7 @@ struct mmc_card { +@@ -321,6 +321,7 @@ struct mmc_card { struct sd_switch_caps sw_caps; /* switch (CMD6) caps */ struct sd_ext_reg ext_power; /* SD extension reg for PM */ struct sd_ext_reg ext_perf; /* SD extension reg for PERF */ diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0432-drivers-mmc-export-SD-extension-register-read-write-.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0432-drivers-mmc-export-SD-extension-register-read-write-.patch index 0f0a18e47f..b513205512 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0432-drivers-mmc-export-SD-extension-register-read-write-.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0432-drivers-mmc-export-SD-extension-register-read-write-.patch @@ -16,7 +16,7 @@ Signed-off-by: Jonathan Bell --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c -@@ -1011,83 +1011,6 @@ static bool mmc_sd_card_using_v18(struct +@@ -1027,83 +1027,6 @@ static bool mmc_sd_card_using_v18(struct (SD_MODE_UHS_SDR50 | SD_MODE_UHS_SDR104 | SD_MODE_UHS_DDR50); } @@ -100,7 +100,7 @@ Signed-off-by: Jonathan Bell static int sd_parse_ext_reg_power(struct mmc_card *card, u8 fno, u8 page, u16 offset) { -@@ -1097,7 +1020,7 @@ static int sd_parse_ext_reg_power(struct +@@ -1113,7 +1036,7 @@ static int sd_parse_ext_reg_power(struct reg_buf = card->ext_reg_buf; /* Read the extension register for power management function. */ @@ -109,7 +109,7 @@ Signed-off-by: Jonathan Bell if (err) { pr_warn("%s: error %d reading PM func of ext reg\n", mmc_hostname(card->host), err); -@@ -1135,7 +1058,7 @@ static int sd_parse_ext_reg_perf(struct +@@ -1151,7 +1074,7 @@ static int sd_parse_ext_reg_perf(struct reg_buf = card->ext_reg_buf; @@ -118,7 +118,7 @@ Signed-off-by: Jonathan Bell if (err) { pr_warn("%s: error %d reading PERF func of ext reg\n", mmc_hostname(card->host), err); -@@ -1230,7 +1153,7 @@ static int sd_parse_ext_reg(struct mmc_c +@@ -1246,7 +1169,7 @@ static int sd_parse_ext_reg(struct mmc_c return 0; } @@ -127,7 +127,7 @@ Signed-off-by: Jonathan Bell { int err, i; u8 num_ext, *gen_info_buf; -@@ -1256,7 +1179,7 @@ static int sd_read_ext_regs(struct mmc_c +@@ -1272,7 +1195,7 @@ static int sd_read_ext_regs(struct mmc_c * Read 512 bytes of general info, which is found at function number 0, * at page 0 and with no offset. */ @@ -136,7 +136,7 @@ Signed-off-by: Jonathan Bell if (err) { pr_err("%s: error %d reading general info of SD ext reg\n", mmc_hostname(card->host), err); -@@ -1328,7 +1251,7 @@ static int sd_flush_cache(struct mmc_hos +@@ -1344,7 +1267,7 @@ static int sd_flush_cache(struct mmc_hos page = card->ext_perf.page; offset = card->ext_perf.offset + 261; @@ -145,7 +145,7 @@ Signed-off-by: Jonathan Bell if (err) { pr_warn("%s: error %d writing Cache Flush bit\n", mmc_hostname(host), err); -@@ -1344,7 +1267,7 @@ static int sd_flush_cache(struct mmc_hos +@@ -1360,7 +1283,7 @@ static int sd_flush_cache(struct mmc_hos * Read the Flush Cache bit. The card shall reset it, to confirm that * it's has completed the flushing of the cache. */ @@ -154,7 +154,7 @@ Signed-off-by: Jonathan Bell if (err) { pr_warn("%s: error %d reading Cache Flush bit\n", mmc_hostname(host), err); -@@ -1367,7 +1290,7 @@ static int sd_enable_cache(struct mmc_ca +@@ -1383,7 +1306,7 @@ static int sd_enable_cache(struct mmc_ca * Set Cache Enable at bit 0 in the performance enhancement register at * 260 bytes offset. */ @@ -163,7 +163,7 @@ Signed-off-by: Jonathan Bell card->ext_perf.offset + 260, BIT(0)); if (err) { pr_warn("%s: error %d writing Cache Enable bit\n", -@@ -1540,7 +1463,7 @@ retry: +@@ -1556,7 +1479,7 @@ retry: cont: if (!oldcard) { /* Read/parse the extension registers. */ @@ -172,7 +172,7 @@ Signed-off-by: Jonathan Bell if (err) goto free_card; } -@@ -1667,7 +1590,7 @@ static int sd_busy_poweroff_notify_cb(vo +@@ -1683,7 +1606,7 @@ static int sd_busy_poweroff_notify_cb(vo * one byte offset and is one byte long. The Power Off Notification * Ready is bit 0. */ @@ -181,7 +181,7 @@ Signed-off-by: Jonathan Bell card->ext_power.offset + 1, 1, data->reg_buf); if (err) { pr_warn("%s: error %d reading status reg of PM func\n", -@@ -1693,7 +1616,7 @@ static int sd_poweroff_notify(struct mmc +@@ -1709,7 +1632,7 @@ static int sd_poweroff_notify(struct mmc * Set the Power Off Notification bit in the power management settings * register at 2 bytes offset. */ diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0433-drivers-mmc-be-more-cautious-when-manipulating-Comma.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0433-drivers-mmc-be-more-cautious-when-manipulating-Comma.patch index f9ae83fd9f..29a1d329a0 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0433-drivers-mmc-be-more-cautious-when-manipulating-Comma.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0433-drivers-mmc-be-more-cautious-when-manipulating-Comma.patch @@ -17,7 +17,7 @@ Signed-off-by: Jonathan Bell --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c -@@ -1084,8 +1084,12 @@ static int sd_parse_ext_reg_perf(struct +@@ -1100,8 +1100,12 @@ static int sd_parse_ext_reg_perf(struct if ((reg_buf[4] & BIT(0)) && !mmc_card_broken_sd_cache(card)) card->ext_perf.feature_support |= SD_EXT_PERF_CACHE; diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0434-drivers-mmc-add-debugfs-entries-for-SD-extension-reg.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0434-drivers-mmc-add-debugfs-entries-for-SD-extension-reg.patch index a4c5f419d4..eafdd01140 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0434-drivers-mmc-add-debugfs-entries-for-SD-extension-reg.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0434-drivers-mmc-add-debugfs-entries-for-SD-extension-reg.patch @@ -26,7 +26,7 @@ Signed-off-by: Jonathan Bell pr_info("%s: Host Software Queue enabled\n", --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c -@@ -710,7 +710,8 @@ MMC_DEV_ATTR(oemid, "0x%04x\n", card->ci +@@ -726,7 +726,8 @@ MMC_DEV_ATTR(oemid, "0x%04x\n", card->ci MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial); MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr); MMC_DEV_ATTR(rca, "0x%04x\n", card->rca); @@ -36,7 +36,7 @@ Signed-off-by: Jonathan Bell static ssize_t mmc_dsr_show(struct device *dev, struct device_attribute *attr, char *buf) -@@ -772,6 +773,8 @@ static struct attribute *sd_std_attrs[] +@@ -788,6 +789,8 @@ static struct attribute *sd_std_attrs[] &dev_attr_ocr.attr, &dev_attr_rca.attr, &dev_attr_dsr.attr, @@ -45,7 +45,7 @@ Signed-off-by: Jonathan Bell NULL, }; -@@ -1507,8 +1510,8 @@ cont: +@@ -1523,8 +1526,8 @@ cont: host->cqe_enabled = true; if (card->ext_csd.cmdq_en) { diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0435-drivers-mmc-handle-1024-byte-SD-General-Info-lengths.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0435-drivers-mmc-handle-1024-byte-SD-General-Info-lengths.patch index 180dc5b08c..0755d4e590 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0435-drivers-mmc-handle-1024-byte-SD-General-Info-lengths.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0435-drivers-mmc-handle-1024-byte-SD-General-Info-lengths.patch @@ -13,7 +13,7 @@ Signed-off-by: Jonathan Bell --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c -@@ -1172,7 +1172,7 @@ static int mmc_sd_read_ext_regs(struct m +@@ -1188,7 +1188,7 @@ static int mmc_sd_read_ext_regs(struct m if (!(card->scr.cmds & SD_SCR_CMD48_SUPPORT)) return 0; @@ -22,7 +22,7 @@ Signed-off-by: Jonathan Bell if (!gen_info_buf) return -ENOMEM; -@@ -1203,14 +1203,23 @@ static int mmc_sd_read_ext_regs(struct m +@@ -1219,14 +1219,23 @@ static int mmc_sd_read_ext_regs(struct m num_ext = gen_info_buf[4]; /* diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0440-mmc-restrict-posted-write-counts-for-SD-cards-in-CQ-.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0440-mmc-restrict-posted-write-counts-for-SD-cards-in-CQ-.patch index 881921cd07..b67764f162 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0440-mmc-restrict-posted-write-counts-for-SD-cards-in-CQ-.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0440-mmc-restrict-posted-write-counts-for-SD-cards-in-CQ-.patch @@ -145,7 +145,7 @@ Signed-off-by: Jonathan Bell bool busy; --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c -@@ -1099,6 +1099,15 @@ static int sd_parse_ext_reg_perf(struct +@@ -1115,6 +1115,15 @@ static int sd_parse_ext_reg_perf(struct pr_debug("%s: Command Queue supported depth %u\n", mmc_hostname(card->host), card->ext_csd.cmdq_depth); @@ -161,7 +161,7 @@ Signed-off-by: Jonathan Bell } card->ext_perf.fno = fno; -@@ -1362,6 +1371,7 @@ retry: +@@ -1378,6 +1387,7 @@ retry: card->ocr = ocr; card->type = MMC_TYPE_SD; @@ -171,7 +171,7 @@ Signed-off-by: Jonathan Bell --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h -@@ -343,6 +343,8 @@ struct mmc_card { +@@ -344,6 +344,8 @@ struct mmc_card { unsigned int nr_parts; struct workqueue_struct *complete_wq; /* Private workqueue */ diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0442-drivers-mmc-disable-write-caching-on-Samsung-2023-mo.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0442-drivers-mmc-disable-write-caching-on-Samsung-2023-mo.patch index 5dbd79f5c0..bcfc4d7dc8 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0442-drivers-mmc-disable-write-caching-on-Samsung-2023-mo.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0442-drivers-mmc-disable-write-caching-on-Samsung-2023-mo.patch @@ -26,13 +26,13 @@ Signed-off-by: Jonathan Bell #define CID_MANFID_SAMSUNG 0x15 +#define CID_MANFID_SAMSUNG_SD 0x1b #define CID_MANFID_APACER 0x27 + #define CID_MANFID_SWISSBIT 0x5D #define CID_MANFID_KINGSTON 0x70 - #define CID_MANFID_HYNIX 0x90 --- a/drivers/mmc/core/quirks.h +++ b/drivers/mmc/core/quirks.h -@@ -34,6 +34,14 @@ static const struct mmc_fixup __maybe_un - MMC_QUIRK_BROKEN_SD_CACHE | MMC_QUIRK_BROKEN_SD_POWEROFF_NOTIFY, - EXT_CSD_REV_ANY), +@@ -44,6 +44,14 @@ static const struct mmc_fixup __maybe_un + 0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd, + MMC_QUIRK_NO_UHS_DDR50_TUNING, EXT_CSD_REV_ANY), + /* + * Samsung Pro Plus/EVO Plus/Pro Ultimate SD cards (2023) claim to cache diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0443-mmc-quirks-disable-cache-on-more-known-bad-Sandisk-c.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0443-mmc-quirks-disable-cache-on-more-known-bad-Sandisk-c.patch index 2c21469203..d345868bf1 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0443-mmc-quirks-disable-cache-on-more-known-bad-Sandisk-c.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0443-mmc-quirks-disable-cache-on-more-known-bad-Sandisk-c.patch @@ -14,7 +14,7 @@ Signed-off-by: Jonathan Bell --- a/drivers/mmc/core/quirks.h +++ b/drivers/mmc/core/quirks.h -@@ -42,6 +42,18 @@ static const struct mmc_fixup __maybe_un +@@ -52,6 +52,18 @@ static const struct mmc_fixup __maybe_un 0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd, MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY), diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0445-mmc-quirks-add-MMC_QUIRK_BROKEN_ERASE-for-Phison-Int.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0445-mmc-quirks-add-MMC_QUIRK_BROKEN_ERASE-for-Phison-Int.patch index a2688e8ff9..2939ea0636 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0445-mmc-quirks-add-MMC_QUIRK_BROKEN_ERASE-for-Phison-Int.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0445-mmc-quirks-add-MMC_QUIRK_BROKEN_ERASE-for-Phison-Int.patch @@ -15,7 +15,7 @@ Signed-off-by: Jonathan Bell --- a/drivers/mmc/core/quirks.h +++ b/drivers/mmc/core/quirks.h -@@ -171,6 +171,15 @@ static const struct mmc_fixup __maybe_un +@@ -181,6 +181,15 @@ static const struct mmc_fixup __maybe_un MMC_FIXUP("SD32G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN), MMC_FIXUP("SD64G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN), diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0750-mmc-sd-filter-card-CQ-support-based-on-an-allow-list.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0750-mmc-sd-filter-card-CQ-support-based-on-an-allow-list.patch index 2c21e7ca4e..d32cde6548 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0750-mmc-sd-filter-card-CQ-support-based-on-an-allow-list.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0750-mmc-sd-filter-card-CQ-support-based-on-an-allow-list.patch @@ -22,8 +22,8 @@ Signed-off-by: Jonathan Bell --- a/drivers/mmc/core/card.h +++ b/drivers/mmc/core/card.h -@@ -295,4 +295,9 @@ static inline int mmc_card_broken_sd_pow - return c->quirks & MMC_QUIRK_BROKEN_SD_POWEROFF_NOTIFY; +@@ -301,4 +301,9 @@ static inline int mmc_card_no_uhs_ddr50_ + return c->quirks & MMC_QUIRK_NO_UHS_DDR50_TUNING; } +static inline int mmc_card_working_sd_cq(const struct mmc_card *c) @@ -34,7 +34,7 @@ Signed-off-by: Jonathan Bell #endif --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c -@@ -1501,6 +1501,10 @@ cont: +@@ -1517,6 +1517,10 @@ cont: goto free_card; } @@ -47,10 +47,10 @@ Signed-off-by: Jonathan Bell /* --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h -@@ -295,6 +295,7 @@ struct mmc_card { - #define MMC_QUIRK_BROKEN_SD_CACHE (1<<15) /* Disable broken SD cache support */ +@@ -296,6 +296,7 @@ struct mmc_card { #define MMC_QUIRK_BROKEN_CACHE_FLUSH (1<<16) /* Don't flush cache until the write has occurred */ #define MMC_QUIRK_BROKEN_SD_POWEROFF_NOTIFY (1<<17) /* Disable broken SD poweroff notify support */ + #define MMC_QUIRK_NO_UHS_DDR50_TUNING (1<<18) /* Disable DDR50 tuning */ +#define MMC_QUIRK_WORKING_SD_CQ (1<<30) /* SD card has known-good CQ implementation */ #define MMC_QUIRK_ERASE_BROKEN (1<<31) /* Skip erase */ diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0751-mmc-set-MMC_QUIRK_KNOWN_WORKING_SD_CQ-on-Raspberry-P.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0751-mmc-set-MMC_QUIRK_KNOWN_WORKING_SD_CQ-on-Raspberry-P.patch index 54ad128ea1..3514ff82d8 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0751-mmc-set-MMC_QUIRK_KNOWN_WORKING_SD_CQ-on-Raspberry-P.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0751-mmc-set-MMC_QUIRK_KNOWN_WORKING_SD_CQ-on-Raspberry-P.patch @@ -16,7 +16,7 @@ Signed-off-by: Jonathan Bell --- a/drivers/mmc/core/card.h +++ b/drivers/mmc/core/card.h -@@ -93,6 +93,7 @@ struct mmc_fixup { +@@ -94,6 +94,7 @@ struct mmc_fixup { #define CID_MANFID_KINGSTON 0x70 #define CID_MANFID_HYNIX 0x90 #define CID_MANFID_KINGSTON_SD 0x9F @@ -26,7 +26,7 @@ Signed-off-by: Jonathan Bell #define END_FIXUP { NULL } --- a/drivers/mmc/core/quirks.h +++ b/drivers/mmc/core/quirks.h -@@ -66,6 +66,12 @@ static const struct mmc_fixup __maybe_un +@@ -76,6 +76,12 @@ static const struct mmc_fixup __maybe_un 0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd, MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY), diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0752-mmc-use-downstream-DT-property-to-modify-CQE-and-or-.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0752-mmc-use-downstream-DT-property-to-modify-CQE-and-or-.patch index d6ab612840..0cf3c9934e 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0752-mmc-use-downstream-DT-property-to-modify-CQE-and-or-.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0752-mmc-use-downstream-DT-property-to-modify-CQE-and-or-.patch @@ -49,7 +49,7 @@ Signed-off-by: Jonathan Bell if (host->caps & MMC_CAP_NONREMOVABLE) --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c -@@ -1501,8 +1501,8 @@ cont: +@@ -1517,8 +1517,8 @@ cont: goto free_card; } diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0777-drm-v3d-Remove-v3d-cpu_job.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0777-drm-v3d-Remove-v3d-cpu_job.patch index 677018625f..8ecf113d8e 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0777-drm-v3d-Remove-v3d-cpu_job.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0777-drm-v3d-Remove-v3d-cpu_job.patch @@ -35,7 +35,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20250113154741.67520-2-mcana --- a/drivers/gpu/drm/v3d/v3d_sched.c +++ b/drivers/gpu/drm/v3d/v3d_sched.c -@@ -673,8 +673,6 @@ v3d_cpu_job_run(struct drm_sched_job *sc +@@ -677,8 +677,6 @@ v3d_cpu_job_run(struct drm_sched_job *sc struct v3d_cpu_job *job = to_cpu_job(sched_job); struct v3d_dev *v3d = job->base.v3d; diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0859-drm-v3d-Set-job-pointer-to-NULL-when-the-job-s-fence.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0859-drm-v3d-Set-job-pointer-to-NULL-when-the-job-s-fence.patch index a6254fe927..069cb5628e 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0859-drm-v3d-Set-job-pointer-to-NULL-when-the-job-s-fence.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0859-drm-v3d-Set-job-pointer-to-NULL-when-the-job-s-fence.patch @@ -33,7 +33,7 @@ Signed-off-by: Maíra Canal --- a/drivers/gpu/drm/v3d/v3d_sched.c +++ b/drivers/gpu/drm/v3d/v3d_sched.c -@@ -226,8 +226,12 @@ static struct dma_fence *v3d_bin_job_run +@@ -230,8 +230,12 @@ static struct dma_fence *v3d_bin_job_run struct dma_fence *fence; unsigned long irqflags; @@ -47,7 +47,7 @@ Signed-off-by: Maíra Canal /* Lock required around bin_job update vs * v3d_overflow_mem_work(). -@@ -281,8 +285,10 @@ static struct dma_fence *v3d_render_job_ +@@ -285,8 +289,10 @@ static struct dma_fence *v3d_render_job_ struct drm_device *dev = &v3d->drm; struct dma_fence *fence; @@ -59,7 +59,7 @@ Signed-off-by: Maíra Canal v3d->render_job = job; -@@ -327,8 +333,10 @@ v3d_tfu_job_run(struct drm_sched_job *sc +@@ -331,8 +337,10 @@ v3d_tfu_job_run(struct drm_sched_job *sc struct drm_device *dev = &v3d->drm; struct dma_fence *fence; @@ -71,7 +71,7 @@ Signed-off-by: Maíra Canal v3d->tfu_job = job; -@@ -373,8 +381,10 @@ v3d_csd_job_run(struct drm_sched_job *sc +@@ -377,8 +385,10 @@ v3d_csd_job_run(struct drm_sched_job *sc struct dma_fence *fence; int i, csd_cfg0_reg; diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0860-drm-v3d-Associate-a-V3D-tech-revision-to-all-support.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0860-drm-v3d-Associate-a-V3D-tech-revision-to-all-support.patch index d4ddf5a608..4ab4ac72ab 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0860-drm-v3d-Associate-a-V3D-tech-revision-to-all-support.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0860-drm-v3d-Associate-a-V3D-tech-revision-to-all-support.patch @@ -444,7 +444,7 @@ Signed-off-by: Maíra Canal } --- a/drivers/gpu/drm/v3d/v3d_sched.c +++ b/drivers/gpu/drm/v3d/v3d_sched.c -@@ -357,11 +357,11 @@ v3d_tfu_job_run(struct drm_sched_job *sc +@@ -361,11 +361,11 @@ v3d_tfu_job_run(struct drm_sched_job *sc V3D_WRITE(V3D_TFU_ICA(v3d->ver), job->args.ica); V3D_WRITE(V3D_TFU_IUA(v3d->ver), job->args.iua); V3D_WRITE(V3D_TFU_IOA(v3d->ver), job->args.ioa); @@ -458,7 +458,7 @@ Signed-off-by: Maíra Canal V3D_WRITE(V3D_TFU_COEF1(v3d->ver), job->args.coef[1]); V3D_WRITE(V3D_TFU_COEF2(v3d->ver), job->args.coef[2]); V3D_WRITE(V3D_TFU_COEF3(v3d->ver), job->args.coef[3]); -@@ -412,7 +412,7 @@ v3d_csd_job_run(struct drm_sched_job *sc +@@ -416,7 +416,7 @@ v3d_csd_job_run(struct drm_sched_job *sc * * XXX: Set the CFG7 register */ diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0949-PCI-quirks-work-around-VL805-firmware-ASPM-meddling.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0949-PCI-quirks-work-around-VL805-firmware-ASPM-meddling.patch index 2388aeb69e..e0c0cc105f 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0949-PCI-quirks-work-around-VL805-firmware-ASPM-meddling.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0949-PCI-quirks-work-around-VL805-firmware-ASPM-meddling.patch @@ -18,7 +18,7 @@ Signed-off-by: Jonathan Bell --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c -@@ -6232,6 +6232,22 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I +@@ -6255,6 +6255,22 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x56b1, aspm_l1_acceptable_latency); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x56c0, aspm_l1_acceptable_latency); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x56c1, aspm_l1_acceptable_latency); diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0959-media-imx335-Support-vertical-flip.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0959-media-imx335-Support-vertical-flip.patch index 8d5815ecd5..e1f0b61f72 100644 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0959-media-imx335-Support-vertical-flip.patch +++ b/lede/target/linux/bcm27xx/patches-6.12/950-0959-media-imx335-Support-vertical-flip.patch @@ -153,7 +153,7 @@ Reviewed-by: Kieran Bingham case V4L2_CID_TEST_PATTERN: ret = imx335_update_test_pattern(imx335, ctrl->val); -@@ -1175,7 +1235,7 @@ static int imx335_init_controls(struct i +@@ -1176,7 +1236,7 @@ static int imx335_init_controls(struct i return ret; /* v4l2_fwnode_device_properties can add two more controls */ @@ -162,7 +162,7 @@ Reviewed-by: Kieran Bingham if (ret) return ret; -@@ -1210,6 +1270,13 @@ static int imx335_init_controls(struct i +@@ -1211,6 +1271,13 @@ static int imx335_init_controls(struct i v4l2_ctrl_cluster(2, &imx335->exp_ctrl); diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-0961-media-imx335-Use-correct-register-width-for-HNUM.patch b/lede/target/linux/bcm27xx/patches-6.12/950-0961-media-imx335-Use-correct-register-width-for-HNUM.patch deleted file mode 100644 index 6c432e524c..0000000000 --- a/lede/target/linux/bcm27xx/patches-6.12/950-0961-media-imx335-Use-correct-register-width-for-HNUM.patch +++ /dev/null @@ -1,24 +0,0 @@ -From a8e38e0532fd0b25fcaebf771ddd14f4e04283fa Mon Sep 17 00:00:00 2001 -From: Umang Jain -Date: Thu, 8 Aug 2024 22:11:04 +0530 -Subject: [PATCH] media: imx335: Use correct register width for HNUM - -CCI_REG_HNUM should be using CCI_REG16_LE() instead of CCI_REG8() -as HNUM spans from 0x302e[0:7] to 0x302f[0:3]. - -Signed-off-by: Umang Jain ---- - drivers/media/i2c/imx335.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/drivers/media/i2c/imx335.c -+++ b/drivers/media/i2c/imx335.c -@@ -31,7 +31,7 @@ - #define IMX335_REG_CPWAIT_TIME CCI_REG8(0x300d) - #define IMX335_REG_WINMODE CCI_REG8(0x3018) - #define IMX335_REG_HTRIMMING_START CCI_REG16_LE(0x302c) --#define IMX335_REG_HNUM CCI_REG8(0x302e) -+#define IMX335_REG_HNUM CCI_REG16_LE(0x302e) - - /* Lines per frame */ - #define IMX335_REG_VMAX CCI_REG24_LE(0x3030) diff --git a/lede/target/linux/bcm27xx/patches-6.12/950-1003-drivers-media-i2c-imx335-Fix-frame-size-enumeration.patch b/lede/target/linux/bcm27xx/patches-6.12/950-1003-drivers-media-i2c-imx335-Fix-frame-size-enumeration.patch deleted file mode 100644 index 89701b06c8..0000000000 --- a/lede/target/linux/bcm27xx/patches-6.12/950-1003-drivers-media-i2c-imx335-Fix-frame-size-enumeration.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 3dd2c2c507c271d411fab2e82a2b3b7e0b6d3f16 Mon Sep 17 00:00:00 2001 -From: Kieran Bingham -Date: Mon, 28 Apr 2025 17:07:20 +0100 -Subject: [PATCH] drivers: media: i2c: imx335: Fix frame size enumeration - -In commit cfa49ff0558a ("media: i2c: imx335: Support 2592x1940 10-bit -mode") the IMX335 driver was extended to support multiple output modes. - -This incorrectly extended the frame size enumeration to check against -the supported mbus_codes array instead of the supported mode/frame -array. This has the unwanted side effect of reporting the currently -supported frame size 2592x1944 three times. - -Fix the check accordingly to report a frame size for each supported -size, which is presently only a single entry. - -Fixes: cfa49ff0558a ("media: i2c: imx335: Support 2592x1940 10-bit mode") -Signed-off-by: Kieran Bingham ---- - drivers/media/i2c/imx335.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - ---- a/drivers/media/i2c/imx335.c -+++ b/drivers/media/i2c/imx335.c -@@ -720,7 +720,8 @@ static int imx335_enum_frame_size(struct - struct imx335 *imx335 = to_imx335(sd); - u32 code; - -- if (fsize->index > ARRAY_SIZE(imx335_mbus_codes)) -+ /* Only a single supported_mode available. */ -+ if (fsize->index > 0) - return -EINVAL; - - code = imx335_get_format_code(imx335, fsize->code); diff --git a/lede/target/linux/generic/backport-6.12/413-01-v6.14-mtd-rawnand-qcom-cleanup-qcom_nandc-driver.patch b/lede/target/linux/generic/backport-6.12/413-01-v6.14-mtd-rawnand-qcom-cleanup-qcom_nandc-driver.patch index 8c5457a507..95b66071ad 100644 --- a/lede/target/linux/generic/backport-6.12/413-01-v6.14-mtd-rawnand-qcom-cleanup-qcom_nandc-driver.patch +++ b/lede/target/linux/generic/backport-6.12/413-01-v6.14-mtd-rawnand-qcom-cleanup-qcom_nandc-driver.patch @@ -902,7 +902,7 @@ Signed-off-by: Miquel Raynal + write_reg_dma(nandc, &nandc->regs->cmd1, NAND_DEV_CMD1, 1, NAND_BAM_NEXT_SGL); } - nandc->buf_count = len; + nandc->buf_count = 512; @@ -2926,9 +2877,10 @@ static int qcom_param_page_type_exec(str nandc->buf_count, 0); diff --git a/lede/target/linux/generic/backport-6.12/413-02-v6.14-mtd-rawnand-qcom-Add-qcom-prefix-to-common-api.patch b/lede/target/linux/generic/backport-6.12/413-02-v6.14-mtd-rawnand-qcom-Add-qcom-prefix-to-common-api.patch index 078a56cf16..f634e0442a 100644 --- a/lede/target/linux/generic/backport-6.12/413-02-v6.14-mtd-rawnand-qcom-Add-qcom-prefix-to-common-api.patch +++ b/lede/target/linux/generic/backport-6.12/413-02-v6.14-mtd-rawnand-qcom-Add-qcom-prefix-to-common-api.patch @@ -844,7 +844,7 @@ Signed-off-by: Miquel Raynal + qcom_write_reg_dma(nandc, &nandc->regs->cmd1, NAND_DEV_CMD1, 1, NAND_BAM_NEXT_SGL); } - nandc->buf_count = len; + nandc->buf_count = 512; @@ -2873,17 +2873,17 @@ static int qcom_param_page_type_exec(str config_nand_single_cw_page_read(chip, false, 0); diff --git a/lede/target/linux/generic/backport-6.6/413-01-v6.14-mtd-rawnand-qcom-cleanup-qcom_nandc-driver.patch b/lede/target/linux/generic/backport-6.6/413-01-v6.14-mtd-rawnand-qcom-cleanup-qcom_nandc-driver.patch index 8c5457a507..95b66071ad 100644 --- a/lede/target/linux/generic/backport-6.6/413-01-v6.14-mtd-rawnand-qcom-cleanup-qcom_nandc-driver.patch +++ b/lede/target/linux/generic/backport-6.6/413-01-v6.14-mtd-rawnand-qcom-cleanup-qcom_nandc-driver.patch @@ -902,7 +902,7 @@ Signed-off-by: Miquel Raynal + write_reg_dma(nandc, &nandc->regs->cmd1, NAND_DEV_CMD1, 1, NAND_BAM_NEXT_SGL); } - nandc->buf_count = len; + nandc->buf_count = 512; @@ -2926,9 +2877,10 @@ static int qcom_param_page_type_exec(str nandc->buf_count, 0); diff --git a/lede/target/linux/generic/backport-6.6/413-02-v6.14-mtd-rawnand-qcom-Add-qcom-prefix-to-common-api.patch b/lede/target/linux/generic/backport-6.6/413-02-v6.14-mtd-rawnand-qcom-Add-qcom-prefix-to-common-api.patch index 078a56cf16..f634e0442a 100644 --- a/lede/target/linux/generic/backport-6.6/413-02-v6.14-mtd-rawnand-qcom-Add-qcom-prefix-to-common-api.patch +++ b/lede/target/linux/generic/backport-6.6/413-02-v6.14-mtd-rawnand-qcom-Add-qcom-prefix-to-common-api.patch @@ -844,7 +844,7 @@ Signed-off-by: Miquel Raynal + qcom_write_reg_dma(nandc, &nandc->regs->cmd1, NAND_DEV_CMD1, 1, NAND_BAM_NEXT_SGL); } - nandc->buf_count = len; + nandc->buf_count = 512; @@ -2873,17 +2873,17 @@ static int qcom_param_page_type_exec(str config_nand_single_cw_page_read(chip, false, 0); diff --git a/lede/target/linux/generic/backport-6.6/850-v6.8-bus-mhi-host-Add-a-separate-timeout-parameter-for-wa.patch b/lede/target/linux/generic/backport-6.6/850-v6.8-bus-mhi-host-Add-a-separate-timeout-parameter-for-wa.patch index 94d9bcd93d..4aad22248a 100644 --- a/lede/target/linux/generic/backport-6.6/850-v6.8-bus-mhi-host-Add-a-separate-timeout-parameter-for-wa.patch +++ b/lede/target/linux/generic/backport-6.6/850-v6.8-bus-mhi-host-Add-a-separate-timeout-parameter-for-wa.patch @@ -109,7 +109,7 @@ Signed-off-by: Manivannan Sadhasivam if (ret) dev_err(dev, "Device failed to enter READY state\n"); } -@@ -1125,7 +1130,8 @@ int mhi_async_power_up(struct mhi_contro +@@ -1141,7 +1146,8 @@ int mhi_async_power_up(struct mhi_contro if (state == MHI_STATE_SYS_ERR) { mhi_set_mhi_state(mhi_cntrl, MHI_STATE_RESET); ret = mhi_poll_reg_field(mhi_cntrl, mhi_cntrl->regs, MHICTRL, @@ -119,7 +119,7 @@ Signed-off-by: Manivannan Sadhasivam if (ret) { dev_info(dev, "Failed to reset MHI due to syserr state\n"); goto error_exit; -@@ -1216,14 +1222,18 @@ EXPORT_SYMBOL_GPL(mhi_power_down); +@@ -1232,14 +1238,18 @@ EXPORT_SYMBOL_GPL(mhi_power_down); int mhi_sync_power_up(struct mhi_controller *mhi_cntrl) { int ret = mhi_async_power_up(mhi_cntrl); diff --git a/lede/target/linux/generic/backport-6.6/853-v6.10-bus-mhi-host-Add-mhi_power_down_keep_dev-API-to-supp.patch b/lede/target/linux/generic/backport-6.6/853-v6.10-bus-mhi-host-Add-mhi_power_down_keep_dev-API-to-supp.patch index 826b39b518..b3e702bd62 100644 --- a/lede/target/linux/generic/backport-6.6/853-v6.10-bus-mhi-host-Add-mhi_power_down_keep_dev-API-to-supp.patch +++ b/lede/target/linux/generic/backport-6.6/853-v6.10-bus-mhi-host-Add-mhi_power_down_keep_dev-API-to-supp.patch @@ -49,7 +49,7 @@ mutex_lock(&mhi_cntrl->pm_mutex); -@@ -820,7 +829,10 @@ void mhi_pm_st_worker(struct work_struct +@@ -836,7 +845,10 @@ void mhi_pm_st_worker(struct work_struct mhi_pm_sys_error_transition(mhi_cntrl); break; case DEV_ST_TRANSITION_DISABLE: @@ -61,7 +61,7 @@ break; default: break; -@@ -1174,7 +1186,8 @@ error_exit: +@@ -1190,7 +1202,8 @@ error_exit: } EXPORT_SYMBOL_GPL(mhi_async_power_up); @@ -71,7 +71,7 @@ { enum mhi_pm_state cur_state, transition_state; struct device *dev = &mhi_cntrl->mhi_dev->dev; -@@ -1210,15 +1223,32 @@ void mhi_power_down(struct mhi_controlle +@@ -1226,15 +1239,32 @@ void mhi_power_down(struct mhi_controlle write_unlock_irq(&mhi_cntrl->pm_lock); mutex_unlock(&mhi_cntrl->pm_mutex); diff --git a/lede/target/linux/generic/hack-6.12/610-net-page_pool-try-to-free-deferred-skbs-while-waitin.patch b/lede/target/linux/generic/hack-6.12/610-net-page_pool-try-to-free-deferred-skbs-while-waitin.patch index 697f2a64db..5db35ac9a5 100644 --- a/lede/target/linux/generic/hack-6.12/610-net-page_pool-try-to-free-deferred-skbs-while-waitin.patch +++ b/lede/target/linux/generic/hack-6.12/610-net-page_pool-try-to-free-deferred-skbs-while-waitin.patch @@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau --- a/net/core/page_pool.c +++ b/net/core/page_pool.c -@@ -1120,7 +1120,7 @@ static void page_pool_release_retry(stru +@@ -1124,7 +1124,7 @@ static void page_pool_release_retry(stru struct delayed_work *dwq = to_delayed_work(wq); struct page_pool *pool = container_of(dwq, typeof(*pool), release_dw); void *netdev; @@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau inflight = page_pool_release(pool); /* In rare cases, a driver bug may cause inflight to go negative. -@@ -1132,6 +1132,17 @@ static void page_pool_release_retry(stru +@@ -1136,6 +1136,17 @@ static void page_pool_release_retry(stru if (inflight <= 0) return; diff --git a/lede/target/linux/generic/hack-6.12/800-GPIO-add-named-gpio-exports.patch b/lede/target/linux/generic/hack-6.12/800-GPIO-add-named-gpio-exports.patch index 3bfc612c13..bf75cedafd 100644 --- a/lede/target/linux/generic/hack-6.12/800-GPIO-add-named-gpio-exports.patch +++ b/lede/target/linux/generic/hack-6.12/800-GPIO-add-named-gpio-exports.patch @@ -15,7 +15,7 @@ Signed-off-by: John Crispin #include "gpiolib.h" #include "gpiolib-of.h" -@@ -1189,3 +1191,73 @@ void of_gpiochip_remove(struct gpio_chip +@@ -1198,3 +1200,73 @@ void of_gpiochip_remove(struct gpio_chip { of_node_put(dev_of_node(&chip->gpiodev->dev)); } diff --git a/lede/target/linux/generic/hack-6.12/902-debloat_proc.patch b/lede/target/linux/generic/hack-6.12/902-debloat_proc.patch index a135684460..2bc77873fd 100644 --- a/lede/target/linux/generic/hack-6.12/902-debloat_proc.patch +++ b/lede/target/linux/generic/hack-6.12/902-debloat_proc.patch @@ -396,7 +396,7 @@ Signed-off-by: Felix Fietkau } --- a/net/ipv4/route.c +++ b/net/ipv4/route.c -@@ -378,6 +378,9 @@ static struct pernet_operations ip_rt_pr +@@ -382,6 +382,9 @@ static struct pernet_operations ip_rt_pr static int __init ip_rt_proc_init(void) { diff --git a/lede/target/linux/generic/hack-6.6/902-debloat_proc.patch b/lede/target/linux/generic/hack-6.6/902-debloat_proc.patch index 2c3eca2552..8b864260b1 100644 --- a/lede/target/linux/generic/hack-6.6/902-debloat_proc.patch +++ b/lede/target/linux/generic/hack-6.6/902-debloat_proc.patch @@ -396,7 +396,7 @@ Signed-off-by: Felix Fietkau } --- a/net/ipv4/route.c +++ b/net/ipv4/route.c -@@ -381,6 +381,9 @@ static struct pernet_operations ip_rt_pr +@@ -385,6 +385,9 @@ static struct pernet_operations ip_rt_pr static int __init ip_rt_proc_init(void) { diff --git a/lede/target/linux/generic/pending-6.12/532-jffs2_eofdetect.patch b/lede/target/linux/generic/pending-6.12/532-jffs2_eofdetect.patch index 744fbd0e21..88bb14a02a 100644 --- a/lede/target/linux/generic/pending-6.12/532-jffs2_eofdetect.patch +++ b/lede/target/linux/generic/pending-6.12/532-jffs2_eofdetect.patch @@ -45,7 +45,7 @@ Signed-off-by: Felix Fietkau if (ret < 0) goto out; -@@ -567,6 +573,17 @@ full_scan: +@@ -569,6 +575,17 @@ full_scan: return err; } diff --git a/lede/target/linux/generic/pending-6.6/532-jffs2_eofdetect.patch b/lede/target/linux/generic/pending-6.6/532-jffs2_eofdetect.patch index 744fbd0e21..88bb14a02a 100644 --- a/lede/target/linux/generic/pending-6.6/532-jffs2_eofdetect.patch +++ b/lede/target/linux/generic/pending-6.6/532-jffs2_eofdetect.patch @@ -45,7 +45,7 @@ Signed-off-by: Felix Fietkau if (ret < 0) goto out; -@@ -567,6 +573,17 @@ full_scan: +@@ -569,6 +575,17 @@ full_scan: return err; } diff --git a/lede/target/linux/mvebu/patches-6.12/0003-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch b/lede/target/linux/mvebu/patches-6.12/0003-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch index 2483dedfae..2d7b6b5176 100644 --- a/lede/target/linux/mvebu/patches-6.12/0003-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch +++ b/lede/target/linux/mvebu/patches-6.12/0003-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch @@ -18,7 +18,7 @@ Signed-off-by: Linus Walleij --- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c +++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -@@ -432,9 +432,7 @@ static int armada_37xx_gpio_direction_ou +@@ -433,9 +433,7 @@ static int armada_37xx_gpio_direction_ou reg = OUTPUT_EN; armada_37xx_update_reg(®, &en_offset); diff --git a/lede/target/linux/mvebu/patches-6.12/0004-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch b/lede/target/linux/mvebu/patches-6.12/0004-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch deleted file mode 100644 index 4fe9f1b7b8..0000000000 --- a/lede/target/linux/mvebu/patches-6.12/0004-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 57273ff8bb16f3842c2597b5bbcd49e7fa12edf7 Mon Sep 17 00:00:00 2001 -From: Gabor Juhos -Date: Wed, 14 May 2025 21:18:35 +0200 -Subject: [PATCH 4/7] pinctrl: armada-37xx: propagate error from - armada_37xx_gpio_get() - -The regmap_read() function can fail, so propagate its error up to -the stack instead of silently ignoring that. - -Signed-off-by: Imre Kaloz -Reviewed-by: Andrew Lunn -Signed-off-by: Gabor Juhos -Link: https://lore.kernel.org/20250514-pinctrl-a37xx-fixes-v2-4-07e9ac1ab737@gmail.com -Signed-off-by: Linus Walleij ---- - drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - ---- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -@@ -440,11 +440,14 @@ static int armada_37xx_gpio_get(struct g - struct armada_37xx_pinctrl *info = gpiochip_get_data(chip); - unsigned int reg = INPUT_VAL; - unsigned int val, mask; -+ int ret; - - armada_37xx_update_reg(®, &offset); - mask = BIT(offset); - -- regmap_read(info->regmap, reg, &val); -+ ret = regmap_read(info->regmap, reg, &val); -+ if (ret) -+ return ret; - - return (val & mask) != 0; - } diff --git a/lede/target/linux/mvebu/patches-6.12/0005-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch b/lede/target/linux/mvebu/patches-6.12/0005-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch deleted file mode 100644 index 2395a0665f..0000000000 --- a/lede/target/linux/mvebu/patches-6.12/0005-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch +++ /dev/null @@ -1,42 +0,0 @@ -From bfa0ff804ffa8b1246ade8be08de98c9eb19d16f Mon Sep 17 00:00:00 2001 -From: Gabor Juhos -Date: Wed, 14 May 2025 21:18:36 +0200 -Subject: [PATCH 5/7] pinctrl: armada-37xx: propagate error from - armada_37xx_pmx_gpio_set_direction() - -The armada_37xx_gpio_direction_{in,out}put() functions can fail, so -propagate their error values back to the stack instead of silently -ignoring those. - -Signed-off-by: Imre Kaloz -Reviewed-by: Andrew Lunn -Signed-off-by: Gabor Juhos -Link: https://lore.kernel.org/20250514-pinctrl-a37xx-fixes-v2-5-07e9ac1ab737@gmail.com -Signed-off-by: Linus Walleij ---- - drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - ---- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -@@ -472,16 +472,17 @@ static int armada_37xx_pmx_gpio_set_dire - { - struct armada_37xx_pinctrl *info = pinctrl_dev_get_drvdata(pctldev); - struct gpio_chip *chip = range->gc; -+ int ret; - - dev_dbg(info->dev, "gpio_direction for pin %u as %s-%d to %s\n", - offset, range->name, offset, input ? "input" : "output"); - - if (input) -- armada_37xx_gpio_direction_input(chip, offset); -+ ret = armada_37xx_gpio_direction_input(chip, offset); - else -- armada_37xx_gpio_direction_output(chip, offset, 0); -+ ret = armada_37xx_gpio_direction_output(chip, offset, 0); - -- return 0; -+ return ret; - } - - static int armada_37xx_gpio_request_enable(struct pinctrl_dev *pctldev, diff --git a/lede/target/linux/mvebu/patches-6.12/0006-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch b/lede/target/linux/mvebu/patches-6.12/0006-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch deleted file mode 100644 index 9aac2e58e1..0000000000 --- a/lede/target/linux/mvebu/patches-6.12/0006-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 6481c0a83367b0672951ccc876fbae7ee37b594b Mon Sep 17 00:00:00 2001 -From: Gabor Juhos -Date: Wed, 14 May 2025 21:18:37 +0200 -Subject: [PATCH 6/7] pinctrl: armada-37xx: propagate error from - armada_37xx_gpio_get_direction() - -The regmap_read() function can fail, so propagate its error up to -the stack instead of silently ignoring that. - -Signed-off-by: Imre Kaloz -Reviewed-by: Andrew Lunn -Signed-off-by: Gabor Juhos -Link: https://lore.kernel.org/20250514-pinctrl-a37xx-fixes-v2-6-07e9ac1ab737@gmail.com -Signed-off-by: Linus Walleij ---- - drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - ---- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -@@ -402,10 +402,13 @@ static int armada_37xx_gpio_get_directio - struct armada_37xx_pinctrl *info = gpiochip_get_data(chip); - unsigned int reg = OUTPUT_EN; - unsigned int val, mask; -+ int ret; - - armada_37xx_update_reg(®, &offset); - mask = BIT(offset); -- regmap_read(info->regmap, reg, &val); -+ ret = regmap_read(info->regmap, reg, &val); -+ if (ret) -+ return ret; - - if (val & mask) - return GPIO_LINE_DIRECTION_OUT; diff --git a/lede/target/linux/mvebu/patches-6.12/0007-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch b/lede/target/linux/mvebu/patches-6.12/0007-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch deleted file mode 100644 index 6c14e50b4a..0000000000 --- a/lede/target/linux/mvebu/patches-6.12/0007-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 4229c28323db141eda69cb99427be75d3edba071 Mon Sep 17 00:00:00 2001 -From: Gabor Juhos -Date: Wed, 14 May 2025 21:18:38 +0200 -Subject: [PATCH 7/7] pinctrl: armada-37xx: propagate error from - armada_37xx_pmx_set_by_name() - -The regmap_update_bits() function can fail, so propagate its error -up to the stack instead of silently ignoring that. - -Signed-off-by: Imre Kaloz -Reviewed-by: Andrew Lunn -Signed-off-by: Gabor Juhos -Link: https://lore.kernel.org/20250514-pinctrl-a37xx-fixes-v2-7-07e9ac1ab737@gmail.com -Signed-off-by: Linus Walleij ---- - drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - ---- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -@@ -358,9 +358,7 @@ static int armada_37xx_pmx_set_by_name(s - - val = grp->val[func]; - -- regmap_update_bits(info->regmap, reg, mask, val); -- -- return 0; -+ return regmap_update_bits(info->regmap, reg, mask, val); - } - - static int armada_37xx_pmx_set(struct pinctrl_dev *pctldev, diff --git a/lede/target/linux/mvebu/patches-6.6/0003-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch b/lede/target/linux/mvebu/patches-6.6/0003-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch index 2483dedfae..2d7b6b5176 100644 --- a/lede/target/linux/mvebu/patches-6.6/0003-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch +++ b/lede/target/linux/mvebu/patches-6.6/0003-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch @@ -18,7 +18,7 @@ Signed-off-by: Linus Walleij --- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c +++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -@@ -432,9 +432,7 @@ static int armada_37xx_gpio_direction_ou +@@ -433,9 +433,7 @@ static int armada_37xx_gpio_direction_ou reg = OUTPUT_EN; armada_37xx_update_reg(®, &en_offset); diff --git a/lede/target/linux/mvebu/patches-6.6/0004-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch b/lede/target/linux/mvebu/patches-6.6/0004-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch deleted file mode 100644 index 4fe9f1b7b8..0000000000 --- a/lede/target/linux/mvebu/patches-6.6/0004-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 57273ff8bb16f3842c2597b5bbcd49e7fa12edf7 Mon Sep 17 00:00:00 2001 -From: Gabor Juhos -Date: Wed, 14 May 2025 21:18:35 +0200 -Subject: [PATCH 4/7] pinctrl: armada-37xx: propagate error from - armada_37xx_gpio_get() - -The regmap_read() function can fail, so propagate its error up to -the stack instead of silently ignoring that. - -Signed-off-by: Imre Kaloz -Reviewed-by: Andrew Lunn -Signed-off-by: Gabor Juhos -Link: https://lore.kernel.org/20250514-pinctrl-a37xx-fixes-v2-4-07e9ac1ab737@gmail.com -Signed-off-by: Linus Walleij ---- - drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - ---- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -@@ -440,11 +440,14 @@ static int armada_37xx_gpio_get(struct g - struct armada_37xx_pinctrl *info = gpiochip_get_data(chip); - unsigned int reg = INPUT_VAL; - unsigned int val, mask; -+ int ret; - - armada_37xx_update_reg(®, &offset); - mask = BIT(offset); - -- regmap_read(info->regmap, reg, &val); -+ ret = regmap_read(info->regmap, reg, &val); -+ if (ret) -+ return ret; - - return (val & mask) != 0; - } diff --git a/lede/target/linux/mvebu/patches-6.6/0005-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch b/lede/target/linux/mvebu/patches-6.6/0005-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch deleted file mode 100644 index 2395a0665f..0000000000 --- a/lede/target/linux/mvebu/patches-6.6/0005-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch +++ /dev/null @@ -1,42 +0,0 @@ -From bfa0ff804ffa8b1246ade8be08de98c9eb19d16f Mon Sep 17 00:00:00 2001 -From: Gabor Juhos -Date: Wed, 14 May 2025 21:18:36 +0200 -Subject: [PATCH 5/7] pinctrl: armada-37xx: propagate error from - armada_37xx_pmx_gpio_set_direction() - -The armada_37xx_gpio_direction_{in,out}put() functions can fail, so -propagate their error values back to the stack instead of silently -ignoring those. - -Signed-off-by: Imre Kaloz -Reviewed-by: Andrew Lunn -Signed-off-by: Gabor Juhos -Link: https://lore.kernel.org/20250514-pinctrl-a37xx-fixes-v2-5-07e9ac1ab737@gmail.com -Signed-off-by: Linus Walleij ---- - drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - ---- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -@@ -472,16 +472,17 @@ static int armada_37xx_pmx_gpio_set_dire - { - struct armada_37xx_pinctrl *info = pinctrl_dev_get_drvdata(pctldev); - struct gpio_chip *chip = range->gc; -+ int ret; - - dev_dbg(info->dev, "gpio_direction for pin %u as %s-%d to %s\n", - offset, range->name, offset, input ? "input" : "output"); - - if (input) -- armada_37xx_gpio_direction_input(chip, offset); -+ ret = armada_37xx_gpio_direction_input(chip, offset); - else -- armada_37xx_gpio_direction_output(chip, offset, 0); -+ ret = armada_37xx_gpio_direction_output(chip, offset, 0); - -- return 0; -+ return ret; - } - - static int armada_37xx_gpio_request_enable(struct pinctrl_dev *pctldev, diff --git a/lede/target/linux/mvebu/patches-6.6/0006-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch b/lede/target/linux/mvebu/patches-6.6/0006-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch deleted file mode 100644 index 9aac2e58e1..0000000000 --- a/lede/target/linux/mvebu/patches-6.6/0006-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 6481c0a83367b0672951ccc876fbae7ee37b594b Mon Sep 17 00:00:00 2001 -From: Gabor Juhos -Date: Wed, 14 May 2025 21:18:37 +0200 -Subject: [PATCH 6/7] pinctrl: armada-37xx: propagate error from - armada_37xx_gpio_get_direction() - -The regmap_read() function can fail, so propagate its error up to -the stack instead of silently ignoring that. - -Signed-off-by: Imre Kaloz -Reviewed-by: Andrew Lunn -Signed-off-by: Gabor Juhos -Link: https://lore.kernel.org/20250514-pinctrl-a37xx-fixes-v2-6-07e9ac1ab737@gmail.com -Signed-off-by: Linus Walleij ---- - drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - ---- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -@@ -402,10 +402,13 @@ static int armada_37xx_gpio_get_directio - struct armada_37xx_pinctrl *info = gpiochip_get_data(chip); - unsigned int reg = OUTPUT_EN; - unsigned int val, mask; -+ int ret; - - armada_37xx_update_reg(®, &offset); - mask = BIT(offset); -- regmap_read(info->regmap, reg, &val); -+ ret = regmap_read(info->regmap, reg, &val); -+ if (ret) -+ return ret; - - if (val & mask) - return GPIO_LINE_DIRECTION_OUT; diff --git a/lede/target/linux/mvebu/patches-6.6/0007-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch b/lede/target/linux/mvebu/patches-6.6/0007-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch deleted file mode 100644 index 6c14e50b4a..0000000000 --- a/lede/target/linux/mvebu/patches-6.6/0007-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 4229c28323db141eda69cb99427be75d3edba071 Mon Sep 17 00:00:00 2001 -From: Gabor Juhos -Date: Wed, 14 May 2025 21:18:38 +0200 -Subject: [PATCH 7/7] pinctrl: armada-37xx: propagate error from - armada_37xx_pmx_set_by_name() - -The regmap_update_bits() function can fail, so propagate its error -up to the stack instead of silently ignoring that. - -Signed-off-by: Imre Kaloz -Reviewed-by: Andrew Lunn -Signed-off-by: Gabor Juhos -Link: https://lore.kernel.org/20250514-pinctrl-a37xx-fixes-v2-7-07e9ac1ab737@gmail.com -Signed-off-by: Linus Walleij ---- - drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - ---- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c -@@ -358,9 +358,7 @@ static int armada_37xx_pmx_set_by_name(s - - val = grp->val[func]; - -- regmap_update_bits(info->regmap, reg, mask, val); -- -- return 0; -+ return regmap_update_bits(info->regmap, reg, mask, val); - } - - static int armada_37xx_pmx_set(struct pinctrl_dev *pctldev, diff --git a/nekobox-android/app/src/main/res/menu/add_route_menu.xml b/nekobox-android/app/src/main/res/menu/add_route_menu.xml index 3564567b3b..a0cf60d0f0 100644 --- a/nekobox-android/app/src/main/res/menu/add_route_menu.xml +++ b/nekobox-android/app/src/main/res/menu/add_route_menu.xml @@ -15,10 +15,4 @@ android:title="@string/route_manage_assets" app:showAsAction="never" /> - - - \ No newline at end of file diff --git a/openwrt-packages/filebrowser/Makefile b/openwrt-packages/filebrowser/Makefile index 0b67f0bf0c..5852ca56bc 100644 --- a/openwrt-packages/filebrowser/Makefile +++ b/openwrt-packages/filebrowser/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=filebrowser -PKG_VERSION:=2.34.2 +PKG_VERSION:=2.35.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/filebrowser/filebrowser/tar.gz/v${PKG_VERSION}? -PKG_HASH:=be0a5157ab0619b3c89be3afac88fd8a0214d1c6bc843a66c12453c814ce395c +PKG_HASH:=40065b8bf51efc0b347e688955f11db2c65089948aa4a91dae57f7e39e633f15 PKG_LICENSE:=Apache-2.0 PKG_LICENSE_FILES:=LICENSE diff --git a/openwrt-packages/luci-app-amlogic/Makefile b/openwrt-packages/luci-app-amlogic/Makefile index b41686985e..9b5d4abcd6 100644 --- a/openwrt-packages/luci-app-amlogic/Makefile +++ b/openwrt-packages/luci-app-amlogic/Makefile @@ -16,7 +16,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-amlogic -PKG_VERSION:=3.1.254 +PKG_VERSION:=3.1.255 PKG_RELEASE:=1 PKG_LICENSE:=GPL-2.0 License diff --git a/openwrt-packages/luci-app-amlogic/root/usr/sbin/openwrt-kernel b/openwrt-packages/luci-app-amlogic/root/usr/sbin/openwrt-kernel index 50ece1fecd..620a7d4f5a 100755 --- a/openwrt-packages/luci-app-amlogic/root/usr/sbin/openwrt-kernel +++ b/openwrt-packages/luci-app-amlogic/root/usr/sbin/openwrt-kernel @@ -76,6 +76,7 @@ init_var() { if [[ -s "${release_file}" ]]; then source "${release_file}" PLATFORM="${PLATFORM}" + MODEL_ID="${MODEL_ID}" UBOOT_OVERLOAD="${UBOOT_OVERLOAD}" MAINLINE_UBOOT="${MAINLINE_UBOOT}" ANDROID_UBOOT="${ANDROID_UBOOT}" @@ -100,15 +101,15 @@ init_var() { # Find the disk where the partition is located, only supports mmcblk?p? sd?? hd?? vd?? and other formats case "${ROOT_PTNAME}" in - mmcblk?p[1-4]) + mmcblk?p[1-9]) EMMC_NAME="$(echo ${ROOT_PTNAME} | awk '{print substr($1, 1, length($1)-2)}')" PARTITION_NAME="p" ;; - [hsv]d[a-z][1-4]) + [hsv]d[a-z][1-9]) EMMC_NAME="$(echo ${ROOT_PTNAME} | awk '{print substr($1, 1, length($1)-1)}')" PARTITION_NAME="" ;; - nvme?n?p[1-4]) + nvme?n?p[1-9]) EMMC_NAME="$(echo ${ROOT_PTNAME} | awk '{print substr($1, 1, length($1)-2)}')" PARTITION_NAME="p" ;; @@ -286,6 +287,11 @@ update_kernel() { ln -sf uInitrd-${kernel_name} uInitrd ln -sf vmlinuz-${kernel_name} ${MYBOOT_VMLINUZ} fi + + # wxy-oect: MODEL_ID numbers r304 and r306, require special handling of uInitrd + [[ "${MODEL_ID}" == "r304" || "${MODEL_ID}" == "r306" ]] && { + rm -f uInitrd && ln -sf initrd.img-${kernel_name} uInitrd + } ) echo -e "(1/3) Unpacking [ boot-${kernel_name}.tar.gz ] done." diff --git a/openwrt-packages/quickstart/Makefile b/openwrt-packages/quickstart/Makefile index 40cc1f71fa..0ce9471858 100644 --- a/openwrt-packages/quickstart/Makefile +++ b/openwrt-packages/quickstart/Makefile @@ -10,11 +10,11 @@ include $(TOPDIR)/rules.mk PKG_ARCH_quickstart:=$(ARCH) PKG_NAME:=quickstart -PKG_VERSION:=0.10.3 -PKG_RELEASE:=2 +PKG_VERSION:=0.10.4 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/linkease/istore-packages/releases/download/prebuilt/ -PKG_HASH:=b6fd09b8f71a0c56758c9819102268fdf464fe70ca0d6e7f83c5e75e024dee94 +PKG_HASH:=1582e0f4d0560f92ce4bcf1db0770bcad49a43d01a557ea1c72c1053c1be8549 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_VERSION) diff --git a/shadowsocks-rust/crates/shadowsocks/src/net/udp.rs b/shadowsocks-rust/crates/shadowsocks/src/net/udp.rs index a6423a0fca..7a7c83a53e 100644 --- a/shadowsocks-rust/crates/shadowsocks/src/net/udp.rs +++ b/shadowsocks-rust/crates/shadowsocks/src/net/udp.rs @@ -35,11 +35,11 @@ use futures::ready; use tokio::io::Interest; use tokio::{io::ReadBuf, net::ToSocketAddrs}; -use crate::{ServerAddr, context::Context, relay::socks5::Address}; +use crate::{context::Context, relay::socks5::Address, ServerAddr}; use super::{ - AcceptOpts, AddrFamily, ConnectOpts, sys::{bind_outbound_udp_socket, create_inbound_udp_socket, create_outbound_udp_socket}, + AcceptOpts, AddrFamily, ConnectOpts, }; /// Message struct for `batch_send` @@ -414,3 +414,17 @@ impl std::os::fd::AsFd for UdpSocket { self.socket.as_fd() } } + +#[cfg(windows)] +impl std::os::windows::io::AsRawSocket for UdpSocket { + fn as_raw_socket(&self) -> std::os::windows::io::RawSocket { + self.socket.as_raw_socket() + } +} + +#[cfg(windows)] +impl std::os::windows::io::AsSocket for UdpSocket { + fn as_socket(&self) -> std::os::windows::io::BorrowedSocket<'_> { + self.socket.as_socket() + } +} diff --git a/sing-box/dns/transport/https.go b/sing-box/dns/transport/https.go index 59a39ac478..f02fd3302d 100644 --- a/sing-box/dns/transport/https.go +++ b/sing-box/dns/transport/https.go @@ -3,11 +3,15 @@ package transport import ( "bytes" "context" + "errors" "io" "net" "net/http" "net/url" + "os" "strconv" + "sync" + "time" "github.com/sagernet/sing-box/adapter" "github.com/sagernet/sing-box/common/dialer" @@ -39,11 +43,13 @@ func RegisterHTTPS(registry *dns.TransportRegistry) { type HTTPSTransport struct { dns.TransportAdapter - logger logger.ContextLogger - dialer N.Dialer - destination *url.URL - headers http.Header - transport *http.Transport + logger logger.ContextLogger + dialer N.Dialer + destination *url.URL + headers http.Header + transportAccess sync.Mutex + transport *http.Transport + transportResetAt time.Time } func NewHTTPS(ctx context.Context, logger log.ContextLogger, tag string, options option.RemoteHTTPSDNSServerOptions) (adapter.DNSTransport, error) { @@ -122,7 +128,6 @@ func NewHTTPSRaw( var transport *http.Transport if tlsConfig != nil { transport = &http.Transport{ - IdleConnTimeout: C.TCPKeepAliveInitial, ForceAttemptHTTP2: true, DialTLSContext: func(ctx context.Context, network, addr string) (net.Conn, error) { tcpConn, hErr := dialer.DialContext(ctx, network, serverAddr) @@ -139,7 +144,6 @@ func NewHTTPSRaw( } } else { transport = &http.Transport{ - IdleConnTimeout: C.TCPKeepAliveInitial, DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) { return dialer.DialContext(ctx, network, serverAddr) }, @@ -163,12 +167,33 @@ func (t *HTTPSTransport) Start(stage adapter.StartStage) error { } func (t *HTTPSTransport) Close() error { + t.transportAccess.Lock() + defer t.transportAccess.Unlock() t.transport.CloseIdleConnections() t.transport = t.transport.Clone() return nil } func (t *HTTPSTransport) Exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.Msg, error) { + startAt := time.Now() + response, err := t.exchange(ctx, message) + if err != nil { + if errors.Is(err, os.ErrDeadlineExceeded) { + t.transportAccess.Lock() + defer t.transportAccess.Unlock() + if t.transportResetAt.After(startAt) { + return nil, err + } + t.transport.CloseIdleConnections() + t.transport = t.transport.Clone() + t.transportResetAt = time.Now() + } + return nil, err + } + return response, nil +} + +func (t *HTTPSTransport) exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.Msg, error) { exMessage := *message exMessage.Id = 0 exMessage.Compress = true diff --git a/sing-box/docs/changelog.md b/sing-box/docs/changelog.md index 29a45c251d..67a1a77c1e 100644 --- a/sing-box/docs/changelog.md +++ b/sing-box/docs/changelog.md @@ -2,7 +2,7 @@ icon: material/alert-decagram --- -#### 1.12.0-beta.29 +#### 1.12.0-beta.30 * Fixes and improvements diff --git a/sing-box/go.mod b/sing-box/go.mod index 85bf86bad1..015ca30af6 100644 --- a/sing-box/go.mod +++ b/sing-box/go.mod @@ -34,7 +34,7 @@ require ( github.com/sagernet/sing-shadowsocks v0.2.8 github.com/sagernet/sing-shadowsocks2 v0.2.1 github.com/sagernet/sing-shadowtls v0.2.1-0.20250503051639-fcd445d33c11 - github.com/sagernet/sing-tun v0.6.10-0.20250620051458-5e343c4b66b2 + github.com/sagernet/sing-tun v0.6.10-0.20250630100036-8763c24e4935 github.com/sagernet/sing-vmess v0.2.4-0.20250605032146-38cc72672c88 github.com/sagernet/smux v1.5.34-mod.2 github.com/sagernet/tailscale v1.80.3-mod.5 diff --git a/sing-box/go.sum b/sing-box/go.sum index 5a22a10da1..7955d62475 100644 --- a/sing-box/go.sum +++ b/sing-box/go.sum @@ -180,8 +180,8 @@ github.com/sagernet/sing-shadowsocks2 v0.2.1 h1:dWV9OXCeFPuYGHb6IRqlSptVnSzOelnq github.com/sagernet/sing-shadowsocks2 v0.2.1/go.mod h1:RnXS0lExcDAovvDeniJ4IKa2IuChrdipolPYWBv9hWQ= github.com/sagernet/sing-shadowtls v0.2.1-0.20250503051639-fcd445d33c11 h1:tK+75l64tm9WvEFrYRE1t0YxoFdWQqw/h7Uhzj0vJ+w= github.com/sagernet/sing-shadowtls v0.2.1-0.20250503051639-fcd445d33c11/go.mod h1:sWqKnGlMipCHaGsw1sTTlimyUpgzP4WP3pjhCsYt9oA= -github.com/sagernet/sing-tun v0.6.10-0.20250620051458-5e343c4b66b2 h1:ykbqGFHDNVvp0jhgLime/XBAtQpcOcFpT8Rs5Hcc5n4= -github.com/sagernet/sing-tun v0.6.10-0.20250620051458-5e343c4b66b2/go.mod h1:fisFCbC4Vfb6HqQNcwPJi2CDK2bf0Xapyz3j3t4cnHE= +github.com/sagernet/sing-tun v0.6.10-0.20250630100036-8763c24e4935 h1:wha4BG4mrEKaIoouVyiU5BcPfKD1n0LkiL4vqdjaVps= +github.com/sagernet/sing-tun v0.6.10-0.20250630100036-8763c24e4935/go.mod h1:fisFCbC4Vfb6HqQNcwPJi2CDK2bf0Xapyz3j3t4cnHE= github.com/sagernet/sing-vmess v0.2.4-0.20250605032146-38cc72672c88 h1:0pVm8sPOel+BoiCddW3pV3cKDKEaSioVTYDdTSKjyFI= github.com/sagernet/sing-vmess v0.2.4-0.20250605032146-38cc72672c88/go.mod h1:IL8Rr+EGwuqijszZkNrEFTQDKhilEpkqFqOlvdpS6/w= github.com/sagernet/smux v1.5.34-mod.2 h1:gkmBjIjlJ2zQKpLigOkFur5kBKdV6bNRoFu2WkltRQ4= diff --git a/small/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js b/small/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js index 698b37f96f..37ff4ac869 100644 --- a/small/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js +++ b/small/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js @@ -55,7 +55,7 @@ return view.extend({ }; o.onchange = function (event, section_id, value) { return L.resolveDefault(fs.read_direct(value), '').then(function (content) { - m.lookupOption('nikki.editor._file_content')[0].getUIElement('editor').setValue(content); + m.lookupOption('_file_content', section_id)[0].getUIElement(section_id).setValue(content); }); }; @@ -63,11 +63,11 @@ return view.extend({ o.rows = 25; o.wrap = false; o.write = function (section_id, formvalue) { - const path = m.lookupOption('nikki.editor._file')[0].formvalue('editor'); + const path = m.lookupOption('_file', section_id)[0].formvalue(section_id); return fs.write(path, formvalue); }; o.remove = function (section_id) { - const path = m.lookupOption('nikki.editor._file')[0].formvalue('editor'); + const path = m.lookupOption('_file', section_id)[0].formvalue(section_id); return fs.write(path); }; diff --git a/small/mosdns/Makefile b/small/mosdns/Makefile index 9a17b2dcd4..9908ace727 100644 --- a/small/mosdns/Makefile +++ b/small/mosdns/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mosdns PKG_VERSION:=5.3.3 -PKG_RELEASE:=4 +PKG_RELEASE:=5 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/IrineSistiana/mosdns/tar.gz/v$(PKG_VERSION)? diff --git a/small/mosdns/patches/100-mosdns-update-dependencies.patch b/small/mosdns/patches/100-mosdns-update-dependencies.patch index 52be9b7bd9..461414ab14 100644 --- a/small/mosdns/patches/100-mosdns-update-dependencies.patch +++ b/small/mosdns/patches/100-mosdns-update-dependencies.patch @@ -1,44 +1,58 @@ -From 771f9a0ecca80a12f167e56e68d2afd354857e64 Mon Sep 17 00:00:00 2001 +From 80e62e6c1188fe5ae1d3834e8861f6a96339c446 Mon Sep 17 00:00:00 2001 From: sbwml -Date: Sat, 8 Mar 2025 21:01:39 +0800 +Date: Mon, 30 Jun 2025 15:02:28 +0800 Subject: [PATCH] mosdns: update dependencies Signed-off-by: sbwml --- - go.mod | 69 +++++++++++++------------ - go.sum | 158 ++++++++++++++++++++++++++------------------------------- - 2 files changed, 107 insertions(+), 120 deletions(-) + coremain/run.go | 2 +- + go.mod | 80 ++++++++++----------- + go.sum | 186 +++++++++++++++++++++++------------------------- + 3 files changed, 129 insertions(+), 139 deletions(-) +--- a/coremain/run.go ++++ b/coremain/run.go +@@ -23,7 +23,7 @@ import ( + "fmt" + "github.com/IrineSistiana/mosdns/v5/mlog" + "github.com/kardianos/service" +- "github.com/mitchellh/mapstructure" ++ "github.com/go-viper/mapstructure/v2" + "github.com/spf13/cobra" + "github.com/spf13/viper" + "go.uber.org/zap" --- a/go.mod +++ b/go.mod -@@ -1,30 +1,30 @@ +@@ -1,30 +1,31 @@ module github.com/IrineSistiana/mosdns/v5 -go 1.22 -+go 1.23.0 ++go 1.24 require ( github.com/IrineSistiana/go-bytes-pool v0.0.0-20230918115058-c72bd9761c57 - github.com/go-chi/chi/v5 v5.1.0 - github.com/google/nftables v0.2.0 -+ github.com/go-chi/chi/v5 v5.2.1 ++ github.com/go-chi/chi/v5 v5.2.2 ++ github.com/go-viper/mapstructure/v2 v2.3.0 + github.com/google/nftables v0.3.0 github.com/kardianos/service v1.2.2 - github.com/klauspost/compress v1.17.9 - github.com/miekg/dns v1.1.62 + github.com/klauspost/compress v1.18.0 -+ github.com/miekg/dns v1.1.63 ++ github.com/miekg/dns v1.1.66 github.com/mitchellh/mapstructure v1.5.0 github.com/nadoo/ipset v0.5.0 - github.com/prometheus/client_golang v1.19.1 - github.com/quic-go/quic-go v0.46.0 - github.com/spf13/cobra v1.8.1 -+ github.com/prometheus/client_golang v1.21.1 -+ github.com/quic-go/quic-go v0.50.0 -+ github.com/spf13/cobra v1.9.1 - github.com/spf13/viper v1.19.0 +- github.com/spf13/viper v1.19.0 - github.com/stretchr/testify v1.9.0 - github.com/vishvananda/netlink v1.2.1-beta.2.0.20221107222636-d3c0a2caa559 ++ github.com/prometheus/client_golang v1.22.0 ++ github.com/quic-go/quic-go v0.52.0 ++ github.com/spf13/cobra v1.9.1 ++ github.com/spf13/viper v1.20.1 + github.com/stretchr/testify v1.10.0 + github.com/vishvananda/netlink v1.3.0 go.uber.org/zap v1.27.0 @@ -49,81 +63,86 @@ Signed-off-by: sbwml - golang.org/x/sys v0.24.0 - golang.org/x/time v0.6.0 - google.golang.org/protobuf v1.34.2 -+ golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 -+ golang.org/x/net v0.37.0 -+ golang.org/x/sync v0.12.0 -+ golang.org/x/sys v0.31.0 -+ golang.org/x/time v0.11.0 -+ google.golang.org/protobuf v1.36.5 ++ golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b ++ golang.org/x/net v0.41.0 ++ golang.org/x/sync v0.15.0 ++ golang.org/x/sys v0.33.0 ++ golang.org/x/time v0.12.0 ++ google.golang.org/protobuf v1.36.6 ) replace github.com/nadoo/ipset v0.5.0 => github.com/IrineSistiana/ipset v0.5.1-0.20220703061533-6e0fc3b04c0a -@@ -33,38 +33,37 @@ require ( +@@ -33,38 +34,33 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect -+ github.com/fsnotify/fsnotify v1.8.0 // indirect - github.com/go-task/slim-sprig/v3 v3.0.0 // indirect +- github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/google/go-cmp v0.6.0 // indirect - github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect +- github.com/hashicorp/hcl v1.0.0 // indirect ++ github.com/fsnotify/fsnotify v1.9.0 // indirect ++ github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect + github.com/google/go-cmp v0.7.0 // indirect -+ github.com/google/pprof v0.0.0-20250302191652-9094ed2288e7 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect ++ github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/josharian/native v1.1.0 // indirect - github.com/magiconair/properties v1.8.7 // indirect - github.com/mdlayher/netlink v1.7.2 // indirect -+ github.com/magiconair/properties v1.8.9 // indirect + github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42 // indirect github.com/mdlayher/socket v0.5.1 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/onsi/ginkgo/v2 v2.20.0 // indirect - github.com/pelletier/go-toml/v2 v2.2.2 // indirect -+ github.com/onsi/ginkgo/v2 v2.23.0 // indirect -+ github.com/pelletier/go-toml/v2 v2.2.3 // indirect ++ github.com/onsi/ginkgo/v2 v2.9.5 // indirect ++ github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_model v0.6.1 // indirect +- github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.55.0 // indirect -+ github.com/prometheus/common v0.62.0 // indirect - github.com/prometheus/procfs v0.15.1 // indirect +- github.com/prometheus/procfs v0.15.1 // indirect - github.com/quic-go/qpack v0.4.0 // indirect - github.com/sagikazarmark/locafero v0.6.0 // indirect +- github.com/sagikazarmark/slog-shim v0.1.0 // indirect ++ github.com/prometheus/client_model v0.6.2 // indirect ++ github.com/prometheus/common v0.65.0 // indirect ++ github.com/prometheus/procfs v0.16.1 // indirect + github.com/quic-go/qpack v0.5.1 // indirect -+ github.com/sagikazarmark/locafero v0.7.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 // indirect ++ github.com/sagikazarmark/locafero v0.9.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.11.0 // indirect - github.com/spf13/cast v1.7.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect -+ github.com/spf13/afero v1.12.0 // indirect -+ github.com/spf13/cast v1.7.1 // indirect ++ github.com/spf13/afero v1.14.0 // indirect ++ github.com/spf13/cast v1.9.2 // indirect + github.com/spf13/pflag v1.0.6 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/vishvananda/netns v0.0.4 // indirect - go.uber.org/mock v0.4.0 // indirect -+ go.uber.org/mock v0.5.0 // indirect ++ go.uber.org/mock v0.5.2 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.26.0 // indirect - golang.org/x/mod v0.20.0 // indirect - golang.org/x/text v0.17.0 // indirect - golang.org/x/tools v0.24.0 // indirect -+ golang.org/x/crypto v0.36.0 // indirect -+ golang.org/x/mod v0.24.0 // indirect -+ golang.org/x/text v0.23.0 // indirect -+ golang.org/x/tools v0.31.0 // indirect - gopkg.in/ini.v1 v1.67.0 // indirect +- gopkg.in/ini.v1 v1.67.0 // indirect ++ golang.org/x/crypto v0.39.0 // indirect ++ golang.org/x/mod v0.25.0 // indirect ++ golang.org/x/text v0.26.0 // indirect ++ golang.org/x/tools v0.34.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) --- a/go.sum +++ b/go.sum -@@ -6,148 +6,136 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKn +@@ -6,148 +6,142 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKn github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= --github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= ++github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= ++github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= ++github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= + github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -133,29 +152,37 @@ Signed-off-by: sbwml -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw= -github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -+github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= -+github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= -+github.com/go-chi/chi/v5 v5.2.1 h1:KOIHODQj58PmL80G2Eak4WdvUzjSJSm0vG72crDCqb8= -+github.com/go-chi/chi/v5 v5.2.1/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= - github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= - github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= --github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= - github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= - github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= ++github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= ++github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= ++github.com/go-chi/chi/v5 v5.2.2 h1:CMwsvRVTbXVytCk1Wd72Zy1LAsAh9GxMmSNWLHCG618= ++github.com/go-chi/chi/v5 v5.2.2/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= ++github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= ++github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= + github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/nftables v0.2.0 h1:PbJwaBmbVLzpeldoeUKGkE2RjstrjPKMl6oLrfEJ6/8= -github.com/google/nftables v0.2.0/go.mod h1:Beg6V6zZ3oEn0JuiUQ4wqwuyqqzasOltcoXPtgLbFp4= -github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= -github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= +-github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +-github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= ++github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= ++github.com/go-viper/mapstructure/v2 v2.3.0 h1:27XbWsHIqhbdR5TIC911OfYvgSaW93HM+dX7970Q7jk= ++github.com/go-viper/mapstructure/v2 v2.3.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= ++github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= ++github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/nftables v0.3.0 h1:bkyZ0cbpVeMHXOrtlFc8ISmfVqq5gPJukoYieyVmITg= +github.com/google/nftables v0.3.0/go.mod h1:BCp9FsrbF1Fn/Yu6CLUc9GGZFw/+hsxfluNXXmxBfRM= -+github.com/google/pprof v0.0.0-20250302191652-9094ed2288e7 h1:+J3r2e8+RsmN3vKfo75g0YSY61ms37qzPglu4p0sGro= -+github.com/google/pprof v0.0.0-20250302191652-9094ed2288e7/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= - github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= - github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= ++github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= ++github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= ++github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA= @@ -176,16 +203,14 @@ Signed-off-by: sbwml -github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -+github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM= -+github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42 h1:A1Cq6Ysb0GM0tpKMbdCXCIfBclan4oHk1Jb+Hrejirg= +github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42/go.mod h1:BB4YCPDOzfy7FniQ/lxuYQ3dgmM2cZumHbK8RpTjN2o= github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos= github.com/mdlayher/socket v0.5.1/go.mod h1:TjPLHI1UgwEv5J1B5q0zTZq12A/6H7nKmtTanQE37IQ= -github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= -github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ= -+github.com/miekg/dns v1.1.63 h1:8M5aAw6OMZfFXTT7K5V0Eu5YiiL8l7nUAkyN6C9YwaY= -+github.com/miekg/dns v1.1.63/go.mod h1:6NGHfjhpmr5lt3XPLuyfDJi5AXbNIPM9PY6H6sF1Nfs= ++github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE= ++github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= @@ -196,44 +221,48 @@ Signed-off-by: sbwml -github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= -github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= --github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -+github.com/onsi/ginkgo/v2 v2.23.0 h1:FA1xjp8ieYDzlgS5ABTpdUDB7wtngggONc8a7ku2NqQ= -+github.com/onsi/ginkgo/v2 v2.23.0/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM= -+github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= -+github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= -+github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= -+github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= ++github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= ++github.com/onsi/ginkgo/v2 v2.9.5/go.mod h1:tvAoo1QUJwNEU2ITftXTpR7R1RbCzoZUOs3RonqW57k= ++github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= ++github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= ++github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= ++github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= + github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= -github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= -+github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= -+github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= - github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= - github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +-github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +-github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= -github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= -+github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= -+github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= - github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= - github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +-github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +-github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= -github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= -github.com/quic-go/quic-go v0.46.0 h1:uuwLClEEyk1DNvchH8uCByQVjo3yKL9opKulExNDs7Y= -github.com/quic-go/quic-go v0.46.0/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= ++github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= ++github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= ++github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= ++github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= ++github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE= ++github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= ++github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= ++github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= +github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= +github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -+github.com/quic-go/quic-go v0.50.0 h1:3H/ld1pa3CYhkcc20TPIyG1bNsdhn9qZBGN3b9/UyUo= -+github.com/quic-go/quic-go v0.50.0/go.mod h1:Vim6OmUvlYdwBhXP9ZVrtGmCMWa3wEqhq3NgYrI8b4E= ++github.com/quic-go/quic-go v0.52.0 h1:/SlHrCRElyaU6MaEPKqKr9z83sBg2v4FLLvWM+Z47pA= ++github.com/quic-go/quic-go v0.52.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3N51bwOk= -github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0= -+github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo= -+github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k= - github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= - github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +-github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +-github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= ++github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k= ++github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= -github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= @@ -244,17 +273,19 @@ Signed-off-by: sbwml -github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -+github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs= -+github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4= -+github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= -+github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +-github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +-github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= ++github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= ++github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= ++github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE= ++github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= - github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= - github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= --github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= ++github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4= ++github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= + github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= @@ -263,6 +294,7 @@ Signed-off-by: sbwml -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= ++github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= @@ -278,8 +310,8 @@ Signed-off-by: sbwml go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= -go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= -+go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= -+go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= ++go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= ++go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= @@ -297,16 +329,17 @@ Signed-off-by: sbwml -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -+golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -+golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= -+golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= -+golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= -+golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= -+golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= -+golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -+golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= -+golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -+golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= ++golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= ++golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= ++golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o= ++golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8= ++golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= ++golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= ++golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= ++golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= ++golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= ++golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= ++golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20220804214406-8e32c043e418/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= @@ -321,21 +354,21 @@ Signed-off-by: sbwml -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -+golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -+golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -+golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -+golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= -+golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= -+golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= -+golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= -+golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= -+google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -+google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= ++golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= ++golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= ++golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= ++golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= ++golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= ++golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= ++golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo= ++golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg= ++google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= ++google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= - gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= - gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= --gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +-gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +-gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= + gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/small/v2dat/Makefile b/small/v2dat/Makefile index 460b2ac324..ae79d69db5 100644 --- a/small/v2dat/Makefile +++ b/small/v2dat/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=v2dat PKG_SOURCE_DATE:=2022-12-15 PKG_SOURCE_VERSION:=47b8ee51fb528e11e1a83453b7e767a18d20d1f7 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_DATE).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/urlesistiana/v2dat/tar.gz/$(PKG_SOURCE_VERSION)? diff --git a/small/v2dat/patches/101-v2dat-update-dependencies.patch b/small/v2dat/patches/101-v2dat-update-dependencies.patch index a719824b82..f6c940e779 100644 --- a/small/v2dat/patches/101-v2dat-update-dependencies.patch +++ b/small/v2dat/patches/101-v2dat-update-dependencies.patch @@ -1,6 +1,6 @@ -From d5d61b6027b2fe4c75887d33d8a5f98a3ec0795f Mon Sep 17 00:00:00 2001 +From d5f31a032bae130c83bb50b8679776cf1b33f05d Mon Sep 17 00:00:00 2001 From: sbwml -Date: Sat, 8 Mar 2025 20:26:40 +0800 +Date: Mon, 30 Jun 2025 15:08:51 +0800 Subject: [PATCH] v2dat: update dependencies Signed-off-by: sbwml @@ -15,7 +15,7 @@ Signed-off-by: sbwml module github.com/urlesistiana/v2dat -go 1.19 -+go 1.21 ++go 1.22 require ( - github.com/spf13/cobra v1.6.1 @@ -23,7 +23,7 @@ Signed-off-by: sbwml - google.golang.org/protobuf v1.28.1 + github.com/spf13/cobra v1.9.1 + go.uber.org/zap v1.27.0 -+ google.golang.org/protobuf v1.36.5 ++ google.golang.org/protobuf v1.36.6 ) require ( @@ -88,8 +88,8 @@ Signed-off-by: sbwml +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -+google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -+google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= ++google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= ++google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/small/v2ray-core/Makefile b/small/v2ray-core/Makefile index 26c065e3d0..6c081bbfc2 100644 --- a/small/v2ray-core/Makefile +++ b/small/v2ray-core/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=v2ray-core -PKG_VERSION:=5.34.0 +PKG_VERSION:=5.35.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/v2fly/v2ray-core/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=6cf41da0cd786efbc33abf4aa979f934802e33dfe48b5bdfde13e792d4926a08 +PKG_HASH:=caf1e4a8bbed61748ae21c88bf6d158a9921513b8fa69fc0d7265ef371e1205e PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE diff --git a/small/v2ray-geodata/Makefile b/small/v2ray-geodata/Makefile index ffa1b547e0..e565869a55 100644 --- a/small/v2ray-geodata/Makefile +++ b/small/v2ray-geodata/Makefile @@ -30,7 +30,7 @@ define Download/geosite HASH:=01dae2a9c31b5c74ba7e54d8d51e0060688ed22da493eaf09f6eeeec89db395e endef -GEOSITE_IRAN_VER:=202506230044 +GEOSITE_IRAN_VER:=202506300044 GEOSITE_IRAN_FILE:=iran.dat.$(GEOSITE_IRAN_VER) define Download/geosite-ir URL:=https://github.com/bootmortis/iran-hosted-domains/releases/download/$(GEOSITE_IRAN_VER)/ diff --git a/v2ray-core/app/dns/nameserver_quic.go b/v2ray-core/app/dns/nameserver_quic.go index 7275cb8a20..cc9de031cd 100644 --- a/v2ray-core/app/dns/nameserver_quic.go +++ b/v2ray-core/app/dns/nameserver_quic.go @@ -36,7 +36,7 @@ type QUICNameServer struct { cleanup *task.Periodic name string destination net.Destination - connection quic.Connection + connection *quic.Conn } // NewQUICNameServer creates DNS-over-QUIC client object for local resolving @@ -331,7 +331,7 @@ func (s *QUICNameServer) QueryIP(ctx context.Context, domain string, clientIP ne } } -func isActive(s quic.Connection) bool { +func isActive(s *quic.Conn) bool { select { case <-s.Context().Done(): return false @@ -340,8 +340,8 @@ func isActive(s quic.Connection) bool { } } -func (s *QUICNameServer) getConnection(ctx context.Context) (quic.Connection, error) { - var conn quic.Connection +func (s *QUICNameServer) getConnection(ctx context.Context) (*quic.Conn, error) { + var conn *quic.Conn s.RLock() conn = s.connection if conn != nil && isActive(conn) { @@ -374,7 +374,7 @@ func (s *QUICNameServer) getConnection(ctx context.Context) (quic.Connection, er return conn, nil } -func (s *QUICNameServer) openConnection(ctx context.Context) (quic.Connection, error) { +func (s *QUICNameServer) openConnection(ctx context.Context) (*quic.Conn, error) { tlsConfig := tls.Config{ ServerName: func() string { switch s.destination.Address.Family() { @@ -399,7 +399,7 @@ func (s *QUICNameServer) openConnection(ctx context.Context) (quic.Connection, e return conn, nil } -func (s *QUICNameServer) openStream(ctx context.Context) (quic.Stream, error) { +func (s *QUICNameServer) openStream(ctx context.Context) (*quic.Stream, error) { conn, err := s.getConnection(ctx) if err != nil { return nil, err diff --git a/v2ray-core/core.go b/v2ray-core/core.go index 1d074dd909..2224e0b632 100644 --- a/v2ray-core/core.go +++ b/v2ray-core/core.go @@ -18,7 +18,7 @@ import ( ) var ( - version = "5.34.0" + version = "5.35.0" build = "Custom" codename = "V2Fly, a community-driven edition of V2Ray." intro = "A unified platform for anti-censorship." diff --git a/v2ray-core/go.mod b/v2ray-core/go.mod index 72b394f9f2..2c827d470d 100644 --- a/v2ray-core/go.mod +++ b/v2ray-core/go.mod @@ -24,7 +24,7 @@ require ( github.com/pion/dtls/v2 v2.2.12 github.com/pion/transport/v2 v2.2.10 github.com/pires/go-proxyproto v0.8.1 - github.com/quic-go/quic-go v0.52.0 + github.com/quic-go/quic-go v0.53.0 github.com/refraction-networking/utls v1.7.3 github.com/seiflotfy/cuckoofilter v0.0.0-20220411075957-e3b120b3f5fb github.com/stretchr/testify v1.10.0 diff --git a/v2ray-core/go.sum b/v2ray-core/go.sum index b4a0af8557..afb9d85b86 100644 --- a/v2ray-core/go.sum +++ b/v2ray-core/go.sum @@ -442,8 +442,8 @@ github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.52.0 h1:/SlHrCRElyaU6MaEPKqKr9z83sBg2v4FLLvWM+Z47pA= -github.com/quic-go/quic-go v0.52.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ= +github.com/quic-go/quic-go v0.53.0 h1:QHX46sISpG2S03dPeZBgVIZp8dGagIaiu2FiVYvpCZI= +github.com/quic-go/quic-go v0.53.0/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/refraction-networking/utls v1.7.3 h1:L0WRhHY7Oq1T0zkdzVZMR6zWZv+sXbHB9zcuvsAEqCo= github.com/refraction-networking/utls v1.7.3/go.mod h1:TUhh27RHMGtQvjQq+RyO11P6ZNQNBb3N0v7wsEjKAIQ= diff --git a/v2ray-core/proxy/http/server.go b/v2ray-core/proxy/http/server.go index d698f3faf9..288d7dd72a 100644 --- a/v2ray-core/proxy/http/server.go +++ b/v2ray-core/proxy/http/server.go @@ -2,6 +2,7 @@ package http import ( "bufio" + "bytes" "context" "encoding/base64" "io" @@ -275,7 +276,7 @@ func (s *Server) handlePlainHTTP(ctx context.Context, request *http.Request, wri responseDone := func() error { responseReader := bufio.NewReaderSize(&buf.BufferedReader{Reader: link.Reader}, buf.Size) - response, err := http.ReadResponse(responseReader, request) + response, err := readResponseAndHandle100Continue(responseReader, request, writer) if err == nil { http_proto.RemoveHopByHopHeaders(response.Header) if response.ContentLength >= 0 { @@ -319,6 +320,38 @@ func (s *Server) handlePlainHTTP(ctx context.Context, request *http.Request, wri return result } +// Sometimes, server might send 1xx response to client +// it should not be processed by http proxy handler, just forward it to client +func readResponseAndHandle100Continue(r *bufio.Reader, req *http.Request, writer io.Writer) (*http.Response, error) { + // have a little look of response + peekBytes, err := r.Peek(56) + if err == nil || err == bufio.ErrBufferFull { + str := string(peekBytes) + ResponseLine := strings.Split(str, "\r\n")[0] + _, status, _ := strings.Cut(ResponseLine, " ") + // only handle 1xx response + if strings.HasPrefix(status, "1") { + ResponseHeader1xx := []byte{} + // read until \r\n\r\n (end of http response header) + for { + data, err := r.ReadSlice('\n') + if err != nil { + return nil, newError("failed to read http 1xx response").Base(err).AtError() + } + ResponseHeader1xx = append(ResponseHeader1xx, data...) + if bytes.Equal(ResponseHeader1xx[len(ResponseHeader1xx)-4:], []byte{'\r', '\n', '\r', '\n'}) { + break + } + if len(ResponseHeader1xx) > 1024 { + return nil, newError("too big http 1xx response").AtError() + } + } + writer.Write(ResponseHeader1xx) + } + } + return http.ReadResponse(r, req) +} + func init() { common.Must(common.RegisterConfig((*ServerConfig)(nil), func(ctx context.Context, config interface{}) (interface{}, error) { return NewServer(ctx, config.(*ServerConfig)) diff --git a/v2ray-core/proxy/socks/config.pb.go b/v2ray-core/proxy/socks/config.pb.go index 38b16a54ab..b974165dfe 100644 --- a/v2ray-core/proxy/socks/config.pb.go +++ b/v2ray-core/proxy/socks/config.pb.go @@ -1,3 +1,9 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.6 +// protoc v6.31.1 +// source: proxy/socks/config.proto + package socks import ( @@ -180,6 +186,7 @@ type ServerConfig struct { Timeout uint32 `protobuf:"varint,5,opt,name=timeout,proto3" json:"timeout,omitempty"` UserLevel uint32 `protobuf:"varint,6,opt,name=user_level,json=userLevel,proto3" json:"user_level,omitempty"` PacketEncoding packetaddr.PacketAddrType `protobuf:"varint,7,opt,name=packet_encoding,json=packetEncoding,proto3,enum=v2ray.core.net.packetaddr.PacketAddrType" json:"packet_encoding,omitempty"` + DeferLastReply bool `protobuf:"varint,8,opt,name=defer_last_reply,json=deferLastReply,proto3" json:"defer_last_reply,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -264,6 +271,13 @@ func (x *ServerConfig) GetPacketEncoding() packetaddr.PacketAddrType { return packetaddr.PacketAddrType(0) } +func (x *ServerConfig) GetDeferLastReply() bool { + if x != nil { + return x.DeferLastReply + } + return false +} + // ClientConfig is the protobuf config for Socks client. type ClientConfig struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -328,74 +342,40 @@ func (x *ClientConfig) GetDelayAuthWrite() bool { var File_proxy_socks_config_proto protoreflect.FileDescriptor -var file_proxy_socks_config_proto_rawDesc = string([]byte{ - 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2f, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x76, 0x32, 0x72, 0x61, - 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x6f, 0x63, - 0x6b, 0x73, 0x1a, 0x18, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x2f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x22, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x61, - 0x64, 0x64, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x21, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x41, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0xc9, 0x03, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3d, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x76, 0x32, 0x72, - 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x6f, - 0x63, 0x6b, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x61, 0x75, - 0x74, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4e, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x6f, 0x63, 0x6b, - 0x73, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2e, - 0x49, 0x50, 0x4f, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x64, 0x70, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x64, 0x70, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x12, 0x52, 0x0a, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x76, 0x32, 0x72, - 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x64, 0x64, - 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x45, 0x6e, 0x63, - 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x1a, 0x3b, 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xb7, 0x01, 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, - 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x6f, 0x63, 0x6b, - 0x73, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x75, 0x74, 0x68, - 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x65, - 0x6c, 0x61, 0x79, 0x41, 0x75, 0x74, 0x68, 0x57, 0x72, 0x69, 0x74, 0x65, 0x2a, 0x25, 0x0a, 0x08, - 0x41, 0x75, 0x74, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x4f, 0x5f, 0x41, - 0x55, 0x54, 0x48, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, - 0x44, 0x10, 0x01, 0x2a, 0x2e, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0a, - 0x0a, 0x06, 0x53, 0x4f, 0x43, 0x4b, 0x53, 0x35, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x4f, - 0x43, 0x4b, 0x53, 0x34, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x4f, 0x43, 0x4b, 0x53, 0x34, - 0x41, 0x10, 0x02, 0x42, 0x63, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x6f, 0x63, 0x6b, - 0x73, 0x50, 0x01, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x76, 0x32, 0x66, 0x6c, 0x79, 0x2f, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, - 0x2f, 0x76, 0x35, 0x2f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2f, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0xaa, - 0x02, 0x16, 0x56, 0x32, 0x52, 0x61, 0x79, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, - 0x78, 0x79, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_proxy_socks_config_proto_rawDesc = "" + + "\n" + + "\x18proxy/socks/config.proto\x12\x16v2ray.core.proxy.socks\x1a\x18common/net/address.proto\x1a\"common/net/packetaddr/config.proto\x1a!common/protocol/server_spec.proto\"A\n" + + "\aAccount\x12\x1a\n" + + "\busername\x18\x01 \x01(\tR\busername\x12\x1a\n" + + "\bpassword\x18\x02 \x01(\tR\bpassword\"\xf3\x03\n" + + "\fServerConfig\x12=\n" + + "\tauth_type\x18\x01 \x01(\x0e2 .v2ray.core.proxy.socks.AuthTypeR\bauthType\x12N\n" + + "\baccounts\x18\x02 \x03(\v22.v2ray.core.proxy.socks.ServerConfig.AccountsEntryR\baccounts\x12;\n" + + "\aaddress\x18\x03 \x01(\v2!.v2ray.core.common.net.IPOrDomainR\aaddress\x12\x1f\n" + + "\vudp_enabled\x18\x04 \x01(\bR\n" + + "udpEnabled\x12\x1c\n" + + "\atimeout\x18\x05 \x01(\rB\x02\x18\x01R\atimeout\x12\x1d\n" + + "\n" + + "user_level\x18\x06 \x01(\rR\tuserLevel\x12R\n" + + "\x0fpacket_encoding\x18\a \x01(\x0e2).v2ray.core.net.packetaddr.PacketAddrTypeR\x0epacketEncoding\x12(\n" + + "\x10defer_last_reply\x18\b \x01(\bR\x0edeferLastReply\x1a;\n" + + "\rAccountsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xb7\x01\n" + + "\fClientConfig\x12B\n" + + "\x06server\x18\x01 \x03(\v2*.v2ray.core.common.protocol.ServerEndpointR\x06server\x129\n" + + "\aversion\x18\x02 \x01(\x0e2\x1f.v2ray.core.proxy.socks.VersionR\aversion\x12(\n" + + "\x10delay_auth_write\x18\x03 \x01(\bR\x0edelayAuthWrite*%\n" + + "\bAuthType\x12\v\n" + + "\aNO_AUTH\x10\x00\x12\f\n" + + "\bPASSWORD\x10\x01*.\n" + + "\aVersion\x12\n" + + "\n" + + "\x06SOCKS5\x10\x00\x12\n" + + "\n" + + "\x06SOCKS4\x10\x01\x12\v\n" + + "\aSOCKS4A\x10\x02Bc\n" + + "\x1acom.v2ray.core.proxy.socksP\x01Z*github.com/v2fly/v2ray-core/v5/proxy/socks\xaa\x02\x16V2Ray.Core.Proxy.Socksb\x06proto3" var ( file_proxy_socks_config_proto_rawDescOnce sync.Once diff --git a/v2ray-core/proxy/socks/config.proto b/v2ray-core/proxy/socks/config.proto index 157b296415..2c1cf1628f 100644 --- a/v2ray-core/proxy/socks/config.proto +++ b/v2ray-core/proxy/socks/config.proto @@ -41,6 +41,7 @@ message ServerConfig { uint32 user_level = 6; v2ray.core.net.packetaddr.PacketAddrType packet_encoding = 7; + bool defer_last_reply = 8; } // ClientConfig is the protobuf config for Socks client. diff --git a/v2ray-core/proxy/socks/protocol.go b/v2ray-core/proxy/socks/protocol.go index bb955b890d..93f47946d1 100644 --- a/v2ray-core/proxy/socks/protocol.go +++ b/v2ray-core/proxy/socks/protocol.go @@ -30,6 +30,7 @@ const ( authNoMatchingMethod = 0xFF statusSuccess = 0x00 + statusConnRefused = 0x05 statusCmdNotSupport = 0x07 ) @@ -40,10 +41,11 @@ var addrParser = protocol.NewAddressParser( ) type ServerSession struct { - config *ServerConfig - address net.Address - port net.Port - clientAddress net.Address + config *ServerConfig + address net.Address + port net.Port + clientAddress net.Address + flushLastReply func(bool) error } func (s *ServerSession) handshake4(cmd byte, reader io.Reader, writer io.Writer) (*protocol.RequestHeader, error) { @@ -85,7 +87,13 @@ func (s *ServerSession) handshake4(cmd byte, reader io.Reader, writer io.Writer) Port: port, Version: socks4Version, } - if err := writeSocks4Response(writer, socks4RequestGranted, net.AnyIP, net.Port(0)); err != nil { + if err := s.setupLastReply(func(ok bool) error { + if ok { + return writeSocks4Response(writer, socks4RequestGranted, net.AnyIP, net.Port(0)) + } else { + return writeSocks4Response(writer, socks4RequestRejected, net.AnyIP, net.Port(0)) + } + }); err != nil { return nil, err } return request, nil @@ -203,13 +211,37 @@ func (s *ServerSession) handshake5(nMethod byte, reader io.Reader, writer io.Wri responseAddress = s.address } } - if err := writeSocks5Response(writer, statusSuccess, responseAddress, responsePort); err != nil { + if err := s.setupLastReply(func(ok bool) error { + if ok { + return writeSocks5Response(writer, statusSuccess, responseAddress, responsePort) + } else { + return writeSocks5Response(writer, statusConnRefused, net.AnyIP, net.Port(0)) + } + }); err != nil { return nil, err } return request, nil } +// Sets the callback and calls or postpones it based on the boolean field +func (s *ServerSession) setupLastReply(callback func(bool) error) error { + noOpCallback := func(bool) error { + return nil + } + + // set the field even if we call it now because it will be called again + s.flushLastReply = func(ok bool) error { + s.flushLastReply = noOpCallback + return callback(ok) + } + + if s.config.GetDeferLastReply() { + return nil + } + return s.flushLastReply(true) +} + // Handshake performs a Socks4/4a/5 handshake. func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol.RequestHeader, error) { buffer := buf.StackNew() diff --git a/v2ray-core/proxy/socks/server.go b/v2ray-core/proxy/socks/server.go index f333e648d5..da41a413c9 100644 --- a/v2ray-core/proxy/socks/server.go +++ b/v2ray-core/proxy/socks/server.go @@ -19,6 +19,7 @@ import ( "github.com/v2fly/v2ray-core/v5/features" "github.com/v2fly/v2ray-core/v5/features/policy" "github.com/v2fly/v2ray-core/v5/features/routing" + "github.com/v2fly/v2ray-core/v5/transport" "github.com/v2fly/v2ray-core/v5/transport/internet" "github.com/v2fly/v2ray-core/v5/transport/internet/udp" ) @@ -129,9 +130,14 @@ func (s *Server) processTCP(ctx context.Context, conn internet.Connection, dispa }) } + dispatcher = &handshakeFinalizingDispatcher{Feature: dispatcher, delegate: dispatcher, serverSession: svrSession} return s.transport(ctx, reader, conn, dest, dispatcher) } + err = svrSession.flushLastReply(true) + if err != nil { + return err + } if request.Command == protocol.RequestCommandUDP { return s.handleUDP(conn) } @@ -139,6 +145,34 @@ func (s *Server) processTCP(ctx context.Context, conn internet.Connection, dispa return nil } +// Wrapper to send final SOCKS reply only after Dispatch() returns +type handshakeFinalizingDispatcher struct { + features.Feature // do not inherit Dispatch() in case its signature changes + delegate routing.Dispatcher + serverSession *ServerSession +} + +func (d *handshakeFinalizingDispatcher) Dispatch(ctx context.Context, dest net.Destination) (*transport.Link, error) { + link, err := d.delegate.Dispatch(ctx, dest) + if err == nil { + closeInDefer := true + defer func() { + if closeInDefer { + common.Interrupt(link.Reader) + common.Interrupt(link.Writer) + } + }() + err = d.serverSession.flushLastReply(true) + if err != nil { + return nil, err + } + closeInDefer = false + } else { + d.serverSession.flushLastReply(false) + } + return link, err +} + func (*Server) handleUDP(c io.Reader) error { // The TCP connection closes after this method returns. We need to wait until // the client closes it. diff --git a/v2ray-core/proxy/socks/simplified/config.go b/v2ray-core/proxy/socks/simplified/config.go index 6575618e6b..70195aa7ec 100644 --- a/v2ray-core/proxy/socks/simplified/config.go +++ b/v2ray-core/proxy/socks/simplified/config.go @@ -16,6 +16,7 @@ func init() { Address: simplifiedServer.Address, UdpEnabled: simplifiedServer.UdpEnabled, PacketEncoding: simplifiedServer.PacketEncoding, + DeferLastReply: simplifiedServer.DeferLastReply, } return common.CreateObject(ctx, fullServer) })) diff --git a/v2ray-core/proxy/socks/simplified/config.pb.go b/v2ray-core/proxy/socks/simplified/config.pb.go index b5be88f631..8e04ccd23a 100644 --- a/v2ray-core/proxy/socks/simplified/config.pb.go +++ b/v2ray-core/proxy/socks/simplified/config.pb.go @@ -1,3 +1,9 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.6 +// protoc v6.31.1 +// source: proxy/socks/simplified/config.proto + package simplified import ( @@ -23,6 +29,7 @@ type ServerConfig struct { Address *net.IPOrDomain `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` UdpEnabled bool `protobuf:"varint,4,opt,name=udp_enabled,json=udpEnabled,proto3" json:"udp_enabled,omitempty"` PacketEncoding packetaddr.PacketAddrType `protobuf:"varint,7,opt,name=packet_encoding,json=packetEncoding,proto3,enum=v2ray.core.net.packetaddr.PacketAddrType" json:"packet_encoding,omitempty"` + DeferLastReply bool `protobuf:"varint,8,opt,name=defer_last_reply,json=deferLastReply,proto3" json:"defer_last_reply,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -78,6 +85,13 @@ func (x *ServerConfig) GetPacketEncoding() packetaddr.PacketAddrType { return packetaddr.PacketAddrType(0) } +func (x *ServerConfig) GetDeferLastReply() bool { + if x != nil { + return x.DeferLastReply + } + return false +} + type ClientConfig struct { state protoimpl.MessageState `protogen:"open.v1"` Address *net.IPOrDomain `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` @@ -132,49 +146,21 @@ func (x *ClientConfig) GetPort() uint32 { var File_proxy_socks_simplified_config_proto protoreflect.FileDescriptor -var file_proxy_socks_simplified_config_proto_rawDesc = string([]byte{ - 0x0a, 0x23, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2f, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x73, 0x69, - 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x21, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x2e, 0x73, 0x69, - 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x1a, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x65, 0x78, 0x74, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x2f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x22, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6e, 0x65, 0x74, - 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd6, 0x01, 0x0a, 0x0c, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3b, 0x0a, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x76, 0x32, 0x72, - 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, - 0x65, 0x74, 0x2e, 0x49, 0x50, 0x4f, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x64, 0x70, 0x5f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x64, 0x70, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x52, 0x0a, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x29, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x65, - 0x74, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x2e, 0x50, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x70, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x14, 0x82, 0xb5, 0x18, - 0x10, 0x0a, 0x07, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x05, 0x73, 0x6f, 0x63, 0x6b, - 0x73, 0x22, 0x76, 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x3b, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x49, 0x50, 0x4f, 0x72, 0x44, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x3a, 0x15, 0x82, 0xb5, 0x18, 0x11, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x12, 0x05, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x42, 0x84, 0x01, 0x0a, 0x25, 0x63, 0x6f, - 0x6d, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x78, 0x79, 0x2e, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x2e, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x76, 0x32, 0x66, 0x6c, 0x79, 0x2f, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2d, 0x63, 0x6f, - 0x72, 0x65, 0x2f, 0x76, 0x35, 0x2f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2f, 0x73, 0x6f, 0x63, 0x6b, - 0x73, 0x2f, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0xaa, 0x02, 0x21, 0x56, - 0x32, 0x52, 0x61, 0x79, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x2e, - 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_proxy_socks_simplified_config_proto_rawDesc = "" + + "\n" + + "#proxy/socks/simplified/config.proto\x12!v2ray.core.proxy.socks.simplified\x1a common/protoext/extensions.proto\x1a\x18common/net/address.proto\x1a\"common/net/packetaddr/config.proto\"\x80\x02\n" + + "\fServerConfig\x12;\n" + + "\aaddress\x18\x03 \x01(\v2!.v2ray.core.common.net.IPOrDomainR\aaddress\x12\x1f\n" + + "\vudp_enabled\x18\x04 \x01(\bR\n" + + "udpEnabled\x12R\n" + + "\x0fpacket_encoding\x18\a \x01(\x0e2).v2ray.core.net.packetaddr.PacketAddrTypeR\x0epacketEncoding\x12(\n" + + "\x10defer_last_reply\x18\b \x01(\bR\x0edeferLastReply:\x14\x82\xb5\x18\x10\n" + + "\ainbound\x12\x05socks\"v\n" + + "\fClientConfig\x12;\n" + + "\aaddress\x18\x01 \x01(\v2!.v2ray.core.common.net.IPOrDomainR\aaddress\x12\x12\n" + + "\x04port\x18\x02 \x01(\rR\x04port:\x15\x82\xb5\x18\x11\n" + + "\boutbound\x12\x05socksB\x84\x01\n" + + "%com.v2ray.core.proxy.socks.simplifiedP\x01Z5github.com/v2fly/v2ray-core/v5/proxy/socks/simplified\xaa\x02!V2Ray.Core.Proxy.Socks.Simplifiedb\x06proto3" var ( file_proxy_socks_simplified_config_proto_rawDescOnce sync.Once diff --git a/v2ray-core/proxy/socks/simplified/config.proto b/v2ray-core/proxy/socks/simplified/config.proto index 9076d2166d..03e43fce8f 100644 --- a/v2ray-core/proxy/socks/simplified/config.proto +++ b/v2ray-core/proxy/socks/simplified/config.proto @@ -17,6 +17,7 @@ message ServerConfig{ v2ray.core.common.net.IPOrDomain address = 3; bool udp_enabled = 4; v2ray.core.net.packetaddr.PacketAddrType packet_encoding = 7; + bool defer_last_reply = 8; } message ClientConfig { diff --git a/v2ray-core/transport/internet/quic/conn.go b/v2ray-core/transport/internet/quic/conn.go index 492c24288f..a929ee52ce 100644 --- a/v2ray-core/transport/internet/quic/conn.go +++ b/v2ray-core/transport/internet/quic/conn.go @@ -154,7 +154,7 @@ func (c *sysConn) SyscallConn() (syscall.RawConn, error) { } type interConn struct { - stream quic.Stream + stream *quic.Stream local net.Addr remote net.Addr } diff --git a/v2ray-core/transport/internet/quic/dialer.go b/v2ray-core/transport/internet/quic/dialer.go index b52dd4a5ec..f990888c96 100644 --- a/v2ray-core/transport/internet/quic/dialer.go +++ b/v2ray-core/transport/internet/quic/dialer.go @@ -16,7 +16,7 @@ import ( type connectionContext struct { rawConn *sysConn - conn quic.Connection + conn *quic.Conn } var errConnectionClosed = newError("connection closed") @@ -46,7 +46,7 @@ type clientConnections struct { cleanup *task.Periodic } -func isActive(s quic.Connection) bool { +func isActive(s *quic.Conn) bool { select { case <-s.Context().Done(): return false diff --git a/v2ray-core/transport/internet/quic/hub.go b/v2ray-core/transport/internet/quic/hub.go index 9a89ba7db0..d8075c66f3 100644 --- a/v2ray-core/transport/internet/quic/hub.go +++ b/v2ray-core/transport/internet/quic/hub.go @@ -22,7 +22,7 @@ type Listener struct { addConn internet.ConnHandler } -func (l *Listener) acceptStreams(conn quic.Connection) { +func (l *Listener) acceptStreams(conn *quic.Conn) { for { stream, err := conn.AcceptStream(context.Background()) if err != nil { diff --git a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs index cdc2d5f51b..d81b0783fe 100644 --- a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs +++ b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs @@ -918,29 +918,21 @@ public class CoreConfigSingboxService //Previous proxy var prevNode = await AppHandler.Instance.GetProfileItemViaRemarks(subItem.PrevProfile); + string? prevOutboundTag = null; if (prevNode is not null && prevNode.ConfigType != EConfigType.Custom) { var prevOutbound = JsonUtils.Deserialize(txtOutbound); await GenOutbound(prevNode, prevOutbound); - prevOutbound.tag = $"{Global.ProxyTag}2"; + prevOutboundTag = $"prev-{Global.ProxyTag}"; + prevOutbound.tag = prevOutboundTag; singboxConfig.outbounds.Add(prevOutbound); - - outbound.detour = prevOutbound.tag; } + var nextOutbound = await GenChainOutbounds(subItem, outbound, prevOutboundTag); - //Next proxy - var nextNode = await AppHandler.Instance.GetProfileItemViaRemarks(subItem.NextProfile); - if (nextNode is not null - && nextNode.ConfigType != EConfigType.Custom) + if (nextOutbound is not null) { - var nextOutbound = JsonUtils.Deserialize(txtOutbound); - await GenOutbound(nextNode, nextOutbound); - nextOutbound.tag = Global.ProxyTag; singboxConfig.outbounds.Insert(0, nextOutbound); - - outbound.tag = $"{Global.ProxyTag}1"; - nextOutbound.detour = outbound.tag; } } catch (Exception ex) @@ -967,8 +959,8 @@ public class CoreConfigSingboxService var proxyTags = new List(); // For selector and urltest outbounds // Cache for chain proxies to avoid duplicate generation - var chainProxyCache = new Dictionary(); - var prevProxyTags = new Dictionary(); // Map from profile name to tag + var nextProxyCache = new Dictionary(); + var prevProxyTags = new Dictionary(); // Map from profile name to tag int prevIndex = 0; // Index for prev outbounds // Process each node @@ -977,112 +969,55 @@ public class CoreConfigSingboxService { index++; - // Skip unsupported config types - if (node.ConfigType is EConfigType.Custom) - { - continue; - } - // Handle proxy chain string? prevTag = null; - Outbound4Sbox? nextOutbound = null; - - if (node.Subid.IsNotEmpty()) + var currentOutbound = JsonUtils.Deserialize(txtOutbound); + var nextOutbound = nextProxyCache.GetValueOrDefault(node.Subid, null); + if (nextOutbound != null) { - // Check if chain proxy is already cached - if (chainProxyCache.TryGetValue(node.Subid, out var chainProxy)) + nextOutbound = JsonUtils.DeepCopy(nextOutbound); + } + + var subItem = await AppHandler.Instance.GetSubItem(node.Subid); + + // current proxy + await GenOutbound(node, currentOutbound); + currentOutbound.tag = $"{Global.ProxyTag}-{index}"; + proxyTags.Add(currentOutbound.tag); + + if (!node.Subid.IsNullOrEmpty()) + { + if (prevProxyTags.TryGetValue(node.Subid, out var value)) { - prevTag = chainProxy.Item1; - nextOutbound = chainProxy.Item2; + prevTag = value; // maybe null } else { - // Generate chain proxy and cache it - var subItem = await AppHandler.Instance.GetSubItem(node.Subid); - if (subItem != null) + var prevNode = await AppHandler.Instance.GetProfileItemViaRemarks(subItem.PrevProfile); + if (prevNode is not null + && prevNode.ConfigType != EConfigType.Custom) { - // Process previous proxy - if (!subItem.PrevProfile.IsNullOrEmpty()) - { - // Check if this previous proxy was already created - if (prevProxyTags.TryGetValue(subItem.PrevProfile, out var existingTag)) - { - prevTag = existingTag; - } - else - { - var prevNode = await AppHandler.Instance.GetProfileItemViaRemarks(subItem.PrevProfile); - if (prevNode != null && prevNode.ConfigType != EConfigType.Custom) - { - prevIndex++; - var prevOutbound = JsonUtils.Deserialize(txtOutbound); - await GenOutbound(prevNode, prevOutbound); - - prevTag = $"{Global.ProxyTag}-prev-{prevIndex}"; - prevOutbound.tag = prevTag; - prevProxyTags[subItem.PrevProfile] = prevTag; - - // Add to prev outbounds list (will be added at the end) - prevOutbounds.Add(prevOutbound); - } - } - } - - // Process next proxy - var nextNode = await AppHandler.Instance.GetProfileItemViaRemarks(subItem.NextProfile); - if (nextNode != null && nextNode.ConfigType != EConfigType.Custom) - { - nextOutbound = JsonUtils.Deserialize(txtOutbound); - await GenOutbound(nextNode, nextOutbound); - } - - // Cache the chain proxy - chainProxyCache[node.Subid] = (prevTag, nextOutbound); + var prevOutbound = JsonUtils.Deserialize(txtOutbound); + await GenOutbound(prevNode, prevOutbound); + prevTag = $"prev-{Global.ProxyTag}-{++prevIndex}"; + prevOutbound.tag = prevTag; + prevOutbounds.Add(prevOutbound); } + prevProxyTags[node.Subid] = prevTag; } - } - // Create main outbound - var outbound = JsonUtils.Deserialize(txtOutbound); - - await GenOutbound(node, outbound); - outbound.tag = $"{Global.ProxyTag}-{index}"; - - // Configure proxy chain relationships - if (nextOutbound != null) - { - // If there's a next proxy, it should be the final outbound in the chain - var originalTag = outbound.tag; - outbound.tag = $"mid-{Global.ProxyTag}-{index}"; - - var nextOutboundCopy = JsonUtils.DeepCopy(nextOutbound); - nextOutboundCopy.tag = originalTag; - nextOutboundCopy.detour = outbound.tag; // Use detour instead of sockopt - - if (prevTag != null) + nextOutbound = await GenChainOutbounds(subItem, currentOutbound, prevTag, nextOutbound); + if (!nextProxyCache.ContainsKey(node.Subid)) { - outbound.detour = prevTag; + nextProxyCache[node.Subid] = nextOutbound; } - - // Add to proxy tags for selector/urltest - proxyTags.Add(originalTag); - - // Add in reverse order to ensure final outbound is added first - resultOutbounds.Add(nextOutboundCopy); // Final outbound (exposed to internet) - resultOutbounds.Add(outbound); // Middle outbound } - else + + if (nextOutbound is not null) { - // If no next proxy, the main outbound is the final one - if (prevTag != null) - { - outbound.detour = prevTag; - } - - // Add to proxy tags for selector/urltest - proxyTags.Add(outbound.tag); - resultOutbounds.Add(outbound); + resultOutbounds.Add(nextOutbound); } + resultOutbounds.Add(currentOutbound); } // Add urltest outbound (auto selection based on latency) @@ -1124,6 +1059,53 @@ public class CoreConfigSingboxService return 0; } + /// + /// Generates a chained outbound configuration for the given subItem and outbound. + /// The outbound's tag must be set before calling this method. + /// Returns the next proxy's outbound configuration, which may be null if no next proxy exists. + /// + /// The subscription item containing proxy chain information. + /// The current outbound configuration. Its tag must be set before calling this method. + /// The tag of the previous outbound in the chain, if any. + /// The outbound for the next proxy in the chain, if already created. If null, will be created inside. + /// + /// The outbound configuration for the next proxy in the chain, or null if no next proxy exists. + /// + private async Task GenChainOutbounds(SubItem subItem, Outbound4Sbox outbound, string? prevOutboundTag, Outbound4Sbox? nextOutbound = null) + { + try + { + var txtOutbound = EmbedUtils.GetEmbedText(Global.SingboxSampleOutbound); + + if (!prevOutboundTag.IsNullOrEmpty()) + { + outbound.detour = prevOutboundTag; + } + + // Next proxy + var nextNode = await AppHandler.Instance.GetProfileItemViaRemarks(subItem.NextProfile); + if (nextNode is not null + && nextNode.ConfigType != EConfigType.Custom) + { + if (nextOutbound == null) + { + nextOutbound = JsonUtils.Deserialize(txtOutbound); + await GenOutbound(nextNode, nextOutbound); + } + nextOutbound.tag = outbound.tag; + + outbound.tag = $"mid-{outbound.tag}"; + nextOutbound.detour = outbound.tag; + } + return nextOutbound; + } + catch (Exception ex) + { + Logging.SaveLog(_tag, ex); + } + return null; + } + private async Task GenRouting(SingboxConfig singboxConfig) { try diff --git a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs index fc10021cc6..c181d4264f 100644 --- a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs +++ b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs @@ -1318,6 +1318,7 @@ public class CoreConfigV2rayService //Previous proxy var prevNode = await AppHandler.Instance.GetProfileItemViaRemarks(subItem.PrevProfile); + string? prevOutboundTag = null; if (prevNode is not null && prevNode.ConfigType != EConfigType.Custom && prevNode.ConfigType != EConfigType.Hysteria2 @@ -1325,32 +1326,15 @@ public class CoreConfigV2rayService { var prevOutbound = JsonUtils.Deserialize(txtOutbound); await GenOutbound(prevNode, prevOutbound); - prevOutbound.tag = $"{Global.ProxyTag}2"; + prevOutboundTag = $"prev-{Global.ProxyTag}"; + prevOutbound.tag = prevOutboundTag; v2rayConfig.outbounds.Add(prevOutbound); - - outbound.streamSettings.sockopt = new() - { - dialerProxy = prevOutbound.tag - }; } + var nextOutbound = await GenChainOutbounds(subItem, outbound, prevOutboundTag); - //Next proxy - var nextNode = await AppHandler.Instance.GetProfileItemViaRemarks(subItem.NextProfile); - if (nextNode is not null - && nextNode.ConfigType != EConfigType.Custom - && nextNode.ConfigType != EConfigType.Hysteria2 - && nextNode.ConfigType != EConfigType.TUIC) + if (nextOutbound is not null) { - var nextOutbound = JsonUtils.Deserialize(txtOutbound); - await GenOutbound(nextNode, nextOutbound); - nextOutbound.tag = Global.ProxyTag; v2rayConfig.outbounds.Insert(0, nextOutbound); - - outbound.tag = $"{Global.ProxyTag}1"; - nextOutbound.streamSettings.sockopt = new() - { - dialerProxy = outbound.tag - }; } } catch (Exception ex) @@ -1375,31 +1359,9 @@ public class CoreConfigV2rayService var resultOutbounds = new List(); var prevOutbounds = new List(); // Separate list for prev outbounds and fragment - // Handle fragment outbound - Outbounds4Ray? fragmentOutbound = null; - if (_config.CoreBasicItem.EnableFragment) - { - fragmentOutbound = new Outbounds4Ray - { - protocol = "freedom", - tag = $"fragment-{Global.ProxyTag}", - settings = new() - { - fragment = new() - { - packets = _config.Fragment4RayItem?.Packets, - length = _config.Fragment4RayItem?.Length, - interval = _config.Fragment4RayItem?.Interval - } - } - }; - // Add to prevOutbounds instead of v2rayConfig.outbounds - prevOutbounds.Add(fragmentOutbound); - } - // Cache for chain proxies to avoid duplicate generation - var chainProxyCache = new Dictionary(); - var prevProxyTags = new Dictionary(); // Map from profile name to tag + var nextProxyCache = new Dictionary(); + var prevProxyTags = new Dictionary(); // Map from profile name to tag int prevIndex = 0; // Index for prev outbounds // Process nodes @@ -1408,126 +1370,56 @@ public class CoreConfigV2rayService { index++; - // Skip unsupported config types - if (node.ConfigType is EConfigType.Custom or EConfigType.Hysteria2 or EConfigType.TUIC) - { - continue; - } - // Handle proxy chain string? prevTag = null; - Outbounds4Ray? nextOutbound = null; + var currentOutbound = JsonUtils.Deserialize(txtOutbound); + var nextOutbound = nextProxyCache.GetValueOrDefault(node.Subid, null); + if (nextOutbound != null) + { + nextOutbound = JsonUtils.DeepCopy(nextOutbound); + } + + var subItem = await AppHandler.Instance.GetSubItem(node.Subid); + + // current proxy + await GenOutbound(node, currentOutbound); + currentOutbound.tag = $"{Global.ProxyTag}-{index}"; if (!node.Subid.IsNullOrEmpty()) { - // Check if chain proxy is already cached - if (chainProxyCache.TryGetValue(node.Subid, out var chainProxy)) + if (prevProxyTags.TryGetValue(node.Subid, out var value)) { - prevTag = chainProxy.Item1; - nextOutbound = chainProxy.Item2; + prevTag = value; // maybe null } else { - // Generate chain proxy and cache it - var subItem = await AppHandler.Instance.GetSubItem(node.Subid); - if (subItem != null) + var prevNode = await AppHandler.Instance.GetProfileItemViaRemarks(subItem.PrevProfile); + if (prevNode is not null + && prevNode.ConfigType != EConfigType.Custom + && prevNode.ConfigType != EConfigType.Hysteria2 + && prevNode.ConfigType != EConfigType.TUIC) { - // Process previous proxy - if (!subItem.PrevProfile.IsNullOrEmpty()) - { - // Check if this previous proxy was already created - if (prevProxyTags.TryGetValue(subItem.PrevProfile, out var existingTag)) - { - prevTag = existingTag; - } - else - { - var prevNode = await AppHandler.Instance.GetProfileItemViaRemarks(subItem.PrevProfile); - if (prevNode != null - && prevNode.ConfigType != EConfigType.Custom - && prevNode.ConfigType != EConfigType.Hysteria2 - && prevNode.ConfigType != EConfigType.TUIC) - { - prevIndex++; - var prevOutbound = JsonUtils.Deserialize(txtOutbound); - await GenOutbound(prevNode, prevOutbound); - - prevTag = $"{Global.ProxyTag}-prev-{prevIndex}"; - prevOutbound.tag = prevTag; - prevProxyTags[subItem.PrevProfile] = prevTag; - - // Set fragment if needed - if (fragmentOutbound != null && prevOutbound.streamSettings?.security.IsNullOrEmpty() == false) - { - prevOutbound.streamSettings.sockopt = new() - { - dialerProxy = fragmentOutbound.tag - }; - } - - // Add to prev outbounds list (will be added at the end) - prevOutbounds.Add(prevOutbound); - } - } - } - - // Process next proxy - var nextNode = await AppHandler.Instance.GetProfileItemViaRemarks(subItem.NextProfile); - if (nextNode != null - && nextNode.ConfigType != EConfigType.Custom - && nextNode.ConfigType != EConfigType.Hysteria2 - && nextNode.ConfigType != EConfigType.TUIC) - { - nextOutbound = JsonUtils.Deserialize(txtOutbound); - await GenOutbound(nextNode, nextOutbound); - } - - // Cache the chain proxy - chainProxyCache[node.Subid] = (prevTag, nextOutbound); + var prevOutbound = JsonUtils.Deserialize(txtOutbound); + await GenOutbound(prevNode, prevOutbound); + prevTag = $"prev-{Global.ProxyTag}-{++prevIndex}"; + prevOutbound.tag = prevTag; + prevOutbounds.Add(prevOutbound); } + prevProxyTags[node.Subid] = prevTag; + } + + nextOutbound = await GenChainOutbounds(subItem, currentOutbound, prevTag, nextOutbound); + if (!nextProxyCache.ContainsKey(node.Subid)) + { + nextProxyCache[node.Subid] = nextOutbound; } } - // Create main outbound - var outbound = JsonUtils.Deserialize(txtOutbound); - - await GenOutbound(node, outbound); - outbound.tag = $"{Global.ProxyTag}-{index}"; - - // Configure proxy chain relationships - if (nextOutbound != null) + if (nextOutbound is not null) { - // If there's a next proxy, it should be the final outbound in the chain - var originalTag = outbound.tag; - outbound.tag = $"mid-{Global.ProxyTag}-{index}"; - - var nextOutboundCopy = JsonUtils.DeepCopy(nextOutbound); - nextOutboundCopy.tag = originalTag; - nextOutboundCopy.streamSettings.sockopt = new() { dialerProxy = outbound.tag }; - - if (prevTag != null) - { - outbound.streamSettings.sockopt = new() { dialerProxy = prevTag }; - } - - // Add in reverse order to ensure final outbound is added first - resultOutbounds.Add(nextOutboundCopy); // Final outbound (exposed to internet) - resultOutbounds.Add(outbound); // Middle outbound - } - else - { - // If no next proxy, the main outbound is the final one - if (prevTag != null) - { - outbound.streamSettings.sockopt = new() { dialerProxy = prevTag }; - } - else if (fragmentOutbound != null && outbound.streamSettings?.security.IsNullOrEmpty() == false) - { - outbound.streamSettings.sockopt = new() { dialerProxy = fragmentOutbound.tag }; - } - - resultOutbounds.Add(outbound); + resultOutbounds.Add(nextOutbound); } + resultOutbounds.Add(currentOutbound); } // Merge results: first the main chain outbounds, then other outbounds, and finally utility outbounds @@ -1543,6 +1435,61 @@ public class CoreConfigV2rayService return 0; } + /// + /// Generates a chained outbound configuration for the given subItem and outbound. + /// The outbound's tag must be set before calling this method. + /// Returns the next proxy's outbound configuration, which may be null if no next proxy exists. + /// + /// The subscription item containing proxy chain information. + /// The current outbound configuration. Its tag must be set before calling this method. + /// The tag of the previous outbound in the chain, if any. + /// The outbound for the next proxy in the chain, if already created. If null, will be created inside. + /// + /// The outbound configuration for the next proxy in the chain, or null if no next proxy exists. + /// + private async Task GenChainOutbounds(SubItem subItem, Outbounds4Ray outbound, string? prevOutboundTag, Outbounds4Ray? nextOutbound = null) + { + try + { + var txtOutbound = EmbedUtils.GetEmbedText(Global.V2raySampleOutbound); + + if (!prevOutboundTag.IsNullOrEmpty()) + { + outbound.streamSettings.sockopt = new() + { + dialerProxy = prevOutboundTag + }; + } + + // Next proxy + var nextNode = await AppHandler.Instance.GetProfileItemViaRemarks(subItem.NextProfile); + if (nextNode is not null + && nextNode.ConfigType != EConfigType.Custom + && nextNode.ConfigType != EConfigType.Hysteria2 + && nextNode.ConfigType != EConfigType.TUIC) + { + if (nextOutbound == null) + { + nextOutbound = JsonUtils.Deserialize(txtOutbound); + await GenOutbound(nextNode, nextOutbound); + } + nextOutbound.tag = outbound.tag; + + outbound.tag = $"mid-{outbound.tag}"; + nextOutbound.streamSettings.sockopt = new() + { + dialerProxy = outbound.tag + }; + } + return nextOutbound; + } + catch (Exception ex) + { + Logging.SaveLog(_tag, ex); + } + return null; + } + private async Task GenBalancer(V2rayConfig v2rayConfig, EMultipleLoad multipleLoad) { if (multipleLoad == EMultipleLoad.LeastPing) diff --git a/yesplaymusic/.github/workflows/build.yaml b/yesplaymusic/.github/workflows/build.yaml index 4caf481cf8..472e263873 100644 --- a/yesplaymusic/.github/workflows/build.yaml +++ b/yesplaymusic/.github/workflows/build.yaml @@ -97,19 +97,19 @@ jobs: use_vue_cli: true - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: YesPlayMusic-mac path: dist_electron/*-universal.dmg if-no-files-found: ignore - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: YesPlayMusic-win path: dist_electron/*Setup*.exe if-no-files-found: ignore - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: YesPlayMusic-linux path: dist_electron/*.AppImage diff --git a/yesplaymusic/Dockerfile b/yesplaymusic/Dockerfile index 2fb8f95c4c..654461376a 100644 --- a/yesplaymusic/Dockerfile +++ b/yesplaymusic/Dockerfile @@ -1,25 +1,28 @@ -FROM node:16.13.1-alpine as build +FROM node:16.13.1-alpine AS build ENV VUE_APP_NETEASE_API_URL=/api WORKDIR /app RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories &&\ apk add --no-cache python3 make g++ git COPY package.json yarn.lock ./ -RUN yarn install -COPY . . RUN yarn config set electron_mirror https://npmmirror.com/mirrors/electron/ && \ - yarn build + yarn config set registry https://registry.npmmirror.com && \ + sed -i 's/registry.yarnpkg.com/registry.npmmirror.com/g' yarn.lock && \ + sed -i 's/registry.npmjs.org/registry.npmmirror.com/g' yarn.lock && \ + yarn install +COPY . . +RUN yarn build -FROM nginx:1.20.2-alpine as app +FROM nginx:1.20.2-alpine AS app COPY --from=build /app/package.json /usr/local/lib/ -RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories &&\ - apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.14/main libuv \ - && apk add --no-cache --update-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.14/main nodejs npm \ +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \ + && apk add --no-cache libuv nodejs npm \ + && npm config set registry https://registry.npmmirror.com \ && npm i -g $(awk -F \" '{if($2=="NeteaseCloudMusicApi") print $2"@"$4}' /usr/local/lib/package.json) \ && rm -f /usr/local/lib/package.json COPY --from=build /app/docker/nginx.conf.example /etc/nginx/conf.d/default.conf COPY --from=build /app/dist /usr/share/nginx/html -CMD nginx ; exec npx NeteaseCloudMusicApi \ No newline at end of file +CMD ["sh", "-c", "nginx && exec npx NeteaseCloudMusicApi"] diff --git a/yesplaymusic/src/components/Player.vue b/yesplaymusic/src/components/Player.vue index 0b98ab6189..2a4cf40c78 100644 --- a/yesplaymusic/src/components/Player.vue +++ b/yesplaymusic/src/components/Player.vue @@ -217,6 +217,13 @@ export default { : ''; }, }, + mounted() { + this.setupMediaControls(); + window.addEventListener('keydown', this.handleKeydown); + }, + beforeDestroy() { + window.removeEventListener('keydown', this.handleKeydown); + }, methods: { ...mapMutations(['toggleLyrics']), ...mapActions(['showToast', 'likeATrack']), @@ -270,6 +277,39 @@ export default { mute() { this.player.mute(); }, + + setupMediaControls() { + if ('mediaSession' in navigator) { + navigator.mediaSession.setActionHandler('play', () => { + this.playOrPause(); + }); + navigator.mediaSession.setActionHandler('pause', () => { + this.playOrPause(); + }); + navigator.mediaSession.setActionHandler('previoustrack', () => { + this.playPrevTrack(); + }); + navigator.mediaSession.setActionHandler('nexttrack', () => { + this.playNextTrack(); + }); + } + }, + + handleKeydown(event) { + switch (event.code) { + case 'MediaPlayPause': + this.playOrPause(); + break; + case 'MediaTrackPrevious': + this.playPrevTrack(); + break; + case 'MediaTrackNext': + this.playNextTrack(); + break; + default: + break; + } + }, }, }; diff --git a/yt-dlp/.github/workflows/signature-tests.yml b/yt-dlp/.github/workflows/signature-tests.yml new file mode 100644 index 0000000000..203172e0b9 --- /dev/null +++ b/yt-dlp/.github/workflows/signature-tests.yml @@ -0,0 +1,41 @@ +name: Signature Tests +on: + push: + paths: + - .github/workflows/signature-tests.yml + - test/test_youtube_signature.py + - yt_dlp/jsinterp.py + pull_request: + paths: + - .github/workflows/signature-tests.yml + - test/test_youtube_signature.py + - yt_dlp/jsinterp.py +permissions: + contents: read + +concurrency: + group: signature-tests-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +jobs: + tests: + name: Signature Tests + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest] + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', pypy-3.10, pypy-3.11] + steps: + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Install test requirements + run: python3 ./devscripts/install_deps.py --only-optional --include test + - name: Run tests + timeout-minutes: 15 + run: | + python3 -m yt_dlp -v || true # Print debug head + python3 ./devscripts/run_tests.py test/test_youtube_signature.py diff --git a/yt-dlp/test/test_jsinterp.py b/yt-dlp/test/test_jsinterp.py index 2e3cdc2a59..4268e890b8 100644 --- a/yt-dlp/test/test_jsinterp.py +++ b/yt-dlp/test/test_jsinterp.py @@ -478,6 +478,10 @@ class TestJSInterpreter(unittest.TestCase): func = jsi.extract_function('c', {'e': 10}, {'f': 100, 'g': 1000}) self.assertEqual(func([1]), 1111) + def test_extract_object(self): + jsi = JSInterpreter('var a={};a.xy={};var xy;var zxy={};xy={z:function(){return "abc"}};') + self.assertTrue('z' in jsi.extract_object('xy', None)) + def test_increment_decrement(self): self._test('function f() { var x = 1; return ++x; }', 2) self._test('function f() { var x = 1; return x++; }', 1) diff --git a/yt-dlp/test/test_youtube_signature.py b/yt-dlp/test/test_youtube_signature.py index 3336b6bfff..5e67926798 100644 --- a/yt-dlp/test/test_youtube_signature.py +++ b/yt-dlp/test/test_youtube_signature.py @@ -133,6 +133,11 @@ _SIG_TESTS = [ '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', 'IAOAOq0QJ8wRAAgXmPlOPSBkkUs1bYFYlJCfe29xx8j7v1pDL0QwbdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_E2u-m37KtXJoOySqa0', ), + ( + 'https://www.youtube.com/s/player/e12fbea4/player_ias.vflset/en_US/base.js', + 'gN7a-hudCuAuPH6fByOk1_GNXN0yNMHShjZXS2VOgsEItAJz0tipeavEOmNdYN-wUtcEqD3bCXjc0iyKfAyZxCBGgIARwsSdQfJ2CJtt', + 'JC2JfQdSswRAIgGBCxZyAfKyi0cjXCb3DqEctUw-NYdNmOEvaepit0zJAtIEsgOV2SXZjhSHMNy0NXNG_1kOyBf6HPuAuCduh-a', + ), ] _NSIG_TESTS = [ diff --git a/yt-dlp/yt_dlp/jsinterp.py b/yt-dlp/yt_dlp/jsinterp.py index 45aeffa229..b49f0cf30a 100644 --- a/yt-dlp/yt_dlp/jsinterp.py +++ b/yt-dlp/yt_dlp/jsinterp.py @@ -857,7 +857,7 @@ class JSInterpreter: obj = {} obj_m = re.search( r'''(?x) - (?(%s\s*:\s*function\s*\(.*?\)\s*{.*?}(?:,\s*)?)*) }\s*; ''' % (re.escape(objname), _FUNC_NAME_RE),