mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
⚡ 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:
@@ -738,154 +738,162 @@ export class Mandrill implements INodeType {
|
||||
const operation = this.getNodeParameter('operation', 0) as string;
|
||||
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (resource === 'message') {
|
||||
try {
|
||||
if (resource === 'message') {
|
||||
|
||||
const options = this.getNodeParameter('options', i) as Options;
|
||||
const fromEmail = this.getNodeParameter('fromEmail', i) as string;
|
||||
const toEmail = this.getNodeParameter('toEmail', i) as string;
|
||||
const jsonActive = this.getNodeParameter('jsonParameters', i) as boolean;
|
||||
const toEmailArray = getToEmailArray(toEmail);
|
||||
const options = this.getNodeParameter('options', i) as Options;
|
||||
const fromEmail = this.getNodeParameter('fromEmail', i) as string;
|
||||
const toEmail = this.getNodeParameter('toEmail', i) as string;
|
||||
const jsonActive = this.getNodeParameter('jsonParameters', i) as boolean;
|
||||
const toEmailArray = getToEmailArray(toEmail);
|
||||
|
||||
const message: Message = {
|
||||
html: (options.html) ? options.html : '',
|
||||
text: (options.text) ? options.text : '',
|
||||
subject: (options.subject) ? options.subject : '',
|
||||
from_email: fromEmail,
|
||||
to: toEmailArray,
|
||||
important: (options.important) ? options.important : false,
|
||||
track_opens: (options.trackOpens) ? options.trackOpens : false,
|
||||
track_clicks: (options.trackClicks) ? options.trackClicks : false,
|
||||
auto_text: (options.autoText) ? options.autoText : false,
|
||||
auto_html: (options.autoHtml) ? options.autoHtml : false,
|
||||
inline_css: (options.inlineCss) ? options.inlineCss : false,
|
||||
url_strip_qs: (options.urlStripQs) ? options.urlStripQs : false,
|
||||
preserve_recipients: (options.preserveRecipients) ? options.preserveRecipients : false,
|
||||
view_content_link: (options.viewContentLink) ? options.viewContentLink : false,
|
||||
async: (options.async) ? options.async : false,
|
||||
google_analytics_campaign: (options.googleAnalyticsCampaign) ? options.googleAnalyticsCampaign : '',
|
||||
ip_pool: (options.ipPool) ? options.ipPool : '',
|
||||
bcc_address: (options.bccAddress) ? options.bccAddress : '',
|
||||
tracking_domain: (options.trackingDomain) ? options.trackingDomain : '',
|
||||
signing_domain: (options.signingDomain) ? options.signingDomain : '',
|
||||
return_path_domain: (options.returnPathDomain) ? options.returnPathDomain : '',
|
||||
};
|
||||
const message: Message = {
|
||||
html: (options.html) ? options.html : '',
|
||||
text: (options.text) ? options.text : '',
|
||||
subject: (options.subject) ? options.subject : '',
|
||||
from_email: fromEmail,
|
||||
to: toEmailArray,
|
||||
important: (options.important) ? options.important : false,
|
||||
track_opens: (options.trackOpens) ? options.trackOpens : false,
|
||||
track_clicks: (options.trackClicks) ? options.trackClicks : false,
|
||||
auto_text: (options.autoText) ? options.autoText : false,
|
||||
auto_html: (options.autoHtml) ? options.autoHtml : false,
|
||||
inline_css: (options.inlineCss) ? options.inlineCss : false,
|
||||
url_strip_qs: (options.urlStripQs) ? options.urlStripQs : false,
|
||||
preserve_recipients: (options.preserveRecipients) ? options.preserveRecipients : false,
|
||||
view_content_link: (options.viewContentLink) ? options.viewContentLink : false,
|
||||
async: (options.async) ? options.async : false,
|
||||
google_analytics_campaign: (options.googleAnalyticsCampaign) ? options.googleAnalyticsCampaign : '',
|
||||
ip_pool: (options.ipPool) ? options.ipPool : '',
|
||||
bcc_address: (options.bccAddress) ? options.bccAddress : '',
|
||||
tracking_domain: (options.trackingDomain) ? options.trackingDomain : '',
|
||||
signing_domain: (options.signingDomain) ? options.signingDomain : '',
|
||||
return_path_domain: (options.returnPathDomain) ? options.returnPathDomain : '',
|
||||
};
|
||||
|
||||
if (options.googleAnalyticsDomains) {
|
||||
message.google_analytics_domains = getGoogleAnalyticsDomainsArray(options.googleAnalyticsDomains);
|
||||
}
|
||||
if (options.googleAnalyticsDomains) {
|
||||
message.google_analytics_domains = getGoogleAnalyticsDomainsArray(options.googleAnalyticsDomains);
|
||||
}
|
||||
|
||||
if (options.tags) {
|
||||
message.tags = getTags(options.tags);
|
||||
}
|
||||
if (options.tags) {
|
||||
message.tags = getTags(options.tags);
|
||||
}
|
||||
|
||||
if (options.fromName) {
|
||||
message.from_name = options.fromName;
|
||||
}
|
||||
if (options.fromName) {
|
||||
message.from_name = options.fromName;
|
||||
}
|
||||
|
||||
if (options.subaccount) {
|
||||
message.subaccount = options.subaccount;
|
||||
}
|
||||
if (options.subaccount) {
|
||||
message.subaccount = options.subaccount;
|
||||
}
|
||||
|
||||
const body: Body = {
|
||||
template_content: [],
|
||||
message,
|
||||
};
|
||||
const body: Body = {
|
||||
template_content: [],
|
||||
message,
|
||||
};
|
||||
|
||||
if (options.sendAt) {
|
||||
body.send_at = moment(options.sendAt).utc().format('YYYY-MM-DD HH:mm:ss');
|
||||
}
|
||||
if (options.sendAt) {
|
||||
body.send_at = moment(options.sendAt).utc().format('YYYY-MM-DD HH:mm:ss');
|
||||
}
|
||||
|
||||
if (jsonActive) {
|
||||
if (jsonActive) {
|
||||
|
||||
body.message.headers = validateJSON(this.getNodeParameter('headersJson', i) as string);
|
||||
body.message.metadata = validateJSON(this.getNodeParameter('metadataJson', i) as string);
|
||||
body.message.global_merge_vars = validateJSON(this.getNodeParameter('mergeVarsJson', i) as string);
|
||||
body.message.attachments = validateJSON(this.getNodeParameter('attachmentsJson', i) as string);
|
||||
body.message.headers = validateJSON(this.getNodeParameter('headersJson', i) as string);
|
||||
body.message.metadata = validateJSON(this.getNodeParameter('metadataJson', i) as string);
|
||||
body.message.global_merge_vars = validateJSON(this.getNodeParameter('mergeVarsJson', i) as string);
|
||||
body.message.attachments = validateJSON(this.getNodeParameter('attachmentsJson', i) as string);
|
||||
|
||||
} else {
|
||||
} else {
|
||||
|
||||
const headersUi = this.getNodeParameter('headersUi', i) as IDataObject;
|
||||
if (!_.isEmpty(headersUi)) {
|
||||
// @ts-ignore
|
||||
body.message.headers = _.map(headersUi.headersValues, (o) => {
|
||||
const aux: IDataObject = {};
|
||||
const headersUi = this.getNodeParameter('headersUi', i) as IDataObject;
|
||||
if (!_.isEmpty(headersUi)) {
|
||||
// @ts-ignore
|
||||
aux[o.name] = o.value;
|
||||
return aux;
|
||||
});
|
||||
}
|
||||
|
||||
const metadataUi = this.getNodeParameter('metadataUi', i) as IDataObject;
|
||||
if (!_.isEmpty(metadataUi)) {
|
||||
// @ts-ignore
|
||||
body.message.metadata = _.map(metadataUi.metadataValues, (o: IDataObject) => {
|
||||
const aux: IDataObject = {};
|
||||
aux[o.name as string] = o.value;
|
||||
return aux;
|
||||
});
|
||||
}
|
||||
|
||||
const mergeVarsUi = this.getNodeParameter('mergeVarsUi', i) as IDataObject;
|
||||
if (!_.isEmpty(mergeVarsUi)) {
|
||||
// @ts-ignore
|
||||
body.message.global_merge_vars = _.map(mergeVarsUi.mergeVarsValues, (o: IDataObject) => {
|
||||
const aux: IDataObject = {};
|
||||
aux.name = o.name;
|
||||
aux.content = o.content;
|
||||
return aux;
|
||||
});
|
||||
}
|
||||
|
||||
const attachmentsUi = this.getNodeParameter('attachmentsUi', i) as IDataObject;
|
||||
let attachmentsBinary: Attachments[] = [], attachmentsValues: Attachments[] = [];
|
||||
if (!_.isEmpty(attachmentsUi)) {
|
||||
|
||||
if (attachmentsUi.hasOwnProperty('attachmentsValues')
|
||||
&& !_.isEmpty(attachmentsUi.attachmentsValues)) {
|
||||
// @ts-ignore
|
||||
attachmentsValues = _.map(attachmentsUi.attachmentsValues, (o: IDataObject) => {
|
||||
body.message.headers = _.map(headersUi.headersValues, (o) => {
|
||||
const aux: IDataObject = {};
|
||||
// @ts-ignore
|
||||
aux.name = o.name;
|
||||
aux.content = o.content;
|
||||
aux.type = o.type;
|
||||
aux[o.name] = o.value;
|
||||
return aux;
|
||||
});
|
||||
}
|
||||
|
||||
if (attachmentsUi.hasOwnProperty('attachmentsBinary')
|
||||
&& !_.isEmpty(attachmentsUi.attachmentsBinary)
|
||||
&& items[i].binary) {
|
||||
const metadataUi = this.getNodeParameter('metadataUi', i) as IDataObject;
|
||||
if (!_.isEmpty(metadataUi)) {
|
||||
// @ts-ignore
|
||||
attachmentsBinary = _.map(attachmentsUi.attachmentsBinary, (o: IDataObject) => {
|
||||
if (items[i].binary!.hasOwnProperty(o.property as string)) {
|
||||
const aux: IDataObject = {};
|
||||
aux.name = items[i].binary![o.property as string].fileName || 'unknown';
|
||||
aux.content = items[i].binary![o.property as string].data;
|
||||
aux.type = items[i].binary![o.property as string].mimeType;
|
||||
return aux;
|
||||
}
|
||||
body.message.metadata = _.map(metadataUi.metadataValues, (o: IDataObject) => {
|
||||
const aux: IDataObject = {};
|
||||
aux[o.name as string] = o.value;
|
||||
return aux;
|
||||
});
|
||||
}
|
||||
|
||||
const mergeVarsUi = this.getNodeParameter('mergeVarsUi', i) as IDataObject;
|
||||
if (!_.isEmpty(mergeVarsUi)) {
|
||||
// @ts-ignore
|
||||
body.message.global_merge_vars = _.map(mergeVarsUi.mergeVarsValues, (o: IDataObject) => {
|
||||
const aux: IDataObject = {};
|
||||
aux.name = o.name;
|
||||
aux.content = o.content;
|
||||
return aux;
|
||||
});
|
||||
}
|
||||
|
||||
const attachmentsUi = this.getNodeParameter('attachmentsUi', i) as IDataObject;
|
||||
let attachmentsBinary: Attachments[] = [], attachmentsValues: Attachments[] = [];
|
||||
if (!_.isEmpty(attachmentsUi)) {
|
||||
|
||||
if (attachmentsUi.hasOwnProperty('attachmentsValues')
|
||||
&& !_.isEmpty(attachmentsUi.attachmentsValues)) {
|
||||
// @ts-ignore
|
||||
attachmentsValues = _.map(attachmentsUi.attachmentsValues, (o: IDataObject) => {
|
||||
const aux: IDataObject = {};
|
||||
// @ts-ignore
|
||||
aux.name = o.name;
|
||||
aux.content = o.content;
|
||||
aux.type = o.type;
|
||||
return aux;
|
||||
});
|
||||
}
|
||||
|
||||
if (attachmentsUi.hasOwnProperty('attachmentsBinary')
|
||||
&& !_.isEmpty(attachmentsUi.attachmentsBinary)
|
||||
&& items[i].binary) {
|
||||
// @ts-ignore
|
||||
attachmentsBinary = _.map(attachmentsUi.attachmentsBinary, (o: IDataObject) => {
|
||||
if (items[i].binary!.hasOwnProperty(o.property as string)) {
|
||||
const aux: IDataObject = {};
|
||||
aux.name = items[i].binary![o.property as string].fileName || 'unknown';
|
||||
aux.content = items[i].binary![o.property as string].data;
|
||||
aux.type = items[i].binary![o.property as string].mimeType;
|
||||
return aux;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
body.message.attachments = attachmentsBinary.concat(attachmentsValues);
|
||||
}
|
||||
|
||||
body.message.attachments = attachmentsBinary.concat(attachmentsValues);
|
||||
}
|
||||
if (operation === 'sendTemplate') {
|
||||
const template = this.getNodeParameter('template', i) as string;
|
||||
body.template_name = template;
|
||||
emailSentResponse = mandrillApiRequest.call(this, '/messages', 'POST', '/send-template', body);
|
||||
} else if (operation === 'sendHtml') {
|
||||
emailSentResponse = mandrillApiRequest.call(this, '/messages', 'POST', '/send', body);
|
||||
}
|
||||
|
||||
if (operation === 'sendTemplate') {
|
||||
const template = this.getNodeParameter('template', i) as string;
|
||||
body.template_name = template;
|
||||
emailSentResponse = mandrillApiRequest.call(this, '/messages', 'POST', '/send-template', body);
|
||||
} else if (operation === 'sendHtml') {
|
||||
emailSentResponse = mandrillApiRequest.call(this, '/messages', 'POST', '/send', body);
|
||||
responseData = await emailSentResponse;
|
||||
}
|
||||
|
||||
responseData = await emailSentResponse;
|
||||
}
|
||||
if (Array.isArray(responseData)) {
|
||||
returnData.push.apply(returnData, responseData as IDataObject[]);
|
||||
} else {
|
||||
returnData.push(responseData as IDataObject);
|
||||
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)];
|
||||
|
||||
Reference in New Issue
Block a user