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