import { getSession } from "next-auth/react"; import { consoleLogger } from "../../actions/core/logger"; const signinRedirect = { destination: "/auth/signin", permanent: false }; const buildSigninRedirectResult = () => ({ redirect: signinRedirect }); export async function resolveMyPortalAuthContext(ctx, options = {}) { const { loggerName = "MyPortalAuthGuard", noSessionMessage = "myportal loader missing session; redirecting to signin", noSessionUserMessage = "myportal loader missing session user identity; redirecting to signin", noPinsUserMessage = "myportal loader missing pinsUser cookie; redirecting to signin" } = options; const session = await getSession(ctx); if (!session) { consoleLogger({ name: loggerName, reasonCode: "NO_SESSION", message: noSessionMessage }); return { ok: false, redirect: buildSigninRedirectResult().redirect }; } if (!session?.user?.id || !session?.user?.email) { consoleLogger({ name: loggerName, reasonCode: "NO_SESSION_USER", message: noSessionUserMessage, hasSessionUserId: !!session?.user?.id, hasSessionUserEmail: !!session?.user?.email }); return { ok: false, redirect: buildSigninRedirectResult().redirect }; } const pinsUser = ctx?.req?.cookies?.pinsUser; if (!pinsUser) { consoleLogger({ name: loggerName, reasonCode: "NO_PINSUSER_COOKIE", message: noPinsUserMessage }); return { ok: false, redirect: buildSigninRedirectResult().redirect }; } return { ok: true, session, sessionUserId: session.user.id, sessionUserEmail: session.user.email, pinsUser }; }