You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

65 lines
1.7 KiB

import type { H3Event } from 'h3'
import { v4 as uuidv4 } from 'uuid'
/**
* Get or create a session ID for guest cart management
*
* This session ID is stored in a secure HTTP-only cookie and used to
* identify guest carts. When a user logs in, their guest cart can be
* merged with their user cart (future enhancement).
*
* @param event - H3 event object
* @returns Session ID (UUID)
*/
export function getOrCreateSessionId(event: H3Event): string {
const config = useRuntimeConfig()
const cookieName = config.cart.sessionCookieName
// Try to get existing session ID from cookie
const existingSessionId = getCookie(event, cookieName)
if (existingSessionId) {
return existingSessionId
}
// Generate new session ID
const newSessionId = uuidv4()
// Calculate expiry date based on config
const expiryDays = config.cart.expiryDays
const maxAge = expiryDays * 24 * 60 * 60 // Convert days to seconds
// Set session cookie
setCookie(event, cookieName, newSessionId, {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'lax',
maxAge,
path: '/',
})
return newSessionId
}
/**
* Get the current session ID without creating a new one
*
* @param event - H3 event object
* @returns Session ID or null if not found
*/
export function getSessionId(event: H3Event): string | null {
const config = useRuntimeConfig()
const cookieName = config.cart.sessionCookieName
return getCookie(event, cookieName) || null
}
/**
* Clear the session ID cookie
*
* @param event - H3 event object
*/
export function clearSessionId(event: H3Event): void {
const config = useRuntimeConfig()
const cookieName = config.cart.sessionCookieName
deleteCookie(event, cookieName)
}