/opt/canhelp/node_modules/better-auth/dist/client
NameSizeModeActions
lynx/-0755rm
plugins/-0755rm
react/-0755rm
solid/-0755rm
svelte/-0755rm
vue/-0755rm
broadcast-channel.d.mts7480644editdlrm
broadcast-channel.mjs14350644editdlrm
broadcast-channel.mjs.map30630644editdlrm
config.mjs39280644editdlrm
config.mjs.map77600644editdlrm
fetch-plugins.mjs4340644editdlrm
fetch-plugins.mjs.map8580644editdlrm
focus-manager.d.mts3830644editdlrm
focus-manager.mjs10820644editdlrm
focus-manager.mjs.map21300644editdlrm
index.d.mts44960644editdlrm
index.mjs8000644editdlrm
index.mjs.map15140644editdlrm
online-manager.d.mts4100644editdlrm
online-manager.mjs12130644editdlrm
online-manager.mjs.map23350644editdlrm
parser.d.mts5860644editdlrm
parser.mjs32650644editdlrm
parser.mjs.map66340644editdlrm
path-to-object.d.mts53100644editdlrm
proxy.mjs26030644editdlrm
proxy.mjs.map58120644editdlrm
query.d.mts9330644editdlrm
query.mjs26120644editdlrm
query.mjs.map60700644editdlrm
session-atom.mjs9060644editdlrm
session-atom.mjs.map19440644editdlrm
session-refresh.d.mts11720644editdlrm
session-refresh.mjs44750644editdlrm
session-refresh.mjs.map94440644editdlrm
types.d.mts32060644editdlrm
vanilla.d.mts58340644editdlrm
vanilla.mjs7410644editdlrm
vanilla.mjs.map34150644editdlrm
Edit: /opt/canhelp/node_modules/better-auth/dist/client/session-refresh.mjs (4475B)
import { getGlobalBroadcastChannel } from "./broadcast-channel.mjs"; import { getGlobalFocusManager } from "./focus-manager.mjs"; import { getGlobalOnlineManager } from "./online-manager.mjs"; //#region src/client/session-refresh.ts const now = () => Math.floor(Date.now() / 1e3); /** * Normalize $fetch response: `throw: true` returns data directly, otherwise `{ data, error }`. */ function normalizeSessionResponse(res) { if (typeof res === "object" && res !== null && "data" in res && "error" in res) return res; return { data: res, error: null }; } /** * Rate limit: don't refetch on focus if a session request was made within this many seconds */ const FOCUS_REFETCH_RATE_LIMIT_SECONDS = 5; function createSessionRefreshManager(opts) { const { sessionAtom, sessionSignal, $fetch, options = {} } = opts; const refetchInterval = options.sessionOptions?.refetchInterval ?? 0; const refetchOnWindowFocus = options.sessionOptions?.refetchOnWindowFocus ?? true; const refetchWhenOffline = options.sessionOptions?.refetchWhenOffline ?? false; const state = { lastSync: 0, lastSessionRequest: 0, cachedSession: void 0 }; const shouldRefetch = () => { return refetchWhenOffline || getGlobalOnlineManager().isOnline; }; const triggerRefetch = (event) => { if (!shouldRefetch()) return; if (event?.event === "storage") { state.lastSync = now(); sessionSignal.set(!sessionSignal.get()); return; } const currentSession = sessionAtom.get(); const fetchSessionWithRefresh = () => { state.lastSessionRequest = now(); $fetch("/get-session").then(async (res) => { let { data, error } = normalizeSessionResponse(res); if (data?.needsRefresh) try { const refreshRes = await $fetch("/get-session", { method: "POST" }); ({data, error} = normalizeSessionResponse(refreshRes)); } catch {} const sessionData = data?.session && data?.user ? data : null; sessionAtom.set({ ...currentSession, data: sessionData, error }); state.lastSync = now(); sessionSignal.set(!sessionSignal.get()); }).catch(() => {}); }; if (event?.event === "poll") { fetchSessionWithRefresh(); return; } if (event?.event === "visibilitychange") { if (now() - state.lastSessionRequest < FOCUS_REFETCH_RATE_LIMIT_SECONDS) return; state.lastSessionRequest = now(); } if (event?.event === "visibilitychange") { fetchSessionWithRefresh(); return; } if (currentSession?.data === null || currentSession?.data === void 0) { state.lastSync = now(); sessionSignal.set(!sessionSignal.get()); } }; const broadcastSessionUpdate = (trigger) => { getGlobalBroadcastChannel().post({ event: "session", data: { trigger }, clientId: Math.random().toString(36).substring(7) }); }; const setupPolling = () => { if (refetchInterval && refetchInterval > 0) state.pollInterval = setInterval(() => { if (sessionAtom.get()?.data) triggerRefetch({ event: "poll" }); }, refetchInterval * 1e3); }; const setupBroadcast = () => { state.unsubscribeBroadcast = getGlobalBroadcastChannel().subscribe(() => { triggerRefetch({ event: "storage" }); }); }; const setupFocusRefetch = () => { if (!refetchOnWindowFocus) return; state.unsubscribeFocus = getGlobalFocusManager().subscribe(() => { triggerRefetch({ event: "visibilitychange" }); }); }; const setupOnlineRefetch = () => { state.unsubscribeOnline = getGlobalOnlineManager().subscribe((online) => { if (online) triggerRefetch({ event: "visibilitychange" }); }); }; const init = () => { setupPolling(); setupBroadcast(); setupFocusRefetch(); setupOnlineRefetch(); getGlobalBroadcastChannel().setup(); getGlobalFocusManager().setup(); getGlobalOnlineManager().setup(); }; const cleanup = () => { if (state.pollInterval) { clearInterval(state.pollInterval); state.pollInterval = void 0; } if (state.unsubscribeBroadcast) { state.unsubscribeBroadcast(); state.unsubscribeBroadcast = void 0; } if (state.unsubscribeFocus) { state.unsubscribeFocus(); state.unsubscribeFocus = void 0; } if (state.unsubscribeOnline) { state.unsubscribeOnline(); state.unsubscribeOnline = void 0; } state.lastSync = 0; state.lastSessionRequest = 0; state.cachedSession = void 0; }; return { init, cleanup, triggerRefetch, broadcastSessionUpdate }; } //#endregion export { createSessionRefreshManager }; //# sourceMappingURL=session-refresh.mjs.map