From 1e908e5f0f37f1ecef5dc616a3e570089a5717ad Mon Sep 17 00:00:00 2001 From: neo773 <62795688+neo773@users.noreply.github.com> Date: Thu, 9 Apr 2026 19:28:12 +0530 Subject: [PATCH] fix: SendEmail workflow ConnectedAccount query (#19484) --- .../src/metadata/generated/schema.graphql | 29 + .../src/metadata/generated/schema.ts | 91 +++ .../src/metadata/generated/types.ts | 589 ++++++++++-------- .../src/generated-metadata/graphql.ts | 48 ++ .../utils/hasMissingDraftEmailScopes.ts | 2 +- .../hooks/useAccountToReconnect.ts | 16 +- .../queries/getConnectedAccountById.ts | 31 + .../WorkflowEditActionEmailBase.tsx | 94 +-- .../dtos/connected-account-public.dto.ts | 32 + .../resolvers/connected-account.resolver.ts | 13 + 10 files changed, 636 insertions(+), 309 deletions(-) create mode 100644 packages/twenty-front/src/modules/settings/accounts/graphql/queries/getConnectedAccountById.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/connected-account/dtos/connected-account-public.dto.ts diff --git a/packages/twenty-client-sdk/src/metadata/generated/schema.graphql b/packages/twenty-client-sdk/src/metadata/generated/schema.graphql index c85c39b3465..77430131f06 100644 --- a/packages/twenty-client-sdk/src/metadata/generated/schema.graphql +++ b/packages/twenty-client-sdk/src/metadata/generated/schema.graphql @@ -2790,6 +2790,34 @@ type ConnectedAccountDTO { updatedAt: DateTime! } +type PublicConnectionParametersOutput { + host: String! + port: Float! + username: String + secure: Boolean +} + +type PublicImapSmtpCaldavConnectionParameters { + IMAP: PublicConnectionParametersOutput + SMTP: PublicConnectionParametersOutput + CALDAV: PublicConnectionParametersOutput +} + +type ConnectedAccountPublicDTO { + id: UUID! + handle: String! + provider: String! + lastCredentialsRefreshedAt: DateTime + authFailedAt: DateTime + handleAliases: [String!] + scopes: [String!] + lastSignedInAt: DateTime + userWorkspaceId: UUID! + createdAt: DateTime! + updatedAt: DateTime! + connectionParameters: PublicImapSmtpCaldavConnectionParameters +} + type SendEmailOutput { success: Boolean! error: String @@ -3208,6 +3236,7 @@ type Query { myMessageFolders(messageChannelId: UUID): [MessageFolder!]! myMessageChannels(connectedAccountId: UUID): [MessageChannel!]! myConnectedAccounts: [ConnectedAccountDTO!]! + connectedAccountById(id: UUID!): ConnectedAccountPublicDTO connectedAccounts: [ConnectedAccountDTO!]! myCalendarChannels(connectedAccountId: UUID): [CalendarChannel!]! webhooks: [Webhook!]! diff --git a/packages/twenty-client-sdk/src/metadata/generated/schema.ts b/packages/twenty-client-sdk/src/metadata/generated/schema.ts index 96d9cf70c77..618dce935b4 100644 --- a/packages/twenty-client-sdk/src/metadata/generated/schema.ts +++ b/packages/twenty-client-sdk/src/metadata/generated/schema.ts @@ -2449,6 +2449,37 @@ export interface ConnectedAccountDTO { __typename: 'ConnectedAccountDTO' } +export interface PublicConnectionParametersOutput { + host: Scalars['String'] + port: Scalars['Float'] + username?: Scalars['String'] + secure?: Scalars['Boolean'] + __typename: 'PublicConnectionParametersOutput' +} + +export interface PublicImapSmtpCaldavConnectionParameters { + IMAP?: PublicConnectionParametersOutput + SMTP?: PublicConnectionParametersOutput + CALDAV?: PublicConnectionParametersOutput + __typename: 'PublicImapSmtpCaldavConnectionParameters' +} + +export interface ConnectedAccountPublicDTO { + id: Scalars['UUID'] + handle: Scalars['String'] + provider: Scalars['String'] + lastCredentialsRefreshedAt?: Scalars['DateTime'] + authFailedAt?: Scalars['DateTime'] + handleAliases?: Scalars['String'][] + scopes?: Scalars['String'][] + lastSignedInAt?: Scalars['DateTime'] + userWorkspaceId: Scalars['UUID'] + createdAt: Scalars['DateTime'] + updatedAt: Scalars['DateTime'] + connectionParameters?: PublicImapSmtpCaldavConnectionParameters + __typename: 'ConnectedAccountPublicDTO' +} + export interface SendEmailOutput { success: Scalars['Boolean'] error?: Scalars['String'] @@ -2775,6 +2806,7 @@ export interface Query { myMessageFolders: MessageFolder[] myMessageChannels: MessageChannel[] myConnectedAccounts: ConnectedAccountDTO[] + connectedAccountById?: ConnectedAccountPublicDTO connectedAccounts: ConnectedAccountDTO[] myCalendarChannels: CalendarChannel[] webhooks: Webhook[] @@ -5681,6 +5713,40 @@ export interface ConnectedAccountDTOGenqlSelection{ __scalar?: boolean | number } +export interface PublicConnectionParametersOutputGenqlSelection{ + host?: boolean | number + port?: boolean | number + username?: boolean | number + secure?: boolean | number + __typename?: boolean | number + __scalar?: boolean | number +} + +export interface PublicImapSmtpCaldavConnectionParametersGenqlSelection{ + IMAP?: PublicConnectionParametersOutputGenqlSelection + SMTP?: PublicConnectionParametersOutputGenqlSelection + CALDAV?: PublicConnectionParametersOutputGenqlSelection + __typename?: boolean | number + __scalar?: boolean | number +} + +export interface ConnectedAccountPublicDTOGenqlSelection{ + id?: boolean | number + handle?: boolean | number + provider?: boolean | number + lastCredentialsRefreshedAt?: boolean | number + authFailedAt?: boolean | number + handleAliases?: boolean | number + scopes?: boolean | number + lastSignedInAt?: boolean | number + userWorkspaceId?: boolean | number + createdAt?: boolean | number + updatedAt?: boolean | number + connectionParameters?: PublicImapSmtpCaldavConnectionParametersGenqlSelection + __typename?: boolean | number + __scalar?: boolean | number +} + export interface SendEmailOutputGenqlSelection{ success?: boolean | number error?: boolean | number @@ -6023,6 +6089,7 @@ export interface QueryGenqlSelection{ myMessageFolders?: (MessageFolderGenqlSelection & { __args?: {messageChannelId?: (Scalars['UUID'] | null)} }) myMessageChannels?: (MessageChannelGenqlSelection & { __args?: {connectedAccountId?: (Scalars['UUID'] | null)} }) myConnectedAccounts?: ConnectedAccountDTOGenqlSelection + connectedAccountById?: (ConnectedAccountPublicDTOGenqlSelection & { __args: {id: Scalars['UUID']} }) connectedAccounts?: ConnectedAccountDTOGenqlSelection myCalendarChannels?: (CalendarChannelGenqlSelection & { __args?: {connectedAccountId?: (Scalars['UUID'] | null)} }) webhooks?: WebhookGenqlSelection @@ -8589,6 +8656,30 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null + const PublicConnectionParametersOutput_possibleTypes: string[] = ['PublicConnectionParametersOutput'] + export const isPublicConnectionParametersOutput = (obj?: { __typename?: any } | null): obj is PublicConnectionParametersOutput => { + if (!obj?.__typename) throw new Error('__typename is missing in "isPublicConnectionParametersOutput"') + return PublicConnectionParametersOutput_possibleTypes.includes(obj.__typename) + } + + + + const PublicImapSmtpCaldavConnectionParameters_possibleTypes: string[] = ['PublicImapSmtpCaldavConnectionParameters'] + export const isPublicImapSmtpCaldavConnectionParameters = (obj?: { __typename?: any } | null): obj is PublicImapSmtpCaldavConnectionParameters => { + if (!obj?.__typename) throw new Error('__typename is missing in "isPublicImapSmtpCaldavConnectionParameters"') + return PublicImapSmtpCaldavConnectionParameters_possibleTypes.includes(obj.__typename) + } + + + + const ConnectedAccountPublicDTO_possibleTypes: string[] = ['ConnectedAccountPublicDTO'] + export const isConnectedAccountPublicDTO = (obj?: { __typename?: any } | null): obj is ConnectedAccountPublicDTO => { + if (!obj?.__typename) throw new Error('__typename is missing in "isConnectedAccountPublicDTO"') + return ConnectedAccountPublicDTO_possibleTypes.includes(obj.__typename) + } + + + const SendEmailOutput_possibleTypes: string[] = ['SendEmailOutput'] export const isSendEmailOutput = (obj?: { __typename?: any } | null): obj is SendEmailOutput => { if (!obj?.__typename) throw new Error('__typename is missing in "isSendEmailOutput"') diff --git a/packages/twenty-client-sdk/src/metadata/generated/types.ts b/packages/twenty-client-sdk/src/metadata/generated/types.ts index 71d0deec72c..b445d14b2a7 100644 --- a/packages/twenty-client-sdk/src/metadata/generated/types.ts +++ b/packages/twenty-client-sdk/src/metadata/generated/types.ts @@ -67,30 +67,30 @@ export default { 286, 296, 297, - 330, - 331, - 332, 333, + 334, 335, 336, - 337, 338, 339, 340, 341, + 342, 343, - 345, - 353, - 359, - 360, - 361, + 344, + 346, + 348, + 356, + 362, 363, - 370, - 377, - 408, - 488, - 493, - 494 + 364, + 366, + 373, + 380, + 411, + 491, + 496, + 497 ], "types": { "BillingProductDTO": { @@ -5528,6 +5528,78 @@ export default { 1 ] }, + "PublicConnectionParametersOutput": { + "host": [ + 1 + ], + "port": [ + 11 + ], + "username": [ + 1 + ], + "secure": [ + 6 + ], + "__typename": [ + 1 + ] + }, + "PublicImapSmtpCaldavConnectionParameters": { + "IMAP": [ + 313 + ], + "SMTP": [ + 313 + ], + "CALDAV": [ + 313 + ], + "__typename": [ + 1 + ] + }, + "ConnectedAccountPublicDTO": { + "id": [ + 3 + ], + "handle": [ + 1 + ], + "provider": [ + 1 + ], + "lastCredentialsRefreshedAt": [ + 4 + ], + "authFailedAt": [ + 4 + ], + "handleAliases": [ + 1 + ], + "scopes": [ + 1 + ], + "lastSignedInAt": [ + 4 + ], + "userWorkspaceId": [ + 3 + ], + "createdAt": [ + 4 + ], + "updatedAt": [ + 4 + ], + "connectionParameters": [ + 314 + ], + "__typename": [ + 1 + ] + }, "SendEmailOutput": { "success": [ 6 @@ -5578,13 +5650,13 @@ export default { }, "EventLogQueryResult": { "records": [ - 314 + 317 ], "totalCount": [ 21 ], "pageInfo": [ - 315 + 318 ], "__typename": [ 1 @@ -5711,7 +5783,7 @@ export default { }, "AISystemPromptPreview": { "sections": [ - 320 + 323 ], "estimatedTokenCount": [ 21 @@ -5758,7 +5830,7 @@ export default { }, "AgentChatThreadEdge": { "node": [ - 318 + 321 ], "cursor": [ 40 @@ -5772,7 +5844,7 @@ export default { 235 ], "edges": [ - 325 + 328 ], "__typename": [ 1 @@ -5809,10 +5881,10 @@ export default { 3 ], "evaluations": [ - 327 + 330 ], "messages": [ - 319 + 322 ], "createdAt": [ 4 @@ -5829,19 +5901,19 @@ export default { 1 ], "syncStatus": [ - 330 + 333 ], "syncStage": [ - 331 + 334 ], "visibility": [ - 332 + 335 ], "isContactAutoCreationEnabled": [ 6 ], "contactAutoCreationPolicy": [ - 333 + 336 ], "isSyncEnabled": [ 6 @@ -5877,22 +5949,22 @@ export default { 3 ], "visibility": [ - 335 + 338 ], "handle": [ 1 ], "type": [ - 336 + 339 ], "isContactAutoCreationEnabled": [ 6 ], "contactAutoCreationPolicy": [ - 337 + 340 ], "messageFolderImportPolicy": [ - 338 + 341 ], "excludeNonProfessionalEmails": [ 6 @@ -5901,7 +5973,7 @@ export default { 6 ], "pendingGroupEmailsAction": [ - 339 + 342 ], "isSyncEnabled": [ 6 @@ -5910,10 +5982,10 @@ export default { 4 ], "syncStatus": [ - 340 + 343 ], "syncStage": [ - 341 + 344 ], "syncStageStartedAt": [ 4 @@ -5964,7 +6036,7 @@ export default { 1 ], "pendingSyncAction": [ - 343 + 346 ], "messageChannelId": [ 3 @@ -5982,7 +6054,7 @@ export default { "MessageFolderPendingSyncAction": {}, "CollectionHash": { "collectionName": [ - 345 + 348 ], "hash": [ 1 @@ -6049,13 +6121,13 @@ export default { }, "MinimalMetadata": { "objectMetadataItems": [ - 346 + 349 ], "views": [ - 347 + 350 ], "collectionHashes": [ - 344 + 347 ], "__typename": [ 1 @@ -6221,7 +6293,7 @@ export default { 2, { "input": [ - 351, + 354, "GetApiKeyInput!" ] } @@ -6325,7 +6397,7 @@ export default { 32, { "input": [ - 352, + 355, "LogicFunctionIdInput!" ] } @@ -6337,7 +6409,7 @@ export default { 15, { "input": [ - 352, + 355, "LogicFunctionIdInput!" ] } @@ -6346,7 +6418,7 @@ export default { 1, { "input": [ - 352, + 355, "LogicFunctionIdInput!" ] } @@ -6429,7 +6501,7 @@ export default { 25, { "input": [ - 354, + 357, "AgentIdInput!" ] } @@ -6489,7 +6561,7 @@ export default { } ], "myMessageFolders": [ - 342, + 345, { "messageChannelId": [ 3 @@ -6497,7 +6569,7 @@ export default { } ], "myMessageChannels": [ - 334, + 337, { "connectedAccountId": [ 3 @@ -6507,11 +6579,20 @@ export default { "myConnectedAccounts": [ 312 ], + "connectedAccountById": [ + 315, + { + "id": [ + 3, + "UUID!" + ] + } + ], "connectedAccounts": [ 312 ], "myCalendarChannels": [ - 329, + 332, { "connectedAccountId": [ 3 @@ -6519,10 +6600,10 @@ export default { } ], "webhooks": [ - 349 + 352 ], "webhook": [ - 349, + 352, { "id": [ 3, @@ -6531,10 +6612,10 @@ export default { } ], "minimalMetadata": [ - 348 + 351 ], "chatThread": [ - 318, + 321, { "id": [ 3, @@ -6543,15 +6624,6 @@ export default { } ], "chatMessages": [ - 319, - { - "threadId": [ - 3, - "UUID!" - ] - } - ], - "chatStreamCatchupChunks": [ 322, { "threadId": [ @@ -6560,14 +6632,23 @@ export default { ] } ], + "chatStreamCatchupChunks": [ + 325, + { + "threadId": [ + 3, + "UUID!" + ] + } + ], "getAISystemPromptPreview": [ - 321 + 324 ], "skills": [ - 317 + 320 ], "skill": [ - 317, + 320, { "id": [ 3, @@ -6576,24 +6657,24 @@ export default { } ], "chatThreads": [ - 326, + 329, { "paging": [ 39, "CursorPaging!" ], "filter": [ - 355, + 358, "AgentChatThreadFilter!" ], "sorting": [ - 358, + 361, "[AgentChatThreadSort!]!" ] } ], "agentTurns": [ - 328, + 331, { "agentId": [ 3, @@ -6602,10 +6683,10 @@ export default { } ], "eventLogs": [ - 316, + 319, { "input": [ - 362, + 365, "EventLogQueryInput!" ] } @@ -6614,7 +6695,7 @@ export default { 310, { "input": [ - 366, + 369, "PieChartDataInput!" ] } @@ -6623,7 +6704,7 @@ export default { 308, { "input": [ - 367, + 370, "LineChartDataInput!" ] } @@ -6632,7 +6713,7 @@ export default { 305, { "input": [ - 368, + 371, "BarChartDataInput!" ] } @@ -6888,7 +6969,7 @@ export default { 276, { "input": [ - 369 + 372 ] } ], @@ -6941,7 +7022,7 @@ export default { }, "LogicFunctionIdInput": { "id": [ - 353 + 356 ], "__typename": [ 1 @@ -6958,16 +7039,16 @@ export default { }, "AgentChatThreadFilter": { "and": [ - 355 + 358 ], "or": [ - 355 + 358 ], "id": [ 42 ], "updatedAt": [ - 356 + 359 ], "__typename": [ 1 @@ -7005,10 +7086,10 @@ export default { 4 ], "between": [ - 357 + 360 ], "notBetween": [ - 357 + 360 ], "__typename": [ 1 @@ -7027,13 +7108,13 @@ export default { }, "AgentChatThreadSort": { "field": [ - 359 + 362 ], "direction": [ - 360 + 363 ], "nulls": [ - 361 + 364 ], "__typename": [ 1 @@ -7044,10 +7125,10 @@ export default { "SortNulls": {}, "EventLogQueryInput": { "table": [ - 363 + 366 ], "filters": [ - 364 + 367 ], "first": [ 21 @@ -7068,7 +7149,7 @@ export default { 1 ], "dateRange": [ - 365 + 368 ], "recordId": [ 1 @@ -7135,7 +7216,7 @@ export default { 1 ], "operationTypes": [ - 370 + 373 ], "__typename": [ 1 @@ -7147,7 +7228,7 @@ export default { 6, { "input": [ - 372, + 375, "AddQuerySubscriptionInput!" ] } @@ -7156,7 +7237,7 @@ export default { 6, { "input": [ - 373, + 376, "RemoveQueryFromEventStreamInput!" ] } @@ -7165,7 +7246,7 @@ export default { 146, { "inputs": [ - 374, + 377, "[CreateNavigationMenuItemInput!]!" ] } @@ -7174,7 +7255,7 @@ export default { 146, { "input": [ - 374, + 377, "CreateNavigationMenuItemInput!" ] } @@ -7183,7 +7264,7 @@ export default { 146, { "inputs": [ - 375, + 378, "[UpdateOneNavigationMenuItemInput!]!" ] } @@ -7192,7 +7273,7 @@ export default { 146, { "input": [ - 375, + 378, "UpdateOneNavigationMenuItemInput!" ] } @@ -7219,7 +7300,7 @@ export default { 142, { "file": [ - 377, + 380, "Upload!" ] } @@ -7228,7 +7309,7 @@ export default { 142, { "file": [ - 377, + 380, "Upload!" ] } @@ -7237,7 +7318,7 @@ export default { 142, { "file": [ - 377, + 380, "Upload!" ] } @@ -7246,7 +7327,7 @@ export default { 142, { "file": [ - 377, + 380, "Upload!" ] } @@ -7255,7 +7336,7 @@ export default { 142, { "file": [ - 377, + 380, "Upload!" ], "fieldMetadataId": [ @@ -7268,7 +7349,7 @@ export default { 142, { "file": [ - 377, + 380, "Upload!" ], "fieldMetadataUniversalIdentifier": [ @@ -7281,7 +7362,7 @@ export default { 52, { "input": [ - 378, + 381, "CreateViewFilterGroupInput!" ] } @@ -7294,7 +7375,7 @@ export default { "String!" ], "input": [ - 379, + 382, "UpdateViewFilterGroupInput!" ] } @@ -7321,7 +7402,7 @@ export default { 54, { "input": [ - 380, + 383, "CreateViewFilterInput!" ] } @@ -7330,7 +7411,7 @@ export default { 54, { "input": [ - 381, + 384, "UpdateViewFilterInput!" ] } @@ -7339,7 +7420,7 @@ export default { 54, { "input": [ - 383, + 386, "DeleteViewFilterInput!" ] } @@ -7348,7 +7429,7 @@ export default { 54, { "input": [ - 384, + 387, "DestroyViewFilterInput!" ] } @@ -7357,7 +7438,7 @@ export default { 60, { "input": [ - 385, + 388, "CreateViewInput!" ] } @@ -7370,7 +7451,7 @@ export default { "String!" ], "input": [ - 386, + 389, "UpdateViewInput!" ] } @@ -7397,7 +7478,7 @@ export default { 57, { "input": [ - 387, + 390, "CreateViewSortInput!" ] } @@ -7406,7 +7487,7 @@ export default { 57, { "input": [ - 388, + 391, "UpdateViewSortInput!" ] } @@ -7415,7 +7496,7 @@ export default { 6, { "input": [ - 390, + 393, "DeleteViewSortInput!" ] } @@ -7424,7 +7505,7 @@ export default { 6, { "input": [ - 391, + 394, "DestroyViewSortInput!" ] } @@ -7433,7 +7514,7 @@ export default { 50, { "input": [ - 392, + 395, "UpdateViewFieldInput!" ] } @@ -7442,7 +7523,7 @@ export default { 50, { "input": [ - 394, + 397, "CreateViewFieldInput!" ] } @@ -7451,7 +7532,7 @@ export default { 50, { "inputs": [ - 394, + 397, "[CreateViewFieldInput!]!" ] } @@ -7460,7 +7541,7 @@ export default { 50, { "input": [ - 395, + 398, "DeleteViewFieldInput!" ] } @@ -7469,7 +7550,7 @@ export default { 50, { "input": [ - 396, + 399, "DestroyViewFieldInput!" ] } @@ -7478,7 +7559,7 @@ export default { 59, { "input": [ - 397, + 400, "UpdateViewFieldGroupInput!" ] } @@ -7487,7 +7568,7 @@ export default { 59, { "input": [ - 399, + 402, "CreateViewFieldGroupInput!" ] } @@ -7496,7 +7577,7 @@ export default { 59, { "inputs": [ - 399, + 402, "[CreateViewFieldGroupInput!]!" ] } @@ -7505,7 +7586,7 @@ export default { 59, { "input": [ - 400, + 403, "DeleteViewFieldGroupInput!" ] } @@ -7514,7 +7595,7 @@ export default { 59, { "input": [ - 401, + 404, "DestroyViewFieldGroupInput!" ] } @@ -7523,7 +7604,7 @@ export default { 60, { "input": [ - 402, + 405, "UpsertFieldsWidgetInput!" ] } @@ -7532,7 +7613,7 @@ export default { 2, { "input": [ - 405, + 408, "CreateApiKeyInput!" ] } @@ -7541,7 +7622,7 @@ export default { 2, { "input": [ - 406, + 409, "UpdateApiKeyInput!" ] } @@ -7550,7 +7631,7 @@ export default { 2, { "input": [ - 407, + 410, "RevokeApiKeyInput!" ] } @@ -7592,7 +7673,7 @@ export default { 116, { "type": [ - 408, + 411, "AnalyticsType!" ], "name": [ @@ -7705,7 +7786,7 @@ export default { 141, { "input": [ - 409, + 412, "CreateApprovedAccessDomainInput!" ] } @@ -7714,7 +7795,7 @@ export default { 6, { "input": [ - 410, + 413, "DeleteApprovedAccessDomainInput!" ] } @@ -7723,7 +7804,7 @@ export default { 141, { "input": [ - 411, + 414, "ValidateApprovedAccessDomainInput!" ] } @@ -7732,7 +7813,7 @@ export default { 113, { "input": [ - 412, + 415, "CreatePageLayoutTabInput!" ] } @@ -7745,7 +7826,7 @@ export default { "String!" ], "input": [ - 413, + 416, "UpdatePageLayoutTabInput!" ] } @@ -7763,7 +7844,7 @@ export default { 114, { "input": [ - 414, + 417, "CreatePageLayoutInput!" ] } @@ -7776,7 +7857,7 @@ export default { "String!" ], "input": [ - 415, + 418, "UpdatePageLayoutInput!" ] } @@ -7798,7 +7879,7 @@ export default { "String!" ], "input": [ - 416, + 419, "UpdatePageLayoutWithTabsInput!" ] } @@ -7825,7 +7906,7 @@ export default { 75, { "input": [ - 420, + 423, "CreatePageLayoutWidgetInput!" ] } @@ -7838,7 +7919,7 @@ export default { "String!" ], "input": [ - 421, + 424, "UpdatePageLayoutWidgetInput!" ] } @@ -7856,7 +7937,7 @@ export default { 32, { "input": [ - 352, + 355, "LogicFunctionIdInput!" ] } @@ -7865,7 +7946,7 @@ export default { 32, { "input": [ - 422, + 425, "CreateLogicFunctionFromSourceInput!" ] } @@ -7874,7 +7955,7 @@ export default { 155, { "input": [ - 423, + 426, "ExecuteOneLogicFunctionInput!" ] } @@ -7883,7 +7964,7 @@ export default { 6, { "input": [ - 424, + 427, "UpdateLogicFunctionFromSourceInput!" ] } @@ -7892,7 +7973,7 @@ export default { 295, { "input": [ - 426, + 429, "CreateCommandMenuItemInput!" ] } @@ -7901,7 +7982,7 @@ export default { 295, { "input": [ - 427, + 430, "UpdateCommandMenuItemInput!" ] } @@ -7919,7 +8000,7 @@ export default { 252, { "input": [ - 428, + 431, "CreateFrontComponentInput!" ] } @@ -7928,7 +8009,7 @@ export default { 252, { "input": [ - 429, + 432, "UpdateFrontComponentInput!" ] } @@ -7946,7 +8027,7 @@ export default { 46, { "input": [ - 431, + 434, "CreateOneObjectInput!" ] } @@ -7955,7 +8036,7 @@ export default { 46, { "input": [ - 433, + 436, "DeleteOneObjectInput!" ] } @@ -7964,7 +8045,7 @@ export default { 46, { "input": [ - 434, + 437, "UpdateOneObjectInput!" ] } @@ -7973,7 +8054,7 @@ export default { 25, { "input": [ - 436, + 439, "CreateAgentInput!" ] } @@ -7982,7 +8063,7 @@ export default { 25, { "input": [ - 437, + 440, "UpdateAgentInput!" ] } @@ -7991,7 +8072,7 @@ export default { 25, { "input": [ - 354, + 357, "AgentIdInput!" ] } @@ -8013,7 +8094,7 @@ export default { 29, { "createRoleInput": [ - 438, + 441, "CreateRoleInput!" ] } @@ -8022,7 +8103,7 @@ export default { 29, { "updateRoleInput": [ - 439, + 442, "UpdateRoleInput!" ] } @@ -8040,7 +8121,7 @@ export default { 16, { "upsertObjectPermissionsInput": [ - 441, + 444, "UpsertObjectPermissionsInput!" ] } @@ -8049,7 +8130,7 @@ export default { 27, { "upsertPermissionFlagsInput": [ - 443, + 446, "UpsertPermissionFlagsInput!" ] } @@ -8058,7 +8139,7 @@ export default { 26, { "upsertFieldPermissionsInput": [ - 444, + 447, "UpsertFieldPermissionsInput!" ] } @@ -8067,7 +8148,7 @@ export default { 246, { "input": [ - 446, + 449, "UpsertRowLevelPermissionPredicatesInput!" ] } @@ -8098,7 +8179,7 @@ export default { 34, { "input": [ - 449, + 452, "CreateOneFieldMetadataInput!" ] } @@ -8107,7 +8188,7 @@ export default { 34, { "input": [ - 451, + 454, "UpdateOneFieldMetadataInput!" ] } @@ -8116,7 +8197,7 @@ export default { 34, { "input": [ - 453, + 456, "DeleteOneFieldInput!" ] } @@ -8125,7 +8206,7 @@ export default { 56, { "input": [ - 454, + 457, "CreateViewGroupInput!" ] } @@ -8134,7 +8215,7 @@ export default { 56, { "inputs": [ - 454, + 457, "[CreateViewGroupInput!]!" ] } @@ -8143,7 +8224,7 @@ export default { 56, { "input": [ - 455, + 458, "UpdateViewGroupInput!" ] } @@ -8152,7 +8233,7 @@ export default { 56, { "inputs": [ - 455, + 458, "[UpdateViewGroupInput!]!" ] } @@ -8161,7 +8242,7 @@ export default { 56, { "input": [ - 457, + 460, "DeleteViewGroupInput!" ] } @@ -8170,34 +8251,34 @@ export default { 56, { "input": [ - 458, + 461, "DestroyViewGroupInput!" ] } ], "updateMessageFolder": [ - 342, + 345, { "input": [ - 459, + 462, "UpdateMessageFolderInput!" ] } ], "updateMessageFolders": [ - 342, + 345, { "input": [ - 461, + 464, "UpdateMessageFoldersInput!" ] } ], "updateMessageChannel": [ - 334, + 337, { "input": [ - 462, + 465, "UpdateMessageChannelInput!" ] } @@ -8212,34 +8293,34 @@ export default { } ], "updateCalendarChannel": [ - 329, + 332, { "input": [ - 464, + 467, "UpdateCalendarChannelInput!" ] } ], "createWebhook": [ - 349, + 352, { "input": [ - 466, + 469, "CreateWebhookInput!" ] } ], "updateWebhook": [ - 349, + 352, { "input": [ - 467, + 470, "UpdateWebhookInput!" ] } ], "deleteWebhook": [ - 349, + 352, { "id": [ 3, @@ -8248,10 +8329,10 @@ export default { } ], "createChatThread": [ - 318 + 321 ], "sendChatMessage": [ - 323, + 326, { "threadId": [ 3, @@ -8292,25 +8373,25 @@ export default { } ], "createSkill": [ - 317, + 320, { "input": [ - 469, + 472, "CreateSkillInput!" ] } ], "updateSkill": [ - 317, + 320, { "input": [ - 470, + 473, "UpdateSkillInput!" ] } ], "deleteSkill": [ - 317, + 320, { "id": [ 3, @@ -8319,7 +8400,7 @@ export default { } ], "activateSkill": [ - 317, + 320, { "id": [ 3, @@ -8328,7 +8409,7 @@ export default { } ], "deactivateSkill": [ - 317, + 320, { "id": [ 3, @@ -8337,7 +8418,7 @@ export default { } ], "evaluateAgentTurn": [ - 327, + 330, { "turnId": [ 3, @@ -8346,7 +8427,7 @@ export default { } ], "runEvaluationInput": [ - 328, + 331, { "agentId": [ 3, @@ -8371,7 +8452,7 @@ export default { 261, { "input": [ - 471, + 474, "GetAuthorizationUrlForSSOInput!" ] } @@ -8625,7 +8706,7 @@ export default { 217, { "input": [ - 472, + 475, "CreateApplicationRegistrationInput!" ] } @@ -8634,7 +8715,7 @@ export default { 7, { "input": [ - 473, + 476, "UpdateApplicationRegistrationInput!" ] } @@ -8661,7 +8742,7 @@ export default { 5, { "input": [ - 475, + 478, "CreateApplicationRegistrationVariableInput!" ] } @@ -8670,7 +8751,7 @@ export default { 5, { "input": [ - 476, + 479, "UpdateApplicationRegistrationVariableInput!" ] } @@ -8688,7 +8769,7 @@ export default { 7, { "file": [ - 377, + 380, "Upload!" ], "universalIdentifier": [ @@ -8784,7 +8865,7 @@ export default { 66, { "data": [ - 478, + 481, "ActivateWorkspaceInput!" ] } @@ -8793,7 +8874,7 @@ export default { 66, { "data": [ - 479, + 482, "UpdateWorkspaceInput!" ] } @@ -8808,7 +8889,7 @@ export default { 225, { "input": [ - 480, + 483, "SetupOIDCSsoInput!" ] } @@ -8817,7 +8898,7 @@ export default { 225, { "input": [ - 481, + 484, "SetupSAMLSsoInput!" ] } @@ -8826,7 +8907,7 @@ export default { 221, { "input": [ - 482, + 485, "DeleteSsoInput!" ] } @@ -8835,7 +8916,7 @@ export default { 222, { "input": [ - 483, + 486, "EditSsoInput!" ] } @@ -8854,10 +8935,10 @@ export default { } ], "sendEmail": [ - 313, + 316, { "input": [ - 484, + 487, "SendEmailInput!" ] } @@ -8883,7 +8964,7 @@ export default { "String!" ], "connectionParameters": [ - 485, + 488, "EmailAccountConnectionParameters!" ], "id": [ @@ -8895,7 +8976,7 @@ export default { 200, { "input": [ - 487, + 490, "UpdateLabPublicFeatureFlagInput!" ] } @@ -8956,7 +9037,7 @@ export default { 6, { "role": [ - 488, + 491, "AiModelRole!" ], "modelId": [ @@ -9161,7 +9242,7 @@ export default { 68, { "input": [ - 489, + 492, "CreateOneAppTokenInput!" ] } @@ -9197,7 +9278,7 @@ export default { 6, { "workspaceMigration": [ - 491, + 494, "WorkspaceMigrationInput!" ] } @@ -9263,7 +9344,7 @@ export default { 279, { "file": [ - 377, + 380, "Upload!" ], "applicationUniversalIdentifier": [ @@ -9271,7 +9352,7 @@ export default { "String!" ], "fileFolder": [ - 494, + 497, "FileFolder!" ], "filePath": [ @@ -9377,7 +9458,7 @@ export default { 3 ], "update": [ - 376 + 379 ], "__typename": [ 1 @@ -9481,7 +9562,7 @@ export default { 3 ], "update": [ - 382 + 385 ], "__typename": [ 1 @@ -9654,7 +9735,7 @@ export default { 3 ], "update": [ - 389 + 392 ], "__typename": [ 1 @@ -9689,7 +9770,7 @@ export default { 3 ], "update": [ - 393 + 396 ], "__typename": [ 1 @@ -9765,7 +9846,7 @@ export default { 3 ], "update": [ - 398 + 401 ], "__typename": [ 1 @@ -9829,10 +9910,10 @@ export default { 3 ], "groups": [ - 403 + 406 ], "fields": [ - 404 + 407 ], "__typename": [ 1 @@ -9852,7 +9933,7 @@ export default { 6 ], "fields": [ - 404 + 407 ], "__typename": [ 1 @@ -10021,7 +10102,7 @@ export default { 3 ], "tabs": [ - 417 + 420 ], "__typename": [ 1 @@ -10044,7 +10125,7 @@ export default { 79 ], "widgets": [ - 418 + 421 ], "__typename": [ 1 @@ -10067,7 +10148,7 @@ export default { 3 ], "gridPosition": [ - 419 + 422 ], "position": [ 15 @@ -10113,7 +10194,7 @@ export default { 3 ], "gridPosition": [ - 419 + 422 ], "position": [ 15 @@ -10136,7 +10217,7 @@ export default { 3 ], "gridPosition": [ - 419 + 422 ], "position": [ 15 @@ -10205,7 +10286,7 @@ export default { 3 ], "update": [ - 425 + 428 ], "__typename": [ 1 @@ -10359,7 +10440,7 @@ export default { 3 ], "update": [ - 430 + 433 ], "__typename": [ 1 @@ -10378,7 +10459,7 @@ export default { }, "CreateOneObjectInput": { "object": [ - 432 + 435 ], "__typename": [ 1 @@ -10438,7 +10519,7 @@ export default { }, "UpdateOneObjectInput": { "update": [ - 435 + 438 ], "id": [ 3 @@ -10610,7 +10691,7 @@ export default { }, "UpdateRoleInput": { "update": [ - 440 + 443 ], "id": [ 3 @@ -10665,7 +10746,7 @@ export default { 3 ], "objectPermissions": [ - 442 + 445 ], "__typename": [ 1 @@ -10707,7 +10788,7 @@ export default { 3 ], "fieldPermissions": [ - 445 + 448 ], "__typename": [ 1 @@ -10738,10 +10819,10 @@ export default { 3 ], "predicates": [ - 447 + 450 ], "predicateGroups": [ - 448 + 451 ], "__typename": [ 1 @@ -10801,7 +10882,7 @@ export default { }, "CreateOneFieldMetadataInput": { "field": [ - 450 + 453 ], "__typename": [ 1 @@ -10874,7 +10955,7 @@ export default { 3 ], "update": [ - 452 + 455 ], "__typename": [ 1 @@ -10966,7 +11047,7 @@ export default { 3 ], "update": [ - 456 + 459 ], "__typename": [ 1 @@ -11010,7 +11091,7 @@ export default { 3 ], "update": [ - 460 + 463 ], "__typename": [ 1 @@ -11029,7 +11110,7 @@ export default { 3 ], "update": [ - 460 + 463 ], "__typename": [ 1 @@ -11040,7 +11121,7 @@ export default { 3 ], "update": [ - 463 + 466 ], "__typename": [ 1 @@ -11048,16 +11129,16 @@ export default { }, "UpdateMessageChannelInputUpdates": { "visibility": [ - 335 + 338 ], "isContactAutoCreationEnabled": [ 6 ], "contactAutoCreationPolicy": [ - 337 + 340 ], "messageFolderImportPolicy": [ - 338 + 341 ], "isSyncEnabled": [ 6 @@ -11077,7 +11158,7 @@ export default { 3 ], "update": [ - 465 + 468 ], "__typename": [ 1 @@ -11085,13 +11166,13 @@ export default { }, "UpdateCalendarChannelInputUpdates": { "visibility": [ - 332 + 335 ], "isContactAutoCreationEnabled": [ 6 ], "contactAutoCreationPolicy": [ - 333 + 336 ], "isSyncEnabled": [ 6 @@ -11125,7 +11206,7 @@ export default { 3 ], "update": [ - 468 + 471 ], "__typename": [ 1 @@ -11230,7 +11311,7 @@ export default { 1 ], "update": [ - 474 + 477 ], "__typename": [ 1 @@ -11278,7 +11359,7 @@ export default { 1 ], "update": [ - 477 + 480 ], "__typename": [ 1 @@ -11464,13 +11545,13 @@ export default { }, "EmailAccountConnectionParameters": { "IMAP": [ - 486 + 489 ], "SMTP": [ - 486 + 489 ], "CALDAV": [ - 486 + 489 ], "__typename": [ 1 @@ -11510,7 +11591,7 @@ export default { "AiModelRole": {}, "CreateOneAppTokenInput": { "appToken": [ - 490 + 493 ], "__typename": [ 1 @@ -11526,7 +11607,7 @@ export default { }, "WorkspaceMigrationInput": { "actions": [ - 492 + 495 ], "__typename": [ 1 @@ -11534,10 +11615,10 @@ export default { }, "WorkspaceMigrationDeleteActionInput": { "type": [ - 493 + 496 ], "metadataName": [ - 345 + 348 ], "universalIdentifier": [ 1 @@ -11562,13 +11643,13 @@ export default { 253, { "input": [ - 496, + 499, "LogicFunctionLogsInput!" ] } ], "onAgentChatEvent": [ - 324, + 327, { "threadId": [ 3, diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index 8732c27c784..90ce28ccdca 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -1035,6 +1035,22 @@ export type ConnectedAccountDto = { userWorkspaceId: Scalars['UUID']; }; +export type ConnectedAccountPublicDto = { + __typename?: 'ConnectedAccountPublicDTO'; + authFailedAt?: Maybe; + connectionParameters?: Maybe; + createdAt: Scalars['DateTime']; + handle: Scalars['String']; + handleAliases?: Maybe>; + id: Scalars['UUID']; + lastCredentialsRefreshedAt?: Maybe; + lastSignedInAt?: Maybe; + provider: Scalars['String']; + scopes?: Maybe>; + updatedAt: Scalars['DateTime']; + userWorkspaceId: Scalars['UUID']; +}; + export type ConnectedImapSmtpCaldavAccount = { __typename?: 'ConnectedImapSmtpCaldavAccount'; connectionParameters?: Maybe; @@ -4223,6 +4239,14 @@ export type PublicApplicationRegistration = { websiteUrl?: Maybe; }; +export type PublicConnectionParametersOutput = { + __typename?: 'PublicConnectionParametersOutput'; + host: Scalars['String']; + port: Scalars['Float']; + secure?: Maybe; + username?: Maybe; +}; + export type PublicDomain = { __typename?: 'PublicDomain'; createdAt: Scalars['DateTime']; @@ -4244,6 +4268,13 @@ export type PublicFeatureFlagMetadata = { label: Scalars['String']; }; +export type PublicImapSmtpCaldavConnectionParameters = { + __typename?: 'PublicImapSmtpCaldavConnectionParameters'; + CALDAV?: Maybe; + IMAP?: Maybe; + SMTP?: Maybe; +}; + export type PublicWorkspaceData = { __typename?: 'PublicWorkspaceData'; authBypassProviders?: Maybe; @@ -4270,6 +4301,7 @@ export type Query = { checkWorkspaceInviteHashIsValid: WorkspaceInviteHashValid; commandMenuItem?: Maybe; commandMenuItems: Array; + connectedAccountById?: Maybe; connectedAccounts: Array; currentUser: User; currentWorkspace: Workspace; @@ -4434,6 +4466,11 @@ export type QueryCommandMenuItemArgs = { }; +export type QueryConnectedAccountByIdArgs = { + id: Scalars['UUID']; +}; + + export type QueryEnterpriseCheckoutSessionArgs = { billingInterval?: InputMaybe; }; @@ -7096,6 +7133,15 @@ export type UpdateMessageFoldersMutationVariables = Exact<{ export type UpdateMessageFoldersMutation = { __typename?: 'Mutation', updateMessageFolders: Array<{ __typename?: 'MessageFolder', id: string, isSynced: boolean }> }; +export type PublicConnectionParamsFragment = { __typename?: 'PublicConnectionParametersOutput', host: string, port: number, secure?: boolean | null, username?: string | null }; + +export type ConnectedAccountByIdQueryVariables = Exact<{ + id: Scalars['UUID']; +}>; + + +export type ConnectedAccountByIdQuery = { __typename?: 'Query', connectedAccountById?: { __typename?: 'ConnectedAccountPublicDTO', id: string, handle: string, provider: string, scopes?: Array | null, userWorkspaceId: string, connectionParameters?: { __typename?: 'PublicImapSmtpCaldavConnectionParameters', IMAP?: { __typename?: 'PublicConnectionParametersOutput', host: string, port: number, secure?: boolean | null, username?: string | null } | null, SMTP?: { __typename?: 'PublicConnectionParametersOutput', host: string, port: number, secure?: boolean | null, username?: string | null } | null, CALDAV?: { __typename?: 'PublicConnectionParametersOutput', host: string, port: number, secure?: boolean | null, username?: string | null } | null } | null } | null }; + export type GetConnectedImapSmtpCaldavAccountQueryVariables = Exact<{ id: Scalars['UUID']; }>; @@ -8281,6 +8327,7 @@ export const MarketplaceAppDetailFieldsFragmentDoc = {"kind":"Document","definit export const MarketplaceAppFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"MarketplaceAppFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"MarketplaceApp"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"author"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"sourcePackage"}},{"kind":"Field","name":{"kind":"Name","value":"isFeatured"}}]}}]} as unknown as DocumentNode; export const NavigationMenuItemFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"NavigationMenuItemFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"NavigationMenuItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"targetRecordId"}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"folderId"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"link"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode; export const NavigationMenuItemQueryFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"NavigationMenuItemQueryFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"NavigationMenuItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"NavigationMenuItemFields"}},{"kind":"Field","name":{"kind":"Name","value":"targetRecordIdentifier"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifier"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"NavigationMenuItemFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"NavigationMenuItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"targetRecordId"}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"folderId"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"link"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode; +export const PublicConnectionParamsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PublicConnectionParams"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PublicConnectionParametersOutput"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"host"}},{"kind":"Field","name":{"kind":"Name","value":"port"}},{"kind":"Field","name":{"kind":"Name","value":"secure"}},{"kind":"Field","name":{"kind":"Name","value":"username"}}]}}]} as unknown as DocumentNode; export const ApplicationRegistrationFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationRegistrationFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ApplicationRegistration"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"oAuthClientId"}},{"kind":"Field","name":{"kind":"Name","value":"oAuthRedirectUris"}},{"kind":"Field","name":{"kind":"Name","value":"oAuthScopes"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}},{"kind":"Field","name":{"kind":"Name","value":"sourcePackage"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"isListed"}},{"kind":"Field","name":{"kind":"Name","value":"isFeatured"}},{"kind":"Field","name":{"kind":"Name","value":"ownerWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode; export const BillingPriceLicensedFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingPriceLicensedFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingPriceLicensed"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stripePriceId"}},{"kind":"Field","name":{"kind":"Name","value":"unitAmount"}},{"kind":"Field","name":{"kind":"Name","value":"recurringInterval"}},{"kind":"Field","name":{"kind":"Name","value":"priceUsageType"}}]}}]} as unknown as DocumentNode; export const BillingPriceMeteredFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingPriceMeteredFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingPriceMetered"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"priceUsageType"}},{"kind":"Field","name":{"kind":"Name","value":"recurringInterval"}},{"kind":"Field","name":{"kind":"Name","value":"stripePriceId"}},{"kind":"Field","name":{"kind":"Name","value":"tiers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"flatAmount"}},{"kind":"Field","name":{"kind":"Name","value":"unitAmount"}},{"kind":"Field","name":{"kind":"Name","value":"upTo"}}]}}]}}]} as unknown as DocumentNode; @@ -8419,6 +8466,7 @@ export const UpdateCalendarChannelDocument = {"kind":"Document","definitions":[{ export const UpdateMessageChannelDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateMessageChannel"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateMessageChannelInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateMessageChannel"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"visibility"}},{"kind":"Field","name":{"kind":"Name","value":"contactAutoCreationPolicy"}},{"kind":"Field","name":{"kind":"Name","value":"excludeNonProfessionalEmails"}},{"kind":"Field","name":{"kind":"Name","value":"excludeGroupEmails"}},{"kind":"Field","name":{"kind":"Name","value":"messageFolderImportPolicy"}}]}}]}}]} as unknown as DocumentNode; export const UpdateMessageFolderDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateMessageFolder"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateMessageFolderInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateMessageFolder"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"isSynced"}}]}}]}}]} as unknown as DocumentNode; export const UpdateMessageFoldersDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateMessageFolders"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateMessageFoldersInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateMessageFolders"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"isSynced"}}]}}]}}]} as unknown as DocumentNode; +export const ConnectedAccountByIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ConnectedAccountById"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"connectedAccountById"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"handle"}},{"kind":"Field","name":{"kind":"Name","value":"provider"}},{"kind":"Field","name":{"kind":"Name","value":"scopes"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"connectionParameters"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"IMAP"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PublicConnectionParams"}}]}},{"kind":"Field","name":{"kind":"Name","value":"SMTP"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PublicConnectionParams"}}]}},{"kind":"Field","name":{"kind":"Name","value":"CALDAV"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PublicConnectionParams"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PublicConnectionParams"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PublicConnectionParametersOutput"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"host"}},{"kind":"Field","name":{"kind":"Name","value":"port"}},{"kind":"Field","name":{"kind":"Name","value":"secure"}},{"kind":"Field","name":{"kind":"Name","value":"username"}}]}}]} as unknown as DocumentNode; export const GetConnectedImapSmtpCaldavAccountDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetConnectedImapSmtpCaldavAccount"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getConnectedImapSmtpCaldavAccount"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"handle"}},{"kind":"Field","name":{"kind":"Name","value":"provider"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"connectionParameters"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"IMAP"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"host"}},{"kind":"Field","name":{"kind":"Name","value":"port"}},{"kind":"Field","name":{"kind":"Name","value":"secure"}},{"kind":"Field","name":{"kind":"Name","value":"username"}},{"kind":"Field","name":{"kind":"Name","value":"password"}}]}},{"kind":"Field","name":{"kind":"Name","value":"SMTP"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"host"}},{"kind":"Field","name":{"kind":"Name","value":"username"}},{"kind":"Field","name":{"kind":"Name","value":"port"}},{"kind":"Field","name":{"kind":"Name","value":"secure"}},{"kind":"Field","name":{"kind":"Name","value":"password"}}]}},{"kind":"Field","name":{"kind":"Name","value":"CALDAV"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"host"}},{"kind":"Field","name":{"kind":"Name","value":"port"}},{"kind":"Field","name":{"kind":"Name","value":"secure"}},{"kind":"Field","name":{"kind":"Name","value":"username"}},{"kind":"Field","name":{"kind":"Name","value":"password"}}]}}]}}]}}]}}]} as unknown as DocumentNode; export const MyCalendarChannelsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"MyCalendarChannels"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"connectedAccountId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"myCalendarChannels"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"connectedAccountId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"connectedAccountId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"handle"}},{"kind":"Field","name":{"kind":"Name","value":"visibility"}},{"kind":"Field","name":{"kind":"Name","value":"syncStatus"}},{"kind":"Field","name":{"kind":"Name","value":"syncStage"}},{"kind":"Field","name":{"kind":"Name","value":"syncStageStartedAt"}},{"kind":"Field","name":{"kind":"Name","value":"isContactAutoCreationEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"contactAutoCreationPolicy"}},{"kind":"Field","name":{"kind":"Name","value":"isSyncEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"connectedAccountId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; export const MyConnectedAccountsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"MyConnectedAccounts"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"myConnectedAccounts"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"handle"}},{"kind":"Field","name":{"kind":"Name","value":"provider"}},{"kind":"Field","name":{"kind":"Name","value":"authFailedAt"}},{"kind":"Field","name":{"kind":"Name","value":"scopes"}},{"kind":"Field","name":{"kind":"Name","value":"handleAliases"}},{"kind":"Field","name":{"kind":"Name","value":"lastSignedInAt"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"connectionParameters"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"IMAP"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"host"}},{"kind":"Field","name":{"kind":"Name","value":"port"}},{"kind":"Field","name":{"kind":"Name","value":"secure"}},{"kind":"Field","name":{"kind":"Name","value":"username"}},{"kind":"Field","name":{"kind":"Name","value":"password"}}]}},{"kind":"Field","name":{"kind":"Name","value":"SMTP"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"host"}},{"kind":"Field","name":{"kind":"Name","value":"port"}},{"kind":"Field","name":{"kind":"Name","value":"secure"}},{"kind":"Field","name":{"kind":"Name","value":"username"}},{"kind":"Field","name":{"kind":"Name","value":"password"}}]}},{"kind":"Field","name":{"kind":"Name","value":"CALDAV"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"host"}},{"kind":"Field","name":{"kind":"Name","value":"username"}},{"kind":"Field","name":{"kind":"Name","value":"password"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; diff --git a/packages/twenty-front/src/modules/accounts/utils/hasMissingDraftEmailScopes.ts b/packages/twenty-front/src/modules/accounts/utils/hasMissingDraftEmailScopes.ts index dc9cec40acc..0d503ed2e43 100644 --- a/packages/twenty-front/src/modules/accounts/utils/hasMissingDraftEmailScopes.ts +++ b/packages/twenty-front/src/modules/accounts/utils/hasMissingDraftEmailScopes.ts @@ -5,7 +5,7 @@ import { ConnectedAccountProvider } from 'twenty-shared/types'; import { assertUnreachable, isDefined } from 'twenty-shared/utils'; export const getMissingDraftEmailScopes = ( - connectedAccount: ConnectedAccount, + connectedAccount: Pick, ): string[] => { const scopes = connectedAccount.scopes; diff --git a/packages/twenty-front/src/modules/information-banner/hooks/useAccountToReconnect.ts b/packages/twenty-front/src/modules/information-banner/hooks/useAccountToReconnect.ts index cd22938e953..5faa7f564fc 100644 --- a/packages/twenty-front/src/modules/information-banner/hooks/useAccountToReconnect.ts +++ b/packages/twenty-front/src/modules/information-banner/hooks/useAccountToReconnect.ts @@ -1,8 +1,6 @@ -import { type ConnectedAccount } from '@/accounts/types/ConnectedAccount'; import { currentUserState } from '@/auth/states/currentUserState'; import { type InformationBannerKeys } from '@/information-banner/types/InformationBannerKeys'; -import { CoreObjectNameSingular } from 'twenty-shared/types'; -import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; +import { useMyConnectedAccounts } from '@/settings/accounts/hooks/useMyConnectedAccounts'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; export const useAccountToReconnect = (key: InformationBannerKeys) => { @@ -12,13 +10,13 @@ export const useAccountToReconnect = (key: InformationBannerKeys) => { const firstAccountIdToReconnect = userVars?.[key]?.[0]; - const accountToReconnect = useFindOneRecord({ - objectNameSingular: CoreObjectNameSingular.ConnectedAccount, - objectRecordId: firstAccountIdToReconnect, - skip: !firstAccountIdToReconnect, - }); + const { accounts } = useMyConnectedAccounts(); + + const accountToReconnect = accounts.find( + (account) => account.id === firstAccountIdToReconnect, + ); return { - accountToReconnect: accountToReconnect?.record, + accountToReconnect, }; }; diff --git a/packages/twenty-front/src/modules/settings/accounts/graphql/queries/getConnectedAccountById.ts b/packages/twenty-front/src/modules/settings/accounts/graphql/queries/getConnectedAccountById.ts new file mode 100644 index 00000000000..4dda458faed --- /dev/null +++ b/packages/twenty-front/src/modules/settings/accounts/graphql/queries/getConnectedAccountById.ts @@ -0,0 +1,31 @@ +import { gql } from '@apollo/client'; + +export const GET_CONNECTED_ACCOUNT_BY_ID = gql` + fragment PublicConnectionParams on PublicConnectionParametersOutput { + host + port + secure + username + } + + query ConnectedAccountById($id: UUID!) { + connectedAccountById(id: $id) { + id + handle + provider + scopes + userWorkspaceId + connectionParameters { + IMAP { + ...PublicConnectionParams + } + SMTP { + ...PublicConnectionParams + } + CALDAV { + ...PublicConnectionParams + } + } + } + } +`; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx index baa60d6d0c0..824d54d0edd 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx @@ -1,12 +1,12 @@ import { type ConnectedAccount } from '@/accounts/types/ConnectedAccount'; import { getMissingDraftEmailScopes } from '@/accounts/utils/hasMissingDraftEmailScopes'; import { WorkflowSendEmailAttachments } from '@/advanced-text-editor/components/WorkflowSendEmailAttachments'; -import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useSidePanelMenu } from '@/side-panel/hooks/useSidePanelMenu'; -import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { FormAdvancedTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormAdvancedTextFieldInput'; import { FormMultiTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormMultiTextFieldInput'; import { FormTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormTextFieldInput'; +import { GET_CONNECTED_ACCOUNT_BY_ID } from '@/settings/accounts/graphql/queries/getConnectedAccountById'; +import { useMyConnectedAccounts } from '@/settings/accounts/hooks/useMyConnectedAccounts'; import { useTriggerApisOAuth } from '@/settings/accounts/hooks/useTriggerApiOAuth'; import { Select } from '@/ui/input/components/Select'; import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; @@ -15,7 +15,6 @@ import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/Drop import { GenericDropdownContentWidth } from '@/ui/layout/dropdown/constants/GenericDropdownContentWidth'; import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; -import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; import { workflowVisualizerWorkflowIdComponentState } from '@/workflow/states/workflowVisualizerWorkflowIdComponentState'; import { type WorkflowEmailAction } from '@/workflow/types/WorkflowEmailAction'; @@ -23,6 +22,7 @@ import { WorkflowStepBody } from '@/workflow/workflow-steps/components/WorkflowS import { WorkflowStepFooter } from '@/workflow/workflow-steps/components/WorkflowStepFooter'; import { useEmailForm } from '@/workflow/workflow-steps/workflow-actions/hooks/useEmailForm'; import { WorkflowVariablePicker } from '@/workflow/workflow-variables/components/WorkflowVariablePicker'; +import { useQuery } from '@apollo/client/react'; import { t } from '@lingui/core/macro'; import { useEffect, useState } from 'react'; import { ConnectedAccountProvider, SettingsPath } from 'twenty-shared/types'; @@ -52,7 +52,6 @@ export const WorkflowEditActionEmailBase = ({ action, actionOptions, }: WorkflowEditActionEmailBaseProps) => { - const currentWorkspaceMember = useAtomStateValue(currentWorkspaceMemberState); const { triggerApisOAuth } = useTriggerApisOAuth(); const workflowVisualizerWorkflowId = useAtomComponentStateValue( @@ -110,43 +109,40 @@ export const WorkflowEditActionEmailBase = ({ handleFieldChange('connectedAccountId', connectedAccountId); }; - const filter: { or: object[] } = { - or: [ - { - userWorkspaceId: { - eq: currentWorkspaceMember?.id, - }, - }, - ], - }; + const { accounts: myAccounts, loading: myAccountsLoading } = + useMyConnectedAccounts(); - if ( - isDefined(action.settings.input.connectedAccountId) && - action.settings.input.connectedAccountId !== '' - ) { - filter.or.push({ - id: { - eq: action.settings.input.connectedAccountId, - }, - }); - } + const configuredAccountId = formData.connectedAccountId; + const isConfiguredAccountMine = myAccounts.some( + (account) => account.id === configuredAccountId, + ); - const { records: accounts, loading } = useFindManyRecords({ - objectNameSingular: 'connectedAccount', - filter, - recordGqlFields: { - id: true, - handle: true, - provider: true, - scopes: true, - userWorkspaceId: true, - connectionParameters: true, - }, + const { data: otherAccountData, loading: otherAccountLoading } = useQuery<{ + connectedAccountById: Pick< + ConnectedAccount, + | 'id' + | 'handle' + | 'provider' + | 'scopes' + | 'userWorkspaceId' + | 'connectionParameters' + > | null; + }>(GET_CONNECTED_ACCOUNT_BY_ID, { + variables: { id: configuredAccountId }, + skip: + !isDefined(configuredAccountId) || + configuredAccountId === '' || + isConfiguredAccountMine, }); - const selectedAccount = accounts.find( - (account) => account.id === formData.connectedAccountId, - ); + const loading = myAccountsLoading || otherAccountLoading; + + const otherAccount = otherAccountData?.connectedAccountById ?? null; + + const selectedAccount = + myAccounts.find((account) => account.id === configuredAccountId) ?? + otherAccount ?? + undefined; const missingDraftScopes = action.type === 'DRAFT_EMAIL' && isDefined(selectedAccount) @@ -169,7 +165,7 @@ export const WorkflowEditActionEmailBase = ({ }; const connectedAccountOptions: SelectOption[] = []; - accounts.forEach((account) => { + myAccounts.forEach((account) => { if ( account.provider === ConnectedAccountProvider.IMAP_SMTP_CALDAV && !isDefined(account.connectionParameters?.SMTP) @@ -177,17 +173,25 @@ export const WorkflowEditActionEmailBase = ({ return; } - const selectOption = { + connectedAccountOptions.push({ label: account.handle, value: account.id, - }; - if (account.userWorkspaceId === currentWorkspaceMember?.id) { - connectedAccountOptions.push(selectOption); - } else { - emptyOption = selectOption; - } + }); }); + if ( + isDefined(otherAccount) && + !( + otherAccount.provider === ConnectedAccountProvider.IMAP_SMTP_CALDAV && + !isDefined(otherAccount.connectionParameters?.SMTP) + ) + ) { + emptyOption = { + label: otherAccount.handle, + value: otherAccount.id, + }; + } + const navigate = useNavigateSettings(); const { closeSidePanelMenu } = useSidePanelMenu(); diff --git a/packages/twenty-server/src/engine/metadata-modules/connected-account/dtos/connected-account-public.dto.ts b/packages/twenty-server/src/engine/metadata-modules/connected-account/dtos/connected-account-public.dto.ts new file mode 100644 index 00000000000..08d24c4ae52 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/connected-account/dtos/connected-account-public.dto.ts @@ -0,0 +1,32 @@ +import { Field, ObjectType, OmitType } from '@nestjs/graphql'; + +import { IsOptional } from 'class-validator'; + +import { ConnectionParametersDTO } from 'src/engine/core-modules/imap-smtp-caldav-connection/dtos/imap-smtp-caldav-connection.dto'; +import { ConnectedAccountDTO } from 'src/engine/metadata-modules/connected-account/dtos/connected-account.dto'; + +@ObjectType('PublicConnectionParametersOutput') +class PublicConnectionParametersDTO extends OmitType(ConnectionParametersDTO, [ + 'password', +] as const) {} + +@ObjectType('PublicImapSmtpCaldavConnectionParameters') +class PublicImapSmtpCaldavConnectionParametersDTO { + @Field(() => PublicConnectionParametersDTO, { nullable: true }) + IMAP?: PublicConnectionParametersDTO; + + @Field(() => PublicConnectionParametersDTO, { nullable: true }) + SMTP?: PublicConnectionParametersDTO; + + @Field(() => PublicConnectionParametersDTO, { nullable: true }) + CALDAV?: PublicConnectionParametersDTO; +} + +@ObjectType('ConnectedAccountPublicDTO') +export class ConnectedAccountPublicDTO extends OmitType(ConnectedAccountDTO, [ + 'connectionParameters', +] as const) { + @IsOptional() + @Field(() => PublicImapSmtpCaldavConnectionParametersDTO, { nullable: true }) + connectionParameters: PublicImapSmtpCaldavConnectionParametersDTO | null; +} diff --git a/packages/twenty-server/src/engine/metadata-modules/connected-account/resolvers/connected-account.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/connected-account/resolvers/connected-account.resolver.ts index 5cbd527a2ab..ecaabb4eae5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/connected-account/resolvers/connected-account.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/connected-account/resolvers/connected-account.resolver.ts @@ -13,6 +13,7 @@ import { SettingsPermissionGuard } from 'src/engine/guards/settings-permission.g import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { ConnectedAccountMetadataService } from 'src/engine/metadata-modules/connected-account/connected-account-metadata.service'; import { ConnectedAccountDTO } from 'src/engine/metadata-modules/connected-account/dtos/connected-account.dto'; +import { ConnectedAccountPublicDTO } from 'src/engine/metadata-modules/connected-account/dtos/connected-account-public.dto'; import { ConnectedAccountGraphqlApiExceptionInterceptor } from 'src/engine/metadata-modules/connected-account/interceptors/connected-account-graphql-api-exception.interceptor'; @UseGuards(WorkspaceAuthGuard) @@ -35,6 +36,18 @@ export class ConnectedAccountResolver { }); } + @Query(() => ConnectedAccountPublicDTO, { nullable: true }) + @UseGuards(NoPermissionGuard) + async connectedAccountById( + @Args('id', { type: () => UUIDScalarType }) id: string, + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { + return this.connectedAccountMetadataService.findById({ + id, + workspaceId: workspace.id, + }); + } + @Query(() => [ConnectedAccountDTO]) @UseGuards(SettingsPermissionGuard(PermissionFlagType.CONNECTED_ACCOUNTS)) async connectedAccounts(