diff --git a/packages/twenty-front/src/pages/settings/accounts/__stories__/SettingsAccountsCalendars.stories.tsx b/packages/twenty-front/src/pages/settings/accounts/__stories__/SettingsAccountsCalendars.stories.tsx index 81468b782..fc184ea50 100644 --- a/packages/twenty-front/src/pages/settings/accounts/__stories__/SettingsAccountsCalendars.stories.tsx +++ b/packages/twenty-front/src/pages/settings/accounts/__stories__/SettingsAccountsCalendars.stories.tsx @@ -58,7 +58,7 @@ export const TwoConnectedAccounts: Story = { provider: 'google', accountOwnerId: '20202020-03f2-4d83-b0d5-2ec2bcee72d4', lastSyncHistoryId: '', - emailAliases: '', + handleAliases: '', handle: 'test.test@gmail.com', authFailedAt: null, }, diff --git a/packages/twenty-front/src/pages/settings/accounts/__stories__/SettingsAccountsEmails.stories.tsx b/packages/twenty-front/src/pages/settings/accounts/__stories__/SettingsAccountsEmails.stories.tsx index bde4ce31d..f0ebac280 100644 --- a/packages/twenty-front/src/pages/settings/accounts/__stories__/SettingsAccountsEmails.stories.tsx +++ b/packages/twenty-front/src/pages/settings/accounts/__stories__/SettingsAccountsEmails.stories.tsx @@ -59,7 +59,7 @@ export const TwoConnectedAccounts: Story = { provider: 'google', accountOwnerId: '20202020-03f2-4d83-b0d5-2ec2bcee72d4', lastSyncHistoryId: '', - emailAliases: '', + handleAliases: '', handle: 'test.test@gmail.com', authFailedAt: null, }, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts index 8d1e1cd4f..8fe3c7d3c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts @@ -140,7 +140,7 @@ export const CONNECTED_ACCOUNT_STANDARD_FIELD_IDS = { authFailedAt: '20202020-d268-4c6b-baff-400d402b430a', messageChannels: '20202020-24f7-4362-8468-042204d1e445', calendarChannels: '20202020-af4a-47bb-99ec-51911c1d3977', - emailAliases: '20202020-8a3d-46be-814f-6228af16c47b', + handleAliases: '20202020-8a3d-46be-814f-6228af16c47b', }; export const EVENT_STANDARD_FIELD_IDS = { diff --git a/packages/twenty-server/src/modules/connected-account/auto-companies-and-contacts-creation/utils/filter-out-contacts-from-company-or-workspace.util.ts b/packages/twenty-server/src/modules/connected-account/auto-companies-and-contacts-creation/utils/filter-out-contacts-from-company-or-workspace.util.ts index 630809173..1934d9fc6 100644 --- a/packages/twenty-server/src/modules/connected-account/auto-companies-and-contacts-creation/utils/filter-out-contacts-from-company-or-workspace.util.ts +++ b/packages/twenty-server/src/modules/connected-account/auto-companies-and-contacts-creation/utils/filter-out-contacts-from-company-or-workspace.util.ts @@ -1,7 +1,7 @@ -import { getDomainNameFromHandle } from 'src/modules/connected-account/auto-companies-and-contacts-creation/utils/get-domain-name-from-handle.util'; -import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; -import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; import { Contact } from 'src/modules/connected-account/auto-companies-and-contacts-creation/types/contact.type'; +import { getDomainNameFromHandle } from 'src/modules/connected-account/auto-companies-and-contacts-creation/utils/get-domain-name-from-handle.util'; +import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; export function filterOutSelfAndContactsFromCompanyOrWorkspace( contacts: Contact[], @@ -10,7 +10,7 @@ export function filterOutSelfAndContactsFromCompanyOrWorkspace( ): Contact[] { const selfDomainName = getDomainNameFromHandle(connectedAccount.handle); - const emailAliases = connectedAccount.emailAliases?.split(',') || []; + const handleAliases = connectedAccount.handleAliases?.split(',') || []; const workspaceMembersMap = workspaceMembers.reduce( (map, workspaceMember) => { @@ -25,6 +25,6 @@ export function filterOutSelfAndContactsFromCompanyOrWorkspace( (contact) => getDomainNameFromHandle(contact.handle) !== selfDomainName && !workspaceMembersMap[contact.handle] && - !emailAliases.includes(contact.handle), + !handleAliases.includes(contact.handle), ); } diff --git a/packages/twenty-server/src/modules/connected-account/email-alias-manager/drivers/google/google-email-alias-manager.service.ts b/packages/twenty-server/src/modules/connected-account/email-alias-manager/drivers/google/google-email-alias-manager.service.ts index a8201bc19..5de07e5e1 100644 --- a/packages/twenty-server/src/modules/connected-account/email-alias-manager/drivers/google/google-email-alias-manager.service.ts +++ b/packages/twenty-server/src/modules/connected-account/email-alias-manager/drivers/google/google-email-alias-manager.service.ts @@ -11,7 +11,7 @@ export class GoogleEmailAliasManagerService { private readonly oAuth2ClientManagerService: OAuth2ClientManagerService, ) {} - public async getEmailAliases( + public async getHandleAliases( connectedAccount: ConnectedAccountWorkspaceEntity, ) { const oAuth2Client = @@ -29,7 +29,7 @@ export class GoogleEmailAliasManagerService { const emailAddresses = emailsResponse.data.emailAddresses; - const emailAliases = + const handleAliases = emailAddresses ?.filter((emailAddress) => { return emailAddress.metadata?.primary !== true; @@ -38,6 +38,6 @@ export class GoogleEmailAliasManagerService { return emailAddress.value || ''; }) || []; - return emailAliases; + return handleAliases; } } diff --git a/packages/twenty-server/src/modules/connected-account/email-alias-manager/services/email-alias-manager.service.ts b/packages/twenty-server/src/modules/connected-account/email-alias-manager/services/email-alias-manager.service.ts index e535bc87d..50a855ba3 100644 --- a/packages/twenty-server/src/modules/connected-account/email-alias-manager/services/email-alias-manager.service.ts +++ b/packages/twenty-server/src/modules/connected-account/email-alias-manager/services/email-alias-manager.service.ts @@ -13,16 +13,16 @@ export class EmailAliasManagerService { private readonly googleEmailAliasManagerService: GoogleEmailAliasManagerService, ) {} - public async refreshEmailAliases( + public async refreshHandleAliases( connectedAccount: ConnectedAccountWorkspaceEntity, workspaceId: string, ) { - let emailAliases: string[]; + let handleAliases: string[]; switch (connectedAccount.provider) { case 'google': - emailAliases = - await this.googleEmailAliasManagerService.getEmailAliases( + handleAliases = + await this.googleEmailAliasManagerService.getHandleAliases( connectedAccount, ); break; @@ -32,8 +32,8 @@ export class EmailAliasManagerService { ); } - await this.connectedAccountRepository.updateEmailAliases( - emailAliases, + await this.connectedAccountRepository.updateHandleAliases( + handleAliases, connectedAccount.id, workspaceId, ); diff --git a/packages/twenty-server/src/modules/connected-account/repositories/connected-account.repository.ts b/packages/twenty-server/src/modules/connected-account/repositories/connected-account.repository.ts index 52a3ff68c..ae68fd68a 100644 --- a/packages/twenty-server/src/modules/connected-account/repositories/connected-account.repository.ts +++ b/packages/twenty-server/src/modules/connected-account/repositories/connected-account.repository.ts @@ -307,8 +307,8 @@ export class ConnectedAccountRepository { return connectedAccount; } - public async updateEmailAliases( - emailAliases: string[], + public async updateHandleAliases( + handleAliases: string[], connectedAccountId: string, workspaceId: string, transactionManager?: EntityManager, @@ -317,9 +317,9 @@ export class ConnectedAccountRepository { this.workspaceDataSourceService.getSchemaName(workspaceId); await this.workspaceDataSourceService.executeRawQuery( - `UPDATE ${dataSourceSchema}."connectedAccount" SET "emailAliases" = $1 WHERE "id" = $2`, - // TODO: modify emailAliases to be of fieldmetadatatype array - [emailAliases.join(','), connectedAccountId], + `UPDATE ${dataSourceSchema}."connectedAccount" SET "handleAliases" = $1 WHERE "id" = $2`, + // TODO: modify handleAliases to be of fieldmetadatatype array + [handleAliases.join(','), connectedAccountId], workspaceId, transactionManager, ); diff --git a/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts b/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts index 88304baad..92a2b0a58 100644 --- a/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts +++ b/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts @@ -1,25 +1,25 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { RelationMetadataType, RelationOnDeleteAction, } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; -import { CONNECTED_ACCOUNT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; -import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; -import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; -import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; -import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; -import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; -import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; -import { MessageChannelWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel.workspace-entity'; -import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { WorkspaceGate } from 'src/engine/twenty-orm/decorators/workspace-gate.decorator'; +import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; +import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; +import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; +import { CONNECTED_ACCOUNT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; +import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; import { CalendarChannelWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity'; +import { MessageChannelWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; export enum ConnectedAccountProvider { GOOGLE = 'google', @@ -92,16 +92,16 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { authFailedAt: Date | null; @WorkspaceField({ - standardId: CONNECTED_ACCOUNT_STANDARD_FIELD_IDS.emailAliases, + standardId: CONNECTED_ACCOUNT_STANDARD_FIELD_IDS.handleAliases, type: FieldMetadataType.TEXT, - label: 'Email Aliases', - description: 'Email Aliases', + label: 'Handle Aliases', + description: 'Handle Aliases', icon: 'IconMail', }) @WorkspaceGate({ featureFlag: FeatureFlagKeys.IsMessagingAliasFetchingEnabled, }) - emailAliases: string; + handleAliases: string; @WorkspaceRelation({ standardId: CONNECTED_ACCOUNT_STANDARD_FIELD_IDS.accountOwner, diff --git a/packages/twenty-server/src/modules/messaging/common/services/messaging-message.service.ts b/packages/twenty-server/src/modules/messaging/common/services/messaging-message.service.ts index 505744284..e96d2ab30 100644 --- a/packages/twenty-server/src/modules/messaging/common/services/messaging-message.service.ts +++ b/packages/twenty-server/src/modules/messaging/common/services/messaging-message.service.ts @@ -117,7 +117,7 @@ export class MessagingMessageService { const messageDirection = connectedAccount.handle === message.fromHandle || - connectedAccount.emailAliases?.includes(message.fromHandle) + connectedAccount.handleAliases?.includes(message.fromHandle) ? 'outgoing' : 'incoming'; 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 75f48c682..c585a3b39 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 @@ -115,7 +115,7 @@ export class MessagingGmailMessagesImportService { ) ) { try { - await this.emailAliasManagerService.refreshEmailAliases( + await this.emailAliasManagerService.refreshHandleAliases( connectedAccount, workspaceId, ); diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/messaging-save-messages-and-enqueue-contact-creation.service.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/messaging-save-messages-and-enqueue-contact-creation.service.ts index 42467f2fd..a8fd5dd96 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/messaging-save-messages-and-enqueue-contact-creation.service.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/messaging-save-messages-and-enqueue-contact-creation.service.ts @@ -53,7 +53,7 @@ export class MessagingSaveMessagesAndEnqueueContactCreationService { workspaceId, ); - const emailAliases = connectedAccount.emailAliases?.split(',') || []; + const handleAliases = connectedAccount.handleAliases?.split(',') || []; let savedMessageParticipants: MessageParticipantWorkspaceEntity[] = []; @@ -80,10 +80,11 @@ export class MessagingSaveMessagesAndEnqueueContactCreationService { ''; const isMessageSentByConnectedAccount = - emailAliases.includes(fromHandle); + handleAliases.includes(fromHandle) || + fromHandle === connectedAccount.handle; const isParticipantConnectedAccount = - emailAliases.includes(participant.handle) || + handleAliases.includes(participant.handle) || participant.handle === connectedAccount.handle; const isExcludedByNonProfessionalEmails =