@duongtrungnguyen/next-helper
Version:
Helper library for Next.js 15
94 lines • 2.9 kB
JavaScript
"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