TelegramPWA/src/util/init.ts
2025-12-22 22:53:51 +01:00

46 lines
1.3 KiB
TypeScript

import type { GlobalState } from '../global/types';
import { IS_MOCKED_CLIENT } from '../config';
import { loadCache, loadCachedSharedState } from '../global/cache';
import {
getGlobal, setGlobal,
} from '../global/index';
import { INITIAL_GLOBAL_STATE } from '../global/initialState';
import { updatePasscodeSettings } from '../global/reducers';
import { cloneDeep } from './iteratees';
import { clearStoredSession } from './sessions';
export async function initGlobal(force: boolean = false, prevGlobal?: GlobalState) {
prevGlobal = prevGlobal || getGlobal();
if (!force && 'byTabId' in prevGlobal) {
return;
}
const initial = cloneDeep(INITIAL_GLOBAL_STATE);
const cache = await loadCache(initial);
let global = cache || initial;
if (IS_MOCKED_CLIENT) global.auth.state = 'authorizationStateReady';
const { hasPasscode, isScreenLocked } = global.passcode;
if (hasPasscode && !isScreenLocked) {
global = updatePasscodeSettings(global, {
isScreenLocked: true,
});
clearStoredSession();
}
if (force) {
global.byTabId = prevGlobal.byTabId;
}
if (!cache) { // Try loading shared state separately
const storedSharedState = await loadCachedSharedState();
if (storedSharedState) {
global.sharedState = storedSharedState;
}
}
setGlobal(global);
}