From 0a0fb976bfc2e986f2404d8cff8b043b2f4d5923 Mon Sep 17 00:00:00 2001 From: Guillim Date: Wed, 28 May 2025 13:49:19 +0200 Subject: [PATCH] fixing : "message" : "Mail service not enabled" (#12349) Fix Gmail API error handling for "Mail service not enabled" scenarios Add proper await Improves Gmail API error handling by properly detecting "Mail service not enabled" errors and classifying them as INSUFFICIENT_PERMISSIONS instead of TEMPORARY_ERROR Fixes https://github.com/twentyhq/twenty/issues/12260 ### Refernce : https://stackoverflow.com/questions/31692720/gmail-api-returning-status-code-400-error-mail-service-not-enabled --- .../services/connected-account-refresh-tokens.service.ts | 6 +++--- .../utils/parse-gmail-message-list-fetch-error.util.ts | 7 +++++++ .../gmail/utils/parse-gmail-messages-import-error.util.ts | 8 ++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/twenty-server/src/modules/connected-account/refresh-tokens-manager/services/connected-account-refresh-tokens.service.ts b/packages/twenty-server/src/modules/connected-account/refresh-tokens-manager/services/connected-account-refresh-tokens.service.ts index 7f46dd71c..8af298533 100644 --- a/packages/twenty-server/src/modules/connected-account/refresh-tokens-manager/services/connected-account-refresh-tokens.service.ts +++ b/packages/twenty-server/src/modules/connected-account/refresh-tokens-manager/services/connected-account-refresh-tokens.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; -import { assertUnreachable } from 'twenty-shared/utils'; import { ConnectedAccountProvider } from 'twenty-shared/types'; +import { assertUnreachable } from 'twenty-shared/utils'; import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager'; import { @@ -74,11 +74,11 @@ export class ConnectedAccountRefreshTokensService { try { switch (connectedAccount.provider) { case ConnectedAccountProvider.GOOGLE: - return this.googleAPIRefreshAccessTokenService.refreshAccessToken( + return await this.googleAPIRefreshAccessTokenService.refreshAccessToken( refreshToken, ); case ConnectedAccountProvider.MICROSOFT: - return this.microsoftAPIRefreshAccessTokenService.refreshTokens( + return await this.microsoftAPIRefreshAccessTokenService.refreshTokens( refreshToken, ); default: diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/utils/parse-gmail-message-list-fetch-error.util.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/utils/parse-gmail-message-list-fetch-error.util.ts index 655fa83cf..3ca37819e 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/utils/parse-gmail-message-list-fetch-error.util.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/utils/parse-gmail-message-list-fetch-error.util.ts @@ -24,6 +24,13 @@ export const parseGmailMessageListFetchError = (error: { ); } if (reason === 'failedPrecondition') { + if (message.includes('Mail service not enabled')) { + return new MessageImportDriverException( + message, + MessageImportDriverExceptionCode.INSUFFICIENT_PERMISSIONS, + ); + } + return new MessageImportDriverException( message, MessageImportDriverExceptionCode.TEMPORARY_ERROR, diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/utils/parse-gmail-messages-import-error.util.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/utils/parse-gmail-messages-import-error.util.ts index 3da89e84e..2dbc1eeb3 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/utils/parse-gmail-messages-import-error.util.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/utils/parse-gmail-messages-import-error.util.ts @@ -16,6 +16,7 @@ export const parseGmailMessagesImportError = ( const { code, errors } = error; const reason = errors?.[0]?.reason; + const originalMessage = errors?.[0]?.message; const message = `${errors?.[0]?.message} for message with externalId: ${messageExternalId}`; switch (code) { @@ -27,6 +28,13 @@ export const parseGmailMessagesImportError = ( ); } if (reason === 'failedPrecondition') { + if (originalMessage.includes('Mail service not enabled')) { + return new MessageImportDriverException( + message, + MessageImportDriverExceptionCode.INSUFFICIENT_PERMISSIONS, + ); + } + return new MessageImportDriverException( message, MessageImportDriverExceptionCode.TEMPORARY_ERROR,