diff --git a/.github/update.log b/.github/update.log
index 85d57fe50e..f52f08abf0 100644
--- a/.github/update.log
+++ b/.github/update.log
@@ -1207,3 +1207,4 @@ Update On Sat Dec 6 19:36:39 CET 2025
Update On Sun Dec 7 19:36:46 CET 2025
Update On Mon Dec 8 19:42:31 CET 2025
Update On Tue Dec 9 19:39:21 CET 2025
+Update On Wed Dec 10 19:41:17 CET 2025
diff --git a/clash-meta/adapter/outbound/sudoku.go b/clash-meta/adapter/outbound/sudoku.go
index 128dbc98f6..f9313ca39f 100644
--- a/clash-meta/adapter/outbound/sudoku.go
+++ b/clash-meta/adapter/outbound/sudoku.go
@@ -30,6 +30,7 @@ type SudokuOption struct {
TableType string `proxy:"table-type,omitempty"` // "prefer_ascii" or "prefer_entropy"
EnablePureDownlink *bool `proxy:"enable-pure-downlink,omitempty"`
HTTPMask bool `proxy:"http-mask,omitempty"`
+ CustomTable string `proxy:"custom-table,omitempty"` // optional custom byte layout, e.g. xpxvvpvv
}
// DialContext implements C.ProxyAdapter
@@ -178,13 +179,17 @@ func NewSudoku(option SudokuOption) (*Sudoku, error) {
ServerAddress: net.JoinHostPort(option.Server, strconv.Itoa(option.Port)),
Key: option.Key,
AEADMethod: defaultConf.AEADMethod,
- Table: sudoku.NewTable(sudoku.ClientAEADSeed(option.Key), tableType),
PaddingMin: paddingMin,
PaddingMax: paddingMax,
EnablePureDownlink: enablePureDownlink,
HandshakeTimeoutSeconds: defaultConf.HandshakeTimeoutSeconds,
DisableHTTPMask: !option.HTTPMask,
}
+ table, err := sudoku.NewTableWithCustom(sudoku.ClientAEADSeed(option.Key), tableType, option.CustomTable)
+ if err != nil {
+ return nil, fmt.Errorf("build table failed: %w", err)
+ }
+ baseConf.Table = table
if option.AEADMethod != "" {
baseConf.AEADMethod = option.AEADMethod
}
diff --git a/clash-meta/adapter/outbound/wireguard.go b/clash-meta/adapter/outbound/wireguard.go
index 86f8a61bbf..242d0c9fad 100644
--- a/clash-meta/adapter/outbound/wireguard.go
+++ b/clash-meta/adapter/outbound/wireguard.go
@@ -609,6 +609,13 @@ func (w *WireGuard) ResolveUDP(ctx context.Context, metadata *C.Metadata) error
return nil
}
+// ProxyInfo implements C.ProxyAdapter
+func (w *WireGuard) ProxyInfo() C.ProxyInfo {
+ info := w.Base.ProxyInfo()
+ info.DialerProxy = w.option.DialerProxy
+ return info
+}
+
// IsL3Protocol implements C.ProxyAdapter
func (w *WireGuard) IsL3Protocol(metadata *C.Metadata) bool {
return true
diff --git a/clash-meta/adapter/provider/provider.go b/clash-meta/adapter/provider/provider.go
index 71713d8fbf..6ee4fbb110 100644
--- a/clash-meta/adapter/provider/provider.go
+++ b/clash-meta/adapter/provider/provider.go
@@ -8,6 +8,7 @@ import (
"reflect"
"runtime"
"strings"
+ "sync"
"time"
"github.com/metacubex/mihomo/adapter"
@@ -43,6 +44,7 @@ type providerForApi struct {
}
type baseProvider struct {
+ mutex sync.RWMutex
name string
proxies []C.Proxy
healthCheck *HealthCheck
@@ -54,6 +56,8 @@ func (bp *baseProvider) Name() string {
}
func (bp *baseProvider) Version() uint32 {
+ bp.mutex.RLock()
+ defer bp.mutex.RUnlock()
return bp.version
}
@@ -73,10 +77,14 @@ func (bp *baseProvider) Type() P.ProviderType {
}
func (bp *baseProvider) Proxies() []C.Proxy {
+ bp.mutex.RLock()
+ defer bp.mutex.RUnlock()
return bp.proxies
}
func (bp *baseProvider) Count() int {
+ bp.mutex.RLock()
+ defer bp.mutex.RUnlock()
return len(bp.proxies)
}
@@ -93,6 +101,8 @@ func (bp *baseProvider) RegisterHealthCheckTask(url string, expectedStatus utils
}
func (bp *baseProvider) setProxies(proxies []C.Proxy) {
+ bp.mutex.Lock()
+ defer bp.mutex.Unlock()
bp.proxies = proxies
bp.version += 1
bp.healthCheck.setProxies(proxies)
diff --git a/clash-meta/docs/config.yaml b/clash-meta/docs/config.yaml
index c9a62fdd31..cb76035fa8 100644
--- a/clash-meta/docs/config.yaml
+++ b/clash-meta/docs/config.yaml
@@ -1048,8 +1048,9 @@ proxies: # socks5
padding-min: 2 # 最小填充字节数
padding-max: 7 # 最大填充字节数
table-type: prefer_ascii # 可选值:prefer_ascii、prefer_entropy 前者全ascii映射,后者保证熵值(汉明1)低于3
+ # custom-table: xpxvvpvv # 可选,自定义字节布局,必须包含2个x、2个p、4个v,可随意组合。启用此处则无需配置`table-type`
http-mask: true # 是否启用http掩码
- enable-pure-downlink: false # 是否启用混淆下行,false的情况下能在保证数据安全的前提下极大提升下行速度
+ enable-pure-downlink: false # 是否启用混淆下行,false的情况下能在保证数据安全的前提下极大提升下行速度,与服务端端保持相同(如果此处为false,则要求aead不可为none)
# anytls
- name: anytls
@@ -1589,8 +1590,9 @@ listeners:
padding-min: 1 # 填充最小长度
padding-max: 15 # 填充最大长度,均不建议过大
table-type: prefer_ascii # 可选值:prefer_ascii、prefer_entropy 前者全ascii映射,后者保证熵值(汉明1)低于3
+ # custom-table: xpxvvpvv # 可选,自定义字节布局,必须包含2个x、2个p、4个v
handshake-timeout: 5 # optional
- enable-pure-downlink: false # 是否启用混淆下行,false的情况下能在保证数据安全的前提下极大提升下行速度,与客户端保持相同
+ enable-pure-downlink: false # 是否启用混淆下行,false的情况下能在保证数据安全的前提下极大提升下行速度,与客户端保持相同(如果此处为false,则要求aead不可为none)
@@ -1742,4 +1744,3 @@ listeners:
# alpn:
# - h3
# max-udp-relay-packet-size: 1500
-
diff --git a/clash-meta/go.mod b/clash-meta/go.mod
index 1f5159d26e..8fb7e51f1f 100644
--- a/clash-meta/go.mod
+++ b/clash-meta/go.mod
@@ -43,7 +43,7 @@ require (
github.com/mroth/weightedrand/v2 v2.1.0
github.com/openacid/low v0.1.21
github.com/oschwald/maxminddb-golang v1.12.0 // lastest version compatible with golang1.20
- github.com/saba-futai/sudoku v0.0.2-b
+ github.com/saba-futai/sudoku v0.0.2-c
github.com/sagernet/cors v1.2.1
github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a
github.com/samber/lo v1.52.0
diff --git a/clash-meta/go.sum b/clash-meta/go.sum
index b787f888bd..08d1d002a8 100644
--- a/clash-meta/go.sum
+++ b/clash-meta/go.sum
@@ -171,8 +171,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo=
github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A=
-github.com/saba-futai/sudoku v0.0.2-b h1:IbBjgZe1IzzD4xjaCSAdAy8ZNrwOusT14AwCYm77NwI=
-github.com/saba-futai/sudoku v0.0.2-b/go.mod h1:Rvggsoprp7HQM7bMIZUd1M27bPj8THRsZdY1dGbIAvo=
+github.com/saba-futai/sudoku v0.0.2-c h1:0CaoCKx4Br8UL97fnIxn8Y7rnQpflBza7kfaIrdg2rI=
+github.com/saba-futai/sudoku v0.0.2-c/go.mod h1:Rvggsoprp7HQM7bMIZUd1M27bPj8THRsZdY1dGbIAvo=
github.com/sagernet/cors v1.2.1 h1:Cv5Z8y9YSD6Gm+qSpNrL3LO4lD3eQVvbFYJSG7JCMHQ=
github.com/sagernet/cors v1.2.1/go.mod h1:O64VyOjjhrkLmQIjF4KGRrJO/5dVXFdpEmCW/eISRAI=
github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a h1:ObwtHN2VpqE0ZNjr6sGeT00J8uU7JF4cNUdb44/Duis=
diff --git a/clash-meta/listener/config/sudoku.go b/clash-meta/listener/config/sudoku.go
index b1ceed08f5..b49e02557f 100644
--- a/clash-meta/listener/config/sudoku.go
+++ b/clash-meta/listener/config/sudoku.go
@@ -14,6 +14,7 @@ type SudokuServer struct {
TableType string `json:"table-type,omitempty"`
HandshakeTimeoutSecond *int `json:"handshake-timeout,omitempty"`
EnablePureDownlink *bool `json:"enable-pure-downlink,omitempty"`
+ CustomTable string `json:"custom-table,omitempty"`
}
func (s SudokuServer) String() string {
diff --git a/clash-meta/listener/inbound/sudoku.go b/clash-meta/listener/inbound/sudoku.go
index e7cde30856..be69dd395a 100644
--- a/clash-meta/listener/inbound/sudoku.go
+++ b/clash-meta/listener/inbound/sudoku.go
@@ -20,6 +20,7 @@ type SudokuOption struct {
TableType string `inbound:"table-type,omitempty"` // "prefer_ascii" or "prefer_entropy"
HandshakeTimeoutSecond *int `inbound:"handshake-timeout,omitempty"`
EnablePureDownlink *bool `inbound:"enable-pure-downlink,omitempty"`
+ CustomTable string `inbound:"custom-table,omitempty"` // optional custom byte layout, e.g. xpxvvpvv
}
func (o SudokuOption) Equal(config C.InboundConfig) bool {
@@ -52,6 +53,7 @@ func NewSudoku(options *SudokuOption) (*Sudoku, error) {
TableType: options.TableType,
HandshakeTimeoutSecond: options.HandshakeTimeoutSecond,
EnablePureDownlink: options.EnablePureDownlink,
+ CustomTable: options.CustomTable,
}
return &Sudoku{
diff --git a/clash-meta/listener/inbound/sudoku_test.go b/clash-meta/listener/inbound/sudoku_test.go
index f826e66424..c3fbcc6f63 100644
--- a/clash-meta/listener/inbound/sudoku_test.go
+++ b/clash-meta/listener/inbound/sudoku_test.go
@@ -138,3 +138,27 @@ func TestInboundSudoku_PackedDownlink(t *testing.T) {
testInboundSudoku(t, inboundOptions, outboundOptions)
})
}
+
+func TestInboundSudoku_CustomTable(t *testing.T) {
+ key := "test_key_custom"
+ custom := "xpxvvpvv"
+ inboundOptions := inbound.SudokuOption{
+ Key: key,
+ TableType: "prefer_entropy",
+ CustomTable: custom,
+ }
+ outboundOptions := outbound.SudokuOption{
+ Key: key,
+ TableType: "prefer_entropy",
+ CustomTable: custom,
+ }
+ testInboundSudoku(t, inboundOptions, outboundOptions)
+
+ t.Run("ed25519key", func(t *testing.T) {
+ inboundOptions := inboundOptions
+ outboundOptions := outboundOptions
+ inboundOptions.Key = sudokuPublicKey
+ outboundOptions.Key = sudokuPrivateKey
+ testInboundSudoku(t, inboundOptions, outboundOptions)
+ })
+}
diff --git a/clash-meta/listener/sudoku/server.go b/clash-meta/listener/sudoku/server.go
index a1aa9fd2bd..072f372b0f 100644
--- a/clash-meta/listener/sudoku/server.go
+++ b/clash-meta/listener/sudoku/server.go
@@ -152,6 +152,12 @@ func New(config LC.SudokuServer, tunnel C.Tunnel, additions ...inbound.Addition)
enablePureDownlink = *config.EnablePureDownlink
}
+ table, err := sudoku.NewTableWithCustom(config.Key, tableType, config.CustomTable)
+ if err != nil {
+ _ = l.Close()
+ return nil, err
+ }
+
handshakeTimeout := defaultConf.HandshakeTimeoutSeconds
if config.HandshakeTimeoutSecond != nil {
handshakeTimeout = *config.HandshakeTimeoutSecond
@@ -160,7 +166,7 @@ func New(config LC.SudokuServer, tunnel C.Tunnel, additions ...inbound.Addition)
protoConf := sudoku.ProtocolConfig{
Key: config.Key,
AEADMethod: defaultConf.AEADMethod,
- Table: sudoku.NewTable(config.Key, tableType),
+ Table: table,
PaddingMin: paddingMin,
PaddingMax: paddingMax,
EnablePureDownlink: enablePureDownlink,
diff --git a/clash-meta/transport/sudoku/handshake.go b/clash-meta/transport/sudoku/handshake.go
index a4f85f29fd..d34fceb40e 100644
--- a/clash-meta/transport/sudoku/handshake.go
+++ b/clash-meta/transport/sudoku/handshake.go
@@ -146,12 +146,23 @@ func buildHandshakePayload(key string) [16]byte {
}
func NewTable(key string, tableType string) *sudoku.Table {
- start := time.Now()
- table := sudoku.NewTable(key, tableType)
- log.Infoln("[Sudoku] Tables initialized (%s) in %v", tableType, time.Since(start))
+ table, err := NewTableWithCustom(key, tableType, "")
+ if err != nil {
+ panic(fmt.Sprintf("[Sudoku] failed to init tables: %v", err))
+ }
return table
}
+func NewTableWithCustom(key string, tableType string, customTable string) (*sudoku.Table, error) {
+ start := time.Now()
+ table, err := sudoku.NewTableWithCustom(key, tableType, customTable)
+ if err != nil {
+ return nil, err
+ }
+ log.Infoln("[Sudoku] Tables initialized (%s, custom=%v) in %v", tableType, customTable != "", time.Since(start))
+ return table, nil
+}
+
func ClientAEADSeed(key string) string {
if recovered, err := crypto.RecoverPublicKey(key); err == nil {
return crypto.EncodePoint(recovered)
diff --git a/clash-meta/transport/sudoku/handshake_test.go b/clash-meta/transport/sudoku/handshake_test.go
index cfe5c75ecb..5d9443dfde 100644
--- a/clash-meta/transport/sudoku/handshake_test.go
+++ b/clash-meta/transport/sudoku/handshake_test.go
@@ -228,3 +228,22 @@ func runPackedUoTSession(id int, cfg *apis.ProtocolConfig, errCh chan<- error) {
return
}
}
+
+func TestCustomTableHandshake(t *testing.T) {
+ table, err := sudokuobfs.NewTableWithCustom("custom-seed", "prefer_entropy", "xpxvvpvv")
+ if err != nil {
+ t.Fatalf("build custom table: %v", err)
+ }
+ cfg := newPackedConfig(table)
+ errCh := make(chan error, 2)
+
+ runPackedTCPSession(42, cfg, errCh)
+ runPackedUoTSession(43, cfg, errCh)
+
+ close(errCh)
+ for err := range errCh {
+ if err != nil {
+ t.Fatalf("custom table handshake failed: %v", err)
+ }
+ }
+}
diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json
index fd6956beaf..4692bbf3db 100644
--- a/clash-nyanpasu/manifest/version.json
+++ b/clash-nyanpasu/manifest/version.json
@@ -3,9 +3,9 @@
"latest": {
"mihomo": "v1.19.17",
"mihomo_alpha": "alpha-17b8eb8",
- "clash_rs": "v0.9.2",
+ "clash_rs": "v0.9.3",
"clash_premium": "2023-09-05-gdcc8d87",
- "clash_rs_alpha": "0.9.2-alpha+sha.c9fe9e2"
+ "clash_rs_alpha": "0.9.3-alpha+sha.a6538ac"
},
"arch_template": {
"mihomo": {
@@ -69,5 +69,5 @@
"linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf"
}
},
- "updated_at": "2025-12-08T22:21:34.201Z"
+ "updated_at": "2025-12-09T22:21:41.769Z"
}
diff --git a/filebrowser/Dockerfile.s6 b/filebrowser/Dockerfile.s6
index 2a1218b23d..8b363cb38e 100644
--- a/filebrowser/Dockerfile.s6
+++ b/filebrowser/Dockerfile.s6
@@ -1,4 +1,4 @@
-FROM ghcr.io/linuxserver/baseimage-alpine:3.22
+FROM ghcr.io/linuxserver/baseimage-alpine:3.23
RUN apk update && \
apk --no-cache add ca-certificates mailcap jq libcap
diff --git a/filebrowser/frontend/package.json b/filebrowser/frontend/package.json
index f7c9d53169..c405b2f8bc 100644
--- a/filebrowser/frontend/package.json
+++ b/filebrowser/frontend/package.json
@@ -71,5 +71,5 @@
"vite-plugin-compression2": "^2.3.1",
"vue-tsc": "^3.1.3"
},
- "packageManager": "pnpm@10.24.0+sha512.01ff8ae71b4419903b65c60fb2dc9d34cf8bb6e06d03bde112ef38f7a34d6904c424ba66bea5cdcf12890230bf39f9580473140ed9c946fef328b6e5238a345a"
+ "packageManager": "pnpm@10.25.0+sha512.5e82639027af37cf832061bcc6d639c219634488e0f2baebe785028a793de7b525ffcd3f7ff574f5e9860654e098fe852ba8ac5dd5cefe1767d23a020a92f501"
}
diff --git a/filebrowser/frontend/pnpm-lock.yaml b/filebrowser/frontend/pnpm-lock.yaml
index ec1150cbc2..bb10358316 100644
--- a/filebrowser/frontend/pnpm-lock.yaml
+++ b/filebrowser/frontend/pnpm-lock.yaml
@@ -25,7 +25,7 @@ importers:
version: 1.11.19
dompurify:
specifier: ^3.2.6
- version: 3.3.0
+ version: 3.3.1
epubjs:
specifier: ^0.3.93
version: 0.3.93
@@ -107,16 +107,16 @@ importers:
version: 4.17.12
'@types/node':
specifier: ^24.10.1
- version: 24.10.1
+ version: 24.10.2
'@typescript-eslint/eslint-plugin':
specifier: ^8.37.0
- version: 8.48.1(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ version: 8.49.0(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@vitejs/plugin-legacy':
specifier: ^7.2.1
- version: 7.2.1(terser@5.44.1)(vite@7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))
+ version: 7.2.1(terser@5.44.1)(vite@7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0))
'@vitejs/plugin-vue':
specifier: ^6.0.1
- version: 6.0.2(vite@7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.25(typescript@5.9.3))
+ version: 6.0.2(vite@7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.25(typescript@5.9.3))
'@vue/eslint-config-prettier':
specifier: ^10.2.0
version: 10.2.0(eslint@9.39.1)(prettier@3.7.4)
@@ -155,13 +155,13 @@ importers:
version: 5.9.3
vite:
specifier: ^7.2.2
- version: 7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0)
+ version: 7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0)
vite-plugin-compression2:
specifier: ^2.3.1
- version: 2.3.1(rollup@4.53.3)
+ version: 2.4.0(rollup@4.53.3)
vue-tsc:
specifier: ^3.1.3
- version: 3.1.5(typescript@5.9.3)
+ version: 3.1.8(typescript@5.9.3)
packages:
@@ -1110,8 +1110,8 @@ packages:
'@types/lodash@4.17.13':
resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==}
- '@types/node@24.10.1':
- resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
+ '@types/node@24.10.2':
+ resolution: {integrity: sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA==}
'@types/trusted-types@2.0.7':
resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
@@ -1127,11 +1127,11 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/eslint-plugin@8.48.1':
- resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==}
+ '@typescript-eslint/eslint-plugin@8.49.0':
+ resolution: {integrity: sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.48.1
+ '@typescript-eslint/parser': ^8.49.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
@@ -1154,8 +1154,8 @@ packages:
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.48.1':
- resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==}
+ '@typescript-eslint/project-service@8.49.0':
+ resolution: {integrity: sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
@@ -1168,8 +1168,8 @@ packages:
resolution: {integrity: sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/scope-manager@8.48.1':
- resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==}
+ '@typescript-eslint/scope-manager@8.49.0':
+ resolution: {integrity: sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.37.0':
@@ -1184,8 +1184,8 @@ packages:
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/tsconfig-utils@8.48.1':
- resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==}
+ '@typescript-eslint/tsconfig-utils@8.49.0':
+ resolution: {integrity: sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
@@ -1197,8 +1197,8 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/type-utils@8.48.1':
- resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==}
+ '@typescript-eslint/type-utils@8.49.0':
+ resolution: {integrity: sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -1212,8 +1212,8 @@ packages:
resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/types@8.48.1':
- resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==}
+ '@typescript-eslint/types@8.49.0':
+ resolution: {integrity: sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.37.0':
@@ -1228,8 +1228,8 @@ packages:
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/typescript-estree@8.48.1':
- resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==}
+ '@typescript-eslint/typescript-estree@8.49.0':
+ resolution: {integrity: sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
@@ -1241,8 +1241,8 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/utils@8.48.1':
- resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==}
+ '@typescript-eslint/utils@8.49.0':
+ resolution: {integrity: sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -1256,8 +1256,8 @@ packages:
resolution: {integrity: sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/visitor-keys@8.48.1':
- resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==}
+ '@typescript-eslint/visitor-keys@8.49.0':
+ resolution: {integrity: sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@videojs/http-streaming@3.17.2':
@@ -1287,14 +1287,14 @@ packages:
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
vue: ^3.2.25
- '@volar/language-core@2.4.23':
- resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==}
+ '@volar/language-core@2.4.26':
+ resolution: {integrity: sha512-hH0SMitMxnB43OZpyF1IFPS9bgb2I3bpCh76m2WEK7BE0A0EzpYsRp0CCH2xNKshr7kacU5TQBLYn4zj7CG60A==}
- '@volar/source-map@2.4.23':
- resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==}
+ '@volar/source-map@2.4.26':
+ resolution: {integrity: sha512-JJw0Tt/kSFsIRmgTQF4JSt81AUSI1aEye5Zl65EeZ8H35JHnTvFGmpDOBn5iOxd48fyGE+ZvZBp5FcgAy/1Qhw==}
- '@volar/typescript@2.4.23':
- resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==}
+ '@volar/typescript@2.4.26':
+ resolution: {integrity: sha512-N87ecLD48Sp6zV9zID/5yuS1+5foj0DfuYGdQ6KHj/IbKvyKv1zNX6VCmnKYwtmHadEO6mFc2EKISiu3RDPAvA==}
'@vue/compiler-core@3.5.25':
resolution: {integrity: sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==}
@@ -1337,8 +1337,8 @@ packages:
typescript:
optional: true
- '@vue/language-core@3.1.5':
- resolution: {integrity: sha512-FMcqyzWN+sYBeqRMWPGT2QY0mUasZMVIuHvmb5NT3eeqPrbHBYtCP8JWEUCDCgM+Zr62uuWY/qoeBrPrzfa78w==}
+ '@vue/language-core@3.1.8':
+ resolution: {integrity: sha512-PfwAW7BLopqaJbneChNL6cUOTL3GL+0l8paYP5shhgY5toBNidWnMXWM+qDwL7MC9+zDtzCF2enT8r6VPu64iw==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
@@ -1456,8 +1456,8 @@ packages:
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
- alien-signals@3.1.0:
- resolution: {integrity: sha512-yufC6VpSy8tK3I0lO67pjumo5JvDQVQyr38+3OHqe6CHl1t2VZekKZ7EKKZSqk0cRmE7U7tfZbpXiKNzuc+ckg==}
+ alien-signals@3.1.1:
+ resolution: {integrity: sha512-ogkIWbVrLwKtHY6oOAXaYkAxP+cTH7V5FZ5+Tm4NZFd8VDZ6uNMDrfzqctTZ42eTMCSR3ne3otpcxmqSnFfPYA==}
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
@@ -1606,8 +1606,8 @@ packages:
dom-walk@0.1.2:
resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==}
- dompurify@3.3.0:
- resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==}
+ dompurify@3.3.1:
+ resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==}
electron-to-chromium@1.5.250:
resolution: {integrity: sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==}
@@ -2436,11 +2436,11 @@ packages:
videojs-vtt.js@0.15.5:
resolution: {integrity: sha512-yZbBxvA7QMYn15Lr/ZfhhLPrNpI/RmCSCqgIff57GC2gIrV5YfyzLfLyZMj0NnZSAz8syB4N0nHXpZg9MyrMOQ==}
- vite-plugin-compression2@2.3.1:
- resolution: {integrity: sha512-bnhLTsurtvOiiP6EMISIKVsOMCeTAjE6FJbyqQus3W4mtAxF7pCuC4puUIAiCgNs98tOCpqo6GIXJXTLufzIaw==}
+ vite-plugin-compression2@2.4.0:
+ resolution: {integrity: sha512-8J4CBF1+dM1I06azba/eXJuJHinLF0Am7lUvRH8AZpu0otJoBaDEnxrIEr5iPZJSwH0AEglJGYCveh7pN52jCg==}
- vite@7.2.6:
- resolution: {integrity: sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==}
+ vite@7.2.7:
+ resolution: {integrity: sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -2518,8 +2518,8 @@ packages:
peerDependencies:
vue: ^3.0.2
- vue-tsc@3.1.5:
- resolution: {integrity: sha512-L/G9IUjOWhBU0yun89rv8fKqmKC+T0HfhrFjlIml71WpfBv9eb4E9Bev8FMbyueBIU9vxQqbd+oOsVcDa5amGw==}
+ vue-tsc@3.1.8:
+ resolution: {integrity: sha512-deKgwx6exIHeZwF601P1ktZKNF0bepaSN4jBU3AsbldPx9gylUc1JDxYppl82yxgkAgaz0Y0LCLOi+cXe9HMYA==}
hasBin: true
peerDependencies:
typescript: '>=5.0.0'
@@ -3550,7 +3550,7 @@ snapshots:
'@types/lodash@4.17.13': {}
- '@types/node@24.10.1':
+ '@types/node@24.10.2':
dependencies:
undici-types: 7.16.0
@@ -3576,16 +3576,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
'@typescript-eslint/parser': 8.37.0(eslint@9.39.1)(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.48.1
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.49.0
eslint: 9.39.1
- graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -3623,10 +3622,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.48.1(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.49.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3)
- '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
@@ -3642,10 +3641,10 @@ snapshots:
'@typescript-eslint/types': 8.46.4
'@typescript-eslint/visitor-keys': 8.46.4
- '@typescript-eslint/scope-manager@8.48.1':
+ '@typescript-eslint/scope-manager@8.49.0':
dependencies:
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/visitor-keys': 8.48.1
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/visitor-keys': 8.49.0
'@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.9.3)':
dependencies:
@@ -3655,7 +3654,7 @@ snapshots:
dependencies:
typescript: 5.9.3
- '@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.49.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
@@ -3671,11 +3670,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/type-utils@8.48.1(eslint@9.39.1)(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.49.0(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
debug: 4.4.3
eslint: 9.39.1
ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -3687,7 +3686,7 @@ snapshots:
'@typescript-eslint/types@8.46.4': {}
- '@typescript-eslint/types@8.48.1': {}
+ '@typescript-eslint/types@8.49.0': {}
'@typescript-eslint/typescript-estree@8.37.0(typescript@5.9.3)':
dependencies:
@@ -3721,12 +3720,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/typescript-estree@8.48.1(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.49.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.48.1(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3)
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/visitor-keys': 8.48.1
+ '@typescript-eslint/project-service': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/visitor-keys': 8.49.0
debug: 4.4.3
minimatch: 9.0.5
semver: 7.7.3
@@ -3747,12 +3746,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.48.1(eslint@9.39.1)(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.49.0(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
eslint: 9.39.1
typescript: 5.9.3
transitivePeerDependencies:
@@ -3768,9 +3767,9 @@ snapshots:
'@typescript-eslint/types': 8.46.4
eslint-visitor-keys: 4.2.1
- '@typescript-eslint/visitor-keys@8.48.1':
+ '@typescript-eslint/visitor-keys@8.49.0':
dependencies:
- '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/types': 8.49.0
eslint-visitor-keys: 4.2.1
'@videojs/http-streaming@3.17.2(video.js@8.23.4)':
@@ -3795,7 +3794,7 @@ snapshots:
global: 4.4.0
is-function: 1.0.2
- '@vitejs/plugin-legacy@7.2.1(terser@5.44.1)(vite@7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))':
+ '@vitejs/plugin-legacy@7.2.1(terser@5.44.1)(vite@7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0))':
dependencies:
'@babel/core': 7.28.5
'@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5)
@@ -3810,25 +3809,25 @@ snapshots:
regenerator-runtime: 0.14.1
systemjs: 6.15.1
terser: 5.44.1
- vite: 7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0)
+ vite: 7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@6.0.2(vite@7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.25(typescript@5.9.3))':
+ '@vitejs/plugin-vue@6.0.2(vite@7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.25(typescript@5.9.3))':
dependencies:
'@rolldown/pluginutils': 1.0.0-beta.50
- vite: 7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0)
+ vite: 7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0)
vue: 3.5.25(typescript@5.9.3)
- '@volar/language-core@2.4.23':
+ '@volar/language-core@2.4.26':
dependencies:
- '@volar/source-map': 2.4.23
+ '@volar/source-map': 2.4.26
- '@volar/source-map@2.4.23': {}
+ '@volar/source-map@2.4.26': {}
- '@volar/typescript@2.4.23':
+ '@volar/typescript@2.4.26':
dependencies:
- '@volar/language-core': 2.4.23
+ '@volar/language-core': 2.4.26
path-browserify: 1.0.1
vscode-uri: 3.1.0
@@ -3904,12 +3903,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@vue/language-core@3.1.5(typescript@5.9.3)':
+ '@vue/language-core@3.1.8(typescript@5.9.3)':
dependencies:
- '@volar/language-core': 2.4.23
+ '@volar/language-core': 2.4.26
'@vue/compiler-dom': 3.5.25
'@vue/shared': 3.5.25
- alien-signals: 3.1.0
+ alien-signals: 3.1.1
muggle-string: 0.4.1
path-browserify: 1.0.1
picomatch: 4.0.3
@@ -3993,7 +3992,7 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
- alien-signals@3.1.0: {}
+ alien-signals@3.1.1: {}
ansi-styles@4.3.0:
dependencies:
@@ -4136,7 +4135,7 @@ snapshots:
dom-walk@0.1.2: {}
- dompurify@3.3.0:
+ dompurify@3.3.1:
optionalDependencies:
'@types/trusted-types': 2.0.7
@@ -4978,14 +4977,14 @@ snapshots:
dependencies:
global: 4.4.0
- vite-plugin-compression2@2.3.1(rollup@4.53.3):
+ vite-plugin-compression2@2.4.0(rollup@4.53.3):
dependencies:
'@rollup/pluginutils': 5.3.0(rollup@4.53.3)
tar-mini: 0.2.0
transitivePeerDependencies:
- rollup
- vite@7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0):
+ vite@7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0):
dependencies:
esbuild: 0.25.12
fdir: 6.5.0(picomatch@4.0.3)
@@ -4994,7 +4993,7 @@ snapshots:
rollup: 4.53.3
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
fsevents: 2.3.3
terser: 5.44.1
yaml: 2.7.0
@@ -5042,10 +5041,10 @@ snapshots:
dependencies:
vue: 3.5.25(typescript@5.9.3)
- vue-tsc@3.1.5(typescript@5.9.3):
+ vue-tsc@3.1.8(typescript@5.9.3):
dependencies:
- '@volar/typescript': 2.4.23
- '@vue/language-core': 3.1.5(typescript@5.9.3)
+ '@volar/typescript': 2.4.26
+ '@vue/language-core': 3.1.8(typescript@5.9.3)
typescript: 5.9.3
vue@3.5.25(typescript@5.9.3):
diff --git a/filebrowser/frontend/src/components/prompts/CreateFilePath.vue b/filebrowser/frontend/src/components/prompts/CreateFilePath.vue
index ec470f3abf..166240d030 100644
--- a/filebrowser/frontend/src/components/prompts/CreateFilePath.vue
+++ b/filebrowser/frontend/src/components/prompts/CreateFilePath.vue
@@ -18,7 +18,7 @@
+<% end %>
- updateCount();
+
diff --git a/openwrt-passwall2/.github/workflows/Close stale issues and Prs.yml b/openwrt-passwall2/.github/workflows/Close stale issues and Prs.yml
index 2e64f5b21c..b30abac827 100644
--- a/openwrt-passwall2/.github/workflows/Close stale issues and Prs.yml
+++ b/openwrt-passwall2/.github/workflows/Close stale issues and Prs.yml
@@ -7,7 +7,7 @@ jobs:
stale:
runs-on: ubuntu-22.04
steps:
- - uses: actions/stale@v7.0.0
+ - uses: actions/stale@v10
with:
stale-issue-message: "Stale Issue"
stale-pr-message: "Stale PR"
diff --git a/sing-box/.github/workflows/build.yml b/sing-box/.github/workflows/build.yml
index 3f6d410b22..6c46c1954b 100644
--- a/sing-box/.github/workflows/build.yml
+++ b/sing-box/.github/workflows/build.yml
@@ -62,20 +62,22 @@ jobs:
echo "version=$version" >> "$GITHUB_OUTPUT"
build:
name: Build binary
- if: github.event_name != 'workflow_dispatch' || inputs.build == 'All' || inputs.build == 'Binary'
+ if: false # TODO: temporarily disabled for testing
runs-on: ubuntu-latest
needs:
- calculate_version
strategy:
matrix:
include:
- - { os: linux, arch: amd64, debian: amd64, rpm: x86_64, pacman: x86_64, openwrt: "x86_64" }
- - { os: linux, arch: "386", go386: sse2, debian: i386, rpm: i386, openwrt: "i386_pentium4" }
+ # Linux with naive outbound (CGO enabled with Debian Bullseye sysroot)
+ - { os: linux, arch: amd64, naive: true, debian: amd64, rpm: x86_64, pacman: x86_64, openwrt: "x86_64", sysroot_sha: "36a164623d03f525e3dfb783a5e9b8a00e98e1ddd2b5cff4e449bd016dd27e50", cc_target: "x86_64-linux-gnu" }
+ - { os: linux, arch: arm64, naive: true, debian: arm64, rpm: aarch64, pacman: aarch64, openwrt: "aarch64_cortex-a53 aarch64_cortex-a72 aarch64_cortex-a76 aarch64_generic", sysroot_sha: "2f915d821eec27515c0c6d21b69898e23762908d8d7ccc1aa2a8f5f25e8b7e18", cc_target: "aarch64-linux-gnu", cross_pkg: "libc6-dev-arm64-cross" }
+ - { os: linux, arch: "386", naive: true, go386: sse2, debian: i386, rpm: i386, openwrt: "i386_pentium4", sysroot_sha: "63f0e5128b84f7b0421956a4a40affa472be8da0e58caf27e9acbc84072daee7", cc_target: "i686-linux-gnu", cross_pkg: "libc6-dev-i386-cross" }
+ - { os: linux, arch: arm, naive: true, goarm: "7", debian: armhf, rpm: armv7hl, pacman: armv7hl, openwrt: "arm_cortex-a5_vfpv4 arm_cortex-a7_neon-vfpv4 arm_cortex-a7_vfpv4 arm_cortex-a8_vfpv3 arm_cortex-a9_neon arm_cortex-a9_vfpv3-d16 arm_cortex-a15_neon-vfpv4", sysroot_sha: "47b3a0b161ca011b2b33d4fc1ef6ef269b8208a0b7e4c900700c345acdfd1814", cc_target: "arm-linux-gnueabihf", cross_pkg: "libc6-dev-armhf-cross", linker: "bfd" }
+ # Linux without naive outbound (no CGO)
- { os: linux, arch: "386", go386: softfloat, openwrt: "i386_pentium-mmx" }
- - { os: linux, arch: arm64, debian: arm64, rpm: aarch64, pacman: aarch64, openwrt: "aarch64_cortex-a53 aarch64_cortex-a72 aarch64_cortex-a76 aarch64_generic" }
- { os: linux, arch: arm, goarm: "5", openwrt: "arm_arm926ej-s arm_cortex-a7 arm_cortex-a9 arm_fa526 arm_xscale" }
- { os: linux, arch: arm, goarm: "6", debian: armel, rpm: armv6hl, openwrt: "arm_arm1176jzf-s_vfp" }
- - { os: linux, arch: arm, goarm: "7", debian: armhf, rpm: armv7hl, pacman: armv7hl, openwrt: "arm_cortex-a5_vfpv4 arm_cortex-a7_neon-vfpv4 arm_cortex-a7_vfpv4 arm_cortex-a8_vfpv3 arm_cortex-a9_neon arm_cortex-a9_vfpv3-d16 arm_cortex-a15_neon-vfpv4" }
- { os: linux, arch: mips, gomips: softfloat, openwrt: "mips_24kc mips_4kec mips_mips32" }
- { os: linux, arch: mipsle, gomips: hardfloat, debian: mipsel, rpm: mipsel, openwrt: "mipsel_24kc_24kf" }
- { os: linux, arch: mipsle, gomips: softfloat, openwrt: "mipsel_24kc mipsel_74kc mipsel_mips32" }
@@ -86,13 +88,10 @@ jobs:
- { os: linux, arch: ppc64le, debian: ppc64el, rpm: ppc64le }
- { os: linux, arch: riscv64, debian: riscv64, rpm: riscv64, openwrt: "riscv64_generic" }
- { os: linux, arch: loong64, debian: loongarch64, rpm: loongarch64, openwrt: "loongarch64_generic" }
-
- - { os: windows, arch: amd64 }
+ # Windows 7 legacy (no naive, no CGO)
- { os: windows, arch: amd64, legacy_win7: true, legacy_name: "windows-7" }
- - { os: windows, arch: "386" }
- { os: windows, arch: "386", legacy_win7: true, legacy_name: "windows-7" }
- - { os: windows, arch: arm64 }
-
+ # Android (naive enabled)
- { os: android, arch: arm64, ndk: "aarch64-linux-android21" }
- { os: android, arch: arm, ndk: "armv7a-linux-androideabi21" }
- { os: android, arch: amd64, ndk: "x86_64-linux-android21" }
@@ -135,6 +134,19 @@ jobs:
with:
ndk-version: r28
local-cache: true
+ - name: Download sysroot (Linux naive)
+ if: matrix.naive
+ run: |
+ set -xeuo pipefail
+ wget -q "https://commondatastorage.googleapis.com/chrome-linux-sysroot/${{ matrix.sysroot_sha }}" -O sysroot.tar.xz
+ mkdir -p /tmp/sysroot
+ tar -xf sysroot.tar.xz -C /tmp/sysroot
+ - name: Install cross compiler (Linux naive)
+ if: matrix.naive
+ run: |
+ set -xeuo pipefail
+ sudo apt-get update
+ sudo apt-get install -y clang lld ${{ matrix.cross_pkg }}
- name: Set tag
run: |-
git ls-remote --exit-code --tags origin v${{ needs.calculate_version.outputs.version }} || echo "PUBLISHED=false" >> "$GITHUB_ENV"
@@ -143,12 +155,12 @@ jobs:
run: |
set -xeuo pipefail
TAGS='with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_acme,with_clash_api,with_tailscale,with_ccm,badlinkname,tfogo_checklinkname0'
- if [[ "${{ matrix.os }}" == "android" ]]; then
+ if [[ "${{ matrix.naive }}" == "true" ]] || [[ "${{ matrix.os }}" == "android" ]]; then
TAGS="${TAGS},with_naive_outbound"
fi
echo "BUILD_TAGS=${TAGS}" >> "${GITHUB_ENV}"
- name: Build
- if: matrix.os != 'android'
+ if: matrix.os != 'android' && ! matrix.naive
run: |
set -xeuo pipefail
mkdir -p dist
@@ -164,6 +176,24 @@ jobs:
GOMIPS: ${{ matrix.gomips }}
GOMIPS64: ${{ matrix.gomips }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Build Linux with naive
+ if: matrix.naive
+ run: |
+ set -xeuo pipefail
+ mkdir -p dist
+ go build -v -trimpath -o dist/sing-box -tags "${BUILD_TAGS}" \
+ -ldflags "-s -buildid= -X github.com/sagernet/sing-box/constant.Version=${{ needs.calculate_version.outputs.version }} -checklinkname=0 -linkmode=external -extldflags \"-fuse-ld=${LINKER} --sysroot=/tmp/sysroot\"" \
+ ./cmd/sing-box
+ env:
+ CGO_ENABLED: "1"
+ GOOS: linux
+ GOARCH: ${{ matrix.arch }}
+ GO386: ${{ matrix.go386 }}
+ GOARM: ${{ matrix.goarm }}
+ CC: clang --target=${{ matrix.cc_target }} --sysroot=/tmp/sysroot
+ CXX: clang++ --target=${{ matrix.cc_target }} --sysroot=/tmp/sysroot
+ LINKER: ${{ matrix.linker || 'lld' }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Build Android
if: matrix.os == 'android'
run: |
@@ -286,7 +316,7 @@ jobs:
path: "dist"
build_darwin:
name: Build Darwin binaries
- if: github.event_name != 'workflow_dispatch' || inputs.build == 'All' || inputs.build == 'Binary'
+ if: false # TODO: temporarily disabled for testing
runs-on: macos-latest
needs:
- calculate_version
@@ -318,7 +348,10 @@ jobs:
- name: Set build tags
run: |
set -xeuo pipefail
- TAGS='with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_acme,with_clash_api,with_tailscale,with_ccm,with_naive_outbound,badlinkname,tfogo_checklinkname0'
+ TAGS='with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_acme,with_clash_api,with_tailscale,with_ccm,badlinkname,tfogo_checklinkname0'
+ if [[ "${{ matrix.legacy_go124 }}" != "true" ]]; then
+ TAGS="${TAGS},with_naive_outbound"
+ fi
echo "BUILD_TAGS=${TAGS}" >> "${GITHUB_ENV}"
- name: Build
run: |
@@ -355,25 +388,93 @@ jobs:
with:
name: binary-darwin_${{ matrix.arch }}${{ matrix.legacy_name && format('-legacy-{0}', matrix.legacy_name) }}
path: "dist"
- build_naive_linux:
- name: Build Linux with naive outbound
+ build_windows:
+ name: Build Windows binaries
if: github.event_name != 'workflow_dispatch' || inputs.build == 'All' || inputs.build == 'Binary'
+ runs-on: windows-latest
+ needs:
+ - calculate_version
+ strategy:
+ matrix:
+ include:
+ - { arch: amd64, cc: x86_64-w64-mingw32-clang }
+ - { arch: "386", cc: i686-w64-mingw32-clang }
+ - { arch: arm64, cc: aarch64-w64-mingw32-clang }
+ steps:
+ - name: Checkout
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
+ with:
+ fetch-depth: 0
+ - name: Setup Go
+ uses: actions/setup-go@v5
+ with:
+ go-version: ^1.25.4
+ - name: Cache llvm-mingw
+ id: cache-llvm-mingw
+ uses: actions/cache@v4
+ with:
+ path: ${{ runner.temp }}/llvm-mingw
+ key: llvm-mingw-ucrt-x86_64
+ - name: Setup llvm-mingw
+ if: steps.cache-llvm-mingw.outputs.cache-hit != 'true'
+ run: |
+ $headers = @{ Authorization = "Bearer $env:GITHUB_TOKEN" }
+ $release = Invoke-RestMethod -Uri "https://api.github.com/repos/mstorsjo/llvm-mingw/releases/latest" -Headers $headers
+ $asset = $release.assets | Where-Object { $_.name -like "llvm-mingw-*-ucrt-x86_64.zip" }
+ curl -Lo llvm-mingw.zip $asset.browser_download_url
+ Expand-Archive llvm-mingw.zip -DestinationPath $env:RUNNER_TEMP/llvm-mingw
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Setup llvm-mingw PATH
+ run: |
+ $extractedDir = Get-ChildItem -Path $env:RUNNER_TEMP/llvm-mingw -Directory | Where-Object { $_.Name -like "llvm-mingw-*" } | Select-Object -First 1
+ echo "$($extractedDir.FullName)\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
+ - name: Set tag
+ run: |-
+ git ls-remote --exit-code --tags origin v${{ needs.calculate_version.outputs.version }} || echo "PUBLISHED=false" >> "$env:GITHUB_ENV"
+ git tag v${{ needs.calculate_version.outputs.version }} -f
+ - name: Build
+ run: |
+ mkdir -p dist
+ go build -v -trimpath -o dist/sing-box.exe -tags "with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_acme,with_clash_api,with_tailscale,with_ccm,with_naive_outbound,badlinkname,tfogo_checklinkname0" `
+ -ldflags "-s -buildid= -X github.com/sagernet/sing-box/constant.Version=${{ needs.calculate_version.outputs.version }} -checklinkname=0" `
+ ./cmd/sing-box
+ env:
+ CGO_ENABLED: "1"
+ CGO_LDFLAGS_ALLOW: "-Wl,-Xlink=.*"
+ GOOS: windows
+ GOARCH: ${{ matrix.arch }}
+ CC: ${{ matrix.cc }}
+ CXX: ${{ matrix.cc }}++
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Archive
+ run: |
+ $DIR_NAME = "sing-box-${{ needs.calculate_version.outputs.version }}-windows-${{ matrix.arch }}"
+ mkdir "dist/$DIR_NAME"
+ Copy-Item LICENSE "dist/$DIR_NAME"
+ Copy-Item "dist/sing-box.exe" "dist/$DIR_NAME"
+ Compress-Archive -Path "dist/$DIR_NAME" -DestinationPath "dist/$DIR_NAME.zip"
+ Remove-Item -Recurse "dist/$DIR_NAME"
+ - name: Cleanup
+ run: Remove-Item dist/sing-box.exe
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: binary-windows_${{ matrix.arch }}
+ path: "dist"
+ build_linux_musl:
+ name: Build Linux musl static binaries
+ if: false # TODO: temporarily disabled for testing
runs-on: ubuntu-latest
needs:
- calculate_version
strategy:
matrix:
include:
- # Linux glibc (dynamic linking with Debian Bullseye sysroot)
- - { arch: amd64, sysroot_arch: amd64, sysroot_sha: "36a164623d03f525e3dfb783a5e9b8a00e98e1ddd2b5cff4e449bd016dd27e50", cc_target: "x86_64-linux-gnu", suffix: "-naive" }
- - { arch: arm64, sysroot_arch: arm64, sysroot_sha: "2f915d821eec27515c0c6d21b69898e23762908d8d7ccc1aa2a8f5f25e8b7e18", cc_target: "aarch64-linux-gnu", suffix: "-naive" }
- - { arch: "386", sysroot_arch: i386, sysroot_sha: "63f0e5128b84f7b0421956a4a40affa472be8da0e58caf27e9acbc84072daee7", cc_target: "i686-linux-gnu", suffix: "-naive" }
- - { arch: arm, goarm: "7", sysroot_arch: armhf, sysroot_sha: "47b3a0b161ca011b2b33d4fc1ef6ef269b8208a0b7e4c900700c345acdfd1814", cc_target: "arm-linux-gnueabihf", suffix: "-naive" }
- # Linux musl (static linking)
- - { arch: amd64, musl: true, cc_target: "x86_64-linux-musl", suffix: "-naive-musl" }
- - { arch: arm64, musl: true, cc_target: "aarch64-linux-musl", suffix: "-naive-musl" }
- - { arch: "386", musl: true, cc_target: "i686-linux-musl", suffix: "-naive-musl" }
- - { arch: arm, goarm: "7", musl: true, cc_target: "arm-linux-musleabihf", suffix: "-naive-musl" }
+ - { arch: amd64, cc_target: "x86_64-linux-musl" }
+ - { arch: arm64, cc_target: "aarch64-linux-musl" }
+ - { arch: "386", cc_target: "i686-linux-musl" }
+ - { arch: arm, goarm: "7", cc_target: "arm-linux-musleabihf" }
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
@@ -387,62 +488,16 @@ jobs:
run: |-
git ls-remote --exit-code --tags origin v${{ needs.calculate_version.outputs.version }} || echo "PUBLISHED=false" >> "$GITHUB_ENV"
git tag v${{ needs.calculate_version.outputs.version }} -f
- - name: Download sysroot (glibc)
- if: ${{ ! matrix.musl }}
- run: |
- set -xeuo pipefail
- wget -q "https://commondatastorage.googleapis.com/chrome-linux-sysroot/${{ matrix.sysroot_sha }}" -O sysroot.tar.xz
- mkdir -p /tmp/sysroot
- tar -xf sysroot.tar.xz -C /tmp/sysroot
- - name: Install cross compiler (glibc)
- if: ${{ ! matrix.musl }}
- run: |
- set -xeuo pipefail
- sudo apt-get update
- sudo apt-get install -y clang lld
- if [[ "${{ matrix.arch }}" == "arm64" ]]; then
- sudo apt-get install -y libc6-dev-arm64-cross
- elif [[ "${{ matrix.arch }}" == "386" ]]; then
- sudo apt-get install -y libc6-dev-i386-cross
- elif [[ "${{ matrix.arch }}" == "arm" ]]; then
- sudo apt-get install -y libc6-dev-armhf-cross
- fi
- name: Install musl cross compiler
- if: matrix.musl
run: |
set -xeuo pipefail
.github/setup_musl_cross.sh "${{ matrix.cc_target }}"
echo "PATH=$HOME/musl-cross/bin:$PATH" >> $GITHUB_ENV
- - name: Set build tags
- run: |
- set -xeuo pipefail
- TAGS='with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_acme,with_clash_api,with_tailscale,with_ccm,with_naive_outbound,badlinkname,tfogo_checklinkname0'
- if [[ "${{ matrix.musl }}" == "true" ]]; then
- TAGS="${TAGS},with_musl"
- fi
- echo "BUILD_TAGS=${TAGS}" >> "${GITHUB_ENV}"
- - name: Build (glibc)
- if: ${{ ! matrix.musl }}
+ - name: Build
run: |
set -xeuo pipefail
mkdir -p dist
- go build -v -trimpath -o dist/sing-box -tags "${BUILD_TAGS}" \
- -ldflags '-s -buildid= -X github.com/sagernet/sing-box/constant.Version=${{ needs.calculate_version.outputs.version }} -checklinkname=0 -linkmode=external -extldflags "-fuse-ld=lld --sysroot=/tmp/sysroot"' \
- ./cmd/sing-box
- env:
- CGO_ENABLED: "1"
- GOOS: linux
- GOARCH: ${{ matrix.arch }}
- GOARM: ${{ matrix.goarm }}
- CC: "clang --target=${{ matrix.cc_target }} --sysroot=/tmp/sysroot"
- CXX: "clang++ --target=${{ matrix.cc_target }} --sysroot=/tmp/sysroot"
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Build (musl)
- if: matrix.musl
- run: |
- set -xeuo pipefail
- mkdir -p dist
- go build -v -trimpath -o dist/sing-box -tags "${BUILD_TAGS}" \
+ go build -v -trimpath -o dist/sing-box -tags 'with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_acme,with_clash_api,with_tailscale,with_ccm,with_naive_outbound,with_musl,badlinkname,tfogo_checklinkname0' \
-ldflags '-s -buildid= -X github.com/sagernet/sing-box/constant.Version=${{ needs.calculate_version.outputs.version }} -checklinkname=0 -linkmode=external -extldflags "-static"' \
./cmd/sing-box
env:
@@ -459,7 +514,7 @@ jobs:
if [[ -n "${{ matrix.goarm }}" ]]; then
DIR_NAME="${DIR_NAME}v${{ matrix.goarm }}"
fi
- DIR_NAME="${DIR_NAME}${{ matrix.suffix }}"
+ DIR_NAME="${DIR_NAME}-musl"
echo "DIR_NAME=${DIR_NAME}" >> "${GITHUB_ENV}"
- name: Archive
run: |
@@ -475,11 +530,11 @@ jobs:
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
- name: binary-linux_${{ matrix.arch }}${{ matrix.goarm && format('v{0}', matrix.goarm) }}${{ matrix.suffix }}
+ name: binary-linux_${{ matrix.arch }}${{ matrix.goarm && format('v{0}', matrix.goarm) }}-musl
path: "dist"
build_android:
name: Build Android
- if: github.event_name != 'workflow_dispatch' || inputs.build == 'All' || inputs.build == 'Android'
+ if: false # TODO: temporarily disabled for testing
runs-on: ubuntu-latest
needs:
- calculate_version
@@ -559,7 +614,7 @@ jobs:
path: 'dist'
publish_android:
name: Publish Android
- if: github.event_name == 'workflow_dispatch' && inputs.build == 'publish-android'
+ if: false # TODO: temporarily disabled for testing
runs-on: ubuntu-latest
needs:
- calculate_version
@@ -806,13 +861,14 @@ jobs:
path: 'dist'
upload:
name: Upload builds
- if: "!failure() && github.event_name == 'workflow_dispatch' && (inputs.build == 'All' || inputs.build == 'Binary' || inputs.build == 'Android' || inputs.build == 'Apple' || inputs.build == 'macOS-standalone')"
+ if: false # TODO: temporarily disabled for testing
runs-on: ubuntu-latest
needs:
- calculate_version
- build
- build_darwin
- - build_naive_linux
+ - build_windows
+ - build_linux_musl
- build_android
- build_apple
steps:
diff --git a/sing-box/go.mod b/sing-box/go.mod
index cc1e824e70..a7f66e6c2e 100644
--- a/sing-box/go.mod
+++ b/sing-box/go.mod
@@ -25,8 +25,8 @@ require (
github.com/sagernet/asc-go v0.0.0-20241217030726-d563060fe4e1
github.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a
github.com/sagernet/cors v1.2.1
- github.com/sagernet/cronet-go v0.0.0-20251209163619-43499a42c286
- github.com/sagernet/cronet-go/all v0.0.0-20251209163943-9ad85d71d2e3
+ github.com/sagernet/cronet-go v0.0.0-20251210132647-15dd6a9ee4bc
+ github.com/sagernet/cronet-go/all v0.0.0-20251210133029-b0d1058a9fcf
github.com/sagernet/fswatch v0.1.1
github.com/sagernet/gomobile v0.1.8
github.com/sagernet/gvisor v0.0.0-20250811.0-sing-box-mod.1
@@ -106,24 +106,24 @@ require (
github.com/prometheus-community/pro-bing v0.4.0 // indirect
github.com/quic-go/qpack v0.6.0 // indirect
github.com/safchain/ethtool v0.3.0 // indirect
- github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/windows_386 v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251209163619-43499a42c286 // indirect
- github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251209163619-43499a42c286 // indirect
+ github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/windows_386 v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect
+ github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect
github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a // indirect
github.com/sagernet/nftables v0.3.0-beta.4 // indirect
github.com/spf13/pflag v1.0.6 // indirect
diff --git a/sing-box/go.sum b/sing-box/go.sum
index 4fe8031544..12190ff9ca 100644
--- a/sing-box/go.sum
+++ b/sing-box/go.sum
@@ -150,46 +150,46 @@ github.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a h1:+NkI2670SQpQWvkk
github.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a/go.mod h1:63s7jpZqcDAIpj8oI/1v4Izok+npJOHACFCU6+huCkM=
github.com/sagernet/cors v1.2.1 h1:Cv5Z8y9YSD6Gm+qSpNrL3LO4lD3eQVvbFYJSG7JCMHQ=
github.com/sagernet/cors v1.2.1/go.mod h1:O64VyOjjhrkLmQIjF4KGRrJO/5dVXFdpEmCW/eISRAI=
-github.com/sagernet/cronet-go v0.0.0-20251209163619-43499a42c286 h1:T3l7r/FRNyf6AS1ZZfvFMYtTCozKWgm/mNXjmg/HqOw=
-github.com/sagernet/cronet-go v0.0.0-20251209163619-43499a42c286/go.mod h1:l5IZJLEWpDGJbrF0qBHgxAVBPsAxKOLa1BYDh6B2sdI=
-github.com/sagernet/cronet-go/all v0.0.0-20251209163943-9ad85d71d2e3 h1:a6/HHQ2bBrX4humT9jSACAD9kj4ucgal5tYWjOpxsXA=
-github.com/sagernet/cronet-go/all v0.0.0-20251209163943-9ad85d71d2e3/go.mod h1:bq4r/IRzbgNUWfcWxJTyex/jKzI6WCSPfrCK3ns4O3A=
-github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251209163619-43499a42c286 h1:sZFASnzhbYtPJoz+7OAx7IC85161iROwEkmHVQcaHS0=
-github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251209163619-43499a42c286/go.mod h1:XXDwdjX/T8xftoeJxQmbBoYXZp8MAPFR2CwbFuTpEtw=
-github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251209163619-43499a42c286 h1:XmPpSRMDde4Oi5XzYBuOqWAvzPQsNjmKQfft98OlvLg=
-github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251209163619-43499a42c286/go.mod h1:iNiUGoLtnr8/JTuVNj7XJbmpOAp2C6+B81KDrPxwaZM=
-github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251209163619-43499a42c286 h1:EEn7N5sCLZwnmlZjYb63Ewt2SjfYKTQwlQqEaC0zyF8=
-github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251209163619-43499a42c286/go.mod h1:19ILNUOGIzRdOqa2mq+iY0JoHxuieB7/lnjYeaA2vEc=
-github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251209163619-43499a42c286 h1:UA4/kKm8qA694fO7Y9EAe9csHecdBgAoKyn5CzUdAig=
-github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251209163619-43499a42c286/go.mod h1:JxzGyQf94Cr6sBShKqODGDyRUlESfJK/Njcz9Lz6qMQ=
-github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251209163619-43499a42c286 h1:Cz1iXs54Urg23BRtdkikDUzaifE72lNwq3D+DHZTVXE=
-github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251209163619-43499a42c286/go.mod h1:KN+9T9TBycGOLzmKU4QdcHAJEj6Nlx48ifnlTvvHMvs=
-github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251209163619-43499a42c286 h1:9f7dGYztdhJHqnGxAfg6e3pwiQc7gCIFfbnpYUG8+l4=
-github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251209163619-43499a42c286/go.mod h1:kojvtUc29KKnk8hs2QIANynVR59921SnGWA9kXohHc0=
-github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251209163619-43499a42c286 h1:cVnXsYi+qvBGxtv5i5qzx05Ol0go4/ZVhEB/nwKdZxE=
-github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251209163619-43499a42c286/go.mod h1:tzVJFTOm66UxLxy6K0ZN5Ic2PC79e+sKKnt+V9puEa4=
-github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251209163619-43499a42c286 h1:L/M8nypnkrbv+zSFBEzoU3E2WVYoL/+BiF7W/ZGOkcE=
-github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251209163619-43499a42c286/go.mod h1:cGh5hO6eljCo6KMQ/Cel8Xgq4+etL0awZLRBDVG1EZQ=
-github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251209163619-43499a42c286 h1:UcNkxALcHUpo49DBHr2epN00hTRRiijwh4qv1fdXgRQ=
-github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251209163619-43499a42c286/go.mod h1:JFE0/cxaKkx0wqPMZU7MgaplQlU0zudv82dROJjClKU=
-github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251209163619-43499a42c286 h1:R68J9khidtJRKka3J2dNVKVGrBq0ieevNRS3P8vijMw=
-github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251209163619-43499a42c286/go.mod h1:vU8VftFeSt7fURCa3JXD6+k6ss1YAX+idQjPvHmJ2tI=
-github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251209163619-43499a42c286 h1:aDxXLIVS219vxa56UN1ak9Grju6UWKhX0ULw7RGDIgs=
-github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251209163619-43499a42c286/go.mod h1:vCe4OUuL+XOUge9v3MyTD45BnuAXiH+DkjN9quDXJzQ=
-github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251209163619-43499a42c286 h1:r4eaHyVT7KWguRhYTudhq+RHsd0pq7HHP/xLn3v/NuI=
-github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251209163619-43499a42c286/go.mod h1:w9amBWrvjtohQzBGCKJ7LCh22LhTIJs4sE7cYaKQzM0=
-github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251209163619-43499a42c286 h1:TYxTK8434FqUokQKzg5Qs8xpjU8ws2VVn7J4gfL0jY0=
-github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251209163619-43499a42c286/go.mod h1:TqlsFtcYS/etTeck46kHBeT8Le0Igw1Q/AV88UnMS3s=
-github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251209163619-43499a42c286 h1:2dysrFpUGjR/BePrJYoGyl8UmqlEY67g8ySyI2p1cjA=
-github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251209163619-43499a42c286/go.mod h1:B6Qd0vys8sv9OKVRN6J9RqDzYRGE938Fb2zrYdBDyTQ=
-github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251209163619-43499a42c286 h1:edRSfV1xEloFgpdiordf0S653D5r0exHN4X85BT06nk=
-github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251209163619-43499a42c286/go.mod h1:3tXMMFY7AHugOVBZ5Al7cL7JKsnFOe5bMVr0hZPk3ow=
-github.com/sagernet/cronet-go/lib/windows_386 v0.0.0-20251209163619-43499a42c286 h1:CUWmGJ8PslWMJHanzgxF9+CuN4fk4NigKwxw1tjpdRY=
-github.com/sagernet/cronet-go/lib/windows_386 v0.0.0-20251209163619-43499a42c286/go.mod h1:rnS7D+ULJX2PrP0Cy+05GS0mRZ2PP6+gVSroZKt8fjk=
-github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251209163619-43499a42c286 h1:2/fTHNBvTGgxWALqogKGpzKw1zLgc5lSidMRchLcoqk=
-github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251209163619-43499a42c286/go.mod h1:lm9w/oCCRyBiUa3G8lDQTT8x/ONUvgVR2iV9fVzUZB8=
-github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251209163619-43499a42c286 h1:J1nQYpbALQGlCOuErF0/lI3SnwPd0egy/iUxhgRK76g=
-github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251209163619-43499a42c286/go.mod h1:n34YyLgapgjWdKa0IoeczjAFCwD3/dxbsH5sucKw0bw=
+github.com/sagernet/cronet-go v0.0.0-20251210132647-15dd6a9ee4bc h1:TeUwtjNOirI7QW6RUGmzovZHiImdyysxdXii8tj2pjE=
+github.com/sagernet/cronet-go v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:l5IZJLEWpDGJbrF0qBHgxAVBPsAxKOLa1BYDh6B2sdI=
+github.com/sagernet/cronet-go/all v0.0.0-20251210133029-b0d1058a9fcf h1:9HfW4vwWSXSOBcxT3s7MAyxGnAxPpcFiRHW/9ImtlFA=
+github.com/sagernet/cronet-go/all v0.0.0-20251210133029-b0d1058a9fcf/go.mod h1:hljs4OQivwLEGy9ijqAQ7/bKfdfIOnudIuBKVWGpuNU=
+github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251210132647-15dd6a9ee4bc h1:7RwE5fT6D/bH8g/Sp/+bFPTTgYEHk8mI3wcP9nfOkfc=
+github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:XXDwdjX/T8xftoeJxQmbBoYXZp8MAPFR2CwbFuTpEtw=
+github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251210132647-15dd6a9ee4bc h1:5ABO0dzl0FREp4yOj8tRUil8Rnr+UxAbgHm6/1/GaUs=
+github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:iNiUGoLtnr8/JTuVNj7XJbmpOAp2C6+B81KDrPxwaZM=
+github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251210132647-15dd6a9ee4bc h1:6RWqk2JxL/JoyxeahfV6nWj0HpRJXKM42hAZAobprLk=
+github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:19ILNUOGIzRdOqa2mq+iY0JoHxuieB7/lnjYeaA2vEc=
+github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251210132647-15dd6a9ee4bc h1:GHUnWWlndwxHw4pEvw40ISO7xrMq+h+P+FQ3KrGlghQ=
+github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:JxzGyQf94Cr6sBShKqODGDyRUlESfJK/Njcz9Lz6qMQ=
+github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251210132647-15dd6a9ee4bc h1:urmRC1HxIetnZuyaPkHketyrhWBhwvRr74XXEHmqgLc=
+github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:KN+9T9TBycGOLzmKU4QdcHAJEj6Nlx48ifnlTvvHMvs=
+github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251210132647-15dd6a9ee4bc h1:EN57YqGy2cbeQexLBb6vf1IcCEjNmz6sSoMNOik8DJQ=
+github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:kojvtUc29KKnk8hs2QIANynVR59921SnGWA9kXohHc0=
+github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251210132647-15dd6a9ee4bc h1:aRFCWKVFt5aTbcHQ7rUWLtfpxVtUbB1t1VDEgMm1LdY=
+github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:tzVJFTOm66UxLxy6K0ZN5Ic2PC79e+sKKnt+V9puEa4=
+github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251210132647-15dd6a9ee4bc h1:txzvlKqPSL3yUVQs0DOx1bc0ONEuiWqIEoaQvMJNqdk=
+github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:cGh5hO6eljCo6KMQ/Cel8Xgq4+etL0awZLRBDVG1EZQ=
+github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251210132647-15dd6a9ee4bc h1:DdYm5omtBr6/0DyCG5cTS4fK8hXoPXeEWiaBhDdUqac=
+github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:JFE0/cxaKkx0wqPMZU7MgaplQlU0zudv82dROJjClKU=
+github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251210132647-15dd6a9ee4bc h1:qZ5koP16Y5Wbzi89bRA3c2C9vUlZPk7uz5ZLBAd/4h4=
+github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:vU8VftFeSt7fURCa3JXD6+k6ss1YAX+idQjPvHmJ2tI=
+github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251210132647-15dd6a9ee4bc h1:nz3DMrICKuhS9ht7Hx1Hc1Al4LtfPADK/SbKrJ/UXKc=
+github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:vCe4OUuL+XOUge9v3MyTD45BnuAXiH+DkjN9quDXJzQ=
+github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251210132647-15dd6a9ee4bc h1:5OLCnge+qhMLS1HBz/KY803Pd3IRC7Q9KP71GZMM+p0=
+github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:w9amBWrvjtohQzBGCKJ7LCh22LhTIJs4sE7cYaKQzM0=
+github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251210132647-15dd6a9ee4bc h1:pg9jxoJQsiSxRBCTsFHXATGmSLMpsdvdCvVNhpMEdDA=
+github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:TqlsFtcYS/etTeck46kHBeT8Le0Igw1Q/AV88UnMS3s=
+github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251210132647-15dd6a9ee4bc h1:gAnasnvsCH8seCtYsfFoWsHeldBZUKPvarSjt9bKIak=
+github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:B6Qd0vys8sv9OKVRN6J9RqDzYRGE938Fb2zrYdBDyTQ=
+github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251210132647-15dd6a9ee4bc h1:YVBUW8D3w/c0F5N3F+5rnXyNPNDODFPVw1NAWfsQv2Q=
+github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:3tXMMFY7AHugOVBZ5Al7cL7JKsnFOe5bMVr0hZPk3ow=
+github.com/sagernet/cronet-go/lib/windows_386 v0.0.0-20251210132647-15dd6a9ee4bc h1:8w1wlyIpIcH3/1LPe6NMxZxLpsTq+00FEoSrMl+o03o=
+github.com/sagernet/cronet-go/lib/windows_386 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:rnS7D+ULJX2PrP0Cy+05GS0mRZ2PP6+gVSroZKt8fjk=
+github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251210132647-15dd6a9ee4bc h1:Qwof0qMpoRXycadI1OWgwj7OTaCZQqoYbwqVAKd4rrs=
+github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:lm9w/oCCRyBiUa3G8lDQTT8x/ONUvgVR2iV9fVzUZB8=
+github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251210132647-15dd6a9ee4bc h1:/2D4fyTJjYwf5NzgnOuTElGpX6fFN2dFAf/x0L0w1pI=
+github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:n34YyLgapgjWdKa0IoeczjAFCwD3/dxbsH5sucKw0bw=
github.com/sagernet/fswatch v0.1.1 h1:YqID+93B7VRfqIH3PArW/XpJv5H4OLEVWDfProGoRQs=
github.com/sagernet/fswatch v0.1.1/go.mod h1:nz85laH0mkQqJfaOrqPpkwtU1znMFNVTpT/5oRsVz/o=
github.com/sagernet/gomobile v0.1.8 h1:vXgoN0pjsMONAaYCTdsKBX2T1kxuS7sbT/mZ7PElGoo=
diff --git a/small/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/small/luci-app-passwall/luasrc/passwall/util_sing-box.lua
index 04c9618265..8a81cdc063 100644
--- a/small/luci-app-passwall/luasrc/passwall/util_sing-box.lua
+++ b/small/luci-app-passwall/luasrc/passwall/util_sing-box.lua
@@ -206,9 +206,9 @@ function gen_outbound(flag, node, tag, proxy_table)
local first = node.tcp_guise_http_path[1]
return (first == "" or not first) and "/" or first
end)() or "/",
- headers = {
- ["User-Agent"] = node.tcp_guise_http_user_agent or nil
- },
+ headers = node.tcp_guise_http_user_agent and {
+ ["User-Agent"] = node.tcp_guise_http_user_agent
+ } or nil,
idle_timeout = (node.http_h2_health_check == "1") and node.http_h2_read_idle_timeout or nil,
ping_timeout = (node.http_h2_health_check == "1") and node.http_h2_health_check_timeout or nil,
}
@@ -220,9 +220,9 @@ function gen_outbound(flag, node, tag, proxy_table)
type = "http",
host = node.http_host or {},
path = node.http_path or "/",
- headers = {
- ["User-Agent"] = node.http_user_agent or nil
- },
+ headers = node.http_user_agent and {
+ ["User-Agent"] = node.http_user_agent
+ } or nil,
idle_timeout = (node.http_h2_health_check == "1") and node.http_h2_read_idle_timeout or nil,
ping_timeout = (node.http_h2_health_check == "1") and node.http_h2_health_check_timeout or nil,
}
@@ -233,10 +233,10 @@ function gen_outbound(flag, node, tag, proxy_table)
v2ray_transport = {
type = "ws",
path = node.ws_path or "/",
- headers = {
- Host = node.ws_host or nil,
- ["User-Agent"] = node.ws_user_agent or nil
- },
+ headers = (node.ws_host or node.ws_user_agent) and {
+ Host = node.ws_host,
+ ["User-Agent"] = node.ws_user_agent
+ } or nil,
max_early_data = tonumber(node.ws_maxEarlyData) or nil,
early_data_header_name = (node.ws_earlyDataHeaderName) and node.ws_earlyDataHeaderName or nil --要与 Xray-core 兼容,请将其设置为 Sec-WebSocket-Protocol。它需要与服务器保持一致。
}
@@ -247,9 +247,9 @@ function gen_outbound(flag, node, tag, proxy_table)
type = "httpupgrade",
host = node.httpupgrade_host,
path = node.httpupgrade_path or "/",
- headers = {
- ["User-Agent"] = node.httpupgrade_user_agent or nil
- }
+ headers = node.httpupgrade_user_agent and {
+ ["User-Agent"] = node.httpupgrade_user_agent
+ } or nil
}
end
diff --git a/small/luci-app-passwall/luasrc/passwall/util_xray.lua b/small/luci-app-passwall/luasrc/passwall/util_xray.lua
index 77be6be021..7b7be7cee9 100644
--- a/small/luci-app-passwall/luasrc/passwall/util_xray.lua
+++ b/small/luci-app-passwall/luasrc/passwall/util_xray.lua
@@ -178,10 +178,10 @@ function gen_outbound(flag, node, tag, proxy_table)
end
return r
end)() or {"/"},
- headers = {
- Host = node.tcp_guise_http_host or {},
+ headers = (node.tcp_guise_http_host or node.tcp_guise_http_user_agent) and {
+ Host = node.tcp_guise_http_host,
["User-Agent"] = node.tcp_guise_http_user_agent and {node.tcp_guise_http_user_agent} or nil
- }
+ } or nil
} or nil
}
} or nil,
@@ -201,10 +201,10 @@ function gen_outbound(flag, node, tag, proxy_table)
} or nil,
wsSettings = (node.transport == "ws") and {
path = node.ws_path or "/",
- headers = {
- Host = node.ws_host or nil,
- ["User-Agent"] = node.ws_user_agent or nil
- },
+ headers = (node.ws_host or node.ws_user_agent) and {
+ Host = node.ws_host,
+ ["User-Agent"] = node.ws_user_agent
+ } or nil,
maxEarlyData = tonumber(node.ws_maxEarlyData) or nil,
earlyDataHeaderName = (node.ws_earlyDataHeaderName) and node.ws_earlyDataHeaderName or nil,
heartbeatPeriod = tonumber(node.ws_heartbeatPeriod) or nil
@@ -220,9 +220,9 @@ function gen_outbound(flag, node, tag, proxy_table)
httpupgradeSettings = (node.transport == "httpupgrade") and {
path = node.httpupgrade_path or "/",
host = node.httpupgrade_host,
- headers = {
- ["User-Agent"] = node.httpupgrade_user_agent or nil
- }
+ headers = node.httpupgrade_user_agent and {
+ ["User-Agent"] = node.httpupgrade_user_agent
+ } or nil
} or nil,
xhttpSettings = (node.transport == "xhttp") and {
mode = node.xhttp_mode or "auto",
diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fr.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fr.resx
index e17f56b9b9..a669fabab6 100644
--- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fr.resx
+++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fr.resx
@@ -1636,9 +1636,9 @@ Si un certificat auto-signé est utilisé ou si le système contient une CA non
Afficher dans le Dock de macOS (redém. requis)
- Configuration Item 2, Select and add from self-built
+ Élément de config 2 : choisir et ajouter depuis self-hosted
- ALPN must contain 'http/1.1' when using WebSocket with TLS.
+ Avec WebSocket et TLS, l’ALPN doit inclure ‘http/1.1’.
-
\ No newline at end of file
+
diff --git a/xray-core/app/dns/fakedns/fake.go b/xray-core/app/dns/fakedns/fake.go
index 20e4bffa60..33bf63ccc4 100644
--- a/xray-core/app/dns/fakedns/fake.go
+++ b/xray-core/app/dns/fakedns/fake.go
@@ -4,7 +4,6 @@ import (
"context"
"math"
"math/big"
- gonet "net"
"sync"
"time"
@@ -17,7 +16,7 @@ import (
type Holder struct {
domainToIP cache.Lru
- ipRange *gonet.IPNet
+ ipRange *net.IPNet
mu *sync.Mutex
config *FakeDnsPool
@@ -79,10 +78,10 @@ func (fkdns *Holder) initializeFromConfig() error {
}
func (fkdns *Holder) initialize(ipPoolCidr string, lruSize int) error {
- var ipRange *gonet.IPNet
+ var ipRange *net.IPNet
var err error
- if _, ipRange, err = gonet.ParseCIDR(ipPoolCidr); err != nil {
+ if _, ipRange, err = net.ParseCIDR(ipPoolCidr); err != nil {
return errors.New("Unable to parse CIDR for Fake DNS IP assignment").Base(err).AtError()
}
diff --git a/xray-core/app/dns/fakedns/fakedns_test.go b/xray-core/app/dns/fakedns/fakedns_test.go
index 76ccbca67b..f9a8449c43 100644
--- a/xray-core/app/dns/fakedns/fakedns_test.go
+++ b/xray-core/app/dns/fakedns/fakedns_test.go
@@ -1,7 +1,6 @@
package fakedns
import (
- gonet "net"
"strconv"
"testing"
@@ -155,7 +154,7 @@ func TestFakeDNSMulti(t *testing.T) {
assert.True(t, inPool)
})
t.Run("ipv6", func(t *testing.T) {
- ip, err := gonet.ResolveIPAddr("ip", "fddd:c5b4:ff5f:f4f0::5")
+ ip, err := net.ResolveIPAddr("ip", "fddd:c5b4:ff5f:f4f0::5")
assert.Nil(t, err)
inPool := fakeMulti.IsIPInIPPool(net.IPAddress(ip.IP))
assert.True(t, inPool)
@@ -165,7 +164,7 @@ func TestFakeDNSMulti(t *testing.T) {
assert.False(t, inPool)
})
t.Run("ipv6_inverse", func(t *testing.T) {
- ip, err := gonet.ResolveIPAddr("ip", "fcdd:c5b4:ff5f:f4f0::5")
+ ip, err := net.ResolveIPAddr("ip", "fcdd:c5b4:ff5f:f4f0::5")
assert.Nil(t, err)
inPool := fakeMulti.IsIPInIPPool(net.IPAddress(ip.IP))
assert.False(t, inPool)
diff --git a/xray-core/app/proxyman/inbound/worker.go b/xray-core/app/proxyman/inbound/worker.go
index 42b5c3e9b2..ef454d2119 100644
--- a/xray-core/app/proxyman/inbound/worker.go
+++ b/xray-core/app/proxyman/inbound/worker.go
@@ -2,7 +2,6 @@ package inbound
import (
"context"
- gonet "net"
"sync"
"sync/atomic"
"time"
@@ -565,12 +564,12 @@ func (w *dsWorker) Close() error {
}
func IsLocal(ip net.IP) bool {
- addrs, err := gonet.InterfaceAddrs()
+ addrs, err := net.InterfaceAddrs()
if err != nil {
return false
}
for _, addr := range addrs {
- if ipnet, ok := addr.(*gonet.IPNet); ok {
+ if ipnet, ok := addr.(*net.IPNet); ok {
if ipnet.IP.Equal(ip) {
return true
}
diff --git a/xray-core/app/proxyman/outbound/handler.go b/xray-core/app/proxyman/outbound/handler.go
index eaa1b0b2f2..62902c60dc 100644
--- a/xray-core/app/proxyman/outbound/handler.go
+++ b/xray-core/app/proxyman/outbound/handler.go
@@ -6,7 +6,6 @@ import (
goerrors "errors"
"io"
"math/big"
- gonet "net"
"os"
"github.com/xtls/xray-core/common/dice"
@@ -398,7 +397,7 @@ func (h *Handler) ProxySettings() *serial.TypedMessage {
func ParseRandomIP(addr net.Address, prefix string) net.Address {
- _, ipnet, _ := gonet.ParseCIDR(addr.IP().String() + "/" + prefix)
+ _, ipnet, _ := net.ParseCIDR(addr.IP().String() + "/" + prefix)
ones, bits := ipnet.Mask.Size()
subnetSize := new(big.Int).Lsh(big.NewInt(1), uint(bits-ones))
@@ -412,5 +411,5 @@ func ParseRandomIP(addr net.Address, prefix string) net.Address {
padded := make([]byte, len(ipnet.IP))
copy(padded[len(padded)-len(rndBytes):], rndBytes)
- return net.ParseAddress(gonet.IP(padded).String())
+ return net.ParseAddress(net.IP(padded).String())
}
diff --git a/xray-core/common/net/system.go b/xray-core/common/net/system.go
index 7e1c4b01a3..136da0c18b 100644
--- a/xray-core/common/net/system.go
+++ b/xray-core/common/net/system.go
@@ -12,6 +12,8 @@ var (
type ListenConfig = net.ListenConfig
+type KeepAliveConfig = net.KeepAliveConfig
+
var (
Listen = net.Listen
ListenTCP = net.ListenTCP
@@ -26,6 +28,12 @@ var FileConn = net.FileConn
// ParseIP is an alias of net.ParseIP
var ParseIP = net.ParseIP
+var ParseCIDR = net.ParseCIDR
+
+var ResolveIPAddr = net.ResolveIPAddr
+
+var InterfaceByName = net.InterfaceByName
+
var SplitHostPort = net.SplitHostPort
var CIDRMask = net.CIDRMask
@@ -51,6 +59,8 @@ type (
UnixConn = net.UnixConn
)
+type IPAddr = net.IPAddr
+
// IP is an alias for net.IP.
type (
IP = net.IP
@@ -82,3 +92,11 @@ var (
)
type Resolver = net.Resolver
+
+var DefaultResolver = net.DefaultResolver
+
+var JoinHostPort = net.JoinHostPort
+
+var InterfaceAddrs = net.InterfaceAddrs
+
+var Interfaces = net.Interfaces
diff --git a/xray-core/go.mod b/xray-core/go.mod
index 69816eb415..1014ca7485 100644
--- a/xray-core/go.mod
+++ b/xray-core/go.mod
@@ -21,10 +21,10 @@ require (
github.com/vishvananda/netlink v1.3.1
github.com/xtls/reality v0.0.0-20251014195629-e4eec4520535
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba
- golang.org/x/crypto v0.44.0
- golang.org/x/net v0.47.0
- golang.org/x/sync v0.18.0
- golang.org/x/sys v0.38.0
+ golang.org/x/crypto v0.46.0
+ golang.org/x/net v0.48.0
+ golang.org/x/sync v0.19.0
+ golang.org/x/sys v0.39.0
golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173
google.golang.org/grpc v1.77.0
google.golang.org/protobuf v1.36.10
@@ -46,10 +46,10 @@ require (
github.com/quic-go/qpack v0.6.0 // indirect
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect
github.com/vishvananda/netns v0.0.5 // indirect
- golang.org/x/mod v0.29.0 // indirect
- golang.org/x/text v0.31.0 // indirect
+ golang.org/x/mod v0.30.0 // indirect
+ golang.org/x/text v0.32.0 // indirect
golang.org/x/time v0.12.0 // indirect
- golang.org/x/tools v0.38.0 // indirect
+ golang.org/x/tools v0.39.0 // indirect
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
diff --git a/xray-core/go.sum b/xray-core/go.sum
index 62af764362..4938d05146 100644
--- a/xray-core/go.sum
+++ b/xray-core/go.sum
@@ -95,20 +95,20 @@ go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBs
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU=
-golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
+golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
-golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
-golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk=
+golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
-golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
+golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
+golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
-golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
+golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -116,21 +116,21 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
-golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
+golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
-golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
+golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
+golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
-golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
-golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
+golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ=
+golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
diff --git a/xray-core/proxy/wireguard/bind.go b/xray-core/proxy/wireguard/bind.go
index 07ec85ef8a..515afaa593 100644
--- a/xray-core/proxy/wireguard/bind.go
+++ b/xray-core/proxy/wireguard/bind.go
@@ -3,14 +3,13 @@ package wireguard
import (
"context"
"errors"
- "net"
"net/netip"
"strconv"
"sync"
"golang.zx2c4.com/wireguard/conn"
- xnet "github.com/xtls/xray-core/common/net"
+ "github.com/xtls/xray-core/common/net"
"github.com/xtls/xray-core/features/dns"
"github.com/xtls/xray-core/transport/internet"
)
@@ -51,21 +50,21 @@ func (n *netBind) ParseEndpoint(s string) (conn.Endpoint, error) {
return nil, err
}
- addr := xnet.ParseAddress(ipStr)
- if addr.Family() == xnet.AddressFamilyDomain {
+ addr := net.ParseAddress(ipStr)
+ if addr.Family() == net.AddressFamilyDomain {
ips, _, err := n.dns.LookupIP(addr.Domain(), n.dnsOption)
if err != nil {
return nil, err
} else if len(ips) == 0 {
return nil, dns.ErrEmptyResponse
}
- addr = xnet.IPAddress(ips[0])
+ addr = net.IPAddress(ips[0])
}
- dst := xnet.Destination{
+ dst := net.Destination{
Address: addr,
- Port: xnet.Port(portNum),
- Network: xnet.Network_UDP,
+ Port: net.Port(portNum),
+ Network: net.Network_UDP,
}
return &netEndpoint{
@@ -214,7 +213,7 @@ func (bind *netBindServer) Send(buff [][]byte, endpoint conn.Endpoint) error {
}
type netEndpoint struct {
- dst xnet.Destination
+ dst net.Destination
conn net.Conn
}
@@ -247,7 +246,7 @@ func (e netEndpoint) SrcToString() string {
return ""
}
-func toNetIpAddr(addr xnet.Address) netip.Addr {
+func toNetIpAddr(addr net.Address) netip.Addr {
if addr.Family().IsIPv4() {
ip := addr.IP()
return netip.AddrFrom4([4]byte{ip[0], ip[1], ip[2], ip[3]})
diff --git a/xray-core/proxy/wireguard/tun.go b/xray-core/proxy/wireguard/tun.go
index 74a3b71d87..bd20fab212 100644
--- a/xray-core/proxy/wireguard/tun.go
+++ b/xray-core/proxy/wireguard/tun.go
@@ -3,7 +3,6 @@ package wireguard
import (
"context"
"fmt"
- "net"
"net/netip"
"runtime"
"strconv"
@@ -13,7 +12,7 @@ import (
"github.com/xtls/xray-core/common/errors"
"github.com/xtls/xray-core/common/log"
- xnet "github.com/xtls/xray-core/common/net"
+ "github.com/xtls/xray-core/common/net"
"github.com/xtls/xray-core/proxy/wireguard/gvisortun"
"gvisor.dev/gvisor/pkg/tcpip"
"gvisor.dev/gvisor/pkg/tcpip/adapters/gonet"
@@ -28,7 +27,7 @@ import (
type tunCreator func(localAddresses []netip.Addr, mtu int, handler promiscuousModeHandler) (Tunnel, error)
-type promiscuousModeHandler func(dest xnet.Destination, conn net.Conn)
+type promiscuousModeHandler func(dest net.Destination, conn net.Conn)
type Tunnel interface {
BuildDevice(ipc string, bind conn.Bind) error
@@ -169,7 +168,7 @@ func createGVisorTun(localAddresses []netip.Addr, mtu int, handler promiscuousMo
ep.SocketOptions().SetKeepAlive(true)
// local address is actually destination
- handler(xnet.TCPDestination(xnet.IPAddress(id.LocalAddress.AsSlice()), xnet.Port(id.LocalPort)), gonet.NewTCPConn(&wq, ep))
+ handler(net.TCPDestination(net.IPAddress(id.LocalAddress.AsSlice()), net.Port(id.LocalPort)), gonet.NewTCPConn(&wq, ep))
}(r)
})
stack.SetTransportProtocolHandler(tcp.ProtocolNumber, tcpForwarder.HandlePacket)
@@ -194,7 +193,7 @@ func createGVisorTun(localAddresses []netip.Addr, mtu int, handler promiscuousMo
Timeout: 15 * time.Second,
})
- handler(xnet.UDPDestination(xnet.IPAddress(id.LocalAddress.AsSlice()), xnet.Port(id.LocalPort)), gonet.NewUDPConn(&wq, ep))
+ handler(net.UDPDestination(net.IPAddress(id.LocalAddress.AsSlice()), net.Port(id.LocalPort)), gonet.NewUDPConn(&wq, ep))
}(r)
})
stack.SetTransportProtocolHandler(udp.ProtocolNumber, udpForwarder.HandlePacket)
diff --git a/xray-core/transport/internet/dialer.go b/xray-core/transport/internet/dialer.go
index e0da30c2ad..9342f26f5f 100644
--- a/xray-core/transport/internet/dialer.go
+++ b/xray-core/transport/internet/dialer.go
@@ -3,7 +3,6 @@ package internet
import (
"context"
"fmt"
- gonet "net"
"strings"
"github.com/xtls/xray-core/common"
@@ -183,7 +182,7 @@ func checkAddressPortStrategy(ctx context.Context, dest net.Destination, sockopt
if len(parts) != 3 {
return nil, errors.New("invalid address format", dest.Address.String())
}
- _, srvRecords, err := gonet.DefaultResolver.LookupSRV(context.Background(), parts[0][1:], parts[1][1:], parts[2])
+ _, srvRecords, err := net.DefaultResolver.LookupSRV(context.Background(), parts[0][1:], parts[1][1:], parts[2])
if err != nil {
return nil, errors.New("failed to lookup SRV record").Base(err)
}
@@ -198,7 +197,7 @@ func checkAddressPortStrategy(ctx context.Context, dest net.Destination, sockopt
}
if OverrideBy == "txt" {
errors.LogDebug(ctx, "query TXT record for "+dest.Address.String())
- txtRecords, err := gonet.DefaultResolver.LookupTXT(ctx, dest.Address.String())
+ txtRecords, err := net.DefaultResolver.LookupTXT(ctx, dest.Address.String())
if err != nil {
errors.LogError(ctx, "failed to lookup SRV record: "+err.Error())
return nil, errors.New("failed to lookup SRV record").Base(err)
diff --git a/xray-core/transport/internet/grpc/dial.go b/xray-core/transport/internet/grpc/dial.go
index b8740daea3..454b328088 100644
--- a/xray-core/transport/internet/grpc/dial.go
+++ b/xray-core/transport/internet/grpc/dial.go
@@ -2,7 +2,6 @@ package grpc
import (
"context"
- gonet "net"
"sync"
"time"
@@ -99,7 +98,7 @@ func getGrpcClient(ctx context.Context, dest net.Destination, streamSettings *in
},
MinConnectTimeout: 5 * time.Second,
}),
- grpc.WithContextDialer(func(gctx context.Context, s string) (gonet.Conn, error) {
+ grpc.WithContextDialer(func(gctx context.Context, s string) (net.Conn, error) {
select {
case <-gctx.Done():
return nil, gctx.Err()
@@ -180,7 +179,7 @@ func getGrpcClient(ctx context.Context, dest net.Destination, streamSettings *in
}
conn, err := grpc.Dial(
- gonet.JoinHostPort(grpcDestHost, dest.Port.String()),
+ net.JoinHostPort(grpcDestHost, dest.Port.String()),
dialOptions...,
)
globalDialerMap[dialerConf{dest, streamSettings}] = conn
diff --git a/xray-core/transport/internet/grpc/encoding/hunkconn.go b/xray-core/transport/internet/grpc/encoding/hunkconn.go
index f295f33a6b..f1155de8a3 100644
--- a/xray-core/transport/internet/grpc/encoding/hunkconn.go
+++ b/xray-core/transport/internet/grpc/encoding/hunkconn.go
@@ -3,11 +3,10 @@ package encoding
import (
"context"
"io"
- "net"
"github.com/xtls/xray-core/common/buf"
"github.com/xtls/xray-core/common/errors"
- xnet "github.com/xtls/xray-core/common/net"
+ "github.com/xtls/xray-core/common/net"
"github.com/xtls/xray-core/common/net/cnc"
"github.com/xtls/xray-core/common/signal/done"
"google.golang.org/grpc/metadata"
@@ -55,7 +54,7 @@ func NewHunkConn(hc HunkConn, cancel context.CancelFunc) net.Conn {
if ok {
header := md.Get("x-real-ip")
if len(header) > 0 {
- realip := xnet.ParseAddress(header[0])
+ realip := net.ParseAddress(header[0])
if realip.Family().IsIP() {
rAddr = &net.TCPAddr{
IP: realip.IP(),
diff --git a/xray-core/transport/internet/sockopt_darwin.go b/xray-core/transport/internet/sockopt_darwin.go
index 2c8272149a..bcae2f3fd2 100644
--- a/xray-core/transport/internet/sockopt_darwin.go
+++ b/xray-core/transport/internet/sockopt_darwin.go
@@ -2,7 +2,6 @@ package internet
import (
"context"
- gonet "net"
"os"
"runtime"
"strconv"
@@ -135,7 +134,7 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf
}
if config.Interface != "" {
- iface, err := gonet.InterfaceByName(config.Interface)
+ iface, err := net.InterfaceByName(config.Interface)
if err != nil {
return errors.New("failed to get interface ", config.Interface).Base(err)
@@ -226,7 +225,7 @@ func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig)
}
if config.Interface != "" {
- iface, err := gonet.InterfaceByName(config.Interface)
+ iface, err := net.InterfaceByName(config.Interface)
if err != nil {
return errors.New("failed to get interface ", config.Interface).Base(err)
diff --git a/xray-core/transport/internet/splithttp/browser_client.go b/xray-core/transport/internet/splithttp/browser_client.go
index e4317aa207..6e0a5302a5 100644
--- a/xray-core/transport/internet/splithttp/browser_client.go
+++ b/xray-core/transport/internet/splithttp/browser_client.go
@@ -3,9 +3,9 @@ package splithttp
import (
"context"
"io"
- gonet "net"
"github.com/xtls/xray-core/common/errors"
+ "github.com/xtls/xray-core/common/net"
"github.com/xtls/xray-core/transport/internet/browser_dialer"
"github.com/xtls/xray-core/transport/internet/websocket"
)
@@ -19,13 +19,13 @@ func (c *BrowserDialerClient) IsClosed() bool {
panic("not implemented yet")
}
-func (c *BrowserDialerClient) OpenStream(ctx context.Context, url string, body io.Reader, uploadOnly bool) (io.ReadCloser, gonet.Addr, gonet.Addr, error) {
+func (c *BrowserDialerClient) OpenStream(ctx context.Context, url string, body io.Reader, uploadOnly bool) (io.ReadCloser, net.Addr, net.Addr, error) {
if body != nil {
return nil, nil, nil, errors.New("bidirectional streaming for browser dialer not implemented yet")
}
conn, err := browser_dialer.DialGet(url, c.transportConfig.GetRequestHeader(url))
- dummyAddr := &gonet.IPAddr{}
+ dummyAddr := &net.IPAddr{}
if err != nil {
return nil, dummyAddr, dummyAddr, err
}
diff --git a/xray-core/transport/internet/splithttp/client.go b/xray-core/transport/internet/splithttp/client.go
index 0f80983809..3eeab6eb43 100644
--- a/xray-core/transport/internet/splithttp/client.go
+++ b/xray-core/transport/internet/splithttp/client.go
@@ -5,7 +5,6 @@ import (
"context"
"fmt"
"io"
- gonet "net"
"net/http"
"net/http/httptrace"
"sync"
@@ -42,7 +41,7 @@ func (c *DefaultDialerClient) IsClosed() bool {
return c.closed
}
-func (c *DefaultDialerClient) OpenStream(ctx context.Context, url string, body io.Reader, uploadOnly bool) (wrc io.ReadCloser, remoteAddr, localAddr gonet.Addr, err error) {
+func (c *DefaultDialerClient) OpenStream(ctx context.Context, url string, body io.Reader, uploadOnly bool) (wrc io.ReadCloser, remoteAddr, localAddr net.Addr, err error) {
// this is done when the TCP/UDP connection to the server was established,
// and we can unblock the Dial function and print correct net addresses in
// logs
diff --git a/xray-core/transport/internet/system_dialer.go b/xray-core/transport/internet/system_dialer.go
index ceb6ebc9e5..27f3c9a927 100644
--- a/xray-core/transport/internet/system_dialer.go
+++ b/xray-core/transport/internet/system_dialer.go
@@ -3,7 +3,6 @@ package internet
import (
"context"
"math/rand"
- gonet "net"
"syscall"
"time"
@@ -89,7 +88,7 @@ func (d *DefaultSystemDialer) Dial(ctx context.Context, src net.Address, dest ne
}, nil
}
// Chrome defaults
- keepAliveConfig := gonet.KeepAliveConfig{
+ keepAliveConfig := net.KeepAliveConfig{
Enable: true,
Idle: 45 * time.Second,
Interval: 45 * time.Second,
diff --git a/xray-core/transport/internet/system_listener.go b/xray-core/transport/internet/system_listener.go
index 0cb6cd06b3..2ac28eda9c 100644
--- a/xray-core/transport/internet/system_listener.go
+++ b/xray-core/transport/internet/system_listener.go
@@ -2,7 +2,6 @@ package internet
import (
"context"
- gonet "net"
"os"
"runtime"
"strconv"
@@ -95,7 +94,7 @@ func (dl *DefaultListener) Listen(ctx context.Context, addr net.Addr, sockopt *S
if sockopt.TcpKeepAliveIdle*sockopt.TcpKeepAliveInterval < 0 {
return nil, errors.New("invalid TcpKeepAliveIdle or TcpKeepAliveInterval value: ", sockopt.TcpKeepAliveIdle, " ", sockopt.TcpKeepAliveInterval)
}
- lc.KeepAliveConfig = gonet.KeepAliveConfig{
+ lc.KeepAliveConfig = net.KeepAliveConfig{
Enable: false,
Idle: -1,
Interval: -1,
diff --git a/xray-core/transport/internet/websocket/dialer.go b/xray-core/transport/internet/websocket/dialer.go
index 60330fd7f4..5e41389304 100644
--- a/xray-core/transport/internet/websocket/dialer.go
+++ b/xray-core/transport/internet/websocket/dialer.go
@@ -5,7 +5,6 @@ import (
_ "embed"
"encoding/base64"
"io"
- gonet "net"
"time"
"github.com/gorilla/websocket"
@@ -64,7 +63,7 @@ func dialWebSocket(ctx context.Context, dest net.Destination, streamSettings *in
tlsConfig := tConfig.GetTLSConfig(tls.WithDestination(dest), tls.WithNextProto("http/1.1"))
dialer.TLSClientConfig = tlsConfig
if fingerprint := tls.GetFingerprint(tConfig.Fingerprint); fingerprint != nil {
- dialer.NetDialTLSContext = func(_ context.Context, _, addr string) (gonet.Conn, error) {
+ dialer.NetDialTLSContext = func(_ context.Context, _, addr string) (net.Conn, error) {
// Like the NetDial in the dialer
pconn, err := internet.DialSystem(ctx, dest, streamSettings.SocketSettings)
if err != nil {
diff --git a/yt-dlp/yt_dlp/extractor/archiveorg.py b/yt-dlp/yt_dlp/extractor/archiveorg.py
index 02c39beb68..7bf5199bc9 100644
--- a/yt-dlp/yt_dlp/extractor/archiveorg.py
+++ b/yt-dlp/yt_dlp/extractor/archiveorg.py
@@ -279,7 +279,7 @@ class ArchiveOrgIE(InfoExtractor):
'url': 'https://archive.org/' + track['file'].lstrip('/'),
}
- metadata = self._download_json('http://archive.org/metadata/' + identifier, identifier)
+ metadata = self._download_json(f'https://archive.org/metadata/{identifier}', identifier)
m = metadata['metadata']
identifier = m['identifier']