import type { LoginRootMutation, SwitchToRootMutation } from "#graphql-operations"; import type { H3Event } from "h3"; import { pick } from "es-toolkit/compat"; export async function handleLogin(event: H3Event, loginData?: LoginRootMutation) { if (!loginData?.login?.user) { return; } const { authToken, refreshToken, user } = loginData.login; await setUserSession(event, { user: { id: user.id, email: user.email, }, secure: { authToken, refreshToken, }, loggedInAt: new Date().toISOString(), isSwitchedTo: false, }); } export async function handleLogout(event: H3Event) { await clearUserSession(event); } export async function handleSwitchTo(event: H3Event, data?: SwitchToRootMutation) { if (!data?.switchTo?.user) { return; } const session = await getUserSession(event); const { authToken, refreshToken, user } = data.switchTo; await setUserSession(event, { user: { id: user.id, email: user.email, }, secure: { authToken, refreshToken, previous: { user: session.user, loggedInAt: session.loggedInAt, secure: pick(session.secure, ["authToken", "refreshToken"]), }, }, loggedInAt: new Date().toISOString(), isSwitchedTo: true, }); } export async function handleSwitchBack(event: H3Event) { const session = await getUserSession(event); if (!session.secure?.previous) { return; } const { user, loggedInAt, secure } = session.secure.previous; await setUserSession(event, { user, secure, loggedInAt, isSwitchedTo: false, }); }