From 676817caedaecc95b64112c41eae28c2edd434b2 Mon Sep 17 00:00:00 2001 From: Egor Date: Tue, 3 Feb 2026 23:45:32 +0300 Subject: [PATCH] Update ConnectionModal.tsx --- src/components/ConnectionModal.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/components/ConnectionModal.tsx b/src/components/ConnectionModal.tsx index c024027..1a2aaf5 100644 --- a/src/components/ConnectionModal.tsx +++ b/src/components/ConnectionModal.tsx @@ -297,13 +297,20 @@ export default function ConnectionModal({ onClose }: ConnectionModalProps) { const handleConnect = (app: AppInfo) => { if (!app.deepLink || !isValidDeepLink(app.deepLink)) return; - const lang = i18n.language?.startsWith('ru') ? 'ru' : 'en'; - const redirectUrl = `${window.location.origin}/miniapp/redirect.html?url=${encodeURIComponent(app.deepLink)}&lang=${lang}`; + const deepLink = app.deepLink; + + // All deep links (including custom schemes like happ://, clash://, etc.) + // go through redirect.html. Telegram's openLink opens the redirect page + // in an external browser, which then performs window.location.href to the + // actual deep link URL. This works for both http(s) and custom schemes. + const redirectUrl = `${window.location.origin}/miniapp/redirect.html?url=${encodeURIComponent(deepLink)}&lang=${i18n.language || 'en'}`; + const tg = ( window as unknown as { Telegram?: { WebApp?: { openLink?: (url: string, options?: object) => void } }; } ).Telegram?.WebApp; + if (tg?.openLink) { try { tg.openLink(redirectUrl, { try_instant_view: false, try_browser: true });