UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

48 lines (46 loc) • 1.76 kB
import { pluginHref, pluginPath } from "./plugin-path.mjs"; import { sessionQueryKey, sessionQueryOptions } from "./auth.mjs"; import { redirect } from "@tanstack/react-router"; //#region src/ui/auth-guards.ts async function ensureSession(context) { const { queryClient, authClient } = context; return queryClient.query(sessionQueryOptions(authClient)); } function buildAuthContext(session) { return { isAuthenticated: !!session?.user, user: session?.user ?? null, session: session?.session ?? null, activeOrganizationId: session?.session?.activeOrganizationId ?? null, isAnonymous: session?.user?.isAnonymous ?? false, isAdmin: session?.user?.role === "admin", isBanned: session?.user?.banned ?? false }; } async function requireSession({ context, location }) { const session = await ensureSession(context); if (!session?.user) throw redirect({ href: pluginHref("/login", { redirect: location.href }) }); if (session.user.banned) throw redirect({ href: pluginPath("/login#banned") }); return { auth: buildAuthContext(session), session }; } async function requireAdmin(args) { const result = await requireSession(args); if (result.session.user?.role !== "admin") throw redirect({ to: "/dashboard" }); return result; } /** * Clears private and public query data on sign-out while leaving an explicit * signed-out session entry — the cache must remember "signed out" so a late * router-context session cannot resurrect stale authed state. */ async function clearAuthenticatedQueries(queryClient) { await queryClient.cancelQueries(); queryClient.clear(); queryClient.setQueryData(sessionQueryKey, null); } //#endregion export { clearAuthenticatedQueries, requireAdmin, requireSession }; //# sourceMappingURL=auth-guards.mjs.map