3.46.0 (2026-04-13)
New Features
- add broadcast category (system/news/promo) + filter recipients by user prefs (931abfe)
- add category field to broadcast API schemas and routes (0300044)
- add RemnaWave retry queue for failed API calls (BUG-2, BUG-10) (abdf296)
- add remnawave_resync_service for identity-change sync (b57f185)
- add traffic % warning check using user's threshold preference (1d96f80)
- add user notification preferences helper utility (e0e2edf)
- implement low balance alert + respect user notification preferences (4e50419)
- respect user subscription_expiry notification preferences (63fdfe4)
- respect user traffic_warning notification preference in webhook handler (7208a52)
- save campaign_slug during standalone email registration (a8e2b62)
- start RemnaWave retry queue on app startup (8f1882f)
Bug Fixes
- add retry queue to all remaining RemnaWave error handlers (7e920fa)
- add retry queue to cabinet subscription operation RemnaWave errors (1b376ba)
- add retry queue to classic mode bot purchase handler (970dc54)
- add retry queue to daily subscription service RemnaWave errors (65120f0)
- add retry queue to payment webhook and renewal service RemnaWave errors (91a756a)
- add TRAFFIC_WARNING_ALERT and LOW_BALANCE_ALERT localization keys to all locales (2321667)
- always sync squads in auto-purchase renewal (BUG-4) (8542a39)
- default sync_squads=True in update_remnawave_user (BUG-4) (6aed7d3)
- enforce max_attempts limit in NaloGO receipt queue (16d9163)
- enqueue retry on RemnaWave API failure in all purchase flows (BUG-2, BUG-10) (9cb559f)
- exclude users with active subscriptions from expired broadcast (1eeeb39)
- handle TelegramBadRequest when deleting old ticket notifications (eb18b3a)
- match tariff_id when creating subscriptions from panel sync (BUG-11) (646ac4c)
- protect OAuth users with remnawave_uuid from sync deactivation (BUG-6) (cf19e4e)
- raise MAX_BUTTONS_PER_ROW to 8 and allow tg:// deep links in menu editor (570af82)
- resync RemnaWave after account merge (BUG-7) (9c08ce6)
- resync RemnaWave after Telegram account linking (BUG-1) (d465ccb)
- sync connected_squads from panel during sync (BUG-5) (35412e9)
- trial activation fallback to trial-eligible servers when tariff has no squads (BUG-12) + fix misleading button text (be32010)
- upsert refresh tokens (ON CONFLICT) + periodic cleanup of expired/revoked tokens (fb8d2b3)
- use 'is not None' for telegram_id in create_user API (BUG-9) (8623521)
- use MAX_DEVICES_LIMIT instead of hardcoded 10 for device buttons (bc3893b)
- use update_remnawave_user when UUID exists in tariff_purchase (BUG-3) (a1b6d9b)