46 lines
1.3 KiB
TypeScript
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.authState = '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);
|
|
}
|