Add full continue-on-fail support to all nodes (#1996)

* Update Compression node

* Update Crypto node

* Update DateTime node

* Update EditImage node

* Update EmailSend node

* Update ExecuteWorkflow node

* Update FTP node

* Update Function node

* Update FunctionItem node

* Update ExecuteCommand node

* Update OpenWeatherMap node

* Update ReadBinaryFile node

* Update ReadPdf node

* Update RssFeedRead node & add URL validation

* Update SpreadsheetFile node

* Update Switch node

* Update WriteBinaryFile node

* Update Xml node

* Update ActiveCampaign node

* Update Airtable node

* Update ApiTemplateIo node

* Update Asana node

* Update AwsLambda node

* Update AwsSns node

* Update AwsComprehend node

* Update AwsRekognition node

* Update AwsS3 node

* Fix Error item

* Update AwsSes node

* Update AwsSqs node

* Update Amqp node

* Update Bitly node

* Update Box node

* Update Brandfetch node

* Update CircleCi node

* Update Clearbit node

* Update ClickUp node

* Update Cockpit node

* Update CoinGecko node

* Update Contentful node

* Update ConvertKit node

* Update Cortex node

* Update CustomerIo node

* Update DeepL node

* Update Demio node

* Update Disqus node

* Update Drift node

* Update Dropbox node

* Update GetResponse node

* Refactor & Update Ghost node

* Update Github node

* Update Gitlab node

* Update GoogleAnalytics node

* Update GoogleBooks node

* Update GoogleCalendar node

* Update GoogleDrive node

* Update Gmail node

* Update GoogleSheets node

* Update GoogleSlides node

* Update GoogleTasks node

* Update Gotify node

* Update GraphQL node

* Update HackerNews node

* Update Harvest node

* Update HtmlExtract node

* Update Hubspot node

* Update Hunter node

* Update Intercom node

* Update Kafka node

* Refactor & update Line node

* Update LinkedIn node

* Update Mailchimp node

* Update Mandrill node

* Update Matrix node

* Update Mautic node

* Update Medium node

* Update MessageBird node

* Update Mindee node

* Update Mocean node

* Update MondayCom node

* Update MicrosoftExcel node

* Update MicrosoftOneDrive node

* Update MicrosoftOutlook node

* Update Affinity node

* Update Chargebee node

* Update Discourse node

* Update Freshdesk node

* Update YouTube node

* Update InvoiceNinja node

* Update MailerLite node

* Update Mailgun node

* Update Mailjet node

* Update Mattermost node

* Update Nasa node

* Update NextCloud node

* Update OpenThesaurus node

* Update Orbit node

* Update PagerDuty node

* Update PayPal node

* Update Peekalink node

* Update Phantombuster node

* Update PostHog node

* Update ProfitWell node

* Refactor & Update Pushbullet node

* Update QuickBooks node

* Update Raindrop node

* Update Reddit node

* Update Rocketchat node

* Update S3 node

* Update Salesforce node

* Update SendGrid node

* Update SentryIo node

* Update Shopify node

* Update Signl4 node

* Update Slack node

* Update Spontit node

* Update Spotify node

* Update Storyblok node

* Refactor & Update Strapi node

* Refactor & Update Strava node

* Update Taiga node

* Refactor & update Tapfiliate node

* Update Telegram node

* Update TheHive node

* Update Todoist node

* Update TravisCi node

* Update Trello node

* Update Twilio node

* Update Twist node

* Update Twitter node

* Update Uplead node

* Update UProc node

* Update Vero node

* Update Webflow node

* Update Wekan node

* Update Wordpress node

* Update Xero node

* Update Yourls node

* Update Zendesk node

* Update ZohoCrm node

* Refactor & Update Zoom node

* Update Zulip node

* Update Clockify node

* Update MongoDb node

* Update MySql node

* Update MicrosoftTeams node

* Update Stackby node

* Refactor Discourse node

* Support corner-case in Github node update

* Support corner-case in Gitlab node update

* Refactor & Update GoogleContacts node

* Refactor Mindee node

* Update Coda node

* Lint fixes

* Update Beeminder node

* Update Google Firebase RealtimeDatabase node

* Update HelpScout node

* Update Mailcheck node

* Update Paddle node

* Update Pipedrive node

* Update Pushover node

* Update Segment node

* Refactor & Update Vonage node

* Added new conditions to warnings on execute batch cmd

* Added keep only properties flag

* Fixed code for keep only props

* Added dependencies for image editing

Co-authored-by: dali <servfrdali@yahoo.fr>
This commit is contained in:
Omar Ajoue
2021-07-20 08:58:54 +02:00
committed by GitHub
parent 6a9401aa51
commit d6239d5bfb
159 changed files with 35795 additions and 33847 deletions

View File

@@ -31,6 +31,14 @@ jobs:
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
-
name: Install dependencies
run: |
apt update -y
echo 'tzdata tzdata/Areas select Europe' | debconf-set-selections
echo 'tzdata tzdata/Zones/Europe select Paris' | debconf-set-selections
DEBIAN_FRONTEND="noninteractive" apt-get install -y graphicsmagick
shell: bash
-
name: npm install and build
run: |

View File

@@ -42,6 +42,7 @@ interface INodeSpecialCases {
interface INodeSpecialCase {
ignoredProperties?: string[];
capResults?: number;
keepOnlyProperties?: string[];
}
type ExecutionStatus = 'success' | 'error' | 'warning' | 'running';

View File

@@ -45,6 +45,10 @@ import {
LoggerProxy,
} from 'n8n-workflow';
import {
pick,
} from 'lodash';
export class ExecuteBatch extends Command {
static description = '\nExecutes multiple workflows once';
@@ -166,6 +170,8 @@ export class ExecuteBatch extends Command {
'429',
'econnrefused',
'missing a required parameter',
'insufficient credit balance',
'request timed out',
];
errorMessage = errorMessage.toLowerCase();
@@ -600,6 +606,8 @@ export class ExecuteBatch extends Command {
nodeEdgeCases[node.name].capResults = parseInt(parts[1], 10);
} else if (parts[0] === 'IGNORED_PROPERTIES') {
nodeEdgeCases[node.name].ignoredProperties = parts[1].split(',').map(property => property.trim());
} else if (parts[0] === 'KEEP_ONLY_PROPERTIES') {
nodeEdgeCases[node.name].keepOnlyProperties = parts[1].split(',').map(property => property.trim());
}
}
});
@@ -701,6 +709,11 @@ export class ExecuteBatch extends Command {
nodeEdgeCases[nodeName].ignoredProperties!.forEach(ignoredProperty => delete executionData.json[ignoredProperty]);
}
let keepOnlyFields = [] as string[];
if (nodeEdgeCases[nodeName] !== undefined && nodeEdgeCases[nodeName].keepOnlyProperties !== undefined) {
keepOnlyFields = nodeEdgeCases[nodeName].keepOnlyProperties!;
}
executionData.json = keepOnlyFields.length > 0 ? pick(executionData.json, keepOnlyFields) : executionData.json;
const jsonProperties = executionData.json;
const nodeOutputAttributes = Object.keys(jsonProperties);

View File

@@ -333,6 +333,8 @@ export class ActiveCampaign implements INodeType {
let dataKey: string | undefined;
for (let i = 0; i < items.length; i++) {
try {
dataKey = undefined;
resource = this.getNodeParameter('resource', 0) as string;
operation = this.getNodeParameter('operation', 0) as string;
@@ -1184,6 +1186,13 @@ export class ActiveCampaign implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -162,6 +162,7 @@ export class Affinity implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'list') {
//https://api-docs.affinity.co/#get-a-specific-list
if (operation === 'get') {
@@ -353,6 +354,13 @@ export class Affinity implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -489,6 +489,7 @@ export class Airtable implements INodeType {
let bulkSize = 10;
for (let i = 0; i < items.length; i++) {
try {
addAllFields = this.getNodeParameter('addAllFields', i) as boolean;
options = this.getNodeParameter('options', i, {}) as IDataObject;
bulkSize = options.bulkSize as number || bulkSize;
@@ -527,6 +528,13 @@ export class Airtable implements INodeType {
// empty rows
rows.length = 0;
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
} else if (operation === 'delete') {
@@ -537,6 +545,7 @@ export class Airtable implements INodeType {
const bulkSize = options.bulkSize as number || 10;
for (let i = 0; i < items.length; i++) {
try {
let id: string;
id = this.getNodeParameter('id', i) as string;
@@ -560,13 +569,20 @@ export class Airtable implements INodeType {
// empty rows
rows.length = 0;
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
} else if (operation === 'list') {
// ----------------------------------
// list
// ----------------------------------
try {
requestMethod = 'GET';
endpoint = `${application}/${table}`;
@@ -598,6 +614,13 @@ export class Airtable implements INodeType {
const data = await downloadRecordAttachments.call(this, responseData.records, downloadFieldNames);
return [data];
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
} else {
throw error;
}
}
} else if (operation === 'read') {
// ----------------------------------
@@ -619,10 +642,17 @@ export class Airtable implements INodeType {
// functionality in core should make it easy to make requests
// according to specific rules like not more than 5 requests
// per seconds.
try {
responseData = await apiRequest.call(this, requestMethod, endpoint, body, qs);
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
} else if (operation === 'update') {
@@ -640,6 +670,7 @@ export class Airtable implements INodeType {
let bulkSize = 10;
for (let i = 0; i < items.length; i++) {
try {
updateAllFields = this.getNodeParameter('updateAllFields', i) as boolean;
options = this.getNodeParameter('options', i, {}) as IDataObject;
bulkSize = options.bulkSize as number || bulkSize;
@@ -695,6 +726,13 @@ export class Airtable implements INodeType {
// empty rows
rows.length = 0;
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
} else {

View File

@@ -97,6 +97,7 @@ export class Amqp implements INodeType {
};
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
try {
const credentials = this.getCredentials('amqp');
if (!credentials) {
throw new NodeOperationError(this.getNode(), 'Credentials are mandatory!');
@@ -176,5 +177,12 @@ export class Amqp implements INodeType {
conn.close();
return [this.helpers.returnJsonArray(responseData)];
} catch (error) {
if (this.continueOnFail()) {
return [this.helpers.returnJsonArray({ error: error.message })];
}else{
throw error;
}
}
}
}

View File

@@ -420,10 +420,17 @@ export class ApiTemplateIo implements INodeType {
// ----------------------------------
for (let i = 0; i < length; i++) {
try {
responseData = await apiTemplateIoApiRequest.call(this, 'GET', '/account-information');
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({json:{ error: error.message }});
continue;
}
throw error;
}
}
}
@@ -442,6 +449,7 @@ export class ApiTemplateIo implements INodeType {
// https://docs.apitemplate.io/reference/api-reference.html#create-an-image-jpeg-and-png
for (let i = 0; i < length; i++) {
try {
const jsonParameters = this.getNodeParameter('jsonParameters', i) as boolean;
const options = this.getNodeParameter('options', i) as IDataObject;
@@ -488,6 +496,13 @@ export class ApiTemplateIo implements INodeType {
};
}
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({json:{ error: error.message }});
continue;
}
throw error;
}
}
if (download === true) {
@@ -511,6 +526,7 @@ export class ApiTemplateIo implements INodeType {
const download = this.getNodeParameter('download', 0) as boolean;
for (let i = 0; i < length; i++) {
try {
const jsonParameters = this.getNodeParameter('jsonParameters', i) as boolean;
const options = this.getNodeParameter('options', i) as IDataObject;
@@ -550,6 +566,13 @@ export class ApiTemplateIo implements INodeType {
};
}
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({json:{ error: error.message }});
continue;
}
throw error;
}
}
if (download === true) {
return this.prepareOutputData(returnData as unknown as INodeExecutionData[]);

View File

@@ -1842,6 +1842,7 @@ export class Asana implements INodeType {
let responseData;
for (let i = 0; i < items.length; i++) {
try {
body = {};
qs = {};
@@ -2254,6 +2255,13 @@ export class Asana implements INodeType {
} else {
returnData.push(responseData);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -172,6 +172,7 @@ export class AwsLambda implements INodeType {
const returnData: IDataObject[] = [];
for (let i = 0; i < items.length; i++) {
try {
const params = {
FunctionName: this.getNodeParameter('function', i) as string,
InvocationType: this.getNodeParameter('invocationType', i) as string,
@@ -204,7 +205,13 @@ export class AwsLambda implements INodeType {
result: responseData,
} as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -140,6 +140,7 @@ export class AwsSns implements INodeType {
const returnData: IDataObject[] = [];
for (let i = 0; i < items.length; i++) {
try {
const params = [
'TopicArn=' + this.getNodeParameter('topic', i) as string,
'Subject=' + this.getNodeParameter('subject', i) as string,
@@ -149,6 +150,13 @@ export class AwsSns implements INodeType {
const responseData = await awsApiRequestSOAP.call(this, 'sns', 'GET', '/?Action=Publish&' + params.join('&'));
returnData.push({MessageId: responseData.PublishResponse.PublishResult.MessageId} as IDataObject);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -213,6 +213,7 @@ export class AwsComprehend implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < items.length; i++) {
try {
if (resource === 'text') {
//https://docs.aws.amazon.com/comprehend/latest/dg/API_DetectDominantLanguage.html
if (operation === 'detectDominantLanguage') {
@@ -271,6 +272,13 @@ export class AwsComprehend implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -383,6 +383,7 @@ export class AwsRekognition implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < items.length; i++) {
try {
if (resource === 'image') {
//https://docs.aws.amazon.com/rekognition/latest/dg/API_DetectModerationLabels.html#API_DetectModerationLabels_RequestSyntax
if (operation === 'analyze') {
@@ -507,6 +508,13 @@ export class AwsRekognition implements INodeType {
} else {
returnData.push(responseData);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -111,6 +111,7 @@ export class AwsS3 implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < items.length; i++) {
const headers: IDataObject = {};
try {
if (resource === 'bucket') {
//https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html
if (operation === 'create') {
@@ -630,6 +631,13 @@ export class AwsS3 implements INodeType {
returnData.push({ success: true });
}
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
if (resource === 'file' && operation === 'download') {
// For file downloads the files get attached to the existing items

View File

@@ -934,7 +934,7 @@ export class AwsSes implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < items.length; i++) {
try {
if (resource === 'customVerificationEmail') {
if (operation === 'create') {
@@ -1305,6 +1305,13 @@ export class AwsSes implements INodeType {
returnData.push(responseData as IDataObject);
}
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -316,6 +316,7 @@ export class AwsSqs implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < items.length; i++) {
try {
const queueUrl = this.getNodeParameter('queue', i) as string;
const queuePath = new URL(queueUrl).pathname;
@@ -394,6 +395,13 @@ export class AwsSqs implements INodeType {
const result = responseData.SendMessageResponse.SendMessageResult;
returnData.push(result as IDataObject);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.description });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -340,7 +340,7 @@ export class Beeminder implements INodeType {
for (let i = 0; i < length; i++) {
try {
if (resource === 'datapoint') {
const goalName = this.getNodeParameter('goalName', i) as string;
if (operation === 'create') {
@@ -393,7 +393,13 @@ export class Beeminder implements INodeType {
results = await deleteDatapoint.call(this, data);
}
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
if (Array.isArray(results)) {
returnData.push.apply(returnData, results as IDataObject[]);
} else {

View File

@@ -141,6 +141,7 @@ export class Bitly implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'link') {
if (operation === 'create') {
const longUrl = this.getNodeParameter('longUrl', i) as string;
@@ -217,6 +218,13 @@ export class Bitly implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -89,6 +89,7 @@ export class Box implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'file') {
// https://developer.box.com/reference/post-files-id-copy
if (operation === 'copy') {
@@ -480,6 +481,13 @@ export class Box implements INodeType {
returnData.push(responseData as IDataObject);
}
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
if (resource === 'file' && operation === 'download') {
// For file downloads the files get attached to the existing items

View File

@@ -167,6 +167,7 @@ export class Brandfetch implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
const responseData = [];
for (let i = 0; i < length; i++) {
try {
if (operation === 'logo') {
const domain = this.getNodeParameter('domain', i) as string;
const download = this.getNodeParameter('download', i) as boolean;
@@ -259,6 +260,13 @@ export class Brandfetch implements INodeType {
const response = await brandfetchApiRequest.call(this, 'POST', `/industry`, body);
responseData.push.apply(responseData, response.response);
}
} catch (error) {
if (this.continueOnFail()) {
responseData.push({ error: error.message });
continue;
}
throw error;
}
}
if (operation === 'logo' && this.getNodeParameter('download', 0) === true) {

View File

@@ -502,7 +502,7 @@ export class Chargebee implements INodeType {
let qs: IDataObject;
for (let i = 0; i < items.length; i++) {
try {
item = items[i];
const resource = this.getNodeParameter('resource', i) as string;
const operation = this.getNodeParameter('operation', i) as string;
@@ -636,6 +636,13 @@ export class Chargebee implements INodeType {
} else {
returnData.push(responseData);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -69,6 +69,7 @@ export class CircleCi implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'pipeline') {
if (operation === 'get') {
const vcs = this.getNodeParameter('vcs', i) as string;
@@ -134,6 +135,13 @@ export class CircleCi implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -81,6 +81,7 @@ export class Clearbit implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'person') {
if (operation === 'enrich') {
const email = this.getNodeParameter('email', i) as string;
@@ -146,6 +147,13 @@ export class Clearbit implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -482,6 +482,7 @@ export class ClickUp implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'checklist') {
if (operation === 'create') {
const taskId = this.getNodeParameter('task', i) as string;
@@ -1427,6 +1428,13 @@ export class ClickUp implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -233,6 +233,7 @@ export class Clockify implements INodeType {
for (let i = 0; i < length; i++) {
try {
if (resource === 'project') {
if (operation === 'create') {
@@ -570,7 +571,6 @@ export class Clockify implements INodeType {
);
}
}
}
if (Array.isArray(responseData)) {
@@ -580,6 +580,14 @@ export class Clockify implements INodeType {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -120,6 +120,7 @@ export class Cockpit implements INodeType {
let responseData;
for (let i = 0; i < length; i++) {
try {
if (resource === 'collection') {
const collectionName = this.getNodeParameter('collection', i) as string;
@@ -163,6 +164,13 @@ export class Cockpit implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -231,6 +231,7 @@ export class Coda implements INodeType {
if (resource === 'table') {
// https://coda.io/developers/apis/v1beta1#operation/upsertRows
if (operation === 'createRow') {
try {
const sendData = {} as IDataObject;
for (let i = 0; i < items.length; i++) {
qs = {};
@@ -273,13 +274,19 @@ export class Coda implements INodeType {
for (const endpoint of Object.keys(sendData)) {
await codaApiRequest.call(this, 'POST', endpoint, sendData[endpoint], (sendData[endpoint]! as IDataObject).qs! as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
return [this.helpers.returnJsonArray({ error: error.message })];
}
throw error;
}
// Return the incoming data
return [items];
}
// https://coda.io/developers/apis/v1beta1#operation/getRow
if (operation === 'getRow') {
for (let i = 0; i < items.length; i++) {
try {
const docId = this.getNodeParameter('docId', i) as string;
const tableId = this.getNodeParameter('tableId', i) as string;
const rowId = this.getNodeParameter('rowId', i) as string;
@@ -304,6 +311,13 @@ export class Coda implements INodeType {
...responseData.values,
});
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
@@ -341,6 +355,9 @@ export class Coda implements INodeType {
responseData = responseData.items;
}
} catch (error) {
if (this.continueOnFail()) {
return [this.helpers.returnJsonArray({ error: error.message })];
}
throw new NodeApiError(this.getNode(), error);
}
@@ -358,6 +375,7 @@ export class Coda implements INodeType {
}
// https://coda.io/developers/apis/v1beta1#operation/deleteRows
if (operation === 'deleteRow') {
try {
const sendData = {} as IDataObject;
for (let i = 0; i < items.length; i++) {
const docId = this.getNodeParameter('docId', i) as string;
@@ -377,13 +395,19 @@ export class Coda implements INodeType {
for (const endpoint of Object.keys(sendData)) {
await codaApiRequest.call(this, 'DELETE', endpoint, { rowIds: sendData[endpoint]}, qs);
}
} catch (error) {
if (this.continueOnFail()) {
return [this.helpers.returnJsonArray({ error: error.message })];
}
throw error;
}
// Return the incoming data
return [items];
}
// https://coda.io/developers/apis/v1beta1#operation/pushButton
if (operation === 'pushButton') {
for (let i = 0; i < items.length; i++) {
try {
const docId = this.getNodeParameter('docId', i) as string;
const tableId = this.getNodeParameter('tableId', i) as string;
const rowId = this.getNodeParameter('rowId', i) as string;
@@ -391,24 +415,40 @@ export class Coda implements INodeType {
const endpoint = `/docs/${docId}/tables/${tableId}/rows/${rowId}/buttons/${columnId}`;
responseData = await codaApiRequest.call(this, 'POST', endpoint, {});
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
//https://coda.io/developers/apis/v1beta1#operation/getColumn
if (operation === 'getColumn') {
for (let i = 0; i < items.length; i++) {
try {
const docId = this.getNodeParameter('docId', i) as string;
const tableId = this.getNodeParameter('tableId', i) as string;
const columnId = this.getNodeParameter('columnId', i) as string;
const endpoint = `/docs/${docId}/tables/${tableId}/columns/${columnId}`;
responseData = await codaApiRequest.call(this, 'GET', endpoint, {});
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
//https://coda.io/developers/apis/v1beta1#operation/listColumns
if (operation === 'getAllColumns') {
for (let i = 0; i < items.length; i++) {
try {
const returnAll = this.getNodeParameter('returnAll', 0) as boolean;
const docId = this.getNodeParameter('docId', i) as string;
const tableId = this.getNodeParameter('tableId', i) as string;
@@ -421,6 +461,13 @@ export class Coda implements INodeType {
responseData = responseData.items;
}
returnData.push.apply(returnData,responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
@@ -429,17 +476,26 @@ export class Coda implements INodeType {
//https://coda.io/developers/apis/v1beta1#operation/getFormula
if (operation === 'get') {
for (let i = 0; i < items.length; i++) {
try {
const docId = this.getNodeParameter('docId', i) as string;
const formulaId = this.getNodeParameter('formulaId', i) as string;
const endpoint = `/docs/${docId}/formulas/${formulaId}`;
responseData = await codaApiRequest.call(this, 'GET', endpoint, {});
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
//https://coda.io/developers/apis/v1beta1#operation/listFormulas
if (operation === 'getAll') {
for (let i = 0; i < items.length; i++) {
try {
const returnAll = this.getNodeParameter('returnAll', 0) as boolean;
const docId = this.getNodeParameter('docId', i) as string;
const endpoint = `/docs/${docId}/formulas`;
@@ -451,6 +507,13 @@ export class Coda implements INodeType {
responseData = responseData.items;
}
returnData.push.apply(returnData,responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
@@ -459,17 +522,26 @@ export class Coda implements INodeType {
//https://coda.io/developers/apis/v1beta1#operation/getControl
if (operation === 'get') {
for (let i = 0; i < items.length; i++) {
try {
const docId = this.getNodeParameter('docId', i) as string;
const controlId = this.getNodeParameter('controlId', i) as string;
const endpoint = `/docs/${docId}/controls/${controlId}`;
responseData = await codaApiRequest.call(this, 'GET', endpoint, {});
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
//https://coda.io/developers/apis/v1beta1#operation/listControls
if (operation === 'getAll') {
for (let i = 0; i < items.length; i++) {
try {
const returnAll = this.getNodeParameter('returnAll', 0) as boolean;
const docId = this.getNodeParameter('docId', i) as string;
const endpoint = `/docs/${docId}/controls`;
@@ -481,6 +553,13 @@ export class Coda implements INodeType {
responseData = responseData.items;
}
returnData.push.apply(returnData,responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
@@ -500,6 +579,7 @@ export class Coda implements INodeType {
//https://coda.io/developers/apis/v1beta1#operation/listViews
if (operation === 'getAll') {
for (let i = 0; i < items.length; i++) {
try {
const returnAll = this.getNodeParameter('returnAll', 0) as boolean;
const docId = this.getNodeParameter('docId', i) as string;
const endpoint = `/docs/${docId}/tables?tableTypes=view`;
@@ -511,6 +591,13 @@ export class Coda implements INodeType {
responseData = responseData.items;
}
returnData.push.apply(returnData,responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
@@ -543,6 +630,9 @@ export class Coda implements INodeType {
responseData = responseData.items;
}
} catch (error) {
if (this.continueOnFail()) {
return [this.helpers.returnJsonArray({ error: error.message })];
}
throw new NodeApiError(this.getNode(), error);
}
@@ -561,18 +651,27 @@ export class Coda implements INodeType {
//https://coda.io/developers/apis/v1beta1#operation/deleteViewRow
if (operation === 'deleteViewRow') {
for (let i = 0; i < items.length; i++) {
try {
const docId = this.getNodeParameter('docId', i) as string;
const viewId = this.getNodeParameter('viewId', i) as string;
const rowId = this.getNodeParameter('rowId', i) as string;
const endpoint = `/docs/${docId}/tables/${viewId}/rows/${rowId}`;
responseData = await codaApiRequest.call(this, 'DELETE', endpoint);
returnData.push.apply(returnData,responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
//https://coda.io/developers/apis/v1beta1#operation/pushViewButton
if (operation === 'pushViewButton') {
for (let i = 0; i < items.length; i++) {
try {
const docId = this.getNodeParameter('docId', i) as string;
const viewId = this.getNodeParameter('viewId', i) as string;
const rowId = this.getNodeParameter('rowId', i) as string;
@@ -580,11 +679,19 @@ export class Coda implements INodeType {
const endpoint = `/docs/${docId}/tables/${viewId}/rows/${rowId}/buttons/${columnId}`;
responseData = await codaApiRequest.call(this, 'POST', endpoint);
returnData.push.apply(returnData,responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
if (operation === 'getAllViewColumns') {
for (let i = 0; i < items.length; i++) {
try {
const returnAll = this.getNodeParameter('returnAll', 0) as boolean;
const docId = this.getNodeParameter('docId', i) as string;
const viewId = this.getNodeParameter('viewId', i) as string;
@@ -597,12 +704,20 @@ export class Coda implements INodeType {
responseData = responseData.items;
}
returnData.push.apply(returnData,responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
//https://coda.io/developers/apis/v1beta1#operation/updateViewRow
if (operation === 'updateViewRow') {
for (let i = 0; i < items.length; i++) {
try {
qs = {};
const docId = this.getNodeParameter('docId', i) as string;
const viewId = this.getNodeParameter('viewId', i) as string;
@@ -629,6 +744,13 @@ export class Coda implements INodeType {
cells,
};
await codaApiRequest.call(this, 'PUT', endpoint, body, qs);
} catch (error) {
if (this.continueOnFail()) {
items[i].json = { error: error.message };
continue;
}
throw error;
}
}
return [items];
}

View File

@@ -169,7 +169,7 @@ export class CoinGecko implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'coin') {
//https://www.coingecko.com/api/documentations/v3#/coins/get_coins__id_
//https://www.coingecko.com/api/documentations/v3#/contract/get_coins__id__contract__contract_address_
@@ -531,6 +531,13 @@ export class CoinGecko implements INodeType {
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -205,6 +205,7 @@ export class Compression implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (operation === 'decompress') {
const binaryPropertyNames = (this.getNodeParameter('binaryPropertyName', 0) as string).split(',').map(key => key.trim());
@@ -322,6 +323,14 @@ export class Compression implements INodeType {
});
}
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({json:{ error: error.message }});
continue;
}
throw error;
}
}
return this.prepareOutputData(returnData);

View File

@@ -101,6 +101,7 @@ export class Contentful implements INodeType {
const qs: Record<string, string | number> = {};
for (let i = 0; i < items.length; i++) {
try {
if (resource === 'space') {
if (operation === 'get') {
@@ -320,6 +321,13 @@ export class Contentful implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -185,6 +185,8 @@ export class ConvertKit implements INodeType {
for (let i = 0; i < items.length; i++) {
try {
if (resource === 'customField') {
if (operation === 'create') {
@@ -479,6 +481,14 @@ export class ConvertKit implements INodeType {
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -204,6 +204,8 @@ export class Cortex implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'analyzer') {
//https://github.com/TheHive-Project/CortexDocs/blob/master/api/api-guide.md#run
if (operation === 'execute') {
@@ -463,6 +465,14 @@ export class Cortex implements INodeType {
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -364,6 +364,9 @@ export class Crypto implements INodeType {
let item: INodeExecutionData;
for (let i = 0; i < length; i++) {
try {
item = items[i];
const dataPropertyName = this.getNodeParameter('dataPropertyName', i) as string;
const value = this.getNodeParameter('value', i) as string;
@@ -410,6 +413,14 @@ export class Crypto implements INodeType {
set(newItem, `json.${dataPropertyName}`, newValue);
returnData.push(newItem);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({json:{ error: error.message }});
continue;
}
throw error;
}
}
return this.prepareOutputData(returnData);
}

View File

@@ -102,6 +102,8 @@ export class CustomerIo implements INodeType {
let responseData;
for (let i = 0; i < items.length; i++) {
try {
if (resource === 'campaign') {
if (operation === 'get') {
const campaignId = this.getNodeParameter('campaignId', i) as number;
@@ -336,6 +338,14 @@ export class CustomerIo implements INodeType {
} else {
returnData.push(responseData as unknown as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -393,6 +393,8 @@ export class DateTime implements INodeType {
let item: INodeExecutionData;
for (let i = 0; i < length; i++) {
try {
const action = this.getNodeParameter('action', 0) as string;
item = items[i];
@@ -498,6 +500,14 @@ export class DateTime implements INodeType {
returnData.push(newItem);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({json:{ error: error.message }});
continue;
}
throw error;
}
}
return this.prepareOutputData(returnData);

View File

@@ -108,7 +108,7 @@ export class DeepL implements INodeType {
const responseData = [];
for (let i = 0; i < length; i++) {
try {
const resource = this.getNodeParameter('resource', i) as string;
const operation = this.getNodeParameter('operation', i) as string;
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
@@ -131,6 +131,13 @@ export class DeepL implements INodeType {
responseData.push(response.translations[0]);
}
}
} catch (error) {
if (this.continueOnFail()) {
responseData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(responseData)];

View File

@@ -139,6 +139,7 @@ export class Demio implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'event') {
if (operation === 'get') {
const id = this.getNodeParameter('eventId', i) as string;
@@ -205,6 +206,13 @@ export class Demio implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -150,6 +150,7 @@ export class Discourse implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'category') {
//https://docs.discourse.org/#tag/Categories/paths/~1categories.json/post
if (operation === 'create') {
@@ -489,12 +490,19 @@ export class Discourse implements INodeType {
);
}
}
}
if (Array.isArray(responseData)) {
returnData.push.apply(returnData, responseData as IDataObject[]);
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
}

View File

@@ -647,6 +647,7 @@ export class Disqus implements INodeType {
for (let i = 0; i < items.length; i++) {
try {
body = {};
qs = {};
@@ -778,6 +779,13 @@ export class Disqus implements INodeType {
} else {
throw new NodeOperationError(this.getNode(), `The resource "${resource}" is not known!`);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -102,6 +102,7 @@ export class Drift implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'contact') {
//https://devdocs.drift.com/docs/creating-a-contact
if (operation === 'create') {
@@ -159,6 +160,13 @@ export class Drift implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -811,6 +811,7 @@ export class Dropbox implements INodeType {
}
for (let i = 0; i < items.length; i++) {
try {
body = {};
if (resource === 'file') {
@@ -1064,6 +1065,17 @@ export class Dropbox implements INodeType {
} else {
returnData.push(responseData);
}
} catch (error) {
if (this.continueOnFail()) {
if (resource === 'file' && operation === 'download'){
items[i].json = { error: error.message };
}else{
returnData.push({ error: error.message });
}
continue;
}
throw error;
}
}
if (resource === 'file' && operation === 'download') {

View File

@@ -957,6 +957,9 @@ export class EditImage implements INodeType {
let item: INodeExecutionData;
for (let itemIndex = 0; itemIndex < length; itemIndex++) {
try {
item = items[itemIndex];
@@ -1243,6 +1246,13 @@ export class EditImage implements INodeType {
});
})));
} catch (error) {
if (this.continueOnFail()) {
returnData.push({json:{ error: error.message }});
continue;
}
throw error;
}
}
return this.prepareOutputData(returnData);
}

View File

@@ -133,6 +133,7 @@ export class EmailSend implements INodeType {
let item: INodeExecutionData;
for (let itemIndex = 0; itemIndex < length; itemIndex++) {
try {
item = items[itemIndex];
@@ -211,6 +212,14 @@ export class EmailSend implements INodeType {
const info = await transporter.sendMail(mailOptions);
returnData.push({ json: info as unknown as IDataObject });
}catch (error) {
if (this.continueOnFail()) {
returnData.push({json:{ error: error.message }});
continue;
}
throw error;
}
}
return this.prepareOutputData(returnData);

View File

@@ -3,6 +3,7 @@ import {
INodeExecutionData,
INodeType,
INodeTypeDescription,
NodeOperationError
} from 'n8n-workflow';
import { exec } from 'child_process';
@@ -24,6 +25,7 @@ export interface IExecReturnData {
*/
function execPromise(command: string): Promise<IExecReturnData> {
const returnData: IExecReturnData = {
error: undefined,
exitCode: 0,
stderr: '',
stdout: '',
@@ -94,15 +96,22 @@ export class ExecuteCommand implements INodeType {
const returnItems: INodeExecutionData[] = [];
for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
try{
command = this.getNodeParameter('command', itemIndex) as string;
const {
// error, TODO: Later make it possible to select if it should fail on error or not
error,
exitCode,
stdout,
stderr,
} = await execPromise(command);
if (error !== undefined) {
throw new NodeOperationError(this.getNode(), error.message);
}
returnItems.push(
{
json: {
@@ -112,6 +121,14 @@ export class ExecuteCommand implements INodeType {
},
},
);
} catch (error) {
if (this.continueOnFail()) {
returnItems.push({json:{ error: error.message }});
continue;
}
throw error;
}
}
return this.prepareOutputData(returnItems);

View File

@@ -149,6 +149,9 @@ export class ExecuteWorkflow implements INodeType {
const source = this.getNodeParameter('source', 0) as string;
const workflowInfo: IExecuteWorkflowInfo = {};
try {
if (source === 'database') {
// Read workflow from database
workflowInfo.id = this.getNodeParameter('workflowId', 0) as string;
@@ -197,5 +200,13 @@ export class ExecuteWorkflow implements INodeType {
const receivedData = await this.executeWorkflow(workflowInfo, items);
return receivedData;
} catch (error) {
if (this.continueOnFail()) {
return this.prepareOutputData([{json:{ error: error.message }}]);
}
throw error;
}
}
}

View File

@@ -1148,6 +1148,7 @@ export class Freshdesk implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < items.length; i++) {
try {
if (resource === 'ticket') {
//https://developers.freshdesk.com/api/#create_ticket
if (operation === 'create') {
@@ -1426,6 +1427,13 @@ export class Freshdesk implements INodeType {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -378,6 +378,7 @@ export class Ftp implements INodeType {
} else {
credentials = this.getCredentials('ftp');
}
try {
if (credentials === undefined) {
throw new NodeOperationError(this.getNode(), 'Failed to get credentials!');
@@ -635,6 +636,13 @@ export class Ftp implements INodeType {
await ftp!.end();
}
} catch (error) {
if (this.continueOnFail()) {
return this.prepareOutputData([{json:{ error: error.message }}]);
}
throw error;
}
return [returnItems];
}
}

View File

@@ -102,11 +102,6 @@ return items;`,
try {
// Execute the function code
items = (await vm.run(`module.exports = async function() {${functionCode}}()`, __dirname));
} catch (error) {
return Promise.reject(error);
}
// Do very basic validation of the data
if (items === undefined) {
throw new NodeOperationError(this.getNode(), 'No data got returned. Always return an Array of items!');
@@ -127,6 +122,16 @@ return items;`,
}
}
}
} catch (error) {
if (this.continueOnFail()) {
items=[{json:{ error: error.message }}];
} else {
return Promise.reject(error);
}
}
return this.prepareOutputData(items);
}

View File

@@ -58,7 +58,7 @@ return item;`,
let item: INodeExecutionData;
for (let itemIndex = 0; itemIndex < length; itemIndex++) {
try {
item = items[itemIndex];
// Copy the items as they may get changed in the functions
@@ -115,8 +115,13 @@ return item;`,
// Execute the function code
jsonData = await vm.run(`module.exports = async function() {${functionCode}}()`, __dirname);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({json:{ error: error.message }});
continue;
} else {
return Promise.reject(error);
}
}
// Do very basic validation of the data
if (jsonData === undefined) {
@@ -132,6 +137,13 @@ return item;`,
}
returnData.push(returnItem);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({json:{ error: error.message }});
continue;
}
throw error;
}
}
return this.prepareOutputData(returnData);
}

View File

@@ -169,7 +169,7 @@ export class GetResponse implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'contact') {
//https://apireference.getresponse.com/#operation/createContact
if (operation === 'create') {
@@ -314,6 +314,13 @@ export class GetResponse implements INodeType {
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -156,11 +156,12 @@ export class Ghost implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
const source = this.getNodeParameter('source', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (source === 'contentApi') {
if (resource === 'post') {
if (operation === 'get') {
for (let i = 0; i < items.length; i++) {
const by = this.getNodeParameter('by', i) as string;
const identifier = this.getNodeParameter('identifier', i) as string;
@@ -179,11 +180,10 @@ export class Ghost implements INodeType {
responseData = await ghostApiRequest.call(this, 'GET', endpoint, {}, qs);
returnData.push.apply(returnData, responseData.posts);
}
}
if (operation === 'getAll') {
for (let i = 0; i < items.length; i++) {
const returnAll = this.getNodeParameter('returnAll', 0) as boolean;
@@ -200,7 +200,7 @@ export class Ghost implements INodeType {
}
returnData.push.apply(returnData, responseData);
}
}
}
}
@@ -208,7 +208,7 @@ export class Ghost implements INodeType {
if (source === 'adminApi') {
if (resource === 'post') {
if (operation === 'create') {
for (let i = 0; i < length; i++) {
const title = this.getNodeParameter('title', i) as string;
const contentFormat = this.getNodeParameter('contentFormat', i) as string;
@@ -247,21 +247,21 @@ export class Ghost implements INodeType {
responseData = await ghostApiRequest.call(this, 'POST', '/admin/posts', { posts: [post] }, qs);
returnData.push.apply(returnData, responseData.posts);
}
}
if (operation === 'delete') {
for (let i = 0; i < length; i++) {
const postId = this.getNodeParameter('postId', i) as string;
responseData = await ghostApiRequest.call(this, 'DELETE', `/admin/posts/${postId}`);
returnData.push({ success: true });
}
}
if (operation === 'get') {
for (let i = 0; i < length; i++) {
const by = this.getNodeParameter('by', i) as string;
const identifier = this.getNodeParameter('identifier', i) as string;
@@ -280,11 +280,11 @@ export class Ghost implements INodeType {
responseData = await ghostApiRequest.call(this, 'GET', endpoint, {}, qs);
returnData.push.apply(returnData, responseData.posts);
}
}
if (operation === 'getAll') {
for (let i = 0; i < length; i++) {
const returnAll = this.getNodeParameter('returnAll', 0) as boolean;
@@ -301,11 +301,11 @@ export class Ghost implements INodeType {
}
returnData.push.apply(returnData, responseData);
}
}
if (operation === 'update') {
for (let i = 0; i < length; i++) {
const postId = this.getNodeParameter('postId', i) as string;
const contentFormat = this.getNodeParameter('contentFormat', i) as string;
@@ -344,9 +344,17 @@ export class Ghost implements INodeType {
responseData = await ghostApiRequest.call(this, 'PUT', `/admin/posts/${postId}`, { posts: [post] }, qs);
returnData.push.apply(returnData, responseData.posts);
}
}
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -1754,6 +1754,7 @@ export class Github implements INodeType {
const fullOperation = `${resource}:${operation}`;
for (let i = 0; i < items.length; i++) {
try {
// Reset all values
requestMethod = 'GET';
endpoint = '';
@@ -2170,6 +2171,18 @@ export class Github implements INodeType {
} else if (overwriteDataOperationsArray.includes(fullOperation)) {
returnData.push.apply(returnData, responseData);
}
} catch (error) {
if (this.continueOnFail()) {
if (overwriteDataOperations.includes(fullOperation) || overwriteDataOperationsArray.includes(fullOperation)) {
returnData.push({ error: error.message });
} else {
items[i].json = { error: error.message };
}
continue;
}
throw error;
}
}
if (overwriteDataOperations.includes(fullOperation) || overwriteDataOperationsArray.includes(fullOperation)) {

View File

@@ -1114,6 +1114,9 @@ export class Gitlab implements INodeType {
}
}
} catch (error) {
if (this.continueOnFail()) {
return [this.helpers.returnJsonArray([{ error: error.message }])];
}
throw new NodeOperationError(this.getNode(), error);
}
@@ -1152,6 +1155,7 @@ export class Gitlab implements INodeType {
const fullOperation = `${resource}:${operation}`;
for (let i = 0; i < items.length; i++) {
try {
// Reset all values
requestMethod = 'GET';
endpoint = '';
@@ -1365,6 +1369,17 @@ export class Gitlab implements INodeType {
} else if (overwriteDataOperationsArray.includes(fullOperation)) {
returnData.push.apply(returnData, responseData);
}
} catch (error) {
if (this.continueOnFail()) {
if (overwriteDataOperations.includes(fullOperation) || overwriteDataOperationsArray.includes(fullOperation)) {
returnData.push({ error: error.message });
} else {
items[i].json = { error: error.message };
}
continue;
}
throw error;
}
}
if (overwriteDataOperations.includes(fullOperation) || overwriteDataOperationsArray.includes(fullOperation)) {

View File

@@ -162,8 +162,9 @@ export class GoogleAnalytics implements INodeType {
let endpoint = '';
let responseData;
for (let i = 0; i < items.length; i++) {
if (resource === 'report') {
if (operation === 'get') {
try {
if(resource === 'report') {
if(operation === 'get') {
//https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet
method = 'POST';
endpoint = '/v4/reports:batchGet';
@@ -280,6 +281,13 @@ export class GoogleAnalytics implements INodeType {
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -385,6 +385,8 @@ export class GoogleBooks implements INodeType {
let responseData;
for (let i = 0; i < length; i++) {
try {
if (resource === 'volume') {
if (operation === 'get') {
const volumeId = this.getNodeParameter('volumeId', i) as string;
@@ -495,6 +497,14 @@ export class GoogleBooks implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(responseData)];
}

View File

@@ -606,6 +606,12 @@ export class GoogleCalendar implements INodeType {
);
}
}
if (Array.isArray(responseData)) {
returnData.push.apply(returnData, responseData as IDataObject[]);
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail() !== true) {
throw error;
@@ -619,12 +625,6 @@ export class GoogleCalendar implements INodeType {
continue;
}
}
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)];
}

View File

@@ -101,6 +101,7 @@ export class GoogleContacts implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'contact') {
//https://developers.google.com/calendar/v3/reference/events/insert
if (operation === 'create') {
@@ -485,12 +486,19 @@ export class GoogleContacts implements INodeType {
responseData.contactId = responseData.resourceName.split('/')[1];
}
}
}
if (Array.isArray(responseData)) {
returnData.push.apply(returnData, responseData as IDataObject[]);
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
}

View File

@@ -1996,6 +1996,7 @@ export class GoogleDrive implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < items.length; i++) {
try {
const options = this.getNodeParameter('options', i, {}) as IDataObject;
let queryFields = 'id, name';
@@ -2427,6 +2428,17 @@ export class GoogleDrive implements INodeType {
returnData.push(response as IDataObject);
}
}
} catch (error) {
if (this.continueOnFail()) {
if (resource === 'file' && operation === 'download') {
items[i].json = { error: error.message };
} else {
returnData.push({ error: error.message });
}
continue;
}
throw error;
}
}
if (resource === 'file' && operation === 'download') {
// For file downloads the files get attached to the existing items

View File

@@ -150,6 +150,7 @@ export class RealtimeDatabase implements INodeType {
}
for (let i = 0; i < length; i++) {
try {
const projectId = this.getNodeParameter('projectId', i) as string;
let method = 'GET', attributes = '';
const document: IDataObject = {};
@@ -192,7 +193,13 @@ export class RealtimeDatabase implements INodeType {
responseData = { success: true };
}
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
if (Array.isArray(responseData)) {
returnData.push.apply(returnData, responseData as IDataObject[]);
} else if (typeof responseData === 'string' || typeof responseData === 'number') {

View File

@@ -206,6 +206,7 @@ export class Gmail implements INodeType {
let responseData;
for (let i = 0; i < items.length; i++) {
try {
if (resource === 'label') {
if (operation === 'create') {
//https://developers.google.com/gmail/api/v1/reference/users/labels/create
@@ -330,6 +331,7 @@ export class Gmail implements INodeType {
if (attachmentsUi.hasOwnProperty('attachmentsBinary')
&& !isEmpty(attachmentsUi.attachmentsBinary)
&& items[i].binary) {
// @ts-ignore
for (const { property } of attachmentsUi.attachmentsBinary as IDataObject[]) {
for (const binaryProperty of (property as string).split(',')) {
if (items[i].binary![binaryProperty] !== undefined) {
@@ -414,6 +416,7 @@ export class Gmail implements INodeType {
if (attachmentsUi.hasOwnProperty('attachmentsBinary')
&& !isEmpty(attachmentsUi.attachmentsBinary)
&& items[i].binary) {
// @ts-ignore
for (const { property } of attachmentsUi.attachmentsBinary as IDataObject[]) {
for (const binaryProperty of (property as string).split(',')) {
if (items[i].binary![binaryProperty] !== undefined) {
@@ -630,6 +633,7 @@ export class Gmail implements INodeType {
if (additionalFields.attachmentsUi) {
const attachmentsUi = additionalFields.attachmentsUi as IDataObject;
const attachmentsBinary = [];
if (!isEmpty(attachmentsUi)) {
if (!isEmpty(attachmentsUi)) {
if (attachmentsUi.hasOwnProperty('attachmentsBinary')
&& !isEmpty(attachmentsUi.attachmentsBinary)
@@ -647,11 +651,13 @@ export class Gmail implements INodeType {
}
}
}
}
qs = {
userId: 'me',
uploadType: 'media',
};
attachmentsList = attachmentsBinary;
}
}
@@ -800,6 +806,13 @@ export class Gmail implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
if (['draft', 'message'].includes(resource) && ['get', 'getAll'].includes(operation)) {
//@ts-ignore

View File

@@ -1034,6 +1034,7 @@ export class GoogleSheets implements INodeType {
// ----------------------------------
// append
// ----------------------------------
try {
const keyRow = parseInt(this.getNodeParameter('keyRow', 0) as string, 10);
const items = this.getInputData();
@@ -1050,21 +1051,34 @@ export class GoogleSheets implements INodeType {
// TODO: Should have something like add metadata which does not get passed through
return this.prepareOutputData(items);
} catch (error) {
if (this.continueOnFail()) {
return this.prepareOutputData([{json:{ error: error.message }}]);
}
throw error;
}
} else if (operation === 'clear') {
// ----------------------------------
// clear
// ----------------------------------
try {
await sheet.clearData(sheet.encodeRange(range));
const items = this.getInputData();
return this.prepareOutputData(items);
} catch (error) {
if (this.continueOnFail()) {
return this.prepareOutputData([{json:{ error: error.message }}]);
}
throw error;
}
} else if (operation === 'create') {
const returnData: IDataObject[] = [];
let responseData;
for (let i = 0; i < this.getInputData().length; i++) {
try {
const spreadsheetId = this.getNodeParameter('sheetId', i) as string;
const options = this.getNodeParameter('options', i, {}) as IDataObject;
const simple = this.getNodeParameter('simple', 0) as boolean;
@@ -1088,6 +1102,13 @@ export class GoogleSheets implements INodeType {
delete responseData.replies;
}
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
@@ -1096,7 +1117,7 @@ export class GoogleSheets implements INodeType {
// ----------------------------------
// delete
// ----------------------------------
try {
const requests: IDataObject[] = [];
const toDelete = this.getNodeParameter('toDelete', 0) as IToDelete;
@@ -1127,11 +1148,17 @@ export class GoogleSheets implements INodeType {
const items = this.getInputData();
return this.prepareOutputData(items);
} catch (error) {
if (this.continueOnFail()) {
return this.prepareOutputData([{json:{ error: error.message }}]);
}
throw error;
}
} else if (operation === 'lookup') {
// ----------------------------------
// lookup
// ----------------------------------
try {
const sheetData = await sheet.getData(sheet.encodeRange(range), valueRenderMode);
if (sheetData === undefined) {
@@ -1160,11 +1187,17 @@ export class GoogleSheets implements INodeType {
}
return [this.helpers.returnJsonArray(returnData)];
} catch (error) {
if (this.continueOnFail()) {
return [this.helpers.returnJsonArray({ error: error.message })];
}
throw error;
}
} else if (operation === 'read') {
// ----------------------------------
// read
// ----------------------------------
try {
const rawData = this.getNodeParameter('rawData', 0) as boolean;
const sheetData = await sheet.getData(sheet.encodeRange(range), valueRenderMode);
@@ -1191,12 +1224,19 @@ export class GoogleSheets implements INodeType {
}
return [this.helpers.returnJsonArray(returnData)];
} catch (error) {
if (this.continueOnFail()) {
return [this.helpers.returnJsonArray({ error: error.message })];
}
throw error;
}
} else if (operation === 'remove') {
const returnData: IDataObject[] = [];
let responseData;
for (let i = 0; i < this.getInputData().length; i++) {
try {
const sheetId = this.getNodeParameter('id', i) as string;
const spreadsheetId = this.getNodeParameter('sheetId', i) as string;
@@ -1209,6 +1249,13 @@ export class GoogleSheets implements INodeType {
responseData = await googleApiRequest.call(this, 'POST', `/v4/spreadsheets/${spreadsheetId}:batchUpdate`, { requests });
delete responseData.replies;
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
@@ -1216,7 +1263,7 @@ export class GoogleSheets implements INodeType {
// ----------------------------------
// update
// ----------------------------------
try {
const rawData = this.getNodeParameter('rawData', 0) as boolean;
const items = this.getInputData();
@@ -1250,6 +1297,12 @@ export class GoogleSheets implements INodeType {
return this.prepareOutputData(items);
} catch (error) {
if (this.continueOnFail()) {
return this.prepareOutputData([{json:{ error: error.message }}]);
}
throw error;
}
}
}
@@ -1267,7 +1320,7 @@ export class GoogleSheets implements INodeType {
// https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/create
for (let i = 0; i < this.getInputData().length; i++) {
try {
const title = this.getNodeParameter('title', i) as string;
const sheetsUi = this.getNodeParameter('sheetsUi', i, {}) as IDataObject;
@@ -1300,6 +1353,13 @@ export class GoogleSheets implements INodeType {
responseData = await googleApiRequest.call(this, 'POST', `/v4/spreadsheets`, body);
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}

View File

@@ -416,6 +416,8 @@ export class GoogleSlides implements INodeType {
for (let i = 0; i < items.length; i++) {
try {
if (resource === 'page') {
// *********************************************************************
@@ -547,6 +549,14 @@ export class GoogleSlides implements INodeType {
}
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({json:{ error: error.message }});
continue;
}
throw error;
}
}
return [returnData];

View File

@@ -97,6 +97,7 @@ export class GoogleTasks implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
let body: IDataObject = {};
for (let i = 0; i < length; i++) {
try {
if (resource === 'task') {
if (operation === 'create') {
body = {};
@@ -273,6 +274,13 @@ export class GoogleTasks implements INodeType {
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -221,6 +221,7 @@ export class YouTube implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'channel') {
if (operation === 'get') {
//https://developers.google.com/youtube/v3/docs/channels/list
@@ -1149,6 +1150,13 @@ export class YouTube implements INodeType {
}
}
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
if (Array.isArray(responseData)) {
returnData.push.apply(returnData, responseData as IDataObject[]);

View File

@@ -194,6 +194,7 @@ export class Gotify implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'message') {
if (operation === 'create') {
@@ -256,6 +257,13 @@ export class Gotify implements INodeType {
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -236,6 +236,7 @@ export class GraphQL implements INodeType {
const returnItems: INodeExecutionData[] = [];
for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
try {
const requestMethod = this.getNodeParameter('requestMethod', itemIndex, 'POST') as string;
const endpoint = this.getNodeParameter('endpoint', itemIndex, '') as string;
const requestFormat = this.getNodeParameter('requestFormat', itemIndex, 'graphql') as string;
@@ -312,6 +313,13 @@ export class GraphQL implements INodeType {
returnItems.push({ json: response });
}
}
} catch (error) {
if (this.continueOnFail()) {
returnItems.push({ json: { error: error.message } });
continue;
}
throw error;
}
}
return this.prepareOutputData(returnItems);

View File

@@ -303,7 +303,7 @@ export class HackerNews implements INodeType {
let returnAll = false;
for (let i = 0; i < items.length; i++) {
try {
let qs: IDataObject = {};
let endpoint = '';
let includeComments = false;
@@ -376,7 +376,13 @@ export class HackerNews implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -245,6 +245,7 @@ export class Harvest implements INodeType {
let qs: IDataObject;
for (let i = 0; i < items.length; i++) {
try {
body = {};
qs = {};
@@ -946,6 +947,13 @@ export class Harvest implements INodeType {
} else {
throw new NodeOperationError(this.getNode(), `The resource "${resource}" is not known!`);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -172,6 +172,7 @@ export class HelpScout implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'conversation') {
//https://developer.helpscout.com/mailbox-api/endpoints/conversations/create
if (operation === 'create') {
@@ -429,6 +430,13 @@ export class HelpScout implements INodeType {
}
}
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
if (Array.isArray(responseData)) {
returnData.push.apply(returnData, responseData as IDataObject[]);
} else if (responseData !== undefined) {

View File

@@ -219,6 +219,7 @@ export class HtmlExtract implements INodeType {
let item: INodeExecutionData;
for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
try {
const dataPropertyName = this.getNodeParameter('dataPropertyName', itemIndex) as string;
const extractionValues = this.getNodeParameter('extractionValues', itemIndex) as IDataObject;
const options = this.getNodeParameter('options', itemIndex, {}) as IDataObject;
@@ -273,6 +274,13 @@ export class HtmlExtract implements INodeType {
}
returnData.push(newItem);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ json: { error: error.message } });
continue;
}
throw error;
}
}
return this.prepareOutputData(returnData);

View File

@@ -874,6 +874,7 @@ export class Hubspot implements INodeType {
//https://legacydocs.hubspot.com/docs/methods/lists/contact-lists-overview
if (resource === 'contactList') {
try {
//https://legacydocs.hubspot.com/docs/methods/lists/add_contact_to_list
if (operation === 'add') {
const listId = this.getNodeParameter('listId', 0) as string;
@@ -902,8 +903,16 @@ export class Hubspot implements INodeType {
responseData = await hubspotApiRequest.call(this, 'POST', `/contacts/v1/lists/${listId}/remove`, body);
returnData.push(responseData);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
} else {
throw error;
}
}
} else {
for (let i = 0; i < length; i++) {
try {
//https://developers.hubspot.com/docs/methods/contacts/create_or_update
if (resource === 'contact') {
//https://developers.hubspot.com/docs/methods/companies/create_company
@@ -2407,6 +2416,13 @@ export class Hubspot implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -292,6 +292,7 @@ export class Hunter implements INodeType {
const qs: IDataObject = {};
let responseData;
for (let i = 0; i < length; i++) {
try {
const operation = this.getNodeParameter('operation', 0) as string;
//https://hunter.io/api-documentation/v2#domain-search
if (operation === 'domainSearch') {
@@ -372,6 +373,13 @@ export class Hunter implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -127,6 +127,7 @@ export class Intercom implements INodeType {
let qs: IDataObject;
let responseData;
for (let i = 0; i < length; i++) {
try {
qs = {};
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
@@ -551,6 +552,13 @@ export class Intercom implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -250,6 +250,7 @@ export class InvoiceNinja implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
//Routes: https://github.com/invoiceninja/invoiceninja/blob/ff455c8ed9fd0c0326956175ecd509efa8bad263/routes/api.php
try {
if (resource === 'client') {
if (operation === 'create') {
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
@@ -801,6 +802,13 @@ export class InvoiceNinja implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -167,6 +167,7 @@ export class Kafka implements INodeType {
let responseData: IDataObject[];
try {
const options = this.getNodeParameter('options', 0) as IDataObject;
const sendInputData = this.getNodeParameter('sendInputData', 0) as boolean;
@@ -272,5 +273,12 @@ export class Kafka implements INodeType {
await producer.disconnect();
return [this.helpers.returnJsonArray(responseData)];
} catch (error) {
if (this.continueOnFail()) {
return [this.helpers.returnJsonArray({ error: error.message })];
} else {
throw error;
}
}
}
}

View File

@@ -78,6 +78,7 @@ export class Line implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'notification') {
//https://notify-bot.line.me/doc/en/
if (operation === 'send') {
@@ -133,13 +134,20 @@ export class Line implements INodeType {
responseData = await lineApiRequest.call(this, 'POST', '', {}, {}, 'https://notify-api.line.me/api/notify', { formData: body });
}
}
}
if (Array.isArray(responseData)) {
returnData.push.apply(returnData, responseData as IDataObject[]);
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
}

View File

@@ -81,6 +81,7 @@ export class LinkedIn implements INodeType {
let body = {};
for (let i = 0; i < items.length; i++) {
try {
if (resource === 'post') {
if (operation === 'create') {
const text = this.getNodeParameter('text', i) as string;
@@ -249,6 +250,13 @@ export class LinkedIn implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -95,12 +95,20 @@ export class Mailcheck implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'email') {
if (operation === 'check') {
const email = this.getNodeParameter('email', i) as string;
responseData = await mailCheckApiRequest.call(this, 'POST', '/singleEmail:check', { email });
}
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
if (Array.isArray(responseData)) {
returnData.push.apply(returnData, responseData as IDataObject[]);
} else {

View File

@@ -1862,6 +1862,7 @@ export class Mailchimp implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'listGroup') {
//https://mailchimp.com/developer/reference/lists/interest-categories/#get_/lists/-list_id-/interest-categories/-interest_category_id-
if (operation === 'getAll') {
@@ -2267,6 +2268,13 @@ export class Mailchimp implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -88,7 +88,7 @@ export class MailerLite implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'subscriber') {
//https://developers.mailerlite.com/reference#create-a-subscriber
if (operation === 'create') {
@@ -173,6 +173,13 @@ export class MailerLite implements INodeType {
responseData = await mailerliteApiRequest.call(this, 'PUT', `/subscribers/${subscriberId}`, body);
}
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
if (Array.isArray(responseData)) {
returnData.push.apply(returnData, responseData as IDataObject[]);

View File

@@ -115,6 +115,7 @@ export class Mailgun implements INodeType {
let item: INodeExecutionData;
for (let itemIndex = 0; itemIndex < length; itemIndex++) {
try {
item = items[itemIndex];
const fromEmail = this.getNodeParameter('fromEmail', itemIndex) as string;
@@ -195,6 +196,13 @@ export class Mailgun implements INodeType {
returnData.push({
json: responseData,
});
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ json: { error: error.message } });
continue;
}
throw error;
}
}
return this.prepareOutputData(returnData);
}

View File

@@ -117,6 +117,7 @@ export class Mailjet implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'email') {
//https://dev.mailjet.com/email/guides/send-api-v31/#send-a-basic-email
if (operation === 'send') {
@@ -287,6 +288,13 @@ export class Mailjet implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -738,6 +738,7 @@ export class Mandrill implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < items.length; i++) {
try {
if (resource === 'message') {
const options = this.getNodeParameter('options', i) as Options;
@@ -887,6 +888,13 @@ export class Mandrill implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -159,12 +159,20 @@ export class Matrix implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < items.length; i++) {
try {
const responseData = await handleMatrixCall.call(this, items[i], i, resource, operation);
if (Array.isArray(responseData)) {
returnData.push.apply(returnData, responseData as IDataObject[]);
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -1961,6 +1961,7 @@ export class Mattermost implements INodeType {
let qs: IDataObject;
for (let i = 0; i < items.length; i++) {
try {
let endpoint = '';
body = {};
qs = {};
@@ -2389,6 +2390,13 @@ export class Mattermost implements INodeType {
} else {
returnData.push(responseData);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -234,7 +234,7 @@ export class Mautic implements INodeType {
for (let i = 0; i < length; i++) {
qs = {};
try {
if (resource === 'company') {
//https://developer.mautic.org/#create-company
if (operation === 'create') {
@@ -615,6 +615,13 @@ export class Mautic implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -449,7 +449,7 @@ export class Medium implements INodeType {
for (let i = 0; i < items.length; i++) {
qs = {};
try {
resource = this.getNodeParameter('resource', i) as string;
operation = this.getNodeParameter('operation', i) as string;
@@ -572,6 +572,13 @@ export class Medium implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -314,7 +314,7 @@ export class MessageBird implements INodeType {
for (let i = 0; i < items.length; i++) {
qs = {};
try {
resource = this.getNodeParameter('resource', i) as string;
operation = this.getNodeParameter('operation', i) as string;
@@ -401,6 +401,13 @@ export class MessageBird implements INodeType {
);
returnData.push(responseData as IDataObject);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -164,6 +164,7 @@ export class MicrosoftExcel implements INodeType {
if (resource === 'table') {
//https://docs.microsoft.com/en-us/graph/api/table-post-rows?view=graph-rest-1.0&tabs=http
if (operation === 'addRow') {
try {
// TODO: At some point it should be possible to use item dependent parameters.
// Is however important to then not make one separate request each.
const workbookId = this.getNodeParameter('workbook', 0) as string;
@@ -201,10 +202,18 @@ export class MicrosoftExcel implements INodeType {
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
} else {
throw error;
}
}
}
//https://docs.microsoft.com/en-us/graph/api/table-list-columns?view=graph-rest-1.0&tabs=http
if (operation === 'getColumns') {
for (let i = 0; i < length; i++) {
try {
qs = {};
const workbookId = this.getNodeParameter('workbook', i) as string;
const worksheetId = this.getNodeParameter('worksheet', i) as string;
@@ -236,12 +245,20 @@ export class MicrosoftExcel implements INodeType {
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
//https://docs.microsoft.com/en-us/graph/api/table-list-rows?view=graph-rest-1.0&tabs=http
if (operation === 'getRows') {
for (let i = 0; i < length; i++) {
qs = {};
try {
const workbookId = this.getNodeParameter('workbook', i) as string;
const worksheetId = this.getNodeParameter('worksheet', i) as string;
const tableId = this.getNodeParameter('table', i) as string;
@@ -279,11 +296,19 @@ export class MicrosoftExcel implements INodeType {
const dataProperty = this.getNodeParameter('dataProperty', i) as string;
returnData.push({ [dataProperty]: responseData });
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (operation === 'lookup') {
for (let i = 0; i < length; i++) {
qs = {};
try {
const workbookId = this.getNodeParameter('workbook', i) as string;
const worksheetId = this.getNodeParameter('worksheet', i) as string;
const tableId = this.getNodeParameter('table', i) as string;
@@ -322,12 +347,20 @@ export class MicrosoftExcel implements INodeType {
});
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
}
if (resource === 'workbook') {
for (let i = 0; i < length; i++) {
qs = {};
try {
//https://docs.microsoft.com/en-us/graph/api/worksheetcollection-add?view=graph-rest-1.0&tabs=http
if (operation === 'addWorksheet') {
const workbookId = this.getNodeParameter('workbook', i) as string;
@@ -360,11 +393,19 @@ export class MicrosoftExcel implements INodeType {
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (resource === 'worksheet') {
for (let i = 0; i < length; i++) {
qs = {};
try {
//https://docs.microsoft.com/en-us/graph/api/workbook-list-worksheets?view=graph-rest-1.0&tabs=http
if (operation === 'getAll') {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
@@ -415,6 +456,13 @@ export class MicrosoftExcel implements INodeType {
returnData.push({ [dataProperty]: responseData });
}
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}

View File

@@ -83,6 +83,7 @@ export class MicrosoftOneDrive implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'file') {
//https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_copy?view=odsp-graph-online
if (operation === 'copy') {
@@ -255,6 +256,17 @@ export class MicrosoftOneDrive implements INodeType {
returnData.push(responseData);
}
}
} catch (error) {
if (this.continueOnFail()) {
if (resource === 'file' && operation === 'download') {
items[i].json = { error: error.message };
} else {
returnData.push({ error: error.message });
}
continue;
}
throw error;
}
}
if (resource === 'file' && operation === 'download') {
// For file downloads the files get attached to the existing items

View File

@@ -153,6 +153,7 @@ export class MicrosoftOutlook implements INodeType {
if (['draft', 'message'].includes(resource)) {
if (operation === 'delete') {
for (let i = 0; i < length; i++) {
try {
const messageId = this.getNodeParameter('messageId', i) as string;
responseData = await microsoftApiRequest.call(
this,
@@ -161,11 +162,19 @@ export class MicrosoftOutlook implements INodeType {
);
returnData.push({ success: true });
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (operation === 'get') {
for (let i = 0; i < length; i++) {
try {
const messageId = this.getNodeParameter('messageId', i) as string;
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
@@ -196,11 +205,19 @@ export class MicrosoftOutlook implements INodeType {
if (additionalFields.dataPropertyAttachmentsPrefixName) {
return [returnData as INodeExecutionData[]];
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (operation === 'update') {
for (let i = 0; i < length; i++) {
try {
const messageId = this.getNodeParameter('messageId', i) as string;
const updateFields = this.getNodeParameter('updateFields', i) as IDataObject;
@@ -216,6 +233,13 @@ export class MicrosoftOutlook implements INodeType {
{},
);
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
}
@@ -224,7 +248,7 @@ export class MicrosoftOutlook implements INodeType {
if (operation === 'create') {
for (let i = 0; i < length; i++) {
try {
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
const subject = this.getNodeParameter('subject', i) as string;
@@ -271,11 +295,19 @@ export class MicrosoftOutlook implements INodeType {
);
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (operation === 'send') {
for (let i = 0; i < length; i++) {
try {
const messageId = this.getNodeParameter('messageId', i);
const additionalFields = this.getNodeParameter('additionalFields', i, {}) as IDataObject;
@@ -298,6 +330,13 @@ export class MicrosoftOutlook implements INodeType {
);
returnData.push({ success: true });
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
}
@@ -306,6 +345,7 @@ export class MicrosoftOutlook implements INodeType {
if (operation === 'reply') {
for (let i = 0; i < length; i++) {
try {
const messageId = this.getNodeParameter('messageId', i) as string;
const replyType = this.getNodeParameter('replyType', i) as string;
const comment = this.getNodeParameter('comment', i) as string;
@@ -375,11 +415,19 @@ export class MicrosoftOutlook implements INodeType {
}
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (operation === 'getMime') {
for (let i = 0; i < length; i++) {
try {
const messageId = this.getNodeParameter('messageId', i) as string;
const dataPropertyNameDownload = this.getNodeParameter('binaryPropertyName', i) as string;
const response = await microsoftApiRequest.call(
@@ -416,12 +464,20 @@ export class MicrosoftOutlook implements INodeType {
const fileName = `${messageId}.eml`;
const data = Buffer.from(response.body as string, 'utf8');
items[i].binary![dataPropertyNameDownload] = await this.helpers.prepareBinaryData(data as unknown as Buffer, fileName, mimeType);
} catch (error) {
if (this.continueOnFail()) {
items[i].json = { error: error.message };
continue;
}
throw error;
}
}
}
if (operation === 'getAll') {
let additionalFields: IDataObject = {};
for (let i = 0; i < length; i++) {
try {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
@@ -463,6 +519,13 @@ export class MicrosoftOutlook implements INodeType {
} else {
returnData.push.apply(returnData, responseData);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
if (additionalFields.dataPropertyAttachmentsPrefixName) {
@@ -472,6 +535,7 @@ export class MicrosoftOutlook implements INodeType {
if (operation === 'move') {
for (let i = 0; i < length; i++) {
try {
const messageId = this.getNodeParameter('messageId', i) as string;
const destinationId = this.getNodeParameter('folderId', i) as string;
const body: IDataObject = {
@@ -485,11 +549,19 @@ export class MicrosoftOutlook implements INodeType {
body,
);
returnData.push({ success: true });
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (operation === 'send') {
for (let i = 0; i < length; i++) {
try {
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
const toRecipients = this.getNodeParameter('toRecipients', i) as string;
@@ -547,6 +619,13 @@ export class MicrosoftOutlook implements INodeType {
{},
);
returnData.push({ success: true });
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
@@ -555,6 +634,7 @@ export class MicrosoftOutlook implements INodeType {
if (resource === 'messageAttachment') {
if (operation === 'add') {
for (let i = 0; i < length; i++) {
try {
const messageId = this.getNodeParameter('messageId', i) as string;
const binaryPropertyName = this.getNodeParameter('binaryPropertyName', 0) as string;
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
@@ -636,11 +716,19 @@ export class MicrosoftOutlook implements INodeType {
);
}
returnData.push({ success: true });
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (operation === 'download') {
for (let i = 0; i < length; i++) {
try {
const messageId = this.getNodeParameter('messageId', i) as string;
const attachmentId = this.getNodeParameter('attachmentId', i) as string;
const dataPropertyNameDownload = this.getNodeParameter('binaryPropertyName', i) as string;
@@ -686,11 +774,19 @@ export class MicrosoftOutlook implements INodeType {
items[i] = newItem;
const data = Buffer.from(response.body as string, 'utf8');
items[i].binary![dataPropertyNameDownload] = await this.helpers.prepareBinaryData(data as unknown as Buffer, fileName, mimeType);
} catch (error) {
if (this.continueOnFail()) {
items[i].json = { error: error.message };
continue;
}
throw error;
}
}
}
if (operation === 'get') {
for (let i = 0; i < length; i++) {
try {
const messageId = this.getNodeParameter('messageId', i) as string;
const attachmentId = this.getNodeParameter('attachmentId', i) as string;
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
@@ -709,11 +805,19 @@ export class MicrosoftOutlook implements INodeType {
qs,
);
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (operation === 'getAll') {
for (let i = 0; i < length; i++) {
try {
const messageId = this.getNodeParameter('messageId', i) as string;
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
@@ -750,6 +854,13 @@ export class MicrosoftOutlook implements INodeType {
responseData = responseData.value;
}
returnData.push.apply(returnData, responseData as IDataObject[]);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
}
@@ -757,6 +868,7 @@ export class MicrosoftOutlook implements INodeType {
if (resource === 'folder') {
if (operation === 'create') {
for (let i = 0; i < length; i++) {
try {
const displayName = this.getNodeParameter('displayName', i) as string;
const folderType = this.getNodeParameter('folderType', i) as string;
const body: IDataObject = {
@@ -785,11 +897,19 @@ export class MicrosoftOutlook implements INodeType {
body,
);
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (operation === 'delete') {
for (let i = 0; i < length; i++) {
try {
const folderId = this.getNodeParameter('folderId', i) as string;
responseData = await microsoftApiRequest.call(
this,
@@ -797,11 +917,19 @@ export class MicrosoftOutlook implements INodeType {
`/mailFolders/${folderId}`,
);
returnData.push({ success: true });
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (operation === 'get') {
for (let i = 0; i < length; i++) {
try {
const folderId = this.getNodeParameter('folderId', i) as string;
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
@@ -820,11 +948,19 @@ export class MicrosoftOutlook implements INodeType {
qs,
);
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (operation === 'getAll') {
for (let i = 0; i < length; i++) {
try {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
@@ -857,11 +993,19 @@ export class MicrosoftOutlook implements INodeType {
responseData = responseData.value;
}
returnData.push.apply(returnData, responseData as IDataObject[]);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (operation === 'getChildren') {
for (let i = 0; i < length; i++) {
try {
const folderId = this.getNodeParameter('folderId', i) as string;
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
@@ -894,11 +1038,19 @@ export class MicrosoftOutlook implements INodeType {
responseData = responseData.value;
}
returnData.push.apply(returnData, responseData as IDataObject[]);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
if (operation === 'update') {
for (let i = 0; i < length; i++) {
try {
const folderId = this.getNodeParameter('folderId', i) as string;
const updateFields = this.getNodeParameter('updateFields', i) as IDataObject;
@@ -913,12 +1065,20 @@ export class MicrosoftOutlook implements INodeType {
body,
);
returnData.push(responseData);
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}
}
if (resource === 'folderMessage') {
for (let i = 0; i < length; i++) {
try {
if (operation === 'getAll') {
const folderId = this.getNodeParameter('folderId', i) as string;
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
@@ -955,6 +1115,13 @@ export class MicrosoftOutlook implements INodeType {
}
returnData.push.apply(returnData, responseData as IDataObject[]);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
}

View File

@@ -202,6 +202,7 @@ export class MicrosoftTeams implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'channel') {
//https://docs.microsoft.com/en-us/graph/api/channel-post?view=graph-rest-beta&tabs=http
if (operation === 'create') {
@@ -385,6 +386,13 @@ export class MicrosoftTeams implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -126,7 +126,7 @@ export class Mindee implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'receipt') {
if (operation === 'predict') {
const binaryPropertyName = this.getNodeParameter('binaryPropertyName', i) as string;
@@ -210,12 +210,19 @@ export class Mindee implements INodeType {
}
}
}
}
if (Array.isArray(responseData)) {
returnData.push.apply(returnData, responseData as IDataObject[]);
} else if (responseData !== undefined) {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
}

View File

@@ -195,7 +195,7 @@ export class Mocean implements INodeType {
for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
body = {};
qs = {};
try {
resource = this.getNodeParameter('resource', itemIndex, '') as string;
operation = this.getNodeParameter('operation',itemIndex,'') as string;
text = this.getNodeParameter('message', itemIndex, '') as string;
@@ -235,6 +235,13 @@ export class Mocean implements INodeType {
} else {
throw new NodeOperationError(this.getNode(), `Unknown operation ${operation}`);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];

View File

@@ -262,6 +262,7 @@ export class MondayCom implements INodeType {
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (resource === 'board') {
if (operation === 'archive') {
const boardId = parseInt(this.getNodeParameter('boardId', i) as string, 10);
@@ -757,6 +758,13 @@ export class MondayCom implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

View File

@@ -51,17 +51,26 @@ export class MongoDb implements INodeType {
// delete
// ----------------------------------
try {
const { deletedCount } = await mdb
.collection(this.getNodeParameter('collection', 0) as string)
.deleteMany(JSON.parse(this.getNodeParameter('query', 0) as string));
returnItems = this.helpers.returnJsonArray([{ deletedCount }]);
} catch (error) {
if (this.continueOnFail()) {
returnItems = this.helpers.returnJsonArray({ error: error.message });
} else {
throw error;
}
}
} else if (operation === 'find') {
// ----------------------------------
// find
// ----------------------------------
try {
let query = mdb
.collection(this.getNodeParameter('collection', 0) as string)
.find(JSON.parse(this.getNodeParameter('query', 0) as string));
@@ -82,11 +91,18 @@ export class MongoDb implements INodeType {
const queryResult = await query.toArray();
returnItems = this.helpers.returnJsonArray(queryResult as IDataObject[]);
} catch (error) {
if (this.continueOnFail()) {
returnItems = this.helpers.returnJsonArray({ error: error.message } );
} else {
throw error;
}
}
} else if (operation === 'insert') {
// ----------------------------------
// insert
// ----------------------------------
try {
// Prepare the data to insert and copy it to be returned
const fields = (this.getNodeParameter('fields', 0) as string)
.split(',')
@@ -113,6 +129,13 @@ export class MongoDb implements INodeType {
},
});
}
} catch (error) {
if (this.continueOnFail()) {
returnItems = this.helpers.returnJsonArray({ error: error.message });
} else {
throw error;
}
}
} else if (operation === 'update') {
// ----------------------------------
// update
@@ -143,6 +166,7 @@ export class MongoDb implements INodeType {
}
for (const item of updateItems) {
try {
if (item[updateKey] === undefined) {
continue;
}
@@ -156,11 +180,22 @@ export class MongoDb implements INodeType {
await mdb
.collection(this.getNodeParameter('collection', 0) as string)
.updateOne(filter, { $set: item }, updateOptions);
} catch (error) {
if (this.continueOnFail()) {
item.json = { error: error.message };
continue;
}
throw error;
}
}
returnItems = this.helpers.returnJsonArray(updateItems as IDataObject[]);
} else {
if (this.continueOnFail()) {
returnItems = this.helpers.returnJsonArray({ json: { error: `The operation "${operation}" is not supported!` } });
} else {
throw new NodeOperationError(this.getNode(), `The operation "${operation}" is not supported!`);
}
}
client.close();
return this.prepareOutputData(returnItems);

View File

@@ -252,6 +252,7 @@ export class MySql implements INodeType {
// executeQuery
// ----------------------------------
try {
const queryQueue = items.map((item, index) => {
const rawQuery = this.getNodeParameter('query', index) as string;
@@ -272,11 +273,20 @@ export class MySql implements INodeType {
returnItems = this.helpers.returnJsonArray(queryResult as unknown as IDataObject[]);
} catch (error) {
if (this.continueOnFail()) {
returnItems = this.helpers.returnJsonArray({ error: error.message });
} else {
await connection.end();
throw error;
}
}
} else if (operation === 'insert') {
// ----------------------------------
// insert
// ----------------------------------
try {
const table = this.getNodeParameter('table', 0) as string;
const columnString = this.getNodeParameter('columns', 0) as string;
const columns = columnString.split(',').map(column => column.trim());
@@ -292,12 +302,21 @@ export class MySql implements INodeType {
const queryResult = await connection.query(insertSQL, queryItems);
returnItems = this.helpers.returnJsonArray(queryResult[0] as unknown as IDataObject);
} catch (error) {
if (this.continueOnFail()) {
returnItems = this.helpers.returnJsonArray({ error: error.message });
} else {
await connection.end();
throw error;
}
}
} else if (operation === 'update') {
// ----------------------------------
// update
// ----------------------------------
try {
const table = this.getNodeParameter('table', 0) as string;
const updateKey = this.getNodeParameter('updateKey', 0) as string;
const columnString = this.getNodeParameter('columns', 0) as string;
@@ -313,10 +332,22 @@ export class MySql implements INodeType {
const queryResult = await Promise.all(queryQueue);
returnItems = this.helpers.returnJsonArray(queryResult.map(result => result[0]) as unknown as IDataObject[]);
} catch (error) {
if (this.continueOnFail()) {
returnItems = this.helpers.returnJsonArray({ error: error.message });
} else {
await connection.end();
throw error;
}
}
} else {
if (this.continueOnFail()) {
returnItems = this.helpers.returnJsonArray({ error: `The operation "${operation}" is not supported!` });
} else {
await connection.end();
throw new NodeOperationError(this.getNode(), `The operation "${operation}" is not supported!`);
}
}
await connection.end();

View File

@@ -933,6 +933,7 @@ export class Nasa implements INodeType {
for (let i = 0; i < items.length; i++) {
try {
let endpoint = '';
let includeCloseApproachData = false;
@@ -1223,6 +1224,19 @@ export class Nasa implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
if (resource === 'earthImagery' && operation === 'get') {
items[i].json = { error: error.message };
} else if (resource === 'astronomyPictureOfTheDay' && operation === 'get' && download === true) {
items[i].json = { error: error.message };
} else {
returnData.push({ error: error.message });
}
continue;
}
throw error;
}
}
if (resource === 'earthImagery' && operation === 'get') {

View File

@@ -806,6 +806,7 @@ export class NextCloud implements INodeType {
let qs;
for (let i = 0; i < items.length; i++) {
try {
if (resource === 'file') {
if (operation === 'download') {
// ----------------------------------
@@ -999,8 +1000,12 @@ export class NextCloud implements INodeType {
try {
responseData = await nextCloudApiRequest.call(this, requestMethod, endpoint, body, headers, encoding, qs);
} catch (error) {
if (this.continueOnFail() === true) {
returnData.push({ error });
if (this.continueOnFail()) {
if (resource === 'file' && operation === 'download') {
items[i].json = { error: error.message };
} else {
returnData.push({ error: error.message });
}
continue;
}
@@ -1130,6 +1135,17 @@ export class NextCloud implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
if (resource === 'file' && operation === 'download') {
items[i].json = { error: error.message };
} else {
returnData.push({ error: error.message });
}
continue;
}
throw error;
}
}

View File

@@ -145,6 +145,7 @@ export class OpenThesaurus implements INodeType {
const operation = this.getNodeParameter('operation', 0) as string;
for (let i = 0; i < length; i++) {
try {
if (operation === 'getSynonyms') {
const text = this.getNodeParameter('text', i) as string;
const options = this.getNodeParameter('options', i) as IDataObject;
@@ -161,6 +162,13 @@ export class OpenThesaurus implements INodeType {
} else {
returnData.push(responseData as IDataObject);
}
} catch (error) {
if (this.continueOnFail()) {
returnData.push({ error: error.message });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}

Some files were not shown because too many files have changed in this diff Show More