lifekit / web /src /lib /core /net.ts
reversely's picture
Docker Space: web app and API over a shipped database, online retrieval off
377fc96 verified
Raw History Blame Contribute Delete
964 Bytes
// Online state: the browser's own signal (navigator.onLine plus the online/offline
// events) AND a switch the reader can flip to rehearse the offline path.
import { derived, writable } from 'svelte/store';
const KEY = 'lifekit.forceOffline';
const read = () => {
try {
return localStorage.getItem(KEY) === '1';
} catch {
return false;
}
};
/** True while the reader has switched the app to offline on purpose. */
export const forceOffline = writable(read());
forceOffline.subscribe((v) => {
try {
localStorage.setItem(KEY, v ? '1' : '0');
} catch {
/* storage unavailable */
}
});
const browserOnline = writable(typeof navigator === 'undefined' ? true : navigator.onLine);
if (typeof addEventListener === 'function') {
addEventListener('online', () => browserOnline.set(true));
addEventListener('offline', () => browserOnline.set(false));
}
export const online = derived([browserOnline, forceOffline], ([b, f]) => b && !f);