62 lines
2.0 KiB
TypeScript

import { KiboCommerceConfig } from './../index'
import { getCookieExpirationDate } from '../../lib/get-cookie-expiration-date'
import { prepareSetCookie } from '../../lib/prepare-set-cookie'
import { setCookies } from '../../lib/set-cookie'
import { NextApiRequest } from 'next'
import getAnonymousShopperToken from './get-anonymous-shopper-token'
const parseCookie = (cookieValue?: any) => {
return cookieValue
? JSON.parse(Buffer.from(cookieValue, 'base64').toString('ascii'))
: null
}
export default class CookieHandler {
config: KiboCommerceConfig
request: NextApiRequest
response: any
accessToken: any
constructor(config: any, req: NextApiRequest, res: any) {
this.config = config
this.request = req
this.response = res
const encodedToken = req.cookies[config.customerCookie]
const token = parseCookie(encodedToken)
this.accessToken = token ? token.accessToken : null
}
async getAnonymousToken() {
const response: any = await getAnonymousShopperToken({
config: this.config,
})
let anonymousAccessToken = response?.accessToken
return {
response,
accessToken: anonymousAccessToken,
}
}
isShopperCookieAnonymous() {
const customerCookieKey = this.config.customerCookie
const shopperCookie = this.request.cookies[customerCookieKey]
const shopperSession = parseCookie(shopperCookie);
const isAnonymous = shopperSession?.customerAccount ? false : true
return isAnonymous
}
setAnonymousShopperCookie(anonymousShopperTokenResponse: any) {
const cookieExpirationDate = getCookieExpirationDate(
this.config.customerCookieMaxAgeInDays
)
const authCookie = prepareSetCookie(
this.config.customerCookie,
JSON.stringify(anonymousShopperTokenResponse),
anonymousShopperTokenResponse?.accessTokenExpiration
? { expires: cookieExpirationDate }
: {}
)
setCookies(this.response, [authCookie])
}
getAccessToken() {
return this.accessToken
}
}