feat(lava): автопродление Lava на странице подписки

Парная фронтовая часть к эндпоинтам /cabinet/subscription/lava-recurrent
(бот: 0dea2182). Блок — сиблинг Platega-блока с той же семантикой состояний
(off/pending/active/past_due), поллинг раз в 8с пока привязка PENDING.

Отличие от Platega в подписи: у Lava период задан продуктом в кабинете
провайдера и приезжает числом дней, поэтому канонические значения (30/90/365
и т.д.) показываются словами, а произвольные — как «раз в N дн.».

utils/lavaRecurring.ts: строгое распознавание 403 'Lava recurrent disabled'
(другие 403-guard'ы прятать нельзя), деградация неизвестного статуса в off.
Локали ru/en/zh/fa (+25 строк каждая, плейсхолдеры сверены). 7 тестов утилиты.
This commit is contained in:
Fringg
2026-07-29 16:34:43 +03:00
parent 62aaa5d7c9
commit 2dce539da2
9 changed files with 474 additions and 0 deletions

View File

@@ -720,6 +720,31 @@
"purchaseButton": "⚡ Оформить с автооплатой СБП",
"purchaseHint": "Первое списание подтверждает привязку в банке; продления списываются автоматически по каденсу тарифа."
},
"lavaRecurring": {
"title": "Автопродление Lava",
"connect": "Подключить",
"payFirst": "Оплатить первый счёт",
"cancel": "Отключить",
"confirmCancel": "Отключить автопродление Lava? Подписка больше не будет продлеваться автоматически.",
"cancelled": "Автопродление Lava отключено",
"enableError": "Не удалось подключить автопродление Lava",
"cancelError": "Не удалось отменить автопродление Lava",
"statusPending": "Ожидает оплаты первого счёта",
"statusActive": "Активно",
"statusPastDue": "Платёж не прошёл — попробуйте снова",
"nextCharge": "следующее списание {{date}}",
"amountPerPeriod": "{{amount}} ₽ {{period}}",
"amountPerDays": "{{amount}} ₽ раз в {{days}} дн.",
"period": {
"day": "ежедневно",
"week": "еженедельно",
"month": "ежемесячно",
"quarter": "раз в квартал",
"halfYear": "раз в полгода",
"year": "ежегодно"
},
"autopayHint": "Подписка будет автоматически продлеваться через Lava"
},
"backToList": "К списку подписок",
"confirmDelete": "Удалить подписку?",
"dailyAutoCharge": "Ежедневное списание",