Commit Graph

1607 Commits

Author SHA1 Message Date
github-actions[bot]
2fcec89bbf chore(main): release 1.47.0 2026-04-18 00:58:29 +00:00
Egor
52c02d5e39 Merge pull request #400 from BEDOLAGA-DEV/dev
Dev
2026-04-18 03:58:03 +03:00
Fringg
996840f627 fix: change aurapay icon to pink gradient to avoid kassa_ai color collision 2026-04-18 00:12:15 +03:00
Fringg
48827e430d feat: add AuraPay payment provider to cabinet frontend
- Payment method label and icon (violet gradient, AP)
- Admin settings tree entry for AURAPAY category
- Locale strings and descriptions for ru, en, zh, fa
2026-04-18 00:05:56 +03:00
Egor
73bea1a28a Merge pull request #399 from BEDOLAGA-DEV/release-please--branches--main--components--cabinet-frontend
chore(main): release 1.46.0
2026-04-16 06:11:25 +03:00
github-actions[bot]
7d819c6826 chore(main): release 1.46.0 2026-04-16 03:10:37 +00:00
Egor
2fd0961c03 Merge pull request #398 from BEDOLAGA-DEV/dev
Dev
2026-04-16 06:10:11 +03:00
Fringg
4eed0f358e fix: differentiate rollypay icon from riopay (teal gradient, RY text) 2026-04-16 05:58:58 +03:00
Fringg
770a5803d6 feat: add RollyPay payment provider to cabinet frontend
- Payment method label and icon (green gradient, RP)
- Admin settings tree entry for ROLLYPAY category
- Locale strings and descriptions for ru, en, zh, fa
2026-04-16 05:55:21 +03:00
Fringg
5cbf29a1e8 fix: add paypear payment method description to ru/en locales 2026-04-16 05:38:34 +03:00
Fringg
31ac511a09 feat: add PayPear payment provider to cabinet frontend
- Payment method label and icon (amber gradient)
- Admin settings tree entry for PAYPEAR category
- Locale strings for ru, en, zh, fa
2026-04-16 05:26:09 +03:00
github-actions[bot]
e0ed311614 chore(main): release 1.45.1 (#396)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-15 14:16:04 +03:00
Egor
e6cf3af846 fix: period discounts clearing, SBP default, happ cryptolink flow
* Make SBP default and first top-up option (#389)

* fix(connection): happ cryptolink flow + ui fixes (#385)

* fix(connection): respect happ_cryptolink mode

- read connect_mode from connection-link endpoint
- auto-redirect to happ cryptolink flow when mode is HAPP_CRYPTOLINK
- keep installation guide behavior for other modes

* docs(readme): fix source build step 2

- use compose service name for build/create commands
- copy static files from created compose container
- remove compose container via docker compose rm

* fix(connection): handle mode and ws path

- treat any non-guide connect mode as direct happ redirect
- wait for connection-link response before rendering installation guide
- build websocket URL from VITE_API_URL (supports /api and absolute URLs)

* docs(readme): fix docker cp static path

- copy /usr/share/nginx/html contents via html/.
- prevent nested /srv/cabinet/html deployment and 404 on root

* fix(connection): keep guide, use happ links

- restore guide page behavior for /connection (no auto redirect)
- use happ cryptolink URL in /connection/qr when happ crypt mode is active
- replace subscription page connection URL with happ cryptolink from connection-link API

* fix(connection): avoid wrong redirect flow

- force happ scheme deeplink in HAPP_CRYPTOLINK mode for guide connect buttons
- use cabinet redirect page only inside Telegram Mini App
- open deeplink directly in regular browsers

* fix(connection): enforce happ cryptolink

- prioritize backend crypt deeplink fields in HAPP_CRYPTOLINK mode
- fallback to local crypt4/crypt3 generation from subscription URL when backend returns plain happ://sub...
- apply same resolution for guide open action, qr page source and subscription page link display/copy

* fix(subscription): truncate long connect link

- render connection URL in a single line with ellipsis on /subscriptions
- preserve full URL in tooltip for easier manual copy
- keep copy button behavior unchanged

* fix(connection): build cryptolink from happ sub

- allow cryptolink fallback generation from happ://sub... URLs in addition to http(s)
- prevent plain happ://sub links from leaking into UI in HAPP_CRYPTOLINK mode

* fix: allow saving 0% period discount in promo groups

Changed condition from percent > 0 to percent >= 0 so that
admins can explicitly set 0% discount for a period. Previously
0% entries were silently dropped and not sent to the backend.

* fix: always send period_discounts in promo group updates

When all period discounts were removed, the frontend sent undefined
(field absent from JSON), so the backend never cleared them.
Now always sends the field - empty object {} to clear, or populated
object to update.

---------

Co-authored-by: zavul0nn <34007368+zavul0nn@users.noreply.github.com>
Co-authored-by: Dxnil <62987903+D4nilKO@users.noreply.github.com>
2026-04-15 14:13:24 +03:00
Egor
ac89343cc1 Dev (#394)
* Make SBP default and first top-up option (#389)

* fix(connection): happ cryptolink flow + ui fixes (#385)

* fix(connection): respect happ_cryptolink mode

- read connect_mode from connection-link endpoint
- auto-redirect to happ cryptolink flow when mode is HAPP_CRYPTOLINK
- keep installation guide behavior for other modes

* docs(readme): fix source build step 2

- use compose service name for build/create commands
- copy static files from created compose container
- remove compose container via docker compose rm

* fix(connection): handle mode and ws path

- treat any non-guide connect mode as direct happ redirect
- wait for connection-link response before rendering installation guide
- build websocket URL from VITE_API_URL (supports /api and absolute URLs)

* docs(readme): fix docker cp static path

- copy /usr/share/nginx/html contents via html/.
- prevent nested /srv/cabinet/html deployment and 404 on root

* fix(connection): keep guide, use happ links

- restore guide page behavior for /connection (no auto redirect)
- use happ cryptolink URL in /connection/qr when happ crypt mode is active
- replace subscription page connection URL with happ cryptolink from connection-link API

* fix(connection): avoid wrong redirect flow

- force happ scheme deeplink in HAPP_CRYPTOLINK mode for guide connect buttons
- use cabinet redirect page only inside Telegram Mini App
- open deeplink directly in regular browsers

* fix(connection): enforce happ cryptolink

- prioritize backend crypt deeplink fields in HAPP_CRYPTOLINK mode
- fallback to local crypt4/crypt3 generation from subscription URL when backend returns plain happ://sub...
- apply same resolution for guide open action, qr page source and subscription page link display/copy

* fix(subscription): truncate long connect link

- render connection URL in a single line with ellipsis on /subscriptions
- preserve full URL in tooltip for easier manual copy
- keep copy button behavior unchanged

* fix(connection): build cryptolink from happ sub

- allow cryptolink fallback generation from happ://sub... URLs in addition to http(s)
- prevent plain happ://sub links from leaking into UI in HAPP_CRYPTOLINK mode

* fix: allow saving 0% period discount in promo groups

Changed condition from percent > 0 to percent >= 0 so that
admins can explicitly set 0% discount for a period. Previously
0% entries were silently dropped and not sent to the backend.

* fix: always send period_discounts in promo group updates

When all period discounts were removed, the frontend sent undefined
(field absent from JSON), so the backend never cleared them.
Now always sends the field - empty object {} to clear, or populated
object to update.

---------

Co-authored-by: zavul0nn <34007368+zavul0nn@users.noreply.github.com>
Co-authored-by: Dxnil <62987903+D4nilKO@users.noreply.github.com>
2026-04-15 14:04:39 +03:00
Fringg
d15c2408df fix: always send period_discounts in promo group updates
When all period discounts were removed, the frontend sent undefined
(field absent from JSON), so the backend never cleared them.
Now always sends the field - empty object {} to clear, or populated
object to update.
2026-04-15 04:13:53 +03:00
Fringg
3a865a472b fix: allow saving 0% period discount in promo groups
Changed condition from percent > 0 to percent >= 0 so that
admins can explicitly set 0% discount for a period. Previously
0% entries were silently dropped and not sent to the backend.
2026-04-15 03:40:09 +03:00
Dxnil
c80e1aff75 fix(connection): happ cryptolink flow + ui fixes (#385)
* fix(connection): respect happ_cryptolink mode

- read connect_mode from connection-link endpoint
- auto-redirect to happ cryptolink flow when mode is HAPP_CRYPTOLINK
- keep installation guide behavior for other modes

* docs(readme): fix source build step 2

- use compose service name for build/create commands
- copy static files from created compose container
- remove compose container via docker compose rm

* fix(connection): handle mode and ws path

- treat any non-guide connect mode as direct happ redirect
- wait for connection-link response before rendering installation guide
- build websocket URL from VITE_API_URL (supports /api and absolute URLs)

* docs(readme): fix docker cp static path

- copy /usr/share/nginx/html contents via html/.
- prevent nested /srv/cabinet/html deployment and 404 on root

* fix(connection): keep guide, use happ links

- restore guide page behavior for /connection (no auto redirect)
- use happ cryptolink URL in /connection/qr when happ crypt mode is active
- replace subscription page connection URL with happ cryptolink from connection-link API

* fix(connection): avoid wrong redirect flow

- force happ scheme deeplink in HAPP_CRYPTOLINK mode for guide connect buttons
- use cabinet redirect page only inside Telegram Mini App
- open deeplink directly in regular browsers

* fix(connection): enforce happ cryptolink

- prioritize backend crypt deeplink fields in HAPP_CRYPTOLINK mode
- fallback to local crypt4/crypt3 generation from subscription URL when backend returns plain happ://sub...
- apply same resolution for guide open action, qr page source and subscription page link display/copy

* fix(subscription): truncate long connect link

- render connection URL in a single line with ellipsis on /subscriptions
- preserve full URL in tooltip for easier manual copy
- keep copy button behavior unchanged

* fix(connection): build cryptolink from happ sub

- allow cryptolink fallback generation from happ://sub... URLs in addition to http(s)
- prevent plain happ://sub links from leaking into UI in HAPP_CRYPTOLINK mode
2026-04-15 03:29:54 +03:00
zavul0nn
32dba93f1a Make SBP default and first top-up option (#389) 2026-04-15 03:27:47 +03:00
Egor
c331e5db88 Merge pull request #393 from BEDOLAGA-DEV/main
w
2026-04-15 03:25:20 +03:00
c0mrade
1f833dbdd5 Merge pull request #391 from BEDOLAGA-DEV/release-please--branches--main--components--cabinet-frontend
chore(main): release 1.45.0
2026-04-13 19:47:47 +03:00
github-actions[bot]
06a83a01ae chore(main): release 1.45.0 2026-04-13 16:37:55 +00:00
c0mrade
dc20d3e087 Merge pull request #390 from BEDOLAGA-DEV/dev
Bugfixes: polyfill, UI fixes, campaign tracking, menu editor
2026-04-13 19:37:21 +03:00
c0mrade
30d8d28475 fix: show API error details in menu editor save + allow tg:// URLs
Save mutation was showing generic error instead of backend validation
detail, making it impossible to diagnose 422 errors. Also added tg://
to frontend URL validation for Telegram deep link support.
2026-04-13 17:07:29 +03:00
c0mrade
a46c89e45e feat: send campaign_slug during standalone email registration
Frontend now reads campaign slug from localStorage and includes it
in the registration API call, ensuring campaign attribution works
even if email verification happens in a different browser.
2026-04-13 14:43:39 +03:00
c0mrade
3d0fc76ecd fix: subscription status badge overflow + inline password validation
- Status badge (e.g. 'ПРИОСТАНОВЛЕНА (НЕДОСТАТОЧНО СРЕДСТВ)') now
  constrained with max-w-[55%] to prevent overlapping tariff name
- Password too short error shown inline under password field during
  registration instead of at the top of the page (invisible on mobile)
2026-04-13 14:43:29 +03:00
c0mrade
f787cc2de8 fix: add back button to AdminBanSystem page 2026-04-13 14:43:18 +03:00
c0mrade
7b0e6d8bc8 fix: add Object.hasOwn polyfill for old iOS/Android WebViews
@telegram-apps/sdk v3 depends on valibot which uses Object.hasOwn.
On Safari < 15.4 and old Android WebViews this method is missing,
causing LaunchParamsRetrieveError and broken initData auth.

Ref: https://github.com/Telegram-Mini-Apps/tma.js/issues/683
2026-04-13 14:42:26 +03:00
c0mrade
362a69812f feat: add broadcast category selector (system/news/promo) in admin UI 2026-04-10 17:04:22 +03:00
c0mrade
9d15002429 Merge pull request #387 from BEDOLAGA-DEV/release-please--branches--main--components--cabinet-frontend
chore(main): release 1.44.2
2026-04-08 18:47:15 +03:00
github-actions[bot]
72608fbb81 chore(main): release 1.44.2 2026-04-08 15:43:29 +00:00
c0mrade
608a75220f Merge pull request #386 from BEDOLAGA-DEV/dev
fix: batch frontend fixes matching backend changes
2026-04-08 18:41:43 +03:00
c0mrade
e6f6713b0e fix: batch bug fixes matching backend changes
- Promo code errors: add inactive/not_yet_valid translations (4 locales) + Balance.tsx parser
- Daily 100% discount: render price block when originalDailyPrice > 0
- Webvisor: enable in Yandex Metrika init config
- Referral attribution: consume campaign/referral slugs only after successful auth (all login methods)
- registerWithEmail: consume referral code after success
- AdminSettings: move TARIFF_MODE_SETTINGS to module scope (fix eslint warning)
2026-04-08 18:33:47 +03:00
c0mrade
f75d781431 Merge pull request #381 from BEDOLAGA-DEV/release-please--branches--main--components--cabinet-frontend
chore(main): release 1.44.1
2026-04-03 19:14:02 +03:00
github-actions[bot]
692c7417bb chore(main): release 1.44.1 2026-04-03 16:12:12 +00:00
c0mrade
300cb07c58 Merge pull request #380 from BEDOLAGA-DEV/dev
fix: 100% discount display + Telegram widget fix + sparkles icon
2026-04-03 19:11:43 +03:00
c0mrade
1cf9526713 fix: complete sparkles icon in trial offer card (was showing only 1 of 3 sparkle paths) 2026-04-03 18:36:11 +03:00
c0mrade
207af81c95 fix: support 100% discount display + fix Telegram link widget race condition
- formatPrice shows "Бесплатно/Free" when price is 0 (SubscriptionPurchase, Subscription, RenewSubscription)
- Add subscription.free locale key (ru/en/zh/fa)
- Fix TelegramLinkWidget NS_BINDING_ABORTED: move legacy widget callback to ref pattern, remove unstable deps (showToast, t, navigate) from useEffect — prevents iframe destruction on re-render
- Clean up OIDC effect deps
2026-04-03 17:23:38 +03:00
Egor
f06543988d Merge pull request #375 from BEDOLAGA-DEV/release-please--branches--main--components--cabinet-frontend
chore(main): release 1.44.0
2026-04-02 07:25:02 +03:00
github-actions[bot]
e5f84eaefa chore(main): release 1.44.0 2026-04-02 04:24:32 +00:00
Egor
fdb4f8237a Merge pull request #374 from BEDOLAGA-DEV/dev
Dev
2026-04-02 07:23:59 +03:00
Fringg
7892630e3b fix: add key prop to AnimatePresence, accessibility labels, remove hardcoded fallback
- Added key="email-link-form" on motion.div inside AnimatePresence
  for proper exit animations
- Added htmlFor/id pairs on all three label+input groups for
  screen reader accessibility
- Replaced hardcoded "your@email.com" placeholder with neutral format
- Removed hardcoded English fallback from t('profile.invalidEmail')
2026-04-02 07:16:00 +03:00
Fringg
6fd0668a24 feat: move email linking form into Connected Accounts page
Users couldn't find the email linking form buried in the Profile page.
Now the Email row in Connected Accounts shows a "Привязать" button
(consistent with Google/Yandex/Discord) that expands an inline form
with email, password, and confirm password fields.

- Added email to isLinkableProvider check
- Inline AnimatePresence form expands under Email card (no popups)
- Removed duplicate registration form from Profile page
- Profile page now shows a redirect button to Connected Accounts
  for users without email (email change/verify stays in Profile)
2026-04-02 07:06:38 +03:00
Fringg
e2f81ad28d fix: subscription tab not highlighted on detail pages
isActive used exact pathname match (===), so navigating to
/subscriptions/:id or /subscriptions/:id/renew would not highlight
the Subscription tab. Changed to startsWith for non-root paths
in both MobileBottomNav and DesktopSidebar.
2026-04-02 05:44:06 +03:00
c0mrade
5d3f2bb60b Merge pull request #371 from BEDOLAGA-DEV/release-please--branches--main--components--cabinet-frontend
chore(main): release 1.43.1
2026-03-31 20:23:41 +03:00
github-actions[bot]
5ff856df95 chore(main): release 1.43.1 2026-03-31 17:22:53 +00:00
c0mrade
c1b95e2635 Merge pull request #370 from BEDOLAGA-DEV/dev
Release: dev → main
2026-03-31 20:22:24 +03:00
c0mrade
fe609a505b fix: admin users search not working on pages beyond first
Separated input state (searchInput/emailSearchInput) from committed
search state (search/emailSearch) to prevent every keystroke from
triggering API calls with stale pagination offset.
2026-03-31 18:19:39 +03:00
c0mrade
3472ff994c Merge remote-tracking branch 'origin/main' into dev 2026-03-31 15:13:44 +03:00
c0mrade
826a82aa1c fix: unblock page rendering when Telegram CDN is unavailable
- Google Fonts: non-render-blocking via media="print" onload trick
- telegram-web-app.js: load only inside Telegram environment
- Telegram SDK init: skip entirely outside Telegram
- Script load timeout: 8000ms → 2000ms for faster deep link fallback
- Email login form: expanded by default (80% of registrations)
2026-03-31 14:10:22 +03:00
Egor
61a08feb75 Merge pull request #368 from BEDOLAGA-DEV/release-please--branches--main--components--cabinet-frontend
chore(main): release 1.43.0
2026-03-29 07:59:17 +03:00