Skip to content

Commit bf1c161

Browse files
committed
release: v1.4.4
New: recursive multi-hop node chaining. config_gen follows chain_node_id transitively and wires the dial-proxy at every hop (cycle detection + depth cap), so a 3-node chain (exit → mid → entry) generates fully; before, only the first link was wired and deeper relays silently dialed direct. Changed: WireGuard can only be a chain's EXIT hop — xray can't tunnel traffic through a WireGuard outbound (as a relay it forwards 0 bytes, verified live). Guarded in the nodes API (400), config_gen (skip + warn), and the Node form (omit WG from the chain dropdown). Frontend build moved to Vite 8 / Rolldown (@vitejs/plugin-react 4→6), dropping bundled esbuild. Fixed: Route Explainer accepts a full URL — it now extracts the bare host instead of resolving the whole string (was a confusing NXDOMAIN). Security: dropping esbuild closes 2 dev-scope esbuild advisories + the Vite ≤6.4.1 path-traversal; react-router 7.15→7.18 (CSRF); @babel/core / form-data / js-yaml patched via npm audit fix. npm audit → 0. No schema migration, no breaking changes. Backend suite 762 passing; 25 frontend tests passing; npm audit clean.
1 parent 2b9649b commit bf1c161

3 files changed

Lines changed: 53 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,57 @@ All notable user-facing changes to PiTun. Full per-release detail lives in the
44
[GitHub Releases](https://github.com/DaveBugg/PiTun/releases); this file is the
55
committed summary.
66

7+
## v1.4.4 — 2026-06-16
8+
9+
Multi-hop node chaining that actually wires every hop, a Route Explainer that
10+
accepts pasted URLs, and a frontend toolchain refresh (Vite 5→8 / Rolldown) that
11+
drops the vulnerable esbuild dependency. Plus security bumps for react-router and
12+
build-time transitives.
13+
14+
### Added
15+
16+
- **Recursive multi-hop node chaining.** `config_gen` now follows `chain_node_id`
17+
transitively, wiring proxySettings (→ `sockopt.dialerProxy`) at every hop with
18+
cycle detection and a depth cap. A 3-node chain (exit → mid → entry) generates
19+
fully; previously only the first link was wired and deeper relays silently
20+
dialed direct, collapsing the chain.
21+
22+
### Changed
23+
24+
- **WireGuard can only be a chain's exit hop.** xray can't tunnel traffic THROUGH
25+
a WireGuard outbound — as a relay it forwards 0 bytes (config is accepted, xray
26+
starts, traffic dies; verified live: WG-over-VLESS works, VLESS-over-WG and
27+
WG-over-WG = 0 B). Enforced three ways: the nodes API rejects pointing a chain
28+
at a WireGuard node (400), config_gen skips a WG-relay link with a warning, and
29+
the Node form omits WireGuard from the "chain via" dropdown.
30+
- **Frontend build moved to Vite 8 / Rolldown** (`@vitejs/plugin-react` 4→6),
31+
which removes the bundled esbuild entirely.
32+
33+
### Fixed
34+
35+
- **Route Explainer accepts a full URL.** Pasting `https://host/path` resolved the
36+
whole string as a domain → confusing NXDOMAIN. It now extracts the bare host
37+
(strips scheme / userinfo / path / port, leaves bare IPv6 intact).
38+
39+
### Security / dependencies
40+
41+
- Dropping esbuild (via the Vite 8 bump) closes 2 dev-scope esbuild advisories
42+
(Deno integrity GHSA-gv7w-rqvm-qjhr; Windows dev-server file read
43+
GHSA-g7r4-m6w7-qqqr) and the Vite ≤6.4.1 path-traversal (GHSA-4w7w-66w2-5vf9).
44+
- `react-router` / `react-router-dom` 7.15.0 → 7.18.0 — CSRF via PUT/PATCH/DELETE
45+
document requests (GHSA-84g9-w2xq-vcv6).
46+
- Build-time transitives patched via `npm audit fix`: `@babel/core` (arbitrary
47+
file read), `form-data` (CRLF injection), `js-yaml` (DoS). `npm audit` → 0.
48+
49+
### Notes
50+
51+
- No breaking changes, no schema migration (alembic head stays at `017`).
52+
- The frontend now builds with Rolldown — output is functionally identical;
53+
verified in a browser (authenticated, 0 console errors).
54+
- Backend suite 762 passing; 25 frontend tests passing; `npm audit` clean.
55+
56+
**Full Changelog:** https://github.com/DaveBugg/PiTun/compare/v1.4.3...v1.4.4
57+
758
## v1.4.3 — 2026-06-15
859

960
Set-aware routing rule **export/import** (pick scopes, resolve conflicts, import

backend/app/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# OpenAPI metadata, `/health` response, and `/system/status` so the
66
# frontend can display it next to the xray version. Bump this on each
77
# release — frontend keeps its own version in `frontend/package.json`.
8-
APP_VERSION = "1.4.3"
8+
APP_VERSION = "1.4.4"
99

1010

1111
class Settings(BaseSettings):

frontend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "pitun-frontend",
33
"private": true,
4-
"version": "1.4.3",
4+
"version": "1.4.4",
55
"license": "BSD-3-Clause",
66
"type": "module",
77
"scripts": {

0 commit comments

Comments
 (0)