mirror of
https://github.com/bolucat/Archive.git
synced 2025-12-24 13:28:37 +08:00
Update On Wed Oct 29 19:43:11 CET 2025
This commit is contained in:
1
.github/update.log
vendored
1
.github/update.log
vendored
@@ -1165,3 +1165,4 @@ Update On Sat Oct 25 20:37:45 CEST 2025
|
||||
Update On Sun Oct 26 19:35:56 CET 2025
|
||||
Update On Mon Oct 27 19:43:18 CET 2025
|
||||
Update On Tue Oct 28 19:41:08 CET 2025
|
||||
Update On Wed Oct 29 19:43:03 CET 2025
|
||||
|
||||
6
clash-nyanpasu/backend/Cargo.lock
generated
6
clash-nyanpasu/backend/Cargo.lock
generated
@@ -2018,11 +2018,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ctrlc"
|
||||
version = "3.5.0"
|
||||
version = "3.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "881c5d0a13b2f1498e2306e82cbada78390e152d4b1378fb28a84f4dcd0dc4f3"
|
||||
checksum = "73736a89c4aff73035ba2ed2e565061954da00d4970fc9ac25dcc85a2a20d790"
|
||||
dependencies = [
|
||||
"dispatch",
|
||||
"dispatch2",
|
||||
"nix 0.30.1",
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
@@ -59,9 +59,9 @@
|
||||
"@iconify/json": "2.2.401",
|
||||
"@monaco-editor/react": "4.7.0",
|
||||
"@tanstack/react-query": "5.90.5",
|
||||
"@tanstack/react-router": "1.133.32",
|
||||
"@tanstack/react-router-devtools": "1.133.34",
|
||||
"@tanstack/router-plugin": "1.133.32",
|
||||
"@tanstack/react-router": "1.133.36",
|
||||
"@tanstack/react-router-devtools": "1.133.36",
|
||||
"@tanstack/router-plugin": "1.133.36",
|
||||
"@tauri-apps/plugin-clipboard-manager": "2.3.0",
|
||||
"@tauri-apps/plugin-dialog": "2.4.0",
|
||||
"@tauri-apps/plugin-fs": "2.4.2",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"manifest_version": 1,
|
||||
"latest": {
|
||||
"mihomo": "v1.19.15",
|
||||
"mihomo_alpha": "alpha-ff62386",
|
||||
"mihomo_alpha": "alpha-6bffbdd",
|
||||
"clash_rs": "v0.9.1",
|
||||
"clash_premium": "2023-09-05-gdcc8d87",
|
||||
"clash_rs_alpha": "0.9.1-alpha+sha.643fb1b"
|
||||
@@ -69,5 +69,5 @@
|
||||
"linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf"
|
||||
}
|
||||
},
|
||||
"updated_at": "2025-10-27T22:20:58.070Z"
|
||||
"updated_at": "2025-10-28T22:21:24.305Z"
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
"eslint-plugin-react-compiler": "19.1.0-rc.2",
|
||||
"eslint-plugin-react-hooks": "7.0.1",
|
||||
"globals": "16.4.0",
|
||||
"knip": "5.66.3",
|
||||
"knip": "5.66.4",
|
||||
"lint-staged": "16.2.6",
|
||||
"neostandard": "0.12.2",
|
||||
"npm-run-all2": "8.0.4",
|
||||
@@ -112,7 +112,7 @@
|
||||
},
|
||||
"packageManager": "pnpm@10.18.3",
|
||||
"engines": {
|
||||
"node": "22.20.0"
|
||||
"node": "22.21.1"
|
||||
},
|
||||
"pnpm": {
|
||||
"overrides": {
|
||||
|
||||
284
clash-nyanpasu/pnpm-lock.yaml
generated
284
clash-nyanpasu/pnpm-lock.yaml
generated
@@ -104,8 +104,8 @@ importers:
|
||||
specifier: 16.4.0
|
||||
version: 16.4.0
|
||||
knip:
|
||||
specifier: 5.66.3
|
||||
version: 5.66.3(@types/node@24.8.1)(typescript@5.9.3)
|
||||
specifier: 5.66.4
|
||||
version: 5.66.4(@types/node@24.8.1)(typescript@5.9.3)
|
||||
lint-staged:
|
||||
specifier: 16.2.6
|
||||
version: 16.2.6
|
||||
@@ -253,7 +253,7 @@ importers:
|
||||
version: 4.1.16
|
||||
'@tanstack/router-zod-adapter':
|
||||
specifier: 1.81.5
|
||||
version: 1.81.5(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)
|
||||
version: 1.81.5(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)
|
||||
'@tauri-apps/api':
|
||||
specifier: 2.8.0
|
||||
version: 2.8.0
|
||||
@@ -355,14 +355,14 @@ importers:
|
||||
specifier: 5.90.5
|
||||
version: 5.90.5(react@19.2.0)
|
||||
'@tanstack/react-router':
|
||||
specifier: 1.133.32
|
||||
version: 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
specifier: 1.133.36
|
||||
version: 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@tanstack/react-router-devtools':
|
||||
specifier: 1.133.34
|
||||
version: 1.133.34(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)
|
||||
specifier: 1.133.36
|
||||
version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)
|
||||
'@tanstack/router-plugin':
|
||||
specifier: 1.133.32
|
||||
version: 1.133.32(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))
|
||||
specifier: 1.133.36
|
||||
version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))
|
||||
'@tauri-apps/plugin-clipboard-manager':
|
||||
specifier: 2.3.0
|
||||
version: 2.3.0
|
||||
@@ -2103,8 +2103,8 @@ packages:
|
||||
'@napi-rs/wasm-runtime@0.2.11':
|
||||
resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==}
|
||||
|
||||
'@napi-rs/wasm-runtime@1.0.5':
|
||||
resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==}
|
||||
'@napi-rs/wasm-runtime@1.0.7':
|
||||
resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==}
|
||||
|
||||
'@nodelib/fs.scandir@2.1.5':
|
||||
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
|
||||
@@ -2375,98 +2375,98 @@ packages:
|
||||
'@oxc-project/types@0.74.0':
|
||||
resolution: {integrity: sha512-KOw/RZrVlHGhCXh1RufBFF7Nuo7HdY5w1lRJukM/igIl6x9qtz8QycDvZdzb4qnHO7znrPyo2sJrFJK2eKHgfQ==}
|
||||
|
||||
'@oxc-resolver/binding-android-arm-eabi@11.8.3':
|
||||
resolution: {integrity: sha512-er6onTUX8NMF5kBNGHCF8S6vxWVJS5BKO6SmLRW5nfZgHDHWsESH1YgyKpO6n6HBd/x58+7r9/1fxF3N8z911A==}
|
||||
'@oxc-resolver/binding-android-arm-eabi@11.12.0':
|
||||
resolution: {integrity: sha512-/IfGWLNdmS1kVYM2g+Xw4qXNWtCPZ/i5YMprflA8FC3vAjT4N0VucQcDxUPHxatQwre4qnhbFFWqRa1mz6Cgkw==}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
|
||||
'@oxc-resolver/binding-android-arm64@11.8.3':
|
||||
resolution: {integrity: sha512-VJMGaFYTu5YoZ0kpRhQQQoqNsYuAbPEHb/b/gEqpNpl/zHtvLWha8fYqTGtH7Wu9ajA2ESdWVqOzbBRMjQ/5qA==}
|
||||
'@oxc-resolver/binding-android-arm64@11.12.0':
|
||||
resolution: {integrity: sha512-H3Ehyinfx2VO8F5TwdaD/WY686Ia6J1H3LP0tgpNjlPGH2TrTniPERiwjqtOm/xHEef0KJvb/yfmUKLbHudhCA==}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@oxc-resolver/binding-darwin-arm64@11.8.3':
|
||||
resolution: {integrity: sha512-IipM4uDZNZ4GEvmq0g5iRS4Di3YoEhf/BdkvqIFq35rZA9EvYn/csxAJb05H7HDzbLENIUfMvP18eyHt3juU+A==}
|
||||
'@oxc-resolver/binding-darwin-arm64@11.12.0':
|
||||
resolution: {integrity: sha512-hmm+A/0WdEtIeBrPtUHoSTzJefrZkhGSrmv5pwELKiqNqd+/gctzmTlt6wWrU8BMIryDMT9fWqLSQ3+NYfqAEA==}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@oxc-resolver/binding-darwin-x64@11.8.3':
|
||||
resolution: {integrity: sha512-gJQnRKe60CNyx+KE7ffKouG15hIoV0mnM3fGGbXRUXW7hVYv2WIiKAJeNn/o/EQhT5i1GrfvskVZCHTwHljuxQ==}
|
||||
'@oxc-resolver/binding-darwin-x64@11.12.0':
|
||||
resolution: {integrity: sha512-g1tVu53EMfuRKs67o0PZR0+y/WXl/Tfn3d2ggjK3Hj17pQPcb9x1+Y6W7n4EjIDttwLZbCPCEr06X+aC03I45A==}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@oxc-resolver/binding-freebsd-x64@11.8.3':
|
||||
resolution: {integrity: sha512-UphzSWPIHKuVt6zDoNBzj03SfQIk73cBjfzQXK33asriLMv9kPrt2k5Aaea/ZB2bphv5MAf1BxyacYgT0hjBuA==}
|
||||
'@oxc-resolver/binding-freebsd-x64@11.12.0':
|
||||
resolution: {integrity: sha512-TiMatzvcVMSOiAx8sbnAw7UCfQpZDlm91ItywZrSHlQIJqDBipOmjIEYUMc2p823Y+fJ2ADL5UBjUB2kfqpedw==}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@oxc-resolver/binding-linux-arm-gnueabihf@11.8.3':
|
||||
resolution: {integrity: sha512-kjVGH0BIJTCefpNWcD9PrHYzXLMeofHzHqykgPc+OIBdv7KKjtE2FPeQ6PAJFzsB1BbwK0AOtKppajwfpyt1jw==}
|
||||
'@oxc-resolver/binding-linux-arm-gnueabihf@11.12.0':
|
||||
resolution: {integrity: sha512-zU+9UgxPIvfReqmRr/dqZt3387HPgcH0hA4u0QGE+280EFjBYYL2rxGDxK0L+keO6vc2+ITWVDXm9KIj+alofg==}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@oxc-resolver/binding-linux-arm-musleabihf@11.8.3':
|
||||
resolution: {integrity: sha512-e+BDNYfkOKQSSF8KMrD7FwbBzbN+9mn14pCJk5pLLH9Mtxv5EHB6LrVqLS4nbQt3ZxLwG6WWWlMPv1sdQhxNNQ==}
|
||||
'@oxc-resolver/binding-linux-arm-musleabihf@11.12.0':
|
||||
resolution: {integrity: sha512-dfO1rrOeELYWD/BewMCp81k1I3pOdtAi2VCKg/A1I8z0uI4OR6cThb5dV9fpHkj7zlb0Y5iZFPe+NTbI/u1MgQ==}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@oxc-resolver/binding-linux-arm64-gnu@11.8.3':
|
||||
resolution: {integrity: sha512-LD97VZB8KxJGEDSh4bzNExBK32nOAIPnmaKUU1bl6L3nd8YnhwK/l7RZPRsz//At/+0MGjf0Pg/fxYdW7OARjQ==}
|
||||
'@oxc-resolver/binding-linux-arm64-gnu@11.12.0':
|
||||
resolution: {integrity: sha512-JJNyN1ueryETKTUsG57+u0GDbtHKVcwcUoC6YyJmDdWE0o/3twXtHuS+F/121a2sVK8PKlROqGAev+STx3AuuQ==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@oxc-resolver/binding-linux-arm64-musl@11.8.3':
|
||||
resolution: {integrity: sha512-K9AUdi2Fd8RL4j5j2pACUcHbOawamt7nVn7yRI5+eOEfyn7bBsFvCVdKN4aKBLQxdAOFURK+uRWrVfR2xUkjww==}
|
||||
'@oxc-resolver/binding-linux-arm64-musl@11.12.0':
|
||||
resolution: {integrity: sha512-rQHoxL0H0WwYUuukPUscLyzWwTl/hyogptYsY+Ye6AggJEOuvgJxMum2glY7etGIGOXxrfjareHnNO1tNY7WYg==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@oxc-resolver/binding-linux-ppc64-gnu@11.8.3':
|
||||
resolution: {integrity: sha512-Ur5+jodHcL1lHlt7zye5K709qX4hagOdKequxrQYLaOC9zFJtpu+967PYw6bmedtnQERhyaGSfPzZ8u/TUgqWw==}
|
||||
'@oxc-resolver/binding-linux-ppc64-gnu@11.12.0':
|
||||
resolution: {integrity: sha512-XPUZSctO+FrC0314Tcth+GrTtzy2yaYqyl8weBMAbKFMwuV8VnR2SHg9dmtI9vkukmM3auOLj0Kqjpl3YXwXiw==}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
|
||||
'@oxc-resolver/binding-linux-riscv64-gnu@11.8.3':
|
||||
resolution: {integrity: sha512-RgJHdrTTONup/55Y/eqyrIw2R3hG/1vBMI7+WGLjiF5zxJmVO8tLYcQklV92MKDxrLL7O36GZTZ6mPk57TVf9w==}
|
||||
'@oxc-resolver/binding-linux-riscv64-gnu@11.12.0':
|
||||
resolution: {integrity: sha512-AmMjcP+6zHLF1JNq/p3yPEcXmZW/Xw5Xl19Zd0eBCSyGORJRuUOkcnyC8bwMO43b/G7PtausB83fclnFL5KZ3w==}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
|
||||
'@oxc-resolver/binding-linux-riscv64-musl@11.8.3':
|
||||
resolution: {integrity: sha512-zni4rfmy+JoR1ubY2puIgwR+3ATpmsIsZR8dzskKRuy+i4ghwo6uOQn3wXcMBiuY4yJ0XsOZBZe1OoAl1/rELw==}
|
||||
'@oxc-resolver/binding-linux-riscv64-musl@11.12.0':
|
||||
resolution: {integrity: sha512-K2/yFBqFQOKyVwQxYDAKqDtk2kS4g58aGyj/R1bvYPr2P7v7971aUG/5m2WD5u2zSqWBfu1o4PdhX0lsqvA3vQ==}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
|
||||
'@oxc-resolver/binding-linux-s390x-gnu@11.8.3':
|
||||
resolution: {integrity: sha512-7u96LbjV6cGcvfGopwDHiuhrasE+0YZPshZFDyEO4QGm8rc+R9XgSsvUUCspRTuwc/J70u7c0cxONm6TYECkyA==}
|
||||
'@oxc-resolver/binding-linux-s390x-gnu@11.12.0':
|
||||
resolution: {integrity: sha512-uSl4jo78tONGZtwsOA4ldT/OI7/hoHJhSMlGYE4Z/lzwMjkAaBdX4soAK5P/rL+U2yCJlRMnnoUckhXlZvDbSw==}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
|
||||
'@oxc-resolver/binding-linux-x64-gnu@11.8.3':
|
||||
resolution: {integrity: sha512-zgOg25vdttzLz1uCP/5hyMlLgczPSct8lBI8oBhh+oTjEmDTJdqWnjXgk/ugrQGw66j8Ud9eAZL+IWkHaaLSxA==}
|
||||
'@oxc-resolver/binding-linux-x64-gnu@11.12.0':
|
||||
resolution: {integrity: sha512-YjL8VAkbPyQ1kUuR6pOBk1O+EkxOoLROTa+ia1/AmFLuXYNltLGI1YxOY14i80cKpOf0Z59IXnlrY3coAI9NDQ==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@oxc-resolver/binding-linux-x64-musl@11.8.3':
|
||||
resolution: {integrity: sha512-xac1SimfZ8grHyn3V3RTptDhQ8sSVdF0j1CsGGpG6ODyku+LcNvhwy6fjxuaT3Z+Zgsi1wchXQNDA62YkDUvZQ==}
|
||||
'@oxc-resolver/binding-linux-x64-musl@11.12.0':
|
||||
resolution: {integrity: sha512-qpHPU0qqeJXh7cPzA+I+WWA6RxtRArfmSrhTXidbiQ08G5A1e55YQwExWkitB2rSqN6YFxnpfhHKo9hyhpyfSg==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@oxc-resolver/binding-wasm32-wasi@11.8.3':
|
||||
resolution: {integrity: sha512-zt2+ohZbPg0M9cADMLnImVRXXBJVd5tlOqzH9z4wdFTA1mHojIeSrHaW8c30ZzopbFIER0GTyY+YxAsf0bhIeQ==}
|
||||
'@oxc-resolver/binding-wasm32-wasi@11.12.0':
|
||||
resolution: {integrity: sha512-oqg80bERZAagWLqYmngnesE0/2miv4lST7+wiiZniD6gyb1SoRckwEkbTsytGutkudFtw7O61Pon6pNlOvyFaA==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
cpu: [wasm32]
|
||||
|
||||
'@oxc-resolver/binding-win32-arm64-msvc@11.8.3':
|
||||
resolution: {integrity: sha512-je6MDeDP9PI4TGG3mcQ1ELzA4Y1O7+Dwxnc4sCxm6MkAiCi6G5UMSKsXp1f/UlcTdQn3hOJOv7d1KK8MbvRpPw==}
|
||||
'@oxc-resolver/binding-win32-arm64-msvc@11.12.0':
|
||||
resolution: {integrity: sha512-qKH816ycEN9yR/TX91CP1/i6xyVNHKX9VEOYa3XzQROPVtcYG2F6A3ng/PhwpJvS1cmL/DlilhglZe9KWkhNjg==}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@oxc-resolver/binding-win32-ia32-msvc@11.8.3':
|
||||
resolution: {integrity: sha512-9GtBrZgJw3+dP0x/FHh/viiaQ+kgnVJr5jLG0ZDEci9vFOdc/XJkNXYs84mBlZcWK1HCj80VDBqqNGm4zYYIXA==}
|
||||
'@oxc-resolver/binding-win32-ia32-msvc@11.12.0':
|
||||
resolution: {integrity: sha512-3bgxubTlhzF6BwBnhGz5BTboarl1upuanEr6i0dncjfEcU+Z9xAOgbtA7Ip3G3EKDjE1objRKK+ny8PKJZ3b7Q==}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
|
||||
'@oxc-resolver/binding-win32-x64-msvc@11.8.3':
|
||||
resolution: {integrity: sha512-MoathdI2zWifsGPsgnZjYplEm2NJ4pZxu8eSCYCe+8TToDRpQ+D8BTcr8Fox2AyNEQdT57l/0LzID4812+3f/A==}
|
||||
'@oxc-resolver/binding-win32-x64-msvc@11.12.0':
|
||||
resolution: {integrity: sha512-rbiWYQWxwy+x7+KgNAoAGYIPB3xUclQlFVV3L5lwfsbp4PQPomJohHowlWgi3GRAEybM5+ZL9xny0YfpJOsthA==}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
@@ -3104,23 +3104,23 @@ packages:
|
||||
peerDependencies:
|
||||
react: ^18 || ^19
|
||||
|
||||
'@tanstack/react-router-devtools@1.133.34':
|
||||
resolution: {integrity: sha512-4Vlx2uHdCINLM47xtNR37B0yLGpoN4sOz0aQWmXfP6o3nj8MYvOjYEZIwA+JZ643PckgAstpLfGZmkh/eWgE/Q==}
|
||||
'@tanstack/react-router-devtools@1.133.36':
|
||||
resolution: {integrity: sha512-il+DNzc8Ia54N+HOmIlY10NBk7rp0N7Nyysk8eeC1ZSIXImC3MPchdAspwioE6DI7WfK+MfpTav2m9zoOL8wSQ==}
|
||||
engines: {node: '>=12'}
|
||||
peerDependencies:
|
||||
'@tanstack/react-router': ^1.133.32
|
||||
'@tanstack/react-router': ^1.133.36
|
||||
react: '>=18.0.0 || >=19.0.0'
|
||||
react-dom: '>=18.0.0 || >=19.0.0'
|
||||
|
||||
'@tanstack/react-router@1.133.32':
|
||||
resolution: {integrity: sha512-UqakhaFJ+r5S+b4/AvLux70Hk+1MpmwfKwbdV7vuM2bVRUSztM8xtcttVpzZwRV45Ls8YsStY58prEVdCpvkNg==}
|
||||
'@tanstack/react-router@1.133.36':
|
||||
resolution: {integrity: sha512-pT4d2uEucDQ3SAIQ0pLUw6RUKwkB5pHzpBB6otaoKpO0cAwHkRPi+p59DivuzSANJLHLVEiXyJCCk72EeHMRxA==}
|
||||
engines: {node: '>=12'}
|
||||
peerDependencies:
|
||||
react: '>=18.0.0 || >=19.0.0'
|
||||
react-dom: '>=18.0.0 || >=19.0.0'
|
||||
|
||||
'@tanstack/react-store@0.7.0':
|
||||
resolution: {integrity: sha512-S/Rq17HaGOk+tQHV/yrePMnG1xbsKZIl/VsNWnNXt4XW+tTY8dTlvpJH2ZQ3GRALsusG5K6Q3unAGJ2pd9W/Ng==}
|
||||
'@tanstack/react-store@0.8.0':
|
||||
resolution: {integrity: sha512-1vG9beLIuB7q69skxK9r5xiLN3ztzIPfSQSs0GfeqWGO2tGIyInZx0x1COhpx97RKaONSoAb8C3dxacWksm1ow==}
|
||||
peerDependencies:
|
||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
@@ -3138,15 +3138,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.133.28':
|
||||
resolution: {integrity: sha512-HErb1X9F+u4VzguJKafX1p5fSnNnfo7aK8Xxh5cICFMShPBxt9i1K45nUbQaRkf45N1tg4gJ3l8mlmwWRm9WWA==}
|
||||
'@tanstack/router-core@1.133.36':
|
||||
resolution: {integrity: sha512-VJ9kFduePsxgjhDW+uKxL6ol9ZpJlaUO2EI9Zmq8AA6uhW/LRg+0/365OZOZaVqNqvx2eKt3MZKHLN+29jd5Uw==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
'@tanstack/router-devtools-core@1.133.34':
|
||||
resolution: {integrity: sha512-NYjrYV/Gt8GlD72uIZakv9a2Z2O31n4J/7uOCU0K9pzSMNa0rmYSYHeaB9vzI9Ksv944mvvmOpDnGUpUhwNXAw==}
|
||||
'@tanstack/router-devtools-core@1.133.36':
|
||||
resolution: {integrity: sha512-jgXSCfWPLukcjXDf4thpk/0QgLXv61mrvmfh9xc8+xeC5TMeLyz2xBaTghniD2PtdF6eII3vMaTWOpMHj4+cVQ==}
|
||||
engines: {node: '>=12'}
|
||||
peerDependencies:
|
||||
'@tanstack/router-core': ^1.133.28
|
||||
'@tanstack/router-core': ^1.133.36
|
||||
csstype: ^3.0.10
|
||||
solid-js: '>=1.9.5'
|
||||
tiny-invariant: ^1.3.3
|
||||
@@ -3154,16 +3154,16 @@ packages:
|
||||
csstype:
|
||||
optional: true
|
||||
|
||||
'@tanstack/router-generator@1.133.29':
|
||||
resolution: {integrity: sha512-Nngp1i7ch22qqLkjsQwoyos8mawL5bG2GjHg8IMOzFbMR+dVQfh9gSkpkhUbLMv8TMb8Na31tyR0/tDr+E/NCA==}
|
||||
'@tanstack/router-generator@1.133.36':
|
||||
resolution: {integrity: sha512-3+pJBqkm95/zV7INyhbr688lp1PklZT3wtNNwW9oIxmsBiUJg5hqHWh7z4JgP9E+0D0KAwT535wncWUFfMMZwA==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
'@tanstack/router-plugin@1.133.32':
|
||||
resolution: {integrity: sha512-4YtRrGs5nq/sZmwwT/jmS1LiucEevsWjxzTEilHRBtjeMgFbrhnQ7jBHHRPym71C40W/9tEgzcQS3dGq5LC5+g==}
|
||||
'@tanstack/router-plugin@1.133.36':
|
||||
resolution: {integrity: sha512-y0vttpDRFbniPk2EOS93wxfNA0SqvD/anj6kXTIl/3caW0rvOC4MzMXV09atJ+3jMSOgHFniljKQj/66AY5dZg==}
|
||||
engines: {node: '>=12'}
|
||||
peerDependencies:
|
||||
'@rsbuild/core': '>=1.0.2'
|
||||
'@tanstack/react-router': ^1.133.32
|
||||
'@tanstack/react-router': ^1.133.36
|
||||
vite: '>=5.0.0 || >=6.0.0 || >=7.0.0'
|
||||
vite-plugin-solid: ^2.11.10
|
||||
webpack: '>=5.92.0'
|
||||
@@ -3190,8 +3190,8 @@ packages:
|
||||
'@tanstack/react-router': '>=1.43.2'
|
||||
zod: '>=3'
|
||||
|
||||
'@tanstack/store@0.7.0':
|
||||
resolution: {integrity: sha512-CNIhdoUsmD2NolYuaIs8VfWM467RK6oIBAW4nPEKZhg1smZ+/CwtCdpURgp7nxSqOaV9oKkzdWD80+bC66F/Jg==}
|
||||
'@tanstack/store@0.8.0':
|
||||
resolution: {integrity: sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==}
|
||||
|
||||
'@tanstack/table-core@8.21.3':
|
||||
resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
|
||||
@@ -6036,10 +6036,6 @@ packages:
|
||||
javascript-natural-sort@0.7.1:
|
||||
resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==}
|
||||
|
||||
jiti@2.6.0:
|
||||
resolution: {integrity: sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==}
|
||||
hasBin: true
|
||||
|
||||
jiti@2.6.1:
|
||||
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
|
||||
hasBin: true
|
||||
@@ -6161,8 +6157,8 @@ packages:
|
||||
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
knip@5.66.3:
|
||||
resolution: {integrity: sha512-BEe9ZCI8fm4TJzehnrCt+L/Faqu6qfMH6VrwSfck+lCGotQzf0jh5dVXysPWjWqMpdUSr6+MpMu9JW/G6wiAcQ==}
|
||||
knip@5.66.4:
|
||||
resolution: {integrity: sha512-HmTnxdmoHAvwKmFktRGY1++tXRI8J36eVrOpfj/ybTVVT1QBKBlbBEN1s3cJBx9UL+hXTZDNQif+gs7fUKldbw==}
|
||||
engines: {node: '>=18.18.0'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -6810,8 +6806,8 @@ packages:
|
||||
resolution: {integrity: sha512-2tDN/ttU8WE6oFh8EzKNam7KE7ZXSG5uXmvX85iNzxdJfMssDWcj3gpYzZi1E04XuE7m3v1dVWl/8BE886vPGw==}
|
||||
engines: {node: '>=20.0.0'}
|
||||
|
||||
oxc-resolver@11.8.3:
|
||||
resolution: {integrity: sha512-wPY3eiw24QOiNqArh5FWRrKYr1Yuxya8bE8CV7yBfz7jodCrg0HqBu6cvHHSicxFug7D4TN6ox1hysA9arHTqw==}
|
||||
oxc-resolver@11.12.0:
|
||||
resolution: {integrity: sha512-zmS2q2txiB+hS2u0aiIwmvITIJN8c8ThlWoWB762Wx5nUw8WBlttp0rzt8nnuP1cGIq9YJ7sGxfsgokm+SQk5Q==}
|
||||
|
||||
p-cancelable@2.1.1:
|
||||
resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
|
||||
@@ -10577,7 +10573,7 @@ snapshots:
|
||||
'@tybys/wasm-util': 0.9.0
|
||||
optional: true
|
||||
|
||||
'@napi-rs/wasm-runtime@1.0.5':
|
||||
'@napi-rs/wasm-runtime@1.0.7':
|
||||
dependencies:
|
||||
'@emnapi/core': 1.5.0
|
||||
'@emnapi/runtime': 1.5.0
|
||||
@@ -10858,63 +10854,63 @@ snapshots:
|
||||
|
||||
'@oxc-project/types@0.74.0': {}
|
||||
|
||||
'@oxc-resolver/binding-android-arm-eabi@11.8.3':
|
||||
'@oxc-resolver/binding-android-arm-eabi@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-android-arm64@11.8.3':
|
||||
'@oxc-resolver/binding-android-arm64@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-darwin-arm64@11.8.3':
|
||||
'@oxc-resolver/binding-darwin-arm64@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-darwin-x64@11.8.3':
|
||||
'@oxc-resolver/binding-darwin-x64@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-freebsd-x64@11.8.3':
|
||||
'@oxc-resolver/binding-freebsd-x64@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-linux-arm-gnueabihf@11.8.3':
|
||||
'@oxc-resolver/binding-linux-arm-gnueabihf@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-linux-arm-musleabihf@11.8.3':
|
||||
'@oxc-resolver/binding-linux-arm-musleabihf@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-linux-arm64-gnu@11.8.3':
|
||||
'@oxc-resolver/binding-linux-arm64-gnu@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-linux-arm64-musl@11.8.3':
|
||||
'@oxc-resolver/binding-linux-arm64-musl@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-linux-ppc64-gnu@11.8.3':
|
||||
'@oxc-resolver/binding-linux-ppc64-gnu@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-linux-riscv64-gnu@11.8.3':
|
||||
'@oxc-resolver/binding-linux-riscv64-gnu@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-linux-riscv64-musl@11.8.3':
|
||||
'@oxc-resolver/binding-linux-riscv64-musl@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-linux-s390x-gnu@11.8.3':
|
||||
'@oxc-resolver/binding-linux-s390x-gnu@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-linux-x64-gnu@11.8.3':
|
||||
'@oxc-resolver/binding-linux-x64-gnu@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-linux-x64-musl@11.8.3':
|
||||
'@oxc-resolver/binding-linux-x64-musl@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-wasm32-wasi@11.8.3':
|
||||
'@oxc-resolver/binding-wasm32-wasi@11.12.0':
|
||||
dependencies:
|
||||
'@napi-rs/wasm-runtime': 1.0.5
|
||||
'@napi-rs/wasm-runtime': 1.0.7
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-win32-arm64-msvc@11.8.3':
|
||||
'@oxc-resolver/binding-win32-arm64-msvc@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-win32-ia32-msvc@11.8.3':
|
||||
'@oxc-resolver/binding-win32-ia32-msvc@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@oxc-resolver/binding-win32-x64-msvc@11.8.3':
|
||||
'@oxc-resolver/binding-win32-x64-msvc@11.12.0':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-android-arm64@2.4.1':
|
||||
@@ -11447,10 +11443,10 @@ snapshots:
|
||||
'@tanstack/query-core': 5.90.5
|
||||
react: 19.2.0
|
||||
|
||||
'@tanstack/react-router-devtools@1.133.34(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)':
|
||||
'@tanstack/react-router-devtools@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)':
|
||||
dependencies:
|
||||
'@tanstack/react-router': 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@tanstack/router-devtools-core': 1.133.34(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)
|
||||
'@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@tanstack/router-devtools-core': 1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)
|
||||
react: 19.2.0
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)
|
||||
@@ -11471,20 +11467,20 @@ snapshots:
|
||||
- tsx
|
||||
- yaml
|
||||
|
||||
'@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
|
||||
'@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
|
||||
dependencies:
|
||||
'@tanstack/history': 1.133.28
|
||||
'@tanstack/react-store': 0.7.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@tanstack/router-core': 1.133.28
|
||||
'@tanstack/react-store': 0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@tanstack/router-core': 1.133.36
|
||||
isbot: 5.1.28
|
||||
react: 19.2.0
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
tiny-invariant: 1.3.3
|
||||
tiny-warning: 1.0.3
|
||||
|
||||
'@tanstack/react-store@0.7.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
|
||||
'@tanstack/react-store@0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
|
||||
dependencies:
|
||||
'@tanstack/store': 0.7.0
|
||||
'@tanstack/store': 0.8.0
|
||||
react: 19.2.0
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
use-sync-external-store: 1.6.0(react@19.2.0)
|
||||
@@ -11501,19 +11497,19 @@ snapshots:
|
||||
react: 19.2.0
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
|
||||
'@tanstack/router-core@1.133.28':
|
||||
'@tanstack/router-core@1.133.36':
|
||||
dependencies:
|
||||
'@tanstack/history': 1.133.28
|
||||
'@tanstack/store': 0.7.0
|
||||
'@tanstack/store': 0.8.0
|
||||
cookie-es: 2.0.0
|
||||
seroval: 1.3.2
|
||||
seroval-plugins: 1.3.2(seroval@1.3.2)
|
||||
tiny-invariant: 1.3.3
|
||||
tiny-warning: 1.0.3
|
||||
|
||||
'@tanstack/router-devtools-core@1.133.34(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)':
|
||||
'@tanstack/router-devtools-core@1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)':
|
||||
dependencies:
|
||||
'@tanstack/router-core': 1.133.28
|
||||
'@tanstack/router-core': 1.133.36
|
||||
clsx: 2.1.1
|
||||
goober: 2.1.16(csstype@3.1.3)
|
||||
solid-js: 1.9.5
|
||||
@@ -11534,9 +11530,9 @@ snapshots:
|
||||
- tsx
|
||||
- yaml
|
||||
|
||||
'@tanstack/router-generator@1.133.29':
|
||||
'@tanstack/router-generator@1.133.36':
|
||||
dependencies:
|
||||
'@tanstack/router-core': 1.133.28
|
||||
'@tanstack/router-core': 1.133.36
|
||||
'@tanstack/router-utils': 1.133.19
|
||||
'@tanstack/virtual-file-routes': 1.133.19
|
||||
prettier: 3.6.2
|
||||
@@ -11547,7 +11543,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@tanstack/router-plugin@1.133.32(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))':
|
||||
'@tanstack/router-plugin@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.4
|
||||
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4)
|
||||
@@ -11555,8 +11551,8 @@ snapshots:
|
||||
'@babel/template': 7.27.2
|
||||
'@babel/traverse': 7.28.4
|
||||
'@babel/types': 7.28.4
|
||||
'@tanstack/router-core': 1.133.28
|
||||
'@tanstack/router-generator': 1.133.29
|
||||
'@tanstack/router-core': 1.133.36
|
||||
'@tanstack/router-generator': 1.133.36
|
||||
'@tanstack/router-utils': 1.133.19
|
||||
'@tanstack/virtual-file-routes': 1.133.19
|
||||
babel-dead-code-elimination: 1.0.10
|
||||
@@ -11564,7 +11560,7 @@ snapshots:
|
||||
unplugin: 2.3.10
|
||||
zod: 3.25.76
|
||||
optionalDependencies:
|
||||
'@tanstack/react-router': 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -11582,12 +11578,12 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)':
|
||||
'@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)':
|
||||
dependencies:
|
||||
'@tanstack/react-router': 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
zod: 4.1.12
|
||||
|
||||
'@tanstack/store@0.7.0': {}
|
||||
'@tanstack/store@0.8.0': {}
|
||||
|
||||
'@tanstack/table-core@8.21.3': {}
|
||||
|
||||
@@ -12894,7 +12890,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@types/node': 24.8.1
|
||||
cosmiconfig: 9.0.0(typescript@5.9.3)
|
||||
jiti: 2.6.0
|
||||
jiti: 2.6.1
|
||||
typescript: 5.9.3
|
||||
|
||||
cosmiconfig@7.1.0:
|
||||
@@ -14866,8 +14862,6 @@ snapshots:
|
||||
javascript-natural-sort@0.7.1:
|
||||
optional: true
|
||||
|
||||
jiti@2.6.0: {}
|
||||
|
||||
jiti@2.6.1: {}
|
||||
|
||||
jju@1.4.0: {}
|
||||
@@ -14954,16 +14948,16 @@ snapshots:
|
||||
|
||||
kind-of@6.0.3: {}
|
||||
|
||||
knip@5.66.3(@types/node@24.8.1)(typescript@5.9.3):
|
||||
knip@5.66.4(@types/node@24.8.1)(typescript@5.9.3):
|
||||
dependencies:
|
||||
'@nodelib/fs.walk': 1.2.8
|
||||
'@types/node': 24.8.1
|
||||
fast-glob: 3.3.3
|
||||
formatly: 0.3.0
|
||||
jiti: 2.6.0
|
||||
jiti: 2.6.1
|
||||
js-yaml: 4.1.0
|
||||
minimist: 1.2.8
|
||||
oxc-resolver: 11.8.3
|
||||
oxc-resolver: 11.12.0
|
||||
picocolors: 1.1.1
|
||||
picomatch: 4.0.3
|
||||
smol-toml: 1.4.2
|
||||
@@ -15779,29 +15773,27 @@ snapshots:
|
||||
'@oxc-parser/binding-win32-arm64-msvc': 0.74.0
|
||||
'@oxc-parser/binding-win32-x64-msvc': 0.74.0
|
||||
|
||||
oxc-resolver@11.8.3:
|
||||
dependencies:
|
||||
napi-postinstall: 0.3.0
|
||||
oxc-resolver@11.12.0:
|
||||
optionalDependencies:
|
||||
'@oxc-resolver/binding-android-arm-eabi': 11.8.3
|
||||
'@oxc-resolver/binding-android-arm64': 11.8.3
|
||||
'@oxc-resolver/binding-darwin-arm64': 11.8.3
|
||||
'@oxc-resolver/binding-darwin-x64': 11.8.3
|
||||
'@oxc-resolver/binding-freebsd-x64': 11.8.3
|
||||
'@oxc-resolver/binding-linux-arm-gnueabihf': 11.8.3
|
||||
'@oxc-resolver/binding-linux-arm-musleabihf': 11.8.3
|
||||
'@oxc-resolver/binding-linux-arm64-gnu': 11.8.3
|
||||
'@oxc-resolver/binding-linux-arm64-musl': 11.8.3
|
||||
'@oxc-resolver/binding-linux-ppc64-gnu': 11.8.3
|
||||
'@oxc-resolver/binding-linux-riscv64-gnu': 11.8.3
|
||||
'@oxc-resolver/binding-linux-riscv64-musl': 11.8.3
|
||||
'@oxc-resolver/binding-linux-s390x-gnu': 11.8.3
|
||||
'@oxc-resolver/binding-linux-x64-gnu': 11.8.3
|
||||
'@oxc-resolver/binding-linux-x64-musl': 11.8.3
|
||||
'@oxc-resolver/binding-wasm32-wasi': 11.8.3
|
||||
'@oxc-resolver/binding-win32-arm64-msvc': 11.8.3
|
||||
'@oxc-resolver/binding-win32-ia32-msvc': 11.8.3
|
||||
'@oxc-resolver/binding-win32-x64-msvc': 11.8.3
|
||||
'@oxc-resolver/binding-android-arm-eabi': 11.12.0
|
||||
'@oxc-resolver/binding-android-arm64': 11.12.0
|
||||
'@oxc-resolver/binding-darwin-arm64': 11.12.0
|
||||
'@oxc-resolver/binding-darwin-x64': 11.12.0
|
||||
'@oxc-resolver/binding-freebsd-x64': 11.12.0
|
||||
'@oxc-resolver/binding-linux-arm-gnueabihf': 11.12.0
|
||||
'@oxc-resolver/binding-linux-arm-musleabihf': 11.12.0
|
||||
'@oxc-resolver/binding-linux-arm64-gnu': 11.12.0
|
||||
'@oxc-resolver/binding-linux-arm64-musl': 11.12.0
|
||||
'@oxc-resolver/binding-linux-ppc64-gnu': 11.12.0
|
||||
'@oxc-resolver/binding-linux-riscv64-gnu': 11.12.0
|
||||
'@oxc-resolver/binding-linux-riscv64-musl': 11.12.0
|
||||
'@oxc-resolver/binding-linux-s390x-gnu': 11.12.0
|
||||
'@oxc-resolver/binding-linux-x64-gnu': 11.12.0
|
||||
'@oxc-resolver/binding-linux-x64-musl': 11.12.0
|
||||
'@oxc-resolver/binding-wasm32-wasi': 11.12.0
|
||||
'@oxc-resolver/binding-win32-arm64-msvc': 11.12.0
|
||||
'@oxc-resolver/binding-win32-ia32-msvc': 11.12.0
|
||||
'@oxc-resolver/binding-win32-x64-msvc': 11.12.0
|
||||
|
||||
p-cancelable@2.1.1: {}
|
||||
|
||||
|
||||
@@ -8,6 +8,10 @@ config MBEDTLS_AES_C
|
||||
bool "MBEDTLS_AES_C"
|
||||
default y
|
||||
|
||||
config MBEDTLS_ARIA_C
|
||||
bool "MBEDTLS_ARIA_C"
|
||||
default n
|
||||
|
||||
config MBEDTLS_CAMELLIA_C
|
||||
bool "MBEDTLS_CAMELLIA_C"
|
||||
default n
|
||||
@@ -36,10 +40,6 @@ config MBEDTLS_RIPEMD160_C
|
||||
bool "MBEDTLS_RIPEMD160_C"
|
||||
default n
|
||||
|
||||
config MBEDTLS_XTEA_C
|
||||
bool "MBEDTLS_XTEA_C"
|
||||
default n
|
||||
|
||||
config MBEDTLS_RSA_NO_CRT
|
||||
bool "MBEDTLS_RSA_NO_CRT"
|
||||
default y
|
||||
@@ -84,6 +84,10 @@ config MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED
|
||||
bool "MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED"
|
||||
default n
|
||||
|
||||
config MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED
|
||||
bool "MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED"
|
||||
default n
|
||||
|
||||
comment "Curves - unselect old or less-used curves to reduce binary size"
|
||||
|
||||
config MBEDTLS_ECP_DP_SECP192R1_ENABLED
|
||||
@@ -104,7 +108,7 @@ config MBEDTLS_ECP_DP_SECP384R1_ENABLED
|
||||
|
||||
config MBEDTLS_ECP_DP_SECP521R1_ENABLED
|
||||
bool "MBEDTLS_ECP_DP_SECP521R1_ENABLED"
|
||||
default n
|
||||
default y
|
||||
|
||||
config MBEDTLS_ECP_DP_SECP192K1_ENABLED
|
||||
bool "MBEDTLS_ECP_DP_SECP192K1_ENABLED"
|
||||
@@ -140,10 +144,6 @@ config MBEDTLS_ECP_DP_CURVE448_ENABLED
|
||||
|
||||
comment "Build Options - unselect features to reduce binary size"
|
||||
|
||||
config MBEDTLS_CERTS_C
|
||||
bool "MBEDTLS_CERTS_C"
|
||||
default n
|
||||
|
||||
config MBEDTLS_CIPHER_MODE_OFB
|
||||
bool "MBEDTLS_CIPHER_MODE_OFB"
|
||||
default n
|
||||
@@ -168,9 +168,12 @@ config MBEDTLS_SELF_TEST
|
||||
bool "MBEDTLS_SELF_TEST"
|
||||
default n
|
||||
|
||||
config MBEDTLS_SSL_TRUNCATED_HMAC
|
||||
bool "MBEDTLS_SSL_TRUNCATED_HMAC"
|
||||
default n
|
||||
config MBEDTLS_THREADING_C
|
||||
bool "MBEDTLS_THREADING_C"
|
||||
default y
|
||||
|
||||
config MBEDTLS_THREADING_PTHREAD
|
||||
def_bool MBEDTLS_THREADING_C
|
||||
|
||||
config MBEDTLS_VERSION_C
|
||||
bool "MBEDTLS_VERSION_C"
|
||||
@@ -180,6 +183,43 @@ config MBEDTLS_VERSION_FEATURES
|
||||
bool "MBEDTLS_VERSION_FEATURES"
|
||||
default n
|
||||
|
||||
config MBEDTLS_PSA_CRYPTO_CLIENT
|
||||
bool "MBEDTLS_PSA_CRYPTO_CLIENT"
|
||||
|
||||
config MBEDTLS_DEPRECATED_WARNING
|
||||
bool "MBEDTLS_DEPRECATED_WARNING"
|
||||
default n
|
||||
|
||||
config MBEDTLS_SSL_PROTO_TLS1_2
|
||||
bool "MBEDTLS_SSL_PROTO_TLS1_2"
|
||||
default y
|
||||
|
||||
config MBEDTLS_SSL_PROTO_TLS1_3
|
||||
bool "MBEDTLS_SSL_PROTO_TLS1_3"
|
||||
select MBEDTLS_PSA_CRYPTO_CLIENT
|
||||
select MBEDTLS_HKDF_C
|
||||
default y
|
||||
|
||||
config MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE
|
||||
bool "MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE"
|
||||
depends on MBEDTLS_SSL_PROTO_TLS1_3
|
||||
default y
|
||||
|
||||
config MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
|
||||
bool "MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED"
|
||||
depends on MBEDTLS_SSL_PROTO_TLS1_3
|
||||
default y
|
||||
|
||||
config MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
|
||||
bool "MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED"
|
||||
depends on MBEDTLS_SSL_PROTO_TLS1_3
|
||||
default y
|
||||
|
||||
config MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
|
||||
bool "MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED"
|
||||
depends on MBEDTLS_SSL_PROTO_TLS1_3
|
||||
default y
|
||||
|
||||
comment "Build Options"
|
||||
|
||||
config MBEDTLS_ENTROPY_FORCE_SHA256
|
||||
@@ -188,6 +228,7 @@ config MBEDTLS_ENTROPY_FORCE_SHA256
|
||||
|
||||
config MBEDTLS_SSL_RENEGOTIATION
|
||||
bool "MBEDTLS_SSL_RENEGOTIATION"
|
||||
depends on MBEDTLS_SSL_PROTO_TLS1_2
|
||||
default n
|
||||
|
||||
endif
|
||||
|
||||
@@ -8,16 +8,16 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=mbedtls
|
||||
PKG_VERSION:=2.28.5
|
||||
PKG_VERSION:=3.6.5
|
||||
PKG_RELEASE:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/ARMmbed/mbedtls/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_HASH:=849e86b626e42ded6bf67197b64aa771daa54e2a7e2868dc67e1e4711959e5e3
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
||||
PKG_SOURCE_URL=https://github.com/Mbed-TLS/$(PKG_NAME)/releases/download/$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_HASH:=4a11f1777bb95bf4ad96721cac945a26e04bf19f57d905f241fe77ebeddf46d8
|
||||
|
||||
PKG_LICENSE:=GPL-2.0-or-later
|
||||
PKG_LICENSE_FILES:=gpl-2.0.txt
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
PKG_CPE_ID:=cpe:/a:arm:mbed_tls
|
||||
|
||||
MBEDTLS_BUILD_OPTS_CURVES= \
|
||||
@@ -37,6 +37,7 @@ MBEDTLS_BUILD_OPTS_CURVES= \
|
||||
|
||||
MBEDTLS_BUILD_OPTS_CIPHERS= \
|
||||
CONFIG_MBEDTLS_AES_C \
|
||||
CONFIG_MBEDTLS_ARIA_C \
|
||||
CONFIG_MBEDTLS_CAMELLIA_C \
|
||||
CONFIG_MBEDTLS_CCM_C \
|
||||
CONFIG_MBEDTLS_CMAC_C \
|
||||
@@ -52,15 +53,17 @@ MBEDTLS_BUILD_OPTS_CIPHERS= \
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED \
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED \
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED \
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED \
|
||||
CONFIG_MBEDTLS_NIST_KW_C \
|
||||
CONFIG_MBEDTLS_RIPEMD160_C \
|
||||
CONFIG_MBEDTLS_RSA_NO_CRT \
|
||||
CONFIG_MBEDTLS_XTEA_C
|
||||
CONFIG_MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
|
||||
CONFIG_MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
|
||||
CONFIG_MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
|
||||
|
||||
MBEDTLS_BUILD_OPTS= \
|
||||
$(MBEDTLS_BUILD_OPTS_CURVES) \
|
||||
$(MBEDTLS_BUILD_OPTS_CIPHERS) \
|
||||
CONFIG_MBEDTLS_CERTS_C \
|
||||
CONFIG_MBEDTLS_CIPHER_MODE_OFB \
|
||||
CONFIG_MBEDTLS_CIPHER_MODE_XTS \
|
||||
CONFIG_MBEDTLS_DEBUG_C \
|
||||
@@ -69,9 +72,15 @@ MBEDTLS_BUILD_OPTS= \
|
||||
CONFIG_MBEDTLS_PLATFORM_C \
|
||||
CONFIG_MBEDTLS_SELF_TEST \
|
||||
CONFIG_MBEDTLS_SSL_RENEGOTIATION \
|
||||
CONFIG_MBEDTLS_SSL_TRUNCATED_HMAC \
|
||||
CONFIG_MBEDTLS_THREADING_C \
|
||||
CONFIG_MBEDTLS_THREADING_PTHREAD \
|
||||
CONFIG_MBEDTLS_VERSION_C \
|
||||
CONFIG_MBEDTLS_VERSION_FEATURES
|
||||
CONFIG_MBEDTLS_VERSION_FEATURES \
|
||||
CONFIG_MBEDTLS_PSA_CRYPTO_CLIENT \
|
||||
CONFIG_MBEDTLS_DEPRECATED_WARNING \
|
||||
CONFIG_MBEDTLS_SSL_PROTO_TLS1_2 \
|
||||
CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 \
|
||||
CONFIG_MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE
|
||||
|
||||
PKG_CONFIG_DEPENDS := $(MBEDTLS_BUILD_OPTS)
|
||||
|
||||
@@ -80,7 +89,7 @@ include $(INCLUDE_DIR)/cmake.mk
|
||||
|
||||
define Package/mbedtls/Default
|
||||
TITLE:=Embedded SSL
|
||||
URL:=https://tls.mbed.org
|
||||
URL:=https://www.trustedfirmware.org/projects/mbed-tls/
|
||||
endef
|
||||
|
||||
define Package/mbedtls/Default/description
|
||||
@@ -94,7 +103,7 @@ $(call Package/mbedtls/Default)
|
||||
CATEGORY:=Libraries
|
||||
SUBMENU:=SSL
|
||||
TITLE+= (library)
|
||||
ABI_VERSION:=12
|
||||
ABI_VERSION:=21
|
||||
MENU:=1
|
||||
endef
|
||||
|
||||
@@ -136,16 +145,26 @@ define Build/Prepare
|
||||
$(if $(strip $(foreach opt,$(MBEDTLS_BUILD_OPTS),$($(opt)))),
|
||||
$(foreach opt,$(MBEDTLS_BUILD_OPTS),
|
||||
$(PKG_BUILD_DIR)/scripts/config.py \
|
||||
-f $(PKG_BUILD_DIR)/include/mbedtls/config.h \
|
||||
-f $(PKG_BUILD_DIR)/include/mbedtls/mbedtls_config.h \
|
||||
$(if $($(opt)),set,unset) $(patsubst CONFIG_%,%,$(opt))),)
|
||||
endef
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(1)/usr/include
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/include/mbedtls $(1)/usr/include/
|
||||
$(CP) \
|
||||
$(PKG_INSTALL_DIR)/usr/include/mbedtls \
|
||||
$(PKG_INSTALL_DIR)/usr/include/psa \
|
||||
$(1)/usr/include/
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib*.so* $(1)/usr/lib/
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib*.a $(1)/usr/lib/
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/cmake $(1)/usr/lib/
|
||||
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
|
||||
$(CP) \
|
||||
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/mbedcrypto.pc \
|
||||
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/mbedtls.pc \
|
||||
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/mbedx509.pc \
|
||||
$(1)/usr/lib/pkgconfig/
|
||||
endef
|
||||
|
||||
define Package/libmbedtls/install
|
||||
|
||||
11
lede/package/libs/mbedtls/patches/100-fix-gcc14-build.patch
Normal file
11
lede/package/libs/mbedtls/patches/100-fix-gcc14-build.patch
Normal file
@@ -0,0 +1,11 @@
|
||||
--- a/library/common.h
|
||||
+++ b/library/common.h
|
||||
@@ -199,7 +199,7 @@ static inline void mbedtls_xor(unsigned
|
||||
uint8x16_t x = veorq_u8(v1, v2);
|
||||
vst1q_u8(r + i, x);
|
||||
}
|
||||
-#if defined(__IAR_SYSTEMS_ICC__)
|
||||
+#if defined(__IAR_SYSTEMS_ICC__) || (defined(MBEDTLS_COMPILER_IS_GCC) && MBEDTLS_GCC_VERSION >= 140100)
|
||||
/* This if statement helps some compilers (e.g., IAR) optimise out the byte-by-byte tail case
|
||||
* where n is a constant multiple of 16.
|
||||
* For other compilers (e.g. recent gcc and clang) it makes no difference if n is a compile-time
|
||||
@@ -1,197 +0,0 @@
|
||||
From eb9d4fdf1846e688d51d86a9a50f0312aca2af25 Mon Sep 17 00:00:00 2001
|
||||
From: Glenn Strauss <gstrauss@gluelogic.com>
|
||||
Date: Sun, 23 Oct 2022 19:48:18 -0400
|
||||
Subject: [PATCH] x509 crt verify SAN iPAddress
|
||||
|
||||
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
|
||||
---
|
||||
include/mbedtls/x509_crt.h | 2 +-
|
||||
library/x509_crt.c | 126 ++++++++++++++++++++++++++++++-------
|
||||
2 files changed, 103 insertions(+), 25 deletions(-)
|
||||
|
||||
--- a/include/mbedtls/x509_crt.h
|
||||
+++ b/include/mbedtls/x509_crt.h
|
||||
@@ -608,7 +608,7 @@ int mbedtls_x509_crt_verify_info(char *b
|
||||
* \param cn The expected Common Name. This will be checked to be
|
||||
* present in the certificate's subjectAltNames extension or,
|
||||
* if this extension is absent, as a CN component in its
|
||||
- * Subject name. Currently only DNS names are supported. This
|
||||
+ * Subject name. DNS names and IP addresses are supported. This
|
||||
* may be \c NULL if the CN need not be verified.
|
||||
* \param flags The address at which to store the result of the verification.
|
||||
* If the verification couldn't be completed, the flag value is
|
||||
--- a/library/x509_crt.c
|
||||
+++ b/library/x509_crt.c
|
||||
@@ -57,6 +57,10 @@
|
||||
|
||||
#if defined(MBEDTLS_HAVE_TIME)
|
||||
#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32)
|
||||
+#define WIN32_LEAN_AND_MEAN
|
||||
+#ifndef _WIN32_WINNT
|
||||
+#define _WIN32_WINNT 0x0600
|
||||
+#endif
|
||||
#include <windows.h>
|
||||
#else
|
||||
#include <time.h>
|
||||
@@ -3002,6 +3006,61 @@ find_parent:
|
||||
}
|
||||
}
|
||||
|
||||
+#ifdef _WIN32
|
||||
+#ifdef _MSC_VER
|
||||
+#pragma comment(lib, "ws2_32.lib")
|
||||
+#include <winsock2.h>
|
||||
+#include <ws2tcpip.h>
|
||||
+#elif (defined(__MINGW32__) || defined(__MINGW64__)) && _WIN32_WINNT >= 0x0600
|
||||
+#include <winsock2.h>
|
||||
+#include <ws2tcpip.h>
|
||||
+#endif
|
||||
+#elif defined(__sun)
|
||||
+/* Solaris requires -lsocket -lnsl for inet_pton() */
|
||||
+#elif defined(__has_include)
|
||||
+#if __has_include(<sys/socket.h>)
|
||||
+#include <sys/socket.h>
|
||||
+#endif
|
||||
+#if __has_include(<arpa/inet.h>)
|
||||
+#include <arpa/inet.h>
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
+/* Use whether or not AF_INET6 is defined to indicate whether or not to use
|
||||
+ * the platform inet_pton() or a local implementation (below). The local
|
||||
+ * implementation may be used even in cases where the platform provides
|
||||
+ * inet_pton(), e.g. when there are different includes required and/or the
|
||||
+ * platform implementation requires dependencies on additional libraries.
|
||||
+ * Specifically, Windows requires custom includes and additional link
|
||||
+ * dependencies, and Solaris requires additional link dependencies.
|
||||
+ * Also, as a coarse heuristic, use the local implementation if the compiler
|
||||
+ * does not support __has_include(), or if the definition of AF_INET6 is not
|
||||
+ * provided by headers included (or not) via __has_include() above. */
|
||||
+#ifndef AF_INET6
|
||||
+
|
||||
+#define x509_cn_inet_pton(cn, dst) (0)
|
||||
+
|
||||
+#else
|
||||
+
|
||||
+static int x509_inet_pton_ipv6(const char *src, void *dst)
|
||||
+{
|
||||
+ return inet_pton(AF_INET6, src, dst) == 1 ? 0 : -1;
|
||||
+}
|
||||
+
|
||||
+static int x509_inet_pton_ipv4(const char *src, void *dst)
|
||||
+{
|
||||
+ return inet_pton(AF_INET, src, dst) == 1 ? 0 : -1;
|
||||
+}
|
||||
+
|
||||
+#endif /* AF_INET6 */
|
||||
+
|
||||
+static size_t x509_cn_inet_pton(const char *cn, void *dst)
|
||||
+{
|
||||
+ return strchr(cn, ':') == NULL
|
||||
+ ? x509_inet_pton_ipv4(cn, dst) == 0 ? 4 : 0
|
||||
+ : x509_inet_pton_ipv6(cn, dst) == 0 ? 16 : 0;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Check for CN match
|
||||
*/
|
||||
@@ -3022,24 +3081,51 @@ static int x509_crt_check_cn(const mbedt
|
||||
return -1;
|
||||
}
|
||||
|
||||
+static int x509_crt_check_san_ip(const mbedtls_x509_sequence *san,
|
||||
+ const char *cn, size_t cn_len)
|
||||
+{
|
||||
+ uint32_t ip[4];
|
||||
+ cn_len = x509_cn_inet_pton(cn, ip);
|
||||
+ if (cn_len == 0) {
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ for (const mbedtls_x509_sequence *cur = san; cur != NULL; cur = cur->next) {
|
||||
+ const unsigned char san_type = (unsigned char) cur->buf.tag &
|
||||
+ MBEDTLS_ASN1_TAG_VALUE_MASK;
|
||||
+ if (san_type == MBEDTLS_X509_SAN_IP_ADDRESS &&
|
||||
+ cur->buf.len == cn_len && memcmp(cur->buf.p, ip, cn_len) == 0) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Check for SAN match, see RFC 5280 Section 4.2.1.6
|
||||
*/
|
||||
-static int x509_crt_check_san(const mbedtls_x509_buf *name,
|
||||
+static int x509_crt_check_san(const mbedtls_x509_sequence *san,
|
||||
const char *cn, size_t cn_len)
|
||||
{
|
||||
- const unsigned char san_type = (unsigned char) name->tag &
|
||||
- MBEDTLS_ASN1_TAG_VALUE_MASK;
|
||||
-
|
||||
- /* dNSName */
|
||||
- if (san_type == MBEDTLS_X509_SAN_DNS_NAME) {
|
||||
- return x509_crt_check_cn(name, cn, cn_len);
|
||||
+ int san_ip = 0;
|
||||
+ for (const mbedtls_x509_sequence *cur = san; cur != NULL; cur = cur->next) {
|
||||
+ switch ((unsigned char) cur->buf.tag & MBEDTLS_ASN1_TAG_VALUE_MASK) {
|
||||
+ case MBEDTLS_X509_SAN_DNS_NAME: /* dNSName */
|
||||
+ if (x509_crt_check_cn(&cur->buf, cn, cn_len) == 0) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ break;
|
||||
+ case MBEDTLS_X509_SAN_IP_ADDRESS: /* iPAddress */
|
||||
+ san_ip = 1;
|
||||
+ break;
|
||||
+ /* (We may handle other types here later.) */
|
||||
+ default: /* Unrecognized type */
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
|
||||
- /* (We may handle other types here later.) */
|
||||
-
|
||||
- /* Unrecognized type */
|
||||
- return -1;
|
||||
+ return san_ip ? x509_crt_check_san_ip(san, cn, cn_len) : -1;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3050,31 +3136,23 @@ static void x509_crt_verify_name(const m
|
||||
uint32_t *flags)
|
||||
{
|
||||
const mbedtls_x509_name *name;
|
||||
- const mbedtls_x509_sequence *cur;
|
||||
size_t cn_len = strlen(cn);
|
||||
|
||||
if (crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME) {
|
||||
- for (cur = &crt->subject_alt_names; cur != NULL; cur = cur->next) {
|
||||
- if (x509_crt_check_san(&cur->buf, cn, cn_len) == 0) {
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (cur == NULL) {
|
||||
- *flags |= MBEDTLS_X509_BADCERT_CN_MISMATCH;
|
||||
+ if (x509_crt_check_san(&crt->subject_alt_names, cn, cn_len) == 0) {
|
||||
+ return;
|
||||
}
|
||||
} else {
|
||||
for (name = &crt->subject; name != NULL; name = name->next) {
|
||||
if (MBEDTLS_OID_CMP(MBEDTLS_OID_AT_CN, &name->oid) == 0 &&
|
||||
x509_crt_check_cn(&name->val, cn, cn_len) == 0) {
|
||||
- break;
|
||||
+ return;
|
||||
}
|
||||
}
|
||||
|
||||
- if (name == NULL) {
|
||||
- *flags |= MBEDTLS_X509_BADCERT_CN_MISMATCH;
|
||||
- }
|
||||
}
|
||||
+
|
||||
+ *flags |= MBEDTLS_X509_BADCERT_CN_MISMATCH;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1,7 +1,9 @@
|
||||
--- a/programs/CMakeLists.txt
|
||||
+++ b/programs/CMakeLists.txt
|
||||
@@ -1,12 +1,8 @@
|
||||
@@ -3,14 +3,10 @@ add_custom_target(${programs_target})
|
||||
|
||||
add_subdirectory(aes)
|
||||
add_subdirectory(cipher)
|
||||
-if (NOT WIN32)
|
||||
- add_subdirectory(fuzz)
|
||||
-endif()
|
||||
|
||||
@@ -366,6 +366,7 @@ test-binary:
|
||||
CGO_ENABLED=1 go build -race -ldflags="-X 'github.com/enfein/mieru/v3/pkg/log.LogPrefix=C2'" -o mieru2 cmd/mieru/mieru.go
|
||||
CGO_ENABLED=1 go build -race -ldflags="-X 'github.com/enfein/mieru/v3/pkg/log.LogPrefix=S2'" -o mita2 cmd/mita/mita.go
|
||||
CGO_ENABLED=0 go build test/cmd/exampleapiclient/exampleapiclient.go
|
||||
CGO_ENABLED=0 go build test/cmd/exampleapiserver/exampleapiserver.go
|
||||
CGO_ENABLED=0 go build test/cmd/httpserver/httpserver.go
|
||||
CGO_ENABLED=0 go build test/cmd/sockshttpclient/sockshttpclient.go
|
||||
CGO_ENABLED=0 go build test/cmd/socksudpclient/socksudpclient.go
|
||||
@@ -379,7 +380,7 @@ test-container-image: test-binary
|
||||
docker build -t mieru_apiclient:${SHORT_SHA} -f test/deploy/apiclient/Dockerfile .
|
||||
docker build -t mieru_proxychain:${SHORT_SHA} -f test/deploy/proxychain/Dockerfile .
|
||||
fi
|
||||
rm -f exampleapiclient mieru mieru2 mita mita2 httpserver sockshttpclient socksudpclient udpserver
|
||||
rm -f exampleapiclient exampleapiserver mieru mieru2 mita mita2 httpserver sockshttpclient socksudpclient udpserver
|
||||
|
||||
# Run docker integration tests.
|
||||
.PHONY: run-container-test
|
||||
|
||||
@@ -30,7 +30,7 @@ import (
|
||||
// EarlyConn implements net.Conn interface.
|
||||
// When the Write() method on the net.Conn is called for the first time,
|
||||
// it performs the initial handshake and writes
|
||||
// the request or response to the peer.
|
||||
// the request or response to the peer within the same network packet.
|
||||
type EarlyConn struct {
|
||||
net.Conn
|
||||
request atomic.Pointer[model.Request]
|
||||
|
||||
@@ -125,6 +125,7 @@ func main() {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Printf("API client is listening to %v\n", l.Addr())
|
||||
|
||||
for {
|
||||
conn, err := l.Accept()
|
||||
if err != nil {
|
||||
@@ -146,32 +147,30 @@ func handleOneSocks5Conn(c client.Client, conn net.Conn) {
|
||||
}
|
||||
|
||||
// Find destination.
|
||||
socks5Header := make([]byte, 3)
|
||||
if _, err := io.ReadFull(conn, socks5Header); err != nil {
|
||||
panic(fmt.Sprintf("Read socks5 header failed: %v", err))
|
||||
}
|
||||
netAddr := model.NetAddrSpec{}
|
||||
var isTCP, isUDP bool
|
||||
if socks5Header[1] == constant.Socks5ConnectCmd {
|
||||
netAddr.Net = "tcp"
|
||||
isTCP = true
|
||||
} else if socks5Header[1] == constant.Socks5UDPAssociateCmd {
|
||||
netAddr.Net = "udp"
|
||||
isUDP = true
|
||||
} else {
|
||||
panic(fmt.Sprintf("Socks5 command %d is invalid", socks5Header[1]))
|
||||
}
|
||||
if err := netAddr.ReadFromSocks5(conn); err != nil {
|
||||
var req model.Request
|
||||
if err := req.ReadFromSocks5(conn); err != nil {
|
||||
panic(fmt.Sprintf("ReadFromSocks5() failed: %v", err))
|
||||
}
|
||||
var isTCP, isUDP bool
|
||||
switch req.Command {
|
||||
case constant.Socks5ConnectCmd:
|
||||
isTCP = true
|
||||
case constant.Socks5UDPAssociateCmd:
|
||||
isUDP = true
|
||||
default:
|
||||
panic(fmt.Sprintf("Invalid socks5 command %d", req.Command))
|
||||
}
|
||||
netAddr, err := req.ToNetAddrSpec()
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("ToNetAddrSpec() failed: %v", err))
|
||||
}
|
||||
if *debug {
|
||||
fmt.Printf("Destination network: %v, address: %v\n", netAddr.Network(), netAddr.String())
|
||||
fmt.Printf("Destination address: %v\n", req.DstAddr)
|
||||
}
|
||||
|
||||
// Dial to proxy server and do handshake.
|
||||
ctx := context.Background()
|
||||
var proxyConn net.Conn
|
||||
var err error
|
||||
proxyConn, err = c.DialContext(ctx, netAddr)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("DialContext() failed: %v", err))
|
||||
|
||||
101
mieru/test/cmd/exampleapiserver/exampleapiserver.go
Normal file
101
mieru/test/cmd/exampleapiserver/exampleapiserver.go
Normal file
@@ -0,0 +1,101 @@
|
||||
// Copyright (C) 2025 mieru authors
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"net"
|
||||
|
||||
"github.com/enfein/mieru/v3/apis/model"
|
||||
"github.com/enfein/mieru/v3/apis/server"
|
||||
"github.com/enfein/mieru/v3/pkg/appctl/appctlpb"
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
var (
|
||||
port = flag.Int("port", 0, "mieru API server proxy port to listen")
|
||||
protocol = flag.String("protocol", "TCP", "Proxy transport protocol: TCP or UDP")
|
||||
username = flag.String("username", "", "mieru username")
|
||||
password = flag.String("password", "", "mieru password")
|
||||
useEarlyConn = flag.Bool("use_early_conn", false, "Reply and payload use the same network packet")
|
||||
debug = flag.Bool("debug", false, "Display debug messages")
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
if *port < 1 || *port > 65535 {
|
||||
panic(fmt.Sprintf("port %d is invalid", *port))
|
||||
}
|
||||
var transportProtocol *appctlpb.TransportProtocol
|
||||
switch *protocol {
|
||||
case "TCP":
|
||||
transportProtocol = appctlpb.TransportProtocol_TCP.Enum()
|
||||
case "UDP":
|
||||
transportProtocol = appctlpb.TransportProtocol_UDP.Enum()
|
||||
default:
|
||||
panic(fmt.Sprintf("Transport protocol %q is invalid", *protocol))
|
||||
}
|
||||
if *username == "" {
|
||||
panic("username is not set")
|
||||
}
|
||||
if *password == "" {
|
||||
panic("password is not set")
|
||||
}
|
||||
|
||||
s := server.NewServer()
|
||||
if err := s.Store(&server.ServerConfig{
|
||||
Config: &appctlpb.ServerConfig{
|
||||
PortBindings: []*appctlpb.PortBinding{
|
||||
{
|
||||
Port: proto.Int32(int32(*port)),
|
||||
Protocol: transportProtocol,
|
||||
},
|
||||
},
|
||||
Users: []*appctlpb.User{
|
||||
{
|
||||
Name: username,
|
||||
Password: password,
|
||||
AllowPrivateIP: proto.Bool(true),
|
||||
AllowLoopbackIP: proto.Bool(true),
|
||||
},
|
||||
},
|
||||
},
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if _, err := s.Load(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if err := s.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if !s.IsRunning() {
|
||||
panic("server is not running after start")
|
||||
}
|
||||
fmt.Printf("API server is listening to %s port %d\n", *protocol, *port)
|
||||
|
||||
for {
|
||||
conn, req, err := s.Accept()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
handleOneProxyConn(s, conn, req)
|
||||
}
|
||||
}
|
||||
|
||||
func handleOneProxyConn(s server.Server, conn net.Conn, req *model.Request) {}
|
||||
@@ -8,12 +8,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ddns-go
|
||||
PKG_VERSION:=6.13.0
|
||||
PKG_VERSION:=6.13.1
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/jeessy2/ddns-go/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_HASH:=e1d2201d5b237ad55de8cfe3451705fc75a9deeb9765637cfe8c2c362216b4ba
|
||||
PKG_HASH:=3f71e243d93b19b9e08d1205a4e0868bf41cf70a18a029d1175a076ff8408169
|
||||
|
||||
PKG_LICENSE:=MIT
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-amlogic
|
||||
PKG_VERSION:=3.1.273
|
||||
PKG_VERSION:=3.1.276
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_LICENSE:=GPL-2.0 License
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
--Remove the spaces in the string
|
||||
function trim(str)
|
||||
--return (string.gsub(str, "^%s*(.-)%s*$", "%1"))
|
||||
return (string.gsub(str, "%s+", ""))
|
||||
--return (string.gsub(str, "^%s*(.-)%s*$", "%1"))
|
||||
return (string.gsub(str, "%s+", ""))
|
||||
end
|
||||
|
||||
--Auto-complete node
|
||||
local check_config_amlogic = luci.sys.exec("uci get amlogic.@amlogic[0].amlogic_firmware_repo 2>/dev/null") or ""
|
||||
if (trim(check_config_amlogic) == "") then
|
||||
luci.sys.exec("uci delete amlogic.@amlogic[0] 2>/dev/null")
|
||||
luci.sys.exec("uci set amlogic.config='amlogic' 2>/dev/null")
|
||||
luci.sys.exec("uci commit amlogic 2>/dev/null")
|
||||
luci.sys.exec("uci delete amlogic.@amlogic[0] 2>/dev/null")
|
||||
luci.sys.exec("uci set amlogic.config='amlogic' 2>/dev/null")
|
||||
luci.sys.exec("uci commit amlogic 2>/dev/null")
|
||||
end
|
||||
|
||||
b = Map("amlogic")
|
||||
@@ -29,20 +29,20 @@ mydevice.default = "PLATFORM: " .. mydevice_platfrom
|
||||
mydevice.rmempty = false
|
||||
|
||||
--2.Set OpenWrt Firmware Repository
|
||||
firmware_repo = o:option(Value, "amlogic_firmware_repo", translate("Download repository of OpenWrt:"))
|
||||
firmware_repo.description = translate("Set the download repository of the OpenWrt files on github.com in [Online Download Update].")
|
||||
firmware_repo = o:option(Value, "amlogic_firmware_repo", translate("OpenWrt download repository:"))
|
||||
firmware_repo.description = translate("Set the OpenWrt files download repository on github.com in [Online Download Update].")
|
||||
firmware_repo.default = "https://github.com/breakingbadboy/OpenWrt"
|
||||
firmware_repo.rmempty = false
|
||||
|
||||
--3.Set OpenWrt Releases's Tag Keywords
|
||||
firmware_tag = o:option(Value, "amlogic_firmware_tag", translate("Keywords of Tags in Releases:"))
|
||||
firmware_tag.description = translate("Set the keywords of Tags in Releases of github.com in [Online Download Update].")
|
||||
firmware_tag = o:option(Value, "amlogic_firmware_tag", translate("OpenWrt download tags keyword:"))
|
||||
firmware_tag.description = translate("Set the OpenWrt files download tags keyword for github.com in [Online Download Update].")
|
||||
firmware_tag.default = "ARMv8"
|
||||
firmware_tag.rmempty = false
|
||||
|
||||
--4.Set OpenWrt Firmware Suffix
|
||||
firmware_suffix = o:option(Value, "amlogic_firmware_suffix", translate("Suffix of OpenWrt files:"))
|
||||
firmware_suffix.description = translate("Set the suffix of the OpenWrt in Releases of github.com in [Online Download Update].")
|
||||
firmware_suffix = o:option(Value, "amlogic_firmware_suffix", translate("OpenWrt files suffix:"))
|
||||
firmware_suffix.description = translate("Set the OpenWrt files download suffix for github.com in [Online Download Update].")
|
||||
firmware_suffix:value(".7z", translate(".7z"))
|
||||
firmware_suffix:value(".zip", translate(".zip"))
|
||||
firmware_suffix:value(".img.gz", translate(".img.gz"))
|
||||
@@ -51,16 +51,76 @@ firmware_suffix.default = ".img.gz"
|
||||
firmware_suffix.rmempty = false
|
||||
|
||||
--5.Set OpenWrt Kernel DownLoad Path
|
||||
kernel_path = o:option(Value, "amlogic_kernel_path", translate("Download path of OpenWrt kernel:"))
|
||||
kernel_path.description = translate("Set the download path of the kernel in the github.com repository in [Online Download Update].")
|
||||
kernel_path = o:option(Value, "amlogic_kernel_path", translate("Kernel download repository:"))
|
||||
kernel_path.description = translate("Set the kernel files download repository on github.com in [Online Download Update].")
|
||||
kernel_path:value("https://github.com/breakingbadboy/OpenWrt")
|
||||
kernel_path:value("https://github.com/ophub/kernel")
|
||||
kernel_path.default = "https://github.com/breakingbadboy/OpenWrt"
|
||||
kernel_path.rmempty = false
|
||||
|
||||
--6.Set kernel version branch
|
||||
--6. Set OpenWrt Kernel Tags
|
||||
-- Read the currently SAVED value of the kernel path.
|
||||
local current_kernel_path = trim(luci.sys.exec("uci get amlogic.@amlogic[0].amlogic_kernel_path 2>/dev/null") or "")
|
||||
-- If it's not set yet, use its default value for the logic below.
|
||||
if current_kernel_path == "" then
|
||||
current_kernel_path = kernel_path.default
|
||||
end
|
||||
-- Define the tag lists.
|
||||
-- The base list, available for all repositories.
|
||||
local known_tags = {
|
||||
kernel_rk3588 = "kernel_rk3588 [Rockchip RK3588 Kernel]",
|
||||
kernel_rk35xx = "kernel_rk35xx [Rockchip RK35xx Kernel]",
|
||||
kernel_stable = "kernel_stable [Mainline Stable Kernel]",
|
||||
}
|
||||
-- Additional tags only available for the 'ophub/kernel' repository.
|
||||
local ophub_extra_tags = {
|
||||
kernel_flippy = "kernel_flippy [Mainline Stable Kernel by Flippy]",
|
||||
kernel_h6 = "kernel_h6 [Allwinner H6 Kernel]",
|
||||
kernel_dev = "kernel_dev [Development Kernel]",
|
||||
kernel_beta = "kernel_beta [Beta Kernel]",
|
||||
}
|
||||
-- Conditionally add the extra tags to the list.
|
||||
if (string.find(current_kernel_path, "ophub/kernel")) then
|
||||
for value, display_name in pairs(ophub_extra_tags) do
|
||||
known_tags[value] = display_name
|
||||
end
|
||||
end
|
||||
-- Determine the default kernel tag based on existing config or system info.
|
||||
local kernel_tagsname
|
||||
local existing_tag = trim(luci.sys.exec("uci get amlogic.@amlogic[0].amlogic_kernel_tags 2>/dev/null") or "")
|
||||
if existing_tag ~= "" then
|
||||
kernel_tagsname = existing_tag
|
||||
else
|
||||
local kernel_release_info = trim(luci.sys.exec("uname -r 2>/dev/null")) or ""
|
||||
|
||||
if (string.find(kernel_release_info, "-rk3588")) then
|
||||
kernel_tagsname = "kernel_rk3588"
|
||||
elseif (string.find(kernel_release_info, "-rk35xx")) then
|
||||
kernel_tagsname = "kernel_rk35xx"
|
||||
elseif (string.find(kernel_release_info, "-h6") or string.find(kernel_release_info, "-zicai")) then
|
||||
kernel_tagsname = "kernel_h6"
|
||||
else
|
||||
kernel_tagsname = "kernel_stable"
|
||||
end
|
||||
end
|
||||
-- Create the kernel tags option.
|
||||
kernel_tags = o:option(Value, "amlogic_kernel_tags", translate("Kernel download tags:"))
|
||||
kernel_tags.description = translate("Set the kernel files download tags on github.com in [Online Download Update].")
|
||||
-- Populate the dropdown with the known tags.
|
||||
for value, display_name in pairs(known_tags) do
|
||||
kernel_tags:value(value, translate(display_name))
|
||||
end
|
||||
-- Ensure the default tag is included in the options.
|
||||
if not known_tags[kernel_tagsname] then
|
||||
kernel_tags:value(kernel_tagsname, kernel_tagsname)
|
||||
end
|
||||
-- Set the default and other properties.
|
||||
kernel_tags.default = kernel_tagsname
|
||||
kernel_tags.rmempty = false
|
||||
|
||||
--7.Set kernel version branch
|
||||
kernel_branch = o:option(Value, "amlogic_kernel_branch", translate("Set version branch:"))
|
||||
kernel_branch.description = translate("Set the version branch of the openwrt firmware and kernel selected in [Online Download Update].")
|
||||
kernel_branch.description = translate("Set the version branch of the OpenWrt files and kernel selected in [Online Download Update].")
|
||||
kernel_branch:value("5.4", translate("5.4"))
|
||||
kernel_branch:value("5.10", translate("5.10"))
|
||||
kernel_branch:value("5.15", translate("5.15"))
|
||||
@@ -71,19 +131,19 @@ local default_kernel_branch = luci.sys.exec("uname -r | grep -oE '^[1-9].[0-9]{1
|
||||
kernel_branch.default = trim(default_kernel_branch)
|
||||
kernel_branch.rmempty = false
|
||||
|
||||
--7.Restore configuration
|
||||
--8.Restore configuration
|
||||
firmware_config = o:option(Flag, "amlogic_firmware_config", translate("Keep config update:"))
|
||||
firmware_config.description = translate("Set whether to keep the current config during [Online Download Update] and [Manually Upload Update].")
|
||||
firmware_config.default = "1"
|
||||
firmware_config.rmempty = false
|
||||
|
||||
--8.Write bootloader
|
||||
--9.Write bootloader
|
||||
write_bootloader = o:option(Flag, "amlogic_write_bootloader", translate("Auto write bootloader:"))
|
||||
write_bootloader.description = translate("[Recommended choice] Set whether to auto write bootloader during install and update OpenWrt.")
|
||||
write_bootloader.default = "0"
|
||||
write_bootloader.rmempty = false
|
||||
|
||||
--9.Set the file system type of the shared partition
|
||||
--10.Set the file system type of the shared partition
|
||||
shared_fstype = o:option(ListValue, "amlogic_shared_fstype", translate("Set the file system type:"))
|
||||
shared_fstype.description = translate("[Default ext4] Set the file system type of the shared partition (/mnt/mmcblk*p4) when install OpenWrt.")
|
||||
shared_fstype:value("ext4", translate("ext4"))
|
||||
|
||||
@@ -368,35 +368,62 @@ msgstr "您可以自定义 [在线下载和更新] 中 OpenWrt 固件和内核
|
||||
msgid "Tip: The same files as the current OpenWrt system's BOARD (such as rock5b) and kernel (such as 5.10) will be downloaded."
|
||||
msgstr "提示:将下载与当前 OpenWrt 系统的 BOARD(如:rock5b)和内核(如:5.10)相同的文件。"
|
||||
|
||||
msgid "Download repository of OpenWrt:"
|
||||
msgstr "OpenWrt 固件的下载仓库:"
|
||||
msgid "OpenWrt download repository:"
|
||||
msgstr "OpenWrt 文件的下载仓库:"
|
||||
|
||||
msgid "Set the download repository of the OpenWrt files on github.com in [Online Download Update]."
|
||||
msgstr "设置 [在线下载更新] 中 github.com 的 OpenWrt 固件的下载仓库。"
|
||||
msgid "Set the OpenWrt files download repository on github.com in [Online Download Update]."
|
||||
msgstr "设置 [在线下载更新] 中 github.com 的 OpenWrt 文件的下载仓库。"
|
||||
|
||||
msgid "Keywords of Tags in Releases:"
|
||||
msgstr "Releases 里 Tags 的关键字:"
|
||||
msgid "OpenWrt download tags keyword:"
|
||||
msgstr "OpenWrt 下载标签关键字:"
|
||||
|
||||
msgid "Set the keywords of Tags in Releases of github.com in [Online Download Update]."
|
||||
msgstr "设置 [在线下载更新] 中 github.com 的 Releases 里 Tags 的关键字。"
|
||||
msgid "Set the OpenWrt files download tags keyword for github.com in [Online Download Update]."
|
||||
msgstr "设置 [在线下载更新] 中 github.com 的 OpenWrt 文件下载标签关键字。"
|
||||
|
||||
msgid "Suffix of OpenWrt files:"
|
||||
msgstr "OpenWrt 固件的后缀:"
|
||||
msgid "OpenWrt files suffix:"
|
||||
msgstr "OpenWrt 文件的后缀:"
|
||||
|
||||
msgid "Set the suffix of the OpenWrt in Releases of github.com in [Online Download Update]."
|
||||
msgstr "设置 [在线下载更新] 中 github.com 的 Releases 里 OpenWrt 固件的后缀。"
|
||||
msgid "Set the OpenWrt files download suffix for github.com in [Online Download Update]."
|
||||
msgstr "设置 [在线下载更新] 中 github.com 的 OpenWrt 文件的后缀。"
|
||||
|
||||
msgid "Download path of OpenWrt kernel:"
|
||||
msgstr "OpenWrt 内核的下载路径:"
|
||||
msgid "Kernel download repository:"
|
||||
msgstr "内核的下载仓库:"
|
||||
|
||||
msgid "Set the download path of the kernel in the github.com repository in [Online Download Update]."
|
||||
msgstr "设置 [在线下载更新] 中 github.com 仓库里内核的下载路径。"
|
||||
msgid "Set the kernel files download repository on github.com in [Online Download Update]."
|
||||
msgstr "设置 [在线下载更新] 中 github.com 的内核文件下载仓库。"
|
||||
|
||||
msgid "Kernel download tags:"
|
||||
msgstr "内核的下载标签:"
|
||||
|
||||
msgid "Set the kernel files download tags on github.com in [Online Download Update]."
|
||||
msgstr "设置 [在线下载更新] 中 github.com 的内核文件下载标签。"
|
||||
|
||||
msgid "kernel_rk3588 [Rockchip RK3588 Kernel]"
|
||||
msgstr "kernel_rk3588 [Rockchip RK3588 内核]"
|
||||
|
||||
msgid "kernel_rk35xx [Rockchip RK35xx Kernel]"
|
||||
msgstr "kernel_rk35xx [Rockchip RK35xx 内核]"
|
||||
|
||||
msgid "kernel_stable [Mainline Stable Kernel]"
|
||||
msgstr "kernel_stable [主线稳定内核]"
|
||||
|
||||
msgid "kernel_flippy [Mainline Stable Kernel by Flippy]"
|
||||
msgstr "kernel_flippy [Flippy 的主线稳定内核]"
|
||||
|
||||
msgid "kernel_h6 [Allwinner H6 Kernel]"
|
||||
msgstr "kernel_h6 [Allwinner H6 内核]"
|
||||
|
||||
msgid "kernel_dev [Development Kernel]"
|
||||
msgstr "kernel_dev [开发版内核]"
|
||||
|
||||
msgid "kernel_beta [Beta Kernel]"
|
||||
msgstr "kernel_beta [测试版内核]"
|
||||
|
||||
msgid "Set version branch:"
|
||||
msgstr "设置版本分支:"
|
||||
|
||||
msgid "Set the version branch of the openwrt firmware and kernel selected in [Online Download Update]."
|
||||
msgstr "设置 [在线下载更新] 时 OpenWrt 固件与内核所选用的版本分支。"
|
||||
msgid "Set the version branch of the OpenWrt files and kernel selected in [Online Download Update]."
|
||||
msgstr "设置 [在线下载更新] 时 OpenWrt 文件与内核所选用的版本分支。"
|
||||
|
||||
msgid "Keep config update:"
|
||||
msgstr "保留配置更新:"
|
||||
|
||||
@@ -5,6 +5,7 @@ config amlogic 'config'
|
||||
option amlogic_firmware_tag 'ARMv8'
|
||||
option amlogic_firmware_suffix '.img.gz'
|
||||
option amlogic_kernel_path 'https://github.com/breakingbadboy/OpenWrt'
|
||||
option amlogic_kernel_tags ''
|
||||
option amlogic_kernel_branch ''
|
||||
option amlogic_firmware_config '1'
|
||||
option amlogic_write_bootloader '0'
|
||||
|
||||
@@ -93,13 +93,12 @@ FIRMWARE_DOWNLOAD_PATH="/mnt/${EMMC_NAME}${PARTITION_NAME}4"
|
||||
if [[ -s "${AMLOGIC_SOC_FILE}" ]]; then
|
||||
source "${AMLOGIC_SOC_FILE}" 2>/dev/null
|
||||
PLATFORM="${PLATFORM}"
|
||||
SOC="${SOC}"
|
||||
BOARD="${BOARD}"
|
||||
else
|
||||
tolog "${AMLOGIC_SOC_FILE} file is missing!" "1"
|
||||
fi
|
||||
if [[ -z "${PLATFORM}" || -z "$(echo "${support_platform[@]}" | grep -w "${PLATFORM}")" || -z "${SOC}" || -z "${BOARD}" ]]; then
|
||||
tolog "Missing [ PLATFORM / SOC / BOARD ] value in ${AMLOGIC_SOC_FILE} file." "1"
|
||||
if [[ -z "${PLATFORM}" || -z "$(echo "${support_platform[@]}" | grep -w "${PLATFORM}")" || -z "${BOARD}" ]]; then
|
||||
tolog "Missing [ PLATFORM / BOARD ] value in ${AMLOGIC_SOC_FILE} file." "1"
|
||||
fi
|
||||
|
||||
tolog "PLATFORM: [ ${PLATFORM} ], BOARD: [ ${BOARD} ], Use in [ ${EMMC_NAME} ]"
|
||||
|
||||
@@ -91,16 +91,14 @@ KERNEL_DOWNLOAD_PATH="/mnt/${EMMC_NAME}${PARTITION_NAME}4"
|
||||
if [[ -s "${AMLOGIC_SOC_FILE}" ]]; then
|
||||
source "${AMLOGIC_SOC_FILE}" 2>/dev/null
|
||||
PLATFORM="${PLATFORM}"
|
||||
SOC="${SOC}"
|
||||
KERNEL_TAGS="${KERNEL_TAGS}"
|
||||
else
|
||||
tolog "${AMLOGIC_SOC_FILE} file is missing!" "1"
|
||||
fi
|
||||
if [[ -z "${PLATFORM}" || -z "$(echo "${support_platform[@]}" | grep -w "${PLATFORM}")" || -z "${SOC}" ]]; then
|
||||
if [[ -z "${PLATFORM}" || -z "$(echo "${support_platform[@]}" | grep -w "${PLATFORM}")" ]]; then
|
||||
tolog "Missing [ PLATFORM ] value in ${AMLOGIC_SOC_FILE} file." "1"
|
||||
fi
|
||||
|
||||
tolog "PLATFORM: [ ${PLATFORM} ], SOC: [ ${SOC} ], Use in [ ${EMMC_NAME} ]"
|
||||
tolog "PLATFORM: [ ${PLATFORM} ], Use in [ ${EMMC_NAME} ]"
|
||||
sleep 2
|
||||
|
||||
# Step 1. Set the kernel query api
|
||||
@@ -119,40 +117,48 @@ fi
|
||||
# Convert kernel repo to api format
|
||||
[[ "${kernel_repo}" =~ ^https: ]] && kernel_repo="$(echo ${kernel_repo} | awk -F'/' '{print $4"/"$5}')"
|
||||
kernel_api="https://github.com/${kernel_repo}"
|
||||
if [[ -n "${KERNEL_TAGS}" ]]; then
|
||||
kernel_tag="${KERNEL_TAGS}"
|
||||
tolog "01.03 Kernel repo: ${kernel_repo}"
|
||||
# Get the current kernel uname
|
||||
kernel_uname="$(uname -r 2>/dev/null)"
|
||||
tolog "01.04 Current kernel uname: ${kernel_uname}"
|
||||
|
||||
# Get the kernel tag from uci config
|
||||
op_kernel_tags="$(uci get amlogic.config.amlogic_kernel_tags 2>/dev/null)"
|
||||
# Determine the kernel tag
|
||||
if [[ -n "${op_kernel_tags}" ]]; then
|
||||
kernel_tag="${op_kernel_tags/kernel_/}"
|
||||
else
|
||||
if [[ "${SOC}" == "rk3588" ]]; then
|
||||
# Determine the kernel tag based on the current kernel uname
|
||||
if [[ "${kernel_uname}" =~ -rk3588 ]]; then
|
||||
kernel_tag="rk3588"
|
||||
elif [[ "${SOC}" == "rk3528" ]]; then
|
||||
elif [[ "${kernel_uname}" =~ -rk35xx ]]; then
|
||||
kernel_tag="rk35xx"
|
||||
elif [[ "${kernel_uname}" =~ -h6|-zicai ]]; then
|
||||
kernel_tag="h6"
|
||||
else
|
||||
kernel_tag="stable"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Remove the kernel_ prefix
|
||||
kernel_tag="${kernel_tag/kernel_/}"
|
||||
# If the kernel tag is a number, it is converted to a stable branch
|
||||
[[ "${kernel_tag}" =~ ^[1-9]+ ]] && kernel_tag="stable"
|
||||
# Save the kernel tag to uci config
|
||||
uci set amlogic.config.amlogic_kernel_tags="kernel_${kernel_tag}" 2>/dev/null
|
||||
uci commit amlogic 2>/dev/null
|
||||
fi
|
||||
tolog "01.05 Kernel tag: kernel_${kernel_tag}"
|
||||
sleep 2
|
||||
|
||||
# Step 2: Check if there is the latest kernel version
|
||||
check_kernel() {
|
||||
# 02. Query local version information
|
||||
tolog "02. Start checking the kernel version."
|
||||
|
||||
# 02.01 Query the current version
|
||||
if [[ "${kernel_tag}" == "rk3588" || "${kernel_tag}" == "rk35xx" ]]; then
|
||||
current_kernel_v=$(uname -r 2>/dev/null)
|
||||
else
|
||||
current_kernel_v=$(uname -r 2>/dev/null | grep -oE '^[1-9]\.[0-9]{1,2}\.[0-9]+')
|
||||
fi
|
||||
[[ -n "${current_kernel_v}" ]] || tolog "02.01 The current kernel version is not detected." "1"
|
||||
tolog "02.01 current version: ${current_kernel_v}"
|
||||
# 02.01 Get current kernel version
|
||||
[[ ! "${kernel_tag}" =~ ^(rk3588|rk35xx)$ ]] && kernel_uname="$(echo "${kernel_uname}" | cut -d'-' -f1)"
|
||||
[[ -n "${kernel_uname}" ]] || tolog "02.01 The current kernel version is not detected." "1"
|
||||
tolog "02.01 current version: ${kernel_uname}"
|
||||
sleep 2
|
||||
|
||||
# 02.02 Version comparison
|
||||
main_line_version="$(echo ${current_kernel_v} | awk -F '.' '{print $1"."$2}')"
|
||||
main_line_version="$(echo ${kernel_uname} | awk -F '.' '{print $1"."$2}')"
|
||||
|
||||
# 02.03 Query the selected branch in the settings
|
||||
server_kernel_branch="$(uci get amlogic.config.amlogic_kernel_branch 2>/dev/null | grep -oE '^[1-9].[0-9]{1,3}')"
|
||||
@@ -178,7 +184,7 @@ check_kernel() {
|
||||
)"
|
||||
[[ -n "${latest_version}" ]] || tolog "02.03 No kernel available, please use another kernel branch." "1"
|
||||
|
||||
tolog "02.04 current version: ${current_kernel_v}, Latest version: ${latest_version}"
|
||||
tolog "02.04 current version: ${kernel_uname}, Latest version: ${latest_version}"
|
||||
sleep 2
|
||||
|
||||
# Get the sha256 value of the latest version
|
||||
@@ -190,7 +196,7 @@ check_kernel() {
|
||||
)"
|
||||
[[ -n "${latest_kernel_sha256}" ]] && tolog "02.05 Kernel sha256: ${latest_kernel_sha256}"
|
||||
|
||||
if [[ "${latest_version}" == "${current_kernel_v}" ]]; then
|
||||
if [[ "${latest_version}" == "${kernel_uname}" ]]; then
|
||||
tolog "02.06 Already the latest version, no need to update." "1"
|
||||
sleep 2
|
||||
else
|
||||
|
||||
@@ -54,15 +54,14 @@ fi
|
||||
if [[ -s "${AMLOGIC_SOC_FILE}" ]]; then
|
||||
source "${AMLOGIC_SOC_FILE}" 2>/dev/null
|
||||
PLATFORM="${PLATFORM}"
|
||||
SOC="${SOC}"
|
||||
else
|
||||
tolog "${AMLOGIC_SOC_FILE} file is missing!" "1"
|
||||
fi
|
||||
if [[ -z "${PLATFORM}" || -z "$(echo "${support_platform[@]}" | grep -w "${PLATFORM}")" || -z "${SOC}" ]]; then
|
||||
if [[ -z "${PLATFORM}" || -z "$(echo "${support_platform[@]}" | grep -w "${PLATFORM}")" ]]; then
|
||||
tolog "Missing [ PLATFORM ] value in ${AMLOGIC_SOC_FILE} file." "1"
|
||||
fi
|
||||
|
||||
tolog "PLATFORM: [ ${PLATFORM} ], SOC: [ ${SOC} ]"
|
||||
tolog "PLATFORM: [ ${PLATFORM} ]"
|
||||
sleep 2
|
||||
|
||||
# 01. Query local version information
|
||||
|
||||
@@ -97,7 +97,7 @@ jobs:
|
||||
./build-release -t ${{ matrix.platform.target }} $compile_features $compile_compress $compile_nightly $compile_cargo_flags
|
||||
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
name: ${{ matrix.platform.target }}
|
||||
path: build/release/*
|
||||
@@ -138,7 +138,7 @@ jobs:
|
||||
./build/build-host-release -t ${{ matrix.target }}
|
||||
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
name: ${{ matrix.target }}
|
||||
path: build/release/*
|
||||
@@ -164,7 +164,7 @@ jobs:
|
||||
pwsh ./build/build-host-release.ps1 "full winservice"
|
||||
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
name: windows-native
|
||||
path: build/release/*
|
||||
|
||||
89
v2rayn/.github/workflows/build-linux.yml
vendored
89
v2rayn/.github/workflows/build-linux.yml
vendored
@@ -9,6 +9,12 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
- 'V*'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
env:
|
||||
OutputArch: "linux-64"
|
||||
@@ -21,7 +27,6 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
configuration: [Release]
|
||||
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
steps:
|
||||
@@ -31,18 +36,18 @@ jobs:
|
||||
submodules: 'recursive'
|
||||
fetch-depth: '0'
|
||||
|
||||
- name: Setup
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v5.0.0
|
||||
with:
|
||||
dotnet-version: '8.0.x'
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
cd v2rayN
|
||||
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-x64 --self-contained=true -o $OutputPath64
|
||||
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-arm64 --self-contained=true -o $OutputPathArm64
|
||||
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-x64 --self-contained=true -p:PublishTrimmed=true -o $OutputPath64
|
||||
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-arm64 --self-contained=true -p:PublishTrimmed=true -o $OutputPathArm64
|
||||
cd v2rayN
|
||||
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-x64 --self-contained=true -o "$OutputPath64"
|
||||
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-arm64 --self-contained=true -o "$OutputPathArm64"
|
||||
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-x64 --self-contained=true -p:PublishTrimmed=true -o "$OutputPath64"
|
||||
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-arm64 --self-contained=true -p:PublishTrimmed=true -o "$OutputPathArm64"
|
||||
|
||||
- name: Upload build artifacts
|
||||
uses: actions/upload-artifact@v5.0.0
|
||||
@@ -56,8 +61,8 @@ jobs:
|
||||
if: github.event.inputs.release_tag != ''
|
||||
run: |
|
||||
chmod 755 package-debian.sh
|
||||
./package-debian.sh $OutputArch $OutputPath64 ${{ github.event.inputs.release_tag }}
|
||||
./package-debian.sh $OutputArchArm $OutputPathArm64 ${{ github.event.inputs.release_tag }}
|
||||
./package-debian.sh "$OutputArch" "$OutputPath64" "${{ github.event.inputs.release_tag }}"
|
||||
./package-debian.sh "$OutputArchArm" "$OutputPathArm64" "${{ github.event.inputs.release_tag }}"
|
||||
|
||||
- name: Upload deb to release
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
@@ -73,8 +78,8 @@ jobs:
|
||||
if: github.event.inputs.release_tag != ''
|
||||
run: |
|
||||
chmod 755 package-release-zip.sh
|
||||
./package-release-zip.sh $OutputArch $OutputPath64
|
||||
./package-release-zip.sh $OutputArchArm $OutputPathArm64
|
||||
./package-release-zip.sh "$OutputArch" "$OutputPath64"
|
||||
./package-release-zip.sh "$OutputArchArm" "$OutputPathArm64"
|
||||
|
||||
- name: Upload zip archive to release
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
@@ -85,36 +90,62 @@ jobs:
|
||||
file_glob: true
|
||||
prerelease: true
|
||||
|
||||
# release RHEL package
|
||||
- name: Package RPM (RHEL-family)
|
||||
if: github.event.inputs.release_tag != ''
|
||||
rpm:
|
||||
needs: build
|
||||
if: |
|
||||
(github.event_name == 'workflow_dispatch' && github.event.inputs.release_tag != '') ||
|
||||
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/'))
|
||||
runs-on: ubuntu-24.04
|
||||
container:
|
||||
image: quay.io/almalinuxorg/10-base:latest
|
||||
options: --platform=linux/amd64/v2
|
||||
env:
|
||||
RELEASE_TAG: ${{ github.event.inputs.release_tag != '' && github.event.inputs.release_tag || github.ref_name }}
|
||||
|
||||
steps:
|
||||
- name: Prepare tools (Red Hat)
|
||||
run: |
|
||||
chmod 755 package-rhel.sh
|
||||
# Build for both x86_64 and aarch64 in one go (explicit version passed; no --buildfrom)
|
||||
./package-rhel.sh "${{ github.event.inputs.release_tag }}" --arch all
|
||||
dnf -y makecache
|
||||
dnf -y install epel-release
|
||||
dnf -y install sudo git rpm-build rpmdevtools dnf-plugins-core rsync findutils tar gzip unzip which
|
||||
|
||||
- name: Checkout repo (for scripts)
|
||||
uses: actions/checkout@v5.0.0
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
fetch-depth: '0'
|
||||
|
||||
- name: Restore build artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: v2rayN-linux
|
||||
path: ${{ github.workspace }}/v2rayN/Release
|
||||
|
||||
- name: Ensure script permissions
|
||||
run: chmod 755 package-rhel.sh
|
||||
|
||||
- name: Package RPM (RHEL-family)
|
||||
run: ./package-rhel.sh "${RELEASE_TAG}" --arch all
|
||||
|
||||
- name: Collect RPMs into workspace
|
||||
if: github.event.inputs.release_tag != ''
|
||||
run: |
|
||||
mkdir -p "${{ github.workspace }}/dist/rpm"
|
||||
rsync -av "$HOME/rpmbuild/RPMS/" "${{ github.workspace }}/dist/rpm/"
|
||||
# Rename to requested filenames
|
||||
find "${{ github.workspace }}/dist/rpm" -name "v2rayN-*-1.x86_64.rpm" -exec mv {} "${{ github.workspace }}/dist/rpm/v2rayN-linux-rhel-x64.rpm" \; || true
|
||||
find "${{ github.workspace }}/dist/rpm" -name "v2rayN-*-1.aarch64.rpm" -exec mv {} "${{ github.workspace }}/dist/rpm/v2rayN-linux-rhel-arm64.rpm" \; || true
|
||||
mkdir -p "$GITHUB_WORKSPACE/dist/rpm"
|
||||
rsync -av "$HOME/rpmbuild/RPMS/" "$GITHUB_WORKSPACE/dist/rpm/" || true
|
||||
find "$GITHUB_WORKSPACE/dist/rpm" -name "v2rayN-*-1*.x86_64.rpm" -exec mv {} "$GITHUB_WORKSPACE/dist/rpm/v2rayN-linux-rhel-64.rpm" \; || true
|
||||
find "$GITHUB_WORKSPACE/dist/rpm" -name "v2rayN-*-1*.aarch64.rpm" -exec mv {} "$GITHUB_WORKSPACE/dist/rpm/v2rayN-linux-rhel-arm64.rpm" \; || true
|
||||
echo "==== Dist tree ===="
|
||||
ls -R "$GITHUB_WORKSPACE/dist/rpm" || true
|
||||
|
||||
- name: Upload RPM artifacts
|
||||
if: github.event.inputs.release_tag != ''
|
||||
uses: actions/upload-artifact@v5.0.0
|
||||
with:
|
||||
name: v2rayN-rpm
|
||||
path: |
|
||||
${{ github.workspace }}/dist/rpm/**/*.rpm
|
||||
path: dist/rpm/**/*.rpm
|
||||
|
||||
- name: Upload RPMs to release
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
if: github.event.inputs.release_tag != ''
|
||||
with:
|
||||
file: ${{ github.workspace }}/dist/rpm/**/*.rpm
|
||||
tag: ${{ github.event.inputs.release_tag }}
|
||||
file: dist/rpm/**/*.rpm
|
||||
tag: ${{ env.RELEASE_TAG }}
|
||||
file_glob: true
|
||||
prerelease: true
|
||||
|
||||
@@ -19,6 +19,23 @@ else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ======================== Kernel version check (require >= 6.11) =======================
|
||||
MIN_KERNEL_MAJOR=6
|
||||
MIN_KERNEL_MINOR=11
|
||||
KERNEL_FULL=$(uname -r)
|
||||
KERNEL_MAJOR=$(echo "$KERNEL_FULL" | cut -d. -f1)
|
||||
KERNEL_MINOR=$(echo "$KERNEL_FULL" | cut -d. -f2)
|
||||
|
||||
echo "[INFO] Detected kernel version: $KERNEL_FULL"
|
||||
|
||||
if (( KERNEL_MAJOR < MIN_KERNEL_MAJOR )) || { (( KERNEL_MAJOR == MIN_KERNEL_MAJOR )) && (( KERNEL_MINOR < MIN_KERNEL_MINOR )); }; then
|
||||
echo "[ERROR] Kernel $KERNEL_FULL is too old. Requires Linux >= ${MIN_KERNEL_MAJOR}.${MIN_KERNEL_MINOR}."
|
||||
echo "Please upgrade your system or use a newer container (e.g. Fedora 42+, RHEL 10+, Debian 13+)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[OK] Kernel version >= ${MIN_KERNEL_MAJOR}.${MIN_KERNEL_MINOR}."
|
||||
|
||||
# ===== Config & Parse arguments =========================================================
|
||||
VERSION_ARG="${1:-}" # Pass version number like 7.13.8, or leave empty
|
||||
WITH_CORE="both" # Default: bundle both xray+sing-box
|
||||
|
||||
@@ -35,9 +35,13 @@ public class JsonUtils
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
public static T DeepCopy<T>(T obj)
|
||||
public static T? DeepCopy<T>(T? obj)
|
||||
{
|
||||
return Deserialize<T>(Serialize(obj, false))!;
|
||||
if (obj is null)
|
||||
{
|
||||
return default;
|
||||
}
|
||||
return Deserialize<T>(Serialize(obj, false));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -67,7 +71,7 @@ public class JsonUtils
|
||||
/// </summary>
|
||||
/// <param name="strJson"></param>
|
||||
/// <returns></returns>
|
||||
public static JsonNode? ParseJson(string strJson)
|
||||
public static JsonNode? ParseJson(string? strJson)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -116,7 +120,7 @@ public class JsonUtils
|
||||
/// <param name="obj"></param>
|
||||
/// <param name="options"></param>
|
||||
/// <returns></returns>
|
||||
public static string Serialize(object? obj, JsonSerializerOptions options)
|
||||
public static string Serialize(object? obj, JsonSerializerOptions? options)
|
||||
{
|
||||
var result = string.Empty;
|
||||
try
|
||||
@@ -125,7 +129,7 @@ public class JsonUtils
|
||||
{
|
||||
return result;
|
||||
}
|
||||
result = JsonSerializer.Serialize(obj, options);
|
||||
result = JsonSerializer.Serialize(obj, options ?? _defaultSerializeOptions);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -963,13 +963,13 @@ public class Utils
|
||||
|
||||
#region Platform
|
||||
|
||||
public static bool IsWindows() => RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
|
||||
public static bool IsWindows() => OperatingSystem.IsWindows();
|
||||
|
||||
public static bool IsLinux() => RuntimeInformation.IsOSPlatform(OSPlatform.Linux);
|
||||
public static bool IsLinux() => OperatingSystem.IsLinux();
|
||||
|
||||
public static bool IsOSX() => RuntimeInformation.IsOSPlatform(OSPlatform.OSX);
|
||||
public static bool IsOSX() => OperatingSystem.IsMacOS();
|
||||
|
||||
public static bool IsNonWindows() => !RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
|
||||
public static bool IsNonWindows() => !OperatingSystem.IsWindows();
|
||||
|
||||
public static string GetExeName(string name)
|
||||
{
|
||||
|
||||
@@ -472,7 +472,7 @@
|
||||
<value>Langue (redémarrage requis)</value>
|
||||
</data>
|
||||
<data name="menuAddServerViaClipboard" xml:space="preserve">
|
||||
<value>Importer des liens depuis le presse-papiers (Ctrl+V)</value>
|
||||
<value>Importer liens depuis le presse-papiers (Ctrl+V)</value>
|
||||
</data>
|
||||
<data name="menuAddServerViaScan" xml:space="preserve">
|
||||
<value>Scanner le QR code à l’écran (Ctrl+S)</value>
|
||||
@@ -619,7 +619,7 @@
|
||||
<value>Sécurité couche transport (TLS)</value>
|
||||
</data>
|
||||
<data name="TipNetwork" xml:space="preserve">
|
||||
<value>*tcp par défaut ; un mauvais choix empêchera la connexion</value>
|
||||
<value>*tcp par défaut ; un mauvais choix bloque la connexion</value>
|
||||
</data>
|
||||
<data name="TbCoreType" xml:space="preserve">
|
||||
<value>Type de Core</value>
|
||||
@@ -652,7 +652,7 @@
|
||||
<value>Port Socks</value>
|
||||
</data>
|
||||
<data name="TipPreSocksPort" xml:space="preserve">
|
||||
<value>*Valeur du port Socks pour la configuration personnalisée (facultatif). Si défini, Xray/sing-box (Tun) démarrera un service Socks en amont supplémentaire pour fournir le routage sélectif et l’affichage de la vitesse.</value>
|
||||
<value>*Valeur du port Socks (config perso, optionnelle). Si défini, Xray/sing-box (Tun) démarre un service Socks en amont supplémentaire pour fournir le routage sélectif et l’affichage de la vitesse.</value>
|
||||
</data>
|
||||
<data name="TbBrowse" xml:space="preserve">
|
||||
<value>Parcourir</value>
|
||||
@@ -670,7 +670,7 @@
|
||||
<value>Masquer la fenêtre au démarrage</value>
|
||||
</data>
|
||||
<data name="TbSettingsAutoUpdateInterval" xml:space="preserve">
|
||||
<value>Intervalle de mise à jour automatique des fichiers Geo (heures)</value>
|
||||
<value>Intervalle de mise à jour auto des fichiers Geo (heures)</value>
|
||||
</data>
|
||||
<data name="TbSettingsCore" xml:space="preserve">
|
||||
<value>Core : paramètres de base</value>
|
||||
@@ -691,7 +691,7 @@
|
||||
<value>domainStrategy de Freedom (sortant)</value>
|
||||
</data>
|
||||
<data name="TbSettingsEnableAutoAdjustMainLvColWidth" xml:space="preserve">
|
||||
<value>Auto-ajuster la largeur des colonnes après maj. des abonnements</value>
|
||||
<value>Auto-ajuster la largeur des colonnes après maj. abonnements</value>
|
||||
</data>
|
||||
<data name="TbSettingsEnableCheckPreReleaseUpdate" xml:space="preserve">
|
||||
<value>Vérifier les mises à jour pré-version (à activer avec prudence)</value>
|
||||
@@ -724,7 +724,7 @@
|
||||
<value>Mot de passe d’authentification</value>
|
||||
</data>
|
||||
<data name="TbSettingsRemoteDNS" xml:space="preserve">
|
||||
<value>DNS personnalisés (plusieurs possibles, séparés par des virgules)</value>
|
||||
<value>DNS perso (plusieurs configurables, séparés par virgules)</value>
|
||||
</data>
|
||||
<data name="TbSettingsSetUWP" xml:space="preserve">
|
||||
<value>Lever la restriction de proxy en boucle locale pour les applications Win10 UWP</value>
|
||||
@@ -865,7 +865,7 @@
|
||||
<value>Documentation détaillée des règles</value>
|
||||
</data>
|
||||
<data name="TbDnsObjectDoc" xml:space="preserve">
|
||||
<value>Saisie de DnsObject prise en charge (format JSON), cliquer pour voir la documentation</value>
|
||||
<value>Saisie DnsObject prise en charge (format JSON), cliquer pour doc</value>
|
||||
</data>
|
||||
<data name="SubUrlTips" xml:space="preserve">
|
||||
<value>Laissez vide pour les groupes ordinaires</value>
|
||||
@@ -898,7 +898,7 @@
|
||||
<value>Filtrage par alias (regex)</value>
|
||||
</data>
|
||||
<data name="TbDisplayLog" xml:space="preserve">
|
||||
<value>Afficher les journaux</value>
|
||||
<value>Afficher les logs</value>
|
||||
</data>
|
||||
<data name="TbEnableTunAs" xml:space="preserve">
|
||||
<value>Activer Tun</value>
|
||||
@@ -979,7 +979,7 @@
|
||||
<value>En attente du test (appuyer sur Échap pour arrêter)...</value>
|
||||
</data>
|
||||
<data name="TipDisplayLog" xml:space="preserve">
|
||||
<value>Désactivez ceci en cas de coupures anormales</value>
|
||||
<value>Désactiver cette option si coupure anormale</value>
|
||||
</data>
|
||||
<data name="MsgSkipSubscriptionUpdate" xml:space="preserve">
|
||||
<value>Mise à jour désactivée, abonnement ignoré</value>
|
||||
@@ -1009,10 +1009,10 @@
|
||||
<value>DNS personnalisé sing-box</value>
|
||||
</data>
|
||||
<data name="TbDnsSingboxObjectDoc" xml:space="preserve">
|
||||
<value>Veuillez renseigner la structure JSON DNS ; cliquer pour voir la documentation</value>
|
||||
<value>Saisissez la structure JSON DNS ; cliquez pour voir la doc.</value>
|
||||
</data>
|
||||
<data name="TbSettingDnsImportDefConfig" xml:space="preserve">
|
||||
<value>Cliquez pour importer la configuration DNS par défaut</value>
|
||||
<value>Cliquez pour importer la config DNS par défaut</value>
|
||||
</data>
|
||||
<data name="TbdomainStrategy4Singbox" xml:space="preserve">
|
||||
<value>Stratégie résolution domaine (sing-box)</value>
|
||||
@@ -1045,10 +1045,10 @@
|
||||
<value>Algo contrôle congestion</value>
|
||||
</data>
|
||||
<data name="LvPrevProfile" xml:space="preserve">
|
||||
<value>Alias de configuration du proxy amont</value>
|
||||
<value>Alias de config du proxy amont</value>
|
||||
</data>
|
||||
<data name="LvNextProfile" xml:space="preserve">
|
||||
<value>Alias de configuration du proxy aval</value>
|
||||
<value>Alias de config du proxy aval</value>
|
||||
</data>
|
||||
<data name="LvPrevProfileTip" xml:space="preserve">
|
||||
<value>Assurez-vous que l’alias config existe et est unique</value>
|
||||
@@ -1114,7 +1114,7 @@
|
||||
<value>Activer le fragmentation (Fragment)</value>
|
||||
</data>
|
||||
<data name="TbSettingsEnableCacheFile4Sbox" xml:space="preserve">
|
||||
<value>Activer le fichier de cache de sing-box (fichiers de reˋgles)</value>
|
||||
<value>Activer le fichier de cache de sing-box (fichiers règles)</value>
|
||||
</data>
|
||||
<data name="LvCustomRulesetPath4Singbox" xml:space="preserve">
|
||||
<value>Set de règles sing-box perso</value>
|
||||
@@ -1207,7 +1207,7 @@
|
||||
<value>Stratégie de résolution par défaut des sortants</value>
|
||||
</data>
|
||||
<data name="TbSettingsMainGirdOrientation" xml:space="preserve">
|
||||
<value>Orientation de la mise en page principale (redémarrage requis)</value>
|
||||
<value>Orientation mise en page principale (redémarrage requis)</value>
|
||||
</data>
|
||||
<data name="TbSettingsDomainDNSAddress" xml:space="preserve">
|
||||
<value>Adresse de résolution de domaine pour sortants</value>
|
||||
@@ -1330,7 +1330,7 @@
|
||||
<value>JSON brut XHTTP Extra, format : { XHTTPObject }</value>
|
||||
</data>
|
||||
<data name="TbSettingsHide2TrayWhenClose" xml:space="preserve">
|
||||
<value>Masquer dans la barre d’état lors de la fermeture de la fenêtre</value>
|
||||
<value>Masquer dans la barre d’état à la fermeture de la fenêtre</value>
|
||||
</data>
|
||||
<data name="TbSettingsMixedConcurrencyCount" xml:space="preserve">
|
||||
<value>Niveau de concurrence lors des tests multithread</value>
|
||||
@@ -1351,7 +1351,7 @@
|
||||
<value>Thème</value>
|
||||
</data>
|
||||
<data name="menuCopyProxyCmdToClipboard" xml:space="preserve">
|
||||
<value>Copier la commande proxy terminal vers le presse-papiers</value>
|
||||
<value>Copier la cmd proxy terminal dans le presse-papiers</value>
|
||||
</data>
|
||||
<data name="SpeedtestingTestFailedPart" xml:space="preserve">
|
||||
<value>Recommencer le test des éléments échoués, {0} restants. Appuyez sur Échap pour arrêter...</value>
|
||||
@@ -1369,7 +1369,7 @@
|
||||
<value>Plage de ports sautés</value>
|
||||
</data>
|
||||
<data name="TbPorts7Tips" xml:space="preserve">
|
||||
<value>Écrase le port ; pour plusieurs groupes, séparez par des virgules (,)</value>
|
||||
<value>Écrase le port ; pour plusieurs groupes, séparer par virgules (,)</value>
|
||||
</data>
|
||||
<data name="menuGenGroupMultipleServer" xml:space="preserve">
|
||||
<value>Générer un groupe de stratégie depuis plusieurs profils</value>
|
||||
@@ -1447,7 +1447,7 @@
|
||||
<value>Valider les IP des domaines de la région concernée</value>
|
||||
</data>
|
||||
<data name="TbValidateDirectExpectedIPsDesc" xml:space="preserve">
|
||||
<value>Après configuration, les IP renvoyées pour les domaines régionaux (p. ex. geosite:cn) seront validées ; seules les IP attendues seront retournées</value>
|
||||
<value>Après config, les IP renvoyées des domaines régionaux (ex. geosite:cn) seront vérifiées ; seules les IP attendues seront retournées.</value>
|
||||
</data>
|
||||
<data name="TbCustomDNSEnable" xml:space="preserve">
|
||||
<value>Activer le DNS personnalisé</value>
|
||||
@@ -1471,7 +1471,7 @@
|
||||
<value>Modèle de configuration complet v2ray</value>
|
||||
</data>
|
||||
<data name="TbRayFullConfigTemplateDesc" xml:space="preserve">
|
||||
<value>Ajoute seulement la configuration sortante, routing.balancers et routing.rules.outboundTag. Voir la documentation.</value>
|
||||
<value>Ajoute seulement la config sortante, routing.balancers et routing.rules.outboundTag. Voir la doc.</value>
|
||||
</data>
|
||||
<data name="TbAddProxyProtocolOutboundOnly" xml:space="preserve">
|
||||
<value>N’ajoutez pas de sorties pour protocoles non-proxy.</value>
|
||||
@@ -1492,10 +1492,10 @@
|
||||
<value>Début de l’analyse et du traitement du contenu d’abonnement</value>
|
||||
</data>
|
||||
<data name="TbSelectProfile" xml:space="preserve">
|
||||
<value>Sélectionner une configuration</value>
|
||||
<value>Choisir une config.</value>
|
||||
</data>
|
||||
<data name="TbFakeIPTips" xml:space="preserve">
|
||||
<value>Actif globalement par défaut, avec filtrage FakeIP intégré ; ne fonctionne que dans sing-box</value>
|
||||
<value>Actif globalement par défaut, avec filtre FakeIP intégré ; ne fonctionne que dans sing-box</value>
|
||||
</data>
|
||||
<data name="PleaseAddAtLeastOneServer" xml:space="preserve">
|
||||
<value>Veuillez ajouter au moins une configuration</value>
|
||||
|
||||
@@ -10,15 +10,17 @@ public partial class App : Application
|
||||
|
||||
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
||||
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
|
||||
|
||||
DataContext = StatusBarViewModel.Instance;
|
||||
}
|
||||
|
||||
public override void OnFrameworkInitializationCompleted()
|
||||
{
|
||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||
{
|
||||
AppManager.Instance.InitComponents();
|
||||
if (!Design.IsDesignMode)
|
||||
{
|
||||
AppManager.Instance.InitComponents();
|
||||
DataContext = StatusBarViewModel.Instance;
|
||||
}
|
||||
|
||||
desktop.Exit += OnExit;
|
||||
desktop.MainWindow = new MainWindow();
|
||||
|
||||
@@ -54,12 +54,19 @@ internal class Program
|
||||
// Avalonia configuration, don't remove; also used by visual designer.
|
||||
public static AppBuilder BuildAvaloniaApp()
|
||||
{
|
||||
return AppBuilder.Configure<App>()
|
||||
.UsePlatformDetect()
|
||||
//.WithInterFont()
|
||||
.WithFontByDefault()
|
||||
.LogToTrace()
|
||||
.UseReactiveUI()
|
||||
.With(new MacOSPlatformOptions { ShowInDock = AppManager.Instance.Config.UiItem.MacOSShowInDock });
|
||||
var builder = AppBuilder.Configure<App>()
|
||||
.UsePlatformDetect()
|
||||
//.WithInterFont()
|
||||
.WithFontByDefault()
|
||||
.LogToTrace()
|
||||
.UseReactiveUI();
|
||||
|
||||
if (OperatingSystem.IsMacOS())
|
||||
{
|
||||
var showInDock = Design.IsDesignMode || AppManager.Instance.Config.UiItem.MacOSShowInDock;
|
||||
builder = builder.With(new MacOSPlatformOptions { ShowInDock = showInDock });
|
||||
}
|
||||
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user