From b0b91ede47aa4903a00a8f828a9bec2525021d02 Mon Sep 17 00:00:00 2001 From: "github-action[bot]" Date: Sat, 19 Oct 2024 20:34:39 +0200 Subject: [PATCH] Update On Sat Oct 19 20:34:39 CEST 2024 --- .github/update.log | 1 + clash-meta/adapter/provider/provider.go | 64 +- .../adapter/provider/subscription_info.go | 3 +- .../component/profile/cachefile/cache.go | 7 +- .../profile/cachefile/subscriptioninfo.go | 41 + clash-meta/component/resource/vehicle.go | 22 +- clash-meta/constant/adapters.go | 4 +- clash-meta/constant/provider/interface.go | 1 + clash-nyanpasu/backend/Cargo.lock | 12 +- clash-nyanpasu/frontend/nyanpasu/package.json | 16 +- clash-nyanpasu/frontend/ui/package.json | 4 +- clash-nyanpasu/package.json | 4 +- clash-nyanpasu/pnpm-lock.yaml | 807 +++++++++--------- hysteria/app/cmd/server.go | 3 + ...tia-allow-forcing-order-of-MDI-pairs.patch | 107 +++ ...-fix-return-value-check-in-aqr107_co.patch | 31 + ...aquantia-fix-system-side-protocol-mi.patch | 2 +- mieru/apis/client/interface.go | 18 +- mieru/apis/client/mieru.go | 62 +- mieru/apis/model/addr.go | 53 +- mieru/apis/model/addr_test.go | 90 +- mieru/go.mod | 10 +- mieru/go.sum | 20 +- mieru/pkg/appctl/client.go | 18 +- mieru/pkg/appctl/client_test.go | 10 +- mieru/pkg/appctl/server.go | 30 +- mieru/pkg/appctl/server_test.go | 6 +- mieru/pkg/cipher/cipher.go | 5 +- mieru/pkg/cipher/cipher_test.go | 4 +- mieru/pkg/cli/client.go | 22 +- mieru/pkg/cli/server.go | 14 +- mieru/pkg/{util => common}/addr.go | 12 +- mieru/pkg/{util => common}/addr_test.go | 2 +- mieru/pkg/{util => common}/ascii.go | 3 +- mieru/pkg/{util => common}/ascii_test.go | 2 +- mieru/pkg/{util => common}/bytes.go | 2 +- mieru/pkg/{util => common}/bytes_test.go | 2 +- .../hierarchy_conn.go => common/conn.go} | 55 +- .../conn_test.go} | 20 +- mieru/pkg/{util => common}/copy.go | 2 +- mieru/pkg/{util => common}/dns.go | 11 +- mieru/pkg/{util => common}/dns_test.go | 2 +- mieru/pkg/{util => common}/entropy.go | 2 +- mieru/pkg/{util => common}/entropy_test.go | 2 +- mieru/pkg/{util => common}/ipdualstack.go | 2 +- .../pkg/{util => common}/ipdualstack_test.go | 2 +- mieru/pkg/{util => common}/mtu.go | 2 +- mieru/pkg/{util => common}/pick_port.go | 6 +- mieru/pkg/{util => common}/pick_port_test.go | 2 +- mieru/pkg/{util => common}/protojson.go | 2 +- .../pkg/{util => common}/sockopts/control.go | 0 .../pkg/{util => common}/sockopts/protect.go | 0 .../sockopts/protect_android.go | 0 mieru/pkg/{util => common}/sockopts/reuse.go | 0 .../{util => common}/sockopts/reuse_unix.go | 0 .../tcp_congestion_control.go | 2 +- .../{util => common}/transport_protocol.go | 2 +- mieru/pkg/protocol/mux.go | 14 +- mieru/pkg/protocol/mux_test.go | 50 +- mieru/pkg/protocol/padding.go | 8 +- mieru/pkg/protocol/padding_test.go | 8 +- mieru/pkg/protocol/segment.go | 34 +- mieru/pkg/protocol/segment_test.go | 34 +- mieru/pkg/protocol/session.go | 24 +- mieru/pkg/protocol/underlay.go | 20 +- mieru/pkg/protocol/underlay_base.go | 18 +- mieru/pkg/protocol/underlay_tcp.go | 24 +- mieru/pkg/protocol/underlay_udp.go | 26 +- mieru/pkg/socks5/auth.go | 10 +- mieru/pkg/socks5/client.go | 8 +- mieru/pkg/socks5/client_test.go | 6 +- mieru/pkg/socks5/http2socks.go | 6 +- mieru/pkg/socks5/request.go | 28 +- mieru/pkg/socks5/socks5.go | 24 +- mieru/pkg/socks5/socks5_test.go | 10 +- mieru/pkg/testtool/http.go | 4 +- mieru/pkg/testtool/pipe.go | 16 +- mieru/pkg/testtool/replay.go | 23 - mieru/pkg/testtool/rot13.go | 3 +- mieru/pkg/util/conn.go | 59 -- .../cmd/exampleapiclient/exampleapiclient.go | 17 +- mihomo/adapter/provider/provider.go | 64 +- mihomo/adapter/provider/subscription_info.go | 3 +- mihomo/component/profile/cachefile/cache.go | 7 +- .../profile/cachefile/subscriptioninfo.go | 41 + mihomo/component/resource/vehicle.go | 22 +- mihomo/constant/adapters.go | 4 +- mihomo/constant/provider/interface.go | 1 + naiveproxy/.github/workflows/build.yml | 46 +- .../page_allocator_internals_posix.h | 5 +- naiveproxy/src/get-openwrt.sh | 24 +- .../src/net/tools/naive/naive_proxy_bin.cc | 18 +- shadowsocks-rust/Cargo.lock | 4 +- sing-box/cmd/sing-box/cmd.go | 3 + sing-box/experimental/deprecated/constants.go | 79 ++ sing-box/experimental/deprecated/env.go | 30 + sing-box/experimental/deprecated/manager.go | 19 + sing-box/experimental/libbox/config.go | 4 + sing-box/experimental/libbox/deprecated.go | 22 + sing-box/experimental/libbox/platform.go | 1 + .../experimental/libbox/platform/interface.go | 2 + sing-box/experimental/libbox/service.go | 5 + sing-box/option/rule_set.go | 22 +- sing-box/route/router_geo_resources.go | 3 + small/v2ray-geodata/Makefile | 4 +- .../Views/AddServer2Window.axaml | 6 +- .../Views/AddServerWindow.axaml | 6 +- .../Views/CheckUpdateView.axaml | 8 +- .../Views/DNSSettingWindow.axaml | 6 +- .../Views/GlobalHotkeySettingWindow.axaml | 30 +- .../v2rayN.Desktop/Views/MainWindow.axaml.cs | 18 +- .../Views/OptionSettingWindow.axaml | 6 +- .../v2rayN.Desktop/Views/QrcodeView.axaml.cs | 12 +- .../Views/RoutingRuleDetailsWindow.axaml | 6 +- .../Views/RoutingRuleSettingWindow.axaml | 6 +- .../Views/RoutingSettingWindow.axaml | 6 +- .../v2rayN.Desktop/Views/SubEditWindow.axaml | 6 +- v2rayn/v2rayN/v2rayN/Common/QRCodeHelper.cs | 19 +- .../v2rayN/v2rayN/Views/AddServer2Window.xaml | 1 + .../v2rayN/v2rayN/Views/AddServerWindow.xaml | 1 + .../v2rayN/Views/BackupAndRestoreView.xaml | 1 - .../v2rayN/v2rayN/Views/CheckUpdateView.xaml | 3 +- .../v2rayN/v2rayN/Views/DNSSettingWindow.xaml | 1 + .../Views/GlobalHotkeySettingWindow.xaml | 1 + .../v2rayN/Views/OptionSettingWindow.xaml | 1 + .../Views/RoutingRuleDetailsWindow.xaml | 9 +- .../Views/RoutingRuleSettingWindow.xaml | 9 +- .../v2rayN/Views/RoutingSettingWindow.xaml | 1 + v2rayn/v2rayN/v2rayN/Views/SubEditWindow.xaml | 9 +- yass/.github/ISSUE_TEMPLATE/bug_report.md | 6 + yass/README.md | 8 +- yass/src/config/config.cpp | 8 +- yass/src/net/ssl_server_socket.cpp | 16 +- 133 files changed, 1664 insertions(+), 1081 deletions(-) create mode 100644 clash-meta/component/profile/cachefile/subscriptioninfo.go create mode 100644 lede/target/linux/generic/backport-6.6/837-v6.13-net-phy-aquantia-allow-forcing-order-of-MDI-pairs.patch create mode 100644 lede/target/linux/generic/backport-6.6/838-v6.13-net-phy-aquantia-fix-return-value-check-in-aqr107_co.patch rename mieru/pkg/{util => common}/addr.go (85%) rename mieru/pkg/{util => common}/addr_test.go (98%) rename mieru/pkg/{util => common}/ascii.go (97%) rename mieru/pkg/{util => common}/ascii_test.go (99%) rename mieru/pkg/{util => common}/bytes.go (98%) rename mieru/pkg/{util => common}/bytes_test.go (99%) rename mieru/pkg/{util/hierarchy_conn.go => common/conn.go} (52%) rename mieru/pkg/{util/hierarchy_conn_test.go => common/conn_test.go} (73%) rename mieru/pkg/{util => common}/copy.go (98%) rename mieru/pkg/{util => common}/dns.go (83%) rename mieru/pkg/{util => common}/dns_test.go (99%) rename mieru/pkg/{util => common}/entropy.go (99%) rename mieru/pkg/{util => common}/entropy_test.go (99%) rename mieru/pkg/{util => common}/ipdualstack.go (99%) rename mieru/pkg/{util => common}/ipdualstack_test.go (99%) rename mieru/pkg/{util => common}/mtu.go (98%) rename mieru/pkg/{util => common}/pick_port.go (88%) rename mieru/pkg/{util => common}/pick_port_test.go (98%) rename mieru/pkg/{util => common}/protojson.go (99%) rename mieru/pkg/{util => common}/sockopts/control.go (100%) rename mieru/pkg/{util => common}/sockopts/protect.go (100%) rename mieru/pkg/{util => common}/sockopts/protect_android.go (100%) rename mieru/pkg/{util => common}/sockopts/reuse.go (100%) rename mieru/pkg/{util => common}/sockopts/reuse_unix.go (100%) rename mieru/pkg/{util => common}/tcp_congestion_control.go (98%) rename mieru/pkg/{util => common}/transport_protocol.go (98%) delete mode 100644 mieru/pkg/testtool/replay.go delete mode 100644 mieru/pkg/util/conn.go create mode 100644 mihomo/component/profile/cachefile/subscriptioninfo.go create mode 100644 sing-box/experimental/deprecated/constants.go create mode 100644 sing-box/experimental/deprecated/env.go create mode 100644 sing-box/experimental/deprecated/manager.go create mode 100644 sing-box/experimental/libbox/deprecated.go diff --git a/.github/update.log b/.github/update.log index 66fac1684a..80965338b7 100644 --- a/.github/update.log +++ b/.github/update.log @@ -798,3 +798,4 @@ Update On Tue Oct 15 20:35:37 CEST 2024 Update On Wed Oct 16 20:34:52 CEST 2024 Update On Thu Oct 17 20:34:12 CEST 2024 Update On Fri Oct 18 20:36:34 CEST 2024 +Update On Sat Oct 19 20:34:29 CEST 2024 diff --git a/clash-meta/adapter/provider/provider.go b/clash-meta/adapter/provider/provider.go index 79a752a65e..3771792da5 100644 --- a/clash-meta/adapter/provider/provider.go +++ b/clash-meta/adapter/provider/provider.go @@ -1,11 +1,9 @@ package provider import ( - "context" "encoding/json" "errors" "fmt" - "net/http" "reflect" "runtime" "strings" @@ -14,7 +12,7 @@ import ( "github.com/metacubex/mihomo/adapter" "github.com/metacubex/mihomo/common/convert" "github.com/metacubex/mihomo/common/utils" - mihomoHttp "github.com/metacubex/mihomo/component/http" + "github.com/metacubex/mihomo/component/profile/cachefile" "github.com/metacubex/mihomo/component/resource" C "github.com/metacubex/mihomo/constant" types "github.com/metacubex/mihomo/constant/provider" @@ -80,7 +78,9 @@ func (pp *proxySetProvider) Initial() error { if err != nil { return err } - pp.getSubscriptionInfo() + if pp.VehicleType() == types.HTTP { + pp.SetSubscriptionInfo(cachefile.Cache().GetSubscriptionInfo(pp.Name())) + } pp.closeAllConnections() return nil } @@ -117,35 +117,14 @@ func (pp *proxySetProvider) setProxies(proxies []C.Proxy) { } } -func (pp *proxySetProvider) getSubscriptionInfo() { - if pp.VehicleType() != types.HTTP { - return - } - go func() { - ctx, cancel := context.WithTimeout(context.Background(), time.Second*90) - defer cancel() - resp, err := mihomoHttp.HttpRequestWithProxy(ctx, pp.Vehicle().Url(), - http.MethodGet, nil, nil, pp.Vehicle().Proxy()) - if err != nil { - return - } - defer resp.Body.Close() +func (pp *proxySetProvider) SetSubscriptionInfo(userInfo string) { + pp.subscriptionInfo = NewSubscriptionInfo(userInfo) +} - userInfoStr := strings.TrimSpace(resp.Header.Get("subscription-userinfo")) - if userInfoStr == "" { - resp2, err := mihomoHttp.HttpRequestWithProxy(ctx, pp.Vehicle().Url(), - http.MethodGet, http.Header{"User-Agent": {"Quantumultx"}}, nil, pp.Vehicle().Proxy()) - if err != nil { - return - } - defer resp2.Body.Close() - userInfoStr = strings.TrimSpace(resp2.Header.Get("subscription-userinfo")) - if userInfoStr == "" { - return - } - } - pp.subscriptionInfo = NewSubscriptionInfo(userInfoStr) - }() +func (pp *proxySetProvider) SetProvider(provider types.ProxyProvider) { + if httpVehicle, ok := pp.Vehicle().(*resource.HTTPVehicle); ok { + httpVehicle.SetProvider(provider) + } } func (pp *proxySetProvider) closeAllConnections() { @@ -196,6 +175,9 @@ func NewProxySetProvider(name string, interval time.Duration, filter string, exc fetcher := resource.NewFetcher[[]C.Proxy](name, interval, vehicle, proxiesParseAndFilter(filter, excludeFilter, excludeTypeArray, filterRegs, excludeFilterReg, dialerProxy, override), proxiesOnUpdate(pd)) pd.Fetcher = fetcher wrapper := &ProxySetProvider{pd} + if httpVehicle, ok := vehicle.(*resource.HTTPVehicle); ok { + httpVehicle.SetProvider(wrapper) + } runtime.SetFinalizer(wrapper, (*ProxySetProvider).Close) return wrapper, nil } @@ -205,16 +187,21 @@ func (pp *ProxySetProvider) Close() error { return pp.proxySetProvider.Close() } +func (pp *ProxySetProvider) SetProvider(provider types.ProxyProvider) { + pp.proxySetProvider.SetProvider(provider) +} + // CompatibleProvider for auto gc type CompatibleProvider struct { *compatibleProvider } type compatibleProvider struct { - name string - healthCheck *HealthCheck - proxies []C.Proxy - version uint32 + name string + healthCheck *HealthCheck + subscriptionInfo *SubscriptionInfo + proxies []C.Proxy + version uint32 } func (cp *compatibleProvider) MarshalJSON() ([]byte, error) { @@ -284,6 +271,10 @@ func (cp *compatibleProvider) Close() error { return nil } +func (cp *compatibleProvider) SetSubscriptionInfo(userInfo string) { + cp.subscriptionInfo = NewSubscriptionInfo(userInfo) +} + func NewCompatibleProvider(name string, proxies []C.Proxy, hc *HealthCheck) (*CompatibleProvider, error) { if len(proxies) == 0 { return nil, errors.New("provider need one proxy at least") @@ -313,7 +304,6 @@ func proxiesOnUpdate(pd *proxySetProvider) func([]C.Proxy) { return func(elm []C.Proxy) { pd.setProxies(elm) pd.version += 1 - pd.getSubscriptionInfo() } } diff --git a/clash-meta/adapter/provider/subscription_info.go b/clash-meta/adapter/provider/subscription_info.go index b72c7b6161..412b4342fc 100644 --- a/clash-meta/adapter/provider/subscription_info.go +++ b/clash-meta/adapter/provider/subscription_info.go @@ -16,8 +16,7 @@ type SubscriptionInfo struct { } func NewSubscriptionInfo(userinfo string) (si *SubscriptionInfo) { - userinfo = strings.ToLower(userinfo) - userinfo = strings.ReplaceAll(userinfo, " ", "") + userinfo = strings.ReplaceAll(strings.ToLower(userinfo), " ", "") si = new(SubscriptionInfo) for _, field := range strings.Split(userinfo, ";") { diff --git a/clash-meta/component/profile/cachefile/cache.go b/clash-meta/component/profile/cachefile/cache.go index f5101f5bb7..7b4cdfc2a6 100644 --- a/clash-meta/component/profile/cachefile/cache.go +++ b/clash-meta/component/profile/cachefile/cache.go @@ -17,9 +17,10 @@ var ( fileMode os.FileMode = 0o666 defaultCache *CacheFile - bucketSelected = []byte("selected") - bucketFakeip = []byte("fakeip") - bucketETag = []byte("etag") + bucketSelected = []byte("selected") + bucketFakeip = []byte("fakeip") + bucketETag = []byte("etag") + bucketSubscriptionInfo = []byte("subscriptioninfo") ) // CacheFile store and update the cache file diff --git a/clash-meta/component/profile/cachefile/subscriptioninfo.go b/clash-meta/component/profile/cachefile/subscriptioninfo.go new file mode 100644 index 0000000000..c68f92ebc9 --- /dev/null +++ b/clash-meta/component/profile/cachefile/subscriptioninfo.go @@ -0,0 +1,41 @@ +package cachefile + +import ( + "github.com/metacubex/mihomo/log" + + "github.com/metacubex/bbolt" +) + +func (c *CacheFile) SetSubscriptionInfo(name string, userInfo string) { + if c.DB == nil { + return + } + + err := c.DB.Batch(func(t *bbolt.Tx) error { + bucket, err := t.CreateBucketIfNotExists(bucketSubscriptionInfo) + if err != nil { + return err + } + + return bucket.Put([]byte(name), []byte(userInfo)) + }) + if err != nil { + log.Warnln("[CacheFile] write cache to %s failed: %s", c.DB.Path(), err.Error()) + return + } +} +func (c *CacheFile) GetSubscriptionInfo(name string) (userInfo string) { + if c.DB == nil { + return + } + c.DB.View(func(t *bbolt.Tx) error { + if bucket := t.Bucket(bucketSubscriptionInfo); bucket != nil { + if v := bucket.Get([]byte(name)); v != nil { + userInfo = string(v) + } + } + return nil + }) + + return +} diff --git a/clash-meta/component/resource/vehicle.go b/clash-meta/component/resource/vehicle.go index a9382329fc..8459d186f5 100644 --- a/clash-meta/component/resource/vehicle.go +++ b/clash-meta/component/resource/vehicle.go @@ -84,11 +84,12 @@ func NewFileVehicle(path string) *FileVehicle { } type HTTPVehicle struct { - url string - path string - proxy string - header http.Header - timeout time.Duration + url string + path string + proxy string + header http.Header + timeout time.Duration + provider types.ProxyProvider } func (h *HTTPVehicle) Url() string { @@ -111,6 +112,10 @@ func (h *HTTPVehicle) Write(buf []byte) error { return safeWrite(h.path, buf) } +func (h *HTTPVehicle) SetProvider(provider types.ProxyProvider) { + h.provider = provider +} + func (h *HTTPVehicle) Read(ctx context.Context, oldHash utils.HashType) (buf []byte, hash utils.HashType, err error) { ctx, cancel := context.WithTimeout(ctx, h.timeout) defer cancel() @@ -133,6 +138,13 @@ func (h *HTTPVehicle) Read(ctx context.Context, oldHash utils.HashType) (buf []b return } defer resp.Body.Close() + + if h.provider != nil { + subscriptionInfo := resp.Header.Get("subscription-userinfo") + cachefile.Cache().SetSubscriptionInfo(h.provider.Name(), subscriptionInfo) + h.provider.SetSubscriptionInfo(subscriptionInfo) + } + if resp.StatusCode < 200 || resp.StatusCode > 299 { if setIfNoneMatch && resp.StatusCode == http.StatusNotModified { return nil, oldHash, nil diff --git a/clash-meta/constant/adapters.go b/clash-meta/constant/adapters.go index b303eb846b..c7b73a0693 100644 --- a/clash-meta/constant/adapters.go +++ b/clash-meta/constant/adapters.go @@ -213,6 +213,8 @@ func (at AdapterType) String() string { return "WireGuard" case Tuic: return "Tuic" + case Ssh: + return "Ssh" case Relay: return "Relay" @@ -224,8 +226,6 @@ func (at AdapterType) String() string { return "URLTest" case LoadBalance: return "LoadBalance" - case Ssh: - return "Ssh" default: return "Unknown" } diff --git a/clash-meta/constant/provider/interface.go b/clash-meta/constant/provider/interface.go index 065b801ae4..925c173469 100644 --- a/clash-meta/constant/provider/interface.go +++ b/clash-meta/constant/provider/interface.go @@ -81,6 +81,7 @@ type ProxyProvider interface { Version() uint32 RegisterHealthCheckTask(url string, expectedStatus utils.IntRanges[uint16], filter string, interval uint) HealthCheckURL() string + SetSubscriptionInfo(userInfo string) } // RuleProvider interface diff --git a/clash-nyanpasu/backend/Cargo.lock b/clash-nyanpasu/backend/Cargo.lock index dd488d3e5b..e3571af0bc 100644 --- a/clash-nyanpasu/backend/Cargo.lock +++ b/clash-nyanpasu/backend/Cargo.lock @@ -313,9 +313,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.89" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" +checksum = "37bf3594c4c988a53154954629820791dde498571819ae4ca50ca811e060cc95" [[package]] name = "arbitrary" @@ -7566,9 +7566,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.129" +version = "1.0.131" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbcf9b78a125ee667ae19388837dd12294b858d101fdd393cb9d5501ef09eb2" +checksum = "67d42a0bd4ac281beff598909bb56a86acaf979b84483e1c79c10dcaf98f8cf3" dependencies = [ "itoa 1.0.11", "memchr", @@ -9746,9 +9746,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "getrandom 0.2.15", "serde", diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index 94566683cf..7ef479a215 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -21,7 +21,7 @@ "@mui/material": "6.1.4", "@nyanpasu/interface": "workspace:^", "@nyanpasu/ui": "workspace:^", - "@tanstack/router-zod-adapter": "1.67.0", + "@tanstack/router-zod-adapter": "1.73.1", "@tauri-apps/api": "2.0.2", "@types/json-schema": "7.0.15", "ahooks": "3.8.1", @@ -34,12 +34,12 @@ "json-schema": "0.4.0", "material-react-table": "3.0.1", "monaco-editor": "0.52.0", - "mui-color-input": "4.0.1", + "mui-color-input": "4.0.2", "react": "rc", "react-dom": "rc", - "react-error-boundary": "4.0.13", + "react-error-boundary": "4.1.1", "react-fast-marquee": "1.6.5", - "react-hook-form-mui": "7.3.1", + "react-hook-form-mui": "7.4.0", "react-i18next": "15.0.3", "react-markdown": "9.0.1", "react-split-grid": "1.0.4", @@ -54,9 +54,9 @@ "@emotion/react": "11.13.3", "@iconify/json": "2.2.261", "@monaco-editor/react": "4.6.0", - "@tanstack/react-router": "1.67.0", - "@tanstack/router-devtools": "1.67.0", - "@tanstack/router-plugin": "1.66.1", + "@tanstack/react-router": "1.73.1", + "@tanstack/router-devtools": "1.73.1", + "@tanstack/router-plugin": "1.73.1", "@tauri-apps/plugin-clipboard-manager": "2.0.0", "@tauri-apps/plugin-dialog": "2.0.0", "@tauri-apps/plugin-fs": "2.0.0", @@ -76,7 +76,7 @@ "meta-json-schema": "1.18.9", "monaco-yaml": "5.2.2", "nanoid": "5.0.7", - "sass": "1.80.2", + "sass": "1.80.3", "shiki": "1.22.0", "tailwindcss-textshadow": "2.1.3", "unplugin-auto-import": "0.18.3", diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json index bad23a17b9..b6be9a2226 100644 --- a/clash-nyanpasu/frontend/ui/package.json +++ b/clash-nyanpasu/frontend/ui/package.json @@ -31,7 +31,7 @@ "framer-motion": "12.0.0-alpha.1", "react": "rc", "react-dom": "rc", - "react-error-boundary": "4.0.13", + "react-error-boundary": "4.1.1", "react-i18next": "15.0.3", "react-use": "17.5.1", "vite": "5.4.9", @@ -42,7 +42,7 @@ "@types/d3-interpolate-path": "2.0.3", "clsx": "2.1.1", "d3-interpolate-path": "2.3.0", - "sass": "1.80.2", + "sass": "1.80.3", "tailwind-merge": "2.5.4", "typescript-plugin-css-modules": "5.1.0", "vite-plugin-dts": "4.2.4" diff --git a/clash-nyanpasu/package.json b/clash-nyanpasu/package.json index 1c60197c6b..ff652cdc70 100644 --- a/clash-nyanpasu/package.json +++ b/clash-nyanpasu/package.json @@ -63,7 +63,7 @@ "@tauri-apps/cli": "2.0.3", "@types/fs-extra": "11.0.4", "@types/lodash-es": "4.17.12", - "@types/node": "22.7.6", + "@types/node": "22.7.7", "@typescript-eslint/eslint-plugin": "8.10.0", "@typescript-eslint/parser": "8.10.0", "autoprefixer": "10.4.20", @@ -106,7 +106,7 @@ }, "packageManager": "pnpm@9.12.2+sha512.22721b3a11f81661ae1ec68ce1a7b879425a1ca5b991c975b074ac220b187ce56c708fe5db69f4c962c989452eee76c82877f4ee80f474cebd61ee13461b6228", "engines": { - "node": "22.9.0" + "node": "22.10.0" }, "pnpm": { "overrides": { diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index 38ee3b458c..92776e961a 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -22,7 +22,7 @@ importers: devDependencies: '@commitlint/cli': specifier: 19.5.0 - version: 19.5.0(@types/node@22.7.6)(typescript@5.6.3) + version: 19.5.0(@types/node@22.7.7)(typescript@5.6.3) '@commitlint/config-conventional': specifier: 19.5.0 version: 19.5.0 @@ -39,8 +39,8 @@ importers: specifier: 4.17.12 version: 4.17.12 '@types/node': - specifier: 22.7.6 - version: 22.7.6 + specifier: 22.7.7 + version: 22.7.7 '@typescript-eslint/eslint-plugin': specifier: 8.10.0 version: 8.10.0(@typescript-eslint/parser@8.10.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) @@ -97,7 +97,7 @@ importers: version: 4.6.2(eslint@8.57.1) knip: specifier: 5.33.3 - version: 5.33.3(@types/node@22.7.6)(typescript@5.6.3) + version: 5.33.3(@types/node@22.7.7)(typescript@5.6.3) lint-staged: specifier: 15.2.10 version: 15.2.10 @@ -166,16 +166,16 @@ importers: version: 2.0.2 ahooks: specifier: 3.8.1 - version: 3.8.1(react@19.0.0-rc-bf7e210c-20241017) + version: 3.8.1(react@19.0.0-rc-b8ae38f8-20241018) ofetch: specifier: 1.4.1 version: 1.4.1 react: specifier: rc - version: 19.0.0-rc-bf7e210c-20241017 + version: 19.0.0-rc-b8ae38f8-20241018 swr: specifier: 2.2.5 - version: 2.2.5(react@19.0.0-rc-bf7e210c-20241017) + version: 2.2.5(react@19.0.0-rc-b8ae38f8-20241018) devDependencies: '@types/react': specifier: npm:types-react@rc @@ -185,16 +185,16 @@ importers: dependencies: '@dnd-kit/core': specifier: 6.1.0 - version: 6.1.0(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + version: 6.1.0(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) '@dnd-kit/sortable': specifier: 8.0.0 - version: 8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + version: 8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) '@dnd-kit/utilities': specifier: 3.2.2 - version: 3.2.2(react@19.0.0-rc-bf7e210c-20241017) + version: 3.2.2(react@19.0.0-rc-b8ae38f8-20241018) '@emotion/styled': specifier: 11.13.0 - version: 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + version: 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@juggle/resize-observer': specifier: 3.4.0 version: 3.4.0 @@ -203,13 +203,13 @@ importers: version: 0.3.0 '@mui/icons-material': specifier: 6.1.4 - version: 6.1.4(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + version: 6.1.4(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@mui/lab': specifier: 6.0.0-beta.12 - version: 6.0.0-beta.12(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + version: 6.0.0-beta.12(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@mui/material': specifier: 6.1.4 - version: 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + version: 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@nyanpasu/interface': specifier: workspace:^ version: link:../interface @@ -217,8 +217,8 @@ importers: specifier: workspace:^ version: link:../ui '@tanstack/router-zod-adapter': - specifier: 1.67.0 - version: 1.67.0(@tanstack/react-router@1.67.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017))(zod@3.23.8) + specifier: 1.73.1 + version: 1.73.1(@tanstack/react-router@1.73.1(@tanstack/router-generator@1.73.1)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018))(zod@3.23.8) '@tauri-apps/api': specifier: 2.0.2 version: 2.0.2 @@ -227,10 +227,10 @@ importers: version: 7.0.15 ahooks: specifier: 3.8.1 - version: 3.8.1(react@19.0.0-rc-bf7e210c-20241017) + version: 3.8.1(react@19.0.0-rc-b8ae38f8-20241018) allotment: specifier: 1.20.2 - version: 1.20.2(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + version: 1.20.2(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) country-code-emoji: specifier: 2.3.0 version: 2.3.0 @@ -239,58 +239,58 @@ importers: version: 1.11.13 framer-motion: specifier: 12.0.0-alpha.1 - version: 12.0.0-alpha.1(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + version: 12.0.0-alpha.1(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) i18next: specifier: 23.16.0 version: 23.16.0 jotai: specifier: 2.10.1 - version: 2.10.1(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + version: 2.10.1(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) json-schema: specifier: 0.4.0 version: 0.4.0 material-react-table: specifier: 3.0.1 - version: 3.0.1(zc7dttvdyluo24xjhw2wa3g6by) + version: 3.0.1(to27j2ukcmzy47ax52jpdgaxhm) monaco-editor: specifier: 0.52.0 version: 0.52.0 mui-color-input: - specifier: 4.0.1 - version: 4.0.1(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + specifier: 4.0.2 + version: 4.0.2(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) react: specifier: rc - version: 19.0.0-rc-bf7e210c-20241017 + version: 19.0.0-rc-b8ae38f8-20241018 react-dom: specifier: rc - version: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + version: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) react-error-boundary: - specifier: 4.0.13 - version: 4.0.13(react@19.0.0-rc-bf7e210c-20241017) + specifier: 4.1.1 + version: 4.1.1(react@19.0.0-rc-b8ae38f8-20241018) react-fast-marquee: specifier: 1.6.5 - version: 1.6.5(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + version: 1.6.5(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) react-hook-form-mui: - specifier: 7.3.1 - version: 7.3.1(35tfmkmub6rvdi4ih3s64n4z6y) + specifier: 7.4.0 + version: 7.4.0(xcbqhgo42owwgvmfs7v5zxu57i) react-i18next: specifier: 15.0.3 - version: 15.0.3(i18next@23.16.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + version: 15.0.3(i18next@23.16.0)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) react-markdown: specifier: 9.0.1 - version: 9.0.1(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + version: 9.0.1(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) react-split-grid: specifier: 1.0.4 - version: 1.0.4(react@19.0.0-rc-bf7e210c-20241017) + version: 1.0.4(react@19.0.0-rc-b8ae38f8-20241018) react-use: specifier: 17.5.1 - version: 17.5.1(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + version: 17.5.1(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) swr: specifier: 2.2.5 - version: 2.2.5(react@19.0.0-rc-bf7e210c-20241017) + version: 2.2.5(react@19.0.0-rc-b8ae38f8-20241018) virtua: specifier: 0.35.1 - version: 0.35.1(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + version: 0.35.1(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) vite-bundle-visualizer: specifier: 1.2.1 version: 1.2.1(rollup@4.21.0) @@ -303,22 +303,22 @@ importers: version: 11.12.0 '@emotion/react': specifier: 11.13.3 - version: 11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + version: 11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@iconify/json': specifier: 2.2.261 version: 2.2.261 '@monaco-editor/react': specifier: 4.6.0 - version: 4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + version: 4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) '@tanstack/react-router': - specifier: 1.67.0 - version: 1.67.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + specifier: 1.73.1 + version: 1.73.1(@tanstack/router-generator@1.73.1)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) '@tanstack/router-devtools': - specifier: 1.67.0 - version: 1.67.0(@tanstack/react-router@1.67.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017))(csstype@3.1.3)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + specifier: 1.73.1 + version: 1.73.1(@tanstack/react-router@1.73.1(@tanstack/router-generator@1.73.1)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018))(csstype@3.1.3)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) '@tanstack/router-plugin': - specifier: 1.66.1 - version: 1.66.1(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0))(webpack-sources@3.2.3) + specifier: 1.73.1 + version: 1.73.1(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0))(webpack-sources@3.2.3) '@tauri-apps/plugin-clipboard-manager': specifier: 2.0.0 version: 2.0.0 @@ -354,10 +354,10 @@ importers: version: 13.12.2 '@vitejs/plugin-react': specifier: 4.3.2 - version: 4.3.2(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0)) + version: 4.3.2(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0)) '@vitejs/plugin-react-swc': specifier: 3.7.1 - version: 3.7.1(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0)) + version: 3.7.1(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0)) change-case: specifier: 5.4.4 version: 5.4.4 @@ -377,8 +377,8 @@ importers: specifier: 5.0.7 version: 5.0.7 sass: - specifier: 1.80.2 - version: 1.80.2 + specifier: 1.80.3 + version: 1.80.3 shiki: specifier: 1.22.0 version: 1.22.0 @@ -396,16 +396,16 @@ importers: version: 13.12.0 vite: specifier: 5.4.9 - version: 5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0) + version: 5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0) vite-plugin-sass-dts: specifier: 1.3.29 - version: 1.3.29(postcss@8.4.47)(prettier@3.3.3)(sass-embedded@1.78.0)(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0)) + version: 1.3.29(postcss@8.4.47)(prettier@3.3.3)(sass-embedded@1.78.0)(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0)) vite-plugin-svgr: specifier: 4.2.0 - version: 4.2.0(rollup@4.21.0)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0)) + version: 4.2.0(rollup@4.21.0)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0)) vite-tsconfig-paths: specifier: 5.0.1 - version: 5.0.1(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0)) + version: 5.0.1(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0)) zod: specifier: 3.23.8 version: 3.23.8 @@ -417,19 +417,19 @@ importers: version: 0.3.0 '@mui/icons-material': specifier: 6.1.4 - version: 6.1.4(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + version: 6.1.4(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@mui/lab': specifier: 6.0.0-beta.12 - version: 6.0.0-beta.12(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + version: 6.0.0-beta.12(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@mui/material': specifier: 6.1.4 - version: 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + version: 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(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-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + version: 1.1.2(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@radix-ui/react-scroll-area': specifier: 1.2.0 - version: 1.2.0(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + version: 1.2.0(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@tauri-apps/api': specifier: 2.0.2 version: 2.0.2 @@ -441,41 +441,41 @@ importers: version: types-react@19.0.0-rc.1 '@vitejs/plugin-react': specifier: 4.3.2 - version: 4.3.2(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0)) + version: 4.3.2(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0)) ahooks: specifier: 3.8.1 - version: 3.8.1(react@19.0.0-rc-bf7e210c-20241017) + version: 3.8.1(react@19.0.0-rc-b8ae38f8-20241018) d3: specifier: 7.9.0 version: 7.9.0 framer-motion: specifier: 12.0.0-alpha.1 - version: 12.0.0-alpha.1(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + version: 12.0.0-alpha.1(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) react: specifier: rc - version: 19.0.0-rc-bf7e210c-20241017 + version: 19.0.0-rc-b8ae38f8-20241018 react-dom: specifier: rc - version: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + version: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) react-error-boundary: - specifier: 4.0.13 - version: 4.0.13(react@19.0.0-rc-bf7e210c-20241017) + specifier: 4.1.1 + version: 4.1.1(react@19.0.0-rc-b8ae38f8-20241018) react-i18next: specifier: 15.0.3 - version: 15.0.3(i18next@23.16.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + version: 15.0.3(i18next@23.16.0)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) react-use: specifier: 17.5.1 - version: 17.5.1(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + version: 17.5.1(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) vite: specifier: 5.4.9 - version: 5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0) + version: 5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0) vite-tsconfig-paths: specifier: 5.0.1 - version: 5.0.1(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0)) + version: 5.0.1(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0)) devDependencies: '@emotion/react': specifier: 11.13.3 - version: 11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + version: 11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@types/d3-interpolate-path': specifier: 2.0.3 version: 2.0.3 @@ -486,8 +486,8 @@ importers: specifier: 2.3.0 version: 2.3.0 sass: - specifier: 1.80.2 - version: 1.80.2 + specifier: 1.80.3 + version: 1.80.3 tailwind-merge: specifier: 2.5.4 version: 2.5.4 @@ -496,7 +496,7 @@ importers: version: 5.1.0(typescript@5.6.3) vite-plugin-dts: specifier: 4.2.4 - version: 4.2.4(@types/node@22.7.6)(rollup@4.21.0)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0)) + version: 4.2.4(@types/node@22.7.7)(rollup@4.21.0)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0)) scripts: dependencies: @@ -753,11 +753,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.25.7': - resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.25.8': resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==} engines: {node: '>=6.0.0'} @@ -834,10 +829,6 @@ packages: resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.7': - resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} - engines: {node: '>=6.9.0'} - '@babel/types@7.25.8': resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} engines: {node: '>=6.9.0'} @@ -2316,11 +2307,11 @@ packages: resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==} engines: {node: '>=12'} - '@tanstack/react-router@1.67.0': - resolution: {integrity: sha512-8AmtDpJZpoC+TnHf9qS0FbRz7qnLkQ336Oi6fyhfbHH+BPvf27tlj+YxbVrt7sVrdvI8n3AZveUGx38/JUkLDQ==} + '@tanstack/react-router@1.73.1': + resolution: {integrity: sha512-TI3tqPogSN9q8MxwS7qtHevM3DwPNIa8AoOoHHB/c88o+U5DBkoHclaRNkcSrTcFdfOoyak8T8lTOH2mbLMHzw==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-generator': 1.65.0 + '@tanstack/router-generator': 1.73.1 react: '>=18' react-dom: '>=18' peerDependenciesMeta: @@ -2346,20 +2337,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.67.0': - resolution: {integrity: sha512-20mk4wGX7FAgJNnjsSb2RJH2Z5BMNrxdNX3CT41QMp83S/SXlnRaknxfbfWuoToQtQTHvyWRV0ZYpMIvG5Y6Zg==} + '@tanstack/router-devtools@1.73.1': + resolution: {integrity: sha512-Qslo2GUV5/uvLJCm8d2VpygWPk6lW+lS0uaAtPV11ol+xEtyt8xld9OdlLcO+KE7geb/bSVg112Ei70m1GQBwA==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.67.0 + '@tanstack/react-router': ^1.73.1 react: '>=18' react-dom: '>=18' - '@tanstack/router-generator@1.65.0': - resolution: {integrity: sha512-N2H2cHBbUNLqx/ySd5g0R1GR8gGc4UagoBWmQKaTD5gHjFwWojJhigllZlQN4U1nxZLb4yJ3eJYuxRQZCoqaJw==} + '@tanstack/router-generator@1.73.1': + resolution: {integrity: sha512-+oHYnspeS3f4bpbnUymH9dEGJbxhfV0rSwHl0cTq4pXSPXuLYcqYZmSGCqBfiq6CGtgOXZ2wEUMgezt3R2PvZg==} engines: {node: '>=12'} - '@tanstack/router-plugin@1.66.1': - resolution: {integrity: sha512-0oeO4x1AKwL9lP9WMJ4ysVcNCUdXHffjFKBWYaEt1Cj2RkWgaWXtSzgg3dhFFemYgn/Zm1NOGQlA4f6/q/PPZw==} + '@tanstack/router-plugin@1.73.1': + resolution: {integrity: sha512-pJMTWVFEIvTXLL6kzYZlPRlQ7WwfsBNZGIJck+dX0NQVjw6CEj1a4w9hlJFSqIOBbRdjtY6hS3Y00DDFGf9Inw==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' @@ -2373,8 +2364,8 @@ packages: webpack: optional: true - '@tanstack/router-zod-adapter@1.67.0': - resolution: {integrity: sha512-5vxO0a8i8ZDkD2Myvkvs1oz8CqPr4SsWh9jvn+I6h5pAYPPaTPQ4EN/QwUReWgSTCEhkApHUbyfzVLFOHmJAkQ==} + '@tanstack/router-zod-adapter@1.73.1': + resolution: {integrity: sha512-ICLOYGdTz1kqy7KsqFIEING32a4DGPO98RSf1wV1jgPYQoDSt1zExiWoBhX/1DwCVsQQmX3TJOh/to+LJvFv/w==} engines: {node: '>=12'} peerDependencies: '@tanstack/react-router': '>=1.43.2' @@ -2681,8 +2672,8 @@ packages: '@types/node@22.5.0': resolution: {integrity: sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==} - '@types/node@22.7.6': - resolution: {integrity: sha512-/d7Rnj0/ExXDMcioS78/kf1lMzYk4BZV8MZGTBKzTGZ6/406ukkbYlIsZmMPhcR5KlkunDHQLrtAVmSq7r+mSw==} + '@types/node@22.7.7': + resolution: {integrity: sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -3045,6 +3036,7 @@ packages: boolean@3.2.0: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} @@ -5272,8 +5264,8 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - mui-color-input@4.0.1: - resolution: {integrity: sha512-Edc3sCa39zUoSL3XR9vjVnhMnLOBgd3mfszVfQc8stFqNMVaOujK2aThMtCOLiuLIyIxGcTa6dKV1qD5MmHPDw==} + mui-color-input@4.0.2: + resolution: {integrity: sha512-TXbdtgBqyeUFXmmT2PW4LZfr/j14J24wtjp0GhQxmskwRl7NF54UmBFs1/Qsx9jev3V67weAs0GyYUT+Nkw9Tg==} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 @@ -5895,13 +5887,14 @@ packages: resolution: {integrity: sha512-B5XGOnOfwH4B7m0chzE1Cv5jlnfbbxF0LoBI+lacQuNj9PMvZ6JS5NCFnDw3zzy7zpOo6leyJNAED8sN3CgLVA==} hasBin: true - react-dom@19.0.0-rc-bf7e210c-20241017: - resolution: {integrity: sha512-akljKHWZ84tq2CdZyGXgGYJrGcweaQtoLJqWGZSbOEuudahyQ4ZvR/IwEOREjmqGIPg9vaEqFzjTKtn4H7I58Q==} + react-dom@19.0.0-rc-b8ae38f8-20241018: + resolution: {integrity: sha512-tpE0uxYzUugFdDk8ztzHFvIfRwdxMV6+zCnwmxv8Z3yQMNIdyulzkLYG3Sm76TwjHqA5BD51wEWvsOGlF7ggoQ==} peerDependencies: - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 - react-error-boundary@4.0.13: - resolution: {integrity: sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==} + react-error-boundary@4.1.1: + resolution: {integrity: sha512-EOAEsbVm2EQD8zPS4m24SiaR/506RPC3CjMcjJ5JWKECsctyLsDTKxB26Hvl7jcz7KweSOkBYAcY/hmMpMn2jA==} + engines: {pnpm: '=9'} peerDependencies: react: '>=16.13.1' @@ -5914,8 +5907,8 @@ packages: react: '>= 16.8.0 || ^18.0.0' react-dom: '>= 16.8.0 || ^18.0.0' - react-hook-form-mui@7.3.1: - resolution: {integrity: sha512-I7XX3jKD8tnKJFuiI7Ri3y0fZmKFQcXeq5bxwt/7TXNOTBpkaxg5KPd34JnTZc8i8U5nsYeOf8dW0S5bTqigtQ==} + react-hook-form-mui@7.4.0: + resolution: {integrity: sha512-etciyU/ZfFp1io8NUi7gxx5Eyx7q6aRdccxuqQKKo6zKo69lEj9Fy+gr6Ft6D9miIqq1VyiHy3wZoaoTcLwauA==} engines: {node: '>=14'} peerDependencies: '@mui/icons-material': '>= 5.x <7' @@ -5987,8 +5980,8 @@ packages: react: '*' react-dom: '*' - react@19.0.0-rc-bf7e210c-20241017: - resolution: {integrity: sha512-ZkqeMTey7hRHadDT+qMpwDKHQVAvvjmtP0idzpf4DOlrFQmZ6Ji1HwnD4eIUx9g59PeW80fb/u6WRWd/xTBpfg==} + react@19.0.0-rc-b8ae38f8-20241018: + resolution: {integrity: sha512-biHm+Fh5xA/N8fp/34mDxk3zHrRQ1pFUYIe+jmVDsyg58OtHnYkmX7mxA63dtOhL5vwnXagUTWM3iktM585Iug==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -6279,16 +6272,16 @@ packages: engines: {node: '>=16.0.0'} hasBin: true - sass@1.80.2: - resolution: {integrity: sha512-9wXY8cGBlUmoUoT+vwOZOFCiS+naiWVjqlreN9ar9PudXbGwlMTFwCR5K9kB4dFumJ6ib98wZyAObJKsWf1nAA==} + sass@1.80.3: + resolution: {integrity: sha512-ptDWyVmDMVielpz/oWy3YP3nfs7LpJTHIJZboMVs8GEC9eUmtZTZhMHlTW98wY4aEorDfjN38+Wr/XjskFWcfA==} engines: {node: '>=14.0.0'} hasBin: true sax@1.3.0: resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} - scheduler@0.25.0-rc-bf7e210c-20241017: - resolution: {integrity: sha512-hXYfi00SQzsINtMnOqJZQoA3s+sshbJu32lrrxE9NQTzaNrjOtcFinHVHs0LaN54BFhFzpHJ2j5yJ2vaEA6dwg==} + scheduler@0.25.0-rc-b8ae38f8-20241018: + resolution: {integrity: sha512-mIDFzXIHvZiHazgIaPRIWOEsgvohqW9vUzoXDkK7Y+I1xG9khkBPsdKkkORnAM1r/vmd2eeUOo123I48F1b7oQ==} screenfull@5.2.0: resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} @@ -7386,7 +7379,7 @@ snapshots: '@babel/generator@7.25.6': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.25.8 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 @@ -7461,7 +7454,7 @@ snapshots: '@babel/helper-module-imports@7.24.7': dependencies: '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/types': 7.25.8 transitivePeerDependencies: - supports-color @@ -7510,7 +7503,7 @@ snapshots: '@babel/helper-simple-access@7.24.7': dependencies: '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/types': 7.25.8 transitivePeerDependencies: - supports-color @@ -7548,7 +7541,7 @@ snapshots: '@babel/helpers@7.25.6': dependencies: '@babel/template': 7.25.7 - '@babel/types': 7.25.7 + '@babel/types': 7.25.8 '@babel/helpers@7.25.7': dependencies: @@ -7571,11 +7564,7 @@ snapshots: '@babel/parser@7.25.6': dependencies: - '@babel/types': 7.25.7 - - '@babel/parser@7.25.7': - dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.25.8 '@babel/parser@7.25.8': dependencies: @@ -7625,7 +7614,7 @@ snapshots: dependencies: '@babel/code-frame': 7.24.7 '@babel/parser': 7.25.8 - '@babel/types': 7.25.7 + '@babel/types': 7.25.8 '@babel/template@7.25.7': dependencies: @@ -7653,9 +7642,9 @@ snapshots: dependencies: '@babel/code-frame': 7.24.7 '@babel/generator': 7.25.7 - '@babel/parser': 7.25.7 + '@babel/parser': 7.25.8 '@babel/template': 7.25.7 - '@babel/types': 7.25.7 + '@babel/types': 7.25.8 debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: @@ -7685,12 +7674,6 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 - '@babel/types@7.25.7': - dependencies: - '@babel/helper-string-parser': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - to-fast-properties: 2.0.0 - '@babel/types@7.25.8': dependencies: '@babel/helper-string-parser': 7.25.7 @@ -7699,11 +7682,11 @@ snapshots: '@bufbuild/protobuf@1.10.0': {} - '@commitlint/cli@19.5.0(@types/node@22.7.6)(typescript@5.6.3)': + '@commitlint/cli@19.5.0(@types/node@22.7.7)(typescript@5.6.3)': dependencies: '@commitlint/format': 19.5.0 '@commitlint/lint': 19.5.0 - '@commitlint/load': 19.5.0(@types/node@22.7.6)(typescript@5.6.3) + '@commitlint/load': 19.5.0(@types/node@22.7.7)(typescript@5.6.3) '@commitlint/read': 19.5.0 '@commitlint/types': 19.5.0 tinyexec: 0.3.0 @@ -7750,7 +7733,7 @@ snapshots: '@commitlint/rules': 19.5.0 '@commitlint/types': 19.5.0 - '@commitlint/load@19.5.0(@types/node@22.7.6)(typescript@5.6.3)': + '@commitlint/load@19.5.0(@types/node@22.7.7)(typescript@5.6.3)': dependencies: '@commitlint/config-validator': 19.5.0 '@commitlint/execute-rule': 19.5.0 @@ -7758,7 +7741,7 @@ snapshots: '@commitlint/types': 19.5.0 chalk: 5.3.0 cosmiconfig: 9.0.0(typescript@5.6.3) - cosmiconfig-typescript-loader: 5.0.0(@types/node@22.7.6)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) + cosmiconfig-typescript-loader: 5.0.0(@types/node@22.7.7)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -7830,29 +7813,29 @@ snapshots: '@ctrl/tinycolor@4.1.0': {} - '@dnd-kit/accessibility@3.1.0(react@19.0.0-rc-bf7e210c-20241017)': + '@dnd-kit/accessibility@3.1.0(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 tslib: 2.7.0 - '@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)': + '@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: - '@dnd-kit/accessibility': 3.1.0(react@19.0.0-rc-bf7e210c-20241017) - '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-bf7e210c-20241017) - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + '@dnd-kit/accessibility': 3.1.0(react@19.0.0-rc-b8ae38f8-20241018) + '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-b8ae38f8-20241018) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) tslib: 2.7.0 - '@dnd-kit/sortable@8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)': + '@dnd-kit/sortable@8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: - '@dnd-kit/core': 6.1.0(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) - '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-bf7e210c-20241017) - react: 19.0.0-rc-bf7e210c-20241017 + '@dnd-kit/core': 6.1.0(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) + '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-b8ae38f8-20241018) + react: 19.0.0-rc-b8ae38f8-20241018 tslib: 2.7.0 - '@dnd-kit/utilities@3.2.2(react@19.0.0-rc-bf7e210c-20241017)': + '@dnd-kit/utilities@3.2.2(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 tslib: 2.7.0 '@dual-bundle/import-meta-resolve@4.1.0': {} @@ -7901,17 +7884,17 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 '@emotion/babel-plugin': 11.12.0 '@emotion/cache': 11.13.1 '@emotion/serialize': 1.3.1 - '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@19.0.0-rc-bf7e210c-20241017) + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@19.0.0-rc-b8ae38f8-20241018) '@emotion/utils': 1.4.0 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 @@ -7941,16 +7924,16 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 '@emotion/babel-plugin': 11.12.0 '@emotion/is-prop-valid': 1.3.0 - '@emotion/react': 11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@emotion/serialize': 1.3.1 - '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@19.0.0-rc-bf7e210c-20241017) + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@19.0.0-rc-b8ae38f8-20241018) '@emotion/utils': 1.4.0 - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 @@ -7958,9 +7941,9 @@ snapshots: '@emotion/unitless@0.9.0': {} - '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@19.0.0-rc-bf7e210c-20241017)': + '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 '@emotion/utils@1.4.0': {} @@ -8143,11 +8126,11 @@ snapshots: '@floating-ui/core': 1.6.1 '@floating-ui/utils': 0.2.2 - '@floating-ui/react-dom@2.1.2(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)': + '@floating-ui/react-dom@2.1.2(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: '@floating-ui/dom': 1.6.5 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) '@floating-ui/utils@0.2.2': {} @@ -8233,23 +8216,23 @@ snapshots: '@material/material-color-utilities@0.3.0': {} - '@microsoft/api-extractor-model@7.29.6(@types/node@22.7.6)': + '@microsoft/api-extractor-model@7.29.6(@types/node@22.7.7)': dependencies: '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.7.0(@types/node@22.7.6) + '@rushstack/node-core-library': 5.7.0(@types/node@22.7.7) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.47.7(@types/node@22.7.6)': + '@microsoft/api-extractor@7.47.7(@types/node@22.7.7)': dependencies: - '@microsoft/api-extractor-model': 7.29.6(@types/node@22.7.6) + '@microsoft/api-extractor-model': 7.29.6(@types/node@22.7.7) '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.7.0(@types/node@22.7.6) + '@rushstack/node-core-library': 5.7.0(@types/node@22.7.7) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.0(@types/node@22.7.6) - '@rushstack/ts-command-line': 4.22.6(@types/node@22.7.6) + '@rushstack/terminal': 0.14.0(@types/node@22.7.7) + '@rushstack/ts-command-line': 4.22.6(@types/node@22.7.7) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.8 @@ -8273,105 +8256,105 @@ snapshots: monaco-editor: 0.52.0 state-local: 1.0.7 - '@monaco-editor/react@4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)': + '@monaco-editor/react@4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: '@monaco-editor/loader': 1.4.0(monaco-editor@0.52.0) monaco-editor: 0.52.0 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) - '@mui/base@5.0.0-beta.59(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@mui/base@5.0.0-beta.59(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.7 - '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) '@mui/types': 7.2.18(types-react@19.0.0-rc.1) - '@mui/utils': 6.1.4(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.4(react@19.0.0-rc-b8ae38f8-20241018)(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-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) optionalDependencies: '@types/react': types-react@19.0.0-rc.1 '@mui/core-downloads-tracker@6.1.4': {} - '@mui/icons-material@6.1.4(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@mui/icons-material@6.1.4(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.7 - '@mui/material': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-bf7e210c-20241017 + '@mui/material': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/lab@6.0.0-beta.12(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@mui/lab@6.0.0-beta.12(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.7 - '@mui/base': 5.0.0-beta.59(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@mui/material': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@mui/system': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@mui/base': 5.0.0-beta.59(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@mui/material': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@mui/system': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@mui/types': 7.2.18(types-react@19.0.0-rc.1) - '@mui/utils': 6.1.4(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.4(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) clsx: 2.1.1 prop-types: 15.8.1 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 - '@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.7 '@mui/core-downloads-tracker': 6.1.4 - '@mui/system': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@mui/system': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@mui/types': 7.2.18(types-react@19.0.0-rc.1) - '@mui/utils': 6.1.4(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.4(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.11 clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) react-is: 18.3.1 - react-transition-group: 4.4.5(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + react-transition-group: 4.4.5(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 - '@mui/private-theming@5.16.6(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@mui/private-theming@5.16.6(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.7 - '@mui/utils': 5.16.6(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@mui/utils': 5.16.6(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) prop-types: 15.8.1 - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/private-theming@6.1.4(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@mui/private-theming@6.1.4(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.7 - '@mui/utils': 6.1.4(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.4(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) prop-types: 15.8.1 - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/styled-engine@5.16.6(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)': + '@mui/styled-engine@5.16.6(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: '@babel/runtime': 7.25.7 '@emotion/cache': 11.13.1 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) - '@mui/styled-engine@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)': + '@mui/styled-engine@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: '@babel/runtime': 7.25.7 '@emotion/cache': 11.13.1 @@ -8379,87 +8362,87 @@ snapshots: '@emotion/sheet': 1.4.0 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) - '@mui/system@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@mui/system@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.7 - '@mui/private-theming': 5.16.6(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@mui/styled-engine': 5.16.6(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017) + '@mui/private-theming': 5.16.6(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@mui/styled-engine': 5.16.6(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018) '@mui/types': 7.2.18(types-react@19.0.0-rc.1) - '@mui/utils': 5.16.6(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@mui/utils': 5.16.6(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 - '@mui/system@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@mui/system@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.7 - '@mui/private-theming': 6.1.4(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@mui/styled-engine': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017) + '@mui/private-theming': 6.1.4(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@mui/styled-engine': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018) '@mui/types': 7.2.18(types-react@19.0.0-rc.1) - '@mui/utils': 6.1.4(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.4(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 '@mui/types@7.2.18(types-react@19.0.0-rc.1)': optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/utils@5.16.6(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@mui/utils@5.16.6(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.7 '@mui/types': 7.2.18(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-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 react-is: 18.3.1 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/utils@6.1.4(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@mui/utils@6.1.4(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.7 '@mui/types': 7.2.18(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-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 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.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@mui/x-date-pickers@7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.7 - '@mui/base': 5.0.0-beta.59(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@mui/material': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@mui/system': 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@mui/utils': 5.16.6(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@mui/base': 5.0.0-beta.59(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@mui/material': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@mui/system': 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@mui/utils': 5.16.6(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) '@types/react-transition-group': 4.4.11 clsx: 2.1.1 prop-types: 15.8.1 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) - react-transition-group: 4.4.5(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) + react-transition-group: 4.4.5(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) dayjs: 1.11.13 transitivePeerDependencies: - '@types/react' @@ -8746,82 +8729,82 @@ snapshots: '@radix-ui/primitive@1.1.0': {} - '@radix-ui/react-compose-refs@1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@radix-ui/react-compose-refs@1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-context@1.1.1(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@radix-ui/react-context@1.1.1(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-direction@1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@radix-ui/react-direction@1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-portal@1.1.2(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@radix-ui/react-portal@1.1.2(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-presence@1.1.1(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@radix-ui/react-presence@1.1.1(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-primitive@2.0.0(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@radix-ui/react-primitive@2.0.0(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: - '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-scroll-area@1.2.0(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@radix-ui/react-scroll-area@1.2.0(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: '@radix-ui/number': 1.1.0 '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-slot@1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@radix-ui/react-slot@1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-bf7e210c-20241017 + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-use-callback-ref@1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@radix-ui/react-use-callback-ref@1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-use-layout-effect@1.1.0(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1)': + '@radix-ui/react-use-layout-effect@1.1.0(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1)': dependencies: - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 @@ -8883,7 +8866,7 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@rushstack/node-core-library@5.7.0(@types/node@22.7.6)': + '@rushstack/node-core-library@5.7.0(@types/node@22.7.7)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -8894,23 +8877,23 @@ snapshots: resolve: 1.22.8 semver: 7.5.4 optionalDependencies: - '@types/node': 22.7.6 + '@types/node': 22.7.7 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.8 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.14.0(@types/node@22.7.6)': + '@rushstack/terminal@0.14.0(@types/node@22.7.7)': dependencies: - '@rushstack/node-core-library': 5.7.0(@types/node@22.7.6) + '@rushstack/node-core-library': 5.7.0(@types/node@22.7.7) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.7.6 + '@types/node': 22.7.7 - '@rushstack/ts-command-line@4.22.6(@types/node@22.7.6)': + '@rushstack/ts-command-line@4.22.6(@types/node@22.7.7)': dependencies: - '@rushstack/terminal': 0.14.0(@types/node@22.7.6) + '@rushstack/terminal': 0.14.0(@types/node@22.7.7) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -9009,7 +8992,7 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.25.8 entities: 4.5.0 '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.6.3))': @@ -9084,54 +9067,54 @@ snapshots: dependencies: remove-accents: 0.5.0 - '@tanstack/react-router@1.67.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)': + '@tanstack/react-router@1.73.1(@tanstack/router-generator@1.73.1)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: '@tanstack/history': 1.61.1 - '@tanstack/react-store': 0.5.5(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + '@tanstack/react-store': 0.5.5(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 optionalDependencies: - '@tanstack/router-generator': 1.65.0 + '@tanstack/router-generator': 1.73.1 - '@tanstack/react-store@0.5.5(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)': + '@tanstack/react-store@0.5.5(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: '@tanstack/store': 0.5.5 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) - use-sync-external-store: 1.2.2(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) + use-sync-external-store: 1.2.2(react@19.0.0-rc-b8ae38f8-20241018) - '@tanstack/react-table@8.20.5(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)': + '@tanstack/react-table@8.20.5(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: '@tanstack/table-core': 8.20.5 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) - '@tanstack/react-virtual@3.10.6(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)': + '@tanstack/react-virtual@3.10.6(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: '@tanstack/virtual-core': 3.10.6 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) - '@tanstack/router-devtools@1.67.0(@tanstack/react-router@1.67.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017))(csstype@3.1.3)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)': + '@tanstack/router-devtools@1.73.1(@tanstack/react-router@1.73.1(@tanstack/router-generator@1.73.1)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018))(csstype@3.1.3)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)': dependencies: - '@tanstack/react-router': 1.67.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + '@tanstack/react-router': 1.73.1(@tanstack/router-generator@1.73.1)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) transitivePeerDependencies: - csstype - '@tanstack/router-generator@1.65.0': + '@tanstack/router-generator@1.73.1': dependencies: '@tanstack/virtual-file-routes': 1.64.0 prettier: 3.3.3 tsx: 4.19.1 zod: 3.23.8 - '@tanstack/router-plugin@1.66.1(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0))(webpack-sources@3.2.3)': + '@tanstack/router-plugin@1.73.1(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0))(webpack-sources@3.2.3)': dependencies: '@babel/core': 7.25.8 '@babel/generator': 7.25.7 @@ -9141,7 +9124,7 @@ snapshots: '@babel/template': 7.25.7 '@babel/traverse': 7.25.7 '@babel/types': 7.25.8 - '@tanstack/router-generator': 1.65.0 + '@tanstack/router-generator': 1.73.1 '@tanstack/virtual-file-routes': 1.64.0 '@types/babel__core': 7.20.5 '@types/babel__generator': 7.6.8 @@ -9152,14 +9135,14 @@ snapshots: unplugin: 1.14.1(webpack-sources@3.2.3) zod: 3.23.8 optionalDependencies: - vite: 5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0) + vite: 5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0) transitivePeerDependencies: - supports-color - webpack-sources - '@tanstack/router-zod-adapter@1.67.0(@tanstack/react-router@1.67.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017))(zod@3.23.8)': + '@tanstack/router-zod-adapter@1.73.1(@tanstack/react-router@1.73.1(@tanstack/router-generator@1.73.1)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018))(zod@3.23.8)': dependencies: - '@tanstack/react-router': 1.67.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + '@tanstack/react-router': 1.73.1(@tanstack/router-generator@1.73.1)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) zod: 3.23.8 '@tanstack/store@0.5.5': {} @@ -9299,12 +9282,12 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 22.7.6 + '@types/node': 22.7.7 '@types/responselike': 1.0.3 '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 22.7.6 + '@types/node': 22.7.7 '@types/d3-array@3.2.1': {} @@ -9440,7 +9423,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.7.6 + '@types/node': 22.7.7 '@types/geojson@7946.0.14': {} @@ -9458,11 +9441,11 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.7.6 + '@types/node': 22.7.7 '@types/keyv@3.1.4': dependencies: - '@types/node': 22.7.6 + '@types/node': 22.7.7 '@types/lodash-es@4.17.12': dependencies: @@ -9482,7 +9465,7 @@ snapshots: dependencies: undici-types: 6.19.8 - '@types/node@22.7.6': + '@types/node@22.7.7': dependencies: undici-types: 6.19.8 @@ -9504,7 +9487,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 22.7.6 + '@types/node': 22.7.7 '@types/retry@0.12.2': {} @@ -9516,7 +9499,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.7.6 + '@types/node': 22.7.7 optional: true '@typescript-eslint/eslint-plugin@8.10.0(@typescript-eslint/parser@8.10.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)': @@ -9602,21 +9585,21 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react-swc@3.7.1(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0))': + '@vitejs/plugin-react-swc@3.7.1(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0))': dependencies: '@swc/core': 1.7.26 - vite: 5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0) + vite: 5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@4.3.2(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0))': + '@vitejs/plugin-react@4.3.2(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-react-jsx-self': 7.25.7(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-source': 7.25.7(@babel/core@7.25.2) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0) + vite: 5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0) transitivePeerDependencies: - supports-color @@ -9706,14 +9689,14 @@ snapshots: clean-stack: 5.2.0 indent-string: 5.0.0 - ahooks@3.8.1(react@19.0.0-rc-bf7e210c-20241017): + ahooks@3.8.1(react@19.0.0-rc-b8ae38f8-20241018): dependencies: '@babel/runtime': 7.25.6 dayjs: 1.11.13 intersection-observer: 0.12.2 js-cookie: 3.0.5 lodash: 4.17.21 - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 react-fast-compare: 3.2.2 resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 @@ -9755,16 +9738,16 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - allotment@1.20.2(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017): + allotment@1.20.2(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018): dependencies: classnames: 2.5.1 eventemitter3: 5.0.1 lodash.clamp: 4.0.3 lodash.debounce: 4.0.8 lodash.isequal: 4.5.0 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) - use-resize-observer: 9.1.0(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) + use-resize-observer: 9.1.0(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) ansi-align@2.0.0: dependencies: @@ -10209,9 +10192,9 @@ snapshots: dependencies: toggle-selection: 1.0.6 - cosmiconfig-typescript-loader@5.0.0(@types/node@22.7.6)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): + cosmiconfig-typescript-loader@5.0.0(@types/node@22.7.7)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): dependencies: - '@types/node': 22.7.6 + '@types/node': 22.7.7 cosmiconfig: 9.0.0(typescript@5.6.3) jiti: 1.21.6 typescript: 5.6.3 @@ -11236,13 +11219,13 @@ snapshots: fraction.js@4.3.7: {} - framer-motion@12.0.0-alpha.1(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017): + framer-motion@12.0.0-alpha.1(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018): dependencies: tslib: 2.7.0 optionalDependencies: '@emotion/is-prop-valid': 1.3.0 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) fs-extra@11.2.0: dependencies: @@ -11858,10 +11841,10 @@ snapshots: jju@1.4.0: {} - jotai@2.10.1(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1): + jotai@2.10.1(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1): optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 js-cookie@2.2.1: {} @@ -11931,11 +11914,11 @@ snapshots: kind-of@6.0.3: {} - knip@5.33.3(@types/node@22.7.6)(typescript@5.6.3): + knip@5.33.3(@types/node@22.7.7)(typescript@5.6.3): dependencies: '@nodelib/fs.walk': 1.2.8 '@snyk/github-codeowners': 1.1.0 - '@types/node': 22.7.6 + '@types/node': 22.7.7 easy-table: 1.2.0 enhanced-resolve: 5.17.1 fast-glob: 3.3.2 @@ -12110,19 +12093,19 @@ snapshots: escape-string-regexp: 4.0.0 optional: true - material-react-table@3.0.1(zc7dttvdyluo24xjhw2wa3g6by): + material-react-table@3.0.1(to27j2ukcmzy47ax52jpdgaxhm): dependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@mui/icons-material': 6.1.4(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@mui/material': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@mui/icons-material': 6.1.4(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@mui/material': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(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-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) - '@tanstack/react-virtual': 3.10.6(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) + '@tanstack/react-table': 8.20.5(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) + '@tanstack/react-virtual': 3.10.6(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) highlight-words: 1.2.2 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) mathml-tag-names@2.1.3: {} @@ -12457,14 +12440,14 @@ snapshots: muggle-string@0.4.1: {} - mui-color-input@4.0.1(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1): + mui-color-input@4.0.2(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1): dependencies: '@ctrl/tinycolor': 4.1.0 - '@emotion/react': 11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@mui/material': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + '@emotion/react': 11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@mui/material': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) optionalDependencies: '@types/react': types-react@19.0.0-rc.1 @@ -12474,15 +12457,15 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nano-css@5.6.2(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017): + nano-css@5.6.2(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018): dependencies: '@jridgewell/sourcemap-codec': 1.5.0 css-tree: 1.1.3 csstype: 3.1.3 fastest-stable-stringify: 2.0.2 inline-style-prefixer: 7.0.1 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) rtl-css-js: 1.16.1 stacktrace-js: 2.0.2 stylis: 4.3.2 @@ -13023,50 +13006,50 @@ snapshots: - supports-color - utf-8-validate - react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017): + react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018): dependencies: - react: 19.0.0-rc-bf7e210c-20241017 - scheduler: 0.25.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 + scheduler: 0.25.0-rc-b8ae38f8-20241018 - react-error-boundary@4.0.13(react@19.0.0-rc-bf7e210c-20241017): + react-error-boundary@4.1.1(react@19.0.0-rc-b8ae38f8-20241018): dependencies: - '@babel/runtime': 7.25.6 - react: 19.0.0-rc-bf7e210c-20241017 + '@babel/runtime': 7.25.7 + react: 19.0.0-rc-b8ae38f8-20241018 react-fast-compare@3.2.2: {} - react-fast-marquee@1.6.5(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017): + react-fast-marquee@1.6.5(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018): dependencies: - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) - react-hook-form-mui@7.3.1(35tfmkmub6rvdi4ih3s64n4z6y): + react-hook-form-mui@7.4.0(xcbqhgo42owwgvmfs7v5zxu57i): dependencies: - '@mui/material': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-bf7e210c-20241017 - react-hook-form: 7.52.1(react@19.0.0-rc-bf7e210c-20241017) + '@mui/material': 6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-b8ae38f8-20241018 + react-hook-form: 7.52.1(react@19.0.0-rc-b8ae38f8-20241018) optionalDependencies: - '@mui/icons-material': 6.1.4(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) - '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1) + '@mui/icons-material': 6.1.4(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) + '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@mui/material@6.1.4(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1) - react-hook-form@7.52.1(react@19.0.0-rc-bf7e210c-20241017): + react-hook-form@7.52.1(react@19.0.0-rc-b8ae38f8-20241018): dependencies: - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 - react-i18next@15.0.3(i18next@23.16.0)(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017): + react-i18next@15.0.3(i18next@23.16.0)(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018): dependencies: '@babel/runtime': 7.25.6 html-parse-stringify: 3.0.1 i18next: 23.16.0 - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 optionalDependencies: - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) react-is@16.13.1: {} react-is@18.3.1: {} - react-markdown@9.0.1(react@19.0.0-rc-bf7e210c-20241017)(types-react@19.0.0-rc.1): + react-markdown@9.0.1(react@19.0.0-rc-b8ae38f8-20241018)(types-react@19.0.0-rc.1): dependencies: '@types/hast': 3.0.4 '@types/react': types-react@19.0.0-rc.1 @@ -13074,7 +13057,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.0 html-url-attributes: 3.0.0 mdast-util-to-hast: 13.1.0 - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 remark-parse: 11.0.0 remark-rehype: 11.1.0 unified: 11.0.4 @@ -13085,27 +13068,27 @@ snapshots: react-refresh@0.14.2: {} - react-split-grid@1.0.4(react@19.0.0-rc-bf7e210c-20241017): + react-split-grid@1.0.4(react@19.0.0-rc-b8ae38f8-20241018): dependencies: prop-types: 15.8.1 - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 split-grid: 1.0.11 - react-transition-group@4.4.5(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017): + react-transition-group@4.4.5(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018): dependencies: '@babel/runtime': 7.25.7 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) - react-universal-interface@0.6.2(react@19.0.0-rc-bf7e210c-20241017)(tslib@2.7.0): + react-universal-interface@0.6.2(react@19.0.0-rc-b8ae38f8-20241018)(tslib@2.7.0): dependencies: - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 tslib: 2.7.0 - react-use@17.5.1(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017): + react-use@17.5.1(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018): dependencies: '@types/js-cookie': 2.2.7 '@xobotyi/scrollbar-width': 1.9.5 @@ -13113,10 +13096,10 @@ snapshots: fast-deep-equal: 3.1.3 fast-shallow-equal: 1.0.0 js-cookie: 2.2.1 - nano-css: 5.6.2(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017) - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) - react-universal-interface: 0.6.2(react@19.0.0-rc-bf7e210c-20241017)(tslib@2.7.0) + nano-css: 5.6.2(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) + react-universal-interface: 0.6.2(react@19.0.0-rc-b8ae38f8-20241018)(tslib@2.7.0) resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 set-harmonic-interval: 1.0.1 @@ -13124,7 +13107,7 @@ snapshots: ts-easing: 0.2.0 tslib: 2.7.0 - react@19.0.0-rc-bf7e210c-20241017: {} + react@19.0.0-rc-b8ae38f8-20241018: {} read-cache@1.0.0: dependencies: @@ -13293,7 +13276,7 @@ snapshots: rtl-css-js@1.16.1: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 run-parallel@1.2.0: dependencies: @@ -13412,7 +13395,7 @@ snapshots: sass-embedded-win32-ia32: 1.78.0 sass-embedded-win32-x64: 1.78.0 - sass@1.80.2: + sass@1.80.3: dependencies: '@parcel/watcher': 2.4.1 chokidar: 4.0.0 @@ -13421,7 +13404,7 @@ snapshots: sax@1.3.0: {} - scheduler@0.25.0-rc-bf7e210c-20241017: {} + scheduler@0.25.0-rc-b8ae38f8-20241018: {} screenfull@5.2.0: {} @@ -13827,11 +13810,11 @@ snapshots: svg-tags@1.0.0: {} - swr@2.2.5(react@19.0.0-rc-bf7e210c-20241017): + swr@2.2.5(react@19.0.0-rc-b8ae38f8-20241018): dependencies: client-only: 0.0.1 - react: 19.0.0-rc-bf7e210c-20241017 - use-sync-external-store: 1.2.2(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + use-sync-external-store: 1.2.2(react@19.0.0-rc-b8ae38f8-20241018) synckit@0.9.1: dependencies: @@ -14086,7 +14069,7 @@ snapshots: postcss-modules-local-by-default: 4.0.5(postcss@8.4.47) postcss-modules-scope: 3.2.0(postcss@8.4.47) reserved-words: 0.1.2 - sass: 1.80.2 + sass: 1.80.3 source-map-js: 1.2.1 stylus: 0.62.0 tsconfig-paths: 4.2.0 @@ -14268,15 +14251,15 @@ snapshots: dependencies: prepend-http: 1.0.4 - use-resize-observer@9.1.0(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017): + use-resize-observer@9.1.0(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018): dependencies: '@juggle/resize-observer': 3.4.0 - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) - use-sync-external-store@1.2.2(react@19.0.0-rc-bf7e210c-20241017): + use-sync-external-store@1.2.2(react@19.0.0-rc-b8ae38f8-20241018): dependencies: - react: 19.0.0-rc-bf7e210c-20241017 + react: 19.0.0-rc-b8ae38f8-20241018 utf-8-validate@5.0.10: dependencies: @@ -14299,10 +14282,10 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - virtua@0.35.1(react-dom@19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017))(react@19.0.0-rc-bf7e210c-20241017): + virtua@0.35.1(react-dom@19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018))(react@19.0.0-rc-b8ae38f8-20241018): optionalDependencies: - react: 19.0.0-rc-bf7e210c-20241017 - react-dom: 19.0.0-rc-bf7e210c-20241017(react@19.0.0-rc-bf7e210c-20241017) + react: 19.0.0-rc-b8ae38f8-20241018 + react-dom: 19.0.0-rc-b8ae38f8-20241018(react@19.0.0-rc-b8ae38f8-20241018) vite-bundle-visualizer@1.2.1(rollup@4.21.0): dependencies: @@ -14314,9 +14297,9 @@ snapshots: - rollup - supports-color - vite-plugin-dts@4.2.4(@types/node@22.7.6)(rollup@4.21.0)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0)): + vite-plugin-dts@4.2.4(@types/node@22.7.7)(rollup@4.21.0)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0)): dependencies: - '@microsoft/api-extractor': 7.47.7(@types/node@22.7.6) + '@microsoft/api-extractor': 7.47.7(@types/node@22.7.7) '@rollup/pluginutils': 5.1.0(rollup@4.21.0) '@volar/typescript': 2.4.5 '@vue/language-core': 2.1.6(typescript@5.6.3) @@ -14327,52 +14310,52 @@ snapshots: magic-string: 0.30.11 typescript: 5.6.3 optionalDependencies: - vite: 5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0) + vite: 5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-sass-dts@1.3.29(postcss@8.4.47)(prettier@3.3.3)(sass-embedded@1.78.0)(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0)): + vite-plugin-sass-dts@1.3.29(postcss@8.4.47)(prettier@3.3.3)(sass-embedded@1.78.0)(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0)): dependencies: postcss: 8.4.47 postcss-js: 4.0.1(postcss@8.4.47) prettier: 3.3.3 sass-embedded: 1.78.0 - vite: 5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0) + vite: 5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0) - vite-plugin-svgr@4.2.0(rollup@4.21.0)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0)): + vite-plugin-svgr@4.2.0(rollup@4.21.0)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0)): dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.21.0) '@svgr/core': 8.1.0(typescript@5.6.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.6.3)) - vite: 5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0) + vite: 5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0) transitivePeerDependencies: - rollup - supports-color - typescript - vite-tsconfig-paths@5.0.1(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0)): + vite-tsconfig-paths@5.0.1(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0)): dependencies: debug: 4.3.7 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.6.3) optionalDependencies: - vite: 5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0) + vite: 5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0) transitivePeerDependencies: - supports-color - typescript - vite@5.4.9(@types/node@22.7.6)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.2)(stylus@0.62.0): + vite@5.4.9(@types/node@22.7.7)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.80.3)(stylus@0.62.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.21.0 optionalDependencies: - '@types/node': 22.7.6 + '@types/node': 22.7.7 fsevents: 2.3.3 less: 4.2.0 - sass: 1.80.2 + sass: 1.80.3 sass-embedded: 1.78.0 stylus: 0.62.0 diff --git a/hysteria/app/cmd/server.go b/hysteria/app/cmd/server.go index 3da748d7bd..a4b8470940 100644 --- a/hysteria/app/cmd/server.go +++ b/hysteria/app/cmd/server.go @@ -804,6 +804,9 @@ func (c *serverConfig) fillMasqHandler(hyConfig *server.Config) error { if err != nil { return configError{Field: "masquerade.proxy.url", Err: err} } + if u.Scheme != "http" && u.Scheme != "https" { + return configError{Field: "masquerade.proxy.url", Err: fmt.Errorf("unsupported protocol scheme \"%s\"", u.Scheme)} + } handler = &httputil.ReverseProxy{ Rewrite: func(r *httputil.ProxyRequest) { r.SetURL(u) diff --git a/lede/target/linux/generic/backport-6.6/837-v6.13-net-phy-aquantia-allow-forcing-order-of-MDI-pairs.patch b/lede/target/linux/generic/backport-6.6/837-v6.13-net-phy-aquantia-allow-forcing-order-of-MDI-pairs.patch new file mode 100644 index 0000000000..9522bcaa45 --- /dev/null +++ b/lede/target/linux/generic/backport-6.6/837-v6.13-net-phy-aquantia-allow-forcing-order-of-MDI-pairs.patch @@ -0,0 +1,107 @@ +From a2e1ba275eae96a8171deb19e9c7c2f5978fee7b Mon Sep 17 00:00:00 2001 +From: Daniel Golle +Date: Fri, 4 Oct 2024 17:18:16 +0100 +Subject: [PATCH] net: phy: aquantia: allow forcing order of MDI pairs + +Despite supporting Auto MDI-X, it looks like Aquantia only supports +swapping pair (1,2) with pair (3,6) like it used to be for MDI-X on +100MBit/s networks. + +When all 4 pairs are in use (for 1000MBit/s or faster) the link does not +come up with pair order is not configured correctly, either using +MDI_CFG pin or using the "PMA Receive Reserved Vendor Provisioning 1" +register. + +Normally, the order of MDI pairs being either ABCD or DCBA is configured +by pulling the MDI_CFG pin. + +However, some hardware designs require overriding the value configured +by that bootstrap pin. The PHY allows doing that by setting a bit in +"PMA Receive Reserved Vendor Provisioning 1" register which allows +ignoring the state of the MDI_CFG pin and another bit configuring +whether the order of MDI pairs should be normal (ABCD) or reverse +(DCBA). Pair polarity is not affected and remains identical in both +settings. + +Introduce property "marvell,mdi-cfg-order" which allows forcing either +normal or reverse order of the MDI pairs from DT. + +If the property isn't present, the behavior is unchanged and MDI pair +order configuration is untouched (ie. either the result of MDI_CFG pin +pull-up/pull-down, or pair order override already configured by the +bootloader before Linux is started). + +Forcing normal pair order is required on the Adtran SDG-8733A Wi-Fi 7 +residential gateway. + +Signed-off-by: Daniel Golle +Reviewed-by: Andrew Lunn +Link: https://patch.msgid.link/9ed760ff87d5fc456f31e407ead548bbb754497d.1728058550.git.daniel@makrotopia.org +Signed-off-by: Jakub Kicinski +--- + drivers/net/phy/aquantia/aquantia_main.c | 33 ++++++++++++++++++++++++ + 1 file changed, 33 insertions(+) + +--- a/drivers/net/phy/aquantia/aquantia_main.c ++++ b/drivers/net/phy/aquantia/aquantia_main.c +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + #include + + #include "aquantia.h" +@@ -70,6 +71,11 @@ + #define MDIO_AN_TX_VEND_INT_MASK2 0xd401 + #define MDIO_AN_TX_VEND_INT_MASK2_LINK BIT(0) + ++#define PMAPMD_RSVD_VEND_PROV 0xe400 ++#define PMAPMD_RSVD_VEND_PROV_MDI_CONF GENMASK(1, 0) ++#define PMAPMD_RSVD_VEND_PROV_MDI_REVERSE BIT(0) ++#define PMAPMD_RSVD_VEND_PROV_MDI_FORCE BIT(1) ++ + #define MDIO_AN_RX_LP_STAT1 0xe820 + #define MDIO_AN_RX_LP_STAT1_1000BASET_FULL BIT(15) + #define MDIO_AN_RX_LP_STAT1_1000BASET_HALF BIT(14) +@@ -497,6 +503,29 @@ static int aqr107_wait_processor_intensi + return 0; + } + ++static int aqr107_config_mdi(struct phy_device *phydev) ++{ ++ struct device_node *np = phydev->mdio.dev.of_node; ++ u32 mdi_conf; ++ int ret; ++ ++ ret = of_property_read_u32(np, "marvell,mdi-cfg-order", &mdi_conf); ++ ++ /* Do nothing in case property "marvell,mdi-cfg-order" is not present */ ++ if (ret == -ENOENT) ++ return 0; ++ ++ if (ret) ++ return ret; ++ ++ if (mdi_conf & ~PMAPMD_RSVD_VEND_PROV_MDI_REVERSE) ++ return -EINVAL; ++ ++ return phy_modify_mmd(phydev, MDIO_MMD_PMAPMD, PMAPMD_RSVD_VEND_PROV, ++ PMAPMD_RSVD_VEND_PROV_MDI_CONF, ++ mdi_conf | PMAPMD_RSVD_VEND_PROV_MDI_FORCE); ++} ++ + static int aqr107_config_init(struct phy_device *phydev) + { + struct aqr107_priv *priv = phydev->priv; +@@ -535,6 +564,10 @@ static int aqr107_config_init(struct phy + if (ret) + return ret; + ++ ret = aqr107_config_mdi(phydev); ++ if (ret) ++ return ret; ++ + /* Restore LED polarity state after reset */ + for_each_set_bit(led_active_low, &priv->leds_active_low, AQR_MAX_LEDS) { + ret = aqr_phy_led_active_low_set(phydev, index, led_active_low); diff --git a/lede/target/linux/generic/backport-6.6/838-v6.13-net-phy-aquantia-fix-return-value-check-in-aqr107_co.patch b/lede/target/linux/generic/backport-6.6/838-v6.13-net-phy-aquantia-fix-return-value-check-in-aqr107_co.patch new file mode 100644 index 0000000000..73be78a058 --- /dev/null +++ b/lede/target/linux/generic/backport-6.6/838-v6.13-net-phy-aquantia-fix-return-value-check-in-aqr107_co.patch @@ -0,0 +1,31 @@ +From ce21b8fb255ebf0b49913fb4c62741d7eb05c6f6 Mon Sep 17 00:00:00 2001 +From: Daniel Golle +Date: Fri, 11 Oct 2024 22:28:43 +0100 +Subject: [PATCH] net: phy: aquantia: fix return value check in + aqr107_config_mdi() + +of_property_read_u32() returns -EINVAL in case the property cannot be +found rather than -ENOENT. Fix the check to not abort probing in case +of the property being missing, and also in case CONFIG_OF is not set +which will result in -ENOSYS. + +Fixes: a2e1ba275eae ("net: phy: aquantia: allow forcing order of MDI pairs") +Reported-by: Jon Hunter +Closes: https://lore.kernel.org/all/114b4c03-5d16-42ed-945d-cf78eabea12b@nvidia.com/ +Suggested-by: Hans-Frieder Vogt +Signed-off-by: Daniel Golle +--- + drivers/net/phy/aquantia/aquantia_main.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/phy/aquantia/aquantia_main.c ++++ b/drivers/net/phy/aquantia/aquantia_main.c +@@ -512,7 +512,7 @@ static int aqr107_config_mdi(struct phy_ + ret = of_property_read_u32(np, "marvell,mdi-cfg-order", &mdi_conf); + + /* Do nothing in case property "marvell,mdi-cfg-order" is not present */ +- if (ret == -ENOENT) ++ if (ret == -EINVAL || ret == -ENOSYS) + return 0; + + if (ret) diff --git a/lede/target/linux/generic/hack-6.6/723-net-phy-aquantia-fix-system-side-protocol-mi.patch b/lede/target/linux/generic/hack-6.6/723-net-phy-aquantia-fix-system-side-protocol-mi.patch index b5e35dfdd7..b0cd801601 100644 --- a/lede/target/linux/generic/hack-6.6/723-net-phy-aquantia-fix-system-side-protocol-mi.patch +++ b/lede/target/linux/generic/hack-6.6/723-net-phy-aquantia-fix-system-side-protocol-mi.patch @@ -14,7 +14,7 @@ Signed-off-by: Alex Marginean --- a/drivers/net/phy/aquantia/aquantia_main.c +++ b/drivers/net/phy/aquantia/aquantia_main.c -@@ -252,10 +252,16 @@ static int aqr_config_aneg_set_prot(stru +@@ -258,10 +258,16 @@ static int aqr_config_aneg_set_prot(stru phy_write_mmd(phydev, MDIO_MMD_VEND1, AQUANTIA_VND1_GSTART_RATE, aquantia_syscfg[if_type].start_rate); diff --git a/mieru/apis/client/interface.go b/mieru/apis/client/interface.go index ab98934088..cfcaf5f3ab 100644 --- a/mieru/apis/client/interface.go +++ b/mieru/apis/client/interface.go @@ -20,7 +20,6 @@ import ( "errors" "net" - "github.com/enfein/mieru/v3/apis/model" "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" ) @@ -65,20 +64,17 @@ type ClientLifecycleService interface { IsRunning() bool } -// ClientNetworkService contains methods to establish connections to proxy server. +// ClientNetworkService contains methods to establish connections +// to destinations using proxy servers. type ClientNetworkService interface { - // DialContext returns a new proxy connection to reach proxy server. + // DialContext returns a new proxy connection to reach the destination. // It returns an error if the client has not been started, // or has been stopped. - DialContext(context.Context) (net.Conn, error) + DialContext(context.Context, net.Addr) (net.Conn, error) - // HandshakeWithConnect completes the socks5 CONNECT request with proxy server - // in the given proxy connection. - // You may need to send a response back to the application that initiated - // the proxy connection. - // After that, the proxy connection is able to send and receive user payload. - // The proxy connection is NOT terminated when an error is returned. - HandshakeWithConnect(context.Context, net.Conn, model.AddrSpec) error + // DialContextWithConn is similar to DialContext, but use the given + // connection to establish a new proxy connection. + DialContextWithConn(context.Context, net.Conn, net.Addr) (net.Conn, error) } // ClientConfig stores proxy client configuration. diff --git a/mieru/apis/client/mieru.go b/mieru/apis/client/mieru.go index 5fcf77dbcd..c78d70d306 100644 --- a/mieru/apis/client/mieru.go +++ b/mieru/apis/client/mieru.go @@ -22,6 +22,7 @@ import ( "fmt" "io" "net" + "strings" "sync" "time" @@ -30,10 +31,10 @@ import ( "github.com/enfein/mieru/v3/pkg/appctl" "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" "github.com/enfein/mieru/v3/pkg/cipher" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/protocol" "github.com/enfein/mieru/v3/pkg/stderror" - "github.com/enfein/mieru/v3/pkg/util" ) // mieruClient is the official implementation of mieru client APIs. @@ -124,12 +125,12 @@ func (mc *mieruClient) Start() error { mc.mux = mc.mux.SetClientMultiplexFactor(multiplexFactor) // Set server endpoints. - mtu := util.DefaultMTU + mtu := common.DefaultMTU if activeProfile.GetMtu() != 0 { mtu = int(activeProfile.GetMtu()) } endpoints := make([]protocol.UnderlayProperties, 0) - resolver := &util.DNSResolver{} + resolver := &common.DNSResolver{} for _, serverInfo := range activeProfile.GetServers() { var proxyHost string var proxyIP net.IP @@ -146,7 +147,7 @@ func (mc *mieruClient) Start() error { return fmt.Errorf(stderror.ParseIPFailed) } } - ipVersion := util.GetIPVersion(proxyIP.String()) + ipVersion := common.GetIPVersion(proxyIP.String()) portBindings, err := appctl.FlatPortBindings(serverInfo.GetPortBindings()) if err != nil { return fmt.Errorf(stderror.InvalidPortBindingsErr, err) @@ -155,10 +156,10 @@ func (mc *mieruClient) Start() error { proxyPort := bindingInfo.GetPort() switch bindingInfo.GetProtocol() { case appctlpb.TransportProtocol_TCP: - endpoint := protocol.NewUnderlayProperties(mtu, ipVersion, util.TCPTransport, nil, &net.TCPAddr{IP: proxyIP, Port: int(proxyPort)}) + endpoint := protocol.NewUnderlayProperties(mtu, ipVersion, common.TCPTransport, nil, &net.TCPAddr{IP: proxyIP, Port: int(proxyPort)}) endpoints = append(endpoints, endpoint) case appctlpb.TransportProtocol_UDP: - endpoint := protocol.NewUnderlayProperties(mtu, ipVersion, util.UDPTransport, nil, &net.UDPAddr{IP: proxyIP, Port: int(proxyPort)}) + endpoint := protocol.NewUnderlayProperties(mtu, ipVersion, common.UDPTransport, nil, &net.UDPAddr{IP: proxyIP, Port: int(proxyPort)}) endpoints = append(endpoints, endpoint) default: return fmt.Errorf(stderror.InvalidTransportProtocol) @@ -188,43 +189,60 @@ func (mc *mieruClient) IsRunning() bool { return mc.running } -func (mc *mieruClient) DialContext(ctx context.Context) (net.Conn, error) { +func (mc *mieruClient) DialContext(ctx context.Context, addr net.Addr) (net.Conn, error) { mc.mu.RLock() defer mc.mu.RUnlock() if !mc.running { return nil, ErrClientIsNotRunning } - return mc.mux.DialContext(ctx) -} -func (mc *mieruClient) HandshakeWithConnect(ctx context.Context, conn net.Conn, addr model.AddrSpec) error { - mc.mu.RLock() - defer mc.mu.RUnlock() + // Check destination address. + var netAddrSpec model.NetAddrSpec + if nas, ok := addr.(model.NetAddrSpec); ok { + netAddrSpec = nas + } else if nas, ok := addr.(*model.NetAddrSpec); ok { + netAddrSpec = *nas + } else { + if err := netAddrSpec.From(addr); err != nil { + return nil, fmt.Errorf("invalid destination address: %w", err) + } + } + if !strings.HasPrefix(netAddrSpec.Network(), "tcp") { + return nil, fmt.Errorf("only tcp network is supported") + } + conn, err := mc.mux.DialContext(ctx) + if err != nil { + return nil, err + } var req bytes.Buffer req.Write([]byte{constant.Socks5Version, constant.Socks5ConnectCmd, 0}) - if err := addr.WriteToSocks5(&req); err != nil { - return err + if err := netAddrSpec.WriteToSocks5(&req); err != nil { + return nil, err } if _, err := conn.Write(req.Bytes()); err != nil { - return fmt.Errorf("failed to write socks5 connection request to the server: %w", err) + return nil, fmt.Errorf("failed to write socks5 connection request to the server: %w", err) } - util.SetReadTimeout(conn, 10*time.Second) + common.SetReadTimeout(conn, 10*time.Second) defer func() { - util.SetReadTimeout(conn, 0) + common.SetReadTimeout(conn, 0) }() resp := make([]byte, 3) if _, err := io.ReadFull(conn, resp); err != nil { - return fmt.Errorf("failed to read socks5 connection response from the server: %w", err) + return nil, fmt.Errorf("failed to read socks5 connection response from the server: %w", err) } - var respAddr model.AddrSpec + var respAddr model.NetAddrSpec if err := respAddr.ReadFromSocks5(conn); err != nil { - return fmt.Errorf("failed to read socks5 connection address response from the server: %w", err) + return nil, fmt.Errorf("failed to read socks5 connection address response from the server: %w", err) } if resp[1] != 0 { - return fmt.Errorf("server returned socks5 error code %d", resp[1]) + return nil, fmt.Errorf("server returned socks5 error code %d", resp[1]) } - return nil + return conn, nil +} + +func (mc *mieruClient) DialContextWithConn(ctx context.Context, conn net.Conn, addr net.Addr) (net.Conn, error) { + return nil, fmt.Errorf("not implemented") } diff --git a/mieru/apis/model/addr.go b/mieru/apis/model/addr.go index ffe9c878bd..a9f392567a 100644 --- a/mieru/apis/model/addr.go +++ b/mieru/apis/model/addr.go @@ -18,6 +18,7 @@ package model import ( "bytes" "errors" + "fmt" "io" "net" "strconv" @@ -37,13 +38,9 @@ type AddrSpec struct { Port int } +// String returns a string that can be used by Dial function. +// It prefers IP address over FQDN. func (a AddrSpec) String() string { - return a.Address() -} - -// Address returns a string suitable to dial. -// Prefer returning IP-based address, fallback to FQDN. -func (a AddrSpec) Address() string { if len(a.IP) != 0 { return net.JoinHostPort(a.IP.String(), strconv.Itoa(a.Port)) } @@ -122,3 +119,47 @@ func (a AddrSpec) WriteToSocks5(w io.Writer) error { _, err := w.Write(b.Bytes()) return err } + +// NetAddrSpec is a AddrSpec with a network type. +// It implements the net.Addr interface. +type NetAddrSpec struct { + AddrSpec + Net string +} + +var _ net.Addr = NetAddrSpec{} +var _ net.Addr = &NetAddrSpec{} + +// Network returns a network type that can be used by Dial function. +func (n NetAddrSpec) Network() string { + return n.Net +} + +// From modifies the NetAddrSpec object with the given network address. +func (n *NetAddrSpec) From(addr net.Addr) error { + n.Net = addr.Network() + + host, portStr, err := net.SplitHostPort(addr.String()) + if err != nil { + return fmt.Errorf("split host port failed: %w", err) + } + if host == "" { + return fmt.Errorf("host is empty") + } + + port, err := strconv.Atoi(portStr) + if err != nil { + return fmt.Errorf("parse port failed: %w", err) + } + n.Port = port + + if ip := net.ParseIP(host); ip != nil { + n.IP = ip + n.FQDN = "" + return nil + } + + n.IP = nil + n.FQDN = host + return nil +} diff --git a/mieru/apis/model/addr_test.go b/mieru/apis/model/addr_test.go index 71f1677604..5de438c6c5 100644 --- a/mieru/apis/model/addr_test.go +++ b/mieru/apis/model/addr_test.go @@ -18,11 +18,26 @@ package model import ( "bytes" "net" + "reflect" "testing" "github.com/enfein/mieru/v3/apis/constant" ) +// netAddr implements net.Addr interface. +type netAddr struct { + Net string + Str string +} + +func (a netAddr) Network() string { + return a.Net +} + +func (a netAddr) String() string { + return a.Str +} + func TestAddrSpecAddress(t *testing.T) { testCases := []struct { input *AddrSpec @@ -43,11 +58,7 @@ func TestAddrSpecAddress(t *testing.T) { } for _, tc := range testCases { - addr := tc.input.Address() - if addr != tc.wantAddr { - t.Errorf("got %v, want %v", addr, tc.wantAddr) - } - addr = tc.input.String() + addr := tc.input.String() if addr != tc.wantAddr { t.Errorf("got %v, want %v", addr, tc.wantAddr) } @@ -109,3 +120,72 @@ func TestAddrSpecReadWrite(t *testing.T) { } } } + +func TestNetAddrSpecFrom(t *testing.T) { + testCases := []struct { + netAddrSpec NetAddrSpec + addr net.Addr + wantErr bool + }{ + { + netAddrSpec: NetAddrSpec{ + AddrSpec: AddrSpec{ + IP: net.ParseIP("192.0.2.1"), + Port: 8080, + }, + Net: "tcp", + }, + addr: &net.TCPAddr{ + IP: net.ParseIP("192.0.2.1"), + Port: 8080, + }, + }, + { + netAddrSpec: NetAddrSpec{ + AddrSpec: AddrSpec{ + IP: net.ParseIP("2001:db8::1"), + Port: 8080, + }, + Net: "udp", + }, + addr: &net.UDPAddr{ + IP: net.ParseIP("2001:db8::1"), + Port: 8080, + }, + }, + { + netAddrSpec: NetAddrSpec{ + AddrSpec: AddrSpec{ + FQDN: "example.com", + Port: 8080, + }, + Net: "tcp", + }, + addr: netAddr{ + Net: "tcp", + Str: "example.com:8080", + }, + }, + { + netAddrSpec: NetAddrSpec{}, + addr: &net.TCPAddr{ + Port: 8080, + }, + wantErr: true, + }, + } + + for _, tc := range testCases { + n := &NetAddrSpec{} + err := n.From(tc.addr) + if (err != nil) != tc.wantErr { + t.Fatalf("From() error = %v, wantErr %v", err, tc.wantErr) + } + if tc.wantErr { + continue + } + if !reflect.DeepEqual(*n, tc.netAddrSpec) { + t.Errorf("got %v, want %v", n, tc.netAddrSpec) + } + } +} diff --git a/mieru/go.mod b/mieru/go.mod index 48cc8a222c..a1703c18f8 100644 --- a/mieru/go.mod +++ b/mieru/go.mod @@ -3,15 +3,15 @@ module github.com/enfein/mieru/v3 go 1.20 require ( - github.com/google/btree v1.1.2 - golang.org/x/crypto v0.24.0 - golang.org/x/sys v0.21.0 + github.com/google/btree v1.1.3 + golang.org/x/crypto v0.28.0 + golang.org/x/sys v0.26.0 google.golang.org/grpc v1.64.1 - google.golang.org/protobuf v1.34.2 + google.golang.org/protobuf v1.35.1 ) require ( golang.org/x/net v0.26.0 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/text v0.19.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240610135401-a8a62080eff3 // indirect ) diff --git a/mieru/go.sum b/mieru/go.sum index 95a1a91618..60bdc24547 100644 --- a/mieru/go.sum +++ b/mieru/go.sum @@ -1,17 +1,17 @@ -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240610135401-a8a62080eff3 h1:9Xyg6I9IWQZhRVfCWjKK+l6kI0jHcPesVlMnT//aHNo= google.golang.org/genproto/googleapis/rpc v0.0.0-20240610135401-a8a62080eff3/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= diff --git a/mieru/pkg/appctl/client.go b/mieru/pkg/appctl/client.go index 7375efc637..857656ec61 100644 --- a/mieru/pkg/appctl/client.go +++ b/mieru/pkg/appctl/client.go @@ -29,12 +29,12 @@ import ( "github.com/enfein/mieru/v3/pkg/appctl/appctlgrpc" pb "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/metrics" "github.com/enfein/mieru/v3/pkg/protocol" "github.com/enfein/mieru/v3/pkg/socks5" "github.com/enfein/mieru/v3/pkg/stderror" - "github.com/enfein/mieru/v3/pkg/util" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "google.golang.org/protobuf/proto" @@ -200,9 +200,9 @@ func GetJSONClientConfig() (string, error) { if err != nil { return "", fmt.Errorf("LoadClientConfig() failed: %w", err) } - b, err := util.MarshalJSON(config) + b, err := common.MarshalJSON(config) if err != nil { - return "", fmt.Errorf("util.MarshalJSON() failed: %w", err) + return "", fmt.Errorf("common.MarshalJSON() failed: %w", err) } return string(b), nil } @@ -254,8 +254,8 @@ func LoadClientConfig() (*pb.ClientConfig, error) { return nil, fmt.Errorf("proto.Unmarshal() failed: %w", err) } case JSON_CONFIG_FILE_TYPE: - if err := util.UnmarshalJSON(b, c); err != nil { - return nil, fmt.Errorf("util.UnmarshalJSON() failed: %w", err) + if err := common.UnmarshalJSON(b, c); err != nil { + return nil, fmt.Errorf("common.UnmarshalJSON() failed: %w", err) } default: return nil, fmt.Errorf("config file type is invalid") @@ -288,8 +288,8 @@ func StoreClientConfig(config *pb.ClientConfig) error { return fmt.Errorf("proto.Marshal() failed: %w", err) } case JSON_CONFIG_FILE_TYPE: - if b, err = util.MarshalJSON(config); err != nil { - return fmt.Errorf("util.MarshalJSON() failed: %w", err) + if b, err = common.MarshalJSON(config); err != nil { + return fmt.Errorf("common.MarshalJSON() failed: %w", err) } default: return fmt.Errorf("config file type is invalid") @@ -310,8 +310,8 @@ func ApplyJSONClientConfig(path string) error { return fmt.Errorf("os.ReadFile(%q) failed: %w", path, err) } c := &pb.ClientConfig{} - if err = util.UnmarshalJSON(b, c); err != nil { - return fmt.Errorf("util.UnmarshalJSON() failed: %w", err) + if err = common.UnmarshalJSON(b, c); err != nil { + return fmt.Errorf("common.UnmarshalJSON() failed: %w", err) } return applyClientConfig(c) } diff --git a/mieru/pkg/appctl/client_test.go b/mieru/pkg/appctl/client_test.go index d06f8ddf0f..4fa4d2d5ed 100644 --- a/mieru/pkg/appctl/client_test.go +++ b/mieru/pkg/appctl/client_test.go @@ -20,7 +20,7 @@ import ( "testing" pb "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" - "github.com/enfein/mieru/v3/pkg/util" + "github.com/enfein/mieru/v3/pkg/common" "google.golang.org/protobuf/proto" ) @@ -56,8 +56,8 @@ func TestApply2ClientConfig(t *testing.T) { t.Errorf("LoadClientConfig() failed: %v", err) } if !proto.Equal(merged, want) { - mergedJSON, _ := util.MarshalJSON(merged) - wantJSON, _ := util.MarshalJSON(want) + mergedJSON, _ := common.MarshalJSON(merged) + wantJSON, _ := common.MarshalJSON(want) t.Errorf("client config doesn't equal:\ngot = %v\nwant = %v", string(mergedJSON), string(wantJSON)) } @@ -189,8 +189,8 @@ func TestClientDeleteProfile(t *testing.T) { t.Errorf("LoadClientConfig() failed: %v", err) } if !proto.Equal(got, want) { - gotJSON, _ := util.MarshalJSON(got) - wantJSON, _ := util.MarshalJSON(want) + gotJSON, _ := common.MarshalJSON(got) + wantJSON, _ := common.MarshalJSON(want) t.Errorf("client config doesn't equal:\ngot = %v\nwant = %v", string(gotJSON), string(wantJSON)) } diff --git a/mieru/pkg/appctl/server.go b/mieru/pkg/appctl/server.go index db5b266522..0deb4edc72 100644 --- a/mieru/pkg/appctl/server.go +++ b/mieru/pkg/appctl/server.go @@ -29,13 +29,13 @@ import ( "github.com/enfein/mieru/v3/pkg/appctl/appctlgrpc" pb "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/egress" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/metrics" "github.com/enfein/mieru/v3/pkg/protocol" "github.com/enfein/mieru/v3/pkg/socks5" "github.com/enfein/mieru/v3/pkg/stderror" - "github.com/enfein/mieru/v3/pkg/util" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "google.golang.org/protobuf/proto" @@ -116,7 +116,7 @@ func (s *serverLifecycleService) Start(ctx context.Context, req *pb.Empty) (*pb. mux := protocol.NewMux(false).SetServerUsers(UserListToMap(config.GetUsers())) SetServerMuxRef(mux) - mtu := util.DefaultMTU + mtu := common.DefaultMTU if config.GetMtu() != 0 { mtu = int(config.GetMtu()) } @@ -201,7 +201,7 @@ func (s *serverLifecycleService) Reload(ctx context.Context, req *pb.Empty) (*pb mux := serverMuxRef.Load() if mux != nil { // Adjust portBindings. - mtu := util.DefaultMTU + mtu := common.DefaultMTU if config.GetMtu() != 0 { mtu = int(config.GetMtu()) } @@ -378,9 +378,9 @@ func GetJSONServerConfig() (string, error) { if err != nil { return "", fmt.Errorf("LoadServerConfig() failed: %w", err) } - b, err := util.MarshalJSON(config) + b, err := common.MarshalJSON(config) if err != nil { - return "", fmt.Errorf("util.MarshalJSON() failed: %w", err) + return "", fmt.Errorf("common.MarshalJSON() failed: %w", err) } return string(b), nil } @@ -419,8 +419,8 @@ func LoadServerConfig() (*pb.ServerConfig, error) { return nil, fmt.Errorf("proto.Unmarshal() failed: %w", err) } case JSON_CONFIG_FILE_TYPE: - if err := util.UnmarshalJSON(b, s); err != nil { - return nil, fmt.Errorf("util.UnmarshalJSON() failed: %w", err) + if err := common.UnmarshalJSON(b, s); err != nil { + return nil, fmt.Errorf("common.UnmarshalJSON() failed: %w", err) } default: return nil, fmt.Errorf("config file type is invalid") @@ -454,8 +454,8 @@ func StoreServerConfig(config *pb.ServerConfig) error { return fmt.Errorf("proto.Marshal() failed: %w", err) } case JSON_CONFIG_FILE_TYPE: - if b, err = util.MarshalJSON(config); err != nil { - return fmt.Errorf("util.MarshalJSON() failed: %w", err) + if b, err = common.MarshalJSON(config); err != nil { + return fmt.Errorf("common.MarshalJSON() failed: %w", err) } default: return fmt.Errorf("config file type is invalid") @@ -475,8 +475,8 @@ func ApplyJSONServerConfig(path string) error { return fmt.Errorf("os.ReadFile(%q) failed: %w", path, err) } s := &pb.ServerConfig{} - if err = util.UnmarshalJSON(b, s); err != nil { - return fmt.Errorf("util.UnmarshalJSON() failed: %w", err) + if err = common.UnmarshalJSON(b, s); err != nil { + return fmt.Errorf("common.UnmarshalJSON() failed: %w", err) } if err := ValidateServerConfigPatch(s); err != nil { return fmt.Errorf("ValidateServerConfigPatch() failed: %w", err) @@ -653,8 +653,8 @@ func ValidateFullServerConfig(config *pb.ServerConfig) error { // PortBindingsToUnderlayProperties converts port bindings to underlay properties. func PortBindingsToUnderlayProperties(portBindings []*pb.PortBinding, mtu int) ([]protocol.UnderlayProperties, error) { endpoints := make([]protocol.UnderlayProperties, 0) - listenIP := net.ParseIP(util.AllIPAddr()) - ipVersion := util.GetIPVersion(listenIP.String()) + listenIP := net.ParseIP(common.AllIPAddr()) + ipVersion := common.GetIPVersion(listenIP.String()) if listenIP == nil { return endpoints, fmt.Errorf(stderror.ParseIPFailed) } @@ -668,10 +668,10 @@ func PortBindingsToUnderlayProperties(portBindings []*pb.PortBinding, mtu int) ( port := portBindings[i].GetPort() switch proto { case pb.TransportProtocol_TCP: - endpoint := protocol.NewUnderlayProperties(mtu, ipVersion, util.TCPTransport, &net.TCPAddr{IP: listenIP, Port: int(port)}, nil) + endpoint := protocol.NewUnderlayProperties(mtu, ipVersion, common.TCPTransport, &net.TCPAddr{IP: listenIP, Port: int(port)}, nil) endpoints = append(endpoints, endpoint) case pb.TransportProtocol_UDP: - endpoint := protocol.NewUnderlayProperties(mtu, ipVersion, util.UDPTransport, &net.UDPAddr{IP: listenIP, Port: int(port)}, nil) + endpoint := protocol.NewUnderlayProperties(mtu, ipVersion, common.UDPTransport, &net.UDPAddr{IP: listenIP, Port: int(port)}, nil) endpoints = append(endpoints, endpoint) default: return []protocol.UnderlayProperties{}, fmt.Errorf(stderror.InvalidTransportProtocol) diff --git a/mieru/pkg/appctl/server_test.go b/mieru/pkg/appctl/server_test.go index d2eed887ee..cdb6db820d 100644 --- a/mieru/pkg/appctl/server_test.go +++ b/mieru/pkg/appctl/server_test.go @@ -20,7 +20,7 @@ import ( "testing" pb "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" - "github.com/enfein/mieru/v3/pkg/util" + "github.com/enfein/mieru/v3/pkg/common" "google.golang.org/protobuf/proto" ) @@ -56,8 +56,8 @@ func TestApply2ServerConfig(t *testing.T) { t.Errorf("LoadServerConfig() failed: %v", err) } if !proto.Equal(merged, want) { - mergedJSON, _ := util.MarshalJSON(merged) - wantJSON, _ := util.MarshalJSON(want) + mergedJSON, _ := common.MarshalJSON(merged) + wantJSON, _ := common.MarshalJSON(want) t.Errorf("server config doesn't equal:\ngot = %v\nwant = %v", string(mergedJSON), string(wantJSON)) } diff --git a/mieru/pkg/cipher/cipher.go b/mieru/pkg/cipher/cipher.go index cbb25e7659..d6c61778ec 100644 --- a/mieru/pkg/cipher/cipher.go +++ b/mieru/pkg/cipher/cipher.go @@ -22,8 +22,7 @@ import ( "fmt" "sync" - "github.com/enfein/mieru/v3/pkg/util" - + "github.com/enfein/mieru/v3/pkg/common" "golang.org/x/crypto/chacha20poly1305" ) @@ -292,7 +291,7 @@ func (c *AEADBlockCipher) newNonce() ([]byte, error) { if rewriteLen > c.NonceSize() { rewriteLen = c.NonceSize() } - util.ToCommon64Set(nonce, 0, rewriteLen) + common.ToCommon64Set(nonce, 0, rewriteLen) return nonce, nil } diff --git a/mieru/pkg/cipher/cipher_test.go b/mieru/pkg/cipher/cipher_test.go index 31f409714b..426992933c 100644 --- a/mieru/pkg/cipher/cipher_test.go +++ b/mieru/pkg/cipher/cipher_test.go @@ -21,7 +21,7 @@ import ( mrand "math/rand" "testing" - "github.com/enfein/mieru/v3/pkg/util" + "github.com/enfein/mieru/v3/pkg/common" ) func TestDefaultNonceSize(t *testing.T) { @@ -217,7 +217,7 @@ func TestAEADBlockCipherNewNonce(t *testing.T) { t.Fatalf("newXChaCha20Poly1305BlockCipher() failed: %v", err) } s := make(map[byte]struct{}) - for _, c := range []byte(util.Common64Set) { + for _, c := range []byte(common.Common64Set) { s[c] = struct{}{} } distribution := make(map[byte]int32) diff --git a/mieru/pkg/cli/client.go b/mieru/pkg/cli/client.go index 6410f81dee..754fe2fdd8 100644 --- a/mieru/pkg/cli/client.go +++ b/mieru/pkg/cli/client.go @@ -36,13 +36,13 @@ import ( "github.com/enfein/mieru/v3/pkg/appctl/appctlgrpc" "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" "github.com/enfein/mieru/v3/pkg/cipher" + "github.com/enfein/mieru/v3/pkg/common" + "github.com/enfein/mieru/v3/pkg/common/sockopts" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/metrics" "github.com/enfein/mieru/v3/pkg/protocol" "github.com/enfein/mieru/v3/pkg/socks5" "github.com/enfein/mieru/v3/pkg/stderror" - "github.com/enfein/mieru/v3/pkg/util" - "github.com/enfein/mieru/v3/pkg/util/sockopts" "github.com/enfein/mieru/v3/pkg/version/updater" "google.golang.org/grpc" "google.golang.org/protobuf/proto" @@ -499,12 +499,12 @@ var clientRunFunc = func(s []string) error { } mux = mux.SetClientMultiplexFactor(multiplexFactor) - mtu := util.DefaultMTU + mtu := common.DefaultMTU if activeProfile.GetMtu() != 0 { mtu = int(activeProfile.GetMtu()) } endpoints := make([]protocol.UnderlayProperties, 0) - resolver := &util.DNSResolver{} + resolver := &common.DNSResolver{} for _, serverInfo := range activeProfile.GetServers() { var proxyHost string var proxyIP net.IP @@ -521,7 +521,7 @@ var clientRunFunc = func(s []string) error { return fmt.Errorf(stderror.ParseIPFailed) } } - ipVersion := util.GetIPVersion(proxyIP.String()) + ipVersion := common.GetIPVersion(proxyIP.String()) portBindings, err := appctl.FlatPortBindings(serverInfo.GetPortBindings()) if err != nil { return fmt.Errorf(stderror.InvalidPortBindingsErr, err) @@ -530,10 +530,10 @@ var clientRunFunc = func(s []string) error { proxyPort := bindingInfo.GetPort() switch bindingInfo.GetProtocol() { case appctlpb.TransportProtocol_TCP: - endpoint := protocol.NewUnderlayProperties(mtu, ipVersion, util.TCPTransport, nil, &net.TCPAddr{IP: proxyIP, Port: int(proxyPort)}) + endpoint := protocol.NewUnderlayProperties(mtu, ipVersion, common.TCPTransport, nil, &net.TCPAddr{IP: proxyIP, Port: int(proxyPort)}) endpoints = append(endpoints, endpoint) case appctlpb.TransportProtocol_UDP: - endpoint := protocol.NewUnderlayProperties(mtu, ipVersion, util.UDPTransport, nil, &net.UDPAddr{IP: proxyIP, Port: int(proxyPort)}) + endpoint := protocol.NewUnderlayProperties(mtu, ipVersion, common.UDPTransport, nil, &net.UDPAddr{IP: proxyIP, Port: int(proxyPort)}) endpoints = append(endpoints, endpoint) default: return fmt.Errorf(stderror.InvalidTransportProtocol) @@ -568,9 +568,9 @@ var clientRunFunc = func(s []string) error { // Run the local socks5 server in the background. var socks5Addr string if config.GetSocks5ListenLAN() { - socks5Addr = util.MaybeDecorateIPv6(util.AllIPAddr()) + ":" + strconv.Itoa(int(config.GetSocks5Port())) + socks5Addr = common.MaybeDecorateIPv6(common.AllIPAddr()) + ":" + strconv.Itoa(int(config.GetSocks5Port())) } else { - socks5Addr = util.MaybeDecorateIPv6(util.LocalIPAddr()) + ":" + strconv.Itoa(int(config.GetSocks5Port())) + socks5Addr = common.MaybeDecorateIPv6(common.LocalIPAddr()) + ":" + strconv.Itoa(int(config.GetSocks5Port())) } wg.Add(1) go func(socks5Addr string) { @@ -598,9 +598,9 @@ var clientRunFunc = func(s []string) error { go func(socks5Addr string) { var httpServerAddr string if config.GetHttpProxyListenLAN() { - httpServerAddr = util.MaybeDecorateIPv6(util.AllIPAddr()) + ":" + strconv.Itoa(int(config.GetHttpProxyPort())) + httpServerAddr = common.MaybeDecorateIPv6(common.AllIPAddr()) + ":" + strconv.Itoa(int(config.GetHttpProxyPort())) } else { - httpServerAddr = util.MaybeDecorateIPv6(util.LocalIPAddr()) + ":" + strconv.Itoa(int(config.GetHttpProxyPort())) + httpServerAddr = common.MaybeDecorateIPv6(common.LocalIPAddr()) + ":" + strconv.Itoa(int(config.GetHttpProxyPort())) } httpServer := socks5.NewHTTPProxyServer(httpServerAddr, &socks5.HTTPProxy{ ProxyURI: "socks5://" + socks5Addr + "?timeout=10s", diff --git a/mieru/pkg/cli/server.go b/mieru/pkg/cli/server.go index 2441c93276..ab4285f96a 100644 --- a/mieru/pkg/cli/server.go +++ b/mieru/pkg/cli/server.go @@ -32,13 +32,13 @@ import ( "github.com/enfein/mieru/v3/pkg/appctl/appctlgrpc" "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" "github.com/enfein/mieru/v3/pkg/cipher" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/egress" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/metrics" "github.com/enfein/mieru/v3/pkg/protocol" "github.com/enfein/mieru/v3/pkg/socks5" "github.com/enfein/mieru/v3/pkg/stderror" - "github.com/enfein/mieru/v3/pkg/util" "github.com/enfein/mieru/v3/pkg/version/updater" "google.golang.org/grpc" "google.golang.org/protobuf/proto" @@ -397,7 +397,7 @@ var serverRunFunc = func(s []string) error { } // Detect and log TCP congestion control algorithm. - if algo := util.TCPCongestionControlAlgorithm(); algo != "" { + if algo := common.TCPCongestionControlAlgorithm(); algo != "" { log.Infof("TCP congestion control algorithm is %q", algo) } @@ -407,7 +407,7 @@ var serverRunFunc = func(s []string) error { mux := protocol.NewMux(false).SetServerUsers(appctl.UserListToMap(config.GetUsers())) appctl.SetServerMuxRef(mux) - mtu := util.DefaultMTU + mtu := common.DefaultMTU if config.GetMtu() != 0 { mtu = int(config.GetMtu()) } @@ -568,8 +568,8 @@ var serverApplyConfigFunc = func(s []string) error { return fmt.Errorf("os.ReadFile(%q) failed: %w", path, err) } patch := &appctlpb.ServerConfig{} - if err = util.UnmarshalJSON(b, patch); err != nil { - return fmt.Errorf("util.UnmarshalJSON() failed: %w", err) + if err = common.UnmarshalJSON(b, patch); err != nil { + return fmt.Errorf("common.UnmarshalJSON() failed: %w", err) } if err := appctl.ValidateServerConfigPatch(patch); err != nil { return fmt.Errorf(stderror.ValidateServerConfigPatchFailedErr, err) @@ -610,9 +610,9 @@ var serverDescribeConfigFunc = func(s []string) error { if err != nil { return fmt.Errorf(stderror.GetServerConfigFailedErr, err) } - jsonBytes, err := util.MarshalJSON(config) + jsonBytes, err := common.MarshalJSON(config) if err != nil { - return fmt.Errorf("util.MarshalJSON() failed: %w", err) + return fmt.Errorf("common.MarshalJSON() failed: %w", err) } log.Infof("%s", string(jsonBytes)) return nil diff --git a/mieru/pkg/util/addr.go b/mieru/pkg/common/addr.go similarity index 85% rename from mieru/pkg/util/addr.go rename to mieru/pkg/common/addr.go index ba49ca79b9..2091f41c71 100644 --- a/mieru/pkg/util/addr.go +++ b/mieru/pkg/common/addr.go @@ -13,27 +13,27 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import "net" -// NetAddr implements net.Addr interface. -type NetAddr struct { +// netAddr implements net.Addr interface. +type netAddr struct { Net string Str string } -func (a NetAddr) Network() string { +func (a netAddr) Network() string { return a.Net } -func (a NetAddr) String() string { +func (a netAddr) String() string { return a.Str } // NilNetAddr returns an empty network address. func NilNetAddr() net.Addr { - return NetAddr{} + return netAddr{} } // IsNilNetAddr returns true if the net.Addr is nil / empty. diff --git a/mieru/pkg/util/addr_test.go b/mieru/pkg/common/addr_test.go similarity index 98% rename from mieru/pkg/util/addr_test.go rename to mieru/pkg/common/addr_test.go index 8f2dcd2f7d..a93dc810a2 100644 --- a/mieru/pkg/util/addr_test.go +++ b/mieru/pkg/common/addr_test.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( "net" diff --git a/mieru/pkg/util/ascii.go b/mieru/pkg/common/ascii.go similarity index 97% rename from mieru/pkg/util/ascii.go rename to mieru/pkg/common/ascii.go index 8b887bda5c..cdf6650726 100644 --- a/mieru/pkg/util/ascii.go +++ b/mieru/pkg/common/ascii.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( crand "crypto/rand" @@ -25,6 +25,7 @@ const ( PrintableCharSup = 0x7E // 0x7E, i.e. '~', is the last printable ASCII character // Common64Set contains 64 selected common characters. + // This value can change in different software releases. Common64Set = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-" ) diff --git a/mieru/pkg/util/ascii_test.go b/mieru/pkg/common/ascii_test.go similarity index 99% rename from mieru/pkg/util/ascii_test.go rename to mieru/pkg/common/ascii_test.go index 66c7886b03..42de4e264f 100644 --- a/mieru/pkg/util/ascii_test.go +++ b/mieru/pkg/common/ascii_test.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( crand "crypto/rand" diff --git a/mieru/pkg/util/bytes.go b/mieru/pkg/common/bytes.go similarity index 98% rename from mieru/pkg/util/bytes.go rename to mieru/pkg/common/bytes.go index 031b3312c5..cc7ca91a5e 100644 --- a/mieru/pkg/util/bytes.go +++ b/mieru/pkg/common/bytes.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common // FillBytes fills the byte slice with the given value. func FillBytes(b []byte, value byte) { diff --git a/mieru/pkg/util/bytes_test.go b/mieru/pkg/common/bytes_test.go similarity index 99% rename from mieru/pkg/util/bytes_test.go rename to mieru/pkg/common/bytes_test.go index cb8c82d9e7..cb4b323c3e 100644 --- a/mieru/pkg/util/bytes_test.go +++ b/mieru/pkg/common/bytes_test.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( "bytes" diff --git a/mieru/pkg/util/hierarchy_conn.go b/mieru/pkg/common/conn.go similarity index 52% rename from mieru/pkg/util/hierarchy_conn.go rename to mieru/pkg/common/conn.go index b5358af8d7..2676d27793 100644 --- a/mieru/pkg/util/hierarchy_conn.go +++ b/mieru/pkg/common/conn.go @@ -13,27 +13,72 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( + "context" + "io" "net" "sync" + "time" ) +type SetReadDeadlineInterface interface { + SetReadDeadline(t time.Time) error +} + +// SetReadTimeout set read deadline. +// It cancels the deadline if the timeout is 0 or negative. +func SetReadTimeout(conn SetReadDeadlineInterface, timeout time.Duration) { + if timeout > 0 { + conn.SetReadDeadline(time.Now().Add(timeout)) + } else { + conn.SetReadDeadline(time.Time{}) + } +} + +// ReadAllAndDiscard reads from r until an error or EOF. +// All the data are discarded. +func ReadAllAndDiscard(r io.Reader) { + b := make([]byte, 1024) + for { + _, err := r.Read(b) + if err != nil { + return + } + } +} + +// RoundTrip sends a request to the connection and returns the response. +func RoundTrip(ctx context.Context, rw io.ReadWriter, req []byte, maxRespSize int) (resp []byte, err error) { + _, err = rw.Write(req) + if err != nil { + return + } + + resp = make([]byte, maxRespSize) + var n int + n, err = rw.Read(resp) + resp = resp[:n] + return +} + // HierarchyConn closes sub-connections when this connection is closed. type HierarchyConn interface { net.Conn + // AddSubConnection attach a child connection to this connection. + // The child connection is closed when this connection close. AddSubConnection(conn net.Conn) } -type hierarchyConnImpl struct { +type hierarchyConn struct { net.Conn subConnetions []HierarchyConn mu sync.Mutex } -func (h *hierarchyConnImpl) Close() error { +func (h *hierarchyConn) Close() error { h.mu.Lock() defer h.mu.Unlock() for _, sub := range h.subConnetions { @@ -44,7 +89,7 @@ func (h *hierarchyConnImpl) Close() error { return h.Conn.Close() } -func (h *hierarchyConnImpl) AddSubConnection(conn net.Conn) { +func (h *hierarchyConn) AddSubConnection(conn net.Conn) { h.mu.Lock() defer h.mu.Unlock() if h.subConnetions == nil { @@ -55,5 +100,5 @@ func (h *hierarchyConnImpl) AddSubConnection(conn net.Conn) { // WrapHierarchyConn wraps an existing connection with HierarchyConn. func WrapHierarchyConn(conn net.Conn) HierarchyConn { - return &hierarchyConnImpl{Conn: conn} + return &hierarchyConn{Conn: conn} } diff --git a/mieru/pkg/util/hierarchy_conn_test.go b/mieru/pkg/common/conn_test.go similarity index 73% rename from mieru/pkg/util/hierarchy_conn_test.go rename to mieru/pkg/common/conn_test.go index 3b3b08ee48..f0e14209b9 100644 --- a/mieru/pkg/util/hierarchy_conn_test.go +++ b/mieru/pkg/common/conn_test.go @@ -13,13 +13,31 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( + "bytes" + crand "crypto/rand" + "io" + mrand "math/rand" "net" "testing" ) +func TestReadAllAndDiscard(t *testing.T) { + n := mrand.Int63n(1024*1024) + 1 + buf := bytes.NewBuffer(make([]byte, n)) + if _, err := io.CopyN(buf, crand.Reader, n); err != nil { + t.Fatalf("Generating random data failed: %v", err) + } + + ReadAllAndDiscard(buf) + + if buf.Len() != 0 { + t.Errorf("buf.Len() = %d, want 0", buf.Len()) + } +} + type counterCloser struct { net.Conn Counter *int diff --git a/mieru/pkg/util/copy.go b/mieru/pkg/common/copy.go similarity index 98% rename from mieru/pkg/util/copy.go rename to mieru/pkg/common/copy.go index 850db43964..56a283886b 100644 --- a/mieru/pkg/util/copy.go +++ b/mieru/pkg/common/copy.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( "io" diff --git a/mieru/pkg/util/dns.go b/mieru/pkg/common/dns.go similarity index 83% rename from mieru/pkg/util/dns.go rename to mieru/pkg/common/dns.go index 57de24bc43..5b85fa0f00 100644 --- a/mieru/pkg/util/dns.go +++ b/mieru/pkg/common/dns.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( "context" @@ -65,3 +65,12 @@ func (d *DNSResolver) LookupIP(ctx context.Context, host string) (net.IP, error) } return ips[0], nil } + +// ForbidDefaultResolver causes the process to panic if +// net.DefaultResolver is used. +func ForbidDefaultResolver() { + net.DefaultResolver.PreferGo = true + net.DefaultResolver.Dial = func(ctx context.Context, network, address string) (net.Conn, error) { + panic("Using net.DefaultResolver is forbidden") + } +} diff --git a/mieru/pkg/util/dns_test.go b/mieru/pkg/common/dns_test.go similarity index 99% rename from mieru/pkg/util/dns_test.go rename to mieru/pkg/common/dns_test.go index 2aceac12b8..b7c4a758ba 100644 --- a/mieru/pkg/util/dns_test.go +++ b/mieru/pkg/common/dns_test.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( "context" diff --git a/mieru/pkg/util/entropy.go b/mieru/pkg/common/entropy.go similarity index 99% rename from mieru/pkg/util/entropy.go rename to mieru/pkg/common/entropy.go index 21db10c42b..3341937c9e 100644 --- a/mieru/pkg/util/entropy.go +++ b/mieru/pkg/common/entropy.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import "fmt" diff --git a/mieru/pkg/util/entropy_test.go b/mieru/pkg/common/entropy_test.go similarity index 99% rename from mieru/pkg/util/entropy_test.go rename to mieru/pkg/common/entropy_test.go index cff14ee56e..fc2c9ad2ca 100644 --- a/mieru/pkg/util/entropy_test.go +++ b/mieru/pkg/common/entropy_test.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( "reflect" diff --git a/mieru/pkg/util/ipdualstack.go b/mieru/pkg/common/ipdualstack.go similarity index 99% rename from mieru/pkg/util/ipdualstack.go rename to mieru/pkg/common/ipdualstack.go index a4394e38b3..39e00b4150 100644 --- a/mieru/pkg/util/ipdualstack.go +++ b/mieru/pkg/common/ipdualstack.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( "net" diff --git a/mieru/pkg/util/ipdualstack_test.go b/mieru/pkg/common/ipdualstack_test.go similarity index 99% rename from mieru/pkg/util/ipdualstack_test.go rename to mieru/pkg/common/ipdualstack_test.go index d140ef047d..ab1ba75c52 100644 --- a/mieru/pkg/util/ipdualstack_test.go +++ b/mieru/pkg/common/ipdualstack_test.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( "testing" diff --git a/mieru/pkg/util/mtu.go b/mieru/pkg/common/mtu.go similarity index 98% rename from mieru/pkg/util/mtu.go rename to mieru/pkg/common/mtu.go index b8ff34c60d..37e5657d44 100644 --- a/mieru/pkg/util/mtu.go +++ b/mieru/pkg/common/mtu.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common // DefaultMTU is the default MTU of L2 packets in the network. const DefaultMTU = 1400 diff --git a/mieru/pkg/util/pick_port.go b/mieru/pkg/common/pick_port.go similarity index 88% rename from mieru/pkg/util/pick_port.go rename to mieru/pkg/common/pick_port.go index 30950138dd..8ef802d9ff 100644 --- a/mieru/pkg/util/pick_port.go +++ b/mieru/pkg/common/pick_port.go @@ -13,14 +13,14 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( "fmt" "net" ) -// UnusedTCPPort returns an unused TCP port. +// UnusedTCPPort returns an unused TCP port in the local network. func UnusedTCPPort() (int, error) { l, err := net.Listen("tcp", ":0") if err != nil { @@ -31,7 +31,7 @@ func UnusedTCPPort() (int, error) { return port, nil } -// UnusedUDPPort returns an unused UDP port. +// UnusedUDPPort returns an unused UDP port in the local network. func UnusedUDPPort() (int, error) { l, err := net.ListenPacket("udp", ":0") if err != nil { diff --git a/mieru/pkg/util/pick_port_test.go b/mieru/pkg/common/pick_port_test.go similarity index 98% rename from mieru/pkg/util/pick_port_test.go rename to mieru/pkg/common/pick_port_test.go index 1a30b4a6c4..12bc79c8a8 100644 --- a/mieru/pkg/util/pick_port_test.go +++ b/mieru/pkg/common/pick_port_test.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( "fmt" diff --git a/mieru/pkg/util/protojson.go b/mieru/pkg/common/protojson.go similarity index 99% rename from mieru/pkg/util/protojson.go rename to mieru/pkg/common/protojson.go index bb619cc1d5..df49eaefaa 100644 --- a/mieru/pkg/util/protojson.go +++ b/mieru/pkg/common/protojson.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( "google.golang.org/protobuf/encoding/protojson" diff --git a/mieru/pkg/util/sockopts/control.go b/mieru/pkg/common/sockopts/control.go similarity index 100% rename from mieru/pkg/util/sockopts/control.go rename to mieru/pkg/common/sockopts/control.go diff --git a/mieru/pkg/util/sockopts/protect.go b/mieru/pkg/common/sockopts/protect.go similarity index 100% rename from mieru/pkg/util/sockopts/protect.go rename to mieru/pkg/common/sockopts/protect.go diff --git a/mieru/pkg/util/sockopts/protect_android.go b/mieru/pkg/common/sockopts/protect_android.go similarity index 100% rename from mieru/pkg/util/sockopts/protect_android.go rename to mieru/pkg/common/sockopts/protect_android.go diff --git a/mieru/pkg/util/sockopts/reuse.go b/mieru/pkg/common/sockopts/reuse.go similarity index 100% rename from mieru/pkg/util/sockopts/reuse.go rename to mieru/pkg/common/sockopts/reuse.go diff --git a/mieru/pkg/util/sockopts/reuse_unix.go b/mieru/pkg/common/sockopts/reuse_unix.go similarity index 100% rename from mieru/pkg/util/sockopts/reuse_unix.go rename to mieru/pkg/common/sockopts/reuse_unix.go diff --git a/mieru/pkg/util/tcp_congestion_control.go b/mieru/pkg/common/tcp_congestion_control.go similarity index 98% rename from mieru/pkg/util/tcp_congestion_control.go rename to mieru/pkg/common/tcp_congestion_control.go index cc7453b3a4..73df7e0b92 100644 --- a/mieru/pkg/util/tcp_congestion_control.go +++ b/mieru/pkg/common/tcp_congestion_control.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common import ( "os" diff --git a/mieru/pkg/util/transport_protocol.go b/mieru/pkg/common/transport_protocol.go similarity index 98% rename from mieru/pkg/util/transport_protocol.go rename to mieru/pkg/common/transport_protocol.go index 2015447592..9899216254 100644 --- a/mieru/pkg/util/transport_protocol.go +++ b/mieru/pkg/common/transport_protocol.go @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package util +package common type TransportProtocol uint8 diff --git a/mieru/pkg/protocol/mux.go b/mieru/pkg/protocol/mux.go index 6a15eb3631..d3594d850f 100644 --- a/mieru/pkg/protocol/mux.go +++ b/mieru/pkg/protocol/mux.go @@ -29,11 +29,11 @@ import ( "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" "github.com/enfein/mieru/v3/pkg/cipher" + "github.com/enfein/mieru/v3/pkg/common" + "github.com/enfein/mieru/v3/pkg/common/sockopts" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/mathext" "github.com/enfein/mieru/v3/pkg/stderror" - "github.com/enfein/mieru/v3/pkg/util" - "github.com/enfein/mieru/v3/pkg/util/sockopts" ) const ( @@ -213,7 +213,7 @@ func (m *Mux) Close() error { // Addr is not supported by Mux. func (m *Mux) Addr() net.Addr { - return util.NilNetAddr() + return common.NilNetAddr() } // Start listens on all the server addresses for incoming connections. @@ -230,7 +230,7 @@ func (m *Mux) Start() error { return fmt.Errorf("no server listening endpoint found") } for _, p := range m.endpoints { - if util.IsNilNetAddr(p.LocalAddr()) { + if common.IsNilNetAddr(p.LocalAddr()) { return fmt.Errorf("endpoint local address is not set") } } @@ -257,7 +257,7 @@ func (m *Mux) DialContext(ctx context.Context) (net.Conn, error) { return nil, fmt.Errorf("no server listening endpoint found") } for _, p := range m.endpoints { - if util.IsNilNetAddr(p.RemoteAddr()) { + if common.IsNilNetAddr(p.RemoteAddr()) { return nil, fmt.Errorf("endpoint remote address is not set") } } @@ -542,7 +542,7 @@ func (m *Mux) newUnderlay(ctx context.Context) (Underlay, error) { i := mrand.Intn(len(m.endpoints)) p := m.endpoints[i] switch p.TransportProtocol() { - case util.TCPTransport: + case common.TCPTransport: block, err := cipher.BlockCipherFromPassword(m.password, false) if err != nil { return nil, fmt.Errorf("cipher.BlockCipherFromPassword() failed: %v", err) @@ -554,7 +554,7 @@ func (m *Mux) newUnderlay(ctx context.Context) (Underlay, error) { if err != nil { return nil, fmt.Errorf("NewTCPUnderlay() failed: %v", err) } - case util.UDPTransport: + case common.UDPTransport: block, err := cipher.BlockCipherFromPassword(m.password, true) if err != nil { return nil, fmt.Errorf("cipher.BlockCipherFromPassword() failed: %v", err) diff --git a/mieru/pkg/protocol/mux_test.go b/mieru/pkg/protocol/mux_test.go index 9463443ab6..94805a192b 100644 --- a/mieru/pkg/protocol/mux_test.go +++ b/mieru/pkg/protocol/mux_test.go @@ -28,9 +28,9 @@ import ( "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" "github.com/enfein/mieru/v3/pkg/cipher" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/testtool" - "github.com/enfein/mieru/v3/pkg/util" "google.golang.org/protobuf/proto" ) @@ -95,11 +95,11 @@ func runClient(t *testing.T, properties UnderlayProperties, username, password [ func TestIPv4TCPUnderlay(t *testing.T) { log.SetOutputToTest(t) log.SetLevel("DEBUG") - port, err := util.UnusedTCPPort() + port, err := common.UnusedTCPPort() if err != nil { - t.Fatalf("util.UnusedTCPPort() failed: %v", err) + t.Fatalf("common.UnusedTCPPort() failed: %v", err) } - serverProperties := NewUnderlayProperties(1500, util.IPVersion4, util.TCPTransport, &net.TCPAddr{IP: net.ParseIP("127.0.0.1"), Port: port}, nil) + serverProperties := NewUnderlayProperties(1500, common.IPVersion4, common.TCPTransport, &net.TCPAddr{IP: net.ParseIP("127.0.0.1"), Port: port}, nil) serverMux := NewMux(false). SetServerUsers(users). SetEndpoints([]UnderlayProperties{serverProperties}) @@ -117,7 +117,7 @@ func TestIPv4TCPUnderlay(t *testing.T) { defer testServer.Close() time.Sleep(100 * time.Millisecond) - clientProperties := NewUnderlayProperties(1500, util.IPVersion4, util.TCPTransport, nil, &net.TCPAddr{IP: net.ParseIP("127.0.0.1"), Port: port}) + clientProperties := NewUnderlayProperties(1500, common.IPVersion4, common.TCPTransport, nil, &net.TCPAddr{IP: net.ParseIP("127.0.0.1"), Port: port}) runClient(t, clientProperties, []byte("xiaochitang"), []byte("kuiranbudong"), 4) if err := serverMux.Close(); err != nil { t.Errorf("Server mux close failed: %v", err) @@ -127,11 +127,11 @@ func TestIPv4TCPUnderlay(t *testing.T) { func TestIPv6TCPUnderlay(t *testing.T) { log.SetOutputToTest(t) log.SetLevel("DEBUG") - port, err := util.UnusedTCPPort() + port, err := common.UnusedTCPPort() if err != nil { - t.Fatalf("util.UnusedTCPPort() failed: %v", err) + t.Fatalf("common.UnusedTCPPort() failed: %v", err) } - serverProperties := NewUnderlayProperties(1500, util.IPVersion6, util.TCPTransport, &net.TCPAddr{IP: net.ParseIP("::1"), Port: port}, nil) + serverProperties := NewUnderlayProperties(1500, common.IPVersion6, common.TCPTransport, &net.TCPAddr{IP: net.ParseIP("::1"), Port: port}, nil) serverMux := NewMux(false). SetServerUsers(users). SetEndpoints([]UnderlayProperties{serverProperties}) @@ -149,7 +149,7 @@ func TestIPv6TCPUnderlay(t *testing.T) { defer testServer.Close() time.Sleep(100 * time.Millisecond) - clientProperties := NewUnderlayProperties(1500, util.IPVersion6, util.TCPTransport, nil, &net.TCPAddr{IP: net.ParseIP("::1"), Port: port}) + clientProperties := NewUnderlayProperties(1500, common.IPVersion6, common.TCPTransport, nil, &net.TCPAddr{IP: net.ParseIP("::1"), Port: port}) runClient(t, clientProperties, []byte("xiaochitang"), []byte("kuiranbudong"), 4) if err := serverMux.Close(); err != nil { t.Errorf("Server mux close failed: %v", err) @@ -159,11 +159,11 @@ func TestIPv6TCPUnderlay(t *testing.T) { func TestIPv4UDPUnderlay(t *testing.T) { log.SetOutputToTest(t) log.SetLevel("DEBUG") - port, err := util.UnusedUDPPort() + port, err := common.UnusedUDPPort() if err != nil { - t.Fatalf("util.UnusedUDPPort() failed: %v", err) + t.Fatalf("common.UnusedUDPPort() failed: %v", err) } - serverProperties := NewUnderlayProperties(1500, util.IPVersion4, util.UDPTransport, &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: port}, nil) + serverProperties := NewUnderlayProperties(1500, common.IPVersion4, common.UDPTransport, &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: port}, nil) serverMux := NewMux(false). SetServerUsers(users). SetEndpoints([]UnderlayProperties{serverProperties}) @@ -181,7 +181,7 @@ func TestIPv4UDPUnderlay(t *testing.T) { defer testServer.Close() time.Sleep(100 * time.Millisecond) - clientProperties := NewUnderlayProperties(1500, util.IPVersion4, util.UDPTransport, nil, &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: port}) + clientProperties := NewUnderlayProperties(1500, common.IPVersion4, common.UDPTransport, nil, &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: port}) runClient(t, clientProperties, []byte("xiaochitang"), []byte("kuiranbudong"), 4) if err := serverMux.Close(); err != nil { t.Errorf("Server mux close failed: %v", err) @@ -191,11 +191,11 @@ func TestIPv4UDPUnderlay(t *testing.T) { func TestIPv6UDPUnderlay(t *testing.T) { log.SetOutputToTest(t) log.SetLevel("DEBUG") - port, err := util.UnusedUDPPort() + port, err := common.UnusedUDPPort() if err != nil { - t.Fatalf("util.UnusedUDPPort() failed: %v", err) + t.Fatalf("common.UnusedUDPPort() failed: %v", err) } - serverProperties := NewUnderlayProperties(1500, util.IPVersion6, util.UDPTransport, &net.UDPAddr{IP: net.ParseIP("::1"), Port: port}, nil) + serverProperties := NewUnderlayProperties(1500, common.IPVersion6, common.UDPTransport, &net.UDPAddr{IP: net.ParseIP("::1"), Port: port}, nil) serverMux := NewMux(false). SetServerUsers(users). SetEndpoints([]UnderlayProperties{serverProperties}) @@ -213,7 +213,7 @@ func TestIPv6UDPUnderlay(t *testing.T) { defer testServer.Close() time.Sleep(100 * time.Millisecond) - clientProperties := NewUnderlayProperties(1500, util.IPVersion6, util.UDPTransport, nil, &net.UDPAddr{IP: net.ParseIP("::1"), Port: port}) + clientProperties := NewUnderlayProperties(1500, common.IPVersion6, common.UDPTransport, nil, &net.UDPAddr{IP: net.ParseIP("::1"), Port: port}) runClient(t, clientProperties, []byte("xiaochitang"), []byte("kuiranbudong"), 4) if err := serverMux.Close(); err != nil { t.Errorf("Server mux close failed: %v", err) @@ -234,30 +234,30 @@ func TestNewEndpoints(t *testing.T) { { nil, []UnderlayProperties{ - NewUnderlayProperties(1500, util.IPVersion4, util.TCPTransport, util.NilNetAddr(), util.NilNetAddr()), + NewUnderlayProperties(1500, common.IPVersion4, common.TCPTransport, common.NilNetAddr(), common.NilNetAddr()), }, []UnderlayProperties{ - NewUnderlayProperties(1500, util.IPVersion4, util.TCPTransport, util.NilNetAddr(), util.NilNetAddr()), + NewUnderlayProperties(1500, common.IPVersion4, common.TCPTransport, common.NilNetAddr(), common.NilNetAddr()), }, }, { []UnderlayProperties{ - NewUnderlayProperties(1500, util.IPVersion4, util.TCPTransport, util.NilNetAddr(), util.NilNetAddr()), + NewUnderlayProperties(1500, common.IPVersion4, common.TCPTransport, common.NilNetAddr(), common.NilNetAddr()), }, nil, []UnderlayProperties{}, }, { []UnderlayProperties{ - NewUnderlayProperties(1500, util.IPVersion4, util.TCPTransport, util.NilNetAddr(), util.NilNetAddr()), - NewUnderlayProperties(1500, util.IPVersion6, util.TCPTransport, util.NilNetAddr(), util.NilNetAddr()), + NewUnderlayProperties(1500, common.IPVersion4, common.TCPTransport, common.NilNetAddr(), common.NilNetAddr()), + NewUnderlayProperties(1500, common.IPVersion6, common.TCPTransport, common.NilNetAddr(), common.NilNetAddr()), }, []UnderlayProperties{ - NewUnderlayProperties(1500, util.IPVersion6, util.TCPTransport, util.NilNetAddr(), util.NilNetAddr()), - NewUnderlayProperties(1500, util.IPVersion6, util.UDPTransport, util.NilNetAddr(), util.NilNetAddr()), + NewUnderlayProperties(1500, common.IPVersion6, common.TCPTransport, common.NilNetAddr(), common.NilNetAddr()), + NewUnderlayProperties(1500, common.IPVersion6, common.UDPTransport, common.NilNetAddr(), common.NilNetAddr()), }, []UnderlayProperties{ - NewUnderlayProperties(1500, util.IPVersion6, util.UDPTransport, util.NilNetAddr(), util.NilNetAddr()), + NewUnderlayProperties(1500, common.IPVersion6, common.UDPTransport, common.NilNetAddr(), common.NilNetAddr()), }, }, } diff --git a/mieru/pkg/protocol/padding.go b/mieru/pkg/protocol/padding.go index 2b22e99abf..3aa0548718 100644 --- a/mieru/pkg/protocol/padding.go +++ b/mieru/pkg/protocol/padding.go @@ -20,9 +20,9 @@ import ( "fmt" mrand "math/rand" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/mathext" "github.com/enfein/mieru/v3/pkg/rng" - "github.com/enfein/mieru/v3/pkg/util" ) var ( @@ -104,14 +104,14 @@ func newPadding(opts paddingOpts) []byte { if length > opts.ascii.minConsecutiveASCIILen { beginIdx = mrand.Intn(length - opts.ascii.minConsecutiveASCIILen) } - util.ToPrintableChar(p, beginIdx, beginIdx+opts.ascii.minConsecutiveASCIILen) + common.ToPrintableChar(p, beginIdx, beginIdx+opts.ascii.minConsecutiveASCIILen) return p } else if opts.entropy != nil { if opts.entropy.targetProbability <= 0.0 || opts.entropy.targetProbability > 0.5 { panic(fmt.Sprintf("Invalid padding options: targetProbability %f is out of range (0.0, 0.5]", opts.entropy.targetProbability)) } - currentBitDistribution := util.ToBitDistribution(opts.entropy.existingData) + currentBitDistribution := common.ToBitDistribution(opts.entropy.existingData) // Determine which bit (0 or 1) has the lower probability. lowerBit := byte(0) @@ -143,7 +143,7 @@ func newPadding(opts paddingOpts) []byte { if lowerBit == 0 { // Set all the bits in the padding to be 1. - util.FillBytes(p, 0xFF) + common.FillBytes(p, 0xFF) // Change at most flip bits in p to bit 0. for i := 0; i < flip; i++ { diff --git a/mieru/pkg/protocol/padding_test.go b/mieru/pkg/protocol/padding_test.go index 09167e25c6..f2f164253c 100644 --- a/mieru/pkg/protocol/padding_test.go +++ b/mieru/pkg/protocol/padding_test.go @@ -20,8 +20,8 @@ import ( mrand "math/rand" "testing" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/rng" - "github.com/enfein/mieru/v3/pkg/util" ) func TestNewASCIIPadding(t *testing.T) { @@ -40,7 +40,7 @@ func TestNewASCIIPadding(t *testing.T) { if len(padding) < minConsecutiveASCIILen { t.Errorf("Padding length %d is smaller than the minimum length %d", len(padding), minConsecutiveASCIILen) } - consecutive := util.MaxConsecutivePrintableLength(padding) + consecutive := common.MaxConsecutivePrintableLength(padding) if consecutive < minConsecutiveASCIILen { t.Errorf("Padding's consecutive printable length %d is smaller than the required minimum consecutive ASCII length %d", consecutive, minConsecutiveASCIILen) } @@ -69,11 +69,11 @@ func TestNewEntropyPadding(t *testing.T) { t.Errorf("Padding length %d is bigger than the maximum length %d", len(padding), maxPaddingLen) } combined := append(existingData, padding...) - bitDistribution := util.ToBitDistribution(combined) + bitDistribution := common.ToBitDistribution(combined) if bitDistribution.Bit0 > targetProbability && bitDistribution.Bit1 > targetProbability { // Doesn't meet the target. // In this case, the padding bits are either all 0 or all 1. - if !util.IsBitsAllZero(padding) && !util.IsBitsAllOne(padding) { + if !common.IsBitsAllZero(padding) && !common.IsBitsAllOne(padding) { t.Errorf("Can't meet target probability %f, but padding %v is not pure 0 bit or 1 bit", targetProbability, padding) } else { miss++ diff --git a/mieru/pkg/protocol/segment.go b/mieru/pkg/protocol/segment.go index 44fb749a33..0d349619ea 100644 --- a/mieru/pkg/protocol/segment.go +++ b/mieru/pkg/protocol/segment.go @@ -21,10 +21,10 @@ import ( "time" "github.com/enfein/mieru/v3/pkg/cipher" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/mathext" "github.com/enfein/mieru/v3/pkg/stderror" - "github.com/enfein/mieru/v3/pkg/util" "github.com/google/btree" ) @@ -40,19 +40,19 @@ const ( ) // MaxFragmentSize returns the maximum payload size in a fragment. -func MaxFragmentSize(mtu int, ipVersion util.IPVersion, transport util.TransportProtocol) int { - if transport == util.TCPTransport { +func MaxFragmentSize(mtu int, ipVersion common.IPVersion, transport common.TransportProtocol) int { + if transport == common.TCPTransport { // No fragment needed. return maxPDU } res := mtu - udpOverhead - if ipVersion == util.IPVersion4 { + if ipVersion == common.IPVersion4 { res -= 20 } else { res -= 40 } - if transport == util.UDPTransport { + if transport == common.UDPTransport { res -= 8 } else { res -= 20 @@ -61,19 +61,19 @@ func MaxFragmentSize(mtu int, ipVersion util.IPVersion, transport util.Transport } // MaxPaddingSize returns the maximum padding size of a segment. -func MaxPaddingSize(mtu int, ipVersion util.IPVersion, transport util.TransportProtocol, fragmentSize int, existingPaddingSize int) int { - if transport == util.TCPTransport { +func MaxPaddingSize(mtu int, ipVersion common.IPVersion, transport common.TransportProtocol, fragmentSize int, existingPaddingSize int) int { + if transport == common.TCPTransport { // No limit. return 255 } res := mtu - fragmentSize - udpOverhead - if ipVersion == util.IPVersion4 { + if ipVersion == common.IPVersion4 { res -= 20 } else { res -= 40 } - if transport == util.UDPTransport { + if transport == common.UDPTransport { res -= 8 } else { res -= 20 @@ -87,13 +87,13 @@ func MaxPaddingSize(mtu int, ipVersion util.IPVersion, transport util.TransportP // segment contains metadata and actual payload. type segment struct { metadata metadata - payload []byte // also can be a fragment - transport util.TransportProtocol // transport protocol - ackCount byte // number of acknowledges before the next transmission - txCount byte // number of transmission times - txTime time.Time // most recent transmission time - txTimeout time.Duration // need to receive ACK within this duration - block cipher.BlockCipher // cipher block to encrypt or decrypt the payload + payload []byte // also can be a fragment + transport common.TransportProtocol // transport protocol + ackCount byte // number of acknowledges before the next transmission + txCount byte // number of transmission times + txTime time.Time // most recent transmission time + txTimeout time.Duration // need to receive ACK within this duration + block cipher.BlockCipher // cipher block to encrypt or decrypt the payload } // Protocol returns the protocol of the segment. @@ -150,7 +150,7 @@ func (s *segment) Less(other *segment) bool { } func (s *segment) String() string { - if s.transport == util.UDPTransport && (!s.txTime.IsZero() || s.txTimeout != 0) { + if s.transport == common.UDPTransport && (!s.txTime.IsZero() || s.txTimeout != 0) { return fmt.Sprintf("segment{metadata=%v, realPayloadLen=%v, ackCount=%v, txCount=%v, txTime=%v, txTimeout=%v}", s.metadata, len(s.payload), s.ackCount, s.txCount, s.txTime.Format(segmentTimeFormat), s.txTimeout) } return fmt.Sprintf("segment{metadata=%v, realPayloadLen=%v}", s.metadata, len(s.payload)) diff --git a/mieru/pkg/protocol/segment_test.go b/mieru/pkg/protocol/segment_test.go index db90e5fa60..49b6448433 100644 --- a/mieru/pkg/protocol/segment_test.go +++ b/mieru/pkg/protocol/segment_test.go @@ -22,32 +22,32 @@ import ( "testing" "time" - "github.com/enfein/mieru/v3/pkg/util" + "github.com/enfein/mieru/v3/pkg/common" ) func TestMaxFragmentSize(t *testing.T) { testcases := []struct { mtu int - ipVersion util.IPVersion - transport util.TransportProtocol + ipVersion common.IPVersion + transport common.TransportProtocol want int }{ { 1500, - util.IPVersion6, - util.TCPTransport, + common.IPVersion6, + common.TCPTransport, maxPDU, }, { 1500, - util.IPVersion4, - util.UDPTransport, + common.IPVersion4, + common.UDPTransport, 1472 - udpOverhead, }, { 1500, - util.IPVersionUnknown, - util.UnknownTransport, + common.IPVersionUnknown, + common.UnknownTransport, 1440 - udpOverhead, }, } @@ -62,32 +62,32 @@ func TestMaxFragmentSize(t *testing.T) { func TestMaxPaddingSize(t *testing.T) { testcases := []struct { mtu int - ipVersion util.IPVersion - transport util.TransportProtocol + ipVersion common.IPVersion + transport common.TransportProtocol fragmentSize int existingPaddingSize int want int }{ { 1500, - util.IPVersion6, - util.TCPTransport, + common.IPVersion6, + common.TCPTransport, maxPDU, 255, 255, }, { 1500, - util.IPVersion4, - util.UDPTransport, + common.IPVersion4, + common.UDPTransport, 1472 - udpOverhead - 16, 12, 4, }, { 1500, - util.IPVersionUnknown, - util.UnknownTransport, + common.IPVersionUnknown, + common.UnknownTransport, 0, 255, 255, diff --git a/mieru/pkg/protocol/session.go b/mieru/pkg/protocol/session.go index a1049e702d..6416721e42 100644 --- a/mieru/pkg/protocol/session.go +++ b/mieru/pkg/protocol/session.go @@ -27,12 +27,12 @@ import ( "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" "github.com/enfein/mieru/v3/pkg/cipher" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/congestion" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/mathext" "github.com/enfein/mieru/v3/pkg/metrics" "github.com/enfein/mieru/v3/pkg/stderror" - "github.com/enfein/mieru/v3/pkg/util" ) const ( @@ -350,9 +350,9 @@ func (s *Session) Close() error { } s.nextSend++ switch s.conn.TransportProtocol() { - case util.TCPTransport: + case common.TCPTransport: s.sendQueue.InsertBlocking(seg) - case util.UDPTransport: + case common.UDPTransport: if err := s.output(seg, s.RemoteAddr()); err != nil { log.Debugf("output() failed: %v", err) } @@ -380,7 +380,7 @@ func (s *Session) LocalAddr() net.Addr { } func (s *Session) RemoteAddr() net.Addr { - if !util.IsNilNetAddr(s.remoteAddr) { + if !common.IsNilNetAddr(s.remoteAddr) { return s.remoteAddr } return s.conn.RemoteAddr() @@ -582,7 +582,7 @@ func (s *Session) runOutputLoop(ctx context.Context) error { } switch s.conn.TransportProtocol() { - case util.TCPTransport: + case common.TCPTransport: for { seg, ok := s.sendQueue.DeleteMin() if !ok { @@ -596,7 +596,7 @@ func (s *Session) runOutputLoop(ctx context.Context) error { break } } - case util.UDPTransport: + case common.UDPTransport: closeSession := false hasLoss := false hasTimeout := false @@ -790,10 +790,10 @@ func (s *Session) input(seg *segment) error { func (s *Session) inputData(seg *segment) error { switch s.conn.TransportProtocol() { - case util.TCPTransport: + case common.TCPTransport: // Deliver the segment directly to recvQueue. s.recvQueue.InsertBlocking(seg) - case util.UDPTransport: + case common.UDPTransport: // Delete all previous acknowledged segments from sendBuf. var priorInFlight int64 s.sendBuf.Ascend(func(iter *segment) bool { @@ -902,10 +902,10 @@ func (s *Session) inputData(seg *segment) error { func (s *Session) inputAck(seg *segment) error { switch s.conn.TransportProtocol() { - case util.TCPTransport: + case common.TCPTransport: // Do nothing when receive ACK from TCP protocol. return nil - case util.UDPTransport: + case common.UDPTransport: // Delete all previous acknowledged segments from sendBuf. var priorInFlight int64 s.sendBuf.Ascend(func(iter *segment) bool { @@ -995,11 +995,11 @@ func (s *Session) inputClose(seg *segment) error { func (s *Session) output(seg *segment, remoteAddr net.Addr) error { switch s.conn.TransportProtocol() { - case util.TCPTransport: + case common.TCPTransport: if err := s.conn.(*TCPUnderlay).writeOneSegment(seg); err != nil { return fmt.Errorf("TCPUnderlay.writeOneSegment() failed: %v", err) } - case util.UDPTransport: + case common.UDPTransport: err := s.conn.(*UDPUnderlay).writeOneSegment(seg, remoteAddr.(*net.UDPAddr)) if err != nil { if !stderror.IsNotReady(err) { diff --git a/mieru/pkg/protocol/underlay.go b/mieru/pkg/protocol/underlay.go index 26fa1796ce..972409d71e 100644 --- a/mieru/pkg/protocol/underlay.go +++ b/mieru/pkg/protocol/underlay.go @@ -19,8 +19,8 @@ import ( "context" "net" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/metrics" - "github.com/enfein/mieru/v3/pkg/util" ) var ( @@ -38,10 +38,10 @@ type UnderlayProperties interface { MTU() int // The IP version used to establish the underlay. - IPVersion() util.IPVersion + IPVersion() common.IPVersion // The transport protocol used to implement the underlay. - TransportProtocol() util.TransportProtocol + TransportProtocol() common.TransportProtocol // LocalAddr implements net.Conn interface. LocalAddr() net.Addr @@ -87,8 +87,8 @@ type Underlay interface { // underlayDescriptor implements UnderlayProperties. type underlayDescriptor struct { mtu int - ipVersion util.IPVersion - transportProtocol util.TransportProtocol + ipVersion common.IPVersion + transportProtocol common.TransportProtocol localAddr net.Addr remoteAddr net.Addr } @@ -99,11 +99,11 @@ func (d *underlayDescriptor) MTU() int { return d.mtu } -func (d *underlayDescriptor) IPVersion() util.IPVersion { +func (d *underlayDescriptor) IPVersion() common.IPVersion { return d.ipVersion } -func (d *underlayDescriptor) TransportProtocol() util.TransportProtocol { +func (d *underlayDescriptor) TransportProtocol() common.TransportProtocol { return d.transportProtocol } @@ -116,7 +116,7 @@ func (d *underlayDescriptor) RemoteAddr() net.Addr { } // NewUnderlayProperties creates a new instance of UnderlayProperties. -func NewUnderlayProperties(mtu int, ipVersion util.IPVersion, transportProtocol util.TransportProtocol, localAddr net.Addr, remoteAddr net.Addr) UnderlayProperties { +func NewUnderlayProperties(mtu int, ipVersion common.IPVersion, transportProtocol common.TransportProtocol, localAddr net.Addr, remoteAddr net.Addr) UnderlayProperties { d := &underlayDescriptor{ mtu: mtu, ipVersion: ipVersion, @@ -125,10 +125,10 @@ func NewUnderlayProperties(mtu int, ipVersion util.IPVersion, transportProtocol remoteAddr: remoteAddr, } if localAddr == nil { - d.localAddr = util.NilNetAddr() + d.localAddr = common.NilNetAddr() } if remoteAddr == nil { - d.remoteAddr = util.NilNetAddr() + d.remoteAddr = common.NilNetAddr() } return d } diff --git a/mieru/pkg/protocol/underlay_base.go b/mieru/pkg/protocol/underlay_base.go index ca32f46a34..ee959effc7 100644 --- a/mieru/pkg/protocol/underlay_base.go +++ b/mieru/pkg/protocol/underlay_base.go @@ -22,9 +22,9 @@ import ( "net" "sync" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/metrics" "github.com/enfein/mieru/v3/pkg/stderror" - "github.com/enfein/mieru/v3/pkg/util" ) const sessionChanCapacity = 64 @@ -33,7 +33,7 @@ const sessionChanCapacity = 64 type baseUnderlay struct { isClient bool mtu int - ipVersion util.IPVersion + ipVersion common.IPVersion done chan struct{} // if the underlay is closed sessionMap sync.Map // Map @@ -55,7 +55,7 @@ func newBaseUnderlay(isClient bool, mtu int) *baseUnderlay { return &baseUnderlay{ isClient: isClient, mtu: mtu, - ipVersion: util.IPVersionUnknown, + ipVersion: common.IPVersionUnknown, done: make(chan struct{}), readySessions: make(chan *Session, sessionChanCapacity), scheduler: &ScheduleController{}, @@ -96,27 +96,27 @@ func (b *baseUnderlay) Close() error { // Addr implements net.Listener interface. func (b *baseUnderlay) Addr() net.Addr { - return util.NilNetAddr() + return common.NilNetAddr() } func (b *baseUnderlay) MTU() int { return b.mtu } -func (b *baseUnderlay) IPVersion() util.IPVersion { +func (b *baseUnderlay) IPVersion() common.IPVersion { return b.ipVersion } -func (b *baseUnderlay) TransportProtocol() util.TransportProtocol { - return util.UnknownTransport +func (b *baseUnderlay) TransportProtocol() common.TransportProtocol { + return common.UnknownTransport } func (b *baseUnderlay) LocalAddr() net.Addr { - return util.NilNetAddr() + return common.NilNetAddr() } func (b *baseUnderlay) RemoteAddr() net.Addr { - return util.NilNetAddr() + return common.NilNetAddr() } func (b *baseUnderlay) AddSession(s *Session, remoteAddr net.Addr) error { diff --git a/mieru/pkg/protocol/underlay_tcp.go b/mieru/pkg/protocol/underlay_tcp.go index 19d6554c29..5b95a2ef61 100644 --- a/mieru/pkg/protocol/underlay_tcp.go +++ b/mieru/pkg/protocol/underlay_tcp.go @@ -24,13 +24,13 @@ import ( "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" "github.com/enfein/mieru/v3/pkg/cipher" + "github.com/enfein/mieru/v3/pkg/common" + "github.com/enfein/mieru/v3/pkg/common/sockopts" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/metrics" "github.com/enfein/mieru/v3/pkg/replay" "github.com/enfein/mieru/v3/pkg/rng" "github.com/enfein/mieru/v3/pkg/stderror" - "github.com/enfein/mieru/v3/pkg/util" - "github.com/enfein/mieru/v3/pkg/util/sockopts" ) const ( @@ -116,32 +116,32 @@ func (t *TCPUnderlay) Addr() net.Addr { return t.LocalAddr() } -func (t *TCPUnderlay) IPVersion() util.IPVersion { +func (t *TCPUnderlay) IPVersion() common.IPVersion { t.ipVersionMutex.Lock() defer t.ipVersionMutex.Unlock() if t.conn == nil { - return util.IPVersionUnknown + return common.IPVersionUnknown } - if t.ipVersion == util.IPVersionUnknown { - t.ipVersion = util.GetIPVersion(t.conn.LocalAddr().String()) + if t.ipVersion == common.IPVersionUnknown { + t.ipVersion = common.GetIPVersion(t.conn.LocalAddr().String()) } return t.ipVersion } -func (t *TCPUnderlay) TransportProtocol() util.TransportProtocol { - return util.TCPTransport +func (t *TCPUnderlay) TransportProtocol() common.TransportProtocol { + return common.TCPTransport } func (t *TCPUnderlay) LocalAddr() net.Addr { if t.conn == nil { - return util.NilNetAddr() + return common.NilNetAddr() } return t.conn.LocalAddr() } func (t *TCPUnderlay) RemoteAddr() net.Addr { if t.conn == nil { - return util.NilNetAddr() + return common.NilNetAddr() } return t.conn.RemoteAddr() } @@ -429,7 +429,7 @@ func (t *TCPUnderlay) readSessionSegment(ss *sessionStruct) (*segment, error, st return &segment{ metadata: ss, payload: decryptedPayload, - transport: util.TCPTransport, + transport: common.TCPTransport, block: t.recv, }, nil, stderror.NO_ERROR } @@ -492,7 +492,7 @@ func (t *TCPUnderlay) readDataAckSegment(das *dataAckStruct) (*segment, error, s return &segment{ metadata: das, payload: decryptedPayload, - transport: util.TCPTransport, + transport: common.TCPTransport, block: t.recv, }, nil, stderror.NO_ERROR } diff --git a/mieru/pkg/protocol/underlay_udp.go b/mieru/pkg/protocol/underlay_udp.go index c587b8730c..3b1321a9c9 100644 --- a/mieru/pkg/protocol/underlay_udp.go +++ b/mieru/pkg/protocol/underlay_udp.go @@ -25,12 +25,12 @@ import ( "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" "github.com/enfein/mieru/v3/pkg/cipher" + "github.com/enfein/mieru/v3/pkg/common" + "github.com/enfein/mieru/v3/pkg/common/sockopts" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/metrics" "github.com/enfein/mieru/v3/pkg/replay" "github.com/enfein/mieru/v3/pkg/stderror" - "github.com/enfein/mieru/v3/pkg/util" - "github.com/enfein/mieru/v3/pkg/util/sockopts" ) const ( @@ -132,20 +132,20 @@ func (u *UDPUnderlay) Close() error { return u.conn.Close() } -func (u *UDPUnderlay) IPVersion() util.IPVersion { +func (u *UDPUnderlay) IPVersion() common.IPVersion { u.ipVersionMutex.Lock() defer u.ipVersionMutex.Unlock() if u.conn == nil { - return util.IPVersionUnknown + return common.IPVersionUnknown } - if u.ipVersion == util.IPVersionUnknown { - u.ipVersion = util.GetIPVersion(u.conn.LocalAddr().String()) + if u.ipVersion == common.IPVersionUnknown { + u.ipVersion = common.GetIPVersion(u.conn.LocalAddr().String()) } return u.ipVersion } -func (u *UDPUnderlay) TransportProtocol() util.TransportProtocol { - return util.UDPTransport +func (u *UDPUnderlay) TransportProtocol() common.TransportProtocol { + return common.UDPTransport } func (u *UDPUnderlay) LocalAddr() net.Addr { @@ -156,7 +156,7 @@ func (u *UDPUnderlay) RemoteAddr() net.Addr { if u.isClient && u.serverAddr != nil { return u.serverAddr } - return util.NilNetAddr() + return common.NilNetAddr() } func (u *UDPUnderlay) AddSession(s *Session, remoteAddr net.Addr) error { @@ -341,8 +341,8 @@ func (u *UDPUnderlay) readOneSegment() (*segment, *net.UDPAddr, error) { default: } - util.SetReadTimeout(u.conn, readOneSegmentTimeout) - defer util.SetReadTimeout(u.conn, 0) + common.SetReadTimeout(u.conn, readOneSegmentTimeout) + defer common.SetReadTimeout(u.conn, 0) // Peer may select a different MTU. // Use the largest possible value here to avoid error. b := make([]byte, 1500) @@ -554,7 +554,7 @@ func (u *UDPUnderlay) readSessionSegment(ss *sessionStruct, nonce, remaining []b return &segment{ metadata: ss, payload: decryptedPayload, - transport: util.UDPTransport, + transport: common.UDPTransport, }, nil } @@ -603,7 +603,7 @@ func (u *UDPUnderlay) readDataAckSegment(das *dataAckStruct, nonce, remaining [] return &segment{ metadata: das, payload: decryptedPayload, - transport: util.UDPTransport, + transport: common.UDPTransport, }, nil } diff --git a/mieru/pkg/socks5/auth.go b/mieru/pkg/socks5/auth.go index c319fceba0..24dfa7871a 100644 --- a/mieru/pkg/socks5/auth.go +++ b/mieru/pkg/socks5/auth.go @@ -22,7 +22,7 @@ import ( "github.com/enfein/mieru/v3/apis/constant" "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" - "github.com/enfein/mieru/v3/pkg/util" + "github.com/enfein/mieru/v3/pkg/common" ) // Auth provide authentication settings to socks5 server. @@ -50,8 +50,8 @@ type Credential struct { func (s *Server) handleAuthentication(conn net.Conn) error { // Read the version byte and ensure we are compatible. - util.SetReadTimeout(conn, s.config.HandshakeTimeout) - defer util.SetReadTimeout(conn, 0) + common.SetReadTimeout(conn, s.config.HandshakeTimeout) + defer common.SetReadTimeout(conn, 0) version := []byte{0} if _, err := io.ReadFull(conn, version); err != nil { HandshakeErrors.Add(1) @@ -171,8 +171,8 @@ func (s *Server) handleAuthentication(conn net.Conn) error { // dialWithAuthentication dials to another socks5 server with given credential. // The proxy connection is closed if there is any error. func (s *Server) dialWithAuthentication(proxyConn net.Conn, auth *appctlpb.Auth) error { - util.SetReadTimeout(proxyConn, s.config.HandshakeTimeout) - defer util.SetReadTimeout(proxyConn, 0) + common.SetReadTimeout(proxyConn, s.config.HandshakeTimeout) + defer common.SetReadTimeout(proxyConn, 0) if auth == nil || auth.GetUser() == "" || auth.GetPassword() == "" { // No authentication required. diff --git a/mieru/pkg/socks5/client.go b/mieru/pkg/socks5/client.go index cc9baf8827..d845b491cb 100644 --- a/mieru/pkg/socks5/client.go +++ b/mieru/pkg/socks5/client.go @@ -13,7 +13,7 @@ import ( "time" "github.com/enfein/mieru/v3/apis/constant" - "github.com/enfein/mieru/v3/pkg/util" + "github.com/enfein/mieru/v3/pkg/common" ) // Client contains socks5 client configuration. @@ -147,7 +147,7 @@ func (c *Client) dialSocks5Long(targetAddr string) (conn net.Conn, udpConn *net. // Process the first response. var resp []byte - resp, err = util.SendReceive(ctx, conn, req.Bytes()) + resp, err = common.RoundTrip(ctx, conn, req.Bytes(), 4) if err != nil { return nil, nil, nil, err } else if len(resp) != 2 { @@ -166,7 +166,7 @@ func (c *Client) dialSocks5Long(targetAddr string) (conn net.Conn, udpConn *net. req.Write([]byte{byte(len(c.Credential.Password))}) req.Write([]byte(c.Credential.Password)) - resp, err = util.SendReceive(ctx, conn, req.Bytes()) + resp, err = common.RoundTrip(ctx, conn, req.Bytes(), 4) if err != nil { return nil, nil, nil, err } else if len(resp) != 2 { @@ -219,7 +219,7 @@ func (c *Client) dialSocks5Long(targetAddr string) (conn net.Conn, udpConn *net. }) // Process the second response. - resp, err = util.SendReceive(ctx, conn, req.Bytes()) + resp, err = common.RoundTrip(ctx, conn, req.Bytes(), 512) if err != nil { return } else if len(resp) < 10 { diff --git a/mieru/pkg/socks5/client_test.go b/mieru/pkg/socks5/client_test.go index 51136fb3d7..2a0cd9e09f 100644 --- a/mieru/pkg/socks5/client_test.go +++ b/mieru/pkg/socks5/client_test.go @@ -11,8 +11,8 @@ import ( "time" "github.com/enfein/mieru/v3/apis/constant" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/testtool" - "github.com/enfein/mieru/v3/pkg/util" ) func newTestSocksServer(port int) { @@ -45,9 +45,9 @@ func newTestSocksServer(port int) { func TestSocks5Anonymous(t *testing.T) { httpTestServer := testtool.NewTestHTTPServer([]byte("hello")) - port, err := util.UnusedTCPPort() + port, err := common.UnusedTCPPort() if err != nil { - t.Fatalf("util.UnusedTCPPort() failed: %v", err) + t.Fatalf("common.UnusedTCPPort() failed: %v", err) } newTestSocksServer(port) diff --git a/mieru/pkg/socks5/http2socks.go b/mieru/pkg/socks5/http2socks.go index 1d15a5b97f..c4ce1a1569 100644 --- a/mieru/pkg/socks5/http2socks.go +++ b/mieru/pkg/socks5/http2socks.go @@ -25,9 +25,9 @@ import ( "time" "github.com/enfein/mieru/v3/apis/constant" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/metrics" - "github.com/enfein/mieru/v3/pkg/util" ) const ( @@ -121,14 +121,14 @@ func (p *HTTPProxy) ServeHTTP(res http.ResponseWriter, req *http.Request) { } // Dial to socks server. - socksConn, err := dialFunc("tcp", util.MaybeDecorateIPv6(req.URL.Hostname())+":"+port) + socksConn, err := dialFunc("tcp", common.MaybeDecorateIPv6(req.URL.Hostname())+":"+port) if err != nil { HTTPConnErrors.Add(1) log.Debugf("HTTP proxy dial to socks5 server failed: %v", err) return } httpConn.Write([]byte("HTTP/1.1 200 Connection Established\r\n\r\n")) - util.BidiCopy(httpConn, socksConn) + common.BidiCopy(httpConn, socksConn) } else { // HTTP p.mu.Lock() diff --git a/mieru/pkg/socks5/request.go b/mieru/pkg/socks5/request.go index ed12730411..0d65fa7f2f 100644 --- a/mieru/pkg/socks5/request.go +++ b/mieru/pkg/socks5/request.go @@ -13,9 +13,9 @@ import ( "github.com/enfein/mieru/v3/apis/constant" "github.com/enfein/mieru/v3/apis/model" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/stderror" - "github.com/enfein/mieru/v3/pkg/util" ) // socks5 error types. @@ -48,8 +48,8 @@ func (s *Server) newRequest(conn io.Reader) (*Request, error) { // Read the version byte. header := []byte{0, 0, 0} if netConn, ok := conn.(net.Conn); ok { - util.SetReadTimeout(netConn, s.config.HandshakeTimeout) - defer util.SetReadTimeout(netConn, 0) + common.SetReadTimeout(netConn, s.config.HandshakeTimeout) + defer common.SetReadTimeout(netConn, 0) } if _, err := io.ReadFull(conn, header); err != nil { return nil, fmt.Errorf("failed to get command version: %w", err) @@ -119,7 +119,7 @@ func (s *Server) handleRequest(ctx context.Context, req *Request, conn io.ReadWr // handleConnect is used to handle a connect command. func (s *Server) handleConnect(ctx context.Context, req *Request, conn io.ReadWriteCloser) error { var d net.Dialer - target, err := d.DialContext(ctx, "tcp", req.DstAddr.Address()) + target, err := d.DialContext(ctx, "tcp", req.DstAddr.String()) if err != nil { msg := err.Error() var resp uint8 @@ -148,7 +148,7 @@ func (s *Server) handleConnect(ctx context.Context, req *Request, conn io.ReadWr return fmt.Errorf("failed to send reply: %w", err) } - return util.BidiCopy(conn, target) + return common.BidiCopy(conn, target) } // handleBind is used to handle a bind command. @@ -165,7 +165,7 @@ func (s *Server) handleBind(_ context.Context, _ *Request, conn io.ReadWriteClos func (s *Server) handleAssociate(_ context.Context, _ *Request, conn io.ReadWriteCloser) error { // Create a UDP listener on a random port. // All the requests associated to this connection will go through this port. - udpListenerAddr, err := net.ResolveUDPAddr("udp", util.MaybeDecorateIPv6(util.AllIPAddr())+":0") + udpListenerAddr, err := net.ResolveUDPAddr("udp", common.MaybeDecorateIPv6(common.AllIPAddr())+":0") if err != nil { UDPAssociateErrors.Add(1) return fmt.Errorf("failed to resolve UDP address: %w", err) @@ -349,9 +349,9 @@ func (s *Server) handleAssociate(_ context.Context, _ *Request, conn io.ReadWrit // between socks5 client and server. func (s *Server) proxySocks5AuthReq(conn, proxyConn net.Conn) error { // Send the version and authtication methods to the server. - defer util.SetReadTimeout(conn, 0) - defer util.SetReadTimeout(proxyConn, 0) - util.SetReadTimeout(conn, s.config.HandshakeTimeout) + defer common.SetReadTimeout(conn, 0) + defer common.SetReadTimeout(proxyConn, 0) + common.SetReadTimeout(conn, s.config.HandshakeTimeout) version := []byte{0} if _, err := io.ReadFull(conn, version); err != nil { return fmt.Errorf("failed to get version byte: %w", err) @@ -376,7 +376,7 @@ func (s *Server) proxySocks5AuthReq(conn, proxyConn net.Conn) error { } // Get server authentication response. - util.SetReadTimeout(proxyConn, s.config.HandshakeTimeout) + common.SetReadTimeout(proxyConn, s.config.HandshakeTimeout) authResp := make([]byte, 2) if _, err := io.ReadFull(proxyConn, authResp); err != nil { return fmt.Errorf("failed to read authentication response from the socks5 server: %w", err) @@ -393,9 +393,9 @@ func (s *Server) proxySocks5AuthReq(conn, proxyConn net.Conn) error { // return the created UDP connection. func (s *Server) proxySocks5ConnReq(conn, proxyConn net.Conn) (*net.UDPConn, error) { // Send the connection request to the server. - defer util.SetReadTimeout(conn, 0) - defer util.SetReadTimeout(proxyConn, 0) - util.SetReadTimeout(conn, s.config.HandshakeTimeout) + defer common.SetReadTimeout(conn, 0) + defer common.SetReadTimeout(proxyConn, 0) + common.SetReadTimeout(conn, s.config.HandshakeTimeout) connReq := make([]byte, 4) if _, err := io.ReadFull(conn, connReq); err != nil { return nil, fmt.Errorf("failed to get socks5 connection request: %w", err) @@ -431,7 +431,7 @@ func (s *Server) proxySocks5ConnReq(conn, proxyConn net.Conn) (*net.UDPConn, err log.Debugf("Sent socks5 request %v to server", connReq) // Get server connection response. - util.SetReadTimeout(proxyConn, s.config.HandshakeTimeout) + common.SetReadTimeout(proxyConn, s.config.HandshakeTimeout) connResp := make([]byte, 4) if _, err := io.ReadFull(proxyConn, connResp); err != nil { return nil, fmt.Errorf("failed to read connection response from the server: %w", err) diff --git a/mieru/pkg/socks5/socks5.go b/mieru/pkg/socks5/socks5.go index fee166ed0c..d140f73190 100644 --- a/mieru/pkg/socks5/socks5.go +++ b/mieru/pkg/socks5/socks5.go @@ -10,12 +10,12 @@ import ( "github.com/enfein/mieru/v3/apis/model" "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" + "github.com/enfein/mieru/v3/pkg/common" "github.com/enfein/mieru/v3/pkg/egress" "github.com/enfein/mieru/v3/pkg/log" "github.com/enfein/mieru/v3/pkg/metrics" "github.com/enfein/mieru/v3/pkg/protocol" "github.com/enfein/mieru/v3/pkg/stderror" - "github.com/enfein/mieru/v3/pkg/util" ) var ( @@ -42,7 +42,7 @@ type Config struct { EgressController egress.Controller // Resolver can be provided to do custom name resolution. - Resolver *util.DNSResolver + Resolver *common.DNSResolver // BindIP is used for bind or udp associate BindIP net.IP @@ -84,12 +84,12 @@ func New(conf *Config) (*Server, error) { // Ensure we have a DNS resolver. if conf.Resolver == nil { - conf.Resolver = &util.DNSResolver{} + conf.Resolver = &common.DNSResolver{} } // Provide a default bind IP. if conf.BindIP == nil { - conf.BindIP = net.ParseIP(util.AllIPAddr()) + conf.BindIP = net.ParseIP(common.AllIPAddr()) if conf.BindIP == nil { return nil, fmt.Errorf("set socks5 bind IP failed") } @@ -144,7 +144,7 @@ func (s *Server) Serve(l net.Listener) error { // ServeConn is used to serve a single connection. func (s *Server) ServeConn(conn net.Conn) error { - conn = util.WrapHierarchyConn(conn) + conn = common.WrapHierarchyConn(conn) defer conn.Close() log.Debugf("socks5 server starts to serve connection [%v - %v]", conn.LocalAddr(), conn.RemoteAddr()) @@ -207,14 +207,14 @@ func (s *Server) clientServeConn(conn net.Conn) error { if udpAssociateConn != nil { log.Debugf("UDP association is listening on %v", udpAssociateConn.LocalAddr()) - conn.(util.HierarchyConn).AddSubConnection(udpAssociateConn) + conn.(common.HierarchyConn).AddSubConnection(udpAssociateConn) go func() { - util.WaitForClose(conn) + common.ReadAllAndDiscard(conn) conn.Close() }() return BidiCopyUDP(udpAssociateConn, WrapUDPAssociateTunnel(proxyConn)) } - return util.BidiCopy(conn, proxyConn) + return common.BidiCopy(conn, proxyConn) } func (s *Server) serverServeConn(conn net.Conn) error { @@ -242,9 +242,9 @@ func (s *Server) serverServeConn(conn net.Conn) error { if action.Action == appctlpb.EgressAction_PROXY { proxy := action.Proxy if proxy.GetSocks5Authentication().GetUser() != "" && proxy.GetSocks5Authentication().GetPassword() != "" { - log.Debugf("Egress decision of socks5 request %v is %s to %v with user password authentication", request.Raw, action.Action.String(), util.MaybeDecorateIPv6(proxy.GetHost())+":"+strconv.Itoa(int(proxy.GetPort()))) + log.Debugf("Egress decision of socks5 request %v is %s to %v with user password authentication", request.Raw, action.Action.String(), common.MaybeDecorateIPv6(proxy.GetHost())+":"+strconv.Itoa(int(proxy.GetPort()))) } else { - log.Debugf("Egress decision of socks5 request %v is %s to %v with no authentication", request.Raw, action.Action.String(), util.MaybeDecorateIPv6(proxy.GetHost())+":"+strconv.Itoa(int(proxy.GetPort()))) + log.Debugf("Egress decision of socks5 request %v is %s to %v with no authentication", request.Raw, action.Action.String(), common.MaybeDecorateIPv6(proxy.GetHost())+":"+strconv.Itoa(int(proxy.GetPort()))) } } else { log.Debugf("Egress decision of socks5 request %v is %s", request.Raw, action.Action.String()) @@ -268,7 +268,7 @@ func (s *Server) serverServeConn(conn net.Conn) error { func (s *Server) handleForwarding(req *Request, conn net.Conn, proxy *appctlpb.EgressProxy) error { forwardHost := proxy.GetHost() forwardPort := proxy.GetPort() - proxyConn, err := net.Dial("tcp", util.MaybeDecorateIPv6(forwardHost)+":"+strconv.Itoa(int(forwardPort))) + proxyConn, err := net.Dial("tcp", common.MaybeDecorateIPv6(forwardHost)+":"+strconv.Itoa(int(forwardPort))) if err != nil { HandshakeErrors.Add(1) return fmt.Errorf("dial to egress proxy failed: %w", err) @@ -283,5 +283,5 @@ func (s *Server) handleForwarding(req *Request, conn net.Conn, proxy *appctlpb.E proxyConn.Close() return fmt.Errorf("failed to write socks5 request to egress proxy: %w", err) } - return util.BidiCopy(conn, proxyConn) + return common.BidiCopy(conn, proxyConn) } diff --git a/mieru/pkg/socks5/socks5_test.go b/mieru/pkg/socks5/socks5_test.go index 95b1d8c418..d4f7c95059 100644 --- a/mieru/pkg/socks5/socks5_test.go +++ b/mieru/pkg/socks5/socks5_test.go @@ -10,7 +10,7 @@ import ( "time" "github.com/enfein/mieru/v3/apis/constant" - "github.com/enfein/mieru/v3/pkg/util" + "github.com/enfein/mieru/v3/pkg/common" ) func TestSocks5Connect(t *testing.T) { @@ -54,9 +54,9 @@ func TestSocks5Connect(t *testing.T) { } // Socks server start listening. - serverPort, err := util.UnusedTCPPort() + serverPort, err := common.UnusedTCPPort() if err != nil { - t.Fatalf("util.UnusedTCPPort() failed: %v", err) + t.Fatalf("common.UnusedTCPPort() failed: %v", err) } go func() { if err := serv.ListenAndServe("tcp", "127.0.0.1:"+strconv.Itoa(serverPort)); err != nil { @@ -162,9 +162,9 @@ func TestSocks5UDPAssociation(t *testing.T) { } // Socks server start listening. - serverPort, err := util.UnusedTCPPort() + serverPort, err := common.UnusedTCPPort() if err != nil { - t.Fatalf("util.UnusedTCPPort() failed: %v", err) + t.Fatalf("common.UnusedTCPPort() failed: %v", err) } go func() { if err := serv.ListenAndServe("tcp", "127.0.0.1:"+strconv.Itoa(serverPort)); err != nil { diff --git a/mieru/pkg/testtool/http.go b/mieru/pkg/testtool/http.go index 17818acc3e..177e68136f 100644 --- a/mieru/pkg/testtool/http.go +++ b/mieru/pkg/testtool/http.go @@ -22,13 +22,13 @@ import ( "strconv" "time" - "github.com/enfein/mieru/v3/pkg/util" + "github.com/enfein/mieru/v3/pkg/common" ) // NewTestHTTPServer starts a new HTTP server at a random port. // For each HTTP request, it returns the given response. func NewTestHTTPServer(resp []byte) *http.Server { - httpTestPort, err := util.UnusedTCPPort() + httpTestPort, err := common.UnusedTCPPort() if err != nil { panic(err) } diff --git a/mieru/pkg/testtool/pipe.go b/mieru/pkg/testtool/pipe.go index c1dc810305..ce2705c59b 100644 --- a/mieru/pkg/testtool/pipe.go +++ b/mieru/pkg/testtool/pipe.go @@ -19,12 +19,13 @@ import ( "bytes" "errors" "io" + mrand "math/rand" "net" "runtime" "sync" "time" - "github.com/enfein/mieru/v3/pkg/util" + "github.com/enfein/mieru/v3/pkg/common" ) // BufPipe is like net.Pipe() but with an internal buffer. @@ -82,8 +83,13 @@ func (e *ioEndpoint) Read(b []byte) (n int, err error) { if errors.Is(err, io.EOF) { // io.ReadFull() with partial result will not fail. err = nil - // Allow the writer to catch up. - runtime.Gosched() + action := mrand.Intn(2) + if action == 0 { + // Allow the writer to catch up. + runtime.Gosched() + } else { + time.Sleep(time.Microsecond) + } } return } @@ -110,11 +116,11 @@ func (e *ioEndpoint) Close() error { } func (e *ioEndpoint) LocalAddr() net.Addr { - return util.NilNetAddr() + return common.NilNetAddr() } func (e *ioEndpoint) RemoteAddr() net.Addr { - return util.NilNetAddr() + return common.NilNetAddr() } func (e *ioEndpoint) SetDeadline(t time.Time) error { diff --git a/mieru/pkg/testtool/replay.go b/mieru/pkg/testtool/replay.go deleted file mode 100644 index 59b863aa15..0000000000 --- a/mieru/pkg/testtool/replay.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2022 mieru authors -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -package testtool - -// ReplayRecord is a bundle that helps to test replay attack. -type ReplayRecord struct { - Data []byte // the recorded data - Ready chan struct{} // indicate the data is recorded and ready to process - Finish chan struct{} // indicate the record is processed and no longer needed -} diff --git a/mieru/pkg/testtool/rot13.go b/mieru/pkg/testtool/rot13.go index 51e555bcb9..592ae4bdbc 100644 --- a/mieru/pkg/testtool/rot13.go +++ b/mieru/pkg/testtool/rot13.go @@ -17,6 +17,7 @@ package testtool import ( "fmt" + "io" mrand "math/rand" "net" "regexp" @@ -68,7 +69,7 @@ func TestHelperRot13(in []byte) ([]byte, error) { // TestHelperServeConn serves client requests and returns the rotate-13 of // the input. -func TestHelperServeConn(conn net.Conn) error { +func TestHelperServeConn(conn io.ReadWriteCloser) error { defer conn.Close() buf := make([]byte, 1024*1024) // maximum Read() or Write() size is 1 MB for { diff --git a/mieru/pkg/util/conn.go b/mieru/pkg/util/conn.go deleted file mode 100644 index 4172b92630..0000000000 --- a/mieru/pkg/util/conn.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (C) 2022 mieru authors -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -package util - -import ( - "context" - "net" - "time" -) - -// SetReadTimeout set read deadline to the connection. -// It cancels the deadline if the timeout is 0 or negative. -func SetReadTimeout(conn net.Conn, timeout time.Duration) { - if timeout > 0 { - conn.SetReadDeadline(time.Now().Add(timeout)) - } else { - conn.SetReadDeadline(time.Time{}) - } -} - -// WaitForClose blocks the go routine. It returns when the peer closes the connection. -// In the meanwhile, everything send by the peer is discarded. -func WaitForClose(conn net.Conn) { - b := make([]byte, 64) - for { - _, err := conn.Read(b) - if err != nil { - return - } - } -} - -// SendReceive sends a request to the connection and returns the response. -// The maxinum size of response is 4096 bytes. -func SendReceive(ctx context.Context, conn net.Conn, req []byte) (resp []byte, err error) { - _, err = conn.Write(req) - if err != nil { - return - } - - resp = make([]byte, 4096) - var n int - n, err = conn.Read(resp) - resp = resp[:n] - return -} diff --git a/mieru/test/cmd/exampleapiclient/exampleapiclient.go b/mieru/test/cmd/exampleapiclient/exampleapiclient.go index f597b4c864..2ffae76808 100644 --- a/mieru/test/cmd/exampleapiclient/exampleapiclient.go +++ b/mieru/test/cmd/exampleapiclient/exampleapiclient.go @@ -27,7 +27,7 @@ import ( "github.com/enfein/mieru/v3/apis/constant" "github.com/enfein/mieru/v3/apis/model" "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" - "github.com/enfein/mieru/v3/pkg/util" + "github.com/enfein/mieru/v3/pkg/common" "google.golang.org/protobuf/proto" ) @@ -131,26 +131,25 @@ func handleOneSocks5Conn(c client.Client, conn net.Conn) { if _, err := io.ReadFull(conn, socks5Header); err != nil { panic(fmt.Sprintf("Read socks5 header failed: %v", err)) } - addr := model.AddrSpec{} - if err := addr.ReadFromSocks5(conn); err != nil { + netAddr := model.NetAddrSpec{ + Net: "tcp", + } + if err := netAddr.ReadFromSocks5(conn); err != nil { panic(fmt.Sprintf("ReadFromSocks5() failed: %v", err)) } // Dial to proxy server and do handshake. ctx := context.Background() - proxyConn, err := c.DialContext(ctx) + proxyConn, err := c.DialContext(ctx, netAddr) if err != nil { panic(fmt.Sprintf("DialContext() failed: %v", err)) } defer proxyConn.Close() - if err := c.HandshakeWithConnect(ctx, proxyConn, addr); err != nil { - panic(fmt.Sprintf("HandshakeWithConnect() failed: %v", err)) - } // Send the connect response back to the application. var resp bytes.Buffer resp.Write([]byte{constant.Socks5Version, 0, 0}) - if err := addr.WriteToSocks5(&resp); err != nil { + if err := netAddr.WriteToSocks5(&resp); err != nil { panic(fmt.Sprintf("WriteToSocks5() failed: %v", err)) } if _, err := conn.Write(resp.Bytes()); err != nil { @@ -158,7 +157,7 @@ func handleOneSocks5Conn(c client.Client, conn net.Conn) { } // Exchange payload. - util.BidiCopy(conn, proxyConn) + common.BidiCopy(conn, proxyConn) } func socks5ClientHandshake(conn net.Conn) error { diff --git a/mihomo/adapter/provider/provider.go b/mihomo/adapter/provider/provider.go index 79a752a65e..3771792da5 100644 --- a/mihomo/adapter/provider/provider.go +++ b/mihomo/adapter/provider/provider.go @@ -1,11 +1,9 @@ package provider import ( - "context" "encoding/json" "errors" "fmt" - "net/http" "reflect" "runtime" "strings" @@ -14,7 +12,7 @@ import ( "github.com/metacubex/mihomo/adapter" "github.com/metacubex/mihomo/common/convert" "github.com/metacubex/mihomo/common/utils" - mihomoHttp "github.com/metacubex/mihomo/component/http" + "github.com/metacubex/mihomo/component/profile/cachefile" "github.com/metacubex/mihomo/component/resource" C "github.com/metacubex/mihomo/constant" types "github.com/metacubex/mihomo/constant/provider" @@ -80,7 +78,9 @@ func (pp *proxySetProvider) Initial() error { if err != nil { return err } - pp.getSubscriptionInfo() + if pp.VehicleType() == types.HTTP { + pp.SetSubscriptionInfo(cachefile.Cache().GetSubscriptionInfo(pp.Name())) + } pp.closeAllConnections() return nil } @@ -117,35 +117,14 @@ func (pp *proxySetProvider) setProxies(proxies []C.Proxy) { } } -func (pp *proxySetProvider) getSubscriptionInfo() { - if pp.VehicleType() != types.HTTP { - return - } - go func() { - ctx, cancel := context.WithTimeout(context.Background(), time.Second*90) - defer cancel() - resp, err := mihomoHttp.HttpRequestWithProxy(ctx, pp.Vehicle().Url(), - http.MethodGet, nil, nil, pp.Vehicle().Proxy()) - if err != nil { - return - } - defer resp.Body.Close() +func (pp *proxySetProvider) SetSubscriptionInfo(userInfo string) { + pp.subscriptionInfo = NewSubscriptionInfo(userInfo) +} - userInfoStr := strings.TrimSpace(resp.Header.Get("subscription-userinfo")) - if userInfoStr == "" { - resp2, err := mihomoHttp.HttpRequestWithProxy(ctx, pp.Vehicle().Url(), - http.MethodGet, http.Header{"User-Agent": {"Quantumultx"}}, nil, pp.Vehicle().Proxy()) - if err != nil { - return - } - defer resp2.Body.Close() - userInfoStr = strings.TrimSpace(resp2.Header.Get("subscription-userinfo")) - if userInfoStr == "" { - return - } - } - pp.subscriptionInfo = NewSubscriptionInfo(userInfoStr) - }() +func (pp *proxySetProvider) SetProvider(provider types.ProxyProvider) { + if httpVehicle, ok := pp.Vehicle().(*resource.HTTPVehicle); ok { + httpVehicle.SetProvider(provider) + } } func (pp *proxySetProvider) closeAllConnections() { @@ -196,6 +175,9 @@ func NewProxySetProvider(name string, interval time.Duration, filter string, exc fetcher := resource.NewFetcher[[]C.Proxy](name, interval, vehicle, proxiesParseAndFilter(filter, excludeFilter, excludeTypeArray, filterRegs, excludeFilterReg, dialerProxy, override), proxiesOnUpdate(pd)) pd.Fetcher = fetcher wrapper := &ProxySetProvider{pd} + if httpVehicle, ok := vehicle.(*resource.HTTPVehicle); ok { + httpVehicle.SetProvider(wrapper) + } runtime.SetFinalizer(wrapper, (*ProxySetProvider).Close) return wrapper, nil } @@ -205,16 +187,21 @@ func (pp *ProxySetProvider) Close() error { return pp.proxySetProvider.Close() } +func (pp *ProxySetProvider) SetProvider(provider types.ProxyProvider) { + pp.proxySetProvider.SetProvider(provider) +} + // CompatibleProvider for auto gc type CompatibleProvider struct { *compatibleProvider } type compatibleProvider struct { - name string - healthCheck *HealthCheck - proxies []C.Proxy - version uint32 + name string + healthCheck *HealthCheck + subscriptionInfo *SubscriptionInfo + proxies []C.Proxy + version uint32 } func (cp *compatibleProvider) MarshalJSON() ([]byte, error) { @@ -284,6 +271,10 @@ func (cp *compatibleProvider) Close() error { return nil } +func (cp *compatibleProvider) SetSubscriptionInfo(userInfo string) { + cp.subscriptionInfo = NewSubscriptionInfo(userInfo) +} + func NewCompatibleProvider(name string, proxies []C.Proxy, hc *HealthCheck) (*CompatibleProvider, error) { if len(proxies) == 0 { return nil, errors.New("provider need one proxy at least") @@ -313,7 +304,6 @@ func proxiesOnUpdate(pd *proxySetProvider) func([]C.Proxy) { return func(elm []C.Proxy) { pd.setProxies(elm) pd.version += 1 - pd.getSubscriptionInfo() } } diff --git a/mihomo/adapter/provider/subscription_info.go b/mihomo/adapter/provider/subscription_info.go index b72c7b6161..412b4342fc 100644 --- a/mihomo/adapter/provider/subscription_info.go +++ b/mihomo/adapter/provider/subscription_info.go @@ -16,8 +16,7 @@ type SubscriptionInfo struct { } func NewSubscriptionInfo(userinfo string) (si *SubscriptionInfo) { - userinfo = strings.ToLower(userinfo) - userinfo = strings.ReplaceAll(userinfo, " ", "") + userinfo = strings.ReplaceAll(strings.ToLower(userinfo), " ", "") si = new(SubscriptionInfo) for _, field := range strings.Split(userinfo, ";") { diff --git a/mihomo/component/profile/cachefile/cache.go b/mihomo/component/profile/cachefile/cache.go index f5101f5bb7..7b4cdfc2a6 100644 --- a/mihomo/component/profile/cachefile/cache.go +++ b/mihomo/component/profile/cachefile/cache.go @@ -17,9 +17,10 @@ var ( fileMode os.FileMode = 0o666 defaultCache *CacheFile - bucketSelected = []byte("selected") - bucketFakeip = []byte("fakeip") - bucketETag = []byte("etag") + bucketSelected = []byte("selected") + bucketFakeip = []byte("fakeip") + bucketETag = []byte("etag") + bucketSubscriptionInfo = []byte("subscriptioninfo") ) // CacheFile store and update the cache file diff --git a/mihomo/component/profile/cachefile/subscriptioninfo.go b/mihomo/component/profile/cachefile/subscriptioninfo.go new file mode 100644 index 0000000000..c68f92ebc9 --- /dev/null +++ b/mihomo/component/profile/cachefile/subscriptioninfo.go @@ -0,0 +1,41 @@ +package cachefile + +import ( + "github.com/metacubex/mihomo/log" + + "github.com/metacubex/bbolt" +) + +func (c *CacheFile) SetSubscriptionInfo(name string, userInfo string) { + if c.DB == nil { + return + } + + err := c.DB.Batch(func(t *bbolt.Tx) error { + bucket, err := t.CreateBucketIfNotExists(bucketSubscriptionInfo) + if err != nil { + return err + } + + return bucket.Put([]byte(name), []byte(userInfo)) + }) + if err != nil { + log.Warnln("[CacheFile] write cache to %s failed: %s", c.DB.Path(), err.Error()) + return + } +} +func (c *CacheFile) GetSubscriptionInfo(name string) (userInfo string) { + if c.DB == nil { + return + } + c.DB.View(func(t *bbolt.Tx) error { + if bucket := t.Bucket(bucketSubscriptionInfo); bucket != nil { + if v := bucket.Get([]byte(name)); v != nil { + userInfo = string(v) + } + } + return nil + }) + + return +} diff --git a/mihomo/component/resource/vehicle.go b/mihomo/component/resource/vehicle.go index a9382329fc..8459d186f5 100644 --- a/mihomo/component/resource/vehicle.go +++ b/mihomo/component/resource/vehicle.go @@ -84,11 +84,12 @@ func NewFileVehicle(path string) *FileVehicle { } type HTTPVehicle struct { - url string - path string - proxy string - header http.Header - timeout time.Duration + url string + path string + proxy string + header http.Header + timeout time.Duration + provider types.ProxyProvider } func (h *HTTPVehicle) Url() string { @@ -111,6 +112,10 @@ func (h *HTTPVehicle) Write(buf []byte) error { return safeWrite(h.path, buf) } +func (h *HTTPVehicle) SetProvider(provider types.ProxyProvider) { + h.provider = provider +} + func (h *HTTPVehicle) Read(ctx context.Context, oldHash utils.HashType) (buf []byte, hash utils.HashType, err error) { ctx, cancel := context.WithTimeout(ctx, h.timeout) defer cancel() @@ -133,6 +138,13 @@ func (h *HTTPVehicle) Read(ctx context.Context, oldHash utils.HashType) (buf []b return } defer resp.Body.Close() + + if h.provider != nil { + subscriptionInfo := resp.Header.Get("subscription-userinfo") + cachefile.Cache().SetSubscriptionInfo(h.provider.Name(), subscriptionInfo) + h.provider.SetSubscriptionInfo(subscriptionInfo) + } + if resp.StatusCode < 200 || resp.StatusCode > 299 { if setIfNoneMatch && resp.StatusCode == http.StatusNotModified { return nil, oldHash, nil diff --git a/mihomo/constant/adapters.go b/mihomo/constant/adapters.go index b303eb846b..c7b73a0693 100644 --- a/mihomo/constant/adapters.go +++ b/mihomo/constant/adapters.go @@ -213,6 +213,8 @@ func (at AdapterType) String() string { return "WireGuard" case Tuic: return "Tuic" + case Ssh: + return "Ssh" case Relay: return "Relay" @@ -224,8 +226,6 @@ func (at AdapterType) String() string { return "URLTest" case LoadBalance: return "LoadBalance" - case Ssh: - return "Ssh" default: return "Unknown" } diff --git a/mihomo/constant/provider/interface.go b/mihomo/constant/provider/interface.go index 065b801ae4..925c173469 100644 --- a/mihomo/constant/provider/interface.go +++ b/mihomo/constant/provider/interface.go @@ -81,6 +81,7 @@ type ProxyProvider interface { Version() uint32 RegisterHealthCheckTask(url string, expectedStatus utils.IntRanges[uint16], filter string, interval uint) HealthCheckURL() string + SetSubscriptionInfo(userInfo string) } // RuleProvider interface diff --git a/naiveproxy/.github/workflows/build.yml b/naiveproxy/.github/workflows/build.yml index 7ff15e6f85..58c3d1671f 100644 --- a/naiveproxy/.github/workflows/build.yml +++ b/naiveproxy/.github/workflows/build.yml @@ -10,7 +10,7 @@ defaults: shell: bash working-directory: src env: - CACHE_EPOCH: 1 + CACHE_EPOCH: 4 CCACHE_MAXSIZE: 200M CCACHE_MAXFILES: 0 SCCACHE_CACHE_SIZE: 200M @@ -386,7 +386,7 @@ jobs: openwrt: "target=x86 subtarget=64" target_cpu: x64 - arch: x86 - openwrt: "target=x86 subtarget=generic" + openwrt: "target=x86 subtarget=geode" target_cpu: x86 - arch: aarch64_cortex-a53 openwrt: "target=sunxi subtarget=cortexa53" @@ -395,7 +395,7 @@ jobs: - arch: aarch64_cortex-a53-static openwrt: "target=sunxi subtarget=cortexa53" target_cpu: arm64 - extra: 'arm_cpu="cortex-a53" build_static=true no_madvise_syscall=true' + extra: 'arm_cpu="cortex-a53" build_static=true use_allocator_shim=false use_partition_alloc=false' - arch: aarch64_cortex-a72 openwrt: "target=mvebu subtarget=cortexa72" target_cpu: arm64 @@ -403,16 +403,16 @@ jobs: - arch: aarch64_cortex-a72-static openwrt: "target=mvebu subtarget=cortexa72" target_cpu: arm64 - extra: 'arm_cpu="cortex-a72" build_static=true no_madvise_syscall=true' + extra: 'arm_cpu="cortex-a72" build_static=true use_allocator_shim=false use_partition_alloc=false' - arch: aarch64_generic - openwrt: "target=rockchip subtarget=armv8" + openwrt: "target=layerscape subtarget=armv8_64b" target_cpu: arm64 - arch: aarch64_generic-static - openwrt: "target=rockchip subtarget=armv8" + openwrt: "target=layerscape subtarget=armv8_64b" target_cpu: arm64 - extra: "build_static=true no_madvise_syscall=true" + extra: "build_static=true use_allocator_shim=false use_partition_alloc=false" - arch: arm_arm1176jzf-s_vfp - openwrt: "target=bcm27xx subtarget=bcm2708" + openwrt: "target=brcm2708 subtarget=bcm2708" target_cpu: arm extra: 'arm_version=0 arm_cpu="arm1176jzf-s" arm_fpu="vfp" arm_float_abi="hard" arm_use_neon=false arm_use_thumb=false' - arch: arm_arm926ej-s @@ -420,29 +420,33 @@ jobs: target_cpu: arm extra: 'arm_version=0 arm_cpu="arm926ej-s" arm_float_abi="soft" arm_use_neon=false arm_use_thumb=false' - arch: arm_cortex-a15_neon-vfpv4 - openwrt: "target=armsr subtarget=armv7" + openwrt: "target=ipq806x subtarget=generic" target_cpu: arm extra: 'arm_version=0 arm_cpu="cortex-a15" arm_fpu="neon-vfpv4" arm_float_abi="hard" arm_use_neon=true' - arch: arm_cortex-a5_vfpv4 - openwrt: "target=at91 subtarget=sama5" + openwrt: "target=at91 subtarget=sama5d3" target_cpu: arm extra: 'arm_version=0 arm_cpu="cortex-a5" arm_fpu="vfpv4" arm_float_abi="hard" arm_use_neon=false' - arch: arm_cortex-a7 openwrt: "target=mediatek subtarget=mt7629" target_cpu: arm extra: 'arm_version=0 arm_cpu="cortex-a7" arm_float_abi="soft" arm_use_neon=false' + openwrt_release: '21.02.0' + openwrt_gcc_ver: '8.4.0' - arch: arm_cortex-a7_neon-vfpv4 openwrt: "target=sunxi subtarget=cortexa7" target_cpu: arm extra: 'arm_version=0 arm_cpu="cortex-a7" arm_fpu="neon-vfpv4" arm_float_abi="hard" arm_use_neon=true' + - arch: arm_cortex-a7_neon-vfpv4-static + openwrt: "target=sunxi subtarget=cortexa7" + target_cpu: arm + extra: 'arm_version=0 arm_cpu="cortex-a7" arm_fpu="neon-vfpv4" arm_float_abi="hard" arm_use_neon=true build_static=true use_allocator_shim=false use_partition_alloc=false' - arch: arm_cortex-a7_vfpv4 openwrt: "target=at91 subtarget=sama7" target_cpu: arm extra: 'arm_version=0 arm_cpu="cortex-a7" arm_fpu="vfpv4" arm_float_abi="hard" arm_use_neon=false' - - arch: arm_cortex-a7_neon-vfpv4-static - openwrt: "target=sunxi subtarget=cortexa7" - target_cpu: arm - extra: 'arm_version=0 arm_cpu="cortex-a7" arm_fpu="neon-vfpv4" arm_float_abi="hard" arm_use_neon=true build_static=true no_madvise_syscall=true' + openwrt_release: '22.03.0' + openwrt_gcc_ver: '11.2.0' - arch: arm_cortex-a8_vfpv3 openwrt: "target=sunxi subtarget=cortexa8" target_cpu: arm @@ -454,13 +458,13 @@ jobs: - arch: arm_cortex-a9-static openwrt: "target=bcm53xx subtarget=generic" target_cpu: arm - extra: 'arm_version=0 arm_cpu="cortex-a9" arm_float_abi="soft" arm_use_neon=false build_static=true no_madvise_syscall=true' + extra: 'arm_version=0 arm_cpu="cortex-a9" arm_float_abi="soft" arm_use_neon=false build_static=true use_allocator_shim=false use_partition_alloc=false' - arch: arm_cortex-a9_neon - openwrt: "target=zynq subtarget=generic" + openwrt: "target=imx6 subtarget=generic" target_cpu: arm extra: 'arm_version=0 arm_cpu="cortex-a9" arm_fpu="neon" arm_float_abi="hard" arm_use_neon=true' - arch: arm_cortex-a9_vfpv3-d16 - openwrt: "target=tegra subtarget=generic" + openwrt: "target=mvebu subtarget=cortexa9" target_cpu: arm extra: 'arm_version=0 arm_cpu="cortex-a9" arm_fpu="vfpv3-d16" arm_float_abi="hard" arm_use_neon=false' - arch: arm_mpcore @@ -478,17 +482,19 @@ jobs: - arch: mipsel_24kc-static openwrt: "target=ramips subtarget=rt305x" target_cpu: mipsel - extra: 'mips_arch_variant="r2" mips_float_abi="soft" build_static=true no_madvise_syscall=true' + extra: 'mips_arch_variant="r2" mips_float_abi="soft" build_static=true use_allocator_shim=false use_partition_alloc=false' - arch: mipsel_mips32 - openwrt: "target=bcm47xx subtarget=generic" + openwrt: "target=brcm47xx subtarget=legacy" target_cpu: mipsel extra: 'mips_arch_variant="r1" mips_float_abi="soft"' - arch: riscv64 openwrt: "target=sifiveu subtarget=generic" target_cpu: riscv64 + openwrt_release: '23.05.0' + openwrt_gcc_ver: '12.3.0' env: EXTRA_FLAGS: target_cpu="${{ matrix.target_cpu }}" target_os="openwrt" ${{ matrix.extra }} - OPENWRT_FLAGS: arch=${{ matrix.arch }} release=23.05.0 gcc_ver=12.3.0 ${{ matrix.openwrt }} + OPENWRT_FLAGS: arch=${{ matrix.arch }} release=${{ matrix.openwrt_release || '18.06.0' }} gcc_ver=${{ matrix.openwrt_gcc_ver || '7.3.0' }} ${{ matrix.openwrt }} BUNDLE: naiveproxy-${{ github.event.release.tag_name }}-${{ github.job }}-${{ matrix.arch }} steps: - uses: actions/checkout@v4 diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/page_allocator_internals_posix.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/page_allocator_internals_posix.h index 258f989a95..fcea026d7a 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/page_allocator_internals_posix.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/page_allocator_internals_posix.h @@ -420,9 +420,8 @@ void DiscardSystemPagesInternal(uintptr_t address, size_t length) { } PA_PCHECK(ret == 0); #elif defined(NO_MADVISE_SYSCALL) - // The kernel may be missing madvise support, but - // if the kernel does support it, should call it to avoid memory leaking. - static_cast(madvise(ptr, length, MADV_DONTNEED)); + static_cast(ptr); + static_cast(length); #else // PA_BUILDFLAG(IS_APPLE) // We have experimented with other flags, but with suboptimal results. // diff --git a/naiveproxy/src/get-openwrt.sh b/naiveproxy/src/get-openwrt.sh index 4ae0056172..362e32aea0 100755 --- a/naiveproxy/src/get-openwrt.sh +++ b/naiveproxy/src/get-openwrt.sh @@ -15,16 +15,32 @@ arm_*) abi=musl_eabi;; *) abi=musl;; esac -if [ "$subtarget" ]; then - SDK_PATH=openwrt-toolchain-$release-$target-${subtarget}_gcc-${gcc_ver}_${abi}.Linux-x86_64 +major=${release%%.*} +if [ "$major" -ge 22 ]; then + path_suffix=toolchain else - subtarget='generic' - SDK_PATH=openwrt-toolchain-$release-${target}_gcc-${gcc_ver}_${abi}.Linux-x86_64 + path_suffix=sdk +fi + +if [ ! "$subtarget" ]; then + subtarget=generic +fi + +if [ "$subtarget" != generic -o "$major" -ge 22 ]; then + SDK_PATH=openwrt-$path_suffix-$release-$target-${subtarget}_gcc-${gcc_ver}_${abi}.Linux-x86_64 +else + SDK_PATH=openwrt-$path_suffix-$release-${target}_gcc-${gcc_ver}_${abi}.Linux-x86_64 fi SDK_URL=https://downloads.openwrt.org/releases/$release/targets/$target/$subtarget/$SDK_PATH.tar.xz rm -rf $SDK_PATH curl $SDK_URL | tar xJf - + +if [ "$major" -ge 22 ]; then cd $SDK_PATH +else +cd $SDK_PATH/staging_dir +fi + full_root=toolchain-*_gcc-${gcc_ver}_${abi} cat >include.txt < #include -#include "base/allocator/allocator_check.h" -#include "base/allocator/partition_alloc_support.h" -#include "base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim.h" #include "base/at_exit.h" #include "base/check.h" #include "base/command_line.h" @@ -82,6 +79,12 @@ #include "base/apple/scoped_nsautorelease_pool.h" #endif +#if PA_BUILDFLAG(USE_PARTITION_ALLOC) +#include "base/allocator/allocator_check.h" +#include "base/allocator/partition_alloc_support.h" +#include "base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim.h" +#endif + namespace { constexpr int kListenBackLog = 512; @@ -305,9 +308,12 @@ int main(int argc, char* argv[]) { // content/app/content_main.cc: RunContentProcess() // content/app/content_main_runner_impl.cc: Initialize() base::AtExitManager exit_manager; + +#if PA_BUILDFLAG(USE_PARTITION_ALLOC) std::string process_type = ""; base::allocator::PartitionAllocSupport::Get()->ReconfigureEarlyish( process_type); +#endif // content/app/content_main.cc: RunContentProcess() // content/app/content_main_runner_impl.cc: Initialize() @@ -315,21 +321,27 @@ int main(int argc, char* argv[]) { // with PartitionAlloc on most platforms) smoke-tests that the overriding // logic is working correctly. If not causes a hard crash, as its unexpected // absence has security implications. +#if PA_BUILDFLAG(USE_PARTITION_ALLOC) CHECK(base::allocator::IsAllocatorInitialized()); +#endif // content/app/content_main.cc: RunContentProcess() // content/app/content_main_runner_impl.cc: Run() base::FeatureList::InitInstance("PartitionConnectionsByNetworkIsolationKey", std::string()); +#if PA_BUILDFLAG(USE_PARTITION_ALLOC) base::allocator::PartitionAllocSupport::Get() ->ReconfigureAfterFeatureListInit(/*process_type=*/""); +#endif base::SingleThreadTaskExecutor io_task_executor(base::MessagePumpType::IO); base::ThreadPoolInstance::CreateAndStartWithDefaultParams("naive"); +#if PA_BUILDFLAG(USE_PARTITION_ALLOC) base::allocator::PartitionAllocSupport::Get()->ReconfigureAfterTaskRunnerInit( process_type); +#endif url::AddStandardScheme("quic", url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION); diff --git a/shadowsocks-rust/Cargo.lock b/shadowsocks-rust/Cargo.lock index c88b14e2b3..a5d9c85544 100644 --- a/shadowsocks-rust/Cargo.lock +++ b/shadowsocks-rust/Cargo.lock @@ -3174,9 +3174,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.129" +version = "1.0.131" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbcf9b78a125ee667ae19388837dd12294b858d101fdd393cb9d5501ef09eb2" +checksum = "67d42a0bd4ac281beff598909bb56a86acaf979b84483e1c79c10dcaf98f8cf3" dependencies = [ "indexmap", "itoa", diff --git a/sing-box/cmd/sing-box/cmd.go b/sing-box/cmd/sing-box/cmd.go index f6c37ff73e..9ae3a26835 100644 --- a/sing-box/cmd/sing-box/cmd.go +++ b/sing-box/cmd/sing-box/cmd.go @@ -7,8 +7,10 @@ import ( "strconv" "time" + "github.com/sagernet/sing-box/experimental/deprecated" _ "github.com/sagernet/sing-box/include" "github.com/sagernet/sing-box/log" + "github.com/sagernet/sing/service" "github.com/sagernet/sing/service/filemanager" "github.com/spf13/cobra" @@ -65,4 +67,5 @@ func preRun(cmd *cobra.Command, args []string) { if len(configPaths) == 0 && len(configDirectories) == 0 { configPaths = append(configPaths, "config.json") } + globalCtx = service.ContextWith(globalCtx, deprecated.NewEnvManager(log.StdLogger())) } diff --git a/sing-box/experimental/deprecated/constants.go b/sing-box/experimental/deprecated/constants.go new file mode 100644 index 0000000000..a93da8667e --- /dev/null +++ b/sing-box/experimental/deprecated/constants.go @@ -0,0 +1,79 @@ +package deprecated + +import ( + C "github.com/sagernet/sing-box/constant" + F "github.com/sagernet/sing/common/format" + + "golang.org/x/mod/semver" +) + +type Note struct { + Name string + Description string + DeprecatedVersion string + ScheduledVersion string + EnvName string + MigrationLink string +} + +func (n Note) Impending() bool { + if n.ScheduledVersion == "" { + return false + } + if !semver.IsValid("v" + C.Version) { + return false + } + versionMinor := semver.Compare(semver.MajorMinor("v"+C.Version), "v"+n.ScheduledVersion) + if versionMinor < 0 { + panic("invalid deprecated note: " + n.Name) + } + return versionMinor <= 1 +} + +func (n Note) String() string { + return F.ToString( + n.Description, " is deprecated in sing-box ", n.DeprecatedVersion, + " and will be removed in sing-box ", n.ScheduledVersion, ", checkout documentation for migration: ", n.MigrationLink, + ) +} + +var OptionBadMatchSource = Note{ + Name: "bad-match-source", + Description: "legacy match source rule item", + DeprecatedVersion: "1.10.0", + ScheduledVersion: "1.11.0", + MigrationLink: "https://sing-box.sagernet.org/deprecated/#match-source-rule-items-are-renamed", +} + +var OptionGEOIP = Note{ + Name: "geoip", + Description: "geoip database", + DeprecatedVersion: "1.8.0", + ScheduledVersion: "1.12.0", + EnvName: "GEOIP", + MigrationLink: "https://sing-box.sagernet.org/migration/#migrate-geoip-to-rule-sets", +} + +var OptionGEOSITE = Note{ + Name: "geosite", + Description: "geosite database", + DeprecatedVersion: "1.8.0", + ScheduledVersion: "1.12.0", + EnvName: "GEOSITE", + MigrationLink: "https://sing-box.sagernet.org/migration/#migrate-geosite-to-rule-sets", +} + +var OptionTUNAddressX = Note{ + Name: "tun-address-x", + Description: "legacy tun address fields", + DeprecatedVersion: "1.10.0", + ScheduledVersion: "1.12.0", + MigrationLink: "https://sing-box.sagernet.org/migration/#tun-address-fields-are-merged", +} + +var Options = []Note{ + OptionBadMatchSource, + OptionGEOIP, + OptionGEOSITE, + OptionTUNAddressX, +} diff --git a/sing-box/experimental/deprecated/env.go b/sing-box/experimental/deprecated/env.go new file mode 100644 index 0000000000..a724fb33fe --- /dev/null +++ b/sing-box/experimental/deprecated/env.go @@ -0,0 +1,30 @@ +package deprecated + +import ( + "os" + "strconv" + + "github.com/sagernet/sing/common/logger" +) + +type envManager struct { + logger logger.Logger +} + +func NewEnvManager(logger logger.Logger) Manager { + return &envManager{logger: logger} +} + +func (f *envManager) ReportDeprecated(feature Note) { + if !feature.Impending() { + f.logger.Warn(feature.String()) + return + } + enable, enableErr := strconv.ParseBool(os.Getenv("ENABLE_DEPRECATED_" + feature.EnvName)) + if enableErr == nil && enable { + f.logger.Warn(feature.String()) + return + } + f.logger.Error(feature.String()) + f.logger.Fatal("to continuing using this feature, set ENABLE_DEPRECATED_" + feature.EnvName + "=true") +} diff --git a/sing-box/experimental/deprecated/manager.go b/sing-box/experimental/deprecated/manager.go new file mode 100644 index 0000000000..03e7d38617 --- /dev/null +++ b/sing-box/experimental/deprecated/manager.go @@ -0,0 +1,19 @@ +package deprecated + +import ( + "context" + + "github.com/sagernet/sing/service" +) + +type Manager interface { + ReportDeprecated(note Note) +} + +func Report(ctx context.Context, note Note) { + manager := service.FromContext[Manager](ctx) + if manager == nil { + return + } + manager.ReportDeprecated(note) +} diff --git a/sing-box/experimental/libbox/config.go b/sing-box/experimental/libbox/config.go index b7731143cb..df8b6ee34e 100644 --- a/sing-box/experimental/libbox/config.go +++ b/sing-box/experimental/libbox/config.go @@ -9,6 +9,7 @@ import ( "github.com/sagernet/sing-box" "github.com/sagernet/sing-box/adapter" "github.com/sagernet/sing-box/common/process" + "github.com/sagernet/sing-box/experimental/deprecated" "github.com/sagernet/sing-box/option" "github.com/sagernet/sing-tun" "github.com/sagernet/sing/common/control" @@ -97,6 +98,9 @@ func (s *platformInterfaceStub) FindProcessInfo(ctx context.Context, network str return nil, os.ErrInvalid } +func (s *platformInterfaceStub) ReportDeprecated(note deprecated.Note) { +} + type interfaceMonitorStub struct{} func (s *interfaceMonitorStub) Start() error { diff --git a/sing-box/experimental/libbox/deprecated.go b/sing-box/experimental/libbox/deprecated.go new file mode 100644 index 0000000000..15b1526f79 --- /dev/null +++ b/sing-box/experimental/libbox/deprecated.go @@ -0,0 +1,22 @@ +package libbox + +import "github.com/sagernet/sing-box/experimental/deprecated" + +var _ = deprecated.Note(DeprecatedNote{}) + +type DeprecatedNote struct { + Name string + Description string + DeprecatedVersion string + ScheduledVersion string + EnvName string + MigrationLink string +} + +func (n DeprecatedNote) Impending() bool { + return deprecated.Note(n).Impending() +} + +func (n DeprecatedNote) String() string { + return deprecated.Note(n).String() +} diff --git a/sing-box/experimental/libbox/platform.go b/sing-box/experimental/libbox/platform.go index 4078140f8c..8306012ac2 100644 --- a/sing-box/experimental/libbox/platform.go +++ b/sing-box/experimental/libbox/platform.go @@ -22,6 +22,7 @@ type PlatformInterface interface { IncludeAllNetworks() bool ReadWIFIState() *WIFIState ClearDNSCache() + ReportDeprecated(feature DeprecatedNote) } type TunInterface interface { diff --git a/sing-box/experimental/libbox/platform/interface.go b/sing-box/experimental/libbox/platform/interface.go index 3bec13fa5b..e6be79dc0a 100644 --- a/sing-box/experimental/libbox/platform/interface.go +++ b/sing-box/experimental/libbox/platform/interface.go @@ -5,6 +5,7 @@ import ( "github.com/sagernet/sing-box/adapter" "github.com/sagernet/sing-box/common/process" + "github.com/sagernet/sing-box/experimental/deprecated" "github.com/sagernet/sing-box/option" "github.com/sagernet/sing-tun" "github.com/sagernet/sing/common/control" @@ -25,4 +26,5 @@ type Interface interface { ClearDNSCache() ReadWIFIState() adapter.WIFIState process.Searcher + deprecated.Manager } diff --git a/sing-box/experimental/libbox/service.go b/sing-box/experimental/libbox/service.go index c65090103c..cdfae04ca8 100644 --- a/sing-box/experimental/libbox/service.go +++ b/sing-box/experimental/libbox/service.go @@ -14,6 +14,7 @@ import ( "github.com/sagernet/sing-box/common/process" "github.com/sagernet/sing-box/common/urltest" C "github.com/sagernet/sing-box/constant" + "github.com/sagernet/sing-box/experimental/deprecated" "github.com/sagernet/sing-box/experimental/libbox/internal/procfs" "github.com/sagernet/sing-box/experimental/libbox/platform" "github.com/sagernet/sing-box/log" @@ -236,3 +237,7 @@ func (w *platformInterfaceWrapper) DisableColors() bool { func (w *platformInterfaceWrapper) WriteMessage(level log.Level, message string) { w.iif.WriteLog(message) } + +func (w *platformInterfaceWrapper) ReportDeprecated(note deprecated.Note) { + w.iif.ReportDeprecated(DeprecatedNote(note)) +} diff --git a/sing-box/option/rule_set.go b/sing-box/option/rule_set.go index b6ec113e35..d4368de38a 100644 --- a/sing-box/option/rule_set.go +++ b/sing-box/option/rule_set.go @@ -48,17 +48,6 @@ func (r *RuleSet) UnmarshalJSON(bytes []byte) error { if r.Tag == "" { return E.New("missing tag") } - if r.Type != C.RuleSetTypeInline { - switch r.Format { - case "": - return E.New("missing format") - case C.RuleSetFormatSource, C.RuleSetFormatBinary: - default: - return E.New("unknown rule-set format: " + r.Format) - } - } else { - r.Format = "" - } var v any switch r.Type { case "", C.RuleSetTypeInline: @@ -71,6 +60,17 @@ func (r *RuleSet) UnmarshalJSON(bytes []byte) error { default: return E.New("unknown rule-set type: " + r.Type) } + if r.Type != C.RuleSetTypeInline { + switch r.Format { + case "": + return E.New("missing format") + case C.RuleSetFormatSource, C.RuleSetFormatBinary: + default: + return E.New("unknown rule-set format: " + r.Format) + } + } else { + r.Format = "" + } err = UnmarshallExcluded(bytes, (*_RuleSet)(r), v) if err != nil { return err diff --git a/sing-box/route/router_geo_resources.go b/sing-box/route/router_geo_resources.go index 14364d210d..42de84d00a 100644 --- a/sing-box/route/router_geo_resources.go +++ b/sing-box/route/router_geo_resources.go @@ -13,6 +13,7 @@ import ( "github.com/sagernet/sing-box/common/geoip" "github.com/sagernet/sing-box/common/geosite" C "github.com/sagernet/sing-box/constant" + "github.com/sagernet/sing-box/experimental/deprecated" E "github.com/sagernet/sing/common/exceptions" M "github.com/sagernet/sing/common/metadata" "github.com/sagernet/sing/common/rw" @@ -41,6 +42,7 @@ func (r *Router) LoadGeosite(code string) (adapter.Rule, error) { } func (r *Router) prepareGeoIPDatabase() error { + deprecated.Report(r.ctx, deprecated.OptionGEOIP) var geoPath string if r.geoIPOptions.Path != "" { geoPath = r.geoIPOptions.Path @@ -87,6 +89,7 @@ func (r *Router) prepareGeoIPDatabase() error { } func (r *Router) prepareGeositeDatabase() error { + deprecated.Report(r.ctx, deprecated.OptionGEOIP) var geoPath string if r.geositeOptions.Path != "" { geoPath = r.geositeOptions.Path diff --git a/small/v2ray-geodata/Makefile b/small/v2ray-geodata/Makefile index 96fe2d942d..e48758b9f0 100644 --- a/small/v2ray-geodata/Makefile +++ b/small/v2ray-geodata/Makefile @@ -30,13 +30,13 @@ define Download/geosite HASH:=f820556ed3aa02eb7eadba7a3743d7e6df8e9234785d0d82d2d1edce20fe4b3c endef -GEOSITE_IRAN_VER:=202410140035 +GEOSITE_IRAN_VER:=202410190822 GEOSITE_IRAN_FILE:=iran.dat.$(GEOSITE_IRAN_VER) define Download/geosite-ir URL:=https://github.com/bootmortis/iran-hosted-domains/releases/download/$(GEOSITE_IRAN_VER)/ URL_FILE:=iran.dat FILE:=$(GEOSITE_IRAN_FILE) - HASH:=97d1efd7ce4e5318f9f44039f5945a6253d5a42f7f3b432d3da124703d4cda28 + HASH:=94e3eeca98ff9ec495a72e91da8469753545d9ece256514dd36544d9ef10aaa1 endef define Package/v2ray-geodata/template diff --git a/v2rayn/v2rayN/v2rayN.Desktop/Views/AddServer2Window.axaml b/v2rayn/v2rayN/v2rayN.Desktop/Views/AddServer2Window.axaml index 797d8117e4..a49fcf3d02 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/Views/AddServer2Window.axaml +++ b/v2rayn/v2rayN/v2rayN.Desktop/Views/AddServer2Window.axaml @@ -23,13 +23,15 @@ x:Name="btnSave" Width="100" Content="{x:Static resx:ResUI.TbConfirm}" - Cursor="Hand" /> + Cursor="Hand" + IsDefault="True" />