From 3d52038be5f0cd33a122fabe8ce5c99551c1e61e Mon Sep 17 00:00:00 2001 From: whekin Date: Tue, 24 Mar 2026 05:09:29 +0400 Subject: [PATCH] fix(miniapp): wait for telegram init data before blocking --- apps/miniapp/src/contexts/session-context.tsx | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/apps/miniapp/src/contexts/session-context.tsx b/apps/miniapp/src/contexts/session-context.tsx index bf7793b..3c04339 100644 --- a/apps/miniapp/src/contexts/session-context.tsx +++ b/apps/miniapp/src/contexts/session-context.tsx @@ -102,6 +102,29 @@ const demoSession: Extract = { telegramUser: demoTelegramUser } +async function waitForTelegramInitData( + readInitData: () => string | undefined, + options: { + timeoutMs?: number + intervalMs?: number + } = {} +): Promise { + const timeoutMs = options.timeoutMs ?? 2500 + const intervalMs = options.intervalMs ?? 100 + const startedAt = Date.now() + + while (Date.now() - startedAt <= timeoutMs) { + const data = readInitData() + if (data) { + return data + } + + await new Promise((resolve) => setTimeout(resolve, intervalMs)) + } + + return readInitData() +} + /* ── Provider ───────────────────────────────────────── */ export function SessionProvider( @@ -146,7 +169,7 @@ export function SessionProvider( webApp?.ready?.() webApp?.expand?.() - const data = initData() + const data = await waitForTelegramInitData(initData) if (!data) { if (import.meta.env.DEV) { setSession(demoSession)