'use server'; import { cookies } from 'next/headers'; import { ResultDto } from '@/dtos/response/common'; import { LoginRequest, RegisterRequest, VerifyEmailRequest, ResendEmailRequest, ForgotPasswordRequest, ResetPasswordRequest } from '@/dtos/request/auth'; import { fetchJson, getAccessToken, getRefreshToken } from '@/lib/utils/server'; // 로그인 export async function fetchLogin(request: LoginRequest): Promise { return await fetchJson('/api/auth/login', { method: 'POST', body: JSON.stringify(request) }); } // 회원가입 요청 export async function fetchRegister(request: RegisterRequest): Promise { return await fetchJson('/api/auth/register', { method: 'POST', body: JSON.stringify(request) }); } // 회원가입 완료 export async function Registration(email: string|null): Promise { const cookie = (await cookies()).get('isVerified-Registration'); return await fetchJson(`/api/auth/registration/${email}`, { method: 'GET', headers: { 'Cookie': `isVerified-Registration=${cookie?.value || ""}` } }); } // 비밀번호 찾기 export async function fetchForgotPassword(request: ForgotPasswordRequest): Promise { return await fetchJson(`/api/auth/forgot-password`, { method: 'POST', headers: {'Content-Type': 'application/json'}, data: request }); } // 인증번호 확인 export async function fetchVerifyEmail(request: VerifyEmailRequest): Promise { return await fetchJson('/api/auth/verify-email', { method: 'POST', headers: {'Content-Type': 'application/json'}, data: request }); } // 인증번호 다시 받기 export async function fetchResendEmail(params: ResendEmailRequest): Promise { return await fetchJson('/api/auth/resend-email', { method: 'POST', headers: {'Content-Type': 'application/json'}, data: params }); } // 비밀번호 변경 export async function fetchResetPassword(params: ResetPasswordRequest): Promise { const cookie = (await cookies()).get('isVerified-ForgotPassword'); return await fetchJson('/api/auth/reset-password', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Cookie': `isVerified-ForgotPassword=${cookie?.value || ""}` }, data: params }); } // AccessToken 인증 export async function verifyAccessToken(): Promise { const accessToken = await getAccessToken(); if (!accessToken) { return false; } return await fetchJson('/api/auth/verify-token', { method: 'GET' }).then(res => res.ok); } // RefreshToken으로 AccessToken 갱신 export async function refreshAccessToken(): Promise { const refreshToken = await getRefreshToken(); if (!refreshToken) { return false; } return await fetchJson('/api/auth/refresh-token', { method: 'GET' }).then(res => res.ok); } // 로그인 확인 export async function isAuthenticated(): Promise { let ret = await verifyAccessToken(); if (!ret) { ret = await refreshAccessToken(); } return ret; }