commerce/lib/spree/utils/tokens/user-token-response.ts
2024-05-21 20:00:11 +05:00

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