commerce/packages/spree/utils/tokens/user-token-response.ts
2022-01-14 20:44:48 -05:00

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)
}