diff --git a/packages/nodes-base/credentials/MondayComOAuth2Api.credentials.ts b/packages/nodes-base/credentials/MondayComOAuth2Api.credentials.ts new file mode 100644 index 0000000000..9adec39bc7 --- /dev/null +++ b/packages/nodes-base/credentials/MondayComOAuth2Api.credentials.ts @@ -0,0 +1,52 @@ +import { + ICredentialType, + NodePropertyTypes, +} from 'n8n-workflow'; + +const scopes = [ + 'boards:write', + 'boards:read', +]; + +export class MondayComOAuth2Api implements ICredentialType { + name = 'mondayComOAuth2Api'; + extends = [ + 'oAuth2Api', + ]; + displayName = 'Monday.com OAuth2 API'; + documentationUrl = 'monday'; + properties = [ + { + displayName: 'Authorization URL', + name: 'authUrl', + type: 'hidden' as NodePropertyTypes, + default: 'https://auth.monday.com/oauth2/authorize', + required: true, + }, + { + displayName: 'Access Token URL', + name: 'accessTokenUrl', + type: 'hidden' as NodePropertyTypes, + default: 'https://auth.monday.com/oauth2/token', + required: true, + }, + { + displayName: 'Scope', + name: 'scope', + type: 'hidden' as NodePropertyTypes, + default: scopes.join(' '), + }, + { + displayName: 'Auth URI Query Parameters', + name: 'authQueryParameters', + type: 'hidden' as NodePropertyTypes, + default: '', + }, + { + displayName: 'Authentication', + name: 'authentication', + type: 'hidden' as NodePropertyTypes, + default: 'body', + }, + ]; +} diff --git a/packages/nodes-base/nodes/MondayCom/GenericFunctions.ts b/packages/nodes-base/nodes/MondayCom/GenericFunctions.ts index 477f7e07a0..030e4f2310 100644 --- a/packages/nodes-base/nodes/MondayCom/GenericFunctions.ts +++ b/packages/nodes-base/nodes/MondayCom/GenericFunctions.ts @@ -18,19 +18,13 @@ import { } from 'lodash'; export async function mondayComApiRequest(this: IExecuteFunctions | IWebhookFunctions | IHookFunctions | ILoadOptionsFunctions, body: any = {}, option: IDataObject = {}): Promise { // tslint:disable-line:no-any - - const credentials = this.getCredentials('mondayComApi'); - - if (credentials === undefined) { - throw new Error('No credentials got returned!'); - } + const authenticationMethod = this.getNodeParameter('authentication', 0) as string; const endpoint = 'https://api.monday.com/v2/'; let options: OptionsWithUri = { headers: { 'Content-Type': 'application/json', - 'Authorization': credentials.apiToken, }, method: 'POST', body, @@ -39,7 +33,16 @@ export async function mondayComApiRequest(this: IExecuteFunctions | IWebhookFunc }; options = Object.assign({}, options, option); try { - return await this.helpers.request!(options); + if (authenticationMethod === 'accessToken') { + const credentials = this.getCredentials('mondayComApi') as IDataObject; + + options.headers = { Authorization: `Bearer ${credentials.apiToken}` }; + + return await this.helpers.request!(options); + } else { + + return await this.helpers.requestOAuth2!.call(this, 'mondayComOAuth2Api', options); + } } catch (error) { if (error.response) { const errorMessage = error.response.body.error_message; diff --git a/packages/nodes-base/nodes/MondayCom/MondayCom.node.ts b/packages/nodes-base/nodes/MondayCom/MondayCom.node.ts index f1aa20f977..389e9b19c8 100644 --- a/packages/nodes-base/nodes/MondayCom/MondayCom.node.ts +++ b/packages/nodes-base/nodes/MondayCom/MondayCom.node.ts @@ -64,9 +64,44 @@ export class MondayCom implements INodeType { { name: 'mondayComApi', required: true, + displayOptions: { + show: { + authentication: [ + 'accessToken', + ], + }, + }, + }, + { + name: 'mondayComOAuth2Api', + required: true, + displayOptions: { + show: { + authentication: [ + 'oAuth2', + ], + }, + }, }, ], properties: [ + { + displayName: 'Authentication', + name: 'authentication', + type: 'options', + options: [ + { + name: 'Access Token', + value: 'accessToken', + }, + { + name: 'OAuth2', + value: 'oAuth2', + }, + ], + default: 'accessToken', + description: 'The resource to operate on.', + }, { displayName: 'Resource', name: 'resource', diff --git a/packages/nodes-base/package.json b/packages/nodes-base/package.json index 8930660809..dbecf013b8 100644 --- a/packages/nodes-base/package.json +++ b/packages/nodes-base/package.json @@ -160,6 +160,7 @@ "dist/credentials/MindeeInvoiceApi.credentials.js", "dist/credentials/MoceanApi.credentials.js", "dist/credentials/MondayComApi.credentials.js", + "dist/credentials/MondayComOAuth2Api.credentials.js", "dist/credentials/MongoDb.credentials.js", "dist/credentials/Mqtt.credentials.js", "dist/credentials/Msg91Api.credentials.js",