UNPKG

@duongtrungnguyen/next-helper

Version:
94 lines 2.9 kB
"use server"; import { cookies } from "next/headers"; import * as jose from "jose"; import { libConfig } from "../configs"; import { parseToken } from "../utils"; async function setAuthCookies(tokens) { const cookieStore = await cookies(); const decodedAccessToken = jose.decodeJwt(tokens.accessToken); const decodedRefreshToken = jose.decodeJwt(tokens.refreshToken); cookieStore.set(libConfig.auth.cookies.accessToken, tokens.accessToken, { httpOnly: true, secure: process.env.NODE_ENV === "production", sameSite: "lax", path: "/", expires: new Date((decodedAccessToken.exp || 0) * 1e3) }); cookieStore.set(libConfig.auth.cookies.refreshToken, tokens.refreshToken, { httpOnly: true, secure: process.env.NODE_ENV === "production", sameSite: "lax", path: "/", expires: new Date((decodedRefreshToken.exp || 0) * 1e3) }); console.log("set success"); } async function clearAuthCookies() { const cookieStore = await cookies(); cookieStore.delete(libConfig.auth.cookies.accessToken); cookieStore.delete(libConfig.auth.cookies.refreshToken); } async function getCurrentUser() { var _a; try { const cookieStore = await cookies(); const accessToken = (_a = cookieStore.get(libConfig.auth.cookies.accessToken)) == null ? void 0 : _a.value; if (!accessToken) return null; const response = await fetch(`${libConfig.baseUrl}${libConfig.auth.globalPrefix}${libConfig.auth.endpoints.user}`, { headers: { Authorization: parseToken(accessToken) }, cache: "no-store" }); if (!response.ok) return null; return await response.json(); } catch (error) { console.error("Error getting current user:", error); return null; } } async function refreshAccessToken() { var _a; try { const cookieStore = await cookies(); const refreshToken = (_a = cookieStore.get(libConfig.auth.cookies.refreshToken)) == null ? void 0 : _a.value; if (!refreshToken) return false; const response = await fetch( `${libConfig.baseUrl}${libConfig.auth.globalPrefix}${libConfig.auth.endpoints.refresh}`, { method: "POST", headers: { Authorization: parseToken(refreshToken) } } ); if (!response.ok) { clearAuthCookies(); return false; } const data = await response.json(); if (!(data == null ? void 0 : data.accessToken) || !(data == null ? void 0 : data.refreshToken)) { console.error("Invalid refresh response:", data); return false; } await setAuthCookies(data); return true; } catch (error) { console.error("Error refreshing token:", error); return false; } } async function auth() { const user = await getCurrentUser(); return { user }; } export { auth, clearAuthCookies, getCurrentUser, refreshAccessToken, setAuthCookies }; //# sourceMappingURL=server.js.map