Enhancements
- Subscriber dashboard (#122).
?format=pageon a subscription URL serves a page showing the subscription's state, expiry, traffic against its quota, and the config links;?format=inforeturns the same as JSON. Copy the link from a client's QR dialog. The bare URL stays byte-identical for proxy clients, and a disabled client shows its state and nothing else. - Cloudflare API Token (#126, #123). Issuing a certificate through Cloudflare no longer means handing over the Global API Key that controls your entire account — the script now offers an API Token you can restrict to the one domain. Pasting a token into the old prompt simply failed with "invalid domain".
Fixes (#121)
- Logins behind the generated nginx vhost are attributed to the real client again when the panel binds a non-loopback address; before, one address held the rate limiter's whole budget.
- The two-factor prompt is metered again, on its own budget — it was the panel's one unmetered bcrypt comparison.
- Pending migrations run on start-up, so panels updated from the panel button are no longer left unmigrated.
- Backup and import no longer risk the database: no colliding scratch files, and a failed import no longer leaves a closed connection pool, an
admin/admindatabase, or an unrollbackable state on Windows.
Chores
- Updated sing-box from 1.13.18 to 1.13.19 (#119).
- Updated pinia, ESLint, globals, Vite, and vue-tsc (#125).
- Updated
docker/setup-buildx-actionfrom 4.2.0 to 4.3.0 (#120).
Full Changelog: v1.7.1...v1.7.2