mirror of
https://github.com/vercel/commerce.git
synced 2025-05-18 23:46:58 +00:00
59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
import { requireConfigValue } from '../../isomorphic-config'
|
|
import Cookies from 'js-cookie'
|
|
import type { IOAuthToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token'
|
|
import UserTokenResponseParseError from '../../errors/UserTokenResponseParseError'
|
|
|
|
export const getUserTokenResponse = (): IOAuthToken | undefined => {
|
|
const stringifiedToken = Cookies.get(
|
|
requireConfigValue('userCookieName') as string
|
|
)
|
|
|
|
if (!stringifiedToken) {
|
|
return undefined
|
|
}
|
|
|
|
try {
|
|
const token: IOAuthToken = JSON.parse(stringifiedToken)
|
|
|
|
return token
|
|
} catch (parseError) {
|
|
throw new UserTokenResponseParseError(
|
|
'Could not parse stored user token response.'
|
|
)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Retrieves the saved user token response. If the response fails json parsing,
|
|
* removes the saved token and returns @type {undefined} instead.
|
|
*/
|
|
export const ensureUserTokenResponse = (): IOAuthToken | undefined => {
|
|
try {
|
|
return getUserTokenResponse()
|
|
} catch (error) {
|
|
if (error instanceof UserTokenResponseParseError) {
|
|
removeUserTokenResponse()
|
|
|
|
return undefined
|
|
}
|
|
|
|
throw error
|
|
}
|
|
}
|
|
|
|
export const setUserTokenResponse = (token: IOAuthToken) => {
|
|
const cookieOptions = {
|
|
expires: requireConfigValue('userCookieExpire') as number,
|
|
}
|
|
|
|
Cookies.set(
|
|
requireConfigValue('userCookieName') as string,
|
|
JSON.stringify(token),
|
|
cookieOptions
|
|
)
|
|
}
|
|
|
|
export const removeUserTokenResponse = () => {
|
|
Cookies.remove(requireConfigValue('userCookieName') as string)
|
|
}
|