diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index f2a5209..286ea5f 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -489,8 +489,12 @@ $: telegramMiniAppInitData = tg?.initData || readTelegramMiniAppInitDataFromLocation(); $: telegramMiniAppAuthAvailable = Boolean(telegramMiniAppInitData); $: telegramMiniAppContext = hasTelegramLaunchParams(); + $: demoAuthLogin = MOCK && isDemoAuthMock(); $: telegramLoginUnavailable = - !telegramMiniAppAuthAvailable && !telegramOAuthClientId && telegramSdkStatus !== "loading"; + !demoAuthLogin && + !telegramMiniAppAuthAvailable && + !telegramOAuthClientId && + telegramSdkStatus !== "loading"; $: telegramLoginChecking = telegramLoginBusy || (authBusy && authStatus === t("wa_auth_checking_telegram")); $: telegramLoginLabel = telegramLoginUnavailable @@ -498,8 +502,9 @@ : telegramLoginChecking ? t("wa_auth_checking_telegram") : t("wa_login_telegram_button"); - $: telegramLoginUnavailableMessage = - telegramLoginUnavailable && telegramSdkStatus === "unavailable" + $: telegramLoginUnavailableMessage = demoAuthLogin + ? "" + : telegramLoginUnavailable && telegramSdkStatus === "unavailable" ? t("wa_auth_telegram_unavailable") : telegramLoginUnavailable ? t("wa_auth_telegram_not_configured") @@ -1078,6 +1083,23 @@ })); } + async function openLoginTelegram() { + if (demoAuthLogin) { + const authDemo = MOCK_SOURCE.data?.auth_demo || {}; + await authStore.finalizeTelegramAuth( + { + id: Number(authDemo.telegram_id || 7410865527), + username: authDemo.telegram_username || "demo_minishop_user", + first_name: authDemo.telegram_first_name || "Demo", + last_name: authDemo.telegram_last_name || "Telegram", + }, + "auth_data" + ); + return; + } + await authStore.openTelegramLogin(telegramOAuthClientId, () => telegramMiniAppInitData); + } + function currentSearchParams() { return new URLSearchParams(window.location.search); } @@ -2011,8 +2033,7 @@ requestEmailCode={() => authStore.requestEmailCode((s) => (screen = s))} loginWithEmailPassword={authStore.loginWithEmailPassword} verifyEmailCode={authStore.verifyEmailCode} - openTelegramLogin={() => - authStore.openTelegramLogin(telegramOAuthClientId, () => telegramMiniAppInitData)} + openTelegramLogin={openLoginTelegram} {openExternalLink} {submitEmailOnEnter} onBackToLogin={() => (screen = "login")} diff --git a/frontend/src/lib/webapp/mockApi.js b/frontend/src/lib/webapp/mockApi.js index 25a62c2..c6e4907 100644 --- a/frontend/src/lib/webapp/mockApi.js +++ b/frontend/src/lib/webapp/mockApi.js @@ -24,6 +24,8 @@ const deviceTopupSaleModes = new Set(["hwid_device", "hwid_devices", "hwid_devic const DEFAULT_DEMO_AUTH_EMAIL = "demo.user@example.com"; const DEFAULT_DEMO_AUTH_CODE = "123456"; const DEFAULT_DEMO_AUTH_PASSWORD = "demo-password"; +const DEFAULT_DEMO_AUTH_TELEGRAM_ID = 7410865527; +const DEFAULT_DEMO_AUTH_TELEGRAM_USERNAME = "demo_minishop_user"; function demoPromos() { if (!demoPromosState) demoPromosState = defaultClone(DEMO_DATASET.promos || []); @@ -147,6 +149,67 @@ function applyDemoEmailAuthUser(email) { }; } +function applyDemoTelegramAuthUser(authData = {}) { + const authDemo = demoAuthConfig(); + const telegramId = Number(authData.id || authDemo.telegram_id || DEFAULT_DEMO_AUTH_TELEGRAM_ID); + const username = + authData.username || authDemo.telegram_username || DEFAULT_DEMO_AUTH_TELEGRAM_USERNAME; + const firstName = authData.first_name || authDemo.telegram_first_name || "Demo"; + const lastName = authData.last_name || authDemo.telegram_last_name || "Telegram"; + const language = DEV_MOCK.data.user?.language_code || DEV_MOCK.config.language || "ru"; + DEV_MOCK.data.user = withDemoAvatar( + { + ...(DEV_MOCK.data.user || {}), + id: 910778, + user_id: 910778, + telegram_id: telegramId, + telegram_linked: true, + username, + first_name: firstName, + last_name: lastName, + email: "", + email_verified: false, + password_auth_enabled: false, + is_admin: false, + language_code: language, + registration_date: "2026-05-28T12:05:00Z", + panel_status: "inactive", + }, + 160 + ); + DEV_MOCK.data.subscription = { + ...(DEV_MOCK.data.subscription || {}), + active: false, + status: "INACTIVE", + remaining_text: "Подписка не активна", + end_date_text: "", + days_left: 0, + config_link: null, + connect_url: null, + panel_short_uuid: "", + install_share_token: "", + install_share_url: "", + traffic_used: "0 B", + traffic_used_bytes: 0, + traffic_limit: "0 B", + traffic_limit_bytes: 0, + premium_used: "0 B", + premium_used_bytes: 0, + premium_limit: "0 B", + premium_limit_bytes: 0, + can_topup_regular_traffic: false, + can_topup_premium_traffic: false, + can_topup_devices: false, + extra_hwid_devices: 0, + max_devices: 0, + }; + DEV_MOCK.data.settings = { + ...(DEV_MOCK.data.settings || {}), + trial_enabled: true, + trial_available: true, + }; +} + function demoDeviceTopupPlan(body) { const deviceCount = Number(body.device_count || body.months || 0); const plans = DEV_MOCK.data.device_topup_options?.plans || []; @@ -1750,6 +1813,8 @@ export async function mockApi(path, options = {}, context = {}) { return { ok: false, error: "password_login_failed", fallback: "email_code" }; } if (path === "/auth/token") { + const body = jsonBody(options); + applyDemoTelegramAuthUser(body.auth_data || {}); return { ok: true, csrf_token: "local-preview-csrf" }; } if (path === "/promo/apply") return { ok: true, end_date_text: "31.05.2026" }; diff --git a/frontend/src/lib/webapp/previewMock.js b/frontend/src/lib/webapp/previewMock.js index 7e5e0f5..7d7e39b 100644 --- a/frontend/src/lib/webapp/previewMock.js +++ b/frontend/src/lib/webapp/previewMock.js @@ -298,6 +298,10 @@ export const DEV_MOCK = { email: "demo.user@example.com", code: "123456", password: "demo-password", + telegram_id: 7410865527, + telegram_username: "demo_minishop_user", + telegram_first_name: "Demo", + telegram_last_name: "Telegram", }, subscription: { active: true, @@ -564,10 +568,12 @@ export function applyPreviewMock(kind) { email: "demo.user@example.com", code: "123456", password: "demo-password", + telegram_id: 7410865527, + telegram_username: "demo_minishop_user", + telegram_first_name: "Demo", + telegram_last_name: "Telegram", }; DEV_MOCK.data.settings.email_auth_enabled = true; - DEV_MOCK.config.telegramOAuthClientId = 0; - DEV_MOCK.config.telegramLoginBotId = 0; DEV_MOCK.data.settings.trial_enabled = true; DEV_MOCK.data.settings.trial_available = true; return;