diff --git a/front/src/modules/apollo/services/apollo.factory.ts b/front/src/modules/apollo/services/apollo.factory.ts index a11beb595..c3b371dd3 100644 --- a/front/src/modules/apollo/services/apollo.factory.ts +++ b/front/src/modules/apollo/services/apollo.factory.ts @@ -3,6 +3,7 @@ import { ApolloClient, ApolloClientOptions, ApolloLink, + fromPromise, ServerError, ServerParseError, } from '@apollo/client'; @@ -22,8 +23,6 @@ import { loggerLink } from '../utils'; const logger = loggerLink(() => 'Twenty'); -let isRefreshing = false; - export interface Options extends ApolloClientOptions { onError?: (err: GraphQLErrors | undefined) => void; onNetworkError?: (err: Error | ServerParseError | ServerError) => void; @@ -78,7 +77,6 @@ export class ApolloFactory implements ApolloManager { retryIf: (error) => !!error, }, }); - const errorLink = onError( ({ graphQLErrors, networkError, forward, operation }) => { if (graphQLErrors) { @@ -87,22 +85,15 @@ export class ApolloFactory implements ApolloManager { for (const graphQLError of graphQLErrors) { switch (graphQLError?.extensions?.code) { case 'UNAUTHENTICATED': { - if (!isRefreshing) { - isRefreshing = true; + return fromPromise( renewToken(uri, this.tokenPair) .then((tokens) => { onTokenPairChange?.(tokens); - return true; }) .catch(() => { onUnauthenticatedError?.(); - return false; - }) - .finally(() => { - isRefreshing = false; - }); - } - return forward(operation); + }), + ).flatMap(() => forward(operation)); } default: if (isDebugMode) {