everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
50 lines (48 loc) • 1.98 kB
JavaScript
const require_plugin_path = require('./plugin-path.cjs');
const require_ui_auth = require('./auth.cjs');
let _tanstack_react_router = require("@tanstack/react-router");
//#region src/ui/auth-guards.ts
async function ensureSession(context) {
const { queryClient, authClient } = context;
return queryClient.query(require_ui_auth.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 (0, _tanstack_react_router.redirect)({ href: require_plugin_path.pluginHref("/login", { redirect: location.href }) });
if (session.user.banned) throw (0, _tanstack_react_router.redirect)({ href: require_plugin_path.pluginPath("/login#banned") });
return {
auth: buildAuthContext(session),
session
};
}
async function requireAdmin(args) {
const result = await requireSession(args);
if (result.session.user?.role !== "admin") throw (0, _tanstack_react_router.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(require_ui_auth.sessionQueryKey, null);
}
//#endregion
exports.clearAuthenticatedQueries = clearAuthenticatedQueries;
exports.requireAdmin = requireAdmin;
exports.requireSession = requireSession;
//# sourceMappingURL=auth-guards.cjs.map