From 64b8e4ec4d344d5704f803b6aa9cdd67c5bbb7d4 Mon Sep 17 00:00:00 2001 From: bosiraphael <71827178+bosiraphael@users.noreply.github.com> Date: Tue, 11 Jun 2024 18:52:38 +0200 Subject: [PATCH] Fix access token refresh (#5825) In `messaging-gmail-messages-import.service`, we were refreshing the access token before each query but we were passing the old access token to `fetchAllMessages`. I modified the function to query the updated connectedAccount with the new access token. This will solve the 401 errors we were getting in production. --- ...gmail-fetch-messages-by-batches.service.ts | 22 +++++++++++++++++-- ...messaging-gmail-messages-import.service.ts | 3 +-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/messaging-gmail-fetch-messages-by-batches.service.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/messaging-gmail-fetch-messages-by-batches.service.ts index be2b3e1a1..1e0c0c6e9 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/messaging-gmail-fetch-messages-by-batches.service.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/messaging-gmail-fetch-messages-by-batches.service.ts @@ -10,6 +10,9 @@ import { GmailMessage } from 'src/modules/messaging/message-import-manager/drive import { MessageQuery } from 'src/modules/messaging/message-import-manager/types/message-or-thread-query'; import { formatAddressObjectAsParticipants } from 'src/modules/messaging/message-import-manager/utils/format-address-object-as-participants.util'; import { MessagingFetchByBatchesService } from 'src/modules/messaging/common/services/messaging-fetch-by-batch.service'; +import { InjectObjectMetadataRepository } from 'src/engine/object-metadata-repository/object-metadata-repository.decorator'; +import { ConnectedAccountRepository } from 'src/modules/connected-account/repositories/connected-account.repository'; +import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; @Injectable() export class MessagingGmailFetchMessagesByBatchesService { @@ -19,15 +22,30 @@ export class MessagingGmailFetchMessagesByBatchesService { constructor( private readonly fetchByBatchesService: MessagingFetchByBatchesService, + @InjectObjectMetadataRepository(ConnectedAccountWorkspaceEntity) + private readonly connectedAccountRepository: ConnectedAccountRepository, ) {} async fetchAllMessages( queries: MessageQuery[], - accessToken: string, - workspaceId: string, connectedAccountId: string, + workspaceId: string, ): Promise { let startTime = Date.now(); + + const connectedAccount = await this.connectedAccountRepository.getById( + connectedAccountId, + workspaceId, + ); + + if (!connectedAccount) { + throw new Error( + `Connected account ${connectedAccountId} not found in workspace ${workspaceId}`, + ); + } + + const accessToken = connectedAccount.accessToken; + const batchResponses = await this.fetchByBatchesService.fetchAllByBatches( queries, accessToken, diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/messaging-gmail-messages-import.service.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/messaging-gmail-messages-import.service.ts index 73a9d485d..46a0a4c28 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/messaging-gmail-messages-import.service.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/messaging-gmail-messages-import.service.ts @@ -101,9 +101,8 @@ export class MessagingGmailMessagesImportService { const allMessages = await this.fetchMessagesByBatchesService.fetchAllMessages( messageQueries, - connectedAccount.accessToken, - workspaceId, connectedAccount.id, + workspaceId, ); const blocklist = await this.blocklistRepository.getByWorkspaceMemberId(