diff --git a/packages/backend/src/apps/gmail/actions/index.js b/packages/backend/src/apps/gmail/actions/index.js index 9a3816a9..28b72220 100644 --- a/packages/backend/src/apps/gmail/actions/index.js +++ b/packages/backend/src/apps/gmail/actions/index.js @@ -2,5 +2,6 @@ import createDraft from './create-draft/index.js'; import replyToEmail from './reply-to-email/index.js'; import sendEmail from './send-email/index.js'; import sendToTrash from './send-to-trash/index.js'; +import starEmail from './star-email/index.js'; -export default [createDraft, replyToEmail, sendEmail, sendToTrash]; +export default [createDraft, replyToEmail, sendEmail, sendToTrash, starEmail]; diff --git a/packages/backend/src/apps/gmail/actions/send-to-trash/index.js b/packages/backend/src/apps/gmail/actions/send-to-trash/index.js index 8403025c..60587635 100644 --- a/packages/backend/src/apps/gmail/actions/send-to-trash/index.js +++ b/packages/backend/src/apps/gmail/actions/send-to-trash/index.js @@ -8,10 +8,20 @@ export default defineAction({ { label: 'Message ID', key: 'messageId', - type: 'string', + type: 'dropdown', required: true, description: '', variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listMessages', + }, + ], + }, }, ], diff --git a/packages/backend/src/apps/gmail/actions/star-email/index.js b/packages/backend/src/apps/gmail/actions/star-email/index.js new file mode 100644 index 00000000..c7e06bcc --- /dev/null +++ b/packages/backend/src/apps/gmail/actions/star-email/index.js @@ -0,0 +1,45 @@ +import defineAction from '../../../../helpers/define-action.js'; + +export default defineAction({ + name: 'Star an email', + key: 'starEmail', + description: 'Star an email message.', + arguments: [ + { + label: 'Message ID', + key: 'messageId', + type: 'dropdown', + required: true, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listMessages', + }, + ], + }, + }, + ], + + async run($) { + const { messageId } = $.step.parameters; + const userId = $.auth.data.userId; + + const body = { + addLabelIds: ['STARRED'], + }; + + const { data } = await $.http.post( + `/gmail/v1/users/${userId}/messages/${messageId}/modify`, + body + ); + + $.setActionItem({ + raw: data, + }); + }, +}); diff --git a/packages/backend/src/apps/gmail/auth/refresh-token.js b/packages/backend/src/apps/gmail/auth/refresh-token.js index 7c5b7020..2c137caa 100644 --- a/packages/backend/src/apps/gmail/auth/refresh-token.js +++ b/packages/backend/src/apps/gmail/auth/refresh-token.js @@ -12,7 +12,12 @@ const refreshToken = async ($) => { const { data } = await $.http.post( 'https://oauth2.googleapis.com/token', - params.toString() + params.toString(), + { + additionalProperties: { + skipAddingAuthHeader: true, + }, + } ); await $.auth.set({ diff --git a/packages/backend/src/apps/gmail/common/add-auth-header.js b/packages/backend/src/apps/gmail/common/add-auth-header.js index 02477aa4..f957ebf9 100644 --- a/packages/backend/src/apps/gmail/common/add-auth-header.js +++ b/packages/backend/src/apps/gmail/common/add-auth-header.js @@ -1,5 +1,8 @@ const addAuthHeader = ($, requestConfig) => { - if ($.auth.data?.accessToken) { + if ( + !requestConfig.additionalProperties?.skipAddingAuthHeader && + $.auth.data?.accessToken + ) { requestConfig.headers.Authorization = `${$.auth.data.tokenType} ${$.auth.data.accessToken}`; } diff --git a/packages/backend/src/apps/gmail/dynamic-data/index.js b/packages/backend/src/apps/gmail/dynamic-data/index.js index a89b1b9b..37661b45 100644 --- a/packages/backend/src/apps/gmail/dynamic-data/index.js +++ b/packages/backend/src/apps/gmail/dynamic-data/index.js @@ -1,6 +1,13 @@ import listEmails from './list-emails/index.js'; import listLabels from './list-labels/index.js'; +import listMessages from './list-messages/index.js'; import listSignatures from './list-signatures/index.js'; import listThreads from './list-threads/index.js'; -export default [listEmails, listLabels, listSignatures, listThreads]; +export default [ + listEmails, + listLabels, + listMessages, + listSignatures, + listThreads, +]; diff --git a/packages/backend/src/apps/gmail/dynamic-data/list-messages/index.js b/packages/backend/src/apps/gmail/dynamic-data/list-messages/index.js new file mode 100644 index 00000000..077267be --- /dev/null +++ b/packages/backend/src/apps/gmail/dynamic-data/list-messages/index.js @@ -0,0 +1,31 @@ +export default { + name: 'List messages', + key: 'listMessages', + + async run($) { + const messages = { + data: [], + }; + const userId = $.auth.data.userId; + + const { data } = await $.http.get(`/gmail/v1/users/${userId}/messages`); + + if (data.messages) { + for (const message of data.messages) { + const { data: messageData } = await $.http.get( + `/gmail/v1/users/${userId}/messages/${message.id}` + ); + const subject = messageData.payload.headers.find( + (header) => header.name === 'Subject' + ); + + messages.data.push({ + value: message.id, + name: subject?.value, + }); + } + } + + return messages; + }, +}; diff --git a/packages/docs/pages/apps/gmail/actions.md b/packages/docs/pages/apps/gmail/actions.md index 2ad3178c..0754a728 100644 --- a/packages/docs/pages/apps/gmail/actions.md +++ b/packages/docs/pages/apps/gmail/actions.md @@ -9,6 +9,8 @@ items: desc: Send a new email message. - name: Send to trash desc: Send an existing email message to the trash. + - name: Star an email + desc: Star an email message. ---