From bd1cfd1d63d224860a859d00d22efa2e5d041fcd Mon Sep 17 00:00:00 2001 From: 3252a8 <3252a8@proton.me> Date: Wed, 10 Jun 2026 23:32:20 +0300 Subject: [PATCH] feat(webapp): expose LAVA settings in admin UI and demo Add RU/EN admin locale strings for the LAVA settings subsection and field labels, regenerate the demo settings manifest snapshot, and list LAVA among the demo dataset payment methods. --- frontend/src/lib/webapp/demoDataset.js | 5 + .../webapp/settingsManifest.generated.json | 389 +++++++++++++++++- locales/en.json | 13 + locales/ru.json | 13 + 4 files changed, 419 insertions(+), 1 deletion(-) diff --git a/frontend/src/lib/webapp/demoDataset.js b/frontend/src/lib/webapp/demoDataset.js index 23982b1..094a787 100644 --- a/frontend/src/lib/webapp/demoDataset.js +++ b/frontend/src/lib/webapp/demoDataset.js @@ -484,6 +484,11 @@ export const DEMO_DATASET = { name: "PayKilla", icon: "Bitcoin", }, + { + id: "lava", + name: "LAVA", + icon: "CreditCard", + }, ], referral: { code: "DEMO0001", diff --git a/frontend/src/lib/webapp/settingsManifest.generated.json b/frontend/src/lib/webapp/settingsManifest.generated.json index b4ae184..fb8e5c1 100644 --- a/frontend/src/lib/webapp/settingsManifest.generated.json +++ b/frontend/src/lib/webapp/settingsManifest.generated.json @@ -670,7 +670,7 @@ "section_order": 4, "subsection": "common", "label": "Порядок методов оплаты", - "description": "Через запятую: severpay,freekassa,yookassa,platega,stars,cryptopay,heleket,paykilla", + "description": "Через запятую: severpay,freekassa,yookassa,platega,stars,cryptopay,heleket,paykilla,lava", "i18n_label_key": "admin_settings_field_payment_methods_order_label", "i18n_description_key": "admin_settings_field_payment_methods_order_description", "i18n_subsection_key": "admin_settings_subsection_common", @@ -4598,6 +4598,393 @@ "overridden": false, "updated_at": null, "webhook_base_url_configured": false + }, + { + "key": "LAVA_ENABLED", + "type": "bool", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "Включена", + "description": "", + "i18n_label_key": "admin_settings_field_lava_enabled_label", + "i18n_description_key": null, + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": null, + "placeholder": "", + "optional": true, + "secret": false, + "mutually_exclusive_key": "LAVA_ADMIN_ONLY_ENABLED", + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "webhook_base_url_configured": false + }, + { + "key": "LAVA_SHOP_ID", + "type": "string", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "Shop ID", + "description": "", + "i18n_label_key": "admin_settings_field_lava_shop_id_label", + "i18n_description_key": null, + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": null, + "placeholder": "", + "optional": true, + "secret": false, + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "webhook_base_url_configured": false + }, + { + "key": "LAVA_SECRET_KEY", + "type": "string", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "Secret key", + "description": "Signs outgoing API requests (HMAC-SHA256 in the Signature header).", + "i18n_label_key": "admin_settings_field_lava_secret_key_label", + "i18n_description_key": "admin_settings_field_lava_secret_key_description", + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": null, + "placeholder": "", + "optional": true, + "secret": true, + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "has_value": false, + "webhook_base_url_configured": false + }, + { + "key": "LAVA_WEBHOOK_SECRET", + "type": "string", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "Webhook secret", + "description": "The shop's additional key used to verify webhook signatures. Leave empty to reuse the secret key.", + "i18n_label_key": "admin_settings_field_lava_webhook_secret_label", + "i18n_description_key": "admin_settings_field_lava_webhook_secret_description", + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": null, + "placeholder": "", + "optional": true, + "secret": true, + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "has_value": false, + "webhook_base_url_configured": false + }, + { + "key": "LAVA_BASE_URL", + "type": "url", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "Base URL", + "description": "", + "i18n_label_key": "admin_settings_field_lava_base_url_label", + "i18n_description_key": null, + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": "admin_settings_field_lava_base_url_placeholder", + "placeholder": "https://api.lava.ru", + "optional": true, + "secret": false, + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "webhook_base_url_configured": false + }, + { + "key": "LAVA_RETURN_URL", + "type": "url", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "Return URL", + "description": "", + "i18n_label_key": "admin_settings_field_lava_return_url_label", + "i18n_description_key": null, + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": null, + "placeholder": "", + "optional": true, + "secret": false, + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "webhook_base_url_configured": false + }, + { + "key": "LAVA_LIFETIME_MINUTES", + "type": "int", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "Payment link lifetime (minutes)", + "description": "1..7200; leave empty for the LAVA default.", + "i18n_label_key": "admin_settings_field_lava_lifetime_minutes_label", + "i18n_description_key": "admin_settings_field_lava_lifetime_minutes_description", + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": null, + "placeholder": "", + "optional": true, + "secret": false, + "min": 1, + "max": 7200, + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "webhook_base_url_configured": false + }, + { + "key": "LAVA_INCLUDE_SERVICES", + "type": "string", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "Payment services filter", + "description": "Comma-separated LAVA pay services to show on the payment page (e.g. card,sbp). Empty shows everything enabled for the shop.", + "i18n_label_key": "admin_settings_field_lava_include_services_label", + "i18n_description_key": "admin_settings_field_lava_include_services_description", + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": "admin_settings_field_lava_include_services_placeholder", + "placeholder": "card,sbp", + "optional": true, + "secret": false, + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "webhook_base_url_configured": false + }, + { + "key": "PAYMENT_LAVA_WEBAPP_LABEL_RU", + "type": "string", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "WebApp button text (RU)", + "description": "Custom Russian text shown in the Web App payment method button.", + "i18n_label_key": "admin_settings_field_payment_lava_webapp_label_ru_label", + "i18n_description_key": "admin_settings_field_payment_lava_webapp_label_ru_description", + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": "admin_settings_field_payment_lava_webapp_label_ru_placeholder", + "placeholder": "LAVA", + "optional": true, + "secret": false, + "default": "LAVA", + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "webhook_base_url_configured": false + }, + { + "key": "PAYMENT_LAVA_WEBAPP_LABEL_EN", + "type": "string", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "WebApp button text (EN)", + "description": "Custom English text shown in the Web App payment method button.", + "i18n_label_key": "admin_settings_field_payment_lava_webapp_label_en_label", + "i18n_description_key": "admin_settings_field_payment_lava_webapp_label_en_description", + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": "admin_settings_field_payment_lava_webapp_label_en_placeholder", + "placeholder": "LAVA", + "optional": true, + "secret": false, + "default": "LAVA", + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "webhook_base_url_configured": false + }, + { + "key": "PAYMENT_LAVA_WEBAPP_ICON", + "type": "icon", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "WebApp button icon", + "description": "Lucide icon name rendered inside the Web App payment method button.", + "i18n_label_key": "admin_settings_field_payment_lava_webapp_icon_label", + "i18n_description_key": "admin_settings_field_payment_lava_webapp_icon_description", + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": "admin_settings_field_payment_lava_webapp_icon_placeholder", + "placeholder": "CreditCard", + "optional": true, + "secret": false, + "default": "CreditCard", + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "webhook_base_url_configured": false + }, + { + "key": "PAYMENT_LAVA_TELEGRAM_LABEL_RU", + "type": "string", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "Telegram button text (RU)", + "description": "Custom Russian text shown in Telegram bot payment buttons.", + "i18n_label_key": "admin_settings_field_payment_lava_telegram_label_ru_label", + "i18n_description_key": "admin_settings_field_payment_lava_telegram_label_ru_description", + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": "admin_settings_field_payment_lava_telegram_label_ru_placeholder", + "placeholder": "LAVA", + "optional": true, + "secret": false, + "default": "LAVA", + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "webhook_base_url_configured": false + }, + { + "key": "PAYMENT_LAVA_TELEGRAM_LABEL_EN", + "type": "string", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "Telegram button text (EN)", + "description": "Custom English text shown in Telegram bot payment buttons.", + "i18n_label_key": "admin_settings_field_payment_lava_telegram_label_en_label", + "i18n_description_key": "admin_settings_field_payment_lava_telegram_label_en_description", + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": "admin_settings_field_payment_lava_telegram_label_en_placeholder", + "placeholder": "LAVA", + "optional": true, + "secret": false, + "default": "LAVA", + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "webhook_base_url_configured": false + }, + { + "key": "PAYMENT_LAVA_TELEGRAM_EMOJI", + "type": "string", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "Telegram button emoji", + "description": "Emoji prepended to the Telegram bot payment button when customized.", + "i18n_label_key": "admin_settings_field_payment_lava_telegram_emoji_label", + "i18n_description_key": "admin_settings_field_payment_lava_telegram_emoji_description", + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": "admin_settings_field_payment_lava_telegram_emoji_placeholder", + "placeholder": "💳", + "optional": true, + "secret": false, + "default": "💳", + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "webhook_base_url_configured": false + }, + { + "key": "LAVA_ADMIN_ONLY_ENABLED", + "type": "bool", + "section": "payments", + "section_order": 4, + "subsection": "LAVA", + "label": "Only for admins", + "description": "Shows this payment method only to users from ADMIN_IDS. Webhooks and provider services remain active for admin test payments.", + "i18n_label_key": "admin_settings_provider_admin_only_label", + "i18n_description_key": "admin_settings_provider_admin_only_description", + "i18n_subsection_key": "admin_settings_subsection_lava", + "i18n_placeholder_key": null, + "placeholder": "", + "optional": true, + "secret": false, + "mutually_exclusive_key": "LAVA_ENABLED", + "provider_id": "lava", + "provider_label": "LAVA", + "webhook_provider_id": "lava", + "webhook_path": "/webhook/lava", + "webhook_requires_base_url": false, + "value": "", + "overridden": false, + "updated_at": null, + "webhook_base_url_configured": false } ] }, diff --git a/locales/en.json b/locales/en.json index 7dd3b8e..25b1818 100644 --- a/locales/en.json +++ b/locales/en.json @@ -1220,6 +1220,7 @@ "admin_settings_subsection_wata": "Wata", "admin_settings_subsection_heleket": "Heleket", "admin_settings_subsection_paykilla": "PayKilla", + "admin_settings_subsection_lava": "LAVA", "admin_settings_provider_webhook_url": "Webhook URL", "admin_settings_provider_webhook_url_hint": "Use this URL in the provider webhook settings.", "admin_settings_panel_webhook_url_hint": "Use this URL as WEBHOOK_URL in Remnawave Panel.", @@ -1772,6 +1773,18 @@ "admin_settings_field_severpay_return_url_label": "SeverPay Return URL", "admin_settings_field_severpay_lifetime_minutes_label": "SeverPay Lifetime Minutes", "admin_settings_field_severpay_lifetime_minutes_description": "Controls the 'SeverPay Lifetime Minutes' setting in admin overrides.", + "admin_settings_field_lava_enabled_label": "Enabled", + "admin_settings_field_lava_shop_id_label": "Shop ID", + "admin_settings_field_lava_secret_key_label": "Secret key", + "admin_settings_field_lava_secret_key_description": "Signs outgoing API requests (HMAC-SHA256 in the Signature header).", + "admin_settings_field_lava_webhook_secret_label": "Webhook secret", + "admin_settings_field_lava_webhook_secret_description": "The shop's additional key used to verify webhook signatures. Leave empty to reuse the secret key.", + "admin_settings_field_lava_base_url_label": "Base URL", + "admin_settings_field_lava_return_url_label": "Return URL", + "admin_settings_field_lava_lifetime_minutes_label": "Payment link lifetime (minutes)", + "admin_settings_field_lava_lifetime_minutes_description": "1..7200; leave empty for the LAVA default.", + "admin_settings_field_lava_include_services_label": "Payment services filter", + "admin_settings_field_lava_include_services_description": "Comma-separated LAVA pay services shown on the payment page (e.g. card,sbp). Empty shows everything enabled for the shop.", "admin_settings_field_cryptopay_enabled_label": "CryptoPay Enabled", "admin_settings_field_cryptopay_token_label": "CryptoPay Token", "admin_settings_field_cryptopay_network_label": "CryptoPay Network", diff --git a/locales/ru.json b/locales/ru.json index 76900a9..1d0de43 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -1220,6 +1220,7 @@ "admin_settings_subsection_wata": "Wata", "admin_settings_subsection_heleket": "Heleket", "admin_settings_subsection_paykilla": "PayKilla", + "admin_settings_subsection_lava": "LAVA", "admin_settings_provider_webhook_url": "Webhook URL", "admin_settings_provider_webhook_url_hint": "Укажите этот адрес в настройках вебхуков провайдера.", "admin_settings_panel_webhook_url_hint": "Укажите этот адрес как WEBHOOK_URL в Remnawave Panel.", @@ -1772,6 +1773,18 @@ "admin_settings_field_severpay_return_url_label": "Return URL", "admin_settings_field_severpay_lifetime_minutes_label": "Срок жизни ссылки (мин)", "admin_settings_field_severpay_lifetime_minutes_description": "30..4320; пусто — значение провайдера", + "admin_settings_field_lava_enabled_label": "Включена", + "admin_settings_field_lava_shop_id_label": "Shop ID", + "admin_settings_field_lava_secret_key_label": "Секретный ключ", + "admin_settings_field_lava_secret_key_description": "Подписывает исходящие запросы к API (HMAC-SHA256 в заголовке Signature).", + "admin_settings_field_lava_webhook_secret_label": "Ключ вебхуков", + "admin_settings_field_lava_webhook_secret_description": "Дополнительный ключ магазина для проверки подписи вебхуков. Пусто — используется секретный ключ.", + "admin_settings_field_lava_base_url_label": "Base URL", + "admin_settings_field_lava_return_url_label": "Return URL", + "admin_settings_field_lava_lifetime_minutes_label": "Срок жизни ссылки (мин)", + "admin_settings_field_lava_lifetime_minutes_description": "1..7200; пусто — значение провайдера", + "admin_settings_field_lava_include_services_label": "Фильтр способов оплаты", + "admin_settings_field_lava_include_services_description": "Через запятую: способы оплаты LAVA на странице счёта (например card,sbp). Пусто — все доступные магазину.", "admin_settings_field_cryptopay_enabled_label": "Включена", "admin_settings_field_cryptopay_token_label": "Token", "admin_settings_field_cryptopay_network_label": "Network",