mirror of
https://github.com/vercel/commerce.git
synced 2025-04-25 04:17:51 +00:00
62 lines
2.0 KiB
TypeScript
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
|
|
}
|
|
}
|