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

46 lines
1.3 KiB
TypeScript

import type { GraphQLFetcherResult } from '@commerce/api';
import type { HookFetcherContext } from '@commerce/utils/types';
import TokensNotRejectedError from '../../errors/TokensNotRejectedError';
import type { UserOAuthTokens } from '../../types';
import type { EmptyObjectResponse } from '@spree/storefront-api-v2-sdk/types/interfaces/EmptyObject';
const revokeUserTokens = async (
fetch: HookFetcherContext<{
data: any;
}>['fetch'],
userTokens: UserOAuthTokens
): Promise<void> => {
const spreeRevokeTokensResponses = await Promise.allSettled([
fetch<GraphQLFetcherResult<EmptyObjectResponse>>({
variables: {
methodPath: 'authentication.revokeToken',
arguments: [
{
token: userTokens.refreshToken
}
]
}
}),
fetch<GraphQLFetcherResult<EmptyObjectResponse>>({
variables: {
methodPath: 'authentication.revokeToken',
arguments: [
{
token: userTokens.accessToken
}
]
}
})
]);
const anyRejected = spreeRevokeTokensResponses.some((response) => response.status === 'rejected');
if (anyRejected) {
throw new TokensNotRejectedError('Some tokens could not be rejected in Spree.');
}
return undefined;
};
export default revokeUserTokens;