import {cookies} from "next/headers"; import { serverGraphqlFetch } from "@utils/bagisto"; import { CREATE_CART_TOKEN } from "@/graphql"; import { GUEST_CART_ID, GUEST_CART_TOKEN, IS_GUEST, GUEST_COOKIE_OPTION } from "@/utils/constants"; import { CreateCartTokenData } from "@/types/cart/type"; export async function deleteGuestCookie(isGuest: boolean = true) { const cookieStore = await cookies(); cookieStore.delete(GUEST_CART_TOKEN); cookieStore.delete(GUEST_CART_ID); cookieStore.set(IS_GUEST, isGuest ? "true" : "false"); } export async function setGuestCookie({ guestToken, guestCartId, isGuest }: { guestToken: string; guestCartId: string; isGuest: boolean; }) { const cookieOptions = { httpOnly: GUEST_COOKIE_OPTION.httpOnly, maxAge: GUEST_COOKIE_OPTION.maxAge, path: GUEST_COOKIE_OPTION.path, secure: GUEST_COOKIE_OPTION.secure, sameSite: GUEST_COOKIE_OPTION.sameSite, }; const cookieStore = await cookies(); cookieStore.set(GUEST_CART_TOKEN,guestToken,cookieOptions); cookieStore.set(GUEST_CART_ID,guestCartId,cookieOptions); cookieStore.set(IS_GUEST,isGuest ? "true" : "false"); } export async function createGuestCartToken() { const cookieStore = await cookies(); const existingToken = cookieStore.get(GUEST_CART_TOKEN)?.value; const existingCartId = cookieStore.get(GUEST_CART_ID)?.value; if (existingToken && existingCartId) { return { success: true, cartToken: existingToken, cartId: existingCartId, msg: '' }; } try{ const response = await serverGraphqlFetch({ query: CREATE_CART_TOKEN, cache: "no-store", takeAuthorization: false }); const success = response.error ? false : true; let guestToken = null; let guestCartId = null; const msg = response.error ? response.error.message : ''; if(success && response.data?.createCartToken) { guestToken = response.data.createCartToken.cartToken.sessionToken; guestCartId = response.data.createCartToken.cartToken.id; await setGuestCookie({ guestToken, guestCartId, isGuest: true }); } return { success: success, cartToken: guestToken, cartId: guestCartId, msg: msg }; } catch(e: any) { return { success:false, cartToken: null, cartId: null, msg: e.message || 'Create guest cart token failed!' }; } }