feat(app): OS session-expiry enforcement, session persistence, support sync

Enforce session expiry at the OS level (AlarmManager + handler) so the tunnel dies even if the UI process is killed; persist the session so a START_STICKY restart re-establishes it; sync immediately after a support top-up; slow the session beacon 5s/30s -> 60s/60s; drop the Always-on-VPN deep-link and the legacy 'ass' migration. Docs: CHANGELOG 3.3.4, privacy-policy log disclosure, README.
This commit is contained in:
esefxdz committed 2026-09-02 20:33:33 +03:00
1 parent dfeb7f161c
commit 9ac236a981
15 files changed
+447 -383

No files matched your search

+33
View File
@@ -5,6 +5,39 @@ Versions follow [semver](https://semver.org/): MAJOR.MINOR.PATCH
---
## [3.3.4] — 2026-09-02
### Added
- **OS-level session-expiry enforcement.** The VPN service now holds an absolute
deadline and tears the tunnel down on its own clock — a main-looper handler
plus an `AlarmManager` exact alarm (falling back to an inexact alarm on
Android 13+ when exact alarms aren't granted). The app pushes
`now + expires_in_seconds` on each session sync, so a session ends even if the
UI process has been killed.
- **Session survival across process death.** The service persists the active
session and re-establishes it when Android restarts it (`START_STICKY`).
- **Support-ad extension reflected immediately.** A rewarded "Support us" ad now
forces an immediate server sync, so the countdown and expiry deadline update
without waiting for the next heartbeat.
### Changed
- **Session-status beacon slowed.** Foreground poll: 5 s → 60 s; background poll:
30 s → 60 s.
- **Background-reliability guidance.** The "Always-on VPN" settings deep-link was
removed; the battery-optimisation exemption remains, with expiry now enforced
by the service itself.
### Removed
- Legacy `ass` connection-mode migration — unrecognized persisted modes now
default to TUN.
### Security & privacy
- Session credentials and the per-user VLESS UUID are now held app-private on
disk (`active_session.bin`) for the session's lifetime and removed on
disconnect or expiry. Previously they were memory-only.
---
## [3.3.3] — 2026-09-01
### Fixed