Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/Savy011/acm-website-tanstack.
Something went wrong. Try again.
1.6 kB · 55 lines
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556import type { SessionUser } from "$lib/api/types";
import { createServerFn } from "@tanstack/react-start";import { deleteCookie, setCookie } from "@tanstack/react-start/server";import { z } from "zod";
import { cookieBase } from "$lib/constants/api";import { decodeJWTPayload } from "$lib/utils";import { getTreaty } from "../../routes/api.$";import { readSession } from "./session";
export const fetchUserFn = createServerFn({ method: "GET" }).handler( async (): Promise<SessionUser | null> => { const session = readSession(); if (!session.authenticated) return null; return session.user; },);
const SignInDataSchema = z.object({ email: z.email(), password: z.string().nonempty(),});
export const signinFn = createServerFn({ method: "POST" }) .validator(SignInDataSchema) .handler(async ({ data }) => { const api = getTreaty();
const { data: res, error } = await api.auth["sign-in"].post({ email: data.email, password: data.password, });
if (error) return { error: error.value.message };
const claims = decodeJWTPayload(res.data.token);
if (!claims) return { error: "Invalid token received from server" };
setCookie("session", res.data.token, cookieBase(claims.exp)); setCookie("user", JSON.stringify(res.data.user), cookieBase(claims.exp));
return { success: true }; });
export const signoutFn = createServerFn({ method: "POST" }).handler(async () => { const api = getTreaty();
await api.auth["sign-out"].post(); deleteCookie("session"); deleteCookie("user");
return { success: true };});