mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-11-12 23:31:02 +00:00
034cfb539a
A browser that ran TREK before 5.1.1 keeps that version's app in its service worker. When the app opened /native-handoff, the worker answered it from its cache with an app that has no such page, which sent the user to /, and the sign-in ended on the dashboard in the browser instead of in the app. The app now opens /api/auth/native/start, which every TREK service worker passes to the server. That page takes the workers off the browser and forwards to the handoff page. Until the sign-in is handed back, the web app registers no service worker and does not reload for a new version: a tab still open on the older TREK keeps its worker alive, and a registration or a reload in the middle of the sign-in brought it back to answer the next page.
32 lines
1.3 KiB
TypeScript
32 lines
1.3 KiB
TypeScript
/**
|
|
* Marks the app's sign-in in the system browser while it runs. The page in front
|
|
* of the handoff page (public/native-handoff.js) sets it, so that until the user
|
|
* is handed back to the app no service worker is registered (public/registerSW.js)
|
|
* and no new version reloads the page (utils/versionHandover.ts). A browser tab
|
|
* still open on an older TREK keeps that version's worker alive, and a worker
|
|
* registered or a reload in the middle of the sign-in would bring it back to
|
|
* answer the next page with an app that has no handoff page.
|
|
*/
|
|
export const BROWSER_SIGN_IN_KEY = 'trek_native_signin';
|
|
|
|
/** As long as a sign-in in the browser may take; the mark counts for no longer. */
|
|
export const BROWSER_SIGN_IN_TTL_MS = 15 * 60 * 1000;
|
|
|
|
export function browserSignInRunning(now = Date.now()): boolean {
|
|
try {
|
|
const started = Number(localStorage.getItem(BROWSER_SIGN_IN_KEY));
|
|
return Number.isFinite(started) && started > 0 && now - started >= 0 && now - started < BROWSER_SIGN_IN_TTL_MS;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/** The sign-in is handed back to the app: the browser goes back to normal. */
|
|
export function endBrowserSignIn(): void {
|
|
try {
|
|
localStorage.removeItem(BROWSER_SIGN_IN_KEY);
|
|
} catch {
|
|
/* site data blocked: the mark runs out by itself */
|
|
}
|
|
}
|