Release 3.9.0+2: tolerant subscription import, full Remnawave server list, subscription info card (expiry / traffic / devices).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Navis
2026-08-01 17:01:37 +03:00
co-authored by Cursor
parent 015ded9bd5
commit e34312ef9c
18 changed files with 818 additions and 174 deletions
+23 -3
View File
@@ -39,9 +39,29 @@ type Config struct {
RemnawaveShortUUID string `json:"remnawave_short_uuid,omitempty"`
RemnawaveCaddyToken string `json:"remnawave_caddy_token,omitempty"`
// SubInfo caches last-known subscription usage so the UI can render it
// after restart; refreshed on subscription import.
SubInfo *SubscriptionInfo `json:"subscription_info,omitempty"`
Profiles []Profile `json:"profiles"`
}
// SubscriptionInfo is last-known subscription usage metadata.
// Traffic values are bytes; Total==0 means unlimited/unknown.
type SubscriptionInfo struct {
Upload int64 `json:"upload,omitempty"`
Download int64 `json:"download,omitempty"`
Total int64 `json:"total,omitempty"`
Expire int64 `json:"expire,omitempty"` // unix seconds; 0 = unknown
// Devices are known only when the Remnawave API token is configured.
DevicesKnown bool `json:"devices_known,omitempty"`
Devices int `json:"devices,omitempty"`
DeviceLimit int `json:"device_limit,omitempty"` // 0 = no limit / unknown
UpdatedAt int64 `json:"updated_at,omitempty"` // unix seconds of last refresh
}
// Profile describes one connection endpoint.
type Profile struct {
Name string `json:"name"`
@@ -63,9 +83,9 @@ type Profile struct {
// Hysteria 2 options (client-side). Masquerade on server is separate;
// here SNI/insecure/pin emulate HTTPS look + salamander/gecko obfuscation.
Hy2Congestion string `json:"hy2_congestion,omitempty"` // bbr | reno
Hy2BBRProfile string `json:"hy2_bbr_profile,omitempty"` // standard | conservative | aggressive
Hy2BandwidthUp string `json:"hy2_bandwidth_up,omitempty"` // empty = BBR; set for Brutal
Hy2Congestion string `json:"hy2_congestion,omitempty"` // bbr | reno
Hy2BBRProfile string `json:"hy2_bbr_profile,omitempty"` // standard | conservative | aggressive
Hy2BandwidthUp string `json:"hy2_bandwidth_up,omitempty"` // empty = BBR; set for Brutal
Hy2BandwidthDown string `json:"hy2_bandwidth_down,omitempty"`
Hy2Obfs string `json:"hy2_obfs,omitempty"` // salamander | gecko
Hy2ObfsPassword string `json:"hy2_obfs_password,omitempty"`