diff --git a/.github/update.log b/.github/update.log index 9522bf1ded..364bd1f27d 100644 --- a/.github/update.log +++ b/.github/update.log @@ -837,3 +837,4 @@ Update On Sat Nov 23 19:33:03 CET 2024 Update On Sun Nov 24 19:33:36 CET 2024 Update On Mon Nov 25 19:36:34 CET 2024 Update On Tue Nov 26 19:40:03 CET 2024 +Update On Wed Nov 27 19:38:12 CET 2024 diff --git a/clash-meta/adapter/inbound/listen.go b/clash-meta/adapter/inbound/listen.go index 318c9675db..ad944006a2 100644 --- a/clash-meta/adapter/inbound/listen.go +++ b/clash-meta/adapter/inbound/listen.go @@ -2,7 +2,9 @@ package inbound import ( "context" + "fmt" "net" + "net/netip" "sync" "github.com/metacubex/mihomo/component/keepalive" @@ -42,6 +44,27 @@ func MPTCP() bool { } func ListenContext(ctx context.Context, network, address string) (net.Listener, error) { + switch network { // like net.Resolver.internetAddrList but filter domain to avoid call net.Resolver.lookupIPAddr + case "tcp", "tcp4", "tcp6", "udp", "udp4", "udp6", "ip", "ip4", "ip6": + if host, port, err := net.SplitHostPort(address); err == nil { + switch host { + case "localhost": + switch network { + case "tcp6", "udp6", "ip6": + address = net.JoinHostPort("::1", port) + default: + address = net.JoinHostPort("127.0.0.1", port) + } + case "": // internetAddrList can handle this special case + break + default: + if _, err := netip.ParseAddr(host); err != nil { // not ip + return nil, fmt.Errorf("invalid network address: %s", address) + } + } + } + } + mutex.RLock() defer mutex.RUnlock() return lc.Listen(ctx, network, address) diff --git a/clash-meta/adapter/provider/parser.go b/clash-meta/adapter/provider/parser.go index b0db5db340..b305df7f89 100644 --- a/clash-meta/adapter/provider/parser.go +++ b/clash-meta/adapter/provider/parser.go @@ -66,6 +66,7 @@ type proxyProviderSchema struct { ExcludeFilter string `provider:"exclude-filter,omitempty"` ExcludeType string `provider:"exclude-type,omitempty"` DialerProxy string `provider:"dialer-proxy,omitempty"` + SizeLimit int64 `provider:"size-limit,omitempty"` HealthCheck healthCheckSchema `provider:"health-check,omitempty"` Override OverrideSchema `provider:"override,omitempty"` @@ -111,7 +112,7 @@ func ParseProxyProvider(name string, mapping map[string]any) (types.ProxyProvide return nil, fmt.Errorf("%w: %s", errSubPath, path) } } - vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, schema.Header, resource.DefaultHttpTimeout) + vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, schema.Header, resource.DefaultHttpTimeout, schema.SizeLimit) default: return nil, fmt.Errorf("%w: %s", errVehicleType, schema.Type) } diff --git a/clash-meta/component/resource/vehicle.go b/clash-meta/component/resource/vehicle.go index 7c3cb1c2a1..18cebf002c 100644 --- a/clash-meta/component/resource/vehicle.go +++ b/clash-meta/component/resource/vehicle.go @@ -84,12 +84,13 @@ func NewFileVehicle(path string) *FileVehicle { } type HTTPVehicle struct { - url string - path string - proxy string - header http.Header - timeout time.Duration - provider types.ProxyProvider + url string + path string + proxy string + header http.Header + timeout time.Duration + sizeLimit int64 + provider types.ProxyProvider } func (h *HTTPVehicle) Url() string { @@ -151,7 +152,11 @@ func (h *HTTPVehicle) Read(ctx context.Context, oldHash utils.HashType) (buf []b err = errors.New(resp.Status) return } - buf, err = io.ReadAll(resp.Body) + var reader io.Reader = resp.Body + if h.sizeLimit > 0 { + reader = io.LimitReader(reader, h.sizeLimit) + } + buf, err = io.ReadAll(reader) if err != nil { return } @@ -166,12 +171,13 @@ func (h *HTTPVehicle) Read(ctx context.Context, oldHash utils.HashType) (buf []b return } -func NewHTTPVehicle(url string, path string, proxy string, header http.Header, timeout time.Duration) *HTTPVehicle { +func NewHTTPVehicle(url string, path string, proxy string, header http.Header, timeout time.Duration, sizeLimit int64) *HTTPVehicle { return &HTTPVehicle{ - url: url, - path: path, - proxy: proxy, - header: header, - timeout: timeout, + url: url, + path: path, + proxy: proxy, + header: header, + timeout: timeout, + sizeLimit: sizeLimit, } } diff --git a/clash-meta/component/updater/update_geo.go b/clash-meta/component/updater/update_geo.go index bba0dabd2e..719a521515 100644 --- a/clash-meta/component/updater/update_geo.go +++ b/clash-meta/component/updater/update_geo.go @@ -45,7 +45,7 @@ func SetGeoUpdateInterval(newGeoUpdateInterval int) { } func UpdateMMDB() (err error) { - vehicle := resource.NewHTTPVehicle(geodata.MmdbUrl(), C.Path.MMDB(), "", nil, defaultHttpTimeout) + vehicle := resource.NewHTTPVehicle(geodata.MmdbUrl(), C.Path.MMDB(), "", nil, defaultHttpTimeout, 0) var oldHash utils.HashType if buf, err := os.ReadFile(vehicle.Path()); err == nil { oldHash = utils.MakeHash(buf) @@ -76,7 +76,7 @@ func UpdateMMDB() (err error) { } func UpdateASN() (err error) { - vehicle := resource.NewHTTPVehicle(geodata.ASNUrl(), C.Path.ASN(), "", nil, defaultHttpTimeout) + vehicle := resource.NewHTTPVehicle(geodata.ASNUrl(), C.Path.ASN(), "", nil, defaultHttpTimeout, 0) var oldHash utils.HashType if buf, err := os.ReadFile(vehicle.Path()); err == nil { oldHash = utils.MakeHash(buf) @@ -109,7 +109,7 @@ func UpdateASN() (err error) { func UpdateGeoIp() (err error) { geoLoader, err := geodata.GetGeoDataLoader("standard") - vehicle := resource.NewHTTPVehicle(geodata.GeoIpUrl(), C.Path.GeoIP(), "", nil, defaultHttpTimeout) + vehicle := resource.NewHTTPVehicle(geodata.GeoIpUrl(), C.Path.GeoIP(), "", nil, defaultHttpTimeout, 0) var oldHash utils.HashType if buf, err := os.ReadFile(vehicle.Path()); err == nil { oldHash = utils.MakeHash(buf) @@ -139,7 +139,7 @@ func UpdateGeoIp() (err error) { func UpdateGeoSite() (err error) { geoLoader, err := geodata.GetGeoDataLoader("standard") - vehicle := resource.NewHTTPVehicle(geodata.GeoSiteUrl(), C.Path.GeoSite(), "", nil, defaultHttpTimeout) + vehicle := resource.NewHTTPVehicle(geodata.GeoSiteUrl(), C.Path.GeoSite(), "", nil, defaultHttpTimeout, 0) var oldHash utils.HashType if buf, err := os.ReadFile(vehicle.Path()); err == nil { oldHash = utils.MakeHash(buf) diff --git a/clash-meta/docs/config.yaml b/clash-meta/docs/config.yaml index e75e5bd59b..5e83eea376 100644 --- a/clash-meta/docs/config.yaml +++ b/clash-meta/docs/config.yaml @@ -930,6 +930,7 @@ proxy-providers: interval: 3600 path: ./provider1.yaml # 默认只允许存储在 mihomo 的 Home Dir,如果想存储到任意位置,添加环境变量 SKIP_SAFE_PATH_CHECK=1 proxy: DIRECT + # size-limit: 10240 # 限制下载文件最大为10kb,默认为0即不限制文件大小 header: User-Agent: - "Clash/v1.18.0" @@ -977,6 +978,7 @@ rule-providers: type: http # http 的 path 可空置,默认储存路径为 homedir 的 rules 文件夹,文件名为 url 的 md5 url: "url" proxy: DIRECT + # size-limit: 10240 # 限制下载文件最大为10kb,默认为0即不限制文件大小 rule2: behavior: classical interval: 259200 diff --git a/clash-meta/rules/provider/parse.go b/clash-meta/rules/provider/parse.go index 3bd8f54c8e..b04096fb3c 100644 --- a/clash-meta/rules/provider/parse.go +++ b/clash-meta/rules/provider/parse.go @@ -16,13 +16,14 @@ var ( ) type ruleProviderSchema struct { - Type string `provider:"type"` - Behavior string `provider:"behavior"` - Path string `provider:"path,omitempty"` - URL string `provider:"url,omitempty"` - Proxy string `provider:"proxy,omitempty"` - Format string `provider:"format,omitempty"` - Interval int `provider:"interval,omitempty"` + Type string `provider:"type"` + Behavior string `provider:"behavior"` + Path string `provider:"path,omitempty"` + URL string `provider:"url,omitempty"` + Proxy string `provider:"proxy,omitempty"` + Format string `provider:"format,omitempty"` + Interval int `provider:"interval,omitempty"` + SizeLimit int64 `provider:"size-limit,omitempty"` } func ParseRuleProvider(name string, mapping map[string]interface{}, parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) (P.RuleProvider, error) { @@ -53,7 +54,7 @@ func ParseRuleProvider(name string, mapping map[string]interface{}, parse func(t return nil, fmt.Errorf("%w: %s", errSubPath, path) } } - vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, nil, resource.DefaultHttpTimeout) + vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, nil, resource.DefaultHttpTimeout, schema.SizeLimit) default: return nil, fmt.Errorf("unsupported vehicle type: %s", schema.Type) } diff --git a/clash-nyanpasu/backend/Cargo.lock b/clash-nyanpasu/backend/Cargo.lock index e5effcf7e8..219880897e 100644 --- a/clash-nyanpasu/backend/Cargo.lock +++ b/clash-nyanpasu/backend/Cargo.lock @@ -4676,9 +4676,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.164" +version = "0.2.166" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" +checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36" [[package]] name = "libfuzzer-sys" @@ -4707,7 +4707,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-targets 0.48.5", ] [[package]] @@ -8238,16 +8238,16 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ae3f4f7d64646c46c4cae4e3f01d1c5d255c7406fdd7c7f999a94e488791" +checksum = "4c33cd241af0f2e9e3b5c32163b873b29956890b5342e6745b917ce9d490f4af" dependencies = [ "core-foundation-sys", "libc", "memchr", "ntapi", "rayon", - "windows 0.57.0", + "windows 0.56.0", ] [[package]] @@ -9286,9 +9286,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", @@ -10471,16 +10471,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" -dependencies = [ - "windows-core 0.57.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows" version = "0.58.0" @@ -10512,18 +10502,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-core" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" -dependencies = [ - "windows-implement 0.57.0", - "windows-interface 0.57.0", - "windows-result 0.1.2", - "windows-targets 0.52.6", -] - [[package]] name = "windows-core" version = "0.58.0" @@ -10548,17 +10526,6 @@ dependencies = [ "syn 2.0.89", ] -[[package]] -name = "windows-implement" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.89", -] - [[package]] name = "windows-implement" version = "0.58.0" @@ -10581,17 +10548,6 @@ dependencies = [ "syn 2.0.89", ] -[[package]] -name = "windows-interface" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.89", -] - [[package]] name = "windows-interface" version = "0.58.0" diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index bf38145206..ef1d7f8aeb 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -16,9 +16,9 @@ "@emotion/styled": "11.13.5", "@juggle/resize-observer": "3.4.0", "@material/material-color-utilities": "0.3.0", - "@mui/icons-material": "6.1.8", - "@mui/lab": "6.0.0-beta.16", - "@mui/material": "6.1.8", + "@mui/icons-material": "6.1.9", + "@mui/lab": "6.0.0-beta.17", + "@mui/material": "6.1.9", "@nyanpasu/interface": "workspace:^", "@nyanpasu/ui": "workspace:^", "@tanstack/router-zod-adapter": "1.81.5", @@ -40,7 +40,7 @@ "react-error-boundary": "4.1.2", "react-fast-marquee": "1.6.5", "react-hook-form-mui": "7.4.0", - "react-i18next": "15.1.1", + "react-i18next": "15.1.2", "react-markdown": "9.0.1", "react-split-grid": "1.0.4", "react-use": "17.5.1", @@ -54,9 +54,9 @@ "@emotion/react": "11.13.5", "@iconify/json": "2.2.276", "@monaco-editor/react": "4.6.0", - "@tanstack/react-router": "1.82.12", - "@tanstack/router-devtools": "1.82.12", - "@tanstack/router-plugin": "1.82.10", + "@tanstack/react-router": "1.83.0", + "@tanstack/router-devtools": "1.83.0", + "@tanstack/router-plugin": "1.83.0", "@tauri-apps/plugin-clipboard-manager": "2.0.0", "@tauri-apps/plugin-dialog": "2.0.1", "@tauri-apps/plugin-fs": "2.0.2", @@ -81,8 +81,8 @@ "sass": "1.81.0", "shiki": "1.23.1", "tailwindcss-textshadow": "2.1.3", - "unplugin-auto-import": "0.18.5", - "unplugin-icons": "0.20.1", + "unplugin-auto-import": "0.18.6", + "unplugin-icons": "0.20.2", "validator": "13.12.0", "vite": "5.4.11", "vite-plugin-sass-dts": "1.3.29", diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json index 03c229234d..d3e024b6ec 100644 --- a/clash-nyanpasu/frontend/ui/package.json +++ b/clash-nyanpasu/frontend/ui/package.json @@ -17,9 +17,9 @@ }, "dependencies": { "@material/material-color-utilities": "0.3.0", - "@mui/icons-material": "6.1.8", - "@mui/lab": "6.0.0-beta.16", - "@mui/material": "6.1.8", + "@mui/icons-material": "6.1.9", + "@mui/lab": "6.0.0-beta.17", + "@mui/material": "6.1.9", "@radix-ui/react-portal": "1.1.2", "@radix-ui/react-scroll-area": "1.2.1", "@tauri-apps/api": "2.1.1", @@ -32,7 +32,7 @@ "react": "rc", "react-dom": "rc", "react-error-boundary": "4.1.2", - "react-i18next": "15.1.1", + "react-i18next": "15.1.2", "react-use": "17.5.1", "vite": "5.4.11", "vite-tsconfig-paths": "5.1.3" diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json index 8ef1e41c86..7df83377c7 100644 --- a/clash-nyanpasu/manifest/version.json +++ b/clash-nyanpasu/manifest/version.json @@ -2,7 +2,7 @@ "manifest_version": 1, "latest": { "mihomo": "v1.18.10", - "mihomo_alpha": "alpha-eb985b0", + "mihomo_alpha": "alpha-1fff34d", "clash_rs": "v0.7.2", "clash_premium": "2023-09-05-gdcc8d87", "clash_rs_alpha": "0.7.2-alpha+sha.05004b6" @@ -69,5 +69,5 @@ "linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf" } }, - "updated_at": "2024-11-25T22:29:36.938Z" + "updated_at": "2024-11-26T22:31:37.288Z" } diff --git a/clash-nyanpasu/package.json b/clash-nyanpasu/package.json index 6aed1f607d..a4133d415a 100644 --- a/clash-nyanpasu/package.json +++ b/clash-nyanpasu/package.json @@ -78,18 +78,18 @@ "eslint-plugin-import": "2.31.0", "eslint-plugin-n": "17.14.0", "eslint-plugin-prettier": "5.2.1", - "eslint-plugin-promise": "7.2.0", + "eslint-plugin-promise": "7.2.1", "eslint-plugin-react": "7.37.2", "eslint-plugin-react-compiler": "0.0.0-experimental-fcabbc1-20241106", "eslint-plugin-react-hooks": "4.6.2", - "knip": "5.37.2", + "knip": "5.38.1", "lint-staged": "15.2.10", "npm-run-all2": "7.0.1", "postcss": "8.4.49", "postcss-html": "1.7.0", "postcss-import": "16.1.0", "postcss-scss": "4.0.9", - "prettier": "3.3.3", + "prettier": "3.4.1", "prettier-plugin-tailwindcss": "0.6.9", "prettier-plugin-toml": "2.0.1", "react-devtools": "6.0.1", diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index 2aaeaa036c..161663d814 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -28,7 +28,7 @@ importers: version: 19.6.0 '@ianvs/prettier-plugin-sort-imports': specifier: 4.4.0 - version: 4.4.0(prettier@3.3.3) + version: 4.4.0(prettier@3.4.1) '@tauri-apps/cli': specifier: 2.1.0 version: 2.1.0 @@ -67,7 +67,7 @@ importers: version: 9.1.0(eslint@8.57.1) eslint-config-standard: specifier: 17.1.0 - version: 17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.16.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1))(eslint-plugin-n@17.14.0(eslint@8.57.1))(eslint-plugin-promise@7.2.0(eslint@8.57.1))(eslint@8.57.1) + version: 17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.16.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1))(eslint-plugin-n@17.14.0(eslint@8.57.1))(eslint-plugin-promise@7.2.1(eslint@8.57.1))(eslint@8.57.1) eslint-import-resolver-alias: specifier: 1.1.2 version: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.16.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)) @@ -82,10 +82,10 @@ importers: version: 17.14.0(eslint@8.57.1) eslint-plugin-prettier: specifier: 5.2.1 - version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3) + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.4.1) eslint-plugin-promise: - specifier: 7.2.0 - version: 7.2.0(eslint@8.57.1) + specifier: 7.2.1 + version: 7.2.1(eslint@8.57.1) eslint-plugin-react: specifier: 7.37.2 version: 7.37.2(eslint@8.57.1) @@ -96,8 +96,8 @@ importers: specifier: 4.6.2 version: 4.6.2(eslint@8.57.1) knip: - specifier: 5.37.2 - version: 5.37.2(@types/node@22.10.0)(typescript@5.7.2) + specifier: 5.38.1 + version: 5.38.1(@types/node@22.10.0)(typescript@5.7.2) lint-staged: specifier: 15.2.10 version: 15.2.10 @@ -117,14 +117,14 @@ importers: specifier: 4.0.9 version: 4.0.9(postcss@8.4.49) prettier: - specifier: 3.3.3 - version: 3.3.3 + specifier: 3.4.1 + version: 3.4.1 prettier-plugin-tailwindcss: specifier: 0.6.9 - version: 0.6.9(@ianvs/prettier-plugin-sort-imports@4.4.0(prettier@3.3.3))(@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.3.3))(prettier@3.3.3) + version: 0.6.9(@ianvs/prettier-plugin-sort-imports@4.4.0(prettier@3.4.1))(@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.4.1))(prettier@3.4.1) prettier-plugin-toml: specifier: 2.0.1 - version: 2.0.1(prettier@3.3.3) + version: 2.0.1(prettier@3.4.1) react-devtools: specifier: 6.0.1 version: 6.0.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -202,14 +202,14 @@ importers: specifier: 0.3.0 version: 0.3.0 '@mui/icons-material': - specifier: 6.1.8 - version: 6.1.8(@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: 6.1.9 + version: 6.1.9(@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@mui/lab': - specifier: 6.0.0-beta.16 - version: 6.0.0-beta.16(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: 6.0.0-beta.17 + version: 6.0.0-beta.17(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@mui/material': - specifier: 6.1.8 - version: 6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: 6.1.9 + version: 6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@nyanpasu/interface': specifier: workspace:^ version: link:../interface @@ -218,7 +218,7 @@ importers: version: link:../ui '@tanstack/router-zod-adapter': specifier: 1.81.5 - version: 1.81.5(@tanstack/react-router@1.82.12(@tanstack/router-generator@1.82.10)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(zod@3.23.8) + version: 1.81.5(@tanstack/react-router@1.83.0(@tanstack/router-generator@1.83.0)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(zod@3.23.8) '@tauri-apps/api': specifier: 2.1.1 version: 2.1.1 @@ -251,13 +251,13 @@ importers: version: 0.4.0 material-react-table: specifier: 3.0.1 - version: 3.0.1(hfqzzv7ai2mdqkgutzco4rdyye) + version: 3.0.1(6jmykk7zxkzevdzoaapf5k5sq4) monaco-editor: specifier: 0.52.0 version: 0.52.0 mui-color-input: specifier: 5.0.1 - version: 5.0.1(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + version: 5.0.1(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) react: specifier: rc version: 19.0.0-rc.1 @@ -272,10 +272,10 @@ importers: version: 1.6.5(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) react-hook-form-mui: specifier: 7.4.0 - version: 7.4.0(c6eqiv3v4ro6nnqx6e4soqhoku) + version: 7.4.0(l2o4yer4mnv5n4s7ohpbf3i6j4) react-i18next: - specifier: 15.1.1 - version: 15.1.1(i18next@24.0.2(typescript@5.7.2))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) + specifier: 15.1.2 + version: 15.1.2(i18next@24.0.2(typescript@5.7.2))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) react-markdown: specifier: 9.0.1 version: 9.0.1(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) @@ -311,14 +311,14 @@ importers: specifier: 4.6.0 version: 4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) '@tanstack/react-router': - specifier: 1.82.12 - version: 1.82.12(@tanstack/router-generator@1.82.10)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) + specifier: 1.83.0 + version: 1.83.0(@tanstack/router-generator@1.83.0)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) '@tanstack/router-devtools': - specifier: 1.82.12 - version: 1.82.12(@tanstack/react-router@1.82.12(@tanstack/router-generator@1.82.10)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(csstype@3.1.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) + specifier: 1.83.0 + version: 1.83.0(@tanstack/react-router@1.83.0(@tanstack/router-generator@1.83.0)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(csstype@3.1.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) '@tanstack/router-plugin': - specifier: 1.82.10 - version: 1.82.10(vite@5.4.11(@types/node@22.10.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)) + specifier: 1.83.0 + version: 1.83.0(vite@5.4.11(@types/node@22.10.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)) '@tauri-apps/plugin-clipboard-manager': specifier: 2.0.0 version: 2.0.0 @@ -392,11 +392,11 @@ importers: specifier: 2.1.3 version: 2.1.3 unplugin-auto-import: - specifier: 0.18.5 - version: 0.18.5(rollup@4.21.0) + specifier: 0.18.6 + version: 0.18.6(rollup@4.21.0) unplugin-icons: - specifier: 0.20.1 - version: 0.20.1(@svgr/core@8.1.0(typescript@5.7.2))(webpack-sources@3.2.3) + specifier: 0.20.2 + version: 0.20.2(@svgr/core@8.1.0(typescript@5.7.2)) validator: specifier: 13.12.0 version: 13.12.0 @@ -405,7 +405,7 @@ importers: version: 5.4.11(@types/node@22.10.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0) vite-plugin-sass-dts: specifier: 1.3.29 - version: 1.3.29(postcss@8.4.49)(prettier@3.3.3)(sass-embedded@1.78.0)(vite@5.4.11(@types/node@22.10.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)) + version: 1.3.29(postcss@8.4.49)(prettier@3.4.1)(sass-embedded@1.78.0)(vite@5.4.11(@types/node@22.10.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)) vite-plugin-svgr: specifier: 4.3.0 version: 4.3.0(rollup@4.21.0)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)) @@ -422,14 +422,14 @@ importers: specifier: 0.3.0 version: 0.3.0 '@mui/icons-material': - specifier: 6.1.8 - version: 6.1.8(@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: 6.1.9 + version: 6.1.9(@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@mui/lab': - specifier: 6.0.0-beta.16 - version: 6.0.0-beta.16(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: 6.0.0-beta.17 + version: 6.0.0-beta.17(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@mui/material': - specifier: 6.1.8 - version: 6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: 6.1.9 + version: 6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@radix-ui/react-portal': specifier: 1.1.2 version: 1.1.2(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) @@ -467,8 +467,8 @@ importers: specifier: 4.1.2 version: 4.1.2(react@19.0.0-rc.1) react-i18next: - specifier: 15.1.1 - version: 15.1.1(i18next@24.0.2(typescript@5.7.2))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) + specifier: 15.1.2 + version: 15.1.2(i18next@24.0.2(typescript@5.7.2))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) react-use: specifier: 17.5.1 version: 17.5.1(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) @@ -581,12 +581,12 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@antfu/install-pkg@0.1.1': - resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==} - '@antfu/install-pkg@0.4.1': resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==} + '@antfu/install-pkg@0.5.0': + resolution: {integrity: sha512-dKnk2xlAyC7rvTkpkHmu+Qy/2Zc3Vm/l8PtNyIOGDBtXPY3kThfU4ORNEp3V7SXw5XSOb+tOJaUYpfquPzL/Tg==} + '@antfu/utils@0.7.10': resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} @@ -1699,8 +1699,8 @@ packages: '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@2.1.29': - resolution: {integrity: sha512-wCcTsmlJvTi1VWBgcJ7HeuWlh7gLGWY7L9HmbgMfjOfsoo7DADemB2Nqnrw1KvCdEAxLL5wTMBAOP5BesFrtng==} + '@iconify/utils@2.1.33': + resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -1773,28 +1773,39 @@ packages: '@types/react': optional: true - '@mui/core-downloads-tracker@6.1.8': - resolution: {integrity: sha512-TGAvzwUg9hybDacwfIGFjI2bXYXrIqky+vMfaeay8rvT56/PNAlvIDUJ54kpT5KRc9AWAihOvtDI7/LJOThOmQ==} - - '@mui/icons-material@6.1.8': - resolution: {integrity: sha512-6frsXcf1TcJKWevWwRup6V4L8lzI33cbHcAjT83YLgKw0vYRZKY0kjMI9fhrJZdRWXgFFgKKvEv3GjoxbqFF7A==} + '@mui/base@5.0.0-beta.63': + resolution: {integrity: sha512-W6aIqKP9X8VUX0KhSnYWo2+5C7MnKV1IhYVd517L/apvfkVq5KaTdlnxSBVwnaWt46whayVgQ/9KXwUVCXp6+w==} engines: {node: '>=14.0.0'} peerDependencies: - '@mui/material': ^6.1.8 + '@types/react': npm:types-react@rc + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/core-downloads-tracker@6.1.9': + resolution: {integrity: sha512-TWqj7b1w5cmSz4H/uf+y2AHxAH4ldPR7D2bz0XVyn60GCAo/zRbRPx7cF8gTs/i7CiYeHzV6dtat0VpMwOtolw==} + + '@mui/icons-material@6.1.9': + resolution: {integrity: sha512-AzlhIT51rdjkZ/EcUV2dbhNkNSUHIqCnNoUxodpiTw8buyAUBd+qnxg5OBSuPpun/ZEdSSB8Q7Uyh6zqjiMsEQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@mui/material': ^6.1.9 '@types/react': npm:types-react@rc react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - '@mui/lab@6.0.0-beta.16': - resolution: {integrity: sha512-YFeKREMMCiUhp4dGXd6Y/7N3BLepys9bM6xi4aF0WTZOvfl1ksDXPzuXPGiiiIuMgQFJeyN5iUnS1iPu3wH+kQ==} + '@mui/lab@6.0.0-beta.17': + resolution: {integrity: sha512-Ls1pIuYi5D9wq9mUwncky6CWokd6CCqQDCxXbm0TP0e7ksU5DcCPUZXBmTWQgbkldLu14aUXbJHyts63L0rycQ==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@mui/material': ^6.1.8 - '@mui/material-pigment-css': ^6.1.8 + '@mui/material': ^6.1.9 + '@mui/material-pigment-css': ^6.1.9 '@types/react': npm:types-react@rc react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1808,13 +1819,13 @@ packages: '@types/react': optional: true - '@mui/material@6.1.8': - resolution: {integrity: sha512-QZdQFnXct+7NXIzHgT3qt+sQiO7HYGZU2vymP9Xl9tUMXEOA/S1mZMMb7+WGZrk5TzNlU/kP/85K0da5V1jXoQ==} + '@mui/material@6.1.9': + resolution: {integrity: sha512-NwqIN0bdsgzSbZd5JFcC+2ez0XW/XNs8uiV2PDHrqQ4qf/FEasFJG1z6g8JbCN0YlTrHZekVb17X0Fv0qcYJfQ==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@mui/material-pigment-css': ^6.1.8 + '@mui/material-pigment-css': ^6.1.9 '@types/react': npm:types-react@rc react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1838,8 +1849,8 @@ packages: '@types/react': optional: true - '@mui/private-theming@6.1.8': - resolution: {integrity: sha512-TuKl7msynCNCVvhX3c0ef1sF0Qb3VHcPs8XOGB/8bdOGBr/ynmIG1yTMjZeiFQXk8yN9fzK/FDEKMFxILNn3wg==} + '@mui/private-theming@6.1.9': + resolution: {integrity: sha512-7aum/O1RquBYhfwL/7egDyl9GqJgPM6hoJDFFBbhF6Sgv9yI9v4w3ArKUkuVvR0CtVj4NXRVMKEioh1bjUzvuA==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': npm:types-react@rc @@ -1861,8 +1872,8 @@ packages: '@emotion/styled': optional: true - '@mui/styled-engine@6.1.8': - resolution: {integrity: sha512-ZvEoT0U2nPLSLI+B4by4cVjaZnPT2f20f4JUPkyHdwLv65ZzuoHiTlwyhqX1Ch63p8bcJzKTHQVGisEoMK6PGA==} + '@mui/styled-engine@6.1.9': + resolution: {integrity: sha512-xynSLlJRxHLzSfQaiDjkaTx8LiFb9ByVa7aOdwFnTxGWFMY1F+mkXwAUY4jDDE+MAxkWxlzzQE0wOohnsxhdQg==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.4.1 @@ -1890,8 +1901,8 @@ packages: '@types/react': optional: true - '@mui/system@6.1.8': - resolution: {integrity: sha512-i1kLfQoWxzFpXTBQIuPoA3xKnAnP3en4I2T8xIolovSolGQX5k8vGjw1JaydQS40td++cFsgCdEU458HDNTGUA==} + '@mui/system@6.1.9': + resolution: {integrity: sha512-8x+RucnNp21gfFYsklCaZf0COXbv3+v0lrVuXONxvPEkESi2rwLlOi8UPJfcz6LxZOAX3v3oQ7qw18vnpgueRg==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -1934,6 +1945,16 @@ packages: '@types/react': optional: true + '@mui/utils@6.1.9': + resolution: {integrity: sha512-N7uzBp7p2or+xanXn3aH2OTINC6F/Ru/U8h6amhRZEev8bJhKN86rIDIoxZZ902tj+09LXtH83iLxFMjMHyqNA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': npm:types-react@rc + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@mui/x-date-pickers@7.9.0': resolution: {integrity: sha512-GMDprioHlYmNle8Cbh6TxB4QThDGgqJxfH/R/p/5dNk+Tn5vB1gZSDMn3wVxItiEV6tDXbkyS5gPhSMVFDGvAA==} engines: {node: '>=14.0.0'} @@ -2632,11 +2653,11 @@ packages: resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==} engines: {node: '>=12'} - '@tanstack/react-router@1.82.12': - resolution: {integrity: sha512-A7Jx3jBNuoXDy8Ni6dS4OWkF/bWFzITOB/HFWF5TfLFs621VNhwiD0C00ZpnSyqsEuekoGg6W/q4HDVR2rlzNQ==} + '@tanstack/react-router@1.83.0': + resolution: {integrity: sha512-oJ6ewpitY5uIMH82nHW2LuQt0gtTe+v4DAgufWjLBwOaWr5po/0by9DDBW/j02mgr1mVSXm+OXbKSDQNC/+ARw==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-generator': 1.82.10 + '@tanstack/router-generator': 1.83.0 react: '>=18' react-dom: '>=18' peerDependenciesMeta: @@ -2662,20 +2683,20 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@tanstack/router-devtools@1.82.12': - resolution: {integrity: sha512-KaTQwyS9b8HdTC+ZG+yxCznrs/RE2SISpDCfP+USHTFLnzteFwlixv9XX+4f4UAy1Nl0yo0qCjIusSN7kAJrCg==} + '@tanstack/router-devtools@1.83.0': + resolution: {integrity: sha512-jqFSJdPrDXSVadvWAV6XpWpdduMmgFGaJA222FgbBI25uXDRo9MRvoORonqMPYahfTUNersisruh2NXaZZAT0Q==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.82.12 + '@tanstack/react-router': ^1.83.0 react: '>=18' react-dom: '>=18' - '@tanstack/router-generator@1.82.10': - resolution: {integrity: sha512-0wycXexEaZ8zOlHbpvl5k1L2qwFwhF4HCV5GgcyfftE4n2ifJ+XGZUqGob4yxvJVbgG5fJTnnyWkvmnNgzCSyg==} + '@tanstack/router-generator@1.83.0': + resolution: {integrity: sha512-fj8n0vQ4bxyctltCmlc9ge1DT+tc05VHbFs1BnroASBhz76KTMNmKAQexPRZptNiDNHgQIQHVL5AIxv93zHKpA==} engines: {node: '>=12'} - '@tanstack/router-plugin@1.82.10': - resolution: {integrity: sha512-5hBb2sTv/pEQb0T/7V+P+tfjuq97sIcoRhiCGUCqVlCMG809Q+RQFzXdlhJhG/a0KBT5jE/He/Q1Hf+7XG5Wzg==} + '@tanstack/router-plugin@1.83.0': + resolution: {integrity: sha512-frJafLRqQ/7DxCYc/6Y7ZrqT/W1sXN6FGeO3YkgJs+A/WRnGyvL+yEOI3GYDUakSHUpGapUfVYBC6RFhQ+CipQ==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' @@ -4332,8 +4353,8 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-promise@7.2.0: - resolution: {integrity: sha512-O2QBfKGRP0AHxXhZ3Lk2sFGGGw8TlMW84c+QfPX0gMnDrKJEN5SGJOICt/nR6spLvzuYO3d3nV4R3AIzdbaW7Q==} + eslint-plugin-promise@7.2.1: + resolution: {integrity: sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -5204,6 +5225,9 @@ packages: js-tokens@9.0.0: resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -5279,8 +5303,8 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - knip@5.37.2: - resolution: {integrity: sha512-Rs9HHTgmUacyKxchP4kRwG8idi0tzVHVpSyo4EM9sNGDSrPq20lhKXOWMFmShGCV6CH2352393Ok/qG1NblCMw==} + knip@5.38.1: + resolution: {integrity: sha512-qGQpVO9jhHDoJ/4O1paXQ8Y6XyqH3Xm6OTety/z5IouZBEvJuJoWp59iY9E82Dt0pz9BBmKLczliB4sbYMPr2g==} engines: {node: '>=18.6.0'} hasBin: true peerDependencies: @@ -5333,6 +5357,10 @@ packages: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + engines: {node: '>=14'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -5431,8 +5459,8 @@ packages: magic-string@0.30.12: resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} - magic-string@0.30.13: - resolution: {integrity: sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==} + magic-string@0.30.14: + resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} make-dir@1.3.0: resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} @@ -5642,9 +5670,6 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.7.1: - resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} - mlly@1.7.3: resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} @@ -5921,6 +5946,9 @@ packages: package-manager-detector@0.2.0: resolution: {integrity: sha512-E385OSk9qDcXhcM9LNSe4sdhx8a9mAPrZ4sMLW+tmxl5ZuGtPUcdFu+MPP2jbgiWAZ6Pfe5soGFMd+0Db5Vrog==} + package-manager-detector@0.2.5: + resolution: {integrity: sha512-3dS7y28uua+UDbRCLBqltMBrbI+A5U2mI9YuxHRxIWYmLj3DwntEBmERYzIAQ4DMeuCUOBSak7dBHHoXKpOTYQ==} + pako@2.1.0: resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} @@ -6256,8 +6284,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + prettier@3.4.1: + resolution: {integrity: sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==} engines: {node: '>=14'} hasBin: true @@ -6354,8 +6382,8 @@ packages: peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - react-i18next@15.1.1: - resolution: {integrity: sha512-R/Vg9wIli2P3FfeI8o1eNJUJue5LWpFsQePCHdQDmX0Co3zkr6kdT8gAseb/yGeWbNz1Txc4bKDQuZYsC0kQfw==} + react-i18next@15.1.2: + resolution: {integrity: sha512-tl7AfbWyz9a4BefFXnVooc+gvQBVlavUkVTphGUcvhsNmbRf5UixJVdHeSFkE4gUyQkmFPYHVwTuxIdHjfQgiA==} peerDependencies: i18next: '>= 23.2.3' react: '>= 16.8.0' @@ -6843,8 +6871,8 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - smol-toml@1.3.0: - resolution: {integrity: sha512-tWpi2TsODPScmi48b/OQZGi2lgUmBCHy6SZrhi/FdnnHiU1GwebbCfuQuxsC3nHaLwtYeJGPrDZDIeodDOc4pA==} + smol-toml@1.3.1: + resolution: {integrity: sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==} engines: {node: '>= 18'} snake-case@3.0.4: @@ -6992,8 +7020,8 @@ packages: resolution: {integrity: sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==} engines: {node: '>=14.16'} - strip-literal@2.1.0: - resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + strip-literal@2.1.1: + resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==} style-to-object@1.0.6: resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==} @@ -7182,6 +7210,9 @@ packages: tinyexec@0.3.0: resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} + tinyexec@0.3.1: + resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + tmp@0.2.3: resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} engines: {node: '>=14.14'} @@ -7346,8 +7377,8 @@ packages: unified@11.0.4: resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} - unimport@3.13.2: - resolution: {integrity: sha512-VKAepeIb6BWLtBl4tmyHY1/7rJgz3ynmZrWf8cU1a+v5Uv/k1gyyAEeGBnYcrwy8bxG5sflxEx4a9VQUqOVHUA==} + unimport@3.13.4: + resolution: {integrity: sha512-pRr4JO51pCQGjwDPToehYHaJLwZQbMQNBI3eGbZB1TzMHnWbQldApWe+bot7CgA03SFovF1bn03/WYFNi58rCw==} unique-string@1.0.0: resolution: {integrity: sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==} @@ -7388,8 +7419,8 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - unplugin-auto-import@0.18.5: - resolution: {integrity: sha512-ZUnayBRlOwNuN9hrM1PymSZK5qDEI8heDD0E3U8Tq4FS6bUxd9VMfJ8tCwWTG5ir6g1yThe/4SVHbFUZQwplOw==} + unplugin-auto-import@0.18.6: + resolution: {integrity: sha512-LMFzX5DtkTj/3wZuyG5bgKBoJ7WSgzqSGJ8ppDRdlvPh45mx6t6w3OcbExQi53n3xF5MYkNGPNR/HYOL95KL2A==} engines: {node: '>=14'} peerDependencies: '@nuxt/kit': ^3.2.2 @@ -7400,8 +7431,8 @@ packages: '@vueuse/core': optional: true - unplugin-icons@0.20.1: - resolution: {integrity: sha512-0z5sYGx07Q69ZrJB4kjmx7a5LYLNSWwyq95Ox9OuSG2y/sbhJaHUapRPOJcKmKhOAyToDVRdy9P7gxJ05lYipw==} + unplugin-icons@0.20.2: + resolution: {integrity: sha512-Ak6TKAiO812aIUrCelrBSTQbYC4FiqawnFrAusP/hjmB8f9cAug9jr381ItvLl+Asi4IVcjoOiPbpy9CfFGKvQ==} peerDependencies: '@svgr/core': '>=7.0.0' '@svgx/core': ^1.0.1 @@ -7423,15 +7454,6 @@ packages: vue-template-es2015-compiler: optional: true - unplugin@1.14.1: - resolution: {integrity: sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==} - engines: {node: '>=14.0.0'} - peerDependencies: - webpack-sources: ^3 - peerDependenciesMeta: - webpack-sources: - optional: true - unplugin@1.16.0: resolution: {integrity: sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==} engines: {node: '>=14.0.0'} @@ -7615,10 +7637,6 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} @@ -7792,16 +7810,16 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/install-pkg@0.1.1': - dependencies: - execa: 5.1.1 - find-up: 5.0.0 - '@antfu/install-pkg@0.4.1': dependencies: package-manager-detector: 0.2.0 tinyexec: 0.3.0 + '@antfu/install-pkg@0.5.0': + dependencies: + package-manager-detector: 0.2.5 + tinyexec: 0.3.1 + '@antfu/utils@0.7.10': {} '@babel/code-frame@7.26.0': @@ -9013,13 +9031,13 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@ianvs/prettier-plugin-sort-imports@4.4.0(prettier@3.3.3)': + '@ianvs/prettier-plugin-sort-imports@4.4.0(prettier@3.4.1)': dependencies: '@babel/generator': 7.26.2 '@babel/parser': 7.26.2 '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 - prettier: 3.3.3 + prettier: 3.4.1 semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -9031,15 +9049,15 @@ snapshots: '@iconify/types@2.0.0': {} - '@iconify/utils@2.1.29': + '@iconify/utils@2.1.33': dependencies: - '@antfu/install-pkg': 0.1.1 + '@antfu/install-pkg': 0.4.1 '@antfu/utils': 0.7.10 '@iconify/types': 2.0.0 debug: 4.3.7 kolorist: 1.8.0 - local-pkg: 0.5.0 - mlly: 1.7.1 + local-pkg: 0.5.1 + mlly: 1.7.3 transitivePeerDependencies: - supports-color @@ -9143,24 +9161,38 @@ snapshots: optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/core-downloads-tracker@6.1.8': {} - - '@mui/icons-material@6.1.8(@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@mui/base@5.0.0-beta.63(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.26.0 - '@mui/material': 6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) + '@mui/types': 7.2.19(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.9(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@popperjs/core': 2.11.8 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.0.0-rc.1 + react-dom: 19.0.0-rc.1(react@19.0.0-rc.1) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + + '@mui/core-downloads-tracker@6.1.9': {} + + '@mui/icons-material@6.1.9(@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/material': 6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) react: 19.0.0-rc.1 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/lab@6.0.0-beta.16(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@mui/lab@6.0.0-beta.17(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.26.0 - '@mui/base': 5.0.0-beta.62(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@mui/material': 6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@mui/system': 6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/base': 5.0.0-beta.63(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/material': 6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/system': 6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@mui/types': 7.2.19(types-react@19.0.0-rc.1) - '@mui/utils': 6.1.8(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.9(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) clsx: 2.1.1 prop-types: 15.8.1 react: 19.0.0-rc.1 @@ -9170,13 +9202,13 @@ snapshots: '@emotion/styled': 11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 - '@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.26.0 - '@mui/core-downloads-tracker': 6.1.8 - '@mui/system': 6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/core-downloads-tracker': 6.1.9 + '@mui/system': 6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@mui/types': 7.2.19(types-react@19.0.0-rc.1) - '@mui/utils': 6.1.8(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.9(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.11 clsx: 2.1.1 @@ -9200,10 +9232,10 @@ snapshots: optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/private-theming@6.1.8(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@mui/private-theming@6.1.9(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.26.0 - '@mui/utils': 6.1.8(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.9(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) prop-types: 15.8.1 react: 19.0.0-rc.1 optionalDependencies: @@ -9220,7 +9252,7 @@ snapshots: '@emotion/react': 11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@emotion/styled': 11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@mui/styled-engine@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)': + '@mui/styled-engine@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.26.0 '@emotion/cache': 11.13.5 @@ -9249,13 +9281,13 @@ snapshots: '@emotion/styled': 11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 - '@mui/system@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@mui/system@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.26.0 - '@mui/private-theming': 6.1.8(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@mui/styled-engine': 6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1) + '@mui/private-theming': 6.1.9(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/styled-engine': 6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1) '@mui/types': 7.2.19(types-react@19.0.0-rc.1) - '@mui/utils': 6.1.8(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.9(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -9293,11 +9325,23 @@ snapshots: optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/x-date-pickers@7.9.0(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@mui/utils@6.1.9(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/types': 7.2.19(types-react@19.0.0-rc.1) + '@types/prop-types': 15.7.13 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.0.0-rc.1 + react-is: 18.3.1 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + + '@mui/x-date-pickers@7.9.0(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.26.0 '@mui/base': 5.0.0-beta.62(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@mui/material': 6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/material': 6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@mui/system': 5.16.7(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@mui/utils': 5.16.6(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@types/react-transition-group': 4.4.11 @@ -9938,7 +9982,7 @@ snapshots: dependencies: remove-accents: 0.5.0 - '@tanstack/react-router@1.82.12(@tanstack/router-generator@1.82.10)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)': + '@tanstack/react-router@1.83.0(@tanstack/router-generator@1.83.0)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)': dependencies: '@tanstack/history': 1.81.9 '@tanstack/react-store': 0.6.1(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) @@ -9948,7 +9992,7 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 optionalDependencies: - '@tanstack/router-generator': 1.82.10 + '@tanstack/router-generator': 1.83.0 '@tanstack/react-store@0.6.1(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)': dependencies: @@ -9969,9 +10013,9 @@ snapshots: react: 19.0.0-rc.1 react-dom: 19.0.0-rc.1(react@19.0.0-rc.1) - '@tanstack/router-devtools@1.82.12(@tanstack/react-router@1.82.12(@tanstack/router-generator@1.82.10)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(csstype@3.1.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)': + '@tanstack/router-devtools@1.83.0(@tanstack/react-router@1.83.0(@tanstack/router-generator@1.83.0)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(csstype@3.1.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)': dependencies: - '@tanstack/react-router': 1.82.12(@tanstack/router-generator@1.82.10)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) + '@tanstack/react-router': 1.83.0(@tanstack/router-generator@1.83.0)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) react: 19.0.0-rc.1 @@ -9979,14 +10023,14 @@ snapshots: transitivePeerDependencies: - csstype - '@tanstack/router-generator@1.82.10': + '@tanstack/router-generator@1.83.0': dependencies: '@tanstack/virtual-file-routes': 1.81.9 - prettier: 3.3.3 + prettier: 3.4.1 tsx: 4.19.2 zod: 3.23.8 - '@tanstack/router-plugin@1.82.10(vite@5.4.11(@types/node@22.10.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0))': + '@tanstack/router-plugin@1.83.0(vite@5.4.11(@types/node@22.10.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0))': dependencies: '@babel/core': 7.26.0 '@babel/generator': 7.26.2 @@ -9996,7 +10040,7 @@ snapshots: '@babel/template': 7.25.9 '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 - '@tanstack/router-generator': 1.82.10 + '@tanstack/router-generator': 1.83.0 '@tanstack/virtual-file-routes': 1.81.9 '@types/babel__core': 7.20.5 '@types/babel__generator': 7.6.8 @@ -10011,9 +10055,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.82.12(@tanstack/router-generator@1.82.10)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(zod@3.23.8)': + '@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.83.0(@tanstack/router-generator@1.83.0)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(zod@3.23.8)': dependencies: - '@tanstack/react-router': 1.82.12(@tanstack/router-generator@1.82.10)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) + '@tanstack/react-router': 1.83.0(@tanstack/router-generator@1.83.0)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) zod: 3.23.8 '@tanstack/store@0.6.0': {} @@ -10107,7 +10151,7 @@ snapshots: dependencies: '@tauri-apps/api': 2.1.1 - '@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.3.3)': + '@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.4.1)': dependencies: '@babel/generator': 7.17.7 '@babel/parser': 7.26.2 @@ -10115,7 +10159,7 @@ snapshots: '@babel/types': 7.17.0 javascript-natural-sort: 0.7.1 lodash: 4.17.21 - prettier: 3.3.3 + prettier: 3.4.1 transitivePeerDependencies: - supports-color optional: true @@ -11789,12 +11833,12 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-config-standard@17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.16.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1))(eslint-plugin-n@17.14.0(eslint@8.57.1))(eslint-plugin-promise@7.2.0(eslint@8.57.1))(eslint@8.57.1): + eslint-config-standard@17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.16.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1))(eslint-plugin-n@17.14.0(eslint@8.57.1))(eslint-plugin-promise@7.2.1(eslint@8.57.1))(eslint@8.57.1): dependencies: eslint: 8.57.1 eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.16.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1) eslint-plugin-n: 17.14.0(eslint@8.57.1) - eslint-plugin-promise: 7.2.0(eslint@8.57.1) + eslint-plugin-promise: 7.2.1(eslint@8.57.1) eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.16.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)): dependencies: @@ -11870,16 +11914,16 @@ snapshots: minimatch: 9.0.5 semver: 7.6.3 - eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3): + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.4.1): dependencies: eslint: 8.57.1 - prettier: 3.3.3 + prettier: 3.4.1 prettier-linter-helpers: 1.0.0 synckit: 0.9.1 optionalDependencies: eslint-config-prettier: 9.1.0(eslint@8.57.1) - eslint-plugin-promise@7.2.0(eslint@8.57.1): + eslint-plugin-promise@7.2.1(eslint@8.57.1): dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) eslint: 8.57.1 @@ -12803,6 +12847,8 @@ snapshots: js-tokens@9.0.0: {} + js-tokens@9.0.1: {} + js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -12864,7 +12910,7 @@ snapshots: kind-of@6.0.3: {} - knip@5.37.2(@types/node@22.10.0)(typescript@5.7.2): + knip@5.38.1(@types/node@22.10.0)(typescript@5.7.2): dependencies: '@nodelib/fs.walk': 1.2.8 '@snyk/github-codeowners': 1.1.0 @@ -12878,7 +12924,7 @@ snapshots: picocolors: 1.1.1 picomatch: 4.0.2 pretty-ms: 9.1.0 - smol-toml: 1.3.0 + smol-toml: 1.3.1 strip-json-comments: 5.0.1 summary: 2.1.0 typescript: 5.7.2 @@ -12949,6 +12995,11 @@ snapshots: mlly: 1.7.3 pkg-types: 1.2.1 + local-pkg@0.5.1: + dependencies: + mlly: 1.7.3 + pkg-types: 1.2.1 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -13034,7 +13085,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.13: + magic-string@0.30.14: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -13053,13 +13104,13 @@ snapshots: escape-string-regexp: 4.0.0 optional: true - material-react-table@3.0.1(hfqzzv7ai2mdqkgutzco4rdyye): + material-react-table@3.0.1(6jmykk7zxkzevdzoaapf5k5sq4): dependencies: '@emotion/react': 11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@emotion/styled': 11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@mui/icons-material': 6.1.8(@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@mui/material': 6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/icons-material': 6.1.9(@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/material': 6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@tanstack/match-sorter-utils': 8.19.4 '@tanstack/react-table': 8.20.5(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) '@tanstack/react-virtual': 3.10.6(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) @@ -13354,13 +13405,6 @@ snapshots: mkdirp@3.0.1: {} - mlly@1.7.1: - dependencies: - acorn: 8.14.0 - pathe: 1.1.2 - pkg-types: 1.2.1 - ufo: 1.5.4 - mlly@1.7.3: dependencies: acorn: 8.14.0 @@ -13409,12 +13453,12 @@ snapshots: muggle-string@0.4.1: {} - mui-color-input@5.0.1(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1): + mui-color-input@5.0.1(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1): dependencies: '@ctrl/tinycolor': 4.1.0 '@emotion/react': 11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@emotion/styled': 11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@mui/material': 6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/material': 6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) react: 19.0.0-rc.1 react-dom: 19.0.0-rc.1(react@19.0.0-rc.1) optionalDependencies: @@ -13667,6 +13711,8 @@ snapshots: package-manager-detector@0.2.0: {} + package-manager-detector@0.2.5: {} + pako@2.1.0: {} parent-module@1.0.1: @@ -13906,21 +13952,21 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier-plugin-tailwindcss@0.6.9(@ianvs/prettier-plugin-sort-imports@4.4.0(prettier@3.3.3))(@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.3.3))(prettier@3.3.3): + prettier-plugin-tailwindcss@0.6.9(@ianvs/prettier-plugin-sort-imports@4.4.0(prettier@3.4.1))(@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.4.1))(prettier@3.4.1): dependencies: - prettier: 3.3.3 + prettier: 3.4.1 optionalDependencies: - '@ianvs/prettier-plugin-sort-imports': 4.4.0(prettier@3.3.3) - '@trivago/prettier-plugin-sort-imports': 4.3.0(prettier@3.3.3) + '@ianvs/prettier-plugin-sort-imports': 4.4.0(prettier@3.4.1) + '@trivago/prettier-plugin-sort-imports': 4.3.0(prettier@3.4.1) - prettier-plugin-toml@2.0.1(prettier@3.3.3): + prettier-plugin-toml@2.0.1(prettier@3.4.1): dependencies: '@taplo/lib': 0.4.0-alpha.2 - prettier: 3.3.3 + prettier: 3.4.1 prettier@2.8.8: {} - prettier@3.3.3: {} + prettier@3.4.1: {} pretty-hrtime@1.0.3: {} @@ -14006,20 +14052,20 @@ snapshots: react: 19.0.0-rc.1 react-dom: 19.0.0-rc.1(react@19.0.0-rc.1) - react-hook-form-mui@7.4.0(c6eqiv3v4ro6nnqx6e4soqhoku): + react-hook-form-mui@7.4.0(l2o4yer4mnv5n4s7ohpbf3i6j4): dependencies: - '@mui/material': 6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/material': 6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) react: 19.0.0-rc.1 react-hook-form: 7.52.1(react@19.0.0-rc.1) optionalDependencies: - '@mui/icons-material': 6.1.8(@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.8(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/icons-material': 6.1.9(@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@mui/material@6.1.9(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.5(@emotion/react@11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) react-hook-form@7.52.1(react@19.0.0-rc.1): dependencies: react: 19.0.0-rc.1 - react-i18next@15.1.1(i18next@24.0.2(typescript@5.7.2))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1): + react-i18next@15.1.2(i18next@24.0.2(typescript@5.7.2))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1): dependencies: '@babel/runtime': 7.26.0 html-parse-stringify: 3.0.1 @@ -14525,7 +14571,7 @@ snapshots: smart-buffer@4.2.0: {} - smol-toml@1.3.0: {} + smol-toml@1.3.1: {} snake-case@3.0.4: dependencies: @@ -14678,9 +14724,9 @@ snapshots: strip-json-comments@5.0.1: {} - strip-literal@2.1.0: + strip-literal@2.1.1: dependencies: - js-tokens: 9.0.0 + js-tokens: 9.0.1 style-to-object@1.0.6: dependencies: @@ -14977,6 +15023,8 @@ snapshots: tinyexec@0.3.0: {} + tinyexec@0.3.1: {} + tmp@0.2.3: {} to-fast-properties@2.0.0: @@ -15154,20 +15202,20 @@ snapshots: trough: 2.2.0 vfile: 6.0.1 - unimport@3.13.2(rollup@4.21.0): + unimport@3.13.4(rollup@4.21.0): dependencies: '@rollup/pluginutils': 5.1.3(rollup@4.21.0) acorn: 8.14.0 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 fast-glob: 3.3.2 - local-pkg: 0.5.0 - magic-string: 0.30.13 + local-pkg: 0.5.1 + magic-string: 0.30.14 mlly: 1.7.3 pathe: 1.1.2 pkg-types: 1.2.1 scule: 1.3.0 - strip-literal: 2.1.0 + strip-literal: 2.1.1 unplugin: 1.16.0 transitivePeerDependencies: - rollup @@ -15214,40 +15262,32 @@ snapshots: universalify@2.0.1: {} - unplugin-auto-import@0.18.5(rollup@4.21.0): + unplugin-auto-import@0.18.6(rollup@4.21.0): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.1.3(rollup@4.21.0) fast-glob: 3.3.2 - local-pkg: 0.5.0 - magic-string: 0.30.13 + local-pkg: 0.5.1 + magic-string: 0.30.14 minimatch: 9.0.5 - unimport: 3.13.2(rollup@4.21.0) + unimport: 3.13.4(rollup@4.21.0) unplugin: 1.16.0 transitivePeerDependencies: - rollup - unplugin-icons@0.20.1(@svgr/core@8.1.0(typescript@5.7.2))(webpack-sources@3.2.3): + unplugin-icons@0.20.2(@svgr/core@8.1.0(typescript@5.7.2)): dependencies: - '@antfu/install-pkg': 0.4.1 + '@antfu/install-pkg': 0.5.0 '@antfu/utils': 0.7.10 - '@iconify/utils': 2.1.29 + '@iconify/utils': 2.1.33 debug: 4.3.7 kolorist: 1.8.0 - local-pkg: 0.5.0 - unplugin: 1.14.1(webpack-sources@3.2.3) + local-pkg: 0.5.1 + unplugin: 1.16.0 optionalDependencies: '@svgr/core': 8.1.0(typescript@5.7.2) transitivePeerDependencies: - supports-color - - webpack-sources - - unplugin@1.14.1(webpack-sources@3.2.3): - dependencies: - acorn: 8.12.1 - webpack-virtual-modules: 0.6.2 - optionalDependencies: - webpack-sources: 3.2.3 unplugin@1.16.0: dependencies: @@ -15360,11 +15400,11 @@ snapshots: - rollup - supports-color - vite-plugin-sass-dts@1.3.29(postcss@8.4.49)(prettier@3.3.3)(sass-embedded@1.78.0)(vite@5.4.11(@types/node@22.10.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)): + vite-plugin-sass-dts@1.3.29(postcss@8.4.49)(prettier@3.4.1)(sass-embedded@1.78.0)(vite@5.4.11(@types/node@22.10.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)): dependencies: postcss: 8.4.49 postcss-js: 4.0.1(postcss@8.4.49) - prettier: 3.3.3 + prettier: 3.4.1 sass-embedded: 1.78.0 vite: 5.4.11(@types/node@22.10.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0) @@ -15426,9 +15466,6 @@ snapshots: web-streams-polyfill@3.3.3: {} - webpack-sources@3.2.3: - optional: true - webpack-virtual-modules@0.6.2: {} websocket@1.0.35: diff --git a/lede/target/linux/generic/backport-6.6/780-22-v6.12-r8169-add-support-for-RTL8126A-rev.b.patch b/lede/target/linux/generic/backport-6.6/780-22-v6.12-r8169-add-support-for-RTL8126A-rev.b.patch new file mode 100644 index 0000000000..5295fe235f --- /dev/null +++ b/lede/target/linux/generic/backport-6.6/780-22-v6.12-r8169-add-support-for-RTL8126A-rev.b.patch @@ -0,0 +1,245 @@ +From 69cb89981c7a181d857b634c0740e914d5df79ea Mon Sep 17 00:00:00 2001 +From: ChunHao Lin +Date: Fri, 30 Aug 2024 10:18:10 +0800 +Subject: [PATCH] r8169: add support for RTL8126A rev.b + +Add support for RTL8126A rev.b. Its XID is 0x64a. It is basically +based on the one with XID 0x649, but with different firmware file. + +Signed-off-by: ChunHao Lin +Reviewed-by: Heiner Kallweit +Link: https://patch.msgid.link/20240830021810.11993-1-hau@realtek.com +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/realtek/r8169.h | 1 + + drivers/net/ethernet/realtek/r8169_main.c | 42 ++++++++++++------- + .../net/ethernet/realtek/r8169_phy_config.c | 1 + + 3 files changed, 29 insertions(+), 15 deletions(-) + +--- a/drivers/net/ethernet/realtek/r8169.h ++++ b/drivers/net/ethernet/realtek/r8169.h +@@ -69,6 +69,7 @@ enum mac_version { + RTL_GIGA_MAC_VER_61, + RTL_GIGA_MAC_VER_63, + RTL_GIGA_MAC_VER_65, ++ RTL_GIGA_MAC_VER_66, + RTL_GIGA_MAC_NONE + }; + +--- a/drivers/net/ethernet/realtek/r8169_main.c ++++ b/drivers/net/ethernet/realtek/r8169_main.c +@@ -56,6 +56,7 @@ + #define FIRMWARE_8125A_3 "rtl_nic/rtl8125a-3.fw" + #define FIRMWARE_8125B_2 "rtl_nic/rtl8125b-2.fw" + #define FIRMWARE_8126A_2 "rtl_nic/rtl8126a-2.fw" ++#define FIRMWARE_8126A_3 "rtl_nic/rtl8126a-3.fw" + + #define TX_DMA_BURST 7 /* Maximum PCI burst, '7' is unlimited */ + #define InterFrameGap 0x03 /* 3 means InterFrameGap = the shortest one */ +@@ -138,6 +139,7 @@ static const struct { + /* reserve 62 for CFG_METHOD_4 in the vendor driver */ + [RTL_GIGA_MAC_VER_63] = {"RTL8125B", FIRMWARE_8125B_2}, + [RTL_GIGA_MAC_VER_65] = {"RTL8126A", FIRMWARE_8126A_2}, ++ [RTL_GIGA_MAC_VER_66] = {"RTL8126A", FIRMWARE_8126A_3}, + }; + + static const struct pci_device_id rtl8169_pci_tbl[] = { +@@ -1201,7 +1203,7 @@ static void rtl_writephy(struct rtl8169_ + case RTL_GIGA_MAC_VER_31: + r8168dp_2_mdio_write(tp, location, val); + break; +- case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_66: + r8168g_mdio_write(tp, location, val); + break; + default: +@@ -1216,7 +1218,7 @@ static int rtl_readphy(struct rtl8169_pr + case RTL_GIGA_MAC_VER_28: + case RTL_GIGA_MAC_VER_31: + return r8168dp_2_mdio_read(tp, location); +- case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_66: + return r8168g_mdio_read(tp, location); + default: + return r8169_mdio_read(tp, location); +@@ -1425,7 +1427,7 @@ static void rtl_set_d3_pll_down(struct r + case RTL_GIGA_MAC_VER_25 ... RTL_GIGA_MAC_VER_26: + case RTL_GIGA_MAC_VER_29 ... RTL_GIGA_MAC_VER_30: + case RTL_GIGA_MAC_VER_32 ... RTL_GIGA_MAC_VER_37: +- case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_66: + if (enable) + RTL_W8(tp, PMCH, RTL_R8(tp, PMCH) & ~D3_NO_PLL_DOWN); + else +@@ -1592,7 +1594,7 @@ static void __rtl8169_set_wol(struct rtl + break; + case RTL_GIGA_MAC_VER_34: + case RTL_GIGA_MAC_VER_37: +- case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_66: + if (wolopts) + rtl_mod_config2(tp, 0, PME_SIGNAL); + else +@@ -2071,6 +2073,7 @@ static void rtl_set_eee_txidle_timer(str + case RTL_GIGA_MAC_VER_61: + case RTL_GIGA_MAC_VER_63: + case RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_66: + tp->tx_lpi_timer = timer_val; + RTL_W16(tp, EEE_TXIDLE_TIMER_8125, timer_val); + break; +@@ -2200,6 +2203,7 @@ static enum mac_version rtl8169_get_mac_ + enum mac_version ver; + } mac_info[] = { + /* 8126A family. */ ++ { 0x7cf, 0x64a, RTL_GIGA_MAC_VER_66 }, + { 0x7cf, 0x649, RTL_GIGA_MAC_VER_65 }, + + /* 8125B family. */ +@@ -2471,6 +2475,7 @@ static void rtl_init_rxcfg(struct rtl816 + break; + case RTL_GIGA_MAC_VER_63: + case RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_66: + RTL_W32(tp, RxConfig, RX_FETCH_DFLT_8125 | RX_DMA_BURST | + RX_PAUSE_SLOT_ON); + break; +@@ -2657,7 +2662,7 @@ static void rtl_wait_txrx_fifo_empty(str + case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_61: + rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond, 100, 42); + break; +- case RTL_GIGA_MAC_VER_63 ... RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_63 ... RTL_GIGA_MAC_VER_66: + RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq); + rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond, 100, 42); + rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond_2, 100, 42); +@@ -2900,7 +2905,7 @@ static void rtl_enable_exit_l1(struct rt + case RTL_GIGA_MAC_VER_37 ... RTL_GIGA_MAC_VER_38: + rtl_eri_set_bits(tp, 0xd4, 0x0c00); + break; +- case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_66: + r8168_mac_ocp_modify(tp, 0xc0ac, 0, 0x1f80); + break; + default: +@@ -2914,7 +2919,7 @@ static void rtl_disable_exit_l1(struct r + case RTL_GIGA_MAC_VER_34 ... RTL_GIGA_MAC_VER_38: + rtl_eri_clear_bits(tp, 0xd4, 0x1f00); + break; +- case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_66: + r8168_mac_ocp_modify(tp, 0xc0ac, 0x1f80, 0); + break; + default: +@@ -2941,6 +2946,7 @@ static void rtl_hw_aspm_clkreq_enable(st + rtl_mod_config5(tp, 0, ASPM_en); + switch (tp->mac_version) { + case RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_66: + val8 = RTL_R8(tp, INT_CFG0_8125) | INT_CFG0_CLKREQEN; + RTL_W8(tp, INT_CFG0_8125, val8); + break; +@@ -2951,7 +2957,7 @@ static void rtl_hw_aspm_clkreq_enable(st + + switch (tp->mac_version) { + case RTL_GIGA_MAC_VER_46 ... RTL_GIGA_MAC_VER_48: +- case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_66: + /* reset ephy tx/rx disable timer */ + r8168_mac_ocp_modify(tp, 0xe094, 0xff00, 0); + /* chip can trigger L1.2 */ +@@ -2963,7 +2969,7 @@ static void rtl_hw_aspm_clkreq_enable(st + } else { + switch (tp->mac_version) { + case RTL_GIGA_MAC_VER_46 ... RTL_GIGA_MAC_VER_48: +- case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_66: + r8168_mac_ocp_modify(tp, 0xe092, 0x00ff, 0); + break; + default: +@@ -2972,6 +2978,7 @@ static void rtl_hw_aspm_clkreq_enable(st + + switch (tp->mac_version) { + case RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_66: + val8 = RTL_R8(tp, INT_CFG0_8125) & ~INT_CFG0_CLKREQEN; + RTL_W8(tp, INT_CFG0_8125, val8); + break; +@@ -3691,10 +3698,12 @@ static void rtl_hw_start_8125_common(str + /* disable new tx descriptor format */ + r8168_mac_ocp_modify(tp, 0xeb58, 0x0001, 0x0000); + +- if (tp->mac_version == RTL_GIGA_MAC_VER_65) ++ if (tp->mac_version == RTL_GIGA_MAC_VER_65 || ++ tp->mac_version == RTL_GIGA_MAC_VER_66) + RTL_W8(tp, 0xD8, RTL_R8(tp, 0xD8) & ~0x02); + +- if (tp->mac_version == RTL_GIGA_MAC_VER_65) ++ if (tp->mac_version == RTL_GIGA_MAC_VER_65 || ++ tp->mac_version == RTL_GIGA_MAC_VER_66) + r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0400); + else if (tp->mac_version == RTL_GIGA_MAC_VER_63) + r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0200); +@@ -3712,7 +3721,8 @@ static void rtl_hw_start_8125_common(str + r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0030); + r8168_mac_ocp_modify(tp, 0xe040, 0x1000, 0x0000); + r8168_mac_ocp_modify(tp, 0xea1c, 0x0003, 0x0001); +- if (tp->mac_version == RTL_GIGA_MAC_VER_65) ++ if (tp->mac_version == RTL_GIGA_MAC_VER_65 || ++ tp->mac_version == RTL_GIGA_MAC_VER_66) + r8168_mac_ocp_modify(tp, 0xea1c, 0x0300, 0x0000); + else + r8168_mac_ocp_modify(tp, 0xea1c, 0x0004, 0x0000); +@@ -3826,6 +3836,7 @@ static void rtl_hw_config(struct rtl8169 + [RTL_GIGA_MAC_VER_61] = rtl_hw_start_8125a_2, + [RTL_GIGA_MAC_VER_63] = rtl_hw_start_8125b, + [RTL_GIGA_MAC_VER_65] = rtl_hw_start_8126a, ++ [RTL_GIGA_MAC_VER_66] = rtl_hw_start_8126a, + }; + + if (hw_configs[tp->mac_version]) +@@ -3846,6 +3857,7 @@ static void rtl_hw_start_8125(struct rtl + break; + case RTL_GIGA_MAC_VER_63: + case RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_66: + for (i = 0xa00; i < 0xa80; i += 4) + RTL_W32(tp, i, 0); + RTL_W16(tp, INT_CFG1_8125, 0x0000); +@@ -4074,7 +4086,7 @@ static void rtl8169_cleanup(struct rtl81 + RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq); + rtl_loop_wait_high(tp, &rtl_txcfg_empty_cond, 100, 666); + break; +- case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_66: + rtl_enable_rxdvgate(tp); + fsleep(2000); + break; +@@ -4225,7 +4237,7 @@ static unsigned int rtl_quirk_packet_pad + + switch (tp->mac_version) { + case RTL_GIGA_MAC_VER_34: +- case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_66: + padto = max_t(unsigned int, padto, ETH_ZLEN); + break; + default: +@@ -5259,7 +5271,7 @@ static void rtl_hw_initialize(struct rtl + case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_48: + rtl_hw_init_8168g(tp); + break; +- case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_65: ++ case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_66: + rtl_hw_init_8125(tp); + break; + default: +--- a/drivers/net/ethernet/realtek/r8169_phy_config.c ++++ b/drivers/net/ethernet/realtek/r8169_phy_config.c +@@ -1159,6 +1159,7 @@ void r8169_hw_phy_config(struct rtl8169_ + [RTL_GIGA_MAC_VER_61] = rtl8125a_2_hw_phy_config, + [RTL_GIGA_MAC_VER_63] = rtl8125b_hw_phy_config, + [RTL_GIGA_MAC_VER_65] = rtl8126a_hw_phy_config, ++ [RTL_GIGA_MAC_VER_66] = rtl8126a_hw_phy_config, + }; + + if (phy_configs[ver]) diff --git a/lede/target/linux/generic/backport-6.6/780-23-v6.12-r8169-add-missing-MODULE_FIRMWARE-entry-for-RTL8126A.patch b/lede/target/linux/generic/backport-6.6/780-23-v6.12-r8169-add-missing-MODULE_FIRMWARE-entry-for-RTL8126A.patch new file mode 100644 index 0000000000..14234814ef --- /dev/null +++ b/lede/target/linux/generic/backport-6.6/780-23-v6.12-r8169-add-missing-MODULE_FIRMWARE-entry-for-RTL8126A.patch @@ -0,0 +1,25 @@ +From 3b067536daa4842adbf685accf47c899a26367d3 Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Wed, 18 Sep 2024 20:45:15 +0200 +Subject: [PATCH] r8169: add missing MODULE_FIRMWARE entry for RTL8126A rev.b + +Add a missing MODULE_FIRMWARE entry. + +Fixes: 69cb89981c7a ("r8169: add support for RTL8126A rev.b") +Signed-off-by: Heiner Kallweit +Link: https://patch.msgid.link/bb307611-d129-43f5-a7ff-bdb6b4044fce@gmail.com +Signed-off-by: Paolo Abeni +--- + drivers/net/ethernet/realtek/r8169_main.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/net/ethernet/realtek/r8169_main.c ++++ b/drivers/net/ethernet/realtek/r8169_main.c +@@ -708,6 +708,7 @@ MODULE_FIRMWARE(FIRMWARE_8107E_2); + MODULE_FIRMWARE(FIRMWARE_8125A_3); + MODULE_FIRMWARE(FIRMWARE_8125B_2); + MODULE_FIRMWARE(FIRMWARE_8126A_2); ++MODULE_FIRMWARE(FIRMWARE_8126A_3); + + static inline struct device *tp_to_dev(struct rtl8169_private *tp) + { diff --git a/lede/target/linux/generic/pending-6.6/451-block-partitions-populate-fwnode.patch b/lede/target/linux/generic/pending-6.6/451-block-partitions-populate-fwnode.patch index 2aef22879d..e279b71173 100644 --- a/lede/target/linux/generic/pending-6.6/451-block-partitions-populate-fwnode.patch +++ b/lede/target/linux/generic/pending-6.6/451-block-partitions-populate-fwnode.patch @@ -1,15 +1,42 @@ -From 7f4c9c534aabe1315669e076d3fe0af0fd374cda Mon Sep 17 00:00:00 2001 +From patchwork Tue Jul 30 19:25:59 2024 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Daniel Golle +X-Patchwork-Id: 13747816 +Date: Tue, 30 Jul 2024 20:25:59 +0100 From: Daniel Golle -Date: Thu, 30 May 2024 03:13:19 +0100 -Subject: [PATCH 2/9] block: partitions: populate fwnode +To: Rob Herring , Krzysztof Kozlowski , + Conor Dooley , Jens Axboe , + Daniel Golle , Christian Brauner , + Al Viro , Li Lingfeng , + Ming Lei , Christian Heusel , + =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , + Felix Fietkau , John Crispin , + Chad Monroe , Yangyu Chen , + Tianling Shen , Chuanhong Guo , + Chen Minqiang , devicetree@vger.kernel.org, + linux-kernel@vger.kernel.org, linux-block@vger.kernel.org +Subject: [PATCH v5 2/4] block: partitions: populate fwnode +Message-ID: + <3051ac090ad3b3e2f5adb6b67c923261ead729a5.1722365899.git.daniel@makrotopia.org> +References: +Precedence: bulk +X-Mailing-List: linux-block@vger.kernel.org +List-Id: +List-Subscribe: +List-Unsubscribe: +MIME-Version: 1.0 +Content-Disposition: inline +In-Reply-To: -Let block partitions to be represented by a firmware node and hence -allow them to being referenced e.g. for use with blk-nvmem. +Assign matching firmware nodes to block partitions in order to allow +them to be referenced e.g. as NVMEM providers. Signed-off-by: Daniel Golle --- - block/partitions/core.c | 41 +++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 41 insertions(+) + block/partitions/core.c | 72 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 72 insertions(+) --- a/block/partitions/core.c +++ b/block/partitions/core.c @@ -22,36 +49,70 @@ Signed-off-by: Daniel Golle #include "check.h" static int (*const check_part[])(struct parsed_partitions *) = { -@@ -292,6 +294,40 @@ static ssize_t whole_disk_show(struct de +@@ -292,6 +294,74 @@ static ssize_t whole_disk_show(struct de } static const DEVICE_ATTR(whole_disk, 0444, whole_disk_show, NULL); ++static bool part_meta_match(const char *attr, const char *member, size_t length) ++{ ++ /* check if length of attr exceeds specified maximum length */ ++ if (strnlen(attr, length) == length) ++ return false; ++ ++ /* return true if strings match */ ++ return !strncmp(attr, member, length); ++} ++ +static struct fwnode_handle *find_partition_fwnode(struct block_device *bdev) +{ + struct fwnode_handle *fw_parts, *fw_part; + struct device *ddev = disk_to_dev(bdev->bd_disk); + const char *partname, *uuid; + u32 partno; ++ bool got_uuid, got_partname, got_partno; + + fw_parts = device_get_named_child_node(ddev, "partitions"); + if (!fw_parts) + return NULL; + + fwnode_for_each_child_node(fw_parts, fw_part) { -+ if (!fwnode_property_read_string(fw_part, "uuid", &uuid) && -+ (!bdev->bd_meta_info || strncmp(uuid, -+ bdev->bd_meta_info->uuid, -+ PARTITION_META_INFO_UUIDLTH))) ++ got_uuid = false; ++ got_partname = false; ++ got_partno = false; ++ /* ++ * In case 'uuid' is defined in the partitions firmware node ++ * require partition meta info being present and the specified ++ * uuid to match. ++ */ ++ got_uuid = !fwnode_property_read_string(fw_part, "uuid", &uuid); ++ if (got_uuid && (!bdev->bd_meta_info || ++ !part_meta_match(uuid, bdev->bd_meta_info->uuid, ++ PARTITION_META_INFO_UUIDLTH))) + continue; + -+ if (!fwnode_property_read_string(fw_part, "partname", &partname) && -+ (!bdev->bd_meta_info || strncmp(partname, -+ bdev->bd_meta_info->volname, -+ PARTITION_META_INFO_VOLNAMELTH))) ++ /* ++ * In case 'partname' is defined in the partitions firmware node ++ * require partition meta info being present and the specified ++ * volname to match. ++ */ ++ got_partname = !fwnode_property_read_string(fw_part, "partname", ++ &partname); ++ if (got_partname && (!bdev->bd_meta_info || ++ !part_meta_match(partname, ++ bdev->bd_meta_info->volname, ++ PARTITION_META_INFO_VOLNAMELTH))) + continue; + -+ if (!fwnode_property_read_u32(fw_part, "partno", &partno) && -+ bdev->bd_partno != partno) ++ /* ++ * In case 'partno' is defined in the partitions firmware node ++ * the specified partno needs to match. ++ */ ++ got_partno = !fwnode_property_read_u32(fw_part, "partno", &partno); ++ if (got_partno && bdev->bd_partno != partno) ++ continue; ++ ++ /* Skip if no matching criteria is present in firmware node */ ++ if (!got_uuid && !got_partname && !got_partno) + continue; + + return fw_part; @@ -63,7 +124,7 @@ Signed-off-by: Daniel Golle /* * Must be called either with open_mutex held, before a disk can be opened or * after all disk users are gone. -@@ -374,6 +410,8 @@ static struct block_device *add_partitio +@@ -374,6 +444,8 @@ static struct block_device *add_partitio goto out_put; } diff --git a/lede/target/linux/generic/pending-6.6/452-block-add-support-for-notifications.patch b/lede/target/linux/generic/pending-6.6/452-block-add-support-for-notifications.patch index c5a3391e45..cad3fbfa90 100644 --- a/lede/target/linux/generic/pending-6.6/452-block-add-support-for-notifications.patch +++ b/lede/target/linux/generic/pending-6.6/452-block-add-support-for-notifications.patch @@ -1,7 +1,34 @@ -From e07ace307ce598847074a096f408bec0e3a392ed Mon Sep 17 00:00:00 2001 +From patchwork Tue Jul 30 19:26:42 2024 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Daniel Golle +X-Patchwork-Id: 13747817 +Date: Tue, 30 Jul 2024 20:26:42 +0100 From: Daniel Golle -Date: Thu, 30 May 2024 03:14:34 +0100 -Subject: [PATCH 3/9] block: add support for notifications +To: Rob Herring , Krzysztof Kozlowski , + Conor Dooley , Jens Axboe , + Daniel Golle , Christian Brauner , + Al Viro , Li Lingfeng , + Ming Lei , Christian Heusel , + =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , + Felix Fietkau , John Crispin , + Chad Monroe , Yangyu Chen , + Tianling Shen , Chuanhong Guo , + Chen Minqiang , devicetree@vger.kernel.org, + linux-kernel@vger.kernel.org, linux-block@vger.kernel.org +Subject: [PATCH v5 3/4] block: add support for notifications +Message-ID: + +References: +Precedence: bulk +X-Mailing-List: linux-block@vger.kernel.org +List-Id: +List-Subscribe: +List-Unsubscribe: +MIME-Version: 1.0 +Content-Disposition: inline +In-Reply-To: Add notifier block to notify other subsystems about the addition or removal of block devices. @@ -10,9 +37,9 @@ Signed-off-by: Daniel Golle --- block/Kconfig | 6 +++ block/Makefile | 1 + - block/blk-notify.c | 88 ++++++++++++++++++++++++++++++++++++++++++ - include/linux/blkdev.h | 8 ++++ - 4 files changed, 103 insertions(+) + block/blk-notify.c | 87 ++++++++++++++++++++++++++++++++++++++++++ + include/linux/blkdev.h | 11 ++++++ + 4 files changed, 105 insertions(+) create mode 100644 block/blk-notify.c --- a/block/Kconfig @@ -39,7 +66,7 @@ Signed-off-by: Daniel Golle +obj-$(CONFIG_BLOCK_NOTIFIERS) += blk-notify.o --- /dev/null +++ b/block/blk-notify.c -@@ -0,0 +1,88 @@ +@@ -0,0 +1,87 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Notifiers for addition and removal of block devices @@ -97,7 +124,6 @@ Signed-off-by: Daniel Golle + list_add_tail(&new_blkdev->list, &blk_devices); + raw_notifier_call_chain(&blk_notifier_list, BLK_DEVICE_ADD, dev); + mutex_unlock(&blk_notifier_lock); -+ + return 0; +} + @@ -130,16 +156,19 @@ Signed-off-by: Daniel Golle +device_initcall(blk_notifications_init); --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h -@@ -1564,4 +1564,12 @@ struct io_comp_batch { +@@ -1564,4 +1564,15 @@ struct io_comp_batch { #define DEFINE_IO_COMP_BATCH(name) struct io_comp_batch name = { } + -+#ifdef CONFIG_BLOCK_NOTIFIERS +#define BLK_DEVICE_ADD 1 +#define BLK_DEVICE_REMOVE 2 ++#if defined(CONFIG_BLOCK_NOTIFIERS) +void blk_register_notify(struct notifier_block *nb); +void blk_unregister_notify(struct notifier_block *nb); ++#else ++static inline void blk_register_notify(struct notifier_block *nb) { }; ++static inline void blk_unregister_notify(struct notifier_block *nb) { }; +#endif + #endif /* _LINUX_BLKDEV_H */ diff --git a/lede/target/linux/generic/pending-6.6/453-block-add-new-genhd-flag-GENHD_FL_NVMEM.patch b/lede/target/linux/generic/pending-6.6/453-block-add-new-genhd-flag-GENHD_FL_NVMEM.patch index 5997680e47..79abcd0e6b 100644 --- a/lede/target/linux/generic/pending-6.6/453-block-add-new-genhd-flag-GENHD_FL_NVMEM.patch +++ b/lede/target/linux/generic/pending-6.6/453-block-add-new-genhd-flag-GENHD_FL_NVMEM.patch @@ -1,7 +1,34 @@ -From f4487fa1cb7e55b3c17a33f41b9c9d66f4f853b7 Mon Sep 17 00:00:00 2001 +From patchwork Tue Jul 30 19:27:07 2024 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Daniel Golle +X-Patchwork-Id: 13747818 +Date: Tue, 30 Jul 2024 20:27:07 +0100 From: Daniel Golle -Date: Thu, 30 May 2024 03:14:49 +0100 -Subject: [PATCH 4/9] block: add new genhd flag GENHD_FL_NVMEM +To: Rob Herring , Krzysztof Kozlowski , + Conor Dooley , Jens Axboe , + Daniel Golle , Christian Brauner , + Al Viro , Li Lingfeng , + Ming Lei , Christian Heusel , + =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , + Felix Fietkau , John Crispin , + Chad Monroe , Yangyu Chen , + Tianling Shen , Chuanhong Guo , + Chen Minqiang , devicetree@vger.kernel.org, + linux-kernel@vger.kernel.org, linux-block@vger.kernel.org +Subject: [PATCH v5 4/4] block: add new genhd flag GENHD_FL_NVMEM +Message-ID: + <311ea569c23ce14e2896cd3b069dc494c58c49c2.1722365899.git.daniel@makrotopia.org> +References: +Precedence: bulk +X-Mailing-List: linux-block@vger.kernel.org +List-Id: +List-Subscribe: +List-Unsubscribe: +MIME-Version: 1.0 +Content-Disposition: inline +In-Reply-To: Add new flag to destinguish block devices which may act as an NVMEM provider. diff --git a/lede/target/linux/mediatek/patches-6.6/041-block-fit-partition-parser.patch b/lede/target/linux/mediatek/patches-6.6/041-block-fit-partition-parser.patch index b5e9b4bdd5..72233d5fcd 100644 --- a/lede/target/linux/mediatek/patches-6.6/041-block-fit-partition-parser.patch +++ b/lede/target/linux/mediatek/patches-6.6/041-block-fit-partition-parser.patch @@ -92,7 +92,7 @@ Subject: [PATCH] kernel: add block fit partition parser #ifdef CONFIG_SGI_PARTITION sgi_partition, #endif -@@ -430,6 +436,11 @@ static struct block_device *add_partitio +@@ -462,6 +468,11 @@ static struct block_device *add_partitio goto out_del; } @@ -104,7 +104,7 @@ Subject: [PATCH] kernel: add block fit partition parser /* everything is up and running, commence */ err = xa_insert(&disk->part_tbl, partno, bdev, GFP_KERNEL); if (err) -@@ -624,6 +635,11 @@ static bool blk_add_partition(struct gen +@@ -654,6 +665,11 @@ static bool blk_add_partition(struct gen (state->parts[p].flags & ADDPART_FLAG_RAID)) md_autodetect_dev(part->bd_dev); diff --git a/mihomo/adapter/inbound/listen.go b/mihomo/adapter/inbound/listen.go index 318c9675db..ad944006a2 100644 --- a/mihomo/adapter/inbound/listen.go +++ b/mihomo/adapter/inbound/listen.go @@ -2,7 +2,9 @@ package inbound import ( "context" + "fmt" "net" + "net/netip" "sync" "github.com/metacubex/mihomo/component/keepalive" @@ -42,6 +44,27 @@ func MPTCP() bool { } func ListenContext(ctx context.Context, network, address string) (net.Listener, error) { + switch network { // like net.Resolver.internetAddrList but filter domain to avoid call net.Resolver.lookupIPAddr + case "tcp", "tcp4", "tcp6", "udp", "udp4", "udp6", "ip", "ip4", "ip6": + if host, port, err := net.SplitHostPort(address); err == nil { + switch host { + case "localhost": + switch network { + case "tcp6", "udp6", "ip6": + address = net.JoinHostPort("::1", port) + default: + address = net.JoinHostPort("127.0.0.1", port) + } + case "": // internetAddrList can handle this special case + break + default: + if _, err := netip.ParseAddr(host); err != nil { // not ip + return nil, fmt.Errorf("invalid network address: %s", address) + } + } + } + } + mutex.RLock() defer mutex.RUnlock() return lc.Listen(ctx, network, address) diff --git a/mihomo/adapter/provider/parser.go b/mihomo/adapter/provider/parser.go index b0db5db340..b305df7f89 100644 --- a/mihomo/adapter/provider/parser.go +++ b/mihomo/adapter/provider/parser.go @@ -66,6 +66,7 @@ type proxyProviderSchema struct { ExcludeFilter string `provider:"exclude-filter,omitempty"` ExcludeType string `provider:"exclude-type,omitempty"` DialerProxy string `provider:"dialer-proxy,omitempty"` + SizeLimit int64 `provider:"size-limit,omitempty"` HealthCheck healthCheckSchema `provider:"health-check,omitempty"` Override OverrideSchema `provider:"override,omitempty"` @@ -111,7 +112,7 @@ func ParseProxyProvider(name string, mapping map[string]any) (types.ProxyProvide return nil, fmt.Errorf("%w: %s", errSubPath, path) } } - vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, schema.Header, resource.DefaultHttpTimeout) + vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, schema.Header, resource.DefaultHttpTimeout, schema.SizeLimit) default: return nil, fmt.Errorf("%w: %s", errVehicleType, schema.Type) } diff --git a/mihomo/component/resource/vehicle.go b/mihomo/component/resource/vehicle.go index 7c3cb1c2a1..18cebf002c 100644 --- a/mihomo/component/resource/vehicle.go +++ b/mihomo/component/resource/vehicle.go @@ -84,12 +84,13 @@ func NewFileVehicle(path string) *FileVehicle { } type HTTPVehicle struct { - url string - path string - proxy string - header http.Header - timeout time.Duration - provider types.ProxyProvider + url string + path string + proxy string + header http.Header + timeout time.Duration + sizeLimit int64 + provider types.ProxyProvider } func (h *HTTPVehicle) Url() string { @@ -151,7 +152,11 @@ func (h *HTTPVehicle) Read(ctx context.Context, oldHash utils.HashType) (buf []b err = errors.New(resp.Status) return } - buf, err = io.ReadAll(resp.Body) + var reader io.Reader = resp.Body + if h.sizeLimit > 0 { + reader = io.LimitReader(reader, h.sizeLimit) + } + buf, err = io.ReadAll(reader) if err != nil { return } @@ -166,12 +171,13 @@ func (h *HTTPVehicle) Read(ctx context.Context, oldHash utils.HashType) (buf []b return } -func NewHTTPVehicle(url string, path string, proxy string, header http.Header, timeout time.Duration) *HTTPVehicle { +func NewHTTPVehicle(url string, path string, proxy string, header http.Header, timeout time.Duration, sizeLimit int64) *HTTPVehicle { return &HTTPVehicle{ - url: url, - path: path, - proxy: proxy, - header: header, - timeout: timeout, + url: url, + path: path, + proxy: proxy, + header: header, + timeout: timeout, + sizeLimit: sizeLimit, } } diff --git a/mihomo/component/updater/update_geo.go b/mihomo/component/updater/update_geo.go index bba0dabd2e..719a521515 100644 --- a/mihomo/component/updater/update_geo.go +++ b/mihomo/component/updater/update_geo.go @@ -45,7 +45,7 @@ func SetGeoUpdateInterval(newGeoUpdateInterval int) { } func UpdateMMDB() (err error) { - vehicle := resource.NewHTTPVehicle(geodata.MmdbUrl(), C.Path.MMDB(), "", nil, defaultHttpTimeout) + vehicle := resource.NewHTTPVehicle(geodata.MmdbUrl(), C.Path.MMDB(), "", nil, defaultHttpTimeout, 0) var oldHash utils.HashType if buf, err := os.ReadFile(vehicle.Path()); err == nil { oldHash = utils.MakeHash(buf) @@ -76,7 +76,7 @@ func UpdateMMDB() (err error) { } func UpdateASN() (err error) { - vehicle := resource.NewHTTPVehicle(geodata.ASNUrl(), C.Path.ASN(), "", nil, defaultHttpTimeout) + vehicle := resource.NewHTTPVehicle(geodata.ASNUrl(), C.Path.ASN(), "", nil, defaultHttpTimeout, 0) var oldHash utils.HashType if buf, err := os.ReadFile(vehicle.Path()); err == nil { oldHash = utils.MakeHash(buf) @@ -109,7 +109,7 @@ func UpdateASN() (err error) { func UpdateGeoIp() (err error) { geoLoader, err := geodata.GetGeoDataLoader("standard") - vehicle := resource.NewHTTPVehicle(geodata.GeoIpUrl(), C.Path.GeoIP(), "", nil, defaultHttpTimeout) + vehicle := resource.NewHTTPVehicle(geodata.GeoIpUrl(), C.Path.GeoIP(), "", nil, defaultHttpTimeout, 0) var oldHash utils.HashType if buf, err := os.ReadFile(vehicle.Path()); err == nil { oldHash = utils.MakeHash(buf) @@ -139,7 +139,7 @@ func UpdateGeoIp() (err error) { func UpdateGeoSite() (err error) { geoLoader, err := geodata.GetGeoDataLoader("standard") - vehicle := resource.NewHTTPVehicle(geodata.GeoSiteUrl(), C.Path.GeoSite(), "", nil, defaultHttpTimeout) + vehicle := resource.NewHTTPVehicle(geodata.GeoSiteUrl(), C.Path.GeoSite(), "", nil, defaultHttpTimeout, 0) var oldHash utils.HashType if buf, err := os.ReadFile(vehicle.Path()); err == nil { oldHash = utils.MakeHash(buf) diff --git a/mihomo/docs/config.yaml b/mihomo/docs/config.yaml index e75e5bd59b..5e83eea376 100644 --- a/mihomo/docs/config.yaml +++ b/mihomo/docs/config.yaml @@ -930,6 +930,7 @@ proxy-providers: interval: 3600 path: ./provider1.yaml # 默认只允许存储在 mihomo 的 Home Dir,如果想存储到任意位置,添加环境变量 SKIP_SAFE_PATH_CHECK=1 proxy: DIRECT + # size-limit: 10240 # 限制下载文件最大为10kb,默认为0即不限制文件大小 header: User-Agent: - "Clash/v1.18.0" @@ -977,6 +978,7 @@ rule-providers: type: http # http 的 path 可空置,默认储存路径为 homedir 的 rules 文件夹,文件名为 url 的 md5 url: "url" proxy: DIRECT + # size-limit: 10240 # 限制下载文件最大为10kb,默认为0即不限制文件大小 rule2: behavior: classical interval: 259200 diff --git a/mihomo/rules/provider/parse.go b/mihomo/rules/provider/parse.go index 3bd8f54c8e..b04096fb3c 100644 --- a/mihomo/rules/provider/parse.go +++ b/mihomo/rules/provider/parse.go @@ -16,13 +16,14 @@ var ( ) type ruleProviderSchema struct { - Type string `provider:"type"` - Behavior string `provider:"behavior"` - Path string `provider:"path,omitempty"` - URL string `provider:"url,omitempty"` - Proxy string `provider:"proxy,omitempty"` - Format string `provider:"format,omitempty"` - Interval int `provider:"interval,omitempty"` + Type string `provider:"type"` + Behavior string `provider:"behavior"` + Path string `provider:"path,omitempty"` + URL string `provider:"url,omitempty"` + Proxy string `provider:"proxy,omitempty"` + Format string `provider:"format,omitempty"` + Interval int `provider:"interval,omitempty"` + SizeLimit int64 `provider:"size-limit,omitempty"` } func ParseRuleProvider(name string, mapping map[string]interface{}, parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) (P.RuleProvider, error) { @@ -53,7 +54,7 @@ func ParseRuleProvider(name string, mapping map[string]interface{}, parse func(t return nil, fmt.Errorf("%w: %s", errSubPath, path) } } - vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, nil, resource.DefaultHttpTimeout) + vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, nil, resource.DefaultHttpTimeout, schema.SizeLimit) default: return nil, fmt.Errorf("unsupported vehicle type: %s", schema.Type) } diff --git a/openwrt-packages/luci-app-design-config/Makefile b/openwrt-packages/luci-app-design-config/Makefile new file mode 100644 index 0000000000..029ed20a23 --- /dev/null +++ b/openwrt-packages/luci-app-design-config/Makefile @@ -0,0 +1,17 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-design-config + +PKG_MAINTAINER:=gngpp + +LUCI_TITLE:=LuCI page for Design Config +LUCI_PKGARCH:=all +LUCI_DEPENDS:=+luci-compat + +define Package/$(PKG_NAME)/conffiles +/etc/config/design +endef + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/openwrt-packages/luci-app-design-config/README.md b/openwrt-packages/luci-app-design-config/README.md new file mode 100644 index 0000000000..93b7e22533 --- /dev/null +++ b/openwrt-packages/luci-app-design-config/README.md @@ -0,0 +1 @@ +# luci-app-design-config \ No newline at end of file diff --git a/openwrt-packages/luci-app-design-config/luasrc/controller/design-config.lua b/openwrt-packages/luci-app-design-config/luasrc/controller/design-config.lua new file mode 100644 index 0000000000..f6529fbc50 --- /dev/null +++ b/openwrt-packages/luci-app-design-config/luasrc/controller/design-config.lua @@ -0,0 +1,10 @@ +module("luci.controller.design-config", package.seeall) + +function index() + if not nixio.fs.access('/www/luci-static/design/css/style.css') then + return + end + + local page = entry({"admin", "system", "design-config"}, form("design-config"), _("Design Config"), 90) + page.acl_depends = { "luci-app-design-config" } +end diff --git a/openwrt-packages/luci-app-design-config/luasrc/model/cbi/design-config.lua b/openwrt-packages/luci-app-design-config/luasrc/model/cbi/design-config.lua new file mode 100644 index 0000000000..8ce99fae20 --- /dev/null +++ b/openwrt-packages/luci-app-design-config/luasrc/model/cbi/design-config.lua @@ -0,0 +1,58 @@ +local nxfs = require 'nixio.fs' +local nutil = require 'nixio.util' +local name = 'design' +local uci = require 'luci.model.uci'.cursor() + +local mode, navbar, navbar_proxy +if nxfs.access('/etc/config/design') then + mode = uci:get_first('design', 'global', 'mode') + navbar = uci:get_first('design', 'global', 'navbar') + navbar_proxy = uci:get_first('design', 'global', 'navbar_proxy') +end + +-- [[ 设置 ]]-- +br = SimpleForm('config', translate('Design Config'), translate('Here you can set the mode of the theme and change the proxy tool icon in the navigation bar. [Recommend Chrome]')) +br.reset = false +br.submit = false +s = br:section(SimpleSection) + +o = s:option(ListValue, 'mode', translate('Theme mode')) +o:value('normal', translate('Follow System')) +o:value('light', translate('Force Light')) +o:value('dark', translate('Force Dark')) +o.default = mode +o.rmempty = false +o.description = translate('You can choose Theme color mode here') + +o = s:option(ListValue, 'navbar', translate('Navigation bar setting')) +o:value('display', translate('Display navigation bar')) +o:value('close', translate('Close navigation bar')) +o.default = navbar +o.rmempty = false +o.description = translate('The navigation bar is display by default') + +o = s:option(ListValue, 'navbar_proxy', translate('Navigation bar proxy')) +o:value('openclash', 'openclash') +o:value('shadowsocksr', 'shadowsocksr') +o:value('vssr', 'vssr') +o:value('passwall', 'passwall') +o:value('passwall2', 'passwall2') +o.default = navbar_proxy +o.rmempty = false +o.description = translate('OpenClash by default') + +o = s:option(Button, 'save', translate('Save Changes')) +o.inputstyle = 'reload' + +function br.handle(self, state, data) + if (state == FORM_VALID and data.mode ~= nil and data.navbar ~= nil and data.navbar_proxy ~= nil) then + nxfs.writefile('/tmp/aaa', data) + for key, value in pairs(data) do + uci:set('design','@global[0]',key,value) + end + uci:commit('design') + end + return true +end + +return br diff --git a/openwrt-packages/luci-app-design-config/luasrc/view/design-config/other_button.htm b/openwrt-packages/luci-app-design-config/luasrc/view/design-config/other_button.htm new file mode 100644 index 0000000000..1c391ad984 --- /dev/null +++ b/openwrt-packages/luci-app-design-config/luasrc/view/design-config/other_button.htm @@ -0,0 +1,7 @@ +<%+cbi/valueheader%> + <% if self:cfgvalue(section) ~= false then %> + " style="display: <%= display %>" type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> /> + <% else %> + - + <% end %> +<%+cbi/valuefooter%> diff --git a/openwrt-packages/luci-app-design-config/luasrc/view/design-config/other_dvalue.htm b/openwrt-packages/luci-app-design-config/luasrc/view/design-config/other_dvalue.htm new file mode 100644 index 0000000000..296c61e4d6 --- /dev/null +++ b/openwrt-packages/luci-app-design-config/luasrc/view/design-config/other_dvalue.htm @@ -0,0 +1,8 @@ +<%+cbi/valueheader%> + +<% + local val = self:cfgvalue(section) or self.default or "" + write(pcdata(val)) +%> + +<%+cbi/valuefooter%> diff --git a/openwrt-packages/luci-app-design-config/po/zh-cn/design-config.po b/openwrt-packages/luci-app-design-config/po/zh-cn/design-config.po new file mode 100644 index 0000000000..af48e4c087 --- /dev/null +++ b/openwrt-packages/luci-app-design-config/po/zh-cn/design-config.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8\n" + +msgid "Design Config" +msgstr "Design 主题设置" + +msgid "Here you can set the mode of the theme and change the proxy tool icon in the navigation bar. [Recommend Chrome]" +msgstr "这里可以设置主题的模式和更换导航栏的代理工具图标。[建议使用 Chrome]" + +msgid "Theme mode" +msgstr "主题模式" + +msgid "Follow System" +msgstr "跟随系统" + +msgid "Force Light" +msgstr "强制亮色" + +msgid "Force Dark" +msgstr "强制暗色" + +msgid "You can choose Theme color mode here" +msgstr "你可以选择喜欢的主题模式" + +msgid "Navigation bar setting" +msgstr "导航栏设置" + +msgid "Display navigation bar" +msgstr "显示导航栏" + +msgid "Close navigation bar" +msgstr "关闭导航栏" + +msgid "The navigation bar is display by default" +msgstr "默认显示导航栏" + +msgid "Navigation bar proxy" +msgstr "导航栏代理" + +msgid "OpenClash by default" +msgstr "默认 OpenClash" + +msgid "Save Changes" +msgstr "保存更改" \ No newline at end of file diff --git a/openwrt-packages/luci-app-design-config/po/zh_Hans b/openwrt-packages/luci-app-design-config/po/zh_Hans new file mode 120000 index 0000000000..41451e4a19 --- /dev/null +++ b/openwrt-packages/luci-app-design-config/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/openwrt-packages/luci-app-design-config/root/etc/config/design b/openwrt-packages/luci-app-design-config/root/etc/config/design new file mode 100644 index 0000000000..faa653576f --- /dev/null +++ b/openwrt-packages/luci-app-design-config/root/etc/config/design @@ -0,0 +1,4 @@ +config global + option mode 'dark' + option navbar 'display' + option navbar_proxy 'openclash' \ No newline at end of file diff --git a/openwrt-packages/luci-app-design-config/root/etc/uci-defaults/luci-design-config b/openwrt-packages/luci-app-design-config/root/etc/uci-defaults/luci-design-config new file mode 100644 index 0000000000..935d7c8be5 --- /dev/null +++ b/openwrt-packages/luci-app-design-config/root/etc/uci-defaults/luci-design-config @@ -0,0 +1,6 @@ +#!/bin/sh + +sed -i 's/cbi.submit\"] = true/cbi.submit\"] = \"1\"/g' /usr/lib/lua/luci/dispatcher.lua + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/openwrt-packages/luci-app-design-config/root/usr/share/rpcd/acl.d/luci-app-design-config.json b/openwrt-packages/luci-app-design-config/root/usr/share/rpcd/acl.d/luci-app-design-config.json new file mode 100644 index 0000000000..c439886f6a --- /dev/null +++ b/openwrt-packages/luci-app-design-config/root/usr/share/rpcd/acl.d/luci-app-design-config.json @@ -0,0 +1,11 @@ +{ + "luci-app-design-config": { + "description": "Grant UCI access for luci-app-design-config", + "read": { + "uci": [ "design" ] + }, + "write": { + "uci": [ "design" ] + } + } +} diff --git a/shadowsocks-rust/Cargo.lock b/shadowsocks-rust/Cargo.lock index 3814d6a8dc..075e238766 100644 --- a/shadowsocks-rust/Cargo.lock +++ b/shadowsocks-rust/Cargo.lock @@ -315,9 +315,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.5.4" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" +checksum = "b8ee0c1824c4dea5b5f81736aff91bae041d2c07ee1192bec91054e10e3e601e" dependencies = [ "arrayref", "arrayvec", @@ -1882,9 +1882,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.165" +version = "0.2.166" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb4d3d38eab6c5239a362fa8bae48c03baf980a6e7079f063942d563ef3533e" +checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36" [[package]] name = "libloading" diff --git a/shadowsocks-rust/crates/shadowsocks-service/src/local/loadbalancing/server_data.rs b/shadowsocks-rust/crates/shadowsocks-service/src/local/loadbalancing/server_data.rs index 9a3cac8fbd..bce11ce0c4 100644 --- a/shadowsocks-rust/crates/shadowsocks-service/src/local/loadbalancing/server_data.rs +++ b/shadowsocks-rust/crates/shadowsocks-service/src/local/loadbalancing/server_data.rs @@ -94,7 +94,6 @@ impl ServerIdent { max_server_rtt: Duration, check_window: Duration, ) -> ServerIdent { - #[allow(unused_mut)] let mut connect_opts = context.connect_opts_ref().clone(); #[cfg(any(target_os = "linux", target_os = "android"))] diff --git a/shadowsocks-rust/crates/shadowsocks-service/src/server/mod.rs b/shadowsocks-rust/crates/shadowsocks-service/src/server/mod.rs index 1bea33f305..c4a7d7d584 100644 --- a/shadowsocks-rust/crates/shadowsocks-service/src/server/mod.rs +++ b/shadowsocks-rust/crates/shadowsocks-service/src/server/mod.rs @@ -104,6 +104,9 @@ pub async fn run(config: Config) -> io::Result<()> { server_builder.set_dns_resolver(r.clone()); } + let mut connect_opts = connect_opts.clone(); + let accept_opts = accept_opts.clone(); + #[cfg(any(target_os = "linux", target_os = "android"))] if let Some(fwmark) = inst.outbound_fwmark { connect_opts.fwmark = Some(fwmark); @@ -117,8 +120,8 @@ pub async fn run(config: Config) -> io::Result<()> { connect_opts.bind_interface = Some(bind_interface); } - server_builder.set_connect_opts(connect_opts.clone()); - server_builder.set_accept_opts(accept_opts.clone()); + server_builder.set_connect_opts(connect_opts); + server_builder.set_accept_opts(accept_opts); if let Some(c) = config.udp_max_associations { server_builder.set_udp_capacity(c); diff --git a/shadowsocks-rust/crates/shadowsocks-service/src/server/server.rs b/shadowsocks-rust/crates/shadowsocks-service/src/server/server.rs index fffbefd003..b65b40b1b2 100644 --- a/shadowsocks-rust/crates/shadowsocks-service/src/server/server.rs +++ b/shadowsocks-rust/crates/shadowsocks-service/src/server/server.rs @@ -24,7 +24,7 @@ use super::{context::ServiceContext, tcprelay::TcpServer, udprelay::UdpServer}; /// Shadowsocks Server Builder pub struct ServerBuilder { - context: Arc, + context: ServiceContext, svr_cfg: ServerConfig, udp_expiry_duration: Option, udp_capacity: Option, @@ -35,11 +35,11 @@ pub struct ServerBuilder { impl ServerBuilder { /// Create a new server builder from configuration pub fn new(svr_cfg: ServerConfig) -> ServerBuilder { - ServerBuilder::with_context(Arc::new(ServiceContext::new()), svr_cfg) + ServerBuilder::with_context(ServiceContext::new(), svr_cfg) } /// Create a new server builder with context - pub fn with_context(context: Arc, svr_cfg: ServerConfig) -> ServerBuilder { + fn with_context(context: ServiceContext, svr_cfg: ServerConfig) -> ServerBuilder { ServerBuilder { context, svr_cfg, @@ -62,8 +62,7 @@ impl ServerBuilder { /// Set `ConnectOpts` pub fn set_connect_opts(&mut self, opts: ConnectOpts) { - let context = Arc::get_mut(&mut self.context).expect("cannot set ConnectOpts on a shared context"); - context.set_connect_opts(opts) + self.context.set_connect_opts(opts) } /// Set UDP association's expiry duration @@ -88,14 +87,12 @@ impl ServerBuilder { /// Set customized DNS resolver pub fn set_dns_resolver(&mut self, resolver: Arc) { - let context = Arc::get_mut(&mut self.context).expect("cannot set DNS resolver on a shared context"); - context.set_dns_resolver(resolver) + self.context.set_dns_resolver(resolver) } /// Set access control list pub fn set_acl(&mut self, acl: Arc) { - let context = Arc::get_mut(&mut self.context).expect("cannot set ACL on a shared context"); - context.set_acl(acl); + self.context.set_acl(acl); } /// Set `AcceptOpts` for accepting new connections @@ -105,14 +102,12 @@ impl ServerBuilder { /// Try to connect IPv6 addresses first if hostname could be resolved to both IPv4 and IPv6 pub fn set_ipv6_first(&mut self, ipv6_first: bool) { - let context = Arc::get_mut(&mut self.context).expect("cannot set ipv6_first on a shared context"); - context.set_ipv6_first(ipv6_first); + self.context.set_ipv6_first(ipv6_first); } /// Set security config pub fn set_security_config(&mut self, security: &SecurityConfig) { - let context = Arc::get_mut(&mut self.context).expect("cannot set security on a shared context"); - context.set_security_config(security) + self.context.set_security_config(security) } /// Start the server @@ -121,6 +116,8 @@ impl ServerBuilder { /// 2. Starts TCP server (listener) /// 3. Starts UDP server (listener) pub async fn build(mut self) -> io::Result { + let context = Arc::new(self.context); + let mut plugin = None; if let Some(plugin_cfg) = self.svr_cfg.plugin() { @@ -131,14 +128,14 @@ impl ServerBuilder { let mut tcp_server = None; if self.svr_cfg.mode().enable_tcp() { - let server = TcpServer::new(self.context.clone(), self.svr_cfg.clone(), self.accept_opts.clone()).await?; + let server = TcpServer::new(context.clone(), self.svr_cfg.clone(), self.accept_opts.clone()).await?; tcp_server = Some(server); } let mut udp_server = None; if self.svr_cfg.mode().enable_udp() { let server = UdpServer::new( - self.context.clone(), + context.clone(), self.svr_cfg.clone(), self.udp_expiry_duration, self.udp_capacity, @@ -149,7 +146,7 @@ impl ServerBuilder { } Ok(Server { - context: self.context, + context, svr_cfg: self.svr_cfg, tcp_server, udp_server, diff --git a/sing-box/Makefile b/sing-box/Makefile index ae8e0b24cf..e35afa096c 100644 --- a/sing-box/Makefile +++ b/sing-box/Makefile @@ -99,9 +99,11 @@ publish_android: cd ../sing-box-for-android && ./gradlew :app:publishPlayReleaseBundle && ./gradlew --stop # TODO: find why and remove `-destination 'generic/platform=iOS'` +# TODO: remove xcode clean when fix control widget fixed build_ios: cd ../sing-box-for-apple && \ rm -rf build/SFI.xcarchive && \ + xcodebuild clean -scheme SFI && \ xcodebuild archive -scheme SFI -configuration Release -destination 'generic/platform=iOS' -archivePath build/SFI.xcarchive -allowProvisioningUpdates upload_ios_app_store: diff --git a/sing-box/clients/android/app/build.gradle b/sing-box/clients/android/app/build.gradle index 30aaaf560a..01661cc58d 100644 --- a/sing-box/clients/android/app/build.gradle +++ b/sing-box/clients/android/app/build.gradle @@ -96,8 +96,8 @@ dependencies { implementation "androidx.constraintlayout:constraintlayout:2.2.0" implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.7" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7" - implementation "androidx.navigation:navigation-fragment-ktx:2.8.3" - implementation "androidx.navigation:navigation-ui-ktx:2.8.3" + implementation "androidx.navigation:navigation-fragment-ktx:2.8.4" + implementation "androidx.navigation:navigation-ui-ktx:2.8.4" implementation "com.google.zxing:core:3.5.3" implementation "androidx.room:room-runtime:2.6.1" implementation "androidx.coordinatorlayout:coordinatorlayout:1.2.0" diff --git a/sing-box/clients/android/app/src/main/java/io/nekohasekai/sfa/ui/main/DashboardFragment.kt b/sing-box/clients/android/app/src/main/java/io/nekohasekai/sfa/ui/main/DashboardFragment.kt index 084a713478..7258678202 100644 --- a/sing-box/clients/android/app/src/main/java/io/nekohasekai/sfa/ui/main/DashboardFragment.kt +++ b/sing-box/clients/android/app/src/main/java/io/nekohasekai/sfa/ui/main/DashboardFragment.kt @@ -51,6 +51,7 @@ class DashboardFragment : Fragment(R.layout.fragment_dashboard) { disablePager() binding.fab.setImageResource(R.drawable.ic_play_arrow_24) binding.fab.show() + binding.fab.isEnabled = true } Status.Starting -> { @@ -119,7 +120,9 @@ class DashboardFragment : Fragment(R.layout.fragment_dashboard) { } } }.onFailure { - activity?.errorDialogBuilder(it)?.show() + withContext(Dispatchers.Main) { + activity?.errorDialogBuilder(it)?.show() + } } } } diff --git a/sing-box/clients/android/version.properties b/sing-box/clients/android/version.properties index 6895ae725b..9f5cb776a3 100644 --- a/sing-box/clients/android/version.properties +++ b/sing-box/clients/android/version.properties @@ -1,3 +1,3 @@ -VERSION_CODE=423 -VERSION_NAME=1.10.2 +VERSION_CODE=432 +VERSION_NAME=1.10.3 GO_VERSION=go1.23.3 diff --git a/sing-box/clients/apple/Library/Network/CommandClient.swift b/sing-box/clients/apple/Library/Network/CommandClient.swift index 02b76c0ce6..d8efa81597 100644 --- a/sing-box/clients/apple/Library/Network/CommandClient.swift +++ b/sing-box/clients/apple/Library/Network/CommandClient.swift @@ -176,7 +176,7 @@ public class CommandClient: ObservableObject { newLogList.append(messageList.next()) } if newLogList.count >= commandClient.logMaxLines { - newLogList.removeSubrange(0...newLogList.count-commandClient.logMaxLines) + newLogList.removeSubrange(0 ... newLogList.count - commandClient.logMaxLines) } commandClient.logList = newLogList } diff --git a/sing-box/clients/apple/WidgetExtension/ServiceToggleControl.swift b/sing-box/clients/apple/WidgetExtension/ServiceToggleControl.swift index c0dc98bf9a..87bcdb3e53 100644 --- a/sing-box/clients/apple/WidgetExtension/ServiceToggleControl.swift +++ b/sing-box/clients/apple/WidgetExtension/ServiceToggleControl.swift @@ -38,12 +38,9 @@ extension ServiceToggleControl { } } -struct ToggleServiceIntent: SetValueIntent, LiveActivityIntent { +struct ToggleServiceIntent: SetValueIntent { static var title: LocalizedStringResource = "Toggle sing-box" - static var description = - IntentDescription("Toggle sing-box service") - @Parameter(title: "Running") var value: Bool diff --git a/sing-box/clients/apple/sing-box.xcodeproj/project.pbxproj b/sing-box/clients/apple/sing-box.xcodeproj/project.pbxproj index 955925825c..cd828c8f97 100644 --- a/sing-box/clients/apple/sing-box.xcodeproj/project.pbxproj +++ b/sing-box/clients/apple/sing-box.xcodeproj/project.pbxproj @@ -2147,7 +2147,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.10.2; + MARKETING_VERSION = 1.10.3; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfavt; PRODUCT_NAME = "sing-box"; SDKROOT = appletvos; @@ -2182,7 +2182,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.10.2; + MARKETING_VERSION = 1.10.3; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfavt; PRODUCT_NAME = "sing-box"; SDKROOT = appletvos; @@ -2487,7 +2487,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.10.2; + MARKETING_VERSION = 1.10.3; OTHER_CODE_SIGN_FLAGS = "--deep"; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfavt; PRODUCT_NAME = "sing-box"; @@ -2529,7 +2529,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.10.2; + MARKETING_VERSION = 1.10.3; OTHER_CODE_SIGN_FLAGS = "--deep"; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfavt; PRODUCT_NAME = "sing-box"; @@ -2552,7 +2552,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 286; + CURRENT_PROJECT_VERSION = 290; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 287TTNZF8L; ENABLE_HARDENED_RUNTIME = YES; @@ -2570,7 +2570,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.10.2; + MARKETING_VERSION = 1.10.3; OTHER_CODE_SIGN_FLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfavt; PRODUCT_NAME = "sing-box"; @@ -2592,7 +2592,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 286; + CURRENT_PROJECT_VERSION = 290; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 287TTNZF8L; ENABLE_HARDENED_RUNTIME = YES; @@ -2610,7 +2610,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.10.2; + MARKETING_VERSION = 1.10.3; OTHER_CODE_SIGN_FLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfavt; PRODUCT_NAME = "sing-box"; @@ -2738,7 +2738,7 @@ "@executable_path/../../../../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.10.2; + MARKETING_VERSION = 1.10.3; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfavt.system; PRODUCT_NAME = "$(inherited)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2774,7 +2774,7 @@ "@executable_path/../../../../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.10.2; + MARKETING_VERSION = 1.10.3; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfavt.system; PRODUCT_NAME = "$(inherited)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2816,7 +2816,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.10.2; + MARKETING_VERSION = 1.10.3; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfavt.standalone; PRODUCT_NAME = SFM; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2857,7 +2857,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.10.2; + MARKETING_VERSION = 1.10.3; PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfavt.standalone; PRODUCT_NAME = SFM; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/sing-box/docs/changelog.md b/sing-box/docs/changelog.md index b2501354bc..436b185854 100644 --- a/sing-box/docs/changelog.md +++ b/sing-box/docs/changelog.md @@ -2,7 +2,11 @@ icon: material/alert-decagram --- -#### 1.11.0-alpha.26 +#### 1.11.0-beta.1 + +* Fixes and improvements + +### 1.10.3 * Fixes and improvements diff --git a/sing-box/experimental/clashapi/server.go b/sing-box/experimental/clashapi/server.go index b0f47646fc..db8e28600d 100644 --- a/sing-box/experimental/clashapi/server.go +++ b/sing-box/experimental/clashapi/server.go @@ -321,27 +321,31 @@ func traffic(trafficManager *trafficontrol.Manager) func(w http.ResponseWriter, tick := time.NewTicker(time.Second) defer tick.Stop() buf := &bytes.Buffer{} - var err error + var ( + upTotal int64 + downTotal int64 + err error + ) for range tick.C { buf.Reset() - up, down := trafficManager.Now() + upTotalNew, downTotalNew := trafficManager.Total() if err := json.NewEncoder(buf).Encode(Traffic{ - Up: up, - Down: down, + Up: upTotalNew - upTotal, + Down: downTotalNew - downTotal, }); err != nil { break } - if conn == nil { _, err = w.Write(buf.Bytes()) w.(http.Flusher).Flush() } else { err = wsutil.WriteServerText(conn, buf.Bytes()) } - if err != nil { break } + upTotal = upTotalNew + downTotal = downTotalNew } } } diff --git a/sing-box/experimental/clashapi/trafficontrol/manager.go b/sing-box/experimental/clashapi/trafficontrol/manager.go index 9b22f1e3d9..757ffdf917 100644 --- a/sing-box/experimental/clashapi/trafficontrol/manager.go +++ b/sing-box/experimental/clashapi/trafficontrol/manager.go @@ -16,30 +16,18 @@ import ( ) type Manager struct { - uploadTemp atomic.Int64 - downloadTemp atomic.Int64 - uploadBlip atomic.Int64 - downloadBlip atomic.Int64 uploadTotal atomic.Int64 downloadTotal atomic.Int64 connections compatible.Map[uuid.UUID, Tracker] closedConnectionsAccess sync.Mutex closedConnections list.List[TrackerMetadata] - ticker *time.Ticker - done chan struct{} // process *process.Process memory uint64 } func NewManager() *Manager { - manager := &Manager{ - ticker: time.NewTicker(time.Second), - done: make(chan struct{}), - // process: &process.Process{Pid: int32(os.Getpid())}, - } - go manager.handle() - return manager + return &Manager{} } func (m *Manager) Join(c Tracker) { @@ -61,19 +49,13 @@ func (m *Manager) Leave(c Tracker) { } func (m *Manager) PushUploaded(size int64) { - m.uploadTemp.Add(size) m.uploadTotal.Add(size) } func (m *Manager) PushDownloaded(size int64) { - m.downloadTemp.Add(size) m.downloadTotal.Add(size) } -func (m *Manager) Now() (up int64, down int64) { - return m.uploadBlip.Load(), m.downloadBlip.Load() -} - func (m *Manager) Total() (up int64, down int64) { return m.uploadTotal.Load(), m.downloadTotal.Load() } @@ -127,36 +109,10 @@ func (m *Manager) Snapshot() *Snapshot { } func (m *Manager) ResetStatistic() { - m.uploadTemp.Store(0) - m.uploadBlip.Store(0) m.uploadTotal.Store(0) - m.downloadTemp.Store(0) - m.downloadBlip.Store(0) m.downloadTotal.Store(0) } -func (m *Manager) handle() { - var uploadTemp int64 - var downloadTemp int64 - for { - select { - case <-m.done: - return - case <-m.ticker.C: - } - uploadTemp = m.uploadTemp.Swap(0) - downloadTemp = m.downloadTemp.Swap(0) - m.uploadBlip.Store(uploadTemp) - m.downloadBlip.Store(downloadTemp) - } -} - -func (m *Manager) Close() error { - m.ticker.Stop() - close(m.done) - return nil -} - type Snapshot struct { Download int64 Upload int64 diff --git a/sing-box/experimental/libbox/command_status.go b/sing-box/experimental/libbox/command_status.go index 810b3dcef9..05c9582a25 100644 --- a/sing-box/experimental/libbox/command_status.go +++ b/sing-box/experimental/libbox/command_status.go @@ -33,7 +33,6 @@ func (s *CommandServer) readStatus() StatusMessage { if s.service != nil { message.TrafficAvailable = true trafficManager := s.service.clashServer.(*clashapi.Server).TrafficManager() - message.Uplink, message.Downlink = trafficManager.Now() message.UplinkTotal, message.DownlinkTotal = trafficManager.Total() message.ConnectionsIn = int32(trafficManager.ConnectionsLen()) } @@ -50,8 +49,20 @@ func (s *CommandServer) handleStatusConn(conn net.Conn) error { ticker := time.NewTicker(time.Duration(interval)) defer ticker.Stop() ctx := connKeepAlive(conn) + var ( + status StatusMessage + uploadTotal int64 + downloadTotal int64 + ) for { - err = binary.Write(conn, binary.BigEndian, s.readStatus()) + status = s.readStatus() + upload := status.UplinkTotal - uploadTotal + download := status.DownlinkTotal - downloadTotal + uploadTotal = status.UplinkTotal + downloadTotal = status.DownlinkTotal + status.Uplink = upload + status.Downlink = download + err = binary.Write(conn, binary.BigEndian, status) if err != nil { return err } diff --git a/sing-box/go.mod b/sing-box/go.mod index 641a9f5e66..162c8d0de9 100644 --- a/sing-box/go.mod +++ b/sing-box/go.mod @@ -25,14 +25,14 @@ require ( github.com/sagernet/gvisor v0.0.0-20241123041152-536d05261cff github.com/sagernet/quic-go v0.48.2-beta.1 github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 - github.com/sagernet/sing v0.6.0-alpha.24 + github.com/sagernet/sing v0.6.0-alpha.25 github.com/sagernet/sing-dns v0.4.0-alpha.3 github.com/sagernet/sing-mux v0.3.0-alpha.1 github.com/sagernet/sing-quic v0.4.0-alpha.4 github.com/sagernet/sing-shadowsocks v0.2.7 github.com/sagernet/sing-shadowsocks2 v0.2.0 github.com/sagernet/sing-shadowtls v0.2.0-alpha.2 - github.com/sagernet/sing-tun v0.6.0-alpha.16 + github.com/sagernet/sing-tun v0.6.0-alpha.17 github.com/sagernet/sing-vmess v0.2.0-beta.1 github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 github.com/sagernet/utls v1.6.7 diff --git a/sing-box/go.sum b/sing-box/go.sum index 8dc6d7e133..e45f9dc20e 100644 --- a/sing-box/go.sum +++ b/sing-box/go.sum @@ -110,8 +110,8 @@ github.com/sagernet/quic-go v0.48.2-beta.1/go.mod h1:1WgdDIVD1Gybp40JTWketeSfKA/ github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 h1:5Th31OC6yj8byLGkEnIYp6grlXfo1QYUfiYFGjewIdc= github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691/go.mod h1:B8lp4WkQ1PwNnrVMM6KyuFR20pU8jYBD+A4EhJovEXU= github.com/sagernet/sing v0.2.18/go.mod h1:OL6k2F0vHmEzXz2KW19qQzu172FDgSbUSODylighuVo= -github.com/sagernet/sing v0.6.0-alpha.24 h1:qPc9i0mHADIFNYlWMg7fWWZZ0kBxWHEs8npsAG6KqAo= -github.com/sagernet/sing v0.6.0-alpha.24/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= +github.com/sagernet/sing v0.6.0-alpha.25 h1:r/UxU+1O6436MjvEXEMRfBBtqMEImgA6uqxezXKZ/Rs= +github.com/sagernet/sing v0.6.0-alpha.25/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= github.com/sagernet/sing-dns v0.4.0-alpha.3 h1:TcAQdz68Gs28VD9o9zDIW7IS8A9LZDruTPI9g9JbGHA= github.com/sagernet/sing-dns v0.4.0-alpha.3/go.mod h1:9LHcYKg2bGQpbtXrfNbopz8ok/zBK9ljiI2kmFG9JKg= github.com/sagernet/sing-mux v0.3.0-alpha.1 h1:IgNX5bJBpL41gGbp05pdDOvh/b5eUQ6cv9240+Ngipg= @@ -124,8 +124,8 @@ github.com/sagernet/sing-shadowsocks2 v0.2.0 h1:wpZNs6wKnR7mh1wV9OHwOyUr21VkS3wK github.com/sagernet/sing-shadowsocks2 v0.2.0/go.mod h1:RnXS0lExcDAovvDeniJ4IKa2IuChrdipolPYWBv9hWQ= github.com/sagernet/sing-shadowtls v0.2.0-alpha.2 h1:RPrpgAdkP5td0vLfS5ldvYosFjSsZtRPxiyLV6jyKg0= github.com/sagernet/sing-shadowtls v0.2.0-alpha.2/go.mod h1:0j5XlzKxaWRIEjc1uiSKmVoWb0k+L9QgZVb876+thZA= -github.com/sagernet/sing-tun v0.6.0-alpha.16 h1:VFB8VoM51ctLeDI3spzUaUcSY1La0T83lFzqEjIpK0M= -github.com/sagernet/sing-tun v0.6.0-alpha.16/go.mod h1:U9seS9Ic25rlhKSIL356h1QxWDnTdW+4nykNV95Eap8= +github.com/sagernet/sing-tun v0.6.0-alpha.17 h1:xWO5wcxy3KoqLwAaDPv9vGQ+b7kIzu2/DcVuYuj0Y+g= +github.com/sagernet/sing-tun v0.6.0-alpha.17/go.mod h1:z3UDHTKv+PhSF6dp9L0X16QHEedqr+JRhCLm0HfPiMg= github.com/sagernet/sing-vmess v0.2.0-beta.1 h1:5sXQ23uwNlZuDvygzi0dFtnG0Csm/SNqTjAHXJkpuj4= github.com/sagernet/sing-vmess v0.2.0-beta.1/go.mod h1:fLyE1emIcvQ5DV8reFWnufquZ7MkCSYM5ThodsR9NrQ= github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 h1:DImB4lELfQhplLTxeq2z31Fpv8CQqqrUwTbrIRumZqQ= diff --git a/sing-box/protocol/direct/inbound.go b/sing-box/protocol/direct/inbound.go index 29b91f87dc..18d961b326 100644 --- a/sing-box/protocol/direct/inbound.go +++ b/sing-box/protocol/direct/inbound.go @@ -72,15 +72,10 @@ func (i *Inbound) Start(stage adapter.StartStage) error { if stage != adapter.StartStateStart { return nil } - err := i.listener.Start() - if err != nil { - return err - } - return i.udpNat.Start() + return i.listener.Start() } func (i *Inbound) Close() error { - i.udpNat.Close() return i.listener.Close() } diff --git a/sing-box/protocol/redirect/tproxy.go b/sing-box/protocol/redirect/tproxy.go index 02b7c0c9bf..23d441b7a7 100644 --- a/sing-box/protocol/redirect/tproxy.go +++ b/sing-box/protocol/redirect/tproxy.go @@ -85,15 +85,10 @@ func (t *TProxy) Start(stage adapter.StartStage) error { return E.Cause(err, "configure tproxy UDP listener") } } - err = t.udpNat.Start() - if err != nil { - return err - } return nil } func (t *TProxy) Close() error { - t.udpNat.Close() return t.listener.Close() } diff --git a/sing-box/test/go.mod b/sing-box/test/go.mod index bfed47dba9..df440c2b9d 100644 --- a/sing-box/test/go.mod +++ b/sing-box/test/go.mod @@ -12,8 +12,8 @@ require ( github.com/docker/docker v27.3.1+incompatible github.com/docker/go-connections v0.5.0 github.com/gofrs/uuid/v5 v5.3.0 - github.com/sagernet/quic-go v0.48.1-beta.1 - github.com/sagernet/sing v0.6.0-alpha.18 + github.com/sagernet/quic-go v0.48.2-beta.1 + github.com/sagernet/sing v0.6.0-alpha.24 github.com/sagernet/sing-dns v0.4.0-alpha.3 github.com/sagernet/sing-quic v0.4.0-alpha.4 github.com/sagernet/sing-shadowsocks v0.2.7 @@ -79,13 +79,13 @@ require ( github.com/sagernet/cloudflare-tls v0.0.0-20231208171750-a4483c1b7cd1 // indirect github.com/sagernet/cors v1.2.1 // indirect github.com/sagernet/fswatch v0.1.1 // indirect - github.com/sagernet/gvisor v0.0.0-20241021032506-a4324256e4a3 // indirect + github.com/sagernet/gvisor v0.0.0-20241123041152-536d05261cff // indirect github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a // indirect github.com/sagernet/nftables v0.3.0-beta.4 // indirect github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 // indirect github.com/sagernet/sing-mux v0.3.0-alpha.1 // indirect github.com/sagernet/sing-shadowtls v0.2.0-alpha.2 // indirect - github.com/sagernet/sing-tun v0.6.0-alpha.9 // indirect + github.com/sagernet/sing-tun v0.6.0-alpha.16 // indirect github.com/sagernet/sing-vmess v0.1.12 // indirect github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 // indirect github.com/sagernet/utls v1.6.7 // indirect diff --git a/sing-box/test/go.sum b/sing-box/test/go.sum index 537914dab8..c74283c10d 100644 --- a/sing-box/test/go.sum +++ b/sing-box/test/go.sum @@ -136,19 +136,19 @@ github.com/sagernet/cors v1.2.1 h1:Cv5Z8y9YSD6Gm+qSpNrL3LO4lD3eQVvbFYJSG7JCMHQ= github.com/sagernet/cors v1.2.1/go.mod h1:O64VyOjjhrkLmQIjF4KGRrJO/5dVXFdpEmCW/eISRAI= github.com/sagernet/fswatch v0.1.1 h1:YqID+93B7VRfqIH3PArW/XpJv5H4OLEVWDfProGoRQs= github.com/sagernet/fswatch v0.1.1/go.mod h1:nz85laH0mkQqJfaOrqPpkwtU1znMFNVTpT/5oRsVz/o= -github.com/sagernet/gvisor v0.0.0-20241021032506-a4324256e4a3 h1:RxEz7LhPNiF/gX/Hg+OXr5lqsM9iVAgmaK1L1vzlDRM= -github.com/sagernet/gvisor v0.0.0-20241021032506-a4324256e4a3/go.mod h1:ehZwnT2UpmOWAHFL48XdBhnd4Qu4hN2O3Ji0us3ZHMw= +github.com/sagernet/gvisor v0.0.0-20241123041152-536d05261cff h1:mlohw3360Wg1BNGook/UHnISXhUx4Gd/3tVLs5T0nSs= +github.com/sagernet/gvisor v0.0.0-20241123041152-536d05261cff/go.mod h1:ehZwnT2UpmOWAHFL48XdBhnd4Qu4hN2O3Ji0us3ZHMw= github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a h1:ObwtHN2VpqE0ZNjr6sGeT00J8uU7JF4cNUdb44/Duis= github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a/go.mod h1:xLnfdiJbSp8rNqYEdIW/6eDO4mVoogml14Bh2hSiFpM= github.com/sagernet/nftables v0.3.0-beta.4 h1:kbULlAwAC3jvdGAC1P5Fa3GSxVwQJibNenDW2zaXr8I= github.com/sagernet/nftables v0.3.0-beta.4/go.mod h1:OQXAjvjNGGFxaTgVCSTRIhYB5/llyVDeapVoENYBDS8= -github.com/sagernet/quic-go v0.48.1-beta.1 h1:ElPaV5yzlXIKZpqFMAcUGax6vddi3zt4AEpT94Z0vwo= -github.com/sagernet/quic-go v0.48.1-beta.1/go.mod h1:1WgdDIVD1Gybp40JTWketeSfKA/+or9YMLaG5VeTk4k= +github.com/sagernet/quic-go v0.48.2-beta.1 h1:W0plrLWa1XtOWDTdX3CJwxmQuxkya12nN5BRGZ87kEg= +github.com/sagernet/quic-go v0.48.2-beta.1/go.mod h1:1WgdDIVD1Gybp40JTWketeSfKA/+or9YMLaG5VeTk4k= github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 h1:5Th31OC6yj8byLGkEnIYp6grlXfo1QYUfiYFGjewIdc= github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691/go.mod h1:B8lp4WkQ1PwNnrVMM6KyuFR20pU8jYBD+A4EhJovEXU= github.com/sagernet/sing v0.2.18/go.mod h1:OL6k2F0vHmEzXz2KW19qQzu172FDgSbUSODylighuVo= -github.com/sagernet/sing v0.6.0-alpha.18 h1:ih4CurU8KvbhfagYjSqVrE2LR0oBSXSZTNH2sAGPGiM= -github.com/sagernet/sing v0.6.0-alpha.18/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= +github.com/sagernet/sing v0.6.0-alpha.24 h1:qPc9i0mHADIFNYlWMg7fWWZZ0kBxWHEs8npsAG6KqAo= +github.com/sagernet/sing v0.6.0-alpha.24/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= github.com/sagernet/sing-dns v0.4.0-alpha.3 h1:TcAQdz68Gs28VD9o9zDIW7IS8A9LZDruTPI9g9JbGHA= github.com/sagernet/sing-dns v0.4.0-alpha.3/go.mod h1:9LHcYKg2bGQpbtXrfNbopz8ok/zBK9ljiI2kmFG9JKg= github.com/sagernet/sing-mux v0.3.0-alpha.1 h1:IgNX5bJBpL41gGbp05pdDOvh/b5eUQ6cv9240+Ngipg= @@ -161,8 +161,8 @@ github.com/sagernet/sing-shadowsocks2 v0.2.0 h1:wpZNs6wKnR7mh1wV9OHwOyUr21VkS3wK github.com/sagernet/sing-shadowsocks2 v0.2.0/go.mod h1:RnXS0lExcDAovvDeniJ4IKa2IuChrdipolPYWBv9hWQ= github.com/sagernet/sing-shadowtls v0.2.0-alpha.2 h1:RPrpgAdkP5td0vLfS5ldvYosFjSsZtRPxiyLV6jyKg0= github.com/sagernet/sing-shadowtls v0.2.0-alpha.2/go.mod h1:0j5XlzKxaWRIEjc1uiSKmVoWb0k+L9QgZVb876+thZA= -github.com/sagernet/sing-tun v0.6.0-alpha.9 h1:Qf667035KnlydZ+ftj3U4HH+oddi3RdyKzBiCcnSgaI= -github.com/sagernet/sing-tun v0.6.0-alpha.9/go.mod h1:TgvxE2YD7O9c/unHju0nWAGBGsVppWIuju13vlmdllM= +github.com/sagernet/sing-tun v0.6.0-alpha.16 h1:VFB8VoM51ctLeDI3spzUaUcSY1La0T83lFzqEjIpK0M= +github.com/sagernet/sing-tun v0.6.0-alpha.16/go.mod h1:U9seS9Ic25rlhKSIL356h1QxWDnTdW+4nykNV95Eap8= github.com/sagernet/sing-vmess v0.1.12 h1:2gFD8JJb+eTFMoa8FIVMnknEi+vCSfaiTXTfEYAYAPg= github.com/sagernet/sing-vmess v0.1.12/go.mod h1:luTSsfyBGAc9VhtCqwjR+dt1QgqBhuYBCONB/POhF8I= github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 h1:DImB4lELfQhplLTxeq2z31Fpv8CQqqrUwTbrIRumZqQ= diff --git a/small/sing-box/Makefile b/small/sing-box/Makefile index 9c19b169d4..e87d5d772c 100644 --- a/small/sing-box/Makefile +++ b/small/sing-box/Makefile @@ -6,12 +6,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=sing-box -PKG_VERSION:=1.10.2 +PKG_VERSION:=1.10.3 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=cae964985e6f27a1ddefc074849a950437e27ef5bfb44847d5ce5d5b2a1b7a27 +PKG_HASH:=93c4fe679988a5414e45886c66f3b969917aa1940bb807f2e0281fdaf4fe27ef PKG_LICENSE:=GPL-3.0-or-later PKG_LICENSE_FILES:=LICENSE diff --git a/v2rayn/.github/workflows/build-osx.yml b/v2rayn/.github/workflows/build-osx.yml new file mode 100644 index 0000000000..b626a51031 --- /dev/null +++ b/v2rayn/.github/workflows/build-osx.yml @@ -0,0 +1,32 @@ +name: release macos + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build: + strategy: + matrix: + configuration: [Release] + + runs-on: macos-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Build + run: cd v2rayN && + ./build-osx.sh + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: v2rayN-osx + path: | + ./v2rayN/v2rayN-osx.zip + + \ No newline at end of file diff --git a/v2rayn/.github/workflows/build.yml b/v2rayn/.github/workflows/build.yml index 9e5667547d..fa803b783b 100644 --- a/v2rayn/.github/workflows/build.yml +++ b/v2rayn/.github/workflows/build.yml @@ -28,7 +28,7 @@ jobs: - name: Build run: cd v2rayN && - .\build.ps1 + ./build.ps1 # - name: Package # shell: pwsh @@ -40,7 +40,7 @@ jobs: with: name: v2rayN path: | - .\v2rayN\v2rayN.zip + ./v2rayN/v2rayN.zip # - name: Release # uses: softprops/action-gh-release@v1 diff --git a/v2rayn/v2rayN/ServiceLib/Global.cs b/v2rayn/v2rayN/ServiceLib/Global.cs index 4a4e89d9f4..c0518b4261 100644 --- a/v2rayn/v2rayN/ServiceLib/Global.cs +++ b/v2rayn/v2rayN/ServiceLib/Global.cs @@ -20,7 +20,7 @@ public const string JuicityCoreUrl = "https://github.com/juicity/juicity/releases"; public const string CustomRoutingListUrl = @"https://raw.githubusercontent.com/2dust/v2rayCustomRoutingList/master/"; public const string SingboxRulesetUrl = @"https://raw.githubusercontent.com/2dust/sing-box-rules/rule-set-{0}/{1}.srs"; - public const string IPAPIUrl = "https://ipapi.co/json"; + public const string IPAPIUrl = "https://api.ip.sb/geoip"; public const string PromotionUrl = @"aHR0cHM6Ly85LjIzNDQ1Ni54eXovYWJjLmh0bWw="; public const string ConfigFileName = "guiNConfig.json"; diff --git a/v2rayn/v2rayN/ServiceLib/Handler/ConfigHandler.cs b/v2rayn/v2rayN/ServiceLib/Handler/ConfigHandler.cs index 745bf959e3..620a8bc1db 100644 --- a/v2rayn/v2rayN/ServiceLib/Handler/ConfigHandler.cs +++ b/v2rayn/v2rayN/ServiceLib/Handler/ConfigHandler.cs @@ -1026,6 +1026,36 @@ namespace ServiceLib.Handler return result; } + public static async Task GetPreSocksItem(Config config, ProfileItem node, ECoreType coreType) + { + ProfileItem? itemSocks = null; + var preCoreType = ECoreType.sing_box; + if (node.ConfigType != EConfigType.Custom && coreType != ECoreType.sing_box && config.TunModeItem.EnableTun) + { + itemSocks = new ProfileItem() + { + CoreType = preCoreType, + ConfigType = EConfigType.SOCKS, + Address = Global.Loopback, + Sni = node.Address, //Tun2SocksAddress + Port = AppHandler.Instance.GetLocalPort(EInboundProtocol.socks) + }; + } + else if ((node.ConfigType == EConfigType.Custom && node.PreSocksPort > 0)) + { + preCoreType = config.TunModeItem.EnableTun ? ECoreType.sing_box : ECoreType.Xray; + itemSocks = new ProfileItem() + { + CoreType = preCoreType, + ConfigType = EConfigType.SOCKS, + Address = Global.Loopback, + Port = node.PreSocksPort.Value, + }; + } + + return itemSocks; + } + #endregion Server #region Batch add servers diff --git a/v2rayn/v2rayN/ServiceLib/Handler/CoreHandler.cs b/v2rayn/v2rayN/ServiceLib/Handler/CoreHandler.cs index e2b7b3b8cb..ec4aa60c91 100644 --- a/v2rayn/v2rayN/ServiceLib/Handler/CoreHandler.cs +++ b/v2rayn/v2rayN/ServiceLib/Handler/CoreHandler.cs @@ -13,6 +13,7 @@ namespace ServiceLib.Handler private Config _config; private Process? _process; private Process? _processPre; + private int _linuxSudoPid = -1; private Action? _updateFunc; public async Task Init(Config config, Action updateFunc) @@ -64,49 +65,30 @@ namespace ServiceLib.Handler ShowMsg(true, result.Msg); return; } - else - { - ShowMsg(true, $"{node.GetSummary()}"); - ShowMsg(false, $"{Environment.OSVersion} - {(Environment.Is64BitOperatingSystem ? 64 : 32)}"); - ShowMsg(false, string.Format(ResUI.StartService, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"))); - await CoreStop(); - await Task.Delay(100); - await CoreStart(node); - //In tun mode, do a delay check and restart the core - //if (_config.tunModeItem.enableTun) - //{ - // Observable.Range(1, 1) - // .Delay(TimeSpan.FromSeconds(15)) - // .Subscribe(x => - // { - // { - // if (_process == null || _process.HasExited) - // { - // CoreStart(node); - // ShowMsg(false, "Tun mode restart the core once"); - // Logging.SaveLog("Tun mode restart the core once"); - // } - // } - // }); - //} - } + ShowMsg(true, $"{node.GetSummary()}"); + ShowMsg(false, $"{Environment.OSVersion} - {(Environment.Is64BitOperatingSystem ? 64 : 32)}"); + ShowMsg(false, string.Format(ResUI.StartService, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"))); + await CoreStop(); + await Task.Delay(100); + await CoreStart(node); + await CoreStartPreService(node); } public async Task LoadCoreConfigSpeedtest(List selecteds) { - var pid = -1; var coreType = selecteds.Exists(t => t.ConfigType is EConfigType.Hysteria2 or EConfigType.TUIC or EConfigType.WireGuard) ? ECoreType.sing_box : ECoreType.Xray; var configPath = Utils.GetConfigPath(Global.CoreSpeedtestConfigFileName); var result = await CoreConfigHandler.GenerateClientSpeedtestConfig(_config, configPath, selecteds, coreType); ShowMsg(false, result.Msg); - if (result.Success) + if (result.Success != true) { - ShowMsg(false, string.Format(ResUI.StartService, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"))); - ShowMsg(false, configPath); - pid = await CoreStartSpeedtest(configPath, coreType); + return -1; } - return pid; + + ShowMsg(false, string.Format(ResUI.StartService, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"))); + ShowMsg(false, configPath); + return await CoreStartSpeedtest(configPath, coreType); } public async Task CoreStop() @@ -126,6 +108,12 @@ namespace ServiceLib.Handler _processPre.Dispose(); _processPre = null; } + + if (_linuxSudoPid > 0) + { + await KillProcessAsLinuxSudo(); + } + _linuxSudoPid = -1; } catch (Exception ex) { @@ -171,8 +159,7 @@ namespace ServiceLib.Handler private async Task CoreStart(ProfileItem node) { - var coreType = AppHandler.Instance.GetCoreType(node, node.ConfigType); - _config.RunningCoreType = coreType; + var coreType = _config.RunningCoreType = AppHandler.Instance.GetCoreType(node, node.ConfigType); var coreInfo = CoreInfoHandler.Instance.GetCoreInfo(coreType); var displayLog = node.ConfigType != EConfigType.Custom || node.DisplayLog; @@ -182,47 +169,28 @@ namespace ServiceLib.Handler return; } _process = proc; + } - //start a pre service + private async Task CoreStartPreService(ProfileItem node) + { if (_process != null && !_process.HasExited) { - ProfileItem? itemSocks = null; - var preCoreType = ECoreType.sing_box; - if (node.ConfigType != EConfigType.Custom && coreType != ECoreType.sing_box && _config.TunModeItem.EnableTun) - { - itemSocks = new ProfileItem() - { - CoreType = preCoreType, - ConfigType = EConfigType.SOCKS, - Address = Global.Loopback, - Sni = node.Address, //Tun2SocksAddress - Port = AppHandler.Instance.GetLocalPort(EInboundProtocol.socks) - }; - } - else if ((node.ConfigType == EConfigType.Custom && node.PreSocksPort > 0)) - { - preCoreType = _config.TunModeItem.EnableTun ? ECoreType.sing_box : ECoreType.Xray; - itemSocks = new ProfileItem() - { - CoreType = preCoreType, - ConfigType = EConfigType.SOCKS, - Address = Global.Loopback, - Port = node.PreSocksPort.Value, - }; - _config.RunningCoreType = preCoreType; - } + var coreType = AppHandler.Instance.GetCoreType(node, node.ConfigType); + var itemSocks = await ConfigHandler.GetPreSocksItem(_config, node, coreType); if (itemSocks != null) { - var fileName2 = Utils.GetConfigPath(Global.CorePreConfigFileName); - var result = await CoreConfigHandler.GenerateClientConfig(itemSocks, fileName2); + var preCoreType = _config.RunningCoreType = itemSocks.CoreType ?? ECoreType.sing_box; + var fileName = Utils.GetConfigPath(Global.CorePreConfigFileName); + var result = await CoreConfigHandler.GenerateClientConfig(itemSocks, fileName); if (result.Success) { - var coreInfo2 = CoreInfoHandler.Instance.GetCoreInfo(preCoreType); - var proc2 = await RunProcess(coreInfo2, Global.CorePreConfigFileName, true, true); - if (proc2 is not null) + var coreInfo = CoreInfoHandler.Instance.GetCoreInfo(preCoreType); + var proc = await RunProcess(coreInfo, Global.CorePreConfigFileName, true, true); + if (proc is null) { - _processPre = proc2; + return; } + _processPre = proc; } } } @@ -296,7 +264,7 @@ namespace ServiceLib.Handler var isNeedSudo = mayNeedSudo && IsNeedSudo(coreInfo.CoreType); if (isNeedSudo) { - await RunProcessAsLinuxRoot(proc, fileName, coreInfo, configPath); + await RunProcessAsLinuxSudo(proc, fileName, coreInfo, configPath); } var startUpErrorMessage = new StringBuilder(); @@ -329,6 +297,7 @@ namespace ServiceLib.Handler await Task.Delay(10); await proc.StandardInput.WriteLineAsync(pwd); } + if (isNeedSudo) _linuxSudoPid = proc.Id; if (displayLog) { @@ -357,12 +326,88 @@ namespace ServiceLib.Handler } } - private async Task RunProcessAsLinuxRoot(Process proc, string fileName, CoreInfo coreInfo, string configPath) + private async Task KillProcess(Process? proc) + { + if (proc is null) + { + return; + } + try + { + proc?.Kill(); + } + catch (Exception) + { + // ignored + } + await Task.Delay(100); + if (proc?.HasExited == false) + { + try + { + proc?.Kill(); + } + catch (Exception) + { + // ignored + } + } + } + + #endregion Process + + #region Linux + + private async Task RunProcessAsLinuxSudo(Process proc, string fileName, CoreInfo coreInfo, string configPath) { var cmdLine = $"{fileName.AppendQuotes()} {string.Format(coreInfo.Arguments, Utils.GetConfigPath(configPath).AppendQuotes())}"; + var shFilePath = await CreateLinuxShellFile(cmdLine, "run_as_sudo.sh"); + proc.StartInfo.FileName = shFilePath; + proc.StartInfo.Arguments = ""; + proc.StartInfo.WorkingDirectory = ""; + if (_config.TunModeItem.LinuxSudoPwd.IsNotEmpty()) + { + proc.StartInfo.StandardInputEncoding = Encoding.UTF8; + proc.StartInfo.RedirectStandardInput = true; + } + } + + private async Task KillProcessAsLinuxSudo() + { + var cmdLine = $"kill -9 {_linuxSudoPid}"; + var shFilePath = await CreateLinuxShellFile(cmdLine, "kill_as_sudo.sh"); + Process proc = new() + { + StartInfo = new() + { + FileName = shFilePath, + UseShellExecute = false, + CreateNoWindow = true, + StandardInputEncoding = Encoding.UTF8, + RedirectStandardInput = true + } + }; + proc.Start(); + + if (_config.TunModeItem.LinuxSudoPwd.IsNotEmpty()) + { + var pwd = DesUtils.Decrypt(_config.TunModeItem.LinuxSudoPwd); + await Task.Delay(10); + await proc.StandardInput.WriteLineAsync(pwd); + await Task.Delay(10); + await proc.StandardInput.WriteLineAsync(pwd); + } + + var timeout = new CancellationTokenSource(TimeSpan.FromSeconds(10)); + await proc.WaitForExitAsync(timeout.Token); + await Task.Delay(1000); + } + + private async Task CreateLinuxShellFile(string cmdLine, string fileName) + { //Shell scripts - var shFilePath = Utils.GetBinPath("run_as_root.sh"); + var shFilePath = Utils.GetBinPath(fileName); File.Delete(shFilePath); var sb = new StringBuilder(); sb.AppendLine("#!/bin/sh"); @@ -373,46 +418,15 @@ namespace ServiceLib.Handler else { sb.AppendLine($"sudo -S {cmdLine}"); - proc.StartInfo.StandardInputEncoding = Encoding.UTF8; - proc.StartInfo.RedirectStandardInput = true; } + await File.WriteAllTextAsync(shFilePath, sb.ToString()); await Utils.SetLinuxChmod(shFilePath); - - proc.StartInfo.FileName = shFilePath; - proc.StartInfo.Arguments = ""; - proc.StartInfo.WorkingDirectory = ""; Logging.SaveLog(shFilePath); + + return shFilePath; } - private async Task KillProcess(Process? proc) - { - if (proc is null) - { - return; - } - var timeout = new CancellationTokenSource(TimeSpan.FromSeconds(1)); - try - { - await proc.WaitForExitAsync(timeout.Token); - } - catch (OperationCanceledException) - { - proc.Kill(); - } - if (!proc.HasExited) - { - try - { - await proc.WaitForExitAsync(timeout.Token); - } - catch (Exception) - { - proc.Kill(); - } - } - } - - #endregion Process + #endregion Linux } } \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/ServiceLib.csproj b/v2rayn/v2rayN/ServiceLib/ServiceLib.csproj index f62be6a54a..48f0e35973 100644 --- a/v2rayn/v2rayN/ServiceLib/ServiceLib.csproj +++ b/v2rayn/v2rayN/ServiceLib/ServiceLib.csproj @@ -4,7 +4,7 @@ net8.0 enable enable - 7.2.1 + 7.2.2 diff --git a/v2rayn/v2rayN/ServiceLib/Services/UpdateService.cs b/v2rayn/v2rayN/ServiceLib/Services/UpdateService.cs index 7ce7975fc3..bd0f6a2b2c 100644 --- a/v2rayn/v2rayN/ServiceLib/Services/UpdateService.cs +++ b/v2rayn/v2rayN/ServiceLib/Services/UpdateService.cs @@ -249,9 +249,9 @@ namespace ServiceLib.Services var ip = Global.None; if (time > 0) { - var result = await downloadHandle.TryDownloadString(Global.IPAPIUrl, true, "ipapi"); + var result = await downloadHandle.TryDownloadString(Global.IPAPIUrl, true, Global.IPAPIUrl); var ipInfo = JsonUtils.Deserialize(result); - ip = $"({ipInfo?.country}) {ipInfo?.ip}"; + ip = $"({ipInfo?.country_code}) {ipInfo?.ip}"; } updateFunc?.Invoke(false, string.Format(ResUI.TestMeOutput, time, ip)); diff --git a/v2rayn/v2rayN/build-osx.sh b/v2rayn/v2rayN/build-osx.sh new file mode 100755 index 0000000000..4ed7959863 --- /dev/null +++ b/v2rayn/v2rayN/build-osx.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +echo 'Building' + +OutputPath='./bin/v2rayN' + +dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r osx-x64 --self-contained true -p:PublishReadyToRun=false -p:PublishSingleFile=true -o "${OutputPath}/osx-x64" +dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r osx-arm64 --self-contained true -p:PublishReadyToRun=false -p:PublishSingleFile=true -o "${OutputPath}/osx-arm64" + +rm -rf "$OutputPath/osx-x64/*.pdb" +rm -rf "$OutputPath/osx-arm64/*.pdb" + +echo 'Build done' + +ls $OutputPath +7z a v2rayN-osx.zip $OutputPath +exit 0 diff --git a/v2rayn/v2rayN/build.ps1 b/v2rayn/v2rayN/build.ps1 index 5ec205ff0f..502d165c28 100644 --- a/v2rayn/v2rayN/build.ps1 +++ b/v2rayn/v2rayN/build.ps1 @@ -2,37 +2,57 @@ param ( [Parameter()] [ValidateNotNullOrEmpty()] [string] - $OutputPath = '.\bin\v2rayN' + $OutputPath = './bin/v2rayN' ) Write-Host 'Building' dotnet publish ` - .\v2rayN\v2rayN.csproj ` + ./v2rayN/v2rayN.csproj ` -c Release ` -r win-x64 ` --self-contained false ` -p:PublishReadyToRun=false ` -p:PublishSingleFile=true ` - -o "$OutputPath\win-x64" + -o "$OutputPath/win-x64" dotnet publish ` - .\v2rayN.Desktop\v2rayN.Desktop.csproj ` + ./v2rayN/v2rayN.csproj ` + -c Release ` + -r win-arm64 ` + --self-contained false ` + -p:PublishReadyToRun=false ` + -p:PublishSingleFile=true ` + -o "$OutputPath/win-arm64" + +dotnet publish ` + ./v2rayN.Desktop/v2rayN.Desktop.csproj ` -c Release ` -r linux-x64 ` --self-contained true ` -p:PublishReadyToRun=false ` -p:PublishSingleFile=true ` - -o "$OutputPath\linux-x64" - + -o "$OutputPath/linux-x64" + +dotnet publish ` + ./v2rayN.Desktop/v2rayN.Desktop.csproj ` + -c Release ` + -r linux-arm64 ` + --self-contained true ` + -p:PublishReadyToRun=false ` + -p:PublishSingleFile=true ` + -o "$OutputPath/linux-arm64" + if ( -Not $? ) { exit $lastExitCode } -if ( Test-Path -Path .\bin\v2rayN ) { - rm -Force "$OutputPath\win-x64\*.pdb" - rm -Force "$OutputPath\linux-x64\*.pdb" +if ( Test-Path -Path ./bin/v2rayN ) { + rm -Force "$OutputPath/win-x64/*.pdb" + rm -Force "$OutputPath/win-arm64/*.pdb" + rm -Force "$OutputPath/linux-x64/*.pdb" + rm -Force "$OutputPath/linux-arm64/*.pdb" } Write-Host 'Build done' diff --git a/v2rayn/v2rayN/v2rayN.Desktop/v2rayN.Desktop.csproj b/v2rayn/v2rayN/v2rayN.Desktop/v2rayN.Desktop.csproj index fc74318925..c2a353532e 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/v2rayN.Desktop.csproj +++ b/v2rayn/v2rayN/v2rayN.Desktop/v2rayN.Desktop.csproj @@ -20,12 +20,12 @@ - - - - - - + + + + + + diff --git a/v2rayng/V2rayNG/app/src/main/res/values-fa/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-fa/strings.xml index 9a60fd5136..4824e944d8 100644 --- a/v2rayng/V2rayNG/app/src/main/res/values-fa/strings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/values-fa/strings.xml @@ -23,16 +23,16 @@ افزودن کانفیگ ذخیره کانفیگ حذف کانفیگ - کانفیگ را از QRcode وارد کنید + کانفیگ را از QRCODE وارد کنید کانفیگ را از کلیپ ‌بورد وارد کنید - تایپ دستی[VMess] + تایپ دستی[VMESS] تایپ دستی[VLESS] - تایپ دستی[Shadowsocks] + تایپ دستی[SHADOWSOCKS] تایپ دستی[SOCKS] Type manually[HTTP] - تایپ دستی[Trojan] - [Wireguard]تایپ دستی - Type manually[Hysteria2] + تایپ دستی[TROJAN] + WIREGUARD]تایپ دستی + TYPE MANUALLY[HYSTERIA2] کانفیگ سفارشی کانفیگ سفارشی را از کلیپ ‌بورد وارد کنید کانفیگ سفارشی را به صورت محلی وارد کنید @@ -48,28 +48,28 @@ امنیت شبکه انتقال - نوع head - حالت gRPC - host - http host - ws host - httpupgrade host - xhttp host - h2 host + نوع HEAD + حالت GRPC + HOST + HTTP HOST + WS HOST + HTTPUPGRADE HOST + XHTTP HOST + H2 HOST QUIC security - gRPC Authority - path - ws path - httpupgrade path - xhttp path - h2 path + GRPC Authority + PATH + WS PATH + HTTPUPGRADE PATH + XHTTP PATH + H2 PATH QUIC key - kcp seed - gRPC serviceName + KCP SEED + GRPC SERVICENAME TLS اثرانگشت - Alpn - مجوز ناامن + AlPN + اعطای مجوز ناامن SNI نشانی پورت @@ -81,12 +81,12 @@ جریان کلید عمومی کلید رمزگذاری اضافی (اختیاری) - ShortId - SpiderX + SHORTID + SPIDERX کلید خصوصی Reserved (اختیاری) - آدرس محلی IPv4(اختیاری) - Mtu(optional, default 1420) + آدرس محلی IPV4(اختیاری) + MTU (اختیاری، پیش فرض: 1420) با موفقیت انجام شد شکست هیچ داده ای وجود ندارد @@ -105,19 +105,19 @@ میزبان (SNI) (اختیاری) کپی فایل انجام نشد، لطفا از برنامه مدیریت فایل استفاده کنید افزودن فایل ‌ها - اسکن QRcode + اسکن QRCODE URL دانلود فایل‌ ها این عمل ممنوع است - رمز عبور Obfs + رمز عبور OBFS پورت پرش (درگاه سرور را بازنویسی می کند) فاصله پورت پرش (ثانیه) - pinSHA256 + PINSHA256 حالت XHTTP - جیسون خام XHTTP Extra، فرمت: { XHTTPObject } + جیسون خام XHTTP EXTRA، فرمت: { XHTTPObject } - URL را اضافه کنید + نشانی آدرس اینترنتی را اضافه کنید فایل پیدا نشد نام قبلاً وجود دارد بارگذاری @@ -139,12 +139,12 @@ اتصال خودکار هنگام راه اندازی هنگام راه اندازی به طور خودکار به سرور انتخابی متصل می شود که ممکن است ناموفق باشد. - تنظیمات Mux - فعال کردن Mux + تنظیمات MUX + فعال کردن MUX سریعتر است، اما ممکن است باعث اتصال ناپایدار شود\nمخزن ترافیک TCP با 8 اتصال پیش‌فرض، نحوه مدیریت UDP و QUIC را در زیر سفارشی کنید. اتصالات TCP (محدوده -1 تا 1024) اتصالات XUDP (محدوده -1 تا 1024) - مدیریت QUIC در تونل mux + مدیریت QUIC در تونل MUX رد کردن مجاز @@ -154,10 +154,10 @@ فعال کردن نمایش سرعت نمایش سرعت فعلی در قسمت آگاه‌سازی. \nآیکون آگاه‌سازی بر اساس استفاده تغییر می‌کند. - فعال کردن Sniffing - دامنه sniff را از بسته امتحان کنید (پیش‌فرض روشن) - فعال کردن routeOnly - از نام دامنه sniffed فقط برای مسیریابی استفاده کنید و آدرس مورد نظر را به عنوان آدرس IP نگه دارید. + فعال کردن SNIFFING + دامنه SNIFF را از بسته امتحان کنید (پیش‌فرض روشن) + فعال کردن ROUTEONLY + از نام دامنه SNIFFED فقط برای مسیریابی استفاده کنید و آدرس مورد نظر را به عنوان آدرس IP نگه دارید. فعال کردن DNS محلی @@ -166,10 +166,10 @@ فعال کردن DNS جعلی دی ان اس محلی آدرس های آیپی جعلی را بر می گرداند (سریع تر می باشد و تاخیر را کاهش می دهد اما ممکن است برای برخی از برنامه ها کار نکند) - ترجیح دادن IPv6 + ترجیح دادن IPV6 ترجیح دادن نشانی و مسیر های IPv6 - DNS از راه دور (اختیاری) + DNS از راه دور (اختیاری) (udp/tcp/https/quic) DNS VPN DNS (فقط IPv4/v6) @@ -177,8 +177,8 @@ DNS داخلی (اختیاری) DNS - آدرس اینترنتی آزمایش تاخیر واقعی کانفیگ ها (http/https) - Url + آدرس اینترنتی آزمایش تاخیر واقعی کانفیگ ها (HTTP/HTTPS) + URL اجازه اتصالات از طریق LAN دستگاه‌ های دیگر می‌توانند از طریق socks/http به پراکسی توسط نشانی آی‌پی شما متصل شوند، فقط در شبکه مورد اعتماد فعال می‌شوند تا از اتصال غیرمجاز جلوگیری کنند. @@ -210,6 +210,7 @@ حریم خصوصی درباره کد منبع + مجوز های منبع باز کانال تلگرام پشتیبان گیری از پیکربندی محل ذخیره سازی: [%s], پس از حذف نصب برنامه یا پاک کردن فضای ذخیره سازی، نسخه پشتیبان پاک می شود @@ -218,9 +219,9 @@ تبلیغات تبلیغات، برای جزئیات بیشتر کلیک کنید (کمک مالی کنید تا حذف شود) - به‌روزرسانی خودکار اشتراک ها + به‌ روزرسانی خودکار اشتراک ها اشتراک های خود را به طور خودکار با فاصله زمانی در پس زمینه به روز کنید. بسته به دستگاه، این ویژگی ممکن است همیشه کار نکند. - فاصله به‌روزرسانی خودکار (دقیقه، حداقل مقدار 15) + فاصله به‌ روزرسانی خودکار ( حداقل مقدار ، 15 دقیقه ) سطح گزارشات حالت برای راهنمایی بیشتر روی این متن، کلیک کنید @@ -239,14 +240,14 @@ تنظیمات گروه‌ اشتراک ملاحظات نشانی اینترنتی اختیاری - Remarks regular filter + REMARKS REGULAR FILTER فعال کردن به‌روزرسانی فعال سازی به‌روزرسانی خودکار Previous proxy remarks Next proxy remarks The remarks exists and is unique به‌روزرسانی گروه فعلی اشتراک - Tcping کانفیگ های گروه فعلی + TCPING کانفیگ های گروه فعلی تاخیر واقعی کانفیگ های گروه فعلی فایل ‌های دارایی جغرافیا مرتب‌ سازی بر اساس نتایج آزمایش @@ -269,7 +270,7 @@ وارد کردن مجموعه قوانین از کلیپ بورد وارد کردن مجموعه قوانین از QRcode صادر کردن مجموعه قوانین به کلیپ بورد - قفل است، این قانون را هنگام وارد کردن از پیش تنظیم‌ها حفظ کنید + قفل است، این قانون را هنگام وارد کردن از پیش تنظیم‌ ها حفظ کنید اتصال را بررسی کنید در حال آزمایش... @@ -288,7 +289,7 @@ فاصله بین بسته های فرگمنت (حداقل-حداکثر) فعال کردن فرگمنت - QRcode + QRCODE خروجی گرفتن در کلیپ‌ بورد خروجی گرفتن کانفیگ کامل در کلیپ بورد @@ -314,7 +315,7 @@ لیست سفید چین لیست سیاه چین - جهانی(Global) + جهانی(GLOBAL) ایران diff --git a/yass/src/core/logging.hpp b/yass/src/core/logging.hpp index 7b7593b513..a0f9816047 100644 --- a/yass/src/core/logging.hpp +++ b/yass/src/core/logging.hpp @@ -7,4 +7,15 @@ #include "third_party/googleurl-override/polyfills/base/check_op.h" #include "third_party/googleurl-override/polyfills/base/logging.h" +#include + +// override operator<< std::error_code from STL +inline std::ostream& operator<<(std::ostream& os, const std::error_code& ec) { +#ifdef _WIN32 + return os << ec.message() << " value: " << ec.value(); +#else + return os << ec.message(); +#endif +} + #endif // H_CORE_LOGGING diff --git a/yass/src/net/asio.hpp b/yass/src/net/asio.hpp index 565a81cc17..e499c8416c 100644 --- a/yass/src/net/asio.hpp +++ b/yass/src/net/asio.hpp @@ -13,6 +13,10 @@ #include "net/iobuf.hpp" +#ifndef ASIO_NO_SSL +#include "third_party/boringssl/src/include/openssl/ssl.h" +#endif + #if defined(_MSC_VER) && !defined(__clang__) #pragma push // #pragma warning(pop): likely mismatch, popping warning state pushed in @@ -33,10 +37,6 @@ #undef _POSIX_THREADS #endif #include -#ifndef ASIO_NO_SSL -void print_openssl_error(); -#include "third_party/boringssl/src/include/openssl/ssl.h" -#endif #include "net/asio_throw_exceptions.hpp" #pragma GCC diagnostic pop @@ -45,8 +45,6 @@ void print_openssl_error(); #pragma pop #endif // defined(_MSC_VER) && !defined(__clang__) -extern std::ostream& operator<<(std::ostream& o, asio::error_code); - /// Create a new modifiable buffer that represents the given memory range. /** * @returns mutable_buffer(tail, tailroom). @@ -72,6 +70,7 @@ inline asio::ASIO_CONST_BUFFER const_buffer(const net::IOBuf& io_buf) ASIO_NOEXC } #ifndef ASIO_NO_SSL +void print_openssl_error(); void load_ca_to_ssl_ctx(SSL_CTX* ssl_ctx); #endif diff --git a/yass/src/net/asio_ssl.cpp b/yass/src/net/asio_ssl.cpp index 820611c866..8108e59d87 100644 --- a/yass/src/net/asio_ssl.cpp +++ b/yass/src/net/asio_ssl.cpp @@ -42,14 +42,6 @@ ABSL_FLAG(bool, ca_native, false, "Load CA certs from the OS."); -std::ostream& operator<<(std::ostream& o, asio::error_code ec) { -#if BUILDFLAG(IS_WIN) - return o << ec.message() << " value: " << ec.value(); -#else - return o << ec.message(); -#endif -} - void print_openssl_error() { const char* file; int line; diff --git a/yass/src/test_util.cpp b/yass/src/test_util.cpp index 6828b30210..e3f8daeea8 100644 --- a/yass/src/test_util.cpp +++ b/yass/src/test_util.cpp @@ -1,10 +1,8 @@ // SPDX-License-Identifier: GPL-2.0 -/* Copyright (c) 2022 Chilledheart */ +/* Copyright (c) 2022-2024 Chilledheart */ #include "test_util.hpp" -#include - namespace testing { void hexdump(FILE* fp, const char* msg, const void* in, size_t len) { @@ -60,14 +58,4 @@ std::string EncodeHex(span in) { return ret; } -std::ostream& operator<<(std::ostream& os, ::testing::Bytes in) { - if (in.span_.empty()) { - return os << ""; - } - - // Print a byte slice as hex. - os << ::testing::EncodeHex(in.span_); - return os; -} - } // namespace testing diff --git a/yass/src/test_util.hpp b/yass/src/test_util.hpp index 8b6e65665c..22ada28cd8 100644 --- a/yass/src/test_util.hpp +++ b/yass/src/test_util.hpp @@ -7,7 +7,7 @@ #define _TEST_UTIL_H #include -#include +#include namespace testing { @@ -48,7 +48,16 @@ inline bool operator!=(const ::testing::Bytes& a, const ::testing::Bytes& b) { return !(a == b); } -extern std::ostream& operator<<(std::ostream& os, ::testing::Bytes in); +template +std::basic_ostream& operator<<(std::basic_ostream& os, ::testing::Bytes in) { + if (in.span_.empty()) { + return os << ""; + } + + // Print a byte slice as hex. + os << ::testing::EncodeHex(in.span_); + return os; +} } // namespace testing diff --git a/yt-dlp/yt_dlp/extractor/common.py b/yt-dlp/yt_dlp/extractor/common.py index 28a3adf936..ce79e0b622 100644 --- a/yt-dlp/yt_dlp/extractor/common.py +++ b/yt-dlp/yt_dlp/extractor/common.py @@ -1854,12 +1854,26 @@ class InfoExtractor: @staticmethod def _remove_duplicate_formats(formats): - format_urls = set() + seen_urls = set() + seen_fragment_urls = set() unique_formats = [] for f in formats: - if f['url'] not in format_urls: - format_urls.add(f['url']) + fragments = f.get('fragments') + if callable(fragments): unique_formats.append(f) + + elif fragments: + fragment_urls = frozenset( + fragment.get('url') or urljoin(f['fragment_base_url'], fragment['path']) + for fragment in fragments) + if fragment_urls not in seen_fragment_urls: + seen_fragment_urls.add(fragment_urls) + unique_formats.append(f) + + elif f['url'] not in seen_urls: + seen_urls.add(f['url']) + unique_formats.append(f) + formats[:] = unique_formats def _is_valid_url(self, url, video_id, item='video', headers={}): diff --git a/yt-dlp/yt_dlp/extractor/dacast.py b/yt-dlp/yt_dlp/extractor/dacast.py index 4e81aa4a7b..537352e5f7 100644 --- a/yt-dlp/yt_dlp/extractor/dacast.py +++ b/yt-dlp/yt_dlp/extractor/dacast.py @@ -1,3 +1,4 @@ +import functools import hashlib import re import time @@ -51,6 +52,15 @@ class DacastVODIE(DacastBaseIE): 'thumbnail': 'https://universe-files.dacast.com/26137208-5858-65c1-5e9a-9d6b6bd2b6c2', }, 'params': {'skip_download': 'm3u8'}, + }, { # /uspaes/ in hls_url + 'url': 'https://iframe.dacast.com/vod/f9823fc6-faba-b98f-0d00-4a7b50a58c5b/348c5c84-b6af-4859-bb9d-1d01009c795b', + 'info_dict': { + 'id': '348c5c84-b6af-4859-bb9d-1d01009c795b', + 'ext': 'mp4', + 'title': 'pl1-edyta-rubas-211124.mp4', + 'uploader_id': 'f9823fc6-faba-b98f-0d00-4a7b50a58c5b', + 'thumbnail': 'https://universe-files.dacast.com/4d0bd042-a536-752d-fc34-ad2fa44bbcbb.png', + }, }] _WEBPAGE_TESTS = [{ 'url': 'https://www.dacast.com/support/knowledgebase/how-can-i-embed-a-video-on-my-website/', @@ -74,6 +84,15 @@ class DacastVODIE(DacastBaseIE): 'params': {'skip_download': 'm3u8'}, }] + @functools.cached_property + def _usp_signing_secret(self): + player_js = self._download_webpage( + 'https://player.dacast.com/js/player.js', None, 'Downloading player JS') + # Rotates every so often, but hardcode a fallback in case of JS change/breakage before rotation + return self._search_regex( + r'\bUSP_SIGNING_SECRET\s*=\s*(["\'])(?P(?:(?!\1).)+)', player_js, + 'usp signing secret', group='secret', fatal=False) or 'odnInCGqhvtyRTtIiddxtuRtawYYICZP' + def _real_extract(self, url): user_id, video_id = self._match_valid_url(url).group('user_id', 'id') query = {'contentId': f'{user_id}-vod-{video_id}', 'provider': 'universe'} @@ -94,10 +113,10 @@ class DacastVODIE(DacastBaseIE): if 'DRM_EXT' in hls_url: self.report_drm(video_id) elif '/uspaes/' in hls_url: - # From https://player.dacast.com/js/player.js + # Ref: https://player.dacast.com/js/player.js ts = int(time.time()) signature = hashlib.sha1( - f'{10413792000 - ts}{ts}YfaKtquEEpDeusCKbvYszIEZnWmBcSvw').digest().hex() + f'{10413792000 - ts}{ts}{self._usp_signing_secret}'.encode()).digest().hex() hls_aes['uri'] = f'https://keys.dacast.com/uspaes/{video_id}.key?s={signature}&ts={ts}' for retry in self.RetryManager(): diff --git a/yt-dlp/yt_dlp/extractor/dropbox.py b/yt-dlp/yt_dlp/extractor/dropbox.py index c122096230..2bfeebc7cb 100644 --- a/yt-dlp/yt_dlp/extractor/dropbox.py +++ b/yt-dlp/yt_dlp/extractor/dropbox.py @@ -48,32 +48,30 @@ class DropboxIE(InfoExtractor): webpage = self._download_webpage(url, video_id) fn = urllib.parse.unquote(url_basename(url)) title = os.path.splitext(fn)[0] - password = self.get_param('videopassword') + content_id = None for part in self._yield_decoded_parts(webpage): if '/sm/password' in part: - webpage = self._download_webpage( - update_url('https://www.dropbox.com/sm/password', query=part.partition('?')[2]), video_id) + content_id = self._search_regex(r'content_id=([\w.+=/-]+)', part, 'content ID') break - if (self._og_search_title(webpage, default=None) == 'Dropbox - Password Required' - or 'Enter the password for this link' in webpage): - if password: - response = self._download_json( - 'https://www.dropbox.com/sm/auth', video_id, 'POSTing video password', - headers={'content-type': 'application/x-www-form-urlencoded; charset=UTF-8'}, - data=urlencode_postdata({ - 'is_xhr': 'true', - 't': self._get_cookies('https://www.dropbox.com')['t'].value, - 'content_id': self._search_regex(r'content_id=([\w.+=/-]+)["\']', webpage, 'content id'), - 'password': password, - 'url': url, - })) - - if response.get('status') != 'authed': - raise ExtractorError('Invalid password', expected=True) - elif not self._get_cookies('https://dropbox.com').get('sm_auth'): + if content_id: + password = self.get_param('videopassword') + if not password: raise ExtractorError('Password protected video, use --video-password ', expected=True) + + response = self._download_json( + 'https://www.dropbox.com/sm/auth', video_id, 'POSTing video password', + data=urlencode_postdata({ + 'is_xhr': 'true', + 't': self._get_cookies('https://www.dropbox.com')['t'].value, + 'content_id': content_id, + 'password': password, + 'url': update_url(url, scheme='', netloc=''), + })) + if response.get('status') != 'authed': + raise ExtractorError('Invalid password', expected=True) + webpage = self._download_webpage(url, video_id) formats, subtitles = [], {} diff --git a/yt-dlp/yt_dlp/extractor/tiktok.py b/yt-dlp/yt_dlp/extractor/tiktok.py index ba15f08b6d..9e53b34072 100644 --- a/yt-dlp/yt_dlp/extractor/tiktok.py +++ b/yt-dlp/yt_dlp/extractor/tiktok.py @@ -413,15 +413,6 @@ class TikTokBaseIE(InfoExtractor): for f in formats: self._set_cookie(urllib.parse.urlparse(f['url']).hostname, 'sid_tt', auth_cookie.value) - thumbnails = [] - for cover_id in ('cover', 'ai_dynamic_cover', 'animated_cover', 'ai_dynamic_cover_bak', - 'origin_cover', 'dynamic_cover'): - for cover_url in traverse_obj(video_info, (cover_id, 'url_list', ...)): - thumbnails.append({ - 'id': cover_id, - 'url': cover_url, - }) - stats_info = aweme_detail.get('statistics') or {} music_info = aweme_detail.get('music') or {} labels = traverse_obj(aweme_detail, ('hybrid_label', ..., 'text'), expected_type=str) @@ -467,7 +458,17 @@ class TikTokBaseIE(InfoExtractor): 'formats': formats, 'subtitles': self.extract_subtitles( aweme_detail, aweme_id, traverse_obj(author_info, 'uploader', 'uploader_id', 'channel_id')), - 'thumbnails': thumbnails, + 'thumbnails': [ + { + 'id': cover_id, + 'url': cover_url, + 'preference': -1 if cover_id in ('cover', 'origin_cover') else -2, + } + for cover_id in ( + 'cover', 'ai_dynamic_cover', 'animated_cover', + 'ai_dynamic_cover_bak', 'origin_cover', 'dynamic_cover') + for cover_url in traverse_obj(video_info, (cover_id, 'url_list', ...)) + ], 'duration': (traverse_obj(video_info, ( (None, 'download_addr'), 'duration', {int_or_none(scale=1000)}, any)) or traverse_obj(music_info, ('duration', {int_or_none}))), @@ -600,11 +601,15 @@ class TikTokBaseIE(InfoExtractor): 'repost_count': 'shareCount', 'comment_count': 'commentCount', }), expected_type=int_or_none), - 'thumbnails': traverse_obj(aweme_detail, ( - (None, 'video'), ('thumbnail', 'cover', 'dynamicCover', 'originCover'), { - 'url': ({url_or_none}, {self._proto_relative_url}), - }, - )), + 'thumbnails': [ + { + 'id': cover_id, + 'url': self._proto_relative_url(cover_url), + 'preference': -2 if cover_id == 'dynamicCover' else -1, + } + for cover_id in ('thumbnail', 'cover', 'dynamicCover', 'originCover') + for cover_url in traverse_obj(aweme_detail, ((None, 'video'), cover_id, {url_or_none})) + ], }