mirror of
https://github.com/bolucat/Archive.git
synced 2026-04-22 16:07:49 +08:00
Update On Thu Jul 24 20:41:17 CEST 2025
This commit is contained in:
@@ -1068,3 +1068,4 @@ Update On Sun Jul 20 20:38:16 CEST 2025
|
||||
Update On Mon Jul 21 20:42:18 CEST 2025
|
||||
Update On Tue Jul 22 20:42:19 CEST 2025
|
||||
Update On Wed Jul 23 20:41:36 CEST 2025
|
||||
Update On Thu Jul 24 20:41:09 CEST 2025
|
||||
|
||||
+7
-7
@@ -29,7 +29,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
jobs:
|
||||
- { goos: darwin, goarch: amd64, goamd64: v1, output: amd64-compatible }
|
||||
- { goos: darwin, goarch: amd64, goamd64: v1, output: amd64-compatible } # old style file name will be removed in next released
|
||||
- { goos: darwin, goarch: amd64, goamd64: v3, output: amd64 }
|
||||
- { goos: darwin, goarch: amd64, goamd64: v1, output: amd64-v1 }
|
||||
- { goos: darwin, goarch: amd64, goamd64: v2, output: amd64-v2 }
|
||||
@@ -38,10 +38,10 @@ jobs:
|
||||
|
||||
- { goos: linux, goarch: '386', go386: sse2, output: '386', debian: i386, rpm: i386}
|
||||
- { goos: linux, goarch: '386', go386: softfloat, output: '386-softfloat' }
|
||||
- { goos: linux, goarch: amd64, goamd64: v1, output: amd64-compatible}
|
||||
- { goos: linux, goarch: amd64, goamd64: v3, output: amd64}
|
||||
- { goos: linux, goarch: amd64, goamd64: v1, output: amd64-v1, test: test }
|
||||
- { goos: linux, goarch: amd64, goamd64: v2, output: amd64-v2 }
|
||||
- { goos: linux, goarch: amd64, goamd64: v1, output: amd64-compatible} # old style file name will be removed in next released
|
||||
- { goos: linux, goarch: amd64, goamd64: v3, output: amd64, debian: amd64, rpm: x86_64, pacman: x86_64}
|
||||
- { goos: linux, goarch: amd64, goamd64: v1, output: amd64-v1, debian: amd64, rpm: x86_64, pacman: x86_64, test: test }
|
||||
- { goos: linux, goarch: amd64, goamd64: v2, output: amd64-v2, debian: amd64, rpm: x86_64, pacman: x86_64}
|
||||
- { goos: linux, goarch: amd64, goamd64: v3, output: amd64-v3, debian: amd64, rpm: x86_64, pacman: x86_64}
|
||||
- { goos: linux, goarch: arm64, output: arm64, debian: arm64, rpm: aarch64, pacman: aarch64}
|
||||
- { goos: linux, goarch: arm, goarm: '5', output: armv5 }
|
||||
@@ -60,7 +60,7 @@ jobs:
|
||||
- { goos: linux, goarch: ppc64le, output: ppc64le, debian: ppc64el, rpm: ppc64le }
|
||||
|
||||
- { goos: windows, goarch: '386', output: '386' }
|
||||
- { goos: windows, goarch: amd64, goamd64: v1, output: amd64-compatible }
|
||||
- { goos: windows, goarch: amd64, goamd64: v1, output: amd64-compatible } # old style file name will be removed in next released
|
||||
- { goos: windows, goarch: amd64, goamd64: v3, output: amd64 }
|
||||
- { goos: windows, goarch: amd64, goamd64: v1, output: amd64-v1 }
|
||||
- { goos: windows, goarch: amd64, goamd64: v2, output: amd64-v2 }
|
||||
@@ -68,7 +68,7 @@ jobs:
|
||||
- { goos: windows, goarch: arm64, output: arm64 }
|
||||
|
||||
- { goos: freebsd, goarch: '386', output: '386' }
|
||||
- { goos: freebsd, goarch: amd64, goamd64: v1, output: amd64-compatible }
|
||||
- { goos: freebsd, goarch: amd64, goamd64: v1, output: amd64-compatible } # old style file name will be removed in next released
|
||||
- { goos: freebsd, goarch: amd64, goamd64: v3, output: amd64 }
|
||||
- { goos: freebsd, goarch: amd64, goamd64: v1, output: amd64-v1 }
|
||||
- { goos: freebsd, goarch: amd64, goamd64: v2, output: amd64-v2 }
|
||||
|
||||
@@ -33,49 +33,43 @@ const (
|
||||
MaxPackageFileSize = 32 * 1024 * 1024
|
||||
)
|
||||
|
||||
var mihomoBaseName string
|
||||
// CoreUpdater is the mihomo updater.
|
||||
// modify from https://github.com/AdguardTeam/AdGuardHome/blob/595484e0b3fb4c457f9bb727a6b94faa78a66c5f/internal/updater/updater.go
|
||||
type CoreUpdater struct {
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
func init() {
|
||||
var DefaultCoreUpdater = CoreUpdater{}
|
||||
|
||||
func (u *CoreUpdater) CoreBaseName() string {
|
||||
switch runtime.GOARCH {
|
||||
case "arm":
|
||||
// mihomo-linux-armv5
|
||||
mihomoBaseName = fmt.Sprintf("mihomo-%s-%sv%s", runtime.GOOS, runtime.GOARCH, features.GOARM)
|
||||
return fmt.Sprintf("mihomo-%s-%sv%s", runtime.GOOS, runtime.GOARCH, features.GOARM)
|
||||
case "arm64":
|
||||
if runtime.GOOS == "android" {
|
||||
// mihomo-android-arm64-v8
|
||||
mihomoBaseName = fmt.Sprintf("mihomo-%s-%s-v8", runtime.GOOS, runtime.GOARCH)
|
||||
return fmt.Sprintf("mihomo-%s-%s-v8", runtime.GOOS, runtime.GOARCH)
|
||||
} else {
|
||||
// mihomo-linux-arm64
|
||||
mihomoBaseName = fmt.Sprintf("mihomo-%s-%s", runtime.GOOS, runtime.GOARCH)
|
||||
return fmt.Sprintf("mihomo-%s-%s", runtime.GOOS, runtime.GOARCH)
|
||||
}
|
||||
case "mips", "mipsle":
|
||||
// mihomo-linux-mips-hardfloat
|
||||
mihomoBaseName = fmt.Sprintf("mihomo-%s-%s-%s", runtime.GOOS, runtime.GOARCH, features.GOMIPS)
|
||||
return fmt.Sprintf("mihomo-%s-%s-%s", runtime.GOOS, runtime.GOARCH, features.GOMIPS)
|
||||
case "amd64":
|
||||
// mihomo-linux-amd64-v1
|
||||
mihomoBaseName = fmt.Sprintf("mihomo-%s-%s-%s", runtime.GOOS, runtime.GOARCH, features.GOAMD64)
|
||||
return fmt.Sprintf("mihomo-%s-%s-%s", runtime.GOOS, runtime.GOARCH, features.GOAMD64)
|
||||
default:
|
||||
// mihomo-linux-386
|
||||
// mihomo-linux-mips64
|
||||
// mihomo-linux-riscv64
|
||||
// mihomo-linux-s390x
|
||||
mihomoBaseName = fmt.Sprintf("mihomo-%s-%s", runtime.GOOS, runtime.GOARCH)
|
||||
return fmt.Sprintf("mihomo-%s-%s", runtime.GOOS, runtime.GOARCH)
|
||||
}
|
||||
}
|
||||
|
||||
// CoreUpdater is the mihomo updater.
|
||||
// modify from https://github.com/AdguardTeam/AdGuardHome/blob/595484e0b3fb4c457f9bb727a6b94faa78a66c5f/internal/updater/updater.go
|
||||
var CoreUpdater = coreUpdater{}
|
||||
|
||||
func UpdateCore(execPath string) (err error) {
|
||||
return CoreUpdater.Update(execPath)
|
||||
}
|
||||
|
||||
type coreUpdater struct {
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
func (u *coreUpdater) Update(currentExePath string) (err error) {
|
||||
func (u *CoreUpdater) Update(currentExePath string) (err error) {
|
||||
u.mu.Lock()
|
||||
defer u.mu.Unlock()
|
||||
|
||||
@@ -110,6 +104,7 @@ func (u *coreUpdater) Update(currentExePath string) (err error) {
|
||||
}()
|
||||
|
||||
// ---- prepare ----
|
||||
mihomoBaseName := u.CoreBaseName()
|
||||
packageName := mihomoBaseName + "-" + latestVersion
|
||||
if runtime.GOOS == "windows" {
|
||||
packageName = packageName + ".zip"
|
||||
@@ -129,7 +124,7 @@ func (u *coreUpdater) Update(currentExePath string) (err error) {
|
||||
if runtime.GOOS == "windows" {
|
||||
updateExeName = updateExeName + ".exe"
|
||||
}
|
||||
log.Infoln("updateExeName: %s ", updateExeName)
|
||||
log.Infoln("updateExeName: %s", updateExeName)
|
||||
updateExePath := filepath.Join(updateDir, updateExeName)
|
||||
backupExePath := filepath.Join(backupDir, filepath.Base(currentExePath))
|
||||
|
||||
@@ -158,7 +153,7 @@ func (u *coreUpdater) Update(currentExePath string) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (u *coreUpdater) getLatestVersion(versionURL string) (version string, err error) {
|
||||
func (u *CoreUpdater) getLatestVersion(versionURL string) (version string, err error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
|
||||
defer cancel()
|
||||
resp, err := mihomoHttp.HttpRequest(ctx, versionURL, http.MethodGet, nil, nil)
|
||||
@@ -181,7 +176,7 @@ func (u *coreUpdater) getLatestVersion(versionURL string) (version string, err e
|
||||
}
|
||||
|
||||
// download package file and save it to disk
|
||||
func (u *coreUpdater) download(updateDir, packagePath, packageURL string) (err error) {
|
||||
func (u *CoreUpdater) download(updateDir, packagePath, packageURL string) (err error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*90)
|
||||
defer cancel()
|
||||
resp, err := mihomoHttp.HttpRequest(ctx, packageURL, http.MethodGet, nil, nil)
|
||||
@@ -218,7 +213,7 @@ func (u *coreUpdater) download(updateDir, packagePath, packageURL string) (err e
|
||||
}
|
||||
|
||||
// unpack extracts the files from the downloaded archive.
|
||||
func (u *coreUpdater) unpack(updateDir, packagePath string) error {
|
||||
func (u *CoreUpdater) unpack(updateDir, packagePath string) error {
|
||||
log.Infoln("updater: unpacking package")
|
||||
if strings.HasSuffix(packagePath, ".zip") {
|
||||
_, err := u.zipFileUnpack(packagePath, updateDir)
|
||||
@@ -240,7 +235,7 @@ func (u *coreUpdater) unpack(updateDir, packagePath string) error {
|
||||
}
|
||||
|
||||
// backup makes a backup of the current executable file
|
||||
func (u *coreUpdater) backup(currentExePath, backupExePath, backupDir string) (err error) {
|
||||
func (u *CoreUpdater) backup(currentExePath, backupExePath, backupDir string) (err error) {
|
||||
log.Infoln("updater: backing up current ExecFile:%s to %s", currentExePath, backupExePath)
|
||||
_ = os.Mkdir(backupDir, 0o755)
|
||||
|
||||
@@ -253,7 +248,7 @@ func (u *coreUpdater) backup(currentExePath, backupExePath, backupDir string) (e
|
||||
}
|
||||
|
||||
// replace moves the current executable with the updated one
|
||||
func (u *coreUpdater) replace(updateExePath, currentExePath string) error {
|
||||
func (u *CoreUpdater) replace(updateExePath, currentExePath string) error {
|
||||
var err error
|
||||
|
||||
log.Infoln("replacing: %s to %s", updateExePath, currentExePath)
|
||||
@@ -273,7 +268,7 @@ func (u *coreUpdater) replace(updateExePath, currentExePath string) error {
|
||||
}
|
||||
|
||||
// clean removes the temporary directory itself and all it's contents.
|
||||
func (u *coreUpdater) clean(updateDir string) {
|
||||
func (u *CoreUpdater) clean(updateDir string) {
|
||||
_ = os.RemoveAll(updateDir)
|
||||
}
|
||||
|
||||
@@ -281,7 +276,7 @@ func (u *coreUpdater) clean(updateDir string) {
|
||||
// Existing files are overwritten
|
||||
// All files are created inside outDir, subdirectories are not created
|
||||
// Return the output file name
|
||||
func (u *coreUpdater) gzFileUnpack(gzfile, outDir string) (string, error) {
|
||||
func (u *CoreUpdater) gzFileUnpack(gzfile, outDir string) (string, error) {
|
||||
f, err := os.Open(gzfile)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("os.Open(): %w", err)
|
||||
@@ -345,7 +340,7 @@ func (u *coreUpdater) gzFileUnpack(gzfile, outDir string) (string, error) {
|
||||
// Existing files are overwritten
|
||||
// All files are created inside 'outDir', subdirectories are not created
|
||||
// Return the output file name
|
||||
func (u *coreUpdater) zipFileUnpack(zipfile, outDir string) (string, error) {
|
||||
func (u *CoreUpdater) zipFileUnpack(zipfile, outDir string) (string, error) {
|
||||
zrc, err := zip.OpenReader(zipfile)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("zip.OpenReader(): %w", err)
|
||||
@@ -404,7 +399,7 @@ func (u *coreUpdater) zipFileUnpack(zipfile, outDir string) (string, error) {
|
||||
}
|
||||
|
||||
// Copy file on disk
|
||||
func (u *coreUpdater) copyFile(src, dst string) error {
|
||||
func (u *CoreUpdater) copyFile(src, dst string) error {
|
||||
d, e := os.ReadFile(src)
|
||||
if e != nil {
|
||||
return e
|
||||
|
||||
@@ -5,6 +5,6 @@ import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestBaseName(t *testing.T) {
|
||||
fmt.Println("mihomoBaseName =", mihomoBaseName)
|
||||
func TestCoreBaseName(t *testing.T) {
|
||||
fmt.Println("Core base name =", DefaultCoreUpdater.CoreBaseName())
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ func upgradeCore(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
err = updater.UpdateCore(execPath)
|
||||
err = updater.DefaultCoreUpdater.Update(execPath)
|
||||
if err != nil {
|
||||
log.Warnln("%s", err)
|
||||
render.Status(r, http.StatusInternalServerError)
|
||||
|
||||
@@ -55,12 +55,12 @@
|
||||
"@csstools/normalize.css": "12.1.1",
|
||||
"@emotion/babel-plugin": "11.13.5",
|
||||
"@emotion/react": "11.14.0",
|
||||
"@iconify/json": "2.2.360",
|
||||
"@iconify/json": "2.2.362",
|
||||
"@monaco-editor/react": "4.7.0",
|
||||
"@tanstack/react-query": "5.83.0",
|
||||
"@tanstack/react-router": "1.129.2",
|
||||
"@tanstack/react-router-devtools": "1.129.2",
|
||||
"@tanstack/router-plugin": "1.129.2",
|
||||
"@tanstack/react-router": "1.129.8",
|
||||
"@tanstack/react-router-devtools": "1.129.8",
|
||||
"@tanstack/router-plugin": "1.129.8",
|
||||
"@tauri-apps/plugin-clipboard-manager": "2.3.0",
|
||||
"@tauri-apps/plugin-dialog": "2.3.0",
|
||||
"@tauri-apps/plugin-fs": "2.4.0",
|
||||
@@ -87,7 +87,7 @@
|
||||
"unplugin-auto-import": "19.3.0",
|
||||
"unplugin-icons": "22.1.0",
|
||||
"validator": "13.15.15",
|
||||
"vite": "7.0.5",
|
||||
"vite": "7.0.6",
|
||||
"vite-plugin-html": "3.2.2",
|
||||
"vite-plugin-sass-dts": "1.3.31",
|
||||
"vite-plugin-svgr": "4.3.0",
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
"react-i18next": "15.6.1",
|
||||
"react-use": "17.6.0",
|
||||
"tailwindcss": "4.1.11",
|
||||
"vite": "7.0.5",
|
||||
"vite": "7.0.6",
|
||||
"vite-tsconfig-paths": "5.1.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"manifest_version": 1,
|
||||
"latest": {
|
||||
"mihomo": "v1.19.11",
|
||||
"mihomo_alpha": "alpha-63ad95e",
|
||||
"mihomo_alpha": "alpha-dfe6e05",
|
||||
"clash_rs": "v0.8.1",
|
||||
"clash_premium": "2023-09-05-gdcc8d87",
|
||||
"clash_rs_alpha": "0.8.1-alpha+sha.f6fecec"
|
||||
@@ -69,5 +69,5 @@
|
||||
"linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf"
|
||||
}
|
||||
},
|
||||
"updated_at": "2025-07-22T22:21:27.047Z"
|
||||
"updated_at": "2025-07-23T22:21:28.487Z"
|
||||
}
|
||||
|
||||
Generated
+106
-96
@@ -247,7 +247,7 @@ importers:
|
||||
version: 4.1.11
|
||||
'@tanstack/router-zod-adapter':
|
||||
specifier: 1.81.5
|
||||
version: 1.81.5(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(zod@4.0.5)
|
||||
version: 1.81.5(@tanstack/react-router@1.129.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(zod@4.0.5)
|
||||
'@tauri-apps/api':
|
||||
specifier: 2.6.0
|
||||
version: 2.6.0
|
||||
@@ -337,8 +337,8 @@ importers:
|
||||
specifier: 11.14.0
|
||||
version: 11.14.0(@types/react@19.1.8)(react@19.1.0)
|
||||
'@iconify/json':
|
||||
specifier: 2.2.360
|
||||
version: 2.2.360
|
||||
specifier: 2.2.362
|
||||
version: 2.2.362
|
||||
'@monaco-editor/react':
|
||||
specifier: 4.7.0
|
||||
version: 4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
@@ -346,14 +346,14 @@ importers:
|
||||
specifier: 5.83.0
|
||||
version: 5.83.0(react@19.1.0)
|
||||
'@tanstack/react-router':
|
||||
specifier: 1.129.2
|
||||
version: 1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
specifier: 1.129.8
|
||||
version: 1.129.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@tanstack/react-router-devtools':
|
||||
specifier: 1.129.2
|
||||
version: 1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)
|
||||
specifier: 1.129.8
|
||||
version: 1.129.8(@tanstack/react-router@1.129.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.8)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)
|
||||
'@tanstack/router-plugin':
|
||||
specifier: 1.129.2
|
||||
version: 1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
specifier: 1.129.8
|
||||
version: 1.129.8(@tanstack/react-router@1.129.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
'@tauri-apps/plugin-clipboard-manager':
|
||||
specifier: 2.3.0
|
||||
version: 2.3.0
|
||||
@@ -389,13 +389,13 @@ importers:
|
||||
version: 13.15.2
|
||||
'@vitejs/plugin-legacy':
|
||||
specifier: 7.1.0
|
||||
version: 7.1.0(terser@5.36.0)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
version: 7.1.0(terser@5.36.0)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
'@vitejs/plugin-react':
|
||||
specifier: 4.7.0
|
||||
version: 4.7.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
version: 4.7.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
'@vitejs/plugin-react-swc':
|
||||
specifier: 3.11.0
|
||||
version: 3.11.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
version: 3.11.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
change-case:
|
||||
specifier: 5.4.4
|
||||
version: 5.4.4
|
||||
@@ -433,20 +433,20 @@ importers:
|
||||
specifier: 13.15.15
|
||||
version: 13.15.15
|
||||
vite:
|
||||
specifier: 7.0.5
|
||||
version: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
specifier: 7.0.6
|
||||
version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite-plugin-html:
|
||||
specifier: 3.2.2
|
||||
version: 3.2.2(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
version: 3.2.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
vite-plugin-sass-dts:
|
||||
specifier: 1.3.31
|
||||
version: 1.3.31(postcss@8.5.6)(prettier@3.6.2)(sass-embedded@1.89.2)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
version: 1.3.31(postcss@8.5.6)(prettier@3.6.2)(sass-embedded@1.89.2)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
vite-plugin-svgr:
|
||||
specifier: 4.3.0
|
||||
version: 4.3.0(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
version: 4.3.0(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
vite-tsconfig-paths:
|
||||
specifier: 5.1.4
|
||||
version: 5.1.4(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
version: 5.1.4(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
zod:
|
||||
specifier: 4.0.5
|
||||
version: 4.0.5
|
||||
@@ -482,7 +482,7 @@ importers:
|
||||
version: 19.1.8
|
||||
'@vitejs/plugin-react':
|
||||
specifier: 4.7.0
|
||||
version: 4.7.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
version: 4.7.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
ahooks:
|
||||
specifier: 3.9.0
|
||||
version: 3.9.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
@@ -511,11 +511,11 @@ importers:
|
||||
specifier: 4.1.11
|
||||
version: 4.1.11
|
||||
vite:
|
||||
specifier: 7.0.5
|
||||
version: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
specifier: 7.0.6
|
||||
version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite-tsconfig-paths:
|
||||
specifier: 5.1.4
|
||||
version: 5.1.4(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
version: 5.1.4(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
devDependencies:
|
||||
'@emotion/react':
|
||||
specifier: 11.14.0
|
||||
@@ -540,7 +540,7 @@ importers:
|
||||
version: 5.1.0(typescript@5.8.3)
|
||||
vite-plugin-dts:
|
||||
specifier: 4.5.4
|
||||
version: 4.5.4(@types/node@22.16.5)(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
version: 4.5.4(@types/node@22.16.5)(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||
|
||||
scripts:
|
||||
dependencies:
|
||||
@@ -1769,8 +1769,8 @@ packages:
|
||||
'@vue/compiler-sfc':
|
||||
optional: true
|
||||
|
||||
'@iconify/json@2.2.360':
|
||||
resolution: {integrity: sha512-N1mmTs7dJd6Ym62fP5DxJG1ZpbXSncD32tC/RJoGGjEPNx52/HzBixEjS9hVPps8CWs2VL7uRr4UKmjiFA/n5Q==}
|
||||
'@iconify/json@2.2.362':
|
||||
resolution: {integrity: sha512-Xr0aGINCS453Bp3zKgp30H8FtT2T4lTqB1T9QVHD3ougPgKjfuQM3ij08mY06+4HkVFdllCuReEilo32p7yVlQ==}
|
||||
|
||||
'@iconify/types@2.0.0':
|
||||
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
|
||||
@@ -2912,8 +2912,8 @@ packages:
|
||||
'@tailwindcss/postcss@4.1.11':
|
||||
resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==}
|
||||
|
||||
'@tanstack/history@1.121.34':
|
||||
resolution: {integrity: sha512-YL8dGi5ZU+xvtav2boRlw4zrRghkY6hvdcmHhA0RGSJ/CBgzv+cbADW9eYJLx74XMZvIQ1pp6VMbrpXnnM5gHA==}
|
||||
'@tanstack/history@1.129.7':
|
||||
resolution: {integrity: sha512-I3YTkbe4RZQN54Qw4+IUhOjqG2DdbG2+EBWuQfew4MEk0eddLYAQVa50BZVww4/D2eh5I9vEk2Fd1Y0Wty7pug==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
'@tanstack/match-sorter-utils@8.19.4':
|
||||
@@ -2928,16 +2928,16 @@ packages:
|
||||
peerDependencies:
|
||||
react: ^18 || ^19
|
||||
|
||||
'@tanstack/react-router-devtools@1.129.2':
|
||||
resolution: {integrity: sha512-8ipEnUv5lWcZYQ5ia0L2wOGqt1CJpfU8iSN9xaX7z93U9cRQg0G1IOf0iYkHpjfUe8WxRY6+5siST+qlKbdtJA==}
|
||||
'@tanstack/react-router-devtools@1.129.8':
|
||||
resolution: {integrity: sha512-+gVwYRLFAoQ+U4+UGX5/VgxspoJN4dm6/z4vYaZyrOUBVo+UjjH+bpvdz9ZrooBQ9EdkrkORPH8EfZp5qgi5Bg==}
|
||||
engines: {node: '>=12'}
|
||||
peerDependencies:
|
||||
'@tanstack/react-router': ^1.129.2
|
||||
'@tanstack/react-router': ^1.129.8
|
||||
react: '>=18.0.0 || >=19.0.0'
|
||||
react-dom: '>=18.0.0 || >=19.0.0'
|
||||
|
||||
'@tanstack/react-router@1.129.2':
|
||||
resolution: {integrity: sha512-ERGkvtb4qlo1ihrKUMJn2RfiC3T7rE/PpRtsATCmC0Gy0NmaO8S1+XvgriYl2bzdqTnBliwwIzqkKB9A2xPqDQ==}
|
||||
'@tanstack/react-router@1.129.8':
|
||||
resolution: {integrity: sha512-d5mfM+67h3wq7aHkLjRKXD1ddbzx1YuxaEbNvW45jjZXMgaikZSVfJrZBiUWXE/nhV1sTdbMQ48JcPagvGPmYQ==}
|
||||
engines: {node: '>=12'}
|
||||
peerDependencies:
|
||||
react: '>=18.0.0 || >=19.0.0'
|
||||
@@ -2962,15 +2962,15 @@ packages:
|
||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
|
||||
'@tanstack/router-core@1.129.2':
|
||||
resolution: {integrity: sha512-M7OuzxbSkEFa1WWQoLOg7RtJUHzfaURMiRCLbKLEJWJkw1Cuylj7oBbzbawDAJFTHry9UUDZNPP0MSCfcXypPA==}
|
||||
'@tanstack/router-core@1.129.8':
|
||||
resolution: {integrity: sha512-Izqf5q8TzJv0DJURynitJioPJT3dPAefrzHi2wlY/Q5+7nEG41SkjYMotTX2Q9i/Pjl91lW8gERCHpksszRdRw==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
'@tanstack/router-devtools-core@1.129.2':
|
||||
resolution: {integrity: sha512-PlGJ5A54P0J8FAe7biiLARN9U6VCDPbnoNjqL9jsvf2A0X/cQw4fgediR+jsMjVuXNoL4kMDprVTpGT5PoVUaQ==}
|
||||
'@tanstack/router-devtools-core@1.129.8':
|
||||
resolution: {integrity: sha512-1yiAoWWYV3hWLXoHv92LMU67EjJpavoavo00EYzf7RLCy0TA/a+KyokZBS6PD38sITamHgVeY/jJBGD6hr47rQ==}
|
||||
engines: {node: '>=12'}
|
||||
peerDependencies:
|
||||
'@tanstack/router-core': ^1.129.2
|
||||
'@tanstack/router-core': ^1.129.8
|
||||
csstype: ^3.0.10
|
||||
solid-js: '>=1.9.5'
|
||||
tiny-invariant: ^1.3.3
|
||||
@@ -2978,16 +2978,16 @@ packages:
|
||||
csstype:
|
||||
optional: true
|
||||
|
||||
'@tanstack/router-generator@1.129.2':
|
||||
resolution: {integrity: sha512-xCZYd4sgPFdlgEten7x+uJx+0y6iUm2d8cnE3cHHzzc5COf5jO+FFh9kVRa9Ouh4h/binv5dpKRBhB33TqPRfw==}
|
||||
'@tanstack/router-generator@1.129.8':
|
||||
resolution: {integrity: sha512-i4QTtJeRq3jdRTuUXHKcmPNm6STS0jLJNTKEdeUCIzuVBiiP53oujMOd84e5ARP83k2IB2XcMHekTSzDlWD2fg==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
'@tanstack/router-plugin@1.129.2':
|
||||
resolution: {integrity: sha512-uchyp0fMG6MmMJMxydmp4JTyIfW0FHVE4hwGSnP9dgoncQHbqZQt3qNEYbzPIV+JRp6DKjb8Ax5DAUgL7/LVCA==}
|
||||
'@tanstack/router-plugin@1.129.8':
|
||||
resolution: {integrity: sha512-DdO6el2slgBO2mIqIGdGyHCzsbQLsTNxsgbNz9ZY9y324iP4G+p3iEYopHWgzLKM2DKinMs9F7AxjLow4V3klQ==}
|
||||
engines: {node: '>=12'}
|
||||
peerDependencies:
|
||||
'@rsbuild/core': '>=1.0.2'
|
||||
'@tanstack/react-router': ^1.129.2
|
||||
'@tanstack/react-router': ^1.129.8
|
||||
vite: '>=5.0.0 || >=6.0.0'
|
||||
vite-plugin-solid: ^2.11.2
|
||||
webpack: '>=5.92.0'
|
||||
@@ -3003,8 +3003,8 @@ packages:
|
||||
webpack:
|
||||
optional: true
|
||||
|
||||
'@tanstack/router-utils@1.121.21':
|
||||
resolution: {integrity: sha512-u7ubq1xPBtNiU7Fm+EOWlVWdgFLzuKOa1thhqdscVn8R4dNMUd1VoOjZ6AKmLw201VaUhFtlX+u0pjzI6szX7A==}
|
||||
'@tanstack/router-utils@1.129.7':
|
||||
resolution: {integrity: sha512-I2OyQF5U6sxHJApXKCUmCncTHKcpj4681FwyxpYg5QYOatHcn/zVMl7Rj4h36fu8/Lo2ZRLxUMd5kmXgp5Pb/A==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
'@tanstack/router-zod-adapter@1.81.5':
|
||||
@@ -3024,8 +3024,8 @@ packages:
|
||||
'@tanstack/virtual-core@3.13.9':
|
||||
resolution: {integrity: sha512-3jztt0jpaoJO5TARe2WIHC1UQC3VMLAFUW5mmMo0yrkwtDB2AQP0+sh10BVUpWrnvHjSLvzFizydtEGLCJKFoQ==}
|
||||
|
||||
'@tanstack/virtual-file-routes@1.121.21':
|
||||
resolution: {integrity: sha512-3nuYsTyaq6ZN7jRZ9z6Gj3GXZqBOqOT0yzd/WZ33ZFfv4yVNIvsa5Lw+M1j3sgyEAxKMqGu/FaNi7FCjr3yOdw==}
|
||||
'@tanstack/virtual-file-routes@1.129.7':
|
||||
resolution: {integrity: sha512-a+MxoAXG+Sq94Jp67OtveKOp2vQq75AWdVI8DRt6w19B0NEqpfm784FTLbVp/qdR1wmxCOmKAvElGSIiBOx5OQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
'@taplo/core@0.2.0':
|
||||
@@ -6779,6 +6779,10 @@ packages:
|
||||
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
picomatch@4.0.3:
|
||||
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
pidtree@0.6.0:
|
||||
resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
|
||||
engines: {node: '>=0.10'}
|
||||
@@ -8322,8 +8326,8 @@ packages:
|
||||
vite:
|
||||
optional: true
|
||||
|
||||
vite@7.0.5:
|
||||
resolution: {integrity: sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==}
|
||||
vite@7.0.6:
|
||||
resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -9971,7 +9975,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@iconify/json@2.2.360':
|
||||
'@iconify/json@2.2.362':
|
||||
dependencies:
|
||||
'@iconify/types': 2.0.0
|
||||
pathe: 1.1.2
|
||||
@@ -11063,7 +11067,7 @@ snapshots:
|
||||
postcss: 8.5.6
|
||||
tailwindcss: 4.1.11
|
||||
|
||||
'@tanstack/history@1.121.34': {}
|
||||
'@tanstack/history@1.129.7': {}
|
||||
|
||||
'@tanstack/match-sorter-utils@8.19.4':
|
||||
dependencies:
|
||||
@@ -11076,10 +11080,10 @@ snapshots:
|
||||
'@tanstack/query-core': 5.83.0
|
||||
react: 19.1.0
|
||||
|
||||
'@tanstack/react-router-devtools@1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)':
|
||||
'@tanstack/react-router-devtools@1.129.8(@tanstack/react-router@1.129.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.8)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)':
|
||||
dependencies:
|
||||
'@tanstack/react-router': 1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@tanstack/router-devtools-core': 1.129.2(@tanstack/router-core@1.129.2)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)
|
||||
'@tanstack/react-router': 1.129.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@tanstack/router-devtools-core': 1.129.8(@tanstack/router-core@1.129.8)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)
|
||||
react: 19.1.0
|
||||
react-dom: 19.1.0(react@19.1.0)
|
||||
transitivePeerDependencies:
|
||||
@@ -11088,11 +11092,11 @@ snapshots:
|
||||
- solid-js
|
||||
- tiny-invariant
|
||||
|
||||
'@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
'@tanstack/react-router@1.129.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
dependencies:
|
||||
'@tanstack/history': 1.121.34
|
||||
'@tanstack/history': 1.129.7
|
||||
'@tanstack/react-store': 0.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@tanstack/router-core': 1.129.2
|
||||
'@tanstack/router-core': 1.129.8
|
||||
isbot: 5.1.28
|
||||
react: 19.1.0
|
||||
react-dom: 19.1.0(react@19.1.0)
|
||||
@@ -11118,9 +11122,9 @@ snapshots:
|
||||
react: 19.1.0
|
||||
react-dom: 19.1.0(react@19.1.0)
|
||||
|
||||
'@tanstack/router-core@1.129.2':
|
||||
'@tanstack/router-core@1.129.8':
|
||||
dependencies:
|
||||
'@tanstack/history': 1.121.34
|
||||
'@tanstack/history': 1.129.7
|
||||
'@tanstack/store': 0.7.0
|
||||
cookie-es: 1.2.2
|
||||
seroval: 1.3.2
|
||||
@@ -11128,9 +11132,9 @@ snapshots:
|
||||
tiny-invariant: 1.3.3
|
||||
tiny-warning: 1.0.3
|
||||
|
||||
'@tanstack/router-devtools-core@1.129.2(@tanstack/router-core@1.129.2)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)':
|
||||
'@tanstack/router-devtools-core@1.129.8(@tanstack/router-core@1.129.8)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)':
|
||||
dependencies:
|
||||
'@tanstack/router-core': 1.129.2
|
||||
'@tanstack/router-core': 1.129.8
|
||||
clsx: 2.1.1
|
||||
goober: 2.1.16(csstype@3.1.3)
|
||||
solid-js: 1.9.5
|
||||
@@ -11138,11 +11142,11 @@ snapshots:
|
||||
optionalDependencies:
|
||||
csstype: 3.1.3
|
||||
|
||||
'@tanstack/router-generator@1.129.2':
|
||||
'@tanstack/router-generator@1.129.8':
|
||||
dependencies:
|
||||
'@tanstack/router-core': 1.129.2
|
||||
'@tanstack/router-utils': 1.121.21
|
||||
'@tanstack/virtual-file-routes': 1.121.21
|
||||
'@tanstack/router-core': 1.129.8
|
||||
'@tanstack/router-utils': 1.129.7
|
||||
'@tanstack/virtual-file-routes': 1.129.7
|
||||
prettier: 3.6.2
|
||||
recast: 0.23.11
|
||||
source-map: 0.7.4
|
||||
@@ -11151,7 +11155,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@tanstack/router-plugin@1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
|
||||
'@tanstack/router-plugin@1.129.8(@tanstack/react-router@1.129.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.0
|
||||
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0)
|
||||
@@ -11159,21 +11163,21 @@ snapshots:
|
||||
'@babel/template': 7.27.2
|
||||
'@babel/traverse': 7.28.0
|
||||
'@babel/types': 7.28.1
|
||||
'@tanstack/router-core': 1.129.2
|
||||
'@tanstack/router-generator': 1.129.2
|
||||
'@tanstack/router-utils': 1.121.21
|
||||
'@tanstack/virtual-file-routes': 1.121.21
|
||||
'@tanstack/router-core': 1.129.8
|
||||
'@tanstack/router-generator': 1.129.8
|
||||
'@tanstack/router-utils': 1.129.7
|
||||
'@tanstack/virtual-file-routes': 1.129.7
|
||||
babel-dead-code-elimination: 1.0.10
|
||||
chokidar: 3.6.0
|
||||
unplugin: 2.3.5
|
||||
zod: 3.25.76
|
||||
optionalDependencies:
|
||||
'@tanstack/react-router': 1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
'@tanstack/react-router': 1.129.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@tanstack/router-utils@1.121.21':
|
||||
'@tanstack/router-utils@1.129.7':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.0
|
||||
'@babel/generator': 7.28.0
|
||||
@@ -11184,9 +11188,9 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(zod@4.0.5)':
|
||||
'@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.129.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(zod@4.0.5)':
|
||||
dependencies:
|
||||
'@tanstack/react-router': 1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@tanstack/react-router': 1.129.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
zod: 4.0.5
|
||||
|
||||
'@tanstack/store@0.7.0': {}
|
||||
@@ -11195,7 +11199,7 @@ snapshots:
|
||||
|
||||
'@tanstack/virtual-core@3.13.9': {}
|
||||
|
||||
'@tanstack/virtual-file-routes@1.121.21': {}
|
||||
'@tanstack/virtual-file-routes@1.129.7': {}
|
||||
|
||||
'@taplo/core@0.2.0': {}
|
||||
|
||||
@@ -11774,7 +11778,7 @@ snapshots:
|
||||
'@unrs/resolver-binding-win32-x64-msvc@1.10.1':
|
||||
optional: true
|
||||
|
||||
'@vitejs/plugin-legacy@7.1.0(terser@5.36.0)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
|
||||
'@vitejs/plugin-legacy@7.1.0(terser@5.36.0)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.0
|
||||
'@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.0)
|
||||
@@ -11789,19 +11793,19 @@ snapshots:
|
||||
regenerator-runtime: 0.14.1
|
||||
systemjs: 6.15.1
|
||||
terser: 5.36.0
|
||||
vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@vitejs/plugin-react-swc@3.11.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
|
||||
'@vitejs/plugin-react-swc@3.11.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
|
||||
dependencies:
|
||||
'@rolldown/pluginutils': 1.0.0-beta.27
|
||||
'@swc/core': 1.13.0
|
||||
vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
transitivePeerDependencies:
|
||||
- '@swc/helpers'
|
||||
|
||||
'@vitejs/plugin-react@4.7.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
|
||||
'@vitejs/plugin-react@4.7.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.0
|
||||
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0)
|
||||
@@ -11809,7 +11813,7 @@ snapshots:
|
||||
'@rolldown/pluginutils': 1.0.0-beta.27
|
||||
'@types/babel__core': 7.20.5
|
||||
react-refresh: 0.17.0
|
||||
vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -13652,6 +13656,10 @@ snapshots:
|
||||
optionalDependencies:
|
||||
picomatch: 4.0.2
|
||||
|
||||
fdir@6.4.6(picomatch@4.0.3):
|
||||
optionalDependencies:
|
||||
picomatch: 4.0.3
|
||||
|
||||
fetch-blob@3.2.0:
|
||||
dependencies:
|
||||
node-domexception: 1.0.0
|
||||
@@ -15518,6 +15526,8 @@ snapshots:
|
||||
|
||||
picomatch@4.0.2: {}
|
||||
|
||||
picomatch@4.0.3: {}
|
||||
|
||||
pidtree@0.6.0: {}
|
||||
|
||||
pify@2.3.0: {}
|
||||
@@ -16712,8 +16722,8 @@ snapshots:
|
||||
|
||||
tinyglobby@0.2.14:
|
||||
dependencies:
|
||||
fdir: 6.4.6(picomatch@4.0.2)
|
||||
picomatch: 4.0.2
|
||||
fdir: 6.4.6(picomatch@4.0.3)
|
||||
picomatch: 4.0.3
|
||||
|
||||
tmp@0.2.3: {}
|
||||
|
||||
@@ -17139,7 +17149,7 @@ snapshots:
|
||||
- rollup
|
||||
- supports-color
|
||||
|
||||
vite-plugin-dts@4.5.4(@types/node@22.16.5)(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
|
||||
vite-plugin-dts@4.5.4(@types/node@22.16.5)(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
|
||||
dependencies:
|
||||
'@microsoft/api-extractor': 7.51.0(@types/node@22.16.5)
|
||||
'@rollup/pluginutils': 5.1.4(rollup@4.40.0)
|
||||
@@ -17152,13 +17162,13 @@ snapshots:
|
||||
magic-string: 0.30.17
|
||||
typescript: 5.8.3
|
||||
optionalDependencies:
|
||||
vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
- rollup
|
||||
- supports-color
|
||||
|
||||
vite-plugin-html@3.2.2(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
|
||||
vite-plugin-html@3.2.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
|
||||
dependencies:
|
||||
'@rollup/pluginutils': 4.2.1
|
||||
colorette: 2.0.20
|
||||
@@ -17172,43 +17182,43 @@ snapshots:
|
||||
html-minifier-terser: 6.1.0
|
||||
node-html-parser: 5.4.2
|
||||
pathe: 0.2.0
|
||||
vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
|
||||
vite-plugin-sass-dts@1.3.31(postcss@8.5.6)(prettier@3.6.2)(sass-embedded@1.89.2)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
|
||||
vite-plugin-sass-dts@1.3.31(postcss@8.5.6)(prettier@3.6.2)(sass-embedded@1.89.2)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
|
||||
dependencies:
|
||||
postcss: 8.5.6
|
||||
postcss-js: 4.0.1(postcss@8.5.6)
|
||||
prettier: 3.6.2
|
||||
sass-embedded: 1.89.2
|
||||
vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
|
||||
vite-plugin-svgr@4.3.0(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
|
||||
vite-plugin-svgr@4.3.0(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
|
||||
dependencies:
|
||||
'@rollup/pluginutils': 5.1.3(rollup@4.40.0)
|
||||
'@svgr/core': 8.1.0(typescript@5.8.3)
|
||||
'@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3))
|
||||
vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
transitivePeerDependencies:
|
||||
- rollup
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
|
||||
vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
|
||||
dependencies:
|
||||
debug: 4.3.7
|
||||
globrex: 0.1.2
|
||||
tsconfck: 3.0.3(typescript@5.8.3)
|
||||
optionalDependencies:
|
||||
vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0):
|
||||
vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0):
|
||||
dependencies:
|
||||
esbuild: 0.25.0
|
||||
fdir: 6.4.6(picomatch@4.0.2)
|
||||
picomatch: 4.0.2
|
||||
fdir: 6.4.6(picomatch@4.0.3)
|
||||
picomatch: 4.0.3
|
||||
postcss: 8.5.6
|
||||
rollup: 4.40.0
|
||||
tinyglobby: 0.2.14
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
--- a/src/hsl/phy/hsl_phy.c
|
||||
+++ b/src/hsl/phy/hsl_phy.c
|
||||
@@ -762,7 +762,7 @@ hsl_phy_phydev_get(a_uint32_t dev_id, a_
|
||||
*phydev = miibus->phy_map[phy_addr];
|
||||
if(*phydev == NULL)
|
||||
{
|
||||
- SSDK_ERROR("phy_addr %d phydev is NULL\n", phy_addr);
|
||||
+ // SSDK_ERROR("phy_addr %d phydev is NULL\n", phy_addr);
|
||||
return SW_NOT_INITIALIZED;
|
||||
}
|
||||
pdev_addr = (*phydev)->addr;
|
||||
@@ -772,7 +772,7 @@ hsl_phy_phydev_get(a_uint32_t dev_id, a_
|
||||
*phydev = mdiobus_get_phy(miibus, phy_addr);
|
||||
if(*phydev == NULL)
|
||||
{
|
||||
- SSDK_ERROR("phy_addr %d phydev is NULL\n", phy_addr);
|
||||
+ // SSDK_ERROR("phy_addr %d phydev is NULL\n", phy_addr);
|
||||
return SW_NOT_INITIALIZED;
|
||||
}
|
||||
pdev_addr = (*phydev)->mdio.addr;
|
||||
Vendored
+7
-7
@@ -29,7 +29,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
jobs:
|
||||
- { goos: darwin, goarch: amd64, goamd64: v1, output: amd64-compatible }
|
||||
- { goos: darwin, goarch: amd64, goamd64: v1, output: amd64-compatible } # old style file name will be removed in next released
|
||||
- { goos: darwin, goarch: amd64, goamd64: v3, output: amd64 }
|
||||
- { goos: darwin, goarch: amd64, goamd64: v1, output: amd64-v1 }
|
||||
- { goos: darwin, goarch: amd64, goamd64: v2, output: amd64-v2 }
|
||||
@@ -38,10 +38,10 @@ jobs:
|
||||
|
||||
- { goos: linux, goarch: '386', go386: sse2, output: '386', debian: i386, rpm: i386}
|
||||
- { goos: linux, goarch: '386', go386: softfloat, output: '386-softfloat' }
|
||||
- { goos: linux, goarch: amd64, goamd64: v1, output: amd64-compatible}
|
||||
- { goos: linux, goarch: amd64, goamd64: v3, output: amd64}
|
||||
- { goos: linux, goarch: amd64, goamd64: v1, output: amd64-v1, test: test }
|
||||
- { goos: linux, goarch: amd64, goamd64: v2, output: amd64-v2 }
|
||||
- { goos: linux, goarch: amd64, goamd64: v1, output: amd64-compatible} # old style file name will be removed in next released
|
||||
- { goos: linux, goarch: amd64, goamd64: v3, output: amd64, debian: amd64, rpm: x86_64, pacman: x86_64}
|
||||
- { goos: linux, goarch: amd64, goamd64: v1, output: amd64-v1, debian: amd64, rpm: x86_64, pacman: x86_64, test: test }
|
||||
- { goos: linux, goarch: amd64, goamd64: v2, output: amd64-v2, debian: amd64, rpm: x86_64, pacman: x86_64}
|
||||
- { goos: linux, goarch: amd64, goamd64: v3, output: amd64-v3, debian: amd64, rpm: x86_64, pacman: x86_64}
|
||||
- { goos: linux, goarch: arm64, output: arm64, debian: arm64, rpm: aarch64, pacman: aarch64}
|
||||
- { goos: linux, goarch: arm, goarm: '5', output: armv5 }
|
||||
@@ -60,7 +60,7 @@ jobs:
|
||||
- { goos: linux, goarch: ppc64le, output: ppc64le, debian: ppc64el, rpm: ppc64le }
|
||||
|
||||
- { goos: windows, goarch: '386', output: '386' }
|
||||
- { goos: windows, goarch: amd64, goamd64: v1, output: amd64-compatible }
|
||||
- { goos: windows, goarch: amd64, goamd64: v1, output: amd64-compatible } # old style file name will be removed in next released
|
||||
- { goos: windows, goarch: amd64, goamd64: v3, output: amd64 }
|
||||
- { goos: windows, goarch: amd64, goamd64: v1, output: amd64-v1 }
|
||||
- { goos: windows, goarch: amd64, goamd64: v2, output: amd64-v2 }
|
||||
@@ -68,7 +68,7 @@ jobs:
|
||||
- { goos: windows, goarch: arm64, output: arm64 }
|
||||
|
||||
- { goos: freebsd, goarch: '386', output: '386' }
|
||||
- { goos: freebsd, goarch: amd64, goamd64: v1, output: amd64-compatible }
|
||||
- { goos: freebsd, goarch: amd64, goamd64: v1, output: amd64-compatible } # old style file name will be removed in next released
|
||||
- { goos: freebsd, goarch: amd64, goamd64: v3, output: amd64 }
|
||||
- { goos: freebsd, goarch: amd64, goamd64: v1, output: amd64-v1 }
|
||||
- { goos: freebsd, goarch: amd64, goamd64: v2, output: amd64-v2 }
|
||||
|
||||
@@ -33,49 +33,43 @@ const (
|
||||
MaxPackageFileSize = 32 * 1024 * 1024
|
||||
)
|
||||
|
||||
var mihomoBaseName string
|
||||
// CoreUpdater is the mihomo updater.
|
||||
// modify from https://github.com/AdguardTeam/AdGuardHome/blob/595484e0b3fb4c457f9bb727a6b94faa78a66c5f/internal/updater/updater.go
|
||||
type CoreUpdater struct {
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
func init() {
|
||||
var DefaultCoreUpdater = CoreUpdater{}
|
||||
|
||||
func (u *CoreUpdater) CoreBaseName() string {
|
||||
switch runtime.GOARCH {
|
||||
case "arm":
|
||||
// mihomo-linux-armv5
|
||||
mihomoBaseName = fmt.Sprintf("mihomo-%s-%sv%s", runtime.GOOS, runtime.GOARCH, features.GOARM)
|
||||
return fmt.Sprintf("mihomo-%s-%sv%s", runtime.GOOS, runtime.GOARCH, features.GOARM)
|
||||
case "arm64":
|
||||
if runtime.GOOS == "android" {
|
||||
// mihomo-android-arm64-v8
|
||||
mihomoBaseName = fmt.Sprintf("mihomo-%s-%s-v8", runtime.GOOS, runtime.GOARCH)
|
||||
return fmt.Sprintf("mihomo-%s-%s-v8", runtime.GOOS, runtime.GOARCH)
|
||||
} else {
|
||||
// mihomo-linux-arm64
|
||||
mihomoBaseName = fmt.Sprintf("mihomo-%s-%s", runtime.GOOS, runtime.GOARCH)
|
||||
return fmt.Sprintf("mihomo-%s-%s", runtime.GOOS, runtime.GOARCH)
|
||||
}
|
||||
case "mips", "mipsle":
|
||||
// mihomo-linux-mips-hardfloat
|
||||
mihomoBaseName = fmt.Sprintf("mihomo-%s-%s-%s", runtime.GOOS, runtime.GOARCH, features.GOMIPS)
|
||||
return fmt.Sprintf("mihomo-%s-%s-%s", runtime.GOOS, runtime.GOARCH, features.GOMIPS)
|
||||
case "amd64":
|
||||
// mihomo-linux-amd64-v1
|
||||
mihomoBaseName = fmt.Sprintf("mihomo-%s-%s-%s", runtime.GOOS, runtime.GOARCH, features.GOAMD64)
|
||||
return fmt.Sprintf("mihomo-%s-%s-%s", runtime.GOOS, runtime.GOARCH, features.GOAMD64)
|
||||
default:
|
||||
// mihomo-linux-386
|
||||
// mihomo-linux-mips64
|
||||
// mihomo-linux-riscv64
|
||||
// mihomo-linux-s390x
|
||||
mihomoBaseName = fmt.Sprintf("mihomo-%s-%s", runtime.GOOS, runtime.GOARCH)
|
||||
return fmt.Sprintf("mihomo-%s-%s", runtime.GOOS, runtime.GOARCH)
|
||||
}
|
||||
}
|
||||
|
||||
// CoreUpdater is the mihomo updater.
|
||||
// modify from https://github.com/AdguardTeam/AdGuardHome/blob/595484e0b3fb4c457f9bb727a6b94faa78a66c5f/internal/updater/updater.go
|
||||
var CoreUpdater = coreUpdater{}
|
||||
|
||||
func UpdateCore(execPath string) (err error) {
|
||||
return CoreUpdater.Update(execPath)
|
||||
}
|
||||
|
||||
type coreUpdater struct {
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
func (u *coreUpdater) Update(currentExePath string) (err error) {
|
||||
func (u *CoreUpdater) Update(currentExePath string) (err error) {
|
||||
u.mu.Lock()
|
||||
defer u.mu.Unlock()
|
||||
|
||||
@@ -110,6 +104,7 @@ func (u *coreUpdater) Update(currentExePath string) (err error) {
|
||||
}()
|
||||
|
||||
// ---- prepare ----
|
||||
mihomoBaseName := u.CoreBaseName()
|
||||
packageName := mihomoBaseName + "-" + latestVersion
|
||||
if runtime.GOOS == "windows" {
|
||||
packageName = packageName + ".zip"
|
||||
@@ -129,7 +124,7 @@ func (u *coreUpdater) Update(currentExePath string) (err error) {
|
||||
if runtime.GOOS == "windows" {
|
||||
updateExeName = updateExeName + ".exe"
|
||||
}
|
||||
log.Infoln("updateExeName: %s ", updateExeName)
|
||||
log.Infoln("updateExeName: %s", updateExeName)
|
||||
updateExePath := filepath.Join(updateDir, updateExeName)
|
||||
backupExePath := filepath.Join(backupDir, filepath.Base(currentExePath))
|
||||
|
||||
@@ -158,7 +153,7 @@ func (u *coreUpdater) Update(currentExePath string) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (u *coreUpdater) getLatestVersion(versionURL string) (version string, err error) {
|
||||
func (u *CoreUpdater) getLatestVersion(versionURL string) (version string, err error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
|
||||
defer cancel()
|
||||
resp, err := mihomoHttp.HttpRequest(ctx, versionURL, http.MethodGet, nil, nil)
|
||||
@@ -181,7 +176,7 @@ func (u *coreUpdater) getLatestVersion(versionURL string) (version string, err e
|
||||
}
|
||||
|
||||
// download package file and save it to disk
|
||||
func (u *coreUpdater) download(updateDir, packagePath, packageURL string) (err error) {
|
||||
func (u *CoreUpdater) download(updateDir, packagePath, packageURL string) (err error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*90)
|
||||
defer cancel()
|
||||
resp, err := mihomoHttp.HttpRequest(ctx, packageURL, http.MethodGet, nil, nil)
|
||||
@@ -218,7 +213,7 @@ func (u *coreUpdater) download(updateDir, packagePath, packageURL string) (err e
|
||||
}
|
||||
|
||||
// unpack extracts the files from the downloaded archive.
|
||||
func (u *coreUpdater) unpack(updateDir, packagePath string) error {
|
||||
func (u *CoreUpdater) unpack(updateDir, packagePath string) error {
|
||||
log.Infoln("updater: unpacking package")
|
||||
if strings.HasSuffix(packagePath, ".zip") {
|
||||
_, err := u.zipFileUnpack(packagePath, updateDir)
|
||||
@@ -240,7 +235,7 @@ func (u *coreUpdater) unpack(updateDir, packagePath string) error {
|
||||
}
|
||||
|
||||
// backup makes a backup of the current executable file
|
||||
func (u *coreUpdater) backup(currentExePath, backupExePath, backupDir string) (err error) {
|
||||
func (u *CoreUpdater) backup(currentExePath, backupExePath, backupDir string) (err error) {
|
||||
log.Infoln("updater: backing up current ExecFile:%s to %s", currentExePath, backupExePath)
|
||||
_ = os.Mkdir(backupDir, 0o755)
|
||||
|
||||
@@ -253,7 +248,7 @@ func (u *coreUpdater) backup(currentExePath, backupExePath, backupDir string) (e
|
||||
}
|
||||
|
||||
// replace moves the current executable with the updated one
|
||||
func (u *coreUpdater) replace(updateExePath, currentExePath string) error {
|
||||
func (u *CoreUpdater) replace(updateExePath, currentExePath string) error {
|
||||
var err error
|
||||
|
||||
log.Infoln("replacing: %s to %s", updateExePath, currentExePath)
|
||||
@@ -273,7 +268,7 @@ func (u *coreUpdater) replace(updateExePath, currentExePath string) error {
|
||||
}
|
||||
|
||||
// clean removes the temporary directory itself and all it's contents.
|
||||
func (u *coreUpdater) clean(updateDir string) {
|
||||
func (u *CoreUpdater) clean(updateDir string) {
|
||||
_ = os.RemoveAll(updateDir)
|
||||
}
|
||||
|
||||
@@ -281,7 +276,7 @@ func (u *coreUpdater) clean(updateDir string) {
|
||||
// Existing files are overwritten
|
||||
// All files are created inside outDir, subdirectories are not created
|
||||
// Return the output file name
|
||||
func (u *coreUpdater) gzFileUnpack(gzfile, outDir string) (string, error) {
|
||||
func (u *CoreUpdater) gzFileUnpack(gzfile, outDir string) (string, error) {
|
||||
f, err := os.Open(gzfile)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("os.Open(): %w", err)
|
||||
@@ -345,7 +340,7 @@ func (u *coreUpdater) gzFileUnpack(gzfile, outDir string) (string, error) {
|
||||
// Existing files are overwritten
|
||||
// All files are created inside 'outDir', subdirectories are not created
|
||||
// Return the output file name
|
||||
func (u *coreUpdater) zipFileUnpack(zipfile, outDir string) (string, error) {
|
||||
func (u *CoreUpdater) zipFileUnpack(zipfile, outDir string) (string, error) {
|
||||
zrc, err := zip.OpenReader(zipfile)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("zip.OpenReader(): %w", err)
|
||||
@@ -404,7 +399,7 @@ func (u *coreUpdater) zipFileUnpack(zipfile, outDir string) (string, error) {
|
||||
}
|
||||
|
||||
// Copy file on disk
|
||||
func (u *coreUpdater) copyFile(src, dst string) error {
|
||||
func (u *CoreUpdater) copyFile(src, dst string) error {
|
||||
d, e := os.ReadFile(src)
|
||||
if e != nil {
|
||||
return e
|
||||
|
||||
@@ -5,6 +5,6 @@ import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestBaseName(t *testing.T) {
|
||||
fmt.Println("mihomoBaseName =", mihomoBaseName)
|
||||
func TestCoreBaseName(t *testing.T) {
|
||||
fmt.Println("Core base name =", DefaultCoreUpdater.CoreBaseName())
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ func upgradeCore(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
err = updater.UpdateCore(execPath)
|
||||
err = updater.DefaultCoreUpdater.Update(execPath)
|
||||
if err != nil {
|
||||
log.Warnln("%s", err)
|
||||
render.Status(r, http.StatusInternalServerError)
|
||||
|
||||
+1
@@ -15,6 +15,7 @@ o.rmempty = false
|
||||
o = s:option(Value, "music_source", translate("音源接口"))
|
||||
o:value("default", translate("默认"))
|
||||
o:value("bilibili", translate("Bilibili音乐"))
|
||||
o:value("bilivideo", translate("Bilibili音乐(bilivideo)"))
|
||||
o:value("joox", translate("JOOX音乐"))
|
||||
o:value("kugou", translate("酷狗音乐"))
|
||||
o:value("kuwo", translate("酷我音乐"))
|
||||
|
||||
@@ -3,6 +3,8 @@ local api = require "luci.passwall.api"
|
||||
-%>
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
var appname = "<%= api.appname %>"
|
||||
|
||||
function confirmDeleteNode(remark) {
|
||||
if (!confirm("<%:Delete the subscribed node%>: " + remark + " ?"))
|
||||
return false;
|
||||
@@ -36,7 +38,7 @@ local api = require "luci.passwall.api"
|
||||
}
|
||||
|
||||
function ManualSubscribe(sectionId) {
|
||||
var urlInput = document.querySelector("#cbid\\.<%= api.appname %>\\." + sectionId + "\\.url input");
|
||||
var urlInput = document.querySelector("input[name='cbid." + appname + "." + sectionId + ".url']");
|
||||
var currentUrl = urlInput ? urlInput.value.trim() : "";
|
||||
if (!currentUrl) {
|
||||
alert("<%:Subscribe URL cannot be empty.%>");
|
||||
@@ -61,7 +63,7 @@ local api = require "luci.passwall.api"
|
||||
var sectionIds = [];
|
||||
var urls = [];
|
||||
|
||||
var table = document.getElementById("cbi-<%= api.appname %>-subscribe_list");
|
||||
var table = document.getElementById("cbi-" + appname + "-subscribe_list");
|
||||
var editBtns = table ? table.getElementsByClassName("cbi-button cbi-button-edit") : [];
|
||||
|
||||
for (var i = 0; i < editBtns.length; i++) {
|
||||
@@ -72,7 +74,7 @@ local api = require "luci.passwall.api"
|
||||
var id = onclickStr.substring(onclickStr.lastIndexOf('/') + 1, onclickStr.length - 1);
|
||||
if (!id) continue;
|
||||
|
||||
var urlInput = document.querySelector("#cbid\\.<%= api.appname %>\\." + id + "\\.url input");
|
||||
var urlInput = document.querySelector("input[name='cbid." + appname + "." + id + ".url']");
|
||||
var currentUrl = urlInput ? urlInput.value.trim() : "";
|
||||
if (!currentUrl) {
|
||||
alert("<%:Subscribe URL cannot be empty.%>");
|
||||
|
||||
@@ -1913,7 +1913,6 @@ local execute = function()
|
||||
local raw_data = api.trim(stdout)
|
||||
local old_md5 = value.md5 or ""
|
||||
local new_md5 = luci.sys.exec("md5sum " .. tmp_file .. " 2>/dev/null | awk '{print $1}'"):gsub("\n", "")
|
||||
os.remove(tmp_file)
|
||||
if not manual_sub and old_md5 == new_md5 then
|
||||
log('订阅:【' .. remark .. '】没有变化,无需更新。')
|
||||
else
|
||||
@@ -1924,6 +1923,7 @@ local execute = function()
|
||||
fail_list[#fail_list + 1] = value
|
||||
end
|
||||
end
|
||||
luci.sys.call("rm -f " .. tmp_file)
|
||||
allowInsecure_default = nil
|
||||
filter_keyword_mode_default = uci:get(appname, "@global_subscribe[0]", "filter_keyword_mode") or "0"
|
||||
filter_keyword_discard_list_default = uci:get(appname, "@global_subscribe[0]", "filter_discard_list") or {}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
icon: material/alert-decagram
|
||||
---
|
||||
|
||||
#### 1.12.0-rc.2
|
||||
#### 1.12.0-rc.3
|
||||
|
||||
* Fixes and improvements
|
||||
|
||||
|
||||
@@ -50,12 +50,24 @@ func (s *TrafficManager) UpdateUsers(users []string) {
|
||||
newUserTCPSessions := make(map[string]*atomic.Int64)
|
||||
newUserUDPSessions := make(map[string]*atomic.Int64)
|
||||
for _, user := range users {
|
||||
newUserUplink[user] = s.userUplinkPackets[user]
|
||||
newUserDownlink[user] = s.userDownlinkPackets[user]
|
||||
newUserUplinkPackets[user] = s.userUplinkPackets[user]
|
||||
newUserDownlinkPackets[user] = s.userDownlinkPackets[user]
|
||||
newUserTCPSessions[user] = s.userTCPSessions[user]
|
||||
newUserUDPSessions[user] = s.userUDPSessions[user]
|
||||
if counter, loaded := s.userUplink[user]; loaded {
|
||||
newUserUplink[user] = counter
|
||||
}
|
||||
if counter, loaded := s.userDownlink[user]; loaded {
|
||||
newUserDownlink[user] = counter
|
||||
}
|
||||
if counter, loaded := s.userUplinkPackets[user]; loaded {
|
||||
newUserUplinkPackets[user] = counter
|
||||
}
|
||||
if counter, loaded := s.userDownlinkPackets[user]; loaded {
|
||||
newUserDownlinkPackets[user] = counter
|
||||
}
|
||||
if counter, loaded := s.userTCPSessions[user]; loaded {
|
||||
newUserTCPSessions[user] = counter
|
||||
}
|
||||
if counter, loaded := s.userUDPSessions[user]; loaded {
|
||||
newUserUDPSessions[user] = counter
|
||||
}
|
||||
}
|
||||
s.userUplink = newUserUplink
|
||||
s.userDownlink = newUserDownlink
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_VERSION:=1.23.2
|
||||
PKG_VERSION:=1.23.3
|
||||
|
||||
LUCI_TITLE:=LuCI Support for nikki
|
||||
LUCI_DEPENDS:=+luci-base +nikki
|
||||
|
||||
@@ -502,6 +502,7 @@ return view.extend({
|
||||
so.value('RULE-SET', _('Rule Set'));
|
||||
so.value('DOMAIN', _('Domain Name'));
|
||||
so.value('DOMAIN-SUFFIX', _('Domain Name Suffix'));
|
||||
so.value('DOMAIN-WILDCARD', _('Domain Name Wildcard'));
|
||||
so.value('DOMAIN-KEYWORD', _('Domain Name Keyword'));
|
||||
so.value('DOMAIN-REGEX', _('Domain Name Regex'));
|
||||
so.value('IP-CIDR', _('Destination IP'));
|
||||
|
||||
@@ -99,6 +99,9 @@ return view.extend({
|
||||
so = o.subsection.option(form.Flag, 'proxy', _('Proxy'));
|
||||
so.rmempty = false;
|
||||
|
||||
so = o.subsection.option(form.Flag, 'dns', _('DNS'));
|
||||
so.rmempty = false;
|
||||
|
||||
s.tab('lan', _('LAN Proxy'));
|
||||
|
||||
o = s.taboption('lan', form.Flag, 'lan_proxy', _('Enable'));
|
||||
|
||||
@@ -10,12 +10,12 @@ msgid "API Secret"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:69
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:119
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:122
|
||||
msgid "Access Control"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:169
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:174
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:172
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:177
|
||||
msgid "All Port"
|
||||
msgstr ""
|
||||
|
||||
@@ -56,15 +56,15 @@ msgstr ""
|
||||
msgid "Block Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:162
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:165
|
||||
msgid "Bypass"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:164
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:167
|
||||
msgid "Bypass China Mainland IP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:177
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:180
|
||||
msgid "Bypass DSCP"
|
||||
msgstr ""
|
||||
|
||||
@@ -85,8 +85,8 @@ msgstr ""
|
||||
msgid "Clear Log"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:170
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:175
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:173
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:178
|
||||
msgid "Commonly Used Port"
|
||||
msgstr ""
|
||||
|
||||
@@ -114,6 +114,10 @@ msgstr ""
|
||||
msgid "Cron Expression"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:102
|
||||
msgid "DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:228
|
||||
msgid "DNS Config"
|
||||
msgstr ""
|
||||
@@ -130,23 +134,23 @@ msgstr ""
|
||||
msgid "Debug Log"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508
|
||||
msgid "Destination IP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:512
|
||||
msgid "Destination IP Geo"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509
|
||||
msgid "Destination Port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:167
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:170
|
||||
msgid "Destination TCP Port to Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:172
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:175
|
||||
msgid "Destination UDP Port to Proxy"
|
||||
msgstr ""
|
||||
|
||||
@@ -175,7 +179,7 @@ msgstr ""
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:372
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:558
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:38
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:45
|
||||
msgid "Disable"
|
||||
@@ -206,15 +210,15 @@ msgstr ""
|
||||
msgid "Domain Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511
|
||||
msgid "Domain Name Geo"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:506
|
||||
msgid "Domain Name Keyword"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:506
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507
|
||||
msgid "Domain Name Regex"
|
||||
msgstr ""
|
||||
|
||||
@@ -222,6 +226,10 @@ msgstr ""
|
||||
msgid "Domain Name Suffix"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505
|
||||
msgid "Domain Name Wildcard"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:168
|
||||
msgid "Edit Authentications"
|
||||
msgstr ""
|
||||
@@ -289,13 +297,13 @@ msgstr ""
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:399
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:427
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:496
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:567
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:560
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:568
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:33
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:77
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:104
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:127
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:107
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:130
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
@@ -380,39 +388,39 @@ msgstr ""
|
||||
msgid "Generate & Download"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:537
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:538
|
||||
msgid "GeoData Loader"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:531
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:532
|
||||
msgid "GeoIP Format"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:552
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:553
|
||||
msgid "GeoIP(ASN) Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:549
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:550
|
||||
msgid "GeoIP(DAT) Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:546
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:547
|
||||
msgid "GeoIP(MMDB) Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:543
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:544
|
||||
msgid "GeoSite Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:555
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:556
|
||||
msgid "GeoX Auto Update"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:529
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:530
|
||||
msgid "GeoX Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:561
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:562
|
||||
msgid "GeoX Update Interval"
|
||||
msgstr ""
|
||||
|
||||
@@ -464,11 +472,11 @@ msgstr ""
|
||||
msgid "Inbound Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:107
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:110
|
||||
msgid "Inbound Interface"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:102
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:105
|
||||
msgid "LAN Proxy"
|
||||
msgstr ""
|
||||
|
||||
@@ -494,11 +502,11 @@ msgid "Match Process"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:350
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:513
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:514
|
||||
msgid "Matcher"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:541
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:542
|
||||
msgid "Memory Conservative Loader"
|
||||
msgstr ""
|
||||
|
||||
@@ -510,7 +518,7 @@ msgstr ""
|
||||
msgid "Mixin Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:565
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:566
|
||||
msgid "Mixin File Content"
|
||||
msgstr ""
|
||||
|
||||
@@ -536,12 +544,12 @@ msgstr ""
|
||||
msgid "Nikki"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:524
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:525
|
||||
msgid "No Resolve"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:447
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:517
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:518
|
||||
msgid "Node"
|
||||
msgstr ""
|
||||
|
||||
@@ -601,7 +609,7 @@ msgstr ""
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:567
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:568
|
||||
msgid "Please go to the editor tab to edit the file for mixin"
|
||||
msgstr ""
|
||||
|
||||
@@ -613,7 +621,7 @@ msgstr ""
|
||||
msgid "Prefer"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510
|
||||
msgid "Process Name"
|
||||
msgstr ""
|
||||
|
||||
@@ -631,7 +639,7 @@ msgid "Protocol"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:99
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:159
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:162
|
||||
msgid "Proxy"
|
||||
msgstr ""
|
||||
|
||||
@@ -742,7 +750,7 @@ msgstr ""
|
||||
msgid "Stack"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:540
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:541
|
||||
msgid "Standard Loader"
|
||||
msgstr ""
|
||||
|
||||
@@ -885,14 +893,14 @@ msgstr ""
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:359
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:365
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:371
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:533
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:539
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:544
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:547
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:550
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:553
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:557
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:563
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:534
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:540
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:545
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:548
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:551
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:554
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:558
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:564
|
||||
msgid "Unmodified"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -17,12 +17,12 @@ msgid "API Secret"
|
||||
msgstr "API 密钥"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:69
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:119
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:122
|
||||
msgid "Access Control"
|
||||
msgstr "访问控制"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:169
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:174
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:172
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:177
|
||||
msgid "All Port"
|
||||
msgstr "全部端口"
|
||||
|
||||
@@ -63,15 +63,15 @@ msgstr "行为"
|
||||
msgid "Block Mode"
|
||||
msgstr "黑名单模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:162
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:165
|
||||
msgid "Bypass"
|
||||
msgstr "绕过"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:164
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:167
|
||||
msgid "Bypass China Mainland IP"
|
||||
msgstr "绕过中国大陆 IP"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:177
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:180
|
||||
msgid "Bypass DSCP"
|
||||
msgstr "绕过 DSCP"
|
||||
|
||||
@@ -92,8 +92,8 @@ msgstr "选择配置文件"
|
||||
msgid "Clear Log"
|
||||
msgstr "清空日志"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:170
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:175
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:173
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:178
|
||||
msgid "Commonly Used Port"
|
||||
msgstr "常用端口"
|
||||
|
||||
@@ -121,6 +121,10 @@ msgstr "核心版本"
|
||||
msgid "Cron Expression"
|
||||
msgstr "Cron 表达式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:102
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:228
|
||||
msgid "DNS Config"
|
||||
msgstr "DNS 配置"
|
||||
@@ -137,23 +141,23 @@ msgstr "DNS 模式"
|
||||
msgid "Debug Log"
|
||||
msgstr "调试日志"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508
|
||||
msgid "Destination IP"
|
||||
msgstr "目标 IP"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:512
|
||||
msgid "Destination IP Geo"
|
||||
msgstr "目标 IP(Geo)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509
|
||||
msgid "Destination Port"
|
||||
msgstr "目标端口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:167
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:170
|
||||
msgid "Destination TCP Port to Proxy"
|
||||
msgstr "要代理的 TCP 目标端口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:172
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:175
|
||||
msgid "Destination UDP Port to Proxy"
|
||||
msgstr "要代理的 UDP 目标端口"
|
||||
|
||||
@@ -182,7 +186,7 @@ msgstr "直连模式"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:372
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:558
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:38
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:45
|
||||
msgid "Disable"
|
||||
@@ -213,15 +217,15 @@ msgstr "DoH 优先 HTTP/3"
|
||||
msgid "Domain Name"
|
||||
msgstr "域名"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511
|
||||
msgid "Domain Name Geo"
|
||||
msgstr "域名(Geo)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:506
|
||||
msgid "Domain Name Keyword"
|
||||
msgstr "域名(关键字)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:506
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507
|
||||
msgid "Domain Name Regex"
|
||||
msgstr "域名(正则表达式)"
|
||||
|
||||
@@ -229,6 +233,10 @@ msgstr "域名(正则表达式)"
|
||||
msgid "Domain Name Suffix"
|
||||
msgstr "域名(后缀)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505
|
||||
msgid "Domain Name Wildcard"
|
||||
msgstr "域名(通配符)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:168
|
||||
msgid "Edit Authentications"
|
||||
msgstr "编辑身份验证"
|
||||
@@ -296,13 +304,13 @@ msgstr "编辑器"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:399
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:427
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:496
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:567
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:560
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:568
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:33
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:77
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:104
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:127
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:107
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:130
|
||||
msgid "Enable"
|
||||
msgstr "启用"
|
||||
|
||||
@@ -387,39 +395,39 @@ msgstr "全局配置"
|
||||
msgid "Generate & Download"
|
||||
msgstr "生成并下载"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:537
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:538
|
||||
msgid "GeoData Loader"
|
||||
msgstr "GeoData 加载器"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:531
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:532
|
||||
msgid "GeoIP Format"
|
||||
msgstr "GeoIP 格式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:552
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:553
|
||||
msgid "GeoIP(ASN) Url"
|
||||
msgstr "GeoIP(ASN) 下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:549
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:550
|
||||
msgid "GeoIP(DAT) Url"
|
||||
msgstr "GeoIP(DAT) 下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:546
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:547
|
||||
msgid "GeoIP(MMDB) Url"
|
||||
msgstr "GeoIP(MMDB) 下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:543
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:544
|
||||
msgid "GeoSite Url"
|
||||
msgstr "GeoSite 下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:555
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:556
|
||||
msgid "GeoX Auto Update"
|
||||
msgstr "定时更新GeoX文件"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:529
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:530
|
||||
msgid "GeoX Config"
|
||||
msgstr "GeoX 配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:561
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:562
|
||||
msgid "GeoX Update Interval"
|
||||
msgstr "GeoX 文件更新间隔"
|
||||
|
||||
@@ -433,7 +441,7 @@ msgstr "全局模式"
|
||||
|
||||
#: applications/luci-app-nikki/root/usr/share/rpcd/acl.d/luci-app-nikki.json:3
|
||||
msgid "Grant access to nikki procedures"
|
||||
msgstr ""
|
||||
msgstr "授予访问 nikki 程序的权限"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:87
|
||||
msgid "Group"
|
||||
@@ -471,11 +479,11 @@ msgstr "忽略嗅探的域名"
|
||||
msgid "Inbound Config"
|
||||
msgstr "入站配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:107
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:110
|
||||
msgid "Inbound Interface"
|
||||
msgstr "入站接口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:102
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:105
|
||||
msgid "LAN Proxy"
|
||||
msgstr "局域网代理"
|
||||
|
||||
@@ -501,11 +509,11 @@ msgid "Match Process"
|
||||
msgstr "匹配进程"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:350
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:513
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:514
|
||||
msgid "Matcher"
|
||||
msgstr "匹配"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:541
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:542
|
||||
msgid "Memory Conservative Loader"
|
||||
msgstr "为内存受限设备优化的加载器"
|
||||
|
||||
@@ -517,7 +525,7 @@ msgstr "混合端口"
|
||||
msgid "Mixin Config"
|
||||
msgstr "混入配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:565
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:566
|
||||
msgid "Mixin File Content"
|
||||
msgstr "混入文件内容"
|
||||
|
||||
@@ -541,14 +549,14 @@ msgstr "DNS 服务器"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:38
|
||||
#: applications/luci-app-nikki/root/usr/share/luci/menu.d/luci-app-nikki.json:3
|
||||
msgid "Nikki"
|
||||
msgstr ""
|
||||
msgstr "Nikki"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:524
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:525
|
||||
msgid "No Resolve"
|
||||
msgstr "不解析"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:447
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:517
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:518
|
||||
msgid "Node"
|
||||
msgstr "节点"
|
||||
|
||||
@@ -608,7 +616,7 @@ msgstr "覆盖按协议嗅探"
|
||||
msgid "Password"
|
||||
msgstr "密码"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:567
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:568
|
||||
msgid "Please go to the editor tab to edit the file for mixin"
|
||||
msgstr "请前往编辑器标签编辑用于混入的文件"
|
||||
|
||||
@@ -620,7 +628,7 @@ msgstr "端口"
|
||||
msgid "Prefer"
|
||||
msgstr "优先"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510
|
||||
msgid "Process Name"
|
||||
msgstr "进程名"
|
||||
|
||||
@@ -638,7 +646,7 @@ msgid "Protocol"
|
||||
msgstr "协议"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:99
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:159
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:162
|
||||
msgid "Proxy"
|
||||
msgstr "代理"
|
||||
|
||||
@@ -749,7 +757,7 @@ msgstr "嗅探器配置"
|
||||
msgid "Stack"
|
||||
msgstr "栈"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:540
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:541
|
||||
msgid "Standard Loader"
|
||||
msgstr "标准加载器"
|
||||
|
||||
@@ -892,14 +900,14 @@ msgstr "统一延迟"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:359
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:365
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:371
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:533
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:539
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:544
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:547
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:550
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:553
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:557
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:563
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:534
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:540
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:545
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:548
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:551
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:554
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:558
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:564
|
||||
msgid "Unmodified"
|
||||
msgstr "不修改"
|
||||
|
||||
|
||||
@@ -17,12 +17,12 @@ msgid "API Secret"
|
||||
msgstr "API 密鑰"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:69
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:119
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:122
|
||||
msgid "Access Control"
|
||||
msgstr "存取控制"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:169
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:174
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:172
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:177
|
||||
msgid "All Port"
|
||||
msgstr "所有埠"
|
||||
|
||||
@@ -63,15 +63,15 @@ msgstr "行為"
|
||||
msgid "Block Mode"
|
||||
msgstr "黑名單模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:162
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:165
|
||||
msgid "Bypass"
|
||||
msgstr "繞過"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:164
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:167
|
||||
msgid "Bypass China Mainland IP"
|
||||
msgstr "繞過中國大陸 IP"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:177
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:180
|
||||
msgid "Bypass DSCP"
|
||||
msgstr "繞過 DSCP"
|
||||
|
||||
@@ -92,8 +92,8 @@ msgstr "選擇設定檔"
|
||||
msgid "Clear Log"
|
||||
msgstr "清空日誌"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:170
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:175
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:173
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:178
|
||||
msgid "Commonly Used Port"
|
||||
msgstr "常用埠"
|
||||
|
||||
@@ -121,6 +121,10 @@ msgstr "核心版本"
|
||||
msgid "Cron Expression"
|
||||
msgstr "Cron 表達式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:102
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:228
|
||||
msgid "DNS Config"
|
||||
msgstr "DNS 設定"
|
||||
@@ -137,23 +141,23 @@ msgstr "DNS 模式"
|
||||
msgid "Debug Log"
|
||||
msgstr "除錯日誌"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508
|
||||
msgid "Destination IP"
|
||||
msgstr "目標 IP"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:512
|
||||
msgid "Destination IP Geo"
|
||||
msgstr "目標 IP(地理位置)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509
|
||||
msgid "Destination Port"
|
||||
msgstr "目標埠"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:167
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:170
|
||||
msgid "Destination TCP Port to Proxy"
|
||||
msgstr "要代理的 TCP 目標埠"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:172
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:175
|
||||
msgid "Destination UDP Port to Proxy"
|
||||
msgstr "要代理的 UDP 目標埠"
|
||||
|
||||
@@ -182,7 +186,7 @@ msgstr "直連模式"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:372
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:558
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:38
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:45
|
||||
msgid "Disable"
|
||||
@@ -213,15 +217,15 @@ msgstr "DoH 優先使用 HTTP/3"
|
||||
msgid "Domain Name"
|
||||
msgstr "網域名稱"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511
|
||||
msgid "Domain Name Geo"
|
||||
msgstr "網域名稱(地理位置)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:506
|
||||
msgid "Domain Name Keyword"
|
||||
msgstr "網域名稱(關鍵字)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:506
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507
|
||||
msgid "Domain Name Regex"
|
||||
msgstr "網域名稱(正則表達式)"
|
||||
|
||||
@@ -229,6 +233,10 @@ msgstr "網域名稱(正則表達式)"
|
||||
msgid "Domain Name Suffix"
|
||||
msgstr "網域名稱(後綴)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505
|
||||
msgid "Domain Name Wildcard"
|
||||
msgstr "網域名稱(通配符)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:168
|
||||
msgid "Edit Authentications"
|
||||
msgstr "編輯身分驗證"
|
||||
@@ -296,13 +304,13 @@ msgstr "編輯器"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:399
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:427
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:496
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:567
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:560
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:568
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:33
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:77
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:104
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:127
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:107
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:130
|
||||
msgid "Enable"
|
||||
msgstr "啟用"
|
||||
|
||||
@@ -387,39 +395,39 @@ msgstr "一般設定"
|
||||
msgid "Generate & Download"
|
||||
msgstr "生成並下載"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:537
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:538
|
||||
msgid "GeoData Loader"
|
||||
msgstr "GeoData 載入器"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:531
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:532
|
||||
msgid "GeoIP Format"
|
||||
msgstr "GeoIP 格式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:552
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:553
|
||||
msgid "GeoIP(ASN) Url"
|
||||
msgstr "GeoIP(ASN) 下載網址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:549
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:550
|
||||
msgid "GeoIP(DAT) Url"
|
||||
msgstr "GeoIP(DAT) 下載網址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:546
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:547
|
||||
msgid "GeoIP(MMDB) Url"
|
||||
msgstr "GeoIP(MMDB) 下載網址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:543
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:544
|
||||
msgid "GeoSite Url"
|
||||
msgstr "GeoSite 下載網址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:555
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:556
|
||||
msgid "GeoX Auto Update"
|
||||
msgstr "定時更新 GeoX 檔案"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:529
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:530
|
||||
msgid "GeoX Config"
|
||||
msgstr "GeoX 設定"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:561
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:562
|
||||
msgid "GeoX Update Interval"
|
||||
msgstr "GeoX 檔案更新間隔"
|
||||
|
||||
@@ -471,11 +479,11 @@ msgstr "忽略嗅探的網域名稱"
|
||||
msgid "Inbound Config"
|
||||
msgstr "入站設定"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:107
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:110
|
||||
msgid "Inbound Interface"
|
||||
msgstr "入站介面"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:102
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:105
|
||||
msgid "LAN Proxy"
|
||||
msgstr "區域網路代理"
|
||||
|
||||
@@ -501,11 +509,11 @@ msgid "Match Process"
|
||||
msgstr "匹配程序"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:350
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:513
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:514
|
||||
msgid "Matcher"
|
||||
msgstr "匹配器"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:541
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:542
|
||||
msgid "Memory Conservative Loader"
|
||||
msgstr "為記憶體受限裝置最佳化的載入器"
|
||||
|
||||
@@ -517,7 +525,7 @@ msgstr "混合埠"
|
||||
msgid "Mixin Config"
|
||||
msgstr "混入設定"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:565
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:566
|
||||
msgid "Mixin File Content"
|
||||
msgstr "混入檔案內容"
|
||||
|
||||
@@ -543,12 +551,12 @@ msgstr "DNS 伺服器"
|
||||
msgid "Nikki"
|
||||
msgstr "Nikki"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:524
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:525
|
||||
msgid "No Resolve"
|
||||
msgstr "不解析"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:447
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:517
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:518
|
||||
msgid "Node"
|
||||
msgstr "節點"
|
||||
|
||||
@@ -608,7 +616,7 @@ msgstr "覆寫按協定嗅探"
|
||||
msgid "Password"
|
||||
msgstr "密碼"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:567
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:568
|
||||
msgid "Please go to the editor tab to edit the file for mixin"
|
||||
msgstr "請前往編輯器標籤編輯用於混入的檔案"
|
||||
|
||||
@@ -620,7 +628,7 @@ msgstr "埠"
|
||||
msgid "Prefer"
|
||||
msgstr "優先"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510
|
||||
msgid "Process Name"
|
||||
msgstr "程序名稱"
|
||||
|
||||
@@ -638,7 +646,7 @@ msgid "Protocol"
|
||||
msgstr "協定"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:99
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:159
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:162
|
||||
msgid "Proxy"
|
||||
msgstr "代理"
|
||||
|
||||
@@ -749,7 +757,7 @@ msgstr "嗅探器設定"
|
||||
msgid "Stack"
|
||||
msgstr "堆疊"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:540
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:541
|
||||
msgid "Standard Loader"
|
||||
msgstr "標準載入器"
|
||||
|
||||
@@ -892,14 +900,14 @@ msgstr "統一延遲"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:359
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:365
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:371
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:533
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:539
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:544
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:547
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:550
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:553
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:557
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:563
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:534
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:540
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:545
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:548
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:551
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:554
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:558
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:564
|
||||
msgid "Unmodified"
|
||||
msgstr "不修改"
|
||||
|
||||
|
||||
@@ -84,6 +84,8 @@ function index()
|
||||
entry({"admin", "services", appname, "update_rules"}, call("update_rules")).leaf = true
|
||||
entry({"admin", "services", appname, "subscribe_del_node"}, call("subscribe_del_node")).leaf = true
|
||||
entry({"admin", "services", appname, "subscribe_del_all"}, call("subscribe_del_all")).leaf = true
|
||||
entry({"admin", "services", appname, "subscribe_manual"}, call("subscribe_manual")).leaf = true
|
||||
entry({"admin", "services", appname, "subscribe_manual_all"}, call("subscribe_manual_all")).leaf = true
|
||||
|
||||
--[[rule_list]]
|
||||
entry({"admin", "services", appname, "read_rulelist"}, call("read_rulelist")).leaf = true
|
||||
@@ -721,3 +723,51 @@ function subscribe_del_all()
|
||||
luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua truncate > /dev/null 2>&1")
|
||||
http.status(200, "OK")
|
||||
end
|
||||
|
||||
function subscribe_manual()
|
||||
local section = http.formvalue("section") or ""
|
||||
local current_url = http.formvalue("url") or ""
|
||||
if section == "" or current_url == "" then
|
||||
http_write_json({ success = false, msg = "Missing section or URL, skip." })
|
||||
return
|
||||
end
|
||||
local uci_url = api.sh_uci_get(appname, section, "url")
|
||||
if not uci_url or uci_url == "" then
|
||||
http_write_json({ success = false, msg = i18n.translate("Please save and apply before manually subscribing.") })
|
||||
return
|
||||
end
|
||||
if uci_url ~= current_url then
|
||||
api.sh_uci_set(appname, section, "url", current_url, true)
|
||||
end
|
||||
luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start " .. section .. " manual >/dev/null 2>&1 &")
|
||||
http_write_json({ success = true, msg = "Subscribe triggered." })
|
||||
end
|
||||
|
||||
function subscribe_manual_all()
|
||||
local sections = http.formvalue("sections") or ""
|
||||
local urls = http.formvalue("urls") or ""
|
||||
if sections == "" or urls == "" then
|
||||
http_write_json({ success = false, msg = "Missing section or URL, skip." })
|
||||
return
|
||||
end
|
||||
local section_list = util.split(sections, ",")
|
||||
local url_list = util.split(urls, ",")
|
||||
-- 检查是否存在未保存配置
|
||||
for i, section in ipairs(section_list) do
|
||||
local uci_url = api.sh_uci_get(appname, section, "url")
|
||||
if not uci_url or uci_url == "" then
|
||||
http_write_json({ success = false, msg = i18n.translate("Please save and apply before manually subscribing.") })
|
||||
return
|
||||
end
|
||||
end
|
||||
-- 保存有变动的url
|
||||
for i, section in ipairs(section_list) do
|
||||
local current_url = url_list[i] or ""
|
||||
local uci_url = api.sh_uci_get(appname, section, "url")
|
||||
if current_url ~= "" and uci_url ~= current_url then
|
||||
api.sh_uci_set(appname, section, "url", current_url, true)
|
||||
end
|
||||
end
|
||||
luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start all manual >/dev/null 2>&1 &")
|
||||
http_write_json({ success = true, msg = "Subscribe triggered." })
|
||||
end
|
||||
|
||||
@@ -147,15 +147,15 @@ function o.cfgvalue(self, section)
|
||||
translate("Delete All Subscribe Node"))
|
||||
end
|
||||
|
||||
o = s:option(Button, "_update", translate("Manual subscription All"))
|
||||
o.inputstyle = "apply"
|
||||
function o.write(t, n)
|
||||
luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start all manual > /dev/null 2>&1 &")
|
||||
m.no_commit = true
|
||||
luci.http.redirect(api.url("log"))
|
||||
o = s:option(DummyValue, "_update", translate("Manual subscription All"))
|
||||
o.rawhtml = true
|
||||
o.cfgvalue = function(self, section)
|
||||
return string.format([[
|
||||
<button type="button" class="cbi-button cbi-button-apply" onclick="ManualSubscribeAll()">%s</button>]],
|
||||
translate("Manual subscription All"))
|
||||
end
|
||||
|
||||
s = m:section(TypedSection, "subscribe_list", "", "<font color='red'>" .. translate("Please input the subscription url first, save and submit before manual subscription.") .. "</font>")
|
||||
s = m:section(TypedSection, "subscribe_list", "", "<font color='red'>" .. translate("When adding a new subscription, please save and apply before manually subscribing. If you only change the subscription URL, you can subscribe manually, and the system will save it automatically.") .. "</font>")
|
||||
s.addremove = true
|
||||
s.anonymous = true
|
||||
s.sortable = true
|
||||
@@ -217,12 +217,12 @@ function o.cfgvalue(self, section)
|
||||
remark, translate("Delete the subscribed node"))
|
||||
end
|
||||
|
||||
o = s:option(Button, "_update", translate("Manual subscription"))
|
||||
o.inputstyle = "apply"
|
||||
function o.write(t, n)
|
||||
luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start " .. n .. " manual > /dev/null 2>&1 &")
|
||||
m.no_commit = true
|
||||
luci.http.redirect(api.url("log"))
|
||||
o = s:option(DummyValue, "_update", translate("Manual subscription"))
|
||||
o.rawhtml = true
|
||||
o.cfgvalue = function(self, section)
|
||||
return string.format([[
|
||||
<button type="button" class="cbi-button cbi-button-apply" onclick="ManualSubscribe('%s')">%s</button>]],
|
||||
section, translate("Manual subscription"))
|
||||
end
|
||||
|
||||
s:append(Template(appname .. "/node_subscribe/js"))
|
||||
|
||||
@@ -126,7 +126,8 @@ function uci_save(cursor, config, commit, apply)
|
||||
end
|
||||
|
||||
function sh_uci_get(config, section, option)
|
||||
exec_call(string.format("uci -q get %s.%s.%s", config, section, option))
|
||||
local _, val = exec_call(string.format("uci -q get %s.%s.%s", config, section, option))
|
||||
return val
|
||||
end
|
||||
|
||||
function sh_uci_set(config, section, option, val, commit)
|
||||
|
||||
@@ -3,6 +3,8 @@ local api = require "luci.passwall.api"
|
||||
-%>
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
var appname = "<%= api.appname %>"
|
||||
|
||||
function confirmDeleteNode(remark) {
|
||||
if (!confirm("<%:Delete the subscribed node%>: " + remark + " ?"))
|
||||
return false;
|
||||
@@ -34,5 +36,78 @@ local api = require "luci.passwall.api"
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
function ManualSubscribe(sectionId) {
|
||||
var selector = "input#cbid\\." + appname + "\\." + sectionId + "\\.url, input#widget\\.cbid\\." + appname + "\\." + sectionId + "\\.url";
|
||||
var urlInput = document.querySelector(selector);
|
||||
var currentUrl = urlInput ? urlInput.value.trim() : "";
|
||||
if (!currentUrl) {
|
||||
alert("<%:Subscribe URL cannot be empty.%>");
|
||||
return;
|
||||
}
|
||||
|
||||
fetch('<%= api.url("subscribe_manual") %>?section='
|
||||
+ encodeURIComponent(sectionId)
|
||||
+ '&url='
|
||||
+ encodeURIComponent(currentUrl))
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (!data.success) {
|
||||
alert(data.msg || "Operation failed");
|
||||
} else {
|
||||
window.location.href = '<%= api.url("log") %>'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function ManualSubscribeAll() {
|
||||
var sectionIds = [];
|
||||
var urls = [];
|
||||
|
||||
var table = document.getElementById("cbi-" + appname + "-subscribe_list");
|
||||
var editBtns = table ? table.getElementsByClassName("cbi-button cbi-button-edit") : [];
|
||||
|
||||
for (var i = 0; i < editBtns.length; i++) {
|
||||
var btn = editBtns[i];
|
||||
var onclickStr = btn.getAttribute("onclick");
|
||||
if (!onclickStr) continue;
|
||||
|
||||
var id = onclickStr.substring(onclickStr.lastIndexOf('/') + 1, onclickStr.length - 1);
|
||||
if (!id) continue;
|
||||
|
||||
var selector = "input#cbid\\." + appname + "\\." + id + "\\.url, input#widget\\.cbid\\." + appname + "\\." + id + "\\.url";
|
||||
var urlInput = document.querySelector(selector);
|
||||
var currentUrl = urlInput ? urlInput.value.trim() : "";
|
||||
if (!currentUrl) {
|
||||
alert("<%:Subscribe URL cannot be empty.%>");
|
||||
return;
|
||||
}
|
||||
|
||||
sectionIds.push(id);
|
||||
urls.push(currentUrl);
|
||||
}
|
||||
|
||||
if (sectionIds.length === 0) {
|
||||
//alert("No subscriptions found.");
|
||||
return;
|
||||
}
|
||||
|
||||
var params = new URLSearchParams();
|
||||
params.append("sections", sectionIds.join(","));
|
||||
params.append("urls", urls.join(","));
|
||||
|
||||
fetch('<%= api.url("subscribe_manual_all") %>', {
|
||||
method: 'POST',
|
||||
body: params
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (!data.success) {
|
||||
alert(data.msg || "Operation failed");
|
||||
} else {
|
||||
window.location.href = '<%= api.url("log") %>'
|
||||
}
|
||||
});
|
||||
}
|
||||
//]]>
|
||||
</script>
|
||||
|
||||
@@ -1072,8 +1072,14 @@ msgstr "订阅网址"
|
||||
msgid "Subscribe URL Access Method"
|
||||
msgstr "订阅网址访问方式"
|
||||
|
||||
msgid "Please input the subscription url first, save and submit before manual subscription."
|
||||
msgstr "请输入订阅网址保存应用后再手动订阅。"
|
||||
msgid "When adding a new subscription, please save and apply before manually subscribing. If you only change the subscription URL, you can subscribe manually, and the system will save it automatically."
|
||||
msgstr "新增订阅请先保存并应用后再手动订阅;如仅修改订阅地址,可直接手动订阅,系统将自动保存。"
|
||||
|
||||
msgid "Please save and apply before manually subscribing."
|
||||
msgstr "请先保存并应用后再手动订阅。"
|
||||
|
||||
msgid "Subscribe URL cannot be empty."
|
||||
msgstr "订阅网址不能为空。"
|
||||
|
||||
msgid "Subscribe via proxy"
|
||||
msgstr "通过代理订阅"
|
||||
|
||||
@@ -1913,7 +1913,6 @@ local execute = function()
|
||||
local raw_data = api.trim(stdout)
|
||||
local old_md5 = value.md5 or ""
|
||||
local new_md5 = luci.sys.exec("md5sum " .. tmp_file .. " 2>/dev/null | awk '{print $1}'"):gsub("\n", "")
|
||||
os.remove(tmp_file)
|
||||
if not manual_sub and old_md5 == new_md5 then
|
||||
log('订阅:【' .. remark .. '】没有变化,无需更新。')
|
||||
else
|
||||
@@ -1924,6 +1923,7 @@ local execute = function()
|
||||
fail_list[#fail_list + 1] = value
|
||||
end
|
||||
end
|
||||
luci.sys.call("rm -f " .. tmp_file)
|
||||
allowInsecure_default = nil
|
||||
filter_keyword_mode_default = uci:get(appname, "@global_subscribe[0]", "filter_keyword_mode") or "0"
|
||||
filter_keyword_discard_list_default = uci:get(appname, "@global_subscribe[0]", "filter_discard_list") or {}
|
||||
|
||||
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=nikki
|
||||
PKG_VERSION:=2025.06.25
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
|
||||
@@ -40,18 +40,18 @@ proxy_transparent_proxy=$(uci -q get nikki.proxy.transparent_proxy); [ -n "$prox
|
||||
uci add nikki router_access_control
|
||||
uci set nikki.@router_access_control[-1].enabled=1
|
||||
proxy_bypass_user=$(uci -q get nikki.proxy.bypass_user); [ -n "$proxy_bypass_user" ] && {
|
||||
for user in $proxy_bypass_user; do
|
||||
uci add_list nikki.@router_access_control[-1].user="$user"
|
||||
for router_access_control_user in $proxy_bypass_user; do
|
||||
uci add_list nikki.@router_access_control[-1].user="$router_access_control_user"
|
||||
done
|
||||
}
|
||||
proxy_bypass_group=$(uci -q get nikki.proxy.bypass_group); [ -n "$proxy_bypass_group" ] && {
|
||||
for group in $proxy_bypass_group; do
|
||||
uci add_list nikki.@router_access_control[-1].group="$group"
|
||||
for router_access_control_group in $proxy_bypass_group; do
|
||||
uci add_list nikki.@router_access_control[-1].group="$router_access_control_group"
|
||||
done
|
||||
}
|
||||
proxy_bypass_cgroup=$(uci -q get nikki.proxy.bypass_cgroup); [ -n "$proxy_bypass_cgroup" ] && {
|
||||
for cgroup in $proxy_bypass_cgroup; do
|
||||
uci add_list nikki.@router_access_control[-1].cgroup="$cgroup"
|
||||
for router_access_control_cgroup in $proxy_bypass_cgroup; do
|
||||
uci add_list nikki.@router_access_control[-1].cgroup="$router_access_control_cgroup"
|
||||
done
|
||||
}
|
||||
uci set nikki.@router_access_control[-1].proxy=0
|
||||
@@ -129,11 +129,11 @@ proxy_tun_interval=$(uci -q get nikki.proxy.tun_interval); [ -z "$proxy_tun_inte
|
||||
|
||||
# since v1.23.1
|
||||
uci show nikki | grep -o -E 'nikki.@router_access_control\[[[:digit:]]+\]=router_access_control' | cut -d '=' -f 1 | while read -r router_access_control; do
|
||||
for cgroup in $(uci -q get "$router_access_control.cgroup"); do
|
||||
[ -d "/sys/fs/cgroup/$cgroup" ] && continue
|
||||
[ -d "/sys/fs/cgroup/services/$cgroup" ] && {
|
||||
uci del_list "$router_access_control.cgroup=$cgroup"
|
||||
uci add_list "$router_access_control.cgroup=services/$cgroup"
|
||||
for router_access_control_cgroup in $(uci -q get "$router_access_control.cgroup"); do
|
||||
[ -d "/sys/fs/cgroup/$router_access_control_cgroup" ] && continue
|
||||
[ -d "/sys/fs/cgroup/services/$router_access_control_cgroup" ] && {
|
||||
uci del_list "$router_access_control.cgroup=$router_access_control_cgroup"
|
||||
uci add_list "$router_access_control.cgroup=services/$router_access_control_cgroup"
|
||||
}
|
||||
done
|
||||
done
|
||||
@@ -143,6 +143,19 @@ env_disable_safe_path_check=$(uci -q get nikki.env.disable_safe_path_check); [ -
|
||||
|
||||
env_skip_system_ipv6_check=$(uci -q get nikki.env.skip_system_ipv6_check); [ -z "$env_skip_system_ipv6_check" ] && uci set nikki.env.skip_system_ipv6_check=0
|
||||
|
||||
# since v1.23.3
|
||||
uci show nikki | grep -o -E 'nikki.@router_access_control\[[[:digit:]]+\]=router_access_control' | cut -d '=' -f 1 | while read -r router_access_control; do
|
||||
router_access_control_proxy=$(uci -q get "$router_access_control.proxy")
|
||||
router_access_control_dns=$(uci -q get "$router_access_control.dns")
|
||||
[ -z "$router_access_control_dns" ] && uci set "$router_access_control.dns=$router_access_control_proxy"
|
||||
done
|
||||
|
||||
uci show nikki | grep -o -E 'nikki.@lan_access_control\[[[:digit:]]+\]=lan_access_control' | cut -d '=' -f 1 | while read -r lan_access_control; do
|
||||
lan_access_control_proxy=$(uci -q get "$lan_access_control.proxy")
|
||||
lan_access_control_dns=$(uci -q get "$lan_access_control.dns")
|
||||
[ -z "$lan_access_control_dns" ] && uci set "$lan_access_control.dns=$lan_access_control_proxy"
|
||||
done
|
||||
|
||||
# commit
|
||||
uci commit nikki
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
access_control['group'] = filter(uci_array(access_control['group']), (x) => index(groups, x) >= 0);
|
||||
access_control['cgroup'] = filter(uci_array(access_control['cgroup']), (x) => index(cgroups, x) >= 0);
|
||||
access_control['proxy'] = uci_bool(access_control['proxy']);
|
||||
access_control['dns'] = uci_bool(access_control['dns']);
|
||||
push(router_access_control, access_control);
|
||||
});
|
||||
|
||||
@@ -63,6 +64,7 @@
|
||||
access_control['ip6'] = uci_array(access_control['ip6']);
|
||||
access_control['mac'] = uci_array(access_control['mac']);
|
||||
access_control['proxy'] = uci_bool(access_control['proxy']);
|
||||
access_control['dns'] = uci_bool(access_control['dns']);
|
||||
push(lan_access_control, access_control);
|
||||
});
|
||||
|
||||
@@ -182,20 +184,20 @@ table inet nikki {
|
||||
{% for (let access_control in router_access_control): %}
|
||||
{% if (access_control['enabled']): %}
|
||||
{% if (length(access_control['user']) == 0 && length(access_control['group']) == 0 && length(access_control['cgroup']) == 0): %}
|
||||
meta l4proto { tcp, udp } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
meta l4proto { tcp, udp } th dport 53 counter {% if (access_control.dns == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% else %}
|
||||
{% if (length(access_control['user']) > 0): %}
|
||||
meta l4proto { tcp, udp } meta skuid { {{ join(', ', access_control['user']) }} } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
meta l4proto { tcp, udp } meta skuid { {{ join(', ', access_control['user']) }} } th dport 53 counter {% if (access_control.dns == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['group']) > 0): %}
|
||||
meta l4proto { tcp, udp } meta skgid { {{ join(', ', access_control['group']) }} } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
meta l4proto { tcp, udp } meta skgid { {{ join(', ', access_control['group']) }} } th dport 53 counter {% if (access_control.dns == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (cgroups_version == 2 && length(access_control['cgroup']) > 0): %}
|
||||
{% for (let cgroup in access_control['cgroup']): %}
|
||||
meta l4proto { tcp, udp } socket cgroupv2 level {{ length(split(cgroup, '/')) }} "{{ cgroup }}" th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
meta l4proto { tcp, udp } socket cgroupv2 level {{ length(split(cgroup, '/')) }} "{{ cgroup }}" th dport 53 counter {% if (access_control.dns == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
@@ -288,19 +290,19 @@ table inet nikki {
|
||||
{% for (let access_control in lan_access_control): %}
|
||||
{% if (access_control['enabled']): %}
|
||||
{% if (length(access_control['ip']) == 0 && length(access_control['ip6']) == 0 && length(access_control['mac']) == 0): %}
|
||||
meta l4proto { tcp, udp } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
meta l4proto { tcp, udp } th dport 53 counter {% if (access_control.dns == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% else %}
|
||||
{% if (length(access_control['ip']) > 0): %}
|
||||
meta l4proto { tcp, udp } ip saddr { {{ join(', ', access_control['ip']) }} } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
meta l4proto { tcp, udp } ip saddr { {{ join(', ', access_control['ip']) }} } th dport 53 counter {% if (access_control.dns == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['ip6']) > 0): %}
|
||||
meta l4proto { tcp, udp } ip6 saddr { {{ join(', ', access_control['ip6']) }} } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
meta l4proto { tcp, udp } ip6 saddr { {{ join(', ', access_control['ip6']) }} } th dport 53 counter {% if (access_control.dns == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['mac']) > 0): %}
|
||||
meta l4proto { tcp, udp } ether saddr { {{ join(', ', access_control['mac']) }} } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
meta l4proto { tcp, udp } ether saddr { {{ join(', ', access_control['mac']) }} } th dport 53 counter {% if (access_control.dns == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
+1
-3
@@ -56,10 +56,8 @@ jobs:
|
||||
- name: Update and commit changes
|
||||
if: env.needs_update == 'true'
|
||||
run: |
|
||||
go get -u
|
||||
go get golang.org/x/mobile@latest
|
||||
go get github.com/xtls/xray-core@${{ env.LATEST_TAG_SHA }}
|
||||
go get gvisor.dev/gvisor@go
|
||||
go get github.com/OmarTariq612/goech@v0.0.0-20240405204721-8e2e1dafd3a0
|
||||
go mod tidy -v
|
||||
git diff
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ module github.com/2dust/AndroidLibXrayLite
|
||||
go 1.24.3
|
||||
|
||||
require (
|
||||
github.com/xtls/xray-core v1.250516.1-0.20250608135303-fbae89d017ae
|
||||
golang.org/x/mobile v0.0.0-20250606033058-a2a15c67f36f
|
||||
github.com/xtls/xray-core v1.250608.1-0.20250724021908-4f45c5faa5f1
|
||||
golang.org/x/mobile v0.0.0-20250711185624-d5bb5ecc55c0
|
||||
)
|
||||
|
||||
require (
|
||||
@@ -13,42 +13,40 @@ require (
|
||||
github.com/cloudflare/circl v1.6.1 // indirect
|
||||
github.com/dgryski/go-metro v0.0.0-20250106013310-edb8663e5e33 // indirect
|
||||
github.com/ghodss/yaml v1.0.1-0.20220118164431-d8423dcdf344 // indirect
|
||||
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
|
||||
github.com/google/btree v1.1.3 // indirect
|
||||
github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a // indirect
|
||||
github.com/gorilla/websocket v1.5.3 // indirect
|
||||
github.com/juju/ratelimit v1.0.2 // indirect
|
||||
github.com/klauspost/compress v1.18.0 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
|
||||
github.com/onsi/ginkgo/v2 v2.23.4 // indirect
|
||||
github.com/kr/text v0.2.0 // indirect
|
||||
github.com/pelletier/go-toml v1.9.5 // indirect
|
||||
github.com/pires/go-proxyproto v0.8.1 // indirect
|
||||
github.com/quic-go/qpack v0.5.1 // indirect
|
||||
github.com/quic-go/quic-go v0.52.0 // indirect
|
||||
github.com/refraction-networking/utls v1.7.3 // indirect
|
||||
github.com/quic-go/quic-go v0.54.0 // indirect
|
||||
github.com/refraction-networking/utls v1.8.0 // indirect
|
||||
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect
|
||||
github.com/rogpeppe/go-internal v1.14.1 // indirect
|
||||
github.com/sagernet/sing v0.6.11 // indirect
|
||||
github.com/sagernet/sing-shadowsocks v0.2.8 // indirect
|
||||
github.com/seiflotfy/cuckoofilter v0.0.0-20240715131351-a2f2c23f1771 // indirect
|
||||
github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e // indirect
|
||||
github.com/vishvananda/netlink v1.3.1 // indirect
|
||||
github.com/vishvananda/netns v0.0.5 // indirect
|
||||
github.com/xtls/reality v0.0.0-20250608132114-50752aec6bfb // indirect
|
||||
go.uber.org/automaxprocs v1.6.0 // indirect
|
||||
github.com/xtls/reality v0.0.0-20250723121014-c6320729d93b // indirect
|
||||
go.uber.org/mock v0.5.2 // indirect
|
||||
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
|
||||
golang.org/x/crypto v0.39.0 // indirect
|
||||
golang.org/x/mod v0.25.0 // indirect
|
||||
golang.org/x/net v0.41.0 // indirect
|
||||
golang.org/x/sync v0.15.0 // indirect
|
||||
golang.org/x/sys v0.33.0 // indirect
|
||||
golang.org/x/text v0.26.0 // indirect
|
||||
golang.org/x/crypto v0.40.0 // indirect
|
||||
golang.org/x/mod v0.26.0 // indirect
|
||||
golang.org/x/net v0.42.0 // indirect
|
||||
golang.org/x/sync v0.16.0 // indirect
|
||||
golang.org/x/sys v0.34.0 // indirect
|
||||
golang.org/x/text v0.27.0 // indirect
|
||||
golang.org/x/time v0.12.0 // indirect
|
||||
golang.org/x/tools v0.34.0 // indirect
|
||||
golang.org/x/tools v0.35.0 // indirect
|
||||
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
|
||||
golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
|
||||
google.golang.org/grpc v1.73.0 // indirect
|
||||
google.golang.org/grpc v1.74.2 // indirect
|
||||
google.golang.org/protobuf v1.36.6 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
gvisor.dev/gvisor v0.0.0-20250606001031-fa4c4dd86b43 // indirect
|
||||
|
||||
@@ -4,6 +4,7 @@ github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7X
|
||||
github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA=
|
||||
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
|
||||
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
@@ -12,12 +13,10 @@ github.com/dgryski/go-metro v0.0.0-20250106013310-edb8663e5e33 h1:ucRHb6/lvW/+mT
|
||||
github.com/dgryski/go-metro v0.0.0-20250106013310-edb8663e5e33/go.mod h1:c9O8+fpSOX1DM8cPNSkX/qsBWdkD4yd2dpciOWQjpBw=
|
||||
github.com/ghodss/yaml v1.0.1-0.20220118164431-d8423dcdf344 h1:Arcl6UOIS/kgO2nW3A65HN+7CMjSDP/gofXL4CZt1V4=
|
||||
github.com/ghodss/yaml v1.0.1-0.20220118164431-d8423dcdf344/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I=
|
||||
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
|
||||
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
|
||||
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
|
||||
github.com/golang/mock v1.7.0-rc.1 h1:YojYx61/OLFsiv6Rw1Z96LpldJIy31o+UHmwAUMJ6/U=
|
||||
github.com/golang/mock v1.7.0-rc.1/go.mod h1:s42URUywIqd+OcERslBJvOjepvNymP31m3q8d/GkuRs=
|
||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||
@@ -26,8 +25,6 @@ github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
|
||||
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a h1://KbezygeMJZCSHH+HgUZiTeSoiuFspbMg1ge+eFj18=
|
||||
github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
||||
@@ -38,32 +35,28 @@ github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zt
|
||||
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
|
||||
github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=
|
||||
github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
|
||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE=
|
||||
github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE=
|
||||
github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus=
|
||||
github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8=
|
||||
github.com/onsi/gomega v1.36.3 h1:hID7cr8t3Wp26+cYnfcjR6HpJ00fdogN6dqZ1t6IylU=
|
||||
github.com/onsi/gomega v1.36.3/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0=
|
||||
github.com/miekg/dns v1.1.67 h1:kg0EHj0G4bfT5/oOys6HhZw4vmMlnoZ+gDu8tJ/AlI0=
|
||||
github.com/miekg/dns v1.1.67/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps=
|
||||
github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
|
||||
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
|
||||
github.com/pires/go-proxyproto v0.8.1 h1:9KEixbdJfhrbtjpz/ZwCdWDD2Xem0NZ38qMYaASJgp0=
|
||||
github.com/pires/go-proxyproto v0.8.1/go.mod h1:ZKAAyp3cgy5Y5Mo4n9AlScrkCZwUy0g3Jf+slqQVcuU=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
|
||||
github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
|
||||
github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI=
|
||||
github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg=
|
||||
github.com/quic-go/quic-go v0.52.0 h1:/SlHrCRElyaU6MaEPKqKr9z83sBg2v4FLLvWM+Z47pA=
|
||||
github.com/quic-go/quic-go v0.52.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ=
|
||||
github.com/refraction-networking/utls v1.7.3 h1:L0WRhHY7Oq1T0zkdzVZMR6zWZv+sXbHB9zcuvsAEqCo=
|
||||
github.com/refraction-networking/utls v1.7.3/go.mod h1:TUhh27RHMGtQvjQq+RyO11P6ZNQNBb3N0v7wsEjKAIQ=
|
||||
github.com/quic-go/quic-go v0.54.0 h1:6s1YB9QotYI6Ospeiguknbp2Znb/jZYjZLRXn9kMQBg=
|
||||
github.com/quic-go/quic-go v0.54.0/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY=
|
||||
github.com/refraction-networking/utls v1.8.0 h1:L38krhiTAyj9EeiQQa2sg+hYb4qwLCqdMcpZrRfbONE=
|
||||
github.com/refraction-networking/utls v1.8.0/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM=
|
||||
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 h1:f/FNXud6gA3MNr8meMVVGxhp+QBTqY91tM8HjEuMjGg=
|
||||
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3/go.mod h1:HgjTstvQsPGkxUsCd2KWxErBblirPizecHcpD3ffK+s=
|
||||
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
|
||||
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
|
||||
github.com/sagernet/sing v0.6.11 h1:BXYwLYw2srH1Kdp1vlZgrK+1lAan5i2UdZ4lPWqEgUU=
|
||||
github.com/sagernet/sing v0.6.11/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
|
||||
github.com/sagernet/sing-shadowsocks v0.2.8 h1:PURj5PRoAkqeHh2ZW205RWzN9E9RtKCVCzByXruQWfE=
|
||||
@@ -80,63 +73,61 @@ github.com/vishvananda/netlink v1.3.1 h1:3AEMt62VKqz90r0tmNhog0r/PpWKmrEShJU0wJW
|
||||
github.com/vishvananda/netlink v1.3.1/go.mod h1:ARtKouGSTGchR8aMwmkzC0qiNPrrWO5JS/XMVl45+b4=
|
||||
github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY=
|
||||
github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
|
||||
github.com/xtls/reality v0.0.0-20250608132114-50752aec6bfb h1:X6ziJCMsFF8Ac/0F3W7+UbFdHZTu+r5nZ/smksHVxNQ=
|
||||
github.com/xtls/reality v0.0.0-20250608132114-50752aec6bfb/go.mod h1:yD47RN65bDLZgyHWMfFDiqlzrq4usDMt/Xzsk6tMbhw=
|
||||
github.com/xtls/xray-core v1.250516.1-0.20250608135303-fbae89d017ae h1:Be9MicJQI+Iup03zNG7QMEidpbJj3b4//IM8jIAnLKY=
|
||||
github.com/xtls/xray-core v1.250516.1-0.20250608135303-fbae89d017ae/go.mod h1:MkfIs2WZ5VLtZHAwDKosSS05Kx5zFFOzvly7Hy6pfPs=
|
||||
github.com/xtls/reality v0.0.0-20250723121014-c6320729d93b h1:HOOsQYu7/EzvpegY7uHiaeI9H/6OsHAOkREnJthdUW8=
|
||||
github.com/xtls/reality v0.0.0-20250723121014-c6320729d93b/go.mod h1:XxvnCCgBee4WWE0bc4E+a7wbk8gkJ/rS0vNVNtC5qp0=
|
||||
github.com/xtls/xray-core v1.250608.1-0.20250724021908-4f45c5faa5f1 h1:5YFdWAwmW/pB7aMltnUmsRC8QY37817Q2m9WqVUVxPU=
|
||||
github.com/xtls/xray-core v1.250608.1-0.20250724021908-4f45c5faa5f1/go.mod h1:dqSs+9mmzvOZRFxTaS0ktkQYG8TD9naApQPdnp/MUzA=
|
||||
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
|
||||
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
|
||||
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
|
||||
go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
|
||||
go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
|
||||
go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY=
|
||||
go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
|
||||
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
|
||||
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
|
||||
go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
|
||||
go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8=
|
||||
go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
|
||||
go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
|
||||
go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
|
||||
go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
|
||||
go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
|
||||
go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
|
||||
go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
|
||||
go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
|
||||
go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko=
|
||||
go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o=
|
||||
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M=
|
||||
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
|
||||
golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
|
||||
golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
|
||||
golang.org/x/mobile v0.0.0-20250606033058-a2a15c67f36f h1:/n+PL2HlfqeSiDCuhdBbRNlGS/g2fM4OHufalHaTVG8=
|
||||
golang.org/x/mobile v0.0.0-20250606033058-a2a15c67f36f/go.mod h1:ESkJ836Z6LpG6mTVAhA48LpfW/8fNR0ifStlH2axyfg=
|
||||
golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
|
||||
golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
|
||||
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
|
||||
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
|
||||
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
|
||||
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
|
||||
golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
|
||||
golang.org/x/mobile v0.0.0-20250711185624-d5bb5ecc55c0 h1:Z6EFcPz8e1cx0ge5jWCwqafndPjdsDQf8fk4Kw3pJoI=
|
||||
golang.org/x/mobile v0.0.0-20250711185624-d5bb5ecc55c0/go.mod h1:kqVs191xxTTCd39tk8zK1UD3jyCS1SPrMHTpJ9ujxZg=
|
||||
golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
|
||||
golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
|
||||
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
|
||||
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
|
||||
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
|
||||
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
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.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
|
||||
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
|
||||
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
|
||||
golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
|
||||
golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
|
||||
golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
|
||||
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
|
||||
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
|
||||
golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo=
|
||||
golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg=
|
||||
golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
|
||||
golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
|
||||
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg=
|
||||
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI=
|
||||
golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb h1:whnFRlWMcXI9d+ZbWg+4sHnLp52d5yiIPUxMBSt4X9A=
|
||||
golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb/go.mod h1:rpwXGsirqLqN2L0JDJQlwOboGHmptD5ZD6T2VmcqhTw=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
|
||||
google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok=
|
||||
google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc=
|
||||
google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4=
|
||||
google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM=
|
||||
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
|
||||
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
|
||||
@@ -12,8 +12,8 @@ android {
|
||||
applicationId = "com.v2ray.ang"
|
||||
minSdk = 21
|
||||
targetSdk = 35
|
||||
versionCode = 659
|
||||
versionName = "1.10.9"
|
||||
versionCode = 660
|
||||
versionName = "1.10.10"
|
||||
multiDexEnabled = true
|
||||
|
||||
val abiFilterList = (properties["ABI_FILTERS"] as? String)?.split(';')
|
||||
|
||||
@@ -887,6 +887,24 @@ object V2rayConfigManager {
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
if (v2rayConfig.routing.domainStrategy == "IPIfNonMatch") {
|
||||
v2rayConfig.routing.rules.add(
|
||||
RulesBean(
|
||||
ip = arrayListOf("0.0.0.0/0", "::/0"),
|
||||
balancerTag = "proxy-round",
|
||||
type = "field"
|
||||
)
|
||||
)
|
||||
} else {
|
||||
v2rayConfig.routing.rules.add(
|
||||
RulesBean(
|
||||
network = "tcp,udp",
|
||||
balancerTag = "proxy-round",
|
||||
type = "field"
|
||||
)
|
||||
)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e(AppConfig.TAG, "Failed to configure balance", e)
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ toasty = "1.5.2"
|
||||
editorkit = "2.9.0"
|
||||
core = "3.5.3"
|
||||
workRuntimeKtx = "2.10.2"
|
||||
lifecycleViewmodelKtx = "2.9.1"
|
||||
lifecycleViewmodelKtx = "2.9.2"
|
||||
multidex = "2.0.1"
|
||||
mockitoMockitoInline = "5.2.0"
|
||||
flexbox = "3.0.0"
|
||||
|
||||
@@ -27,6 +27,22 @@
|
||||
- 国际化多语言
|
||||
- 批量生成多个头像
|
||||
|
||||
## 深度了解项目
|
||||
|
||||
想要深入了解项目架构、代码组织和技术实现?
|
||||
|
||||
🔍 **[访问 DeepWiki 智能文档](https://deepwiki.com/Codennnn/vue-color-avatar)**
|
||||
|
||||
DeepWiki 使用 AI 技术自动分析了整个项目,提供:
|
||||
|
||||
- 📋 项目架构概览
|
||||
- 🔍 代码结构分析
|
||||
- 💡 核心功能解读
|
||||
- 🗺️ 组件依赖关系图
|
||||
- 🚀 实现细节与最佳实践
|
||||
|
||||
_非常适合新手快速上手和贡献者深入理解项目_
|
||||
|
||||
## 设计资源
|
||||
|
||||
- 设计师:[@Micah](https://www.figma.com/@Micah) on Figma
|
||||
|
||||
@@ -27,6 +27,22 @@ Features you might be interested in:
|
||||
- i18n
|
||||
- Generate multiple avatars in batch
|
||||
|
||||
## Project Documentation
|
||||
|
||||
Want to dive deeper into the project architecture, code organization, and technical implementation?
|
||||
|
||||
🔍 **[Explore DeepWiki AI Documentation](https://deepwiki.com/Codennnn/vue-color-avatar)**
|
||||
|
||||
DeepWiki uses AI technology to automatically analyze the entire project, providing:
|
||||
|
||||
- 📋 Project architecture overview
|
||||
- 🔍 Code structure analysis
|
||||
- 💡 Core functionality insights
|
||||
- 🗺️ Component dependency diagrams
|
||||
- 🚀 Implementation details and best practices
|
||||
|
||||
_Perfect for newcomers to get started quickly and contributors to understand the project deeply_
|
||||
|
||||
## Assets
|
||||
|
||||
> **Note**
|
||||
|
||||
+3
-2
@@ -11,8 +11,9 @@
|
||||
## Donation & NFTs
|
||||
|
||||
- **ETH/USDT/USDC: `0xDc3Fe44F0f25D13CACb1C4896CD0D321df3146Ee`**
|
||||
- **Project X NFT: [Announcement of NFTs by Project X](https://github.com/XTLS/Xray-core/discussions/3633)**
|
||||
- **REALITY NFT: [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113)**
|
||||
- **Project X NFT: https://opensea.io/item/ethereum/0x5ee362866001613093361eb8569d59c4141b76d1/1**
|
||||
- **REALITY NFT: https://opensea.io/item/ethereum/0x5ee362866001613093361eb8569d59c4141b76d1/2**
|
||||
- **Related links: https://opensea.io/collection/xtls, [Announcement of NFTs by Project X](https://github.com/XTLS/Xray-core/discussions/3633), [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113)**
|
||||
|
||||
## License
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ import (
|
||||
var (
|
||||
Version_x byte = 25
|
||||
Version_y byte = 7
|
||||
Version_z byte = 23
|
||||
Version_z byte = 24
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -11,7 +11,6 @@ import (
|
||||
"strings"
|
||||
"syscall"
|
||||
|
||||
"github.com/cloudflare/circl/sign/mldsa/mldsa65"
|
||||
"github.com/xtls/xray-core/common/errors"
|
||||
"github.com/xtls/xray-core/common/net"
|
||||
"github.com/xtls/xray-core/common/platform/filesystem"
|
||||
@@ -613,11 +612,10 @@ func (c *REALITYConfig) Build() (proto.Message, error) {
|
||||
config.ServerNames = c.ServerNames
|
||||
config.MaxTimeDiff = c.MaxTimeDiff
|
||||
|
||||
if mldsa65Seed, err := base64.RawURLEncoding.DecodeString(c.Mldsa65Seed); err != nil || len(mldsa65Seed) != 32 {
|
||||
return nil, errors.New(`invalid "mldsa65Seed": `, c.Mldsa65Seed)
|
||||
} else {
|
||||
_, key := mldsa65.NewKeyFromSeed((*[32]byte)(mldsa65Seed))
|
||||
config.Mldsa65Key = key.Bytes()
|
||||
if c.Mldsa65Seed != "" {
|
||||
if config.Mldsa65Seed, err = base64.RawURLEncoding.DecodeString(c.Mldsa65Seed); err != nil || len(config.Mldsa65Seed) != 32 {
|
||||
return nil, errors.New(`invalid "mldsa65Seed": `, c.Mldsa65Seed)
|
||||
}
|
||||
}
|
||||
|
||||
config.LimitFallbackUpload = new(reality.LimitFallback)
|
||||
@@ -655,8 +653,10 @@ func (c *REALITYConfig) Build() (proto.Message, error) {
|
||||
if _, err = hex.Decode(config.ShortId, []byte(c.ShortId)); err != nil {
|
||||
return nil, errors.New(`invalid "shortId": `, c.ShortId)
|
||||
}
|
||||
if config.Mldsa65Verify, err = base64.RawURLEncoding.DecodeString(c.Mldsa65Verify); err != nil || len(config.Mldsa65Verify) != 1952 {
|
||||
return nil, errors.New(`invalid "mldsa65Verify": `, c.Mldsa65Verify)
|
||||
if c.Mldsa65Verify != "" {
|
||||
if config.Mldsa65Verify, err = base64.RawURLEncoding.DecodeString(c.Mldsa65Verify); err != nil || len(config.Mldsa65Verify) != 1952 {
|
||||
return nil, errors.New(`invalid "mldsa65Verify": `, c.Mldsa65Verify)
|
||||
}
|
||||
}
|
||||
if c.SpiderX == "" {
|
||||
c.SpiderX = "/"
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/cloudflare/circl/sign/mldsa/mldsa65"
|
||||
"github.com/xtls/reality"
|
||||
"github.com/xtls/xray-core/common/errors"
|
||||
"github.com/xtls/xray-core/transport/internet"
|
||||
@@ -27,13 +28,15 @@ func (c *Config) GetREALITYConfig() *reality.Config {
|
||||
MaxClientVer: c.MaxClientVer,
|
||||
MaxTimeDiff: time.Duration(c.MaxTimeDiff) * time.Millisecond,
|
||||
|
||||
Mldsa65Key: c.Mldsa65Key,
|
||||
|
||||
NextProtos: nil, // should be nil
|
||||
SessionTicketsDisabled: true,
|
||||
|
||||
KeyLogWriter: KeyLogWriterFromConfig(c),
|
||||
}
|
||||
if c.Mldsa65Seed != nil {
|
||||
_, key := mldsa65.NewKeyFromSeed((*[32]byte)(c.Mldsa65Seed))
|
||||
config.Mldsa65Key = key.Bytes()
|
||||
}
|
||||
if c.LimitFallbackUpload != nil {
|
||||
config.LimitFallbackUpload.AfterBytes = c.LimitFallbackUpload.AfterBytes
|
||||
config.LimitFallbackUpload.BytesPerSec = c.LimitFallbackUpload.BytesPerSec
|
||||
|
||||
@@ -35,7 +35,7 @@ type Config struct {
|
||||
MaxClientVer []byte `protobuf:"bytes,8,opt,name=max_client_ver,json=maxClientVer,proto3" json:"max_client_ver,omitempty"`
|
||||
MaxTimeDiff uint64 `protobuf:"varint,9,opt,name=max_time_diff,json=maxTimeDiff,proto3" json:"max_time_diff,omitempty"`
|
||||
ShortIds [][]byte `protobuf:"bytes,10,rep,name=short_ids,json=shortIds,proto3" json:"short_ids,omitempty"`
|
||||
Mldsa65Key []byte `protobuf:"bytes,11,opt,name=mldsa65_key,json=mldsa65Key,proto3" json:"mldsa65_key,omitempty"`
|
||||
Mldsa65Seed []byte `protobuf:"bytes,11,opt,name=mldsa65_seed,json=mldsa65Seed,proto3" json:"mldsa65_seed,omitempty"`
|
||||
LimitFallbackUpload *LimitFallback `protobuf:"bytes,12,opt,name=limit_fallback_upload,json=limitFallbackUpload,proto3" json:"limit_fallback_upload,omitempty"`
|
||||
LimitFallbackDownload *LimitFallback `protobuf:"bytes,13,opt,name=limit_fallback_download,json=limitFallbackDownload,proto3" json:"limit_fallback_download,omitempty"`
|
||||
Fingerprint string `protobuf:"bytes,21,opt,name=Fingerprint,proto3" json:"Fingerprint,omitempty"`
|
||||
@@ -148,9 +148,9 @@ func (x *Config) GetShortIds() [][]byte {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *Config) GetMldsa65Key() []byte {
|
||||
func (x *Config) GetMldsa65Seed() []byte {
|
||||
if x != nil {
|
||||
return x.Mldsa65Key
|
||||
return x.Mldsa65Seed
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -293,7 +293,7 @@ var file_transport_internet_reality_config_proto_rawDesc = []byte{
|
||||
0x72, 0x6e, 0x65, 0x74, 0x2f, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2f, 0x63, 0x6f, 0x6e,
|
||||
0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1f, 0x78, 0x72, 0x61, 0x79, 0x2e,
|
||||
0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
||||
0x65, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x96, 0x06, 0x0a, 0x06, 0x43,
|
||||
0x65, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x98, 0x06, 0x0a, 0x06, 0x43,
|
||||
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73,
|
||||
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a,
|
||||
@@ -312,55 +312,55 @@ var file_transport_internet_reality_config_proto_rawDesc = []byte{
|
||||
0x65, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61,
|
||||
0x78, 0x54, 0x69, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x68, 0x6f,
|
||||
0x72, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x73, 0x68,
|
||||
0x6f, 0x72, 0x74, 0x49, 0x64, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x6c, 0x64, 0x73, 0x61, 0x36,
|
||||
0x35, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x6d, 0x6c, 0x64,
|
||||
0x73, 0x61, 0x36, 0x35, 0x4b, 0x65, 0x79, 0x12, 0x62, 0x0a, 0x15, 0x6c, 0x69, 0x6d, 0x69, 0x74,
|
||||
0x5f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64,
|
||||
0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x74, 0x72,
|
||||
0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
|
||||
0x2e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x46, 0x61,
|
||||
0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x13, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x46, 0x61, 0x6c,
|
||||
0x6c, 0x62, 0x61, 0x63, 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x66, 0x0a, 0x17, 0x6c,
|
||||
0x69, 0x6d, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x64, 0x6f,
|
||||
0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x78,
|
||||
0x72, 0x61, 0x79, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e,
|
||||
0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x4c,
|
||||
0x69, 0x6d, 0x69, 0x74, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x15, 0x6c, 0x69,
|
||||
0x6d, 0x69, 0x74, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x44, 0x6f, 0x77, 0x6e, 0x6c,
|
||||
0x6f, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69,
|
||||
0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72,
|
||||
0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f,
|
||||
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76,
|
||||
0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
|
||||
0x5f, 0x6b, 0x65, 0x79, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c,
|
||||
0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x69,
|
||||
0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x64,
|
||||
0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x6c, 0x64, 0x73, 0x61, 0x36, 0x35, 0x5f, 0x76, 0x65, 0x72, 0x69,
|
||||
0x66, 0x79, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6d, 0x6c, 0x64, 0x73, 0x61, 0x36,
|
||||
0x35, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x69, 0x64, 0x65,
|
||||
0x72, 0x5f, 0x78, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x70, 0x69, 0x64, 0x65,
|
||||
0x72, 0x58, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x79, 0x18, 0x1b,
|
||||
0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x73, 0x70, 0x69, 0x64, 0x65, 0x72, 0x59, 0x12, 0x24, 0x0a,
|
||||
0x0e, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6c, 0x6f, 0x67, 0x18,
|
||||
0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4b, 0x65, 0x79,
|
||||
0x4c, 0x6f, 0x67, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x46, 0x61, 0x6c,
|
||||
0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x62,
|
||||
0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x66, 0x74, 0x65,
|
||||
0x72, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f,
|
||||
0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62,
|
||||
0x79, 0x74, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, 0x2d, 0x0a, 0x13, 0x62, 0x75,
|
||||
0x72, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65,
|
||||
0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x62, 0x75, 0x72, 0x73, 0x74, 0x42, 0x79,
|
||||
0x74, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x42, 0x7f, 0x0a, 0x23, 0x63, 0x6f, 0x6d,
|
||||
0x6f, 0x72, 0x74, 0x49, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x6c, 0x64, 0x73, 0x61, 0x36,
|
||||
0x35, 0x5f, 0x73, 0x65, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6d, 0x6c,
|
||||
0x64, 0x73, 0x61, 0x36, 0x35, 0x53, 0x65, 0x65, 0x64, 0x12, 0x62, 0x0a, 0x15, 0x6c, 0x69, 0x6d,
|
||||
0x69, 0x74, 0x5f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x75, 0x70, 0x6c, 0x6f,
|
||||
0x61, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e,
|
||||
0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
||||
0x65, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74,
|
||||
0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x13, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x46,
|
||||
0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x66, 0x0a,
|
||||
0x17, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f,
|
||||
0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e,
|
||||
0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e,
|
||||
0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79,
|
||||
0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78,
|
||||
0x74, 0x6c, 0x73, 0x2f, 0x78, 0x72, 0x61, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72,
|
||||
0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
|
||||
0x2f, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0xaa, 0x02, 0x1f, 0x58, 0x72, 0x61, 0x79, 0x2e,
|
||||
0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
||||
0x65, 0x74, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x33,
|
||||
0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x15,
|
||||
0x6c, 0x69, 0x6d, 0x69, 0x74, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x44, 0x6f, 0x77,
|
||||
0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70,
|
||||
0x72, 0x69, 0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x46, 0x69, 0x6e, 0x67,
|
||||
0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65,
|
||||
0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65,
|
||||
0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c,
|
||||
0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75,
|
||||
0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74,
|
||||
0x5f, 0x69, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x68, 0x6f, 0x72, 0x74,
|
||||
0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x6c, 0x64, 0x73, 0x61, 0x36, 0x35, 0x5f, 0x76, 0x65,
|
||||
0x72, 0x69, 0x66, 0x79, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6d, 0x6c, 0x64, 0x73,
|
||||
0x61, 0x36, 0x35, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x69,
|
||||
0x64, 0x65, 0x72, 0x5f, 0x78, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x70, 0x69,
|
||||
0x64, 0x65, 0x72, 0x58, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x79,
|
||||
0x18, 0x1b, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x73, 0x70, 0x69, 0x64, 0x65, 0x72, 0x59, 0x12,
|
||||
0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6c, 0x6f,
|
||||
0x67, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4b,
|
||||
0x65, 0x79, 0x4c, 0x6f, 0x67, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x46,
|
||||
0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x66, 0x74, 0x65, 0x72,
|
||||
0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x66,
|
||||
0x74, 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x62, 0x79, 0x74, 0x65,
|
||||
0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52,
|
||||
0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, 0x2d, 0x0a, 0x13,
|
||||
0x62, 0x75, 0x72, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f,
|
||||
0x73, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x62, 0x75, 0x72, 0x73, 0x74,
|
||||
0x42, 0x79, 0x74, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x42, 0x7f, 0x0a, 0x23, 0x63,
|
||||
0x6f, 0x6d, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72,
|
||||
0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x69,
|
||||
0x74, 0x79, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
|
||||
0x2f, 0x78, 0x74, 0x6c, 0x73, 0x2f, 0x78, 0x72, 0x61, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f,
|
||||
0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
||||
0x65, 0x74, 0x2f, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0xaa, 0x02, 0x1f, 0x58, 0x72, 0x61,
|
||||
0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65,
|
||||
0x72, 0x6e, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x62, 0x06, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
@@ -18,7 +18,7 @@ message Config {
|
||||
uint64 max_time_diff = 9;
|
||||
repeated bytes short_ids = 10;
|
||||
|
||||
bytes mldsa65_key = 11;
|
||||
bytes mldsa65_seed = 11;
|
||||
LimitFallback limit_fallback_upload = 12;
|
||||
LimitFallback limit_fallback_download = 13;
|
||||
|
||||
|
||||
+1
-1
@@ -1902,7 +1902,7 @@ The following extractors use this feature:
|
||||
* `backend`: Backend API to use for extraction - one of `streaks` (default) or `brightcove` (deprecated)
|
||||
|
||||
#### vimeo
|
||||
* `client`: Client to extract video data from. The currently available clients are `android`, `ios`, and `web`. Only one client can be used. The `android` client is used by default. If account cookies or credentials are used for authentication, then the `web` client is used by default. The `web` client only works with authentication. The `ios` client only works with previously cached OAuth tokens
|
||||
* `client`: Client to extract video data from. The currently available clients are `android`, `ios`, and `web`. Only one client can be used. The `web` client is used by default. The `web` client only works with account cookies or login credentials. The `android` and `ios` clients only work with previously cached OAuth tokens
|
||||
* `original_format_policy`: Policy for when to try extracting original formats. One of `always`, `never`, or `auto`. The default `auto` policy tries to avoid exceeding the web client's API rate-limit by only making an extra request when Vimeo publicizes the video's downloadability
|
||||
|
||||
**Note**: These options may be changed/removed in the future without concern for backward compatibility
|
||||
|
||||
@@ -49,7 +49,7 @@ class VimeoBaseInfoExtractor(InfoExtractor):
|
||||
'Cannot download embed-only video without embedding URL. Please call yt-dlp '
|
||||
'with the URL of the page that embeds this video.')
|
||||
|
||||
_DEFAULT_CLIENT = 'android'
|
||||
_DEFAULT_CLIENT = 'web'
|
||||
_DEFAULT_AUTHED_CLIENT = 'web'
|
||||
_CLIENT_HEADERS = {
|
||||
'Accept': 'application/vnd.vimeo.*+json; version=3.4.10',
|
||||
@@ -58,7 +58,7 @@ class VimeoBaseInfoExtractor(InfoExtractor):
|
||||
_CLIENT_CONFIGS = {
|
||||
'android': {
|
||||
'CACHE_KEY': 'oauth-token-android',
|
||||
'CACHE_ONLY': False,
|
||||
'CACHE_ONLY': True,
|
||||
'VIEWER_JWT': False,
|
||||
'REQUIRES_AUTH': False,
|
||||
'AUTH': 'NzRmYTg5YjgxMWExY2JiNzUwZDg1MjhkMTYzZjQ4YWYyOGEyZGJlMTp4OGx2NFd3QnNvY1lkamI2UVZsdjdDYlNwSDUrdm50YzdNNThvWDcwN1JrenJGZC9tR1lReUNlRjRSVklZeWhYZVpRS0tBcU9YYzRoTGY2Z1dlVkJFYkdJc0dMRHpoZWFZbU0reDRqZ1dkZ1diZmdIdGUrNUM5RVBySlM0VG1qcw==',
|
||||
@@ -88,6 +88,7 @@ class VimeoBaseInfoExtractor(InfoExtractor):
|
||||
),
|
||||
},
|
||||
'web': {
|
||||
'CACHE_ONLY': False,
|
||||
'VIEWER_JWT': True,
|
||||
'REQUIRES_AUTH': True,
|
||||
'USER_AGENT': None,
|
||||
@@ -142,7 +143,6 @@ class VimeoBaseInfoExtractor(InfoExtractor):
|
||||
'service': 'vimeo',
|
||||
'token': viewer['xsrft'],
|
||||
}
|
||||
self._set_vimeo_cookie('vuid', viewer['vuid'])
|
||||
try:
|
||||
self._download_webpage(
|
||||
self._LOGIN_URL, None, 'Logging in',
|
||||
@@ -151,16 +151,40 @@ class VimeoBaseInfoExtractor(InfoExtractor):
|
||||
'Referer': self._LOGIN_URL,
|
||||
})
|
||||
except ExtractorError as e:
|
||||
if isinstance(e.cause, HTTPError) and e.cause.status == 418:
|
||||
if isinstance(e.cause, HTTPError) and e.cause.status in (405, 418):
|
||||
raise ExtractorError(
|
||||
'Unable to log in: bad username or password',
|
||||
expected=True)
|
||||
raise ExtractorError('Unable to log in')
|
||||
|
||||
# Clear unauthenticated viewer info
|
||||
self._viewer_info = None
|
||||
|
||||
def _real_initialize(self):
|
||||
if self._LOGIN_REQUIRED and not self._is_logged_in:
|
||||
if self._is_logged_in:
|
||||
return
|
||||
|
||||
if self._LOGIN_REQUIRED:
|
||||
self.raise_login_required()
|
||||
|
||||
if self._DEFAULT_CLIENT != 'web':
|
||||
return
|
||||
|
||||
for client_name, client_config in self._CLIENT_CONFIGS.items():
|
||||
if not client_config['CACHE_ONLY']:
|
||||
continue
|
||||
|
||||
cache_key = client_config['CACHE_KEY']
|
||||
if cache_key not in self._oauth_tokens:
|
||||
if token := self.cache.load(self._NETRC_MACHINE, cache_key):
|
||||
self._oauth_tokens[cache_key] = token
|
||||
|
||||
if self._oauth_tokens.get(cache_key):
|
||||
self._DEFAULT_CLIENT = client_name
|
||||
self.write_debug(
|
||||
f'Found cached {client_name} token; using {client_name} as default API client')
|
||||
return
|
||||
|
||||
def _get_video_password(self):
|
||||
password = self.get_param('videopassword')
|
||||
if password is None:
|
||||
@@ -200,9 +224,6 @@ class VimeoBaseInfoExtractor(InfoExtractor):
|
||||
if vimeo_config:
|
||||
return self._parse_json(vimeo_config, video_id)
|
||||
|
||||
def _set_vimeo_cookie(self, name, value):
|
||||
self._set_cookie('vimeo.com', name, value)
|
||||
|
||||
def _parse_config(self, config, video_id):
|
||||
video_data = config['video']
|
||||
video_title = video_data.get('title')
|
||||
@@ -363,22 +384,26 @@ class VimeoBaseInfoExtractor(InfoExtractor):
|
||||
return f'Bearer {self._oauth_tokens[cache_key]}'
|
||||
|
||||
def _get_requested_client(self):
|
||||
default_client = self._DEFAULT_AUTHED_CLIENT if self._is_logged_in else self._DEFAULT_CLIENT
|
||||
if client := self._configuration_arg('client', [None], ie_key=VimeoIE)[0]:
|
||||
if client not in self._CLIENT_CONFIGS:
|
||||
raise ExtractorError(
|
||||
f'Unsupported API client "{client}" requested. '
|
||||
f'Supported clients are: {", ".join(self._CLIENT_CONFIGS)}', expected=True)
|
||||
self.write_debug(
|
||||
f'Using {client} API client as specified by extractor argument', only_once=True)
|
||||
return client
|
||||
|
||||
client = self._configuration_arg('client', [default_client], ie_key=VimeoIE)[0]
|
||||
if client not in self._CLIENT_CONFIGS:
|
||||
raise ExtractorError(
|
||||
f'Unsupported API client "{client}" requested. '
|
||||
f'Supported clients are: {", ".join(self._CLIENT_CONFIGS)}', expected=True)
|
||||
if self._is_logged_in:
|
||||
return self._DEFAULT_AUTHED_CLIENT
|
||||
|
||||
return client
|
||||
return self._DEFAULT_CLIENT
|
||||
|
||||
def _call_videos_api(self, video_id, unlisted_hash=None, path=None, *, force_client=None, query=None, **kwargs):
|
||||
client = force_client or self._get_requested_client()
|
||||
|
||||
client_config = self._CLIENT_CONFIGS[client]
|
||||
if client_config['REQUIRES_AUTH'] and not self._is_logged_in:
|
||||
self.raise_login_required(f'The {client} client requires authentication')
|
||||
self.raise_login_required(f'The {client} client only works when logged-in')
|
||||
|
||||
return self._download_json(
|
||||
join_nonempty(
|
||||
@@ -1192,7 +1217,6 @@ class VimeoIE(VimeoBaseInfoExtractor):
|
||||
raise ExtractorError(
|
||||
'This album is protected by a password, use the --video-password option',
|
||||
expected=True)
|
||||
self._set_vimeo_cookie('vuid', viewer['vuid'])
|
||||
try:
|
||||
self._download_json(
|
||||
f'https://vimeo.com/showcase/{album_id}/auth',
|
||||
@@ -1589,7 +1613,6 @@ class VimeoAlbumIE(VimeoBaseInfoExtractor):
|
||||
raise ExtractorError(
|
||||
'This album is protected by a password, use the --video-password option',
|
||||
expected=True)
|
||||
self._set_vimeo_cookie('vuid', viewer['vuid'])
|
||||
try:
|
||||
hashed_pass = self._download_json(
|
||||
f'https://vimeo.com/showcase/{album_id}/auth',
|
||||
|
||||
Reference in New Issue
Block a user