mirror of
https://github.com/vercel/commerce.git
synced 2025-06-17 20:51:21 +00:00
51 lines
1.5 KiB
TypeScript
51 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);
|
|
};
|