92 lines
2.0 KiB
JavaScript
92 lines
2.0 KiB
JavaScript
import {
|
|
readMagicLoginToken,
|
|
readTelegramAuthStatus,
|
|
readTelegramLoginWidgetAuthData,
|
|
clearAuthQuery,
|
|
} from "./authHelpers.js";
|
|
import { TELEGRAM_SDK_BOOT_TIMEOUT_MS } from "./constants.js";
|
|
|
|
/**
|
|
* Initial auth / session bootstrap for the subscription webapp (non-preview).
|
|
* Keeps side effects in App (mode, tg, token) via injected callbacks.
|
|
*/
|
|
export async function runWebappBoot({
|
|
MOCK,
|
|
setMode,
|
|
hasTelegramLaunchParams,
|
|
loadTelegramSdk,
|
|
prepareTelegramMiniApp,
|
|
loadData,
|
|
showLogin,
|
|
clearToken,
|
|
clearManualLogoutFlag,
|
|
isManuallyLoggedOut,
|
|
finalizeMagicLogin,
|
|
finalizeTelegramAuth,
|
|
setAuthStatus,
|
|
t,
|
|
getInitDataForBoot,
|
|
getToken,
|
|
getCsrfToken,
|
|
}) {
|
|
setMode("loading");
|
|
if (hasTelegramLaunchParams()) await loadTelegramSdk(TELEGRAM_SDK_BOOT_TIMEOUT_MS);
|
|
prepareTelegramMiniApp();
|
|
|
|
if (MOCK) {
|
|
await loadData();
|
|
return;
|
|
}
|
|
|
|
const magicToken = readMagicLoginToken();
|
|
if (magicToken && (await finalizeMagicLogin(magicToken))) return;
|
|
|
|
const telegramAuthStatus = readTelegramAuthStatus();
|
|
if (telegramAuthStatus === "success") {
|
|
clearManualLogoutFlag();
|
|
clearAuthQuery();
|
|
try {
|
|
await loadData();
|
|
return;
|
|
} catch {
|
|
clearToken();
|
|
}
|
|
} else if (telegramAuthStatus) {
|
|
clearAuthQuery();
|
|
setAuthStatus(
|
|
telegramAuthStatus === "cancelled"
|
|
? t("wa_auth_telegram_cancelled")
|
|
: t("wa_auth_telegram_not_confirmed"),
|
|
true
|
|
);
|
|
}
|
|
|
|
const widgetAuthData = readTelegramLoginWidgetAuthData();
|
|
if (widgetAuthData && (await finalizeTelegramAuth(widgetAuthData, "auth_data"))) return;
|
|
|
|
const initData = getInitDataForBoot();
|
|
if (initData) {
|
|
try {
|
|
if (await finalizeTelegramAuth(initData, "init_data")) return;
|
|
} catch (_error) {
|
|
void _error;
|
|
}
|
|
}
|
|
|
|
if (isManuallyLoggedOut()) {
|
|
showLogin();
|
|
return;
|
|
}
|
|
|
|
if (getToken() || getCsrfToken()) {
|
|
try {
|
|
await loadData();
|
|
return;
|
|
} catch {
|
|
clearToken();
|
|
}
|
|
}
|
|
|
|
showLogin();
|
|
}
|