diff --git a/packages/nodes-base/credentials/GoogleTasksOAuth2Api.credentials.ts b/packages/nodes-base/credentials/GoogleTasksOAuth2Api.credentials.ts index db30799920..ac1242be2b 100644 --- a/packages/nodes-base/credentials/GoogleTasksOAuth2Api.credentials.ts +++ b/packages/nodes-base/credentials/GoogleTasksOAuth2Api.credentials.ts @@ -1,6 +1,11 @@ -import { ICredentialType, NodePropertyTypes } from 'n8n-workflow'; +import { + ICredentialType, + NodePropertyTypes, +} from 'n8n-workflow'; -const scopes = ['https://www.googleapis.com/auth/tasks']; +const scopes = [ + 'https://www.googleapis.com/auth/tasks', +]; export class GoogleTasksOAuth2Api implements ICredentialType { name = 'googleTasksOAuth2Api'; @@ -12,6 +17,6 @@ export class GoogleTasksOAuth2Api implements ICredentialType { name: 'scope', type: 'hidden' as NodePropertyTypes, default: scopes.join(' ') - } + }, ]; } diff --git a/packages/nodes-base/credentials/ZoomOAuth2Api.credentials.ts b/packages/nodes-base/credentials/ZoomOAuth2Api.credentials.ts index 2b05c819a7..c00c694661 100644 --- a/packages/nodes-base/credentials/ZoomOAuth2Api.credentials.ts +++ b/packages/nodes-base/credentials/ZoomOAuth2Api.credentials.ts @@ -44,7 +44,7 @@ export class ZoomOAuth2Api implements ICredentialType { displayName: 'Authentication', name: 'authentication', type: 'hidden' as NodePropertyTypes, - default: 'body' + default: 'header' } ]; } diff --git a/packages/nodes-base/nodes/Google/Calendar/EventDescription.ts b/packages/nodes-base/nodes/Google/Calendar/EventDescription.ts index a7800334e5..44af95a151 100644 --- a/packages/nodes-base/nodes/Google/Calendar/EventDescription.ts +++ b/packages/nodes-base/nodes/Google/Calendar/EventDescription.ts @@ -1,4 +1,6 @@ -import { INodeProperties } from 'n8n-workflow'; +import { + INodeProperties, +} from 'n8n-workflow'; export const eventOperations = [ { @@ -7,34 +9,36 @@ export const eventOperations = [ type: 'options', displayOptions: { show: { - resource: ['event'] - } + resource: [ + 'event', + ], + }, }, options: [ { name: 'Create', value: 'create', - description: 'Add a event to calendar' + description: 'Add a event to calendar', }, { name: 'Delete', value: 'delete', - description: 'Delete an event' + description: 'Delete an event', }, { name: 'Get', value: 'get', - description: 'Retrieve an event' + description: 'Retrieve an event', }, { name: 'Get All', value: 'getAll', - description: 'Retrieve all events from a calendar' + description: 'Retrieve all events from a calendar', }, { name: 'Update', value: 'update', - description: 'Update an event' + description: 'Update an event', } ], default: 'create', @@ -56,9 +60,13 @@ export const eventFields = [ required: true, displayOptions: { show: { - operation: ['create'], - resource: ['event'] - } + operation: [ + 'create' + ], + resource: [ + 'event' + ], + }, }, default: '' }, @@ -69,9 +77,13 @@ export const eventFields = [ required: true, displayOptions: { show: { - operation: ['create'], - resource: ['event'] - } + operation: [ + 'create', + ], + resource: [ + 'event', + ], + }, }, default: '', description: 'Start time of the event.' @@ -83,9 +95,13 @@ export const eventFields = [ required: true, displayOptions: { show: { - operation: ['create'], - resource: ['event'] - } + operation: [ + 'create', + ], + resource: [ + 'event', + ], + }, }, default: '', description: 'End time of the event.' @@ -96,9 +112,13 @@ export const eventFields = [ type: 'boolean', displayOptions: { show: { - operation: ['create'], - resource: ['event'] - } + operation: [ + 'create', + ], + resource: [ + 'event', + ], + }, }, default: true }, @@ -110,9 +130,13 @@ export const eventFields = [ default: {}, displayOptions: { show: { - operation: ['create'], - resource: ['event'] - } + operation: [ + 'create', + ], + resource: [ + 'event', + ], + }, }, options: [ { @@ -122,12 +146,12 @@ export const eventFields = [ options: [ { name: 'Yes', - value: 'yes' + value: 'yes', }, { name: 'No', - value: 'no' - } + value: 'no', + }, ], default: 'no', description: 'Wheater the event is all day or not' @@ -138,57 +162,55 @@ export const eventFields = [ type: 'string', typeOptions: { multipleValues: true, - multipleValueButtonText: 'Add Attendee' + multipleValueButtonText: 'Add Attendee', }, default: '', - description: 'The attendees of the event' + description: 'The attendees of the event', }, { displayName: 'Color', name: 'color', type: 'options', typeOptions: { - loadOptionsMethod: 'getColors' + loadOptionsMethod: 'getColors', }, default: '', - description: 'The color of the event.' + description: 'The color of the event.', }, { displayName: 'Guests Can Invite Others', name: 'guestsCanInviteOthers', type: 'boolean', default: true, - description: - 'Whether attendees other than the organizer can invite others to the event' + description: 'Whether attendees other than the organizer can invite others to the event', }, { displayName: 'Guests Can Modify', name: 'guestsCanModify', type: 'boolean', default: false, - description: - 'Whether attendees other than the organizer can modify the event' + description: 'Whether attendees other than the organizer can modify the event', }, { displayName: 'Guests Can See Other Guests', name: 'guestsCanSeeOtherGuests', type: 'boolean', default: true, - description: `Whether attendees other than the organizer can see who the event's attendees are.` + description: `Whether attendees other than the organizer can see who the event's attendees are.`, }, { displayName: 'ID', name: 'id', type: 'string', default: '', - description: 'Opaque identifier of the event' + description: 'Opaque identifier of the event', }, { displayName: 'Location', name: 'location', type: 'string', default: '', - description: 'Geographic location of the event as free-form text.' + description: 'Geographic location of the event as free-form text.', }, { displayName: 'Max Attendees', @@ -196,7 +218,7 @@ export const eventFields = [ type: 'number', default: 0, description: `The maximum number of attendees to include in the response.
- If there are more than the specified number of attendees, only the participant is returned` + If there are more than the specified number of attendees, only the participant is returned`, }, { displayName: 'Repeat Frecuency', @@ -205,28 +227,28 @@ export const eventFields = [ options: [ { name: 'Daily', - value: 'Daily' + value: 'Daily', }, { name: 'Weekly', - value: 'weekly' + value: 'weekly', }, { name: 'Monthly', - value: 'monthly' + value: 'monthly', }, { name: 'Yearly', - value: 'yearly' + value: 'yearly', } ], - default: '' + default: '', }, { displayName: 'Repeat Until', name: 'repeatUntil', type: 'dateTime', - default: '' + default: '', }, { displayName: 'Repeat How Many Times?', @@ -245,31 +267,28 @@ export const eventFields = [ { name: 'All', value: 'all', - description: ' Notifications are sent to all guests' + description: 'Notifications are sent to all guests' }, { name: 'External Only', value: 'externalOnly', - description: - 'Notifications are sent to non-Google Calendar guests only' + description: 'Notifications are sent to non-Google Calendar guests only', }, { name: 'None', value: 'none', - description: - ' No notifications are sent. This value should only be used for migration use case' + description: 'No notifications are sent. This value should only be used for migration use case', } ], - description: - 'Whether to send notifications about the creation of the new event', - default: '' + description: 'Whether to send notifications about the creation of the new event', + default: '', }, { displayName: 'Summary', name: 'summary', type: 'string', default: '', - description: 'Title of the event.' + description: 'Title of the event.', }, { displayName: 'Show Me As', @@ -279,27 +298,26 @@ export const eventFields = [ { name: 'Available', value: 'transparent', - description: 'The event does not block time on the calendar' + description: 'The event does not block time on the calendar', }, { name: 'Busy', value: 'opaque', - description: ' The event does block time on the calendar.' + description: ' The event does block time on the calendar.', } ], default: 'opaque', - description: 'Whether the event blocks time on the calendar' + description: 'Whether the event blocks time on the calendar', }, { displayName: 'Timezone', name: 'timezone', type: 'options', typeOptions: { - loadOptionsMethod: 'getTimezones' + loadOptionsMethod: 'getTimezones', }, default: '', - description: - 'The timezone the event will have set. By default events are schedule on timezone set in n8n.' + description: 'The timezone the event will have set. By default events are schedule on timezone set in n8n.', }, { displayName: 'Visibility', @@ -309,32 +327,28 @@ export const eventFields = [ { name: 'Confidential', value: 'confidential', - description: - 'The event is private. This value is provided for compatibility reasons.' + description: 'The event is private. This value is provided for compatibility reasons.', }, { name: 'Default', value: 'default', - description: - ' Uses the default visibility for events on the calendar.' + description: 'Uses the default visibility for events on the calendar.', }, { name: 'Private', value: 'private', - description: - 'The event is private and only event attendees may view event details.' + description: 'The event is private and only event attendees may view event details.', }, { name: 'Public', value: 'public', - description: - 'The event is public and event details are visible to all readers of the calendar.' - } + description: 'The event is public and event details are visible to all readers of the calendar.', + }, ], default: 'default', description: 'Visibility of the event.' - } - ] + }, + ], }, { displayName: 'Reminders', @@ -348,10 +362,16 @@ export const eventFields = [ required: false, displayOptions: { show: { - resource: ['event'], - operation: ['create'], - useDefaultReminders: [false] - } + resource: [ + 'event', + ], + operation: [ + 'create', + ], + useDefaultReminders: [ + false, + ], + }, }, options: [ { @@ -365,14 +385,14 @@ export const eventFields = [ options: [ { name: 'Email', - value: 'email' + value: 'email', }, { name: 'Popup', - value: 'popup' - } + value: 'popup', + }, ], - default: '' + default: '', }, { displayName: 'Minutes Before', @@ -380,12 +400,12 @@ export const eventFields = [ type: 'number', typeOptions: { minValue: 0, - maxValue: 40320 + maxValue: 40320, }, - default: 0 - } - ] - } + default: 0, + }, + ], + }, ], description: `If the event doesn't use the default reminders, this lists the reminders specific to the event` }, @@ -397,14 +417,18 @@ export const eventFields = [ name: 'calendar', type: 'options', typeOptions: { - loadOptionsMethod: 'getCalendars' + loadOptionsMethod: 'getCalendars', }, required: true, displayOptions: { show: { - operation: ['delete'], - resource: ['event'] - } + operation: [ + 'delete', + ], + resource: [ + 'event', + ], + }, }, default: '' }, @@ -415,11 +439,15 @@ export const eventFields = [ required: true, displayOptions: { show: { - operation: ['delete'], - resource: ['event'] - } + operation: [ + 'delete', + ], + resource: [ + 'event', + ], + }, }, - default: '' + default: '', }, { displayName: 'Options', @@ -429,9 +457,13 @@ export const eventFields = [ default: {}, displayOptions: { show: { - operation: ['delete'], - resource: ['event'] - } + operation: [ + 'delete', + ], + resource: [ + 'event', + ], + }, }, options: [ { @@ -442,26 +474,23 @@ export const eventFields = [ { name: 'All', value: 'all', - description: ' Notifications are sent to all guests' + description: 'Notifications are sent to all guests', }, { name: 'External Only', value: 'externalOnly', - description: - 'Notifications are sent to non-Google Calendar guests only' + description: 'Notifications are sent to non-Google Calendar guests only', }, { name: 'None', value: 'none', - description: - ' No notifications are sent. This value should only be used for migration use case' + description: 'No notifications are sent. This value should only be used for migration use case', } ], - description: - 'Whether to send notifications about the creation of the new event', - default: '' - } - ] + description: 'Whether to send notifications about the creation of the new event', + default: '', + }, + ], }, /* -------------------------------------------------------------------------- */ /* event:get */ @@ -471,14 +500,18 @@ export const eventFields = [ name: 'calendar', type: 'options', typeOptions: { - loadOptionsMethod: 'getCalendars' + loadOptionsMethod: 'getCalendars', }, required: true, displayOptions: { show: { - operation: ['get'], - resource: ['event'] - } + operation: [ + 'get', + ], + resource: [ + 'event', + ], + }, }, default: '' }, @@ -489,11 +522,15 @@ export const eventFields = [ required: true, displayOptions: { show: { - operation: ['get'], - resource: ['event'] - } + operation: [ + 'get', + ], + resource: [ + 'event', + ], + }, }, - default: '' + default: '', }, { displayName: 'Options', @@ -503,9 +540,13 @@ export const eventFields = [ default: {}, displayOptions: { show: { - operation: ['get'], - resource: ['event'] - } + operation: [ + 'get', + ], + resource: [ + 'event', + ], + }, }, options: [ { @@ -514,17 +555,17 @@ export const eventFields = [ type: 'number', default: 0, description: `The maximum number of attendees to include in the response.
- If there are more than the specified number of attendees, only the participant is returned` + If there are more than the specified number of attendees, only the participant is returned`, }, { displayName: 'Timezone', name: 'timeZone', type: 'options', typeOptions: { - loadOptionsMethod: 'getTimezones' + loadOptionsMethod: 'getTimezones', }, default: '', - description: `Time zone used in the response. The default is the time zone of the calendar.` + description: `Time zone used in the response. The default is the time zone of the calendar.`, } ] }, @@ -536,14 +577,18 @@ export const eventFields = [ name: 'calendar', type: 'options', typeOptions: { - loadOptionsMethod: 'getCalendars' + loadOptionsMethod: 'getCalendars', }, required: true, displayOptions: { show: { - operation: ['getAll'], - resource: ['event'] - } + operation: [ + 'getAll', + ], + resource: [ + 'event', + ], + }, }, default: '' }, @@ -553,13 +598,16 @@ export const eventFields = [ type: 'boolean', displayOptions: { show: { - operation: ['getAll'], - resource: ['event'] - } + operation: [ + 'getAll', + ], + resource: [ + 'event', + ], + }, }, default: false, - description: - 'If all results should be returned or only up to a given limit.' + description: 'If all results should be returned or only up to a given limit.', }, { displayName: 'Limit', @@ -567,17 +615,23 @@ export const eventFields = [ type: 'number', displayOptions: { show: { - operation: ['getAll'], - resource: ['event'], - returnAll: [false] - } + operation: [ + 'getAll', + ], + resource: [ + 'event', + ], + returnAll: [ + false, + ], + }, }, typeOptions: { minValue: 1, - maxValue: 500 + maxValue: 500, }, default: 100, - description: 'How many results to return.' + description: 'How many results to return.', }, { displayName: 'Options', @@ -587,9 +641,13 @@ export const eventFields = [ default: {}, displayOptions: { show: { - operation: ['getAll'], - resource: ['event'] - } + operation: [ + 'getAll', + ], + resource: [ + 'event', + ], + }, }, options: [ { @@ -597,8 +655,7 @@ export const eventFields = [ name: 'iCalUID', type: 'string', default: '', - description: - 'Specifies event ID in the iCalendar format to be included in the response' + description: 'Specifies event ID in the iCalendar format to be included in the response', }, { displayName: 'Max Attendees', @@ -606,7 +663,7 @@ export const eventFields = [ type: 'number', default: 0, description: `The maximum number of attendees to include in the response.
- If there are more than the specified number of attendees, only the participant is returned` + If there are more than the specified number of attendees, only the participant is returned`, }, { displayName: 'Order By', @@ -616,40 +673,37 @@ export const eventFields = [ { name: 'Start Time', value: 'startTime', - description: - 'Order by the start date/time (ascending). This is only available when querying single events (i.e. the parameter singleEvents is True)' + description: 'Order by the start date/time (ascending). This is only available when querying single events (i.e. the parameter singleEvents is True)', }, { name: 'Updated', value: 'updated', - description: 'Order by last modification time (ascending).' + description: 'Order by last modification time (ascending).', } ], default: '', - description: 'The order of the events returned in the result.' + description: 'The order of the events returned in the result.', }, { displayName: 'Query', name: 'query', type: 'string', default: '', - description: - 'Free text search terms to find events that match these terms in any field, except for extended properties.' + description: 'Free text search terms to find events that match these terms in any field, except for extended properties.', }, { displayName: 'Show Deleted', name: 'showDeleted', type: 'boolean', default: false, - description: - 'Whether to include deleted events (with status equals "cancelled") in the result.' + description: 'Whether to include deleted events (with status equals "cancelled") in the result.', }, { displayName: 'Show Hidden Invitations', name: 'showHiddenInvitations', type: 'boolean', default: false, - description: 'Whether to include hidden invitations in the result.' + description: 'Whether to include hidden invitations in the result.', }, { displayName: 'Single Events', @@ -657,31 +711,31 @@ export const eventFields = [ type: 'boolean', default: false, description: `Whether to expand recurring events into instances and only return single one-off
- events and instances of recurring events, but not the underlying recurring events themselves.` + events and instances of recurring events, but not the underlying recurring events themselves.`, }, { displayName: 'Time Max', name: 'timeMax', type: 'dateTime', default: '', - description: `Upper bound (exclusive) for an event's start time to filter by` + description: `Upper bound (exclusive) for an event's start time to filter by`, }, { displayName: 'Time Min', name: 'timeMin', type: 'dateTime', default: '', - description: `Lower bound (exclusive) for an event's end time to filter by` + description: `Lower bound (exclusive) for an event's end time to filter by`, }, { displayName: 'Timezone', name: 'timeZone', type: 'options', typeOptions: { - loadOptionsMethod: 'getTimezones' + loadOptionsMethod: 'getTimezones', }, default: '', - description: `Time zone used in the response. The default is the time zone of the calendar.` + description: `Time zone used in the response. The default is the time zone of the calendar.`, }, { displayName: 'Updated Min', @@ -689,7 +743,7 @@ export const eventFields = [ type: 'dateTime', default: '', description: `Lower bound for an event's last modification time (as a RFC3339 timestamp) to filter by. - When specified, entries deleted since this time will always be included regardless of showDeleted` + When specified, entries deleted since this time will always be included regardless of showDeleted`, } ] }, @@ -706,11 +760,15 @@ export const eventFields = [ required: true, displayOptions: { show: { - operation: ['update'], - resource: ['event'] - } + operation: [ + 'update', + ], + resource: [ + 'event', + ], + }, }, - default: '' + default: '', }, { displayName: 'Event ID', @@ -719,11 +777,15 @@ export const eventFields = [ required: true, displayOptions: { show: { - operation: ['update'], - resource: ['event'] - } + operation: [ + 'update', + ], + resource: [ + 'event', + ], + }, }, - default: '' + default: '', }, { displayName: 'Use Default Reminders', @@ -731,9 +793,13 @@ export const eventFields = [ type: 'boolean', displayOptions: { show: { - operation: ['update'], - resource: ['event'] - } + operation: [ + 'update', + ], + resource: [ + 'event', + ], + }, }, default: true }, @@ -745,9 +811,13 @@ export const eventFields = [ default: {}, displayOptions: { show: { - operation: ['update'], - resource: ['event'] - } + operation: [ + 'update', + ], + resource: [ + 'event', + ], + }, }, options: [ { @@ -757,15 +827,15 @@ export const eventFields = [ options: [ { name: 'Yes', - value: 'yes' + value: 'yes', }, { name: 'No', - value: 'no' + value: 'no', } ], default: 'no', - description: 'Wheater the event is all day or not' + description: 'Wheater the event is all day or not', }, { displayName: 'Attendees', @@ -773,64 +843,62 @@ export const eventFields = [ type: 'string', typeOptions: { multipleValues: true, - multipleValueButtonText: 'Add Attendee' + multipleValueButtonText: 'Add Attendee', }, default: '', - description: 'The attendees of the event' + description: 'The attendees of the event', }, { displayName: 'Color', name: 'color', type: 'options', typeOptions: { - loadOptionsMethod: 'getColors' + loadOptionsMethod: 'getColors', }, default: '', - description: 'The color of the event.' + description: 'The color of the event.', }, { displayName: 'End', name: 'end', type: 'dateTime', default: '', - description: 'End time of the event.' + description: 'End time of the event.', }, { displayName: 'Guests Can Invite Others', name: 'guestsCanInviteOthers', type: 'boolean', default: true, - description: - 'Whether attendees other than the organizer can invite others to the event' + description: 'Whether attendees other than the organizer can invite others to the event', }, { displayName: 'Guests Can Modify', name: 'guestsCanModify', type: 'boolean', default: false, - description: - 'Whether attendees other than the organizer can modify the event' + description: 'Whether attendees other than the organizer can modify the event', }, { displayName: 'Guests Can See Other Guests', name: 'guestsCanSeeOtherGuests', type: 'boolean', default: true, - description: `Whether attendees other than the organizer can see who the event's attendees are.` + description: `Whether attendees other than the organizer can see who the event's attendees are.`, }, { displayName: 'ID', name: 'id', type: 'string', default: '', - description: 'Opaque identifier of the event' + description: 'Opaque identifier of the event', }, { displayName: 'Location', name: 'location', type: 'string', default: '', - description: 'Geographic location of the event as free-form text.' + description: 'Geographic location of the event as free-form text.', }, { displayName: 'Max Attendees', @@ -838,7 +906,7 @@ export const eventFields = [ type: 'number', default: 0, description: `The maximum number of attendees to include in the response.
- If there are more than the specified number of attendees, only the participant is returned` + If there are more than the specified number of attendees, only the participant is returned`, }, { displayName: 'Repeat Frecuency', @@ -847,44 +915,44 @@ export const eventFields = [ options: [ { name: 'Daily', - value: 'Daily' + value: 'Daily', }, { name: 'Weekly', - value: 'weekly' + value: 'weekly', }, { name: 'Monthly', - value: 'monthly' + value: 'monthly', }, { name: 'Yearly', - value: 'yearly' + value: 'yearly', } ], - default: '' + default: '', }, { displayName: 'Repeat Until', name: 'repeatUntil', type: 'dateTime', - default: '' + default: '', }, { displayName: 'Repeat How Many Times?', name: 'repeatHowManyTimes', type: 'number', typeOptions: { - minValue: 1 + minValue: 1, }, - default: 1 + default: 1, }, { displayName: 'Start', name: 'start', type: 'dateTime', default: '', - description: 'Start time of the event.' + description: 'Start time of the event.', }, { displayName: 'Send Updates', @@ -894,31 +962,28 @@ export const eventFields = [ { name: 'All', value: 'all', - description: ' Notifications are sent to all guests' + description: ' Notifications are sent to all guests', }, { name: 'External Only', value: 'externalOnly', - description: - 'Notifications are sent to non-Google Calendar guests only' + description: 'Notifications are sent to non-Google Calendar guests only', }, { name: 'None', value: 'none', - description: - ' No notifications are sent. This value should only be used for migration use case' + description: 'No notifications are sent. This value should only be used for migration use case', } ], - description: - 'Whether to send notifications about the creation of the new event', - default: '' + description: 'Whether to send notifications about the creation of the new event', + default: '', }, { displayName: 'Summary', name: 'summary', type: 'string', default: '', - description: 'Title of the event.' + description: 'Title of the event.', }, { displayName: 'Show Me As', @@ -928,27 +993,26 @@ export const eventFields = [ { name: 'Available', value: 'transparent', - description: 'The event does not block time on the calendar' + description: 'The event does not block time on the calendar', }, { name: 'Busy', value: 'opaque', - description: ' The event does block time on the calendar.' - } + description: ' The event does block time on the calendar.', + }, ], default: 'opaque', - description: 'Whether the event blocks time on the calendar' + description: 'Whether the event blocks time on the calendar', }, { displayName: 'Timezone', name: 'timezone', type: 'options', typeOptions: { - loadOptionsMethod: 'getTimezones' + loadOptionsMethod: 'getTimezones', }, default: '', - description: - 'The timezone the event will have set. By default events are schedule on n8n timezone ' + description: 'The timezone the event will have set. By default events are schedule on n8n timezone', }, { displayName: 'Visibility', @@ -958,32 +1022,28 @@ export const eventFields = [ { name: 'Confidential', value: 'confidential', - description: - 'The event is private. This value is provided for compatibility reasons.' + description: 'The event is private. This value is provided for compatibility reasons.', }, { name: 'Default', value: 'default', - description: - ' Uses the default visibility for events on the calendar.' + description: 'Uses the default visibility for events on the calendar.', }, { name: 'Public', value: 'public', - description: - 'The event is public and event details are visible to all readers of the calendar.' + description: 'The event is public and event details are visible to all readers of the calendar.', }, { name: 'Private', value: 'private', - description: - 'The event is private and only event attendees may view event details.' + description: 'The event is private and only event attendees may view event details.', } ], default: 'default', - description: 'Visibility of the event.' - } - ] + description: 'Visibility of the event.', + }, + ], }, { displayName: 'Reminders', @@ -997,10 +1057,16 @@ export const eventFields = [ required: false, displayOptions: { show: { - resource: ['event'], - operation: ['update'], - useDefaultReminders: [false] - } + resource: [ + 'event', + ], + operation: [ + 'update', + ], + useDefaultReminders: [ + false, + ], + }, }, options: [ { @@ -1014,14 +1080,14 @@ export const eventFields = [ options: [ { name: 'Email', - value: 'email' + value: 'email', }, { name: 'Popup', - value: 'popup' + value: 'popup', } ], - default: '' + default: '', }, { displayName: 'Minutes Before', @@ -1029,13 +1095,13 @@ export const eventFields = [ type: 'number', typeOptions: { minValue: 0, - maxValue: 40320 + maxValue: 40320, }, - default: 0 - } - ] - } + default: 0, + }, + ], + }, ], - description: `If the event doesn't use the default reminders, this lists the reminders specific to the event` + description: `If the event doesn't use the default reminders, this lists the reminders specific to the event`, } ] as INodeProperties[]; diff --git a/packages/nodes-base/nodes/Google/Calendar/EventInterface.ts b/packages/nodes-base/nodes/Google/Calendar/EventInterface.ts index 72bf96cc80..14cda0fe41 100644 --- a/packages/nodes-base/nodes/Google/Calendar/EventInterface.ts +++ b/packages/nodes-base/nodes/Google/Calendar/EventInterface.ts @@ -1,4 +1,6 @@ -import { IDataObject } from "n8n-workflow"; +import { + IDataObject, + } from 'n8n-workflow'; export interface IReminder { useDefault?: boolean; diff --git a/packages/nodes-base/nodes/Google/Calendar/GoogleCalendar.node.ts b/packages/nodes-base/nodes/Google/Calendar/GoogleCalendar.node.ts index 53d3d9de83..dc0ddad947 100644 --- a/packages/nodes-base/nodes/Google/Calendar/GoogleCalendar.node.ts +++ b/packages/nodes-base/nodes/Google/Calendar/GoogleCalendar.node.ts @@ -1,4 +1,6 @@ -import { IExecuteFunctions } from 'n8n-core'; +import { + IExecuteFunctions, +} from 'n8n-core'; import { IDataObject, @@ -6,14 +8,22 @@ import { INodeTypeDescription, INodeType, ILoadOptionsFunctions, - INodePropertyOptions + INodePropertyOptions, } from 'n8n-workflow'; -import { googleApiRequest, googleApiRequestAllItems } from './GenericFunctions'; +import { + googleApiRequest, + googleApiRequestAllItems, +} from './GenericFunctions'; -import { eventOperations, eventFields } from './EventDescription'; +import { + eventOperations, + eventFields, +} from './EventDescription'; -import { IEvent } from './EventInterface'; +import { + IEvent, +} from './EventInterface'; import * as moment from 'moment-timezone'; @@ -28,14 +38,14 @@ export class GoogleCalendar implements INodeType { description: 'Consume Google Calendar API.', defaults: { name: 'Google Calendar', - color: '#3E87E4' + color: '#3E87E4', }, inputs: ['main'], outputs: ['main'], credentials: [ { name: 'googleCalendarOAuth2Api', - required: true + required: true, } ], properties: [ @@ -46,15 +56,15 @@ export class GoogleCalendar implements INodeType { options: [ { name: 'Event', - value: 'event' - } + value: 'event', + }, ], default: 'event', description: 'The resource to operate on.' }, ...eventOperations, - ...eventFields - ] + ...eventFields, + ], }; methods = { diff --git a/packages/nodes-base/nodes/Google/Task/GenericFunctions.ts b/packages/nodes-base/nodes/Google/Task/GenericFunctions.ts index 19652d1d4a..c3a5031511 100644 --- a/packages/nodes-base/nodes/Google/Task/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Google/Task/GenericFunctions.ts @@ -1,12 +1,16 @@ -import { OptionsWithUri } from 'request'; +import { + OptionsWithUri, +} from 'request'; import { IExecuteFunctions, IExecuteSingleFunctions, - ILoadOptionsFunctions + ILoadOptionsFunctions, } from 'n8n-core'; -import { IDataObject } from 'n8n-workflow'; +import { + IDataObject, +} from 'n8n-workflow'; export async function googleApiRequest( this: IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, @@ -27,6 +31,7 @@ export async function googleApiRequest( uri: uri || `https://www.googleapis.com${resource}`, json: true }; + try { if (Object.keys(headers).length !== 0) { options.headers = Object.assign({}, options.headers, headers); @@ -41,10 +46,14 @@ export async function googleApiRequest( options ); } catch (error) { - if (error.response && error.response.body && error.response.body.message) { + if (error.response && error.response.body && error.response.body.error) { + + let errors = error.response.body.error.errors; + + errors = errors.map((e: IDataObject) => e.message); // Try to return the error prettier throw new Error( - `Google Tasks error response [${error.statusCode}]: ${error.response.body.message}` + `Google Tasks error response [${error.statusCode}]: ${errors.join('|')}` ); } throw error; diff --git a/packages/nodes-base/nodes/Google/Task/GoogleTasks.node.ts b/packages/nodes-base/nodes/Google/Task/GoogleTasks.node.ts index db751cb258..8e2f06dcf5 100644 --- a/packages/nodes-base/nodes/Google/Task/GoogleTasks.node.ts +++ b/packages/nodes-base/nodes/Google/Task/GoogleTasks.node.ts @@ -1,16 +1,25 @@ -import { IExecuteFunctions } from 'n8n-core'; +import { + IExecuteFunctions, + } from 'n8n-core'; import { IDataObject, - INodeExecutionData, - INodeTypeDescription, - INodeType, ILoadOptionsFunctions, - INodePropertyOptions + INodeExecutionData, + INodePropertyOptions, + INodeType, + INodeTypeDescription, } from 'n8n-workflow'; -import { taskOperations, taskFields } from './TaskDescription'; -import { googleApiRequest, googleApiRequestAllItems } from './GenericFunctions'; +import { + googleApiRequest, + googleApiRequestAllItems, +} from './GenericFunctions'; + +import { + taskOperations, + taskFields, +} from './TaskDescription'; export class GoogleTasks implements INodeType { description: INodeTypeDescription = { @@ -98,43 +107,36 @@ export class GoogleTasks implements INodeType { i ) as IDataObject; - if (additionalFields.parent) + if (additionalFields.parent) { qs.parent = additionalFields.parent as string; - - if (additionalFields.previous) - qs.previous = additionalFields.previous as string; - - if (additionalFields.links) { - body.links = (additionalFields.links as string[]).map(link => { - return { link }; - }); } - if (additionalFields.status) + if (additionalFields.previous) { + qs.previous = additionalFields.previous as string; + } + + if (additionalFields.status) { body.status = additionalFields.status as string; + } - if (additionalFields.notes) + if (additionalFields.notes) { body.notes = additionalFields.notes as string; + } - if (additionalFields.title) + if (additionalFields.title) { body.title = additionalFields.title as string; + } - if (additionalFields.dueDate) + if (additionalFields.dueDate) { body.dueDate = additionalFields.dueDate as string; + } - if (additionalFields.completed) + if (additionalFields.completed) { body.completed = additionalFields.completed as string; + } - if (additionalFields.deleted) + if (additionalFields.deleted) { body.deleted = additionalFields.deleted as boolean; - - if (additionalFields.hidden) - body.hidden = additionalFields.hidden as boolean; - - if (additionalFields.position) - body.position = additionalFields.position as string; - - if (additionalFields.selfLink) - body.selfLink = additionalFields.selfLink as string; + } responseData = await googleApiRequest.call( this, @@ -189,9 +191,6 @@ export class GoogleTasks implements INodeType { if (options.dueMax) { qs.dueMax = options.dueMax as string; } - if (options.pageToken) { - qs.pageToken = options.pageToken as string; - } if (options.showCompleted) { qs.showCompleted = options.showCompleted as boolean; } @@ -201,10 +200,10 @@ export class GoogleTasks implements INodeType { if (options.showHidden) { qs.showHidden = options.showHidden as boolean; } - if (options.updatedMin) { qs.updatedMin = options.updatedMin as string; } + if (returnAll) { responseData = await googleApiRequestAllItems.call( this, @@ -236,38 +235,33 @@ export class GoogleTasks implements INodeType { i ) as IDataObject; - if (updateFields.parent) qs.parent = updateFields.parent as string; - - if (updateFields.previous) + if (updateFields.previous) { qs.previous = updateFields.previous as string; - - if (updateFields.links) { - body.links = (updateFields.links as string[]).map(link => { - return { link: link }; - }); } - if (updateFields.status) body.status = updateFields.status as string; - if (updateFields.notes) body.notes = updateFields.notes as string; + if (updateFields.status) { + body.status = updateFields.status as string; + } - if (updateFields.title) body.title = updateFields.title as string; + if (updateFields.notes) { + body.notes = updateFields.notes as string; + } - if (updateFields.dueDate) + if (updateFields.title) { + body.title = updateFields.title as string; + } + + if (updateFields.dueDate) { body.dueDate = updateFields.dueDate as string; + } - if (updateFields.completed) + if (updateFields.completed) { body.completed = updateFields.completed as string; + } - if (updateFields.deleted) + if (updateFields.deleted) { body.deleted = updateFields.deleted as boolean; - - if (updateFields.hidden) body.hidden = updateFields.hidden as boolean; - - if (updateFields.position) - body.position = updateFields.position as string; - - if (updateFields.selfLink) - body.selfLink = updateFields.selfLink as string; + } responseData = await googleApiRequest.call( this, @@ -278,12 +272,11 @@ export class GoogleTasks implements INodeType { ); } } - } - - if (Array.isArray(responseData)) { - returnData.push.apply(returnData, responseData as IDataObject[]); - } else if (responseData !== undefined) { - returnData.push(responseData as IDataObject); + if (Array.isArray(responseData)) { + returnData.push.apply(returnData, responseData as IDataObject[]); + } else if (responseData !== undefined) { + returnData.push(responseData as IDataObject); + } } return [this.helpers.returnJsonArray(returnData)]; } diff --git a/packages/nodes-base/nodes/Google/Task/TaskDescription.ts b/packages/nodes-base/nodes/Google/Task/TaskDescription.ts index 5b8df27097..8030f0a7f3 100644 --- a/packages/nodes-base/nodes/Google/Task/TaskDescription.ts +++ b/packages/nodes-base/nodes/Google/Task/TaskDescription.ts @@ -1,4 +1,6 @@ -import { INodeProperties } from 'n8n-workflow'; +import { + INodeProperties, +} from 'n8n-workflow'; export const taskOperations = [ { @@ -7,60 +9,66 @@ export const taskOperations = [ type: 'options', displayOptions: { show: { - resource: ['task'] - } + resource: [ + 'task', + ], + }, }, options: [ { name: 'Create', value: 'create', - description: 'Add a task to tasklist' + description: 'Add a task to tasklist', }, { name: 'Delete', value: 'delete', - description: 'Delete a task' + description: 'Delete a task', }, { name: 'Get', value: 'get', - description: 'Retrieve a task' + description: 'Retrieve a task', }, { name: 'Get All', value: 'getAll', - description: 'Retrieve all tasks from a tasklist' + description: 'Retrieve all tasks from a tasklist', }, { name: 'Update', value: 'update', - description: 'Update a task' + description: 'Update a task', } ], default: 'create', - description: 'The operation to perform.' + description: 'The operation to perform.', } ] as INodeProperties[]; export const taskFields = [ /* -------------------------------------------------------------------------- */ - /* task:create */ + /* task:create */ /* -------------------------------------------------------------------------- */ { displayName: 'TaskList', name: 'task', type: 'options', typeOptions: { - loadOptionsMethod: 'getTasks' + loadOptionsMethod: 'getTasks', }, required: true, displayOptions: { show: { - operation: ['create'], - resource: ['task'] - } + operation: [ + 'create', + ], + resource: [ + 'task', + ], + }, }, - default: '' + default: '', }, { displayName: 'Additional Fields', @@ -70,135 +78,105 @@ export const taskFields = [ default: {}, displayOptions: { show: { - operation: ['create'], - resource: ['task'] + operation: [ + 'create', + ], + resource: [ + 'task', + ], } }, options: [ { - displayName: 'Status', - name: 'status', - type: 'options', - options: [ - { - name: 'needs Action', - value: 'needsAction' - }, - { - name: 'completed', - value: 'completed' - } - ], + displayName: 'Completion Date', + name: 'completed', + type: 'dateTime', default: '', - description: 'Current status of the task.' + description: `Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.`, }, { - displayName: 'Links', - name: 'links', - type: 'string', - typeOptions: { - multipleValues: true, - multipleValueButtonText: 'Add Link' - }, - default: '', - description: 'The links to insert in the task.' - }, - - { - displayName: 'Notes', - name: 'notes', - type: 'string', - default: '', - description: 'Additional Notes.' - }, - { - displayName: 'Title', - name: 'title', - type: 'string', - default: '', - description: 'Title of the task.' + displayName: 'Deleted', + name: 'deleted', + type: 'boolean', + default: false, + description: 'Flag indicating whether the task has been deleted.', }, { displayName: 'Due Date', name: 'dueDate', type: 'dateTime', default: '', - description: 'Due date of the task.' + description: 'Due date of the task.', }, { - displayName: 'Completion date', - name: 'completed', - type: 'dateTime', + displayName: 'Notes', + name: 'notes', + type: 'string', default: '', - description: `Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.` - }, - - { - displayName: 'Deleted status', - name: 'deleted', - type: 'boolean', - default: false, - description: 'Flag indicating whether the task has been deleted.' - }, - { - displayName: 'Hidden', - name: 'hidden', - type: 'boolean', - default: false, - description: 'Flag indicating whether the task is hidden.' + description: 'Additional Notes.', }, { displayName: 'Parent', name: 'parent', type: 'string', default: '', - description: - 'Parent task identifier.This field is omitted if it is a top-level task.' - }, - { - displayName: 'Position', - name: 'position', - type: 'string', - default: '', - description: - 'Parent task identifier.This field is omitted if it is a top-level task.' - }, - { - displayName: 'Self Link', - name: 'selfLink', - type: 'string', - default: '', - description: - 'URL pointing to this task. Used to retrieve, update, or delete this task.' + description: 'Parent task identifier. If the task is created at the top level, this parameter is omitted.', }, { displayName: 'Previous', name: 'previous', type: 'string', default: '', - description: - 'Previous sibling task identifier. If the task is created at the first position among its siblings, this parameter is omitted.' - } - ] + description: 'Previous sibling task identifier. If the task is created at the first position among its siblings, this parameter is omitted.', + }, + { + displayName: 'Status', + name: 'status', + type: 'options', + options: [ + { + name: 'Needs Action', + value: 'needsAction', + }, + { + name: 'Completed', + value: 'completed', + } + ], + default: '', + description: 'Current status of the task.', + }, + { + displayName: 'Title', + name: 'title', + type: 'string', + default: '', + description: 'Title of the task.', + }, + ], }, /* -------------------------------------------------------------------------- */ - /* task:delete */ + /* task:delete */ /* -------------------------------------------------------------------------- */ { displayName: 'TaskList', name: 'task', type: 'options', typeOptions: { - loadOptionsMethod: 'getTasks' + loadOptionsMethod: 'getTasks', }, required: true, displayOptions: { show: { - operation: ['delete'], - resource: ['task'] - } + operation: [ + 'delete', + ], + resource: [ + 'task', + ], + }, }, - default: '' + default: '', }, { displayName: 'Task ID', @@ -207,30 +185,38 @@ export const taskFields = [ required: true, displayOptions: { show: { - operation: ['delete'], - resource: ['task'] - } + operation: [ + 'delete', + ], + resource: [ + 'task', + ], + }, }, - default: '' + default: '', }, /* -------------------------------------------------------------------------- */ - /* task:get */ + /* task:get */ /* -------------------------------------------------------------------------- */ { displayName: 'TaskList', name: 'task', type: 'options', typeOptions: { - loadOptionsMethod: 'getTasks' + loadOptionsMethod: 'getTasks', }, required: true, displayOptions: { show: { - operation: ['get'], - resource: ['task'] + operation: [ + 'get', + ], + resource: [ + 'task', + ], } }, - default: '' + default: '', }, { displayName: 'Task ID', @@ -239,30 +225,38 @@ export const taskFields = [ required: true, displayOptions: { show: { - operation: ['get'], - resource: ['task'] - } + operation: [ + 'get', + ], + resource: [ + 'task', + ], + }, }, - default: '' + default: '', }, /* -------------------------------------------------------------------------- */ - /* task:getAll */ + /* task:getAll */ /* -------------------------------------------------------------------------- */ { displayName: 'TaskList', name: 'task', type: 'options', typeOptions: { - loadOptionsMethod: 'getTasks' + loadOptionsMethod: 'getTasks', }, required: true, displayOptions: { show: { - operation: ['getAll'], - resource: ['task'] - } + operation: [ + 'getAll', + ], + resource: [ + 'task', + ], + }, }, - default: '' + default: '', }, { displayName: 'Return All', @@ -270,13 +264,16 @@ export const taskFields = [ type: 'boolean', displayOptions: { show: { - operation: ['getAll'], - resource: ['task'] - } + operation: [ + 'getAll', + ], + resource: [ + 'task', + ], + }, }, default: false, - description: - 'If all results should be returned or only up to a given limit.' + description: 'If all results should be returned or only up to a given limit.', }, { displayName: 'Limit', @@ -284,17 +281,23 @@ export const taskFields = [ type: 'number', displayOptions: { show: { - operation: ['getAll'], - resource: ['task'], - returnAll: [false] - } + operation: [ + 'getAll', + ], + resource: [ + 'task', + ], + returnAll: [ + false, + ], + }, }, typeOptions: { minValue: 1, maxValue: 100 }, default: 20, - description: 'How many results to return.' + description: 'How many results to return.', }, { displayName: 'Additional Fields', @@ -304,105 +307,95 @@ export const taskFields = [ default: {}, displayOptions: { show: { - operation: ['getAll'], - resource: ['task'] - } + operation: [ + 'getAll', + ], + resource: [ + 'task', + ], + }, }, - options: [ { displayName: 'Completed Max', name: 'completedMax', type: 'dateTime', default: '', - description: - 'Upper bound for a task completion date (as a RFC 3339 timestamp) to filter by.' + description: 'Upper bound for a task completion date (as a RFC 3339 timestamp) to filter by.', }, { displayName: 'Completed Min', name: 'completedMin', type: 'dateTime', default: '', - description: - 'Lower bound for a task completion date (as a RFC 3339 timestamp) to filter by.' + description: 'Lower bound for a task completion date (as a RFC 3339 timestamp) to filter by.', }, { displayName: 'Due Min', name: 'dueMin', type: 'dateTime', default: '', - description: - 'Lower bound for a task due date (as a RFC 3339 timestamp) to filter by.' + description: 'Lower bound for a task due date (as a RFC 3339 timestamp) to filter by.', }, { displayName: 'Due Max', name: 'dueMax', type: 'dateTime', default: '', - description: - 'Upper bound for a task due date (as a RFC 3339 timestamp) to filter by.' + description: 'Upper bound for a task due date (as a RFC 3339 timestamp) to filter by.', }, - - { - displayName: 'Page Token', - name: 'pageToken', - type: 'string', - default: '', - description: 'Token specifying the result page to return.' - }, - { displayName: 'Show Completed', name: 'showCompleted', type: 'boolean', default: true, - description: - 'Flag indicating whether completed tasks are returned in the result' + description: 'Flag indicating whether completed tasks are returned in the result', }, { displayName: 'Show Deleted', name: 'showDeleted', type: 'boolean', default: false, - description: - 'Flag indicating whether deleted tasks are returned in the result' + description: 'Flag indicating whether deleted tasks are returned in the result', }, { displayName: 'Show Hidden', name: 'showHidden', type: 'boolean', default: false, - description: - 'Flag indicating whether hidden tasks are returned in the result' + description: 'Flag indicating whether hidden tasks are returned in the result', }, { displayName: 'Updated Min', name: 'updatedMin', - type: 'string', - - description: - 'Lower bound for a task last modification time (as a RFC 3339 timestamp) to filter by.' - } + type: 'dateTime', + default: '', + description: 'Lower bound for a task last modification time (as a RFC 3339 timestamp) to filter by.', + }, ] }, /* -------------------------------------------------------------------------- */ - /* task:update */ + /* task:update */ /* -------------------------------------------------------------------------- */ { displayName: 'TaskList', name: 'task', type: 'options', typeOptions: { - loadOptionsMethod: 'getTasks' + loadOptionsMethod: 'getTasks', }, required: true, displayOptions: { show: { - operation: ['update'], - resource: ['task'] - } + operation: [ + 'update', + ], + resource: [ + 'task', + ], + }, }, - default: '' + default: '', }, { displayName: 'Task ID', @@ -411,11 +404,15 @@ export const taskFields = [ required: true, displayOptions: { show: { - operation: ['update'], - resource: ['task'] - } + operation: [ + 'update', + ], + resource: [ + 'task', + ], + }, }, - default: '' + default: '', }, { displayName: 'Update Fields', @@ -425,115 +422,71 @@ export const taskFields = [ default: {}, displayOptions: { show: { - operation: ['update'], - resource: ['task'] + operation: [ + 'update', + ], + resource: [ + 'task', + ], } }, options: [ { - displayName: 'Status', - name: 'status', - type: 'options', - options: [ - { - name: 'needs Action', - value: 'needsAction' - }, - { - name: 'completed', - value: 'completed' - } - ], + displayName: 'Completion Date', + name: 'completed', + type: 'dateTime', default: '', - description: 'Current status of the task.' - }, - { - displayName: 'Links', - name: 'links', - type: 'string', - typeOptions: { - multipleValues: true, - multipleValueButtonText: 'Add Link' - }, - default: '', - description: 'The links to insert in the task.' + description: `Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.`, }, + { + displayName: 'Deleted', + name: 'deleted', + type: 'boolean', + default: false, + description: 'Flag indicating whether the task has been deleted.', + }, { displayName: 'Notes', name: 'notes', type: 'string', + typeOptions: { + alwaysOpenEditWindow: true, + }, default: '', - description: 'Additional Notes.' - }, - { - displayName: 'Title', - name: 'title', - type: 'string', - default: '', - description: 'Title of the task.' - }, - { - displayName: 'Due Date', - name: 'dueDate', - type: 'dateTime', - default: '', - description: 'Due date of the task.' - }, - { - displayName: 'Completion date', - name: 'completed', - type: 'dateTime', - default: '', - description: `Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.` - }, - - { - displayName: 'Deleted status', - name: 'deleted', - type: 'boolean', - default: false, - description: 'Flag indicating whether the task has been deleted.' - }, - { - displayName: 'Hidden', - name: 'hidden', - type: 'boolean', - default: false, - description: 'Flag indicating whether the task is hidden.' - }, - { - displayName: 'Parent', - name: 'parent', - type: 'string', - default: '', - description: - 'Parent task identifier.This field is omitted if it is a top-level task.' - }, - { - displayName: 'Position', - name: 'position', - type: 'string', - default: '', - description: - 'Parent task identifier.This field is omitted if it is a top-level task.' - }, - { - displayName: 'Self Link', - name: 'selfLink', - type: 'string', - default: '', - description: - 'URL pointing to this task. Used to retrieve, update, or delete this task.' + description: 'Additional Notes.', }, { displayName: 'Previous', name: 'previous', type: 'string', default: '', - description: - 'Previous sibling task identifier. If the task is created at the first position among its siblings, this parameter is omitted.' - } - ] - } + description: 'Previous sibling task identifier. If the task is created at the first position among its siblings, this parameter is omitted.', + }, + { + displayName: 'Status', + name: 'status', + type: 'options', + options: [ + { + name: 'Needs Update', + value: 'needsAction', + }, + { + name: 'Completed', + value: 'completed', + } + ], + default: '', + description: 'Current status of the task.', + }, + { + displayName: 'Title', + name: 'title', + type: 'string', + default: '', + description: 'Title of the task.', + }, + ], + }, ] as INodeProperties[]; diff --git a/packages/nodes-base/nodes/MessageBird/MessageBird.node.ts b/packages/nodes-base/nodes/MessageBird/MessageBird.node.ts index 5a7418a708..46f70c85d6 100644 --- a/packages/nodes-base/nodes/MessageBird/MessageBird.node.ts +++ b/packages/nodes-base/nodes/MessageBird/MessageBird.node.ts @@ -1,13 +1,17 @@ -import { IExecuteFunctions } from 'n8n-core'; +import { + IExecuteFunctions, + } from 'n8n-core'; import { IDataObject, INodeTypeDescription, INodeExecutionData, - INodeType + INodeType, } from 'n8n-workflow'; -import { messageBirdApiRequest } from './GenericFunctions'; +import { + messageBirdApiRequest, +} from './GenericFunctions'; export class MessageBird implements INodeType { description: INodeTypeDescription = { @@ -20,15 +24,15 @@ export class MessageBird implements INodeType { description: 'Sending SMS', defaults: { name: 'MessageBird', - color: '#2481d7' + color: '#2481d7', }, inputs: ['main'], outputs: ['main'], credentials: [ { name: 'messageBirdApi', - required: true - } + required: true, + }, ], properties: [ { @@ -38,31 +42,32 @@ export class MessageBird implements INodeType { options: [ { name: 'SMS', - value: 'sms' - } + value: 'sms', + }, ], default: 'sms', - description: 'The resource to operate on.' + description: 'The resource to operate on.', }, - { displayName: 'Operation', name: 'operation', type: 'options', displayOptions: { show: { - resource: ['sms'] - } + resource: [ + 'sms', + ], + }, }, options: [ { name: 'Send', value: 'send', - description: 'Send text messages (SMS)' - } + description: 'Send text messages (SMS)', + }, ], default: 'send', - description: 'The operation to perform.' + description: 'The operation to perform.', }, // ---------------------------------- @@ -77,11 +82,15 @@ export class MessageBird implements INodeType { required: true, displayOptions: { show: { - operation: ['send'], - resource: ['sms'] - } + operation: [ + 'send', + ], + resource: [ + 'sms', + ], + }, }, - description: 'The number from which to send the message.' + description: 'The number from which to send the message.', }, { displayName: 'To', @@ -92,13 +101,16 @@ export class MessageBird implements INodeType { required: true, displayOptions: { show: { - operation: ['send'], - resource: ['sms'] - } + operation: [ + 'send', + ], + resource: [ + 'sms', + ], + }, }, - description: 'All recipients separated by commas.' + description: 'All recipients separated by commas.', }, - { displayName: 'Message', name: 'message', @@ -107,11 +119,15 @@ export class MessageBird implements INodeType { required: true, displayOptions: { show: { - operation: ['send'], - resource: ['sms'] - } + operation: [ + 'send', + ], + resource: [ + 'sms', + ], + }, }, - description: 'The message to be send.' + description: 'The message to be send.', }, { displayName: 'Additional Fields', @@ -125,8 +141,7 @@ export class MessageBird implements INodeType { name: 'createdDatetime', type: 'dateTime', default: '', - description: - 'The date and time of the creation of the message in RFC3339 format (Y-m-dTH:i:sP).' + description: 'The date and time of the creation of the message in RFC3339 format (Y-m-dTH:i:sP).', }, { displayName: 'Datacoding', @@ -135,27 +150,26 @@ export class MessageBird implements INodeType { options: [ { name: 'Auto', - value: 'auto' + value: 'auto', }, { name: 'Plain', - value: 'plain' + value: 'plain', }, { name: 'Unicode', - value: 'unicode' - } + value: 'unicode', + }, ], default: '', - description: - 'Using unicode will limit the maximum number of characters to 70 instead of 160.' + description: 'Using unicode will limit the maximum number of characters to 70 instead of 160.', }, { displayName: 'Gateway', name: 'gateway', type: 'number', default: '', - description: 'The SMS route that is used to send the message.' + description: 'The SMS route that is used to send the message.', }, { displayName: 'Group IDs', @@ -163,8 +177,7 @@ export class MessageBird implements INodeType { placeholder: '1,2', type: 'string', default: '', - description: - 'Group IDs separated by commas, If provided recipients can be omitted.' + description: 'Group IDs separated by commas, If provided recipients can be omitted.', }, { displayName: 'Message Type', @@ -174,39 +187,36 @@ export class MessageBird implements INodeType { options: [ { name: 'Flash', - value: 1 + value: 1, }, { name: 'Normal', - value: 0 - } + value: 0, + }, ], default: 1, - description: - 'Indicated the message type. 1 is a normal message, 0 is a flash message.' + description: 'Indicated the message type. 1 is a normal message, 0 is a flash message.', }, { displayName: 'Reference', name: 'reference', type: 'string', default: '', - description: 'A client reference.' + description: 'A client reference.', }, { displayName: 'Report Url', name: 'reportUrl', type: 'string', default: '', - description: - 'The status report URL to be used on a per-message basis.
Reference is required for a status report webhook to be sent.' + description: 'The status report URL to be used on a per-message basis.
Reference is required for a status report webhook to be sent.', }, { displayName: 'Scheduled Date-time', name: 'scheduledDatetime', type: 'dateTime', default: '', - description: - 'The scheduled date and time of the message in RFC3339 format (Y-m-dTH:i:sP).' + description: 'The scheduled date and time of the message in RFC3339 format (Y-m-dTH:i:sP).', }, { displayName: 'Type', @@ -215,28 +225,26 @@ export class MessageBird implements INodeType { options: [ { name: 'Binary', - value: 'binary' + value: 'binary', }, { name: 'Flash', - value: 'flash' + value: 'flash', }, { name: 'SMS', - value: 'sms' - } + value: 'sms', + }, ], default: '', - description: - 'The type of message.
Values can be: sms, binary, or flash.' + description: 'The type of message.
Values can be: sms, binary, or flash.', }, { displayName: 'Type Details', name: 'typeDetails', type: 'string', default: '', - description: - 'A hash with extra information.
Is only used when a binary message is sent.' + description: 'A hash with extra information.
Is only used when a binary message is sent.', }, { displayName: 'Validity', @@ -244,13 +252,13 @@ export class MessageBird implements INodeType { type: 'number', default: 1, typeOptions: { - minValue: 1 + minValue: 1, }, - description: 'The amount of seconds that the message is valid.' - } - ] - } - ] + description: 'The amount of seconds that the message is valid.', + }, + ], + }, + ], }; async execute(this: IExecuteFunctions): Promise { diff --git a/packages/nodes-base/nodes/Zoom/GenericFunctions.ts b/packages/nodes-base/nodes/Zoom/GenericFunctions.ts index 0e2feda8db..e8e0247461 100644 --- a/packages/nodes-base/nodes/Zoom/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Zoom/GenericFunctions.ts @@ -9,21 +9,11 @@ import { import { IDataObject } from 'n8n-workflow'; import * as _ from 'lodash'; -export async function zoomApiRequest( - this: IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, - method: string, - resource: string, - body: object = {}, - query: object = {}, - headers: {} | undefined = undefined, - option: {} = {} -): Promise { +export async function zoomApiRequest(this: IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, method: string, resource: string, body: object = {}, query: object = {}, headers: {} | undefined = undefined, option: {} = {}): Promise { // tslint:disable-line:no-any + // tslint:disable-line:no-any - const authenticationMethod = this.getNodeParameter( - 'authentication', - 0, - 'accessToken' - ) as string; + const authenticationMethod = this.getNodeParameter('authentication', 0, 'accessToken') as string; + let options: OptionsWithUri = { method, headers: headers || { @@ -31,7 +21,7 @@ export async function zoomApiRequest( }, body, qs: query, - uri: `https://zoom.us/oauth${resource}`, + uri: `https://api.zoom.us/v2${resource}`, json: true }; options = Object.assign({}, options, option); @@ -41,6 +31,8 @@ export async function zoomApiRequest( if (Object.keys(query).length === 0) { delete options.qs; } + console.log("options"); + console.log(options); try { if (authenticationMethod === 'accessToken') { const credentials = this.getCredentials('zoomApi'); @@ -48,15 +40,24 @@ export async function zoomApiRequest( throw new Error('No credentials got returned!'); } options.headers!.Authorization = `Bearer ${credentials.accessToken}`; + console.log("options if"); + console.log(options); //@ts-ignore + return await this.helpers.request(options); } else { + console.log("options else"); + console.log(options); + let credentials = this.getCredentials('zoomOAuth2Api'); + // let oauthtoken1 = credentials!.oauthTokenData; + + + console.log(credentials); + console.log("credss"); + //@ts-ignore - return await this.helpers.requestOAuth2.call( - this, - 'zoomOAuth2Api', - options - ); + + return await this.helpers.requestOAuth2.call(this, 'zoomOAuth2Api', options); } } catch (error) { if (error.statusCode === 401) { @@ -66,16 +67,17 @@ export async function zoomApiRequest( if (error.response && error.response.body && error.response.body.message) { // Try to return the error prettier - throw new Error( - `Zoom error response [${error.statusCode}]: ${error.response.body.message}` - ); + throw new Error(`Zoom error response [${error.statusCode}]: ${error.response.body.message}`); } // If that data does not exist for some reason return the actual error throw error; } + + } + export async function zoomApiRequestAllItems( this: IExecuteFunctions | ILoadOptionsFunctions, propertyName: string, diff --git a/packages/nodes-base/nodes/Zoom/Zoom.node.ts b/packages/nodes-base/nodes/Zoom/Zoom.node.ts index ff7487a2e2..524fc08440 100644 --- a/packages/nodes-base/nodes/Zoom/Zoom.node.ts +++ b/packages/nodes-base/nodes/Zoom/Zoom.node.ts @@ -3,13 +3,18 @@ import { IDataObject, INodeExecutionData, INodeType, - INodeTypeDescription + INodeTypeDescription, } from 'n8n-workflow'; import { zoomApiRequest, zoomApiRequestAllItems, - validateJSON + validateJSON, } from './GenericFunctions'; + +import { + meetingOperations, + meetingFields, +} from './ZoomOperations'; export class Zoom implements INodeType { description: INodeTypeDescription = { displayName: 'Zoom', @@ -25,25 +30,49 @@ export class Zoom implements INodeType { icon: 'file:zoom.png', inputs: ['main'], outputs: ['main'], + // credentials: [ + // { + // name: 'zoomApi', + // required: true, + // displayOptions: { + // show: { + // authentication: ['accessToken'] + // } + // } + // }, + // { + // name: 'zoomOAuth2Api', + // required: true, + // displayOptions: { + // show: { + // authentication: ['oAuth2'] + // } + // } + // } + // ], credentials: [ { name: 'zoomApi', required: true, displayOptions: { show: { - authentication: ['accessToken'] - } - } + authentication: [ + 'accessToken', + ], + }, + }, }, { name: 'zoomOAuth2Api', required: true, displayOptions: { show: { - authentication: ['oAuth2'] - } - } - } + authentication: [ + 'oAuth2', + ], + }, + }, + }, ], properties: [ { @@ -53,15 +82,15 @@ export class Zoom implements INodeType { options: [ { name: 'Access Token', - value: 'accessToken' + value: 'accessToken', }, { name: 'OAuth2', - value: 'oAuth2' - } + value: 'oAuth2', + }, ], default: 'accessToken', - description: 'The resource to operate on.' + description: 'The resource to operate on.', }, { displayName: 'Resource', @@ -69,14 +98,17 @@ export class Zoom implements INodeType { type: 'options', options: [ { - name: 'meeting', + name: 'Meeting', value: 'meeting' } ], default: 'meeting', description: 'The resource to operate on.' - } + }, + ...meetingOperations, + ...meetingFields ] + }; async execute(this: IExecuteFunctions): Promise { @@ -85,29 +117,26 @@ export class Zoom implements INodeType { const length = (items.length as unknown) as number; let qs: IDataObject; let responseData; - const authentication = this.getNodeParameter('authentication', 0) as string; const resource = this.getNodeParameter('resource', 0) as string; - // const operation = this.getNodeParameter('operation', 0) as string; + const operation = this.getNodeParameter('operation', 0) as string; console.log(this.getCredentials('zoomOAuth2Api')); - // for (let i = 0; i < length; i++) { - // qs = {}; - // if (resource === 'channel') { - // //https://api.slack.com/methods/conversations.archive - // if (operation === 'archive') { - // const channel = this.getNodeParameter('channelId', i) as string; - // const body: IDataObject = { - // channel - // }; - // responseData = await zoomApiRequest.call( - // this, - // 'POST', - // '/conversations.archive', - // body, - // qs - // ); - // } - // } - // } + for (let i = 0; i < length; i++) { + qs = {}; + if (resource === 'meeting') { + + if (operation === 'get') { + const userId = this.getNodeParameter('userId', i) as string; + + responseData = await zoomApiRequest.call( + this, + 'GET', + `/meetings/${userId}`, + {}, + qs + ); + } + } + } if (Array.isArray(responseData)) { returnData.push.apply(returnData, responseData as IDataObject[]); } else { diff --git a/packages/nodes-base/nodes/Zoom/ZoomOperations.ts b/packages/nodes-base/nodes/Zoom/ZoomOperations.ts new file mode 100644 index 0000000000..58f1825435 --- /dev/null +++ b/packages/nodes-base/nodes/Zoom/ZoomOperations.ts @@ -0,0 +1,71 @@ +import { + INodeProperties, +} from 'n8n-workflow'; + +export const meetingOperations = [ + { + displayName: 'Operation', + name: 'operation', + type: 'options', + displayOptions: { + show: { + resource: [ + 'meeting', + ], + }, + }, + options: [ + { + name: 'Create', + value: 'create', + description: 'Create a meeting', + }, + { + name: 'Delete', + value: 'delete', + description: 'Delete a meeting', + }, + { + name: 'Get', + value: 'get', + description: 'Retrieve a meeting', + }, + { + name: 'Get All', + value: 'getAll', + description: 'Retrieve all meetings', + }, + { + name: 'Update', + value: 'update', + description: 'Update a meeting', + } + ], + default: 'create', + description: 'The operation to perform.', + } +] as INodeProperties[]; + +export const meetingFields = [ + /* -------------------------------------------------------------------------- */ + /* meeting:get */ + /* -------------------------------------------------------------------------- */ + { + displayName: 'User Id', + name: 'userId', + type: 'string', + default: '', + required: true, + displayOptions: { + show: { + operation: [ + 'get', + ], + resource: [ + 'meeting', + ], + }, + }, + description: 'User ID.', + }, +] as INodeProperties[];