"use server"; import { headers } from "next/headers"; import { redirect } from "next/navigation"; import { isAPIError } from "better-auth/api"; import { z } from "zod"; import { auth } from "@/lib/auth"; const loginSchema = z.object({ username: z.string().trim().min(1, "Username wajib diisi"), password: z.string().min(1, "Password wajib diisi"), }); export type LoginState = { error?: string; username?: string; }; export async function login( _prevState: LoginState, formData: FormData, ): Promise { const parsed = loginSchema.safeParse({ username: formData.get("username"), password: formData.get("password"), }); if (!parsed.success) { return { error: parsed.error.issues[0].message, username: String(formData.get("username") ?? ""), }; } try { await auth.api.signInUsername({ body: parsed.data, headers: await headers(), }); } catch (error) { if (isAPIError(error)) { return { error: "Username atau password salah", username: parsed.data.username, }; } throw error; } redirect("/"); } export async function logout() { await auth.api.signOut({ headers: await headers() }); redirect("/login"); }