diff --git a/packages/nodes-base/credentials/MicrosoftOutlookOAuth2Api.credentials.ts b/packages/nodes-base/credentials/MicrosoftOutlookOAuth2Api.credentials.ts index 1c8eafb074..ef87526292 100644 --- a/packages/nodes-base/credentials/MicrosoftOutlookOAuth2Api.credentials.ts +++ b/packages/nodes-base/credentials/MicrosoftOutlookOAuth2Api.credentials.ts @@ -16,7 +16,27 @@ export class MicrosoftOutlookOAuth2Api implements ICredentialType { displayName: 'Scope', name: 'scope', type: 'hidden' as NodePropertyTypes, - default: 'openid offline_access Mail.ReadWrite Mail.Send MailboxSettings.Read', + default: 'openid offline_access Mail.ReadWrite Mail.ReadWrite.Shared Mail.Send Mail.Send.Shared MailboxSettings.Read', + }, + { + displayName: 'Use Shared Mailbox', + name: 'useShared', + type: 'boolean' as NodePropertyTypes, + default: false, + }, + { + displayName: 'User Principal Name', + name: 'userPrincipalName', + description: 'Target user\'s UPN or ID', + type: 'string' as NodePropertyTypes, + default: '', + displayOptions: { + show: { + useShared: [ + true, + ], + }, + }, }, ]; } diff --git a/packages/nodes-base/nodes/Microsoft/Outlook/FolderDescription.ts b/packages/nodes-base/nodes/Microsoft/Outlook/FolderDescription.ts index 61991adff0..d86033f722 100644 --- a/packages/nodes-base/nodes/Microsoft/Outlook/FolderDescription.ts +++ b/packages/nodes-base/nodes/Microsoft/Outlook/FolderDescription.ts @@ -251,7 +251,7 @@ export const folderFields = [ name: 'filter', type: 'string', default: '', - description: 'Microsoft Graph API OData $filter query.', + description: 'Microsoft Graph API OData $filter query. Information about the syntax can be found here.', }, ], }, diff --git a/packages/nodes-base/nodes/Microsoft/Outlook/FolderMessageDecription.ts b/packages/nodes-base/nodes/Microsoft/Outlook/FolderMessageDecription.ts index 3fdf7fd146..c8ec09287b 100644 --- a/packages/nodes-base/nodes/Microsoft/Outlook/FolderMessageDecription.ts +++ b/packages/nodes-base/nodes/Microsoft/Outlook/FolderMessageDecription.ts @@ -115,7 +115,7 @@ export const folderMessageFields = [ name: 'filter', type: 'string', default: '', - description: 'Microsoft Graph API OData $filter query.', + description: 'Microsoft Graph API OData $filter query. Information about the syntax can be found here.', }, ], }, diff --git a/packages/nodes-base/nodes/Microsoft/Outlook/GenericFunctions.ts b/packages/nodes-base/nodes/Microsoft/Outlook/GenericFunctions.ts index fa190a8afd..8646ae08f2 100644 --- a/packages/nodes-base/nodes/Microsoft/Outlook/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Microsoft/Outlook/GenericFunctions.ts @@ -14,6 +14,14 @@ import { } from 'n8n-workflow'; export async function microsoftApiRequest(this: IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, method: string, resource: string, body: any = {}, qs: IDataObject = {}, uri?: string, headers: IDataObject = {}, option: IDataObject = { json: true }): Promise { // tslint:disable-line:no-any + const credentials = this.getCredentials('microsoftOutlookOAuth2Api'); + + let apiUrl = `https://graph.microsoft.com/v1.0/me${resource}`; + // If accessing shared mailbox + if (credentials!.useShared && credentials!.userPrincipalName) { + apiUrl = `https://graph.microsoft.com/v1.0/users/${credentials!.userPrincipalName}${resource}`; + } + const options: OptionsWithUri = { headers: { 'Content-Type': 'application/json', @@ -21,7 +29,7 @@ export async function microsoftApiRequest(this: IExecuteFunctions | IExecuteSing method, body, qs, - uri: uri || `https://graph.microsoft.com/v1.0/me${resource}`, + uri: uri || apiUrl, }; try { Object.assign(options, option); diff --git a/packages/nodes-base/nodes/Microsoft/Outlook/MicrosoftOutlook.node.ts b/packages/nodes-base/nodes/Microsoft/Outlook/MicrosoftOutlook.node.ts index a428b50783..0cbd784f52 100644 --- a/packages/nodes-base/nodes/Microsoft/Outlook/MicrosoftOutlook.node.ts +++ b/packages/nodes-base/nodes/Microsoft/Outlook/MicrosoftOutlook.node.ts @@ -926,6 +926,10 @@ export class MicrosoftOutlook implements INodeType { qs['$select'] = additionalFields.fields; } + if (additionalFields.filter) { + qs['$filter'] = additionalFields.filter; + } + const endpoint = `/mailFolders/${folderId}/messages`; if (returnAll) { responseData = await microsoftApiRequestAllItems.call(