From ad389c641dbd9531b1f9607a759c0bd16b2ea475 Mon Sep 17 00:00:00 2001 From: Naveax Date: Fri, 4 Sep 2026 01:27:46 +0300 Subject: [PATCH] build(config): prepare ReVoltVPN 3.3.5 release Bump the app version and document the 3.3.5 changes while preserving the published 3.3.4 release history. --- CHANGELOG.md | 41 +++++++++++++++++++++++++++++++++++++++++ pubspec.yaml | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 58a17b5..e570db9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,47 @@ Versions follow [semver](https://semver.org/): MAJOR.MINOR.PATCH --- +## [3.3.5] — 2026-09-03 + +### Added +- **OS-level session-expiry enforcement.** The native VPN service now enforces the + server deadline with both a monotonic in-process handler and `AlarmManager`, so + expiry does not depend on the Flutter UI process staying alive. +- Only the non-secret runtime generation token and absolute expiry timestamp are + persisted app-private for the OS alarm. Per-session VLESS UUID/SOCKS credentials + remain memory-only; if Android cannot redeliver the original start intent, the + runtime fails closed instead of reconstructing a tunnel from secrets on disk. +- A successful support reward now requests an immediate control-plane refresh so the + extended deadline is pushed to the native service without waiting for the next poll. + +### Fixed +- **Session clock reattach race.** `SessionTimer` is eager and evaluates the current + VPN state once after construction, so a UI process attaching to an already-live + tunnel no longer leaves the countdown at `00:00:00`. +- Forced support sync no longer disappears behind an already-running periodic sync; + it waits for the active request and then performs a fresh control-plane refresh. +- VPN permission requests now fail with `NO_ACTIVITY` during Android activity detach + instead of dereferencing a null Activity. +- Receiver cleanup logs lifecycle races instead of silently swallowing them. +- An early/stale session-expiry alarm no longer leaves an otherwise unused service + process running. + +### Changed +- Unknown/obsolete persisted connection-mode labels, including the old `ass`/`auto` + values, now fail closed to TUN. Only the explicit current `proxy` value restores + SOCKS5 mode. +- App version is `3.3.5+31`. + +### Security +- Existing AdMob bypass/callback behavior is intentionally unchanged. +- Build-time mutation of the global Flutter pub cache remains removed; the hardened + `flutter_vless_android` 1.1.5 source remains vendored and immutable during builds. +- Full IPv4/IPv6 TUN routing, fail-closed DNS/TUN setup, authenticated ephemeral + loopback SOCKS5, generation-scoped STOP/state handling, production config pinning, + dependency verification, R8 gates and updater host allowlists remain in force. + +--- + ## [3.3.4] — 2026-09-02 ### Added diff --git a/pubspec.yaml b/pubspec.yaml index 4308f0d..8761d2b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 3.3.4+30 +version: 3.3.5+31 environment: sdk: ">=3.0.0 <4.0.0"