refresh oAuth tokens when sending email (#17250)

calls `connectedAccountRefreshTokensService` in `SendEmailTool`
resolving error `Lifetime validation failed, the token is expired.`
This commit is contained in:
neo773
2026-01-19 23:24:07 +05:30
committed by GitHub
parent 038f9cc44f
commit 527c00d326
2 changed files with 23 additions and 1 deletions
@@ -28,6 +28,7 @@ import {
import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager';
import { buildSystemAuthContext } from 'src/engine/twenty-orm/utils/build-system-auth-context.util';
import { type ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity';
import { MessagingAccountAuthenticationService } from 'src/modules/messaging/message-import-manager/services/messaging-account-authentication.service';
import { MessagingSendMessageService } from 'src/modules/messaging/message-import-manager/services/messaging-send-message.service';
import { type MessageAttachment } from 'src/modules/messaging/message-import-manager/types/message';
import { parseEmailBody } from 'src/utils/parse-email-body';
@@ -44,6 +45,7 @@ export class SendEmailTool implements Tool {
constructor(
private readonly globalWorkspaceOrmManager: GlobalWorkspaceOrmManager,
private readonly sendMessageService: MessagingSendMessageService,
private readonly messagingAccountAuthenticationService: MessagingAccountAuthenticationService,
@InjectRepository(FileEntity)
private readonly fileRepository: Repository<FileEntity>,
private readonly fileService: FileService,
@@ -211,6 +213,25 @@ export class SendEmailTool implements Tool {
workspaceId,
);
const messageChannelId = connectedAccount.messageChannels.find(
(channel) => channel.handle === connectedAccount.handle,
)?.id!;
const { accessToken, refreshToken } =
await this.messagingAccountAuthenticationService.validateAndRefreshConnectedAccountAuthentication(
{
connectedAccount,
workspaceId,
messageChannelId,
},
);
const connectedAccountWithFreshTokens = {
...connectedAccount,
accessToken,
refreshToken,
};
const attachments = await this.getAttachments(files || [], workspaceId);
const parsedBody = parseEmailBody(body);
@@ -232,7 +253,7 @@ export class SendEmailTool implements Tool {
html: safeHtmlBody,
attachments,
},
connectedAccount,
connectedAccountWithFreshTokens,
);
this.logger.log(
@@ -110,6 +110,7 @@ import { MessagingMonitoringModule } from 'src/modules/messaging/monitoring/mess
],
exports: [
MessagingSendMessageService,
MessagingAccountAuthenticationService,
MessagingMessageListFetchCronCommand,
MessagingMessagesImportCronCommand,
MessagingOngoingStaleCronCommand,