Files
freno-dev/src/lib/auth-query.ts
Michael Freno 898c891bd5 chore: remediate pygienium audit findings
Dead code: 77 verified-unused exports, files (BackArrow, MenuBars,
cookies.ts, db/create.ts, schemas/comment.ts, security-headers.ts) and
12 unused dependencies removed
Comments: ~370 RESTATE comments stripped across 53 files; 2 verbose
blocks tightened; dead commented-out config removed
Complexity: bulkUpsert extracted into 11 per-entity helpers (CCN 156->~10);
login formHandler split into 3 submitters (CCN 63->~5); account page render
split into 8 section components (CCN 40); updatePost SQL builder rebuilt;
assert*Owned consolidated behind generic assertOwnedBy
Defensive guards: 4 redundant rethrow/nullish guards removed
2026-08-11 13:36:18 -04:00

90 lines
2.2 KiB
TypeScript

import { query, revalidate as revalidateKey } from "@solidjs/router";
import { getRequestEvent } from "solid-js/web";
export interface UserState {
isAuthenticated: boolean;
userId: string | null;
email: string | null;
displayName: string | null;
emailVerified: boolean;
isAdmin: boolean;
}
/**
* Get current user state from server
* Uses cache() to ensure single execution per request and proper SSR hydration
*/
export const getUserState = query(async (): Promise<UserState> => {
"use server";
const { checkAuthStatus } = await import("~/server/auth");
const { ConnectionFactory } = await import("~/server/utils");
const event = getRequestEvent();
// Safety check: if no event, we're not in a request context
if (!event || !event.nativeEvent) {
return {
isAuthenticated: false,
userId: null,
email: null,
displayName: null,
emailVerified: false,
isAdmin: false
};
}
const auth = await checkAuthStatus(event.nativeEvent);
if (!auth.isAuthenticated || !auth.userId) {
return {
isAuthenticated: false,
userId: null,
email: null,
displayName: null,
emailVerified: false,
isAdmin: false
};
}
const conn = ConnectionFactory();
const res = await conn.execute({
sql: "SELECT email, display_name, email_verified FROM User WHERE id = ?",
args: [auth.userId]
});
if (res.rows.length === 0) {
return {
isAuthenticated: false,
userId: null,
email: null,
displayName: null,
emailVerified: false,
isAdmin: false
};
}
const user = res.rows[0] as any;
return {
isAuthenticated: true,
userId: auth.userId,
email: user.email ?? null,
displayName: user.display_name ?? null,
emailVerified: user.email_verified === 1,
isAdmin: auth.isAdmin
};
}, "user-auth-state");
/**
* Revalidate auth state globally
* Call this after login, logout, token refresh, email verification
*/
export function revalidateAuth() {
revalidateKey("user-auth-state");
// Dispatch event to trigger UI updates (client-side only)
if (typeof window !== "undefined") {
window.dispatchEvent(new CustomEvent("auth-state-changed"));
}
}