import { OptionsWithUri, } from 'request'; import { IExecuteFunctions, ILoadOptionsFunctions, } from 'n8n-core'; import { IDataObject, IHookFunctions, IWebhookFunctions } from 'n8n-workflow'; export async function postmarkApiRequest(this: IExecuteFunctions | IWebhookFunctions | IHookFunctions | ILoadOptionsFunctions, method : string, endpoint : string, body: any = {}, option: IDataObject = {}): Promise { // tslint:disable-line:no-any const credentials = this.getCredentials('postmarkApi'); if (credentials === undefined) { throw new Error('No credentials got returned!'); } let options: OptionsWithUri = { headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'X-Postmark-Server-Token' : credentials.serverToken }, method, body, uri: 'https://api.postmarkapp.com' + endpoint, json: true }; if (body === {}) { delete options.body; } options = Object.assign({}, options, option); try { return await this.helpers.request!(options); } catch (error) { throw new Error(`Postmark: ${error.statusCode} Message: ${error.message}`); } } // tslint:disable-next-line: no-any export function convertTriggerObjectToStringArray (webhookObject : any) : string[] { const triggers = webhookObject.Triggers; const webhookEvents : string[] = []; // Translate Webhook trigger settings to string array if (triggers.Open.Enabled) { webhookEvents.push('open'); } if (triggers.Open.PostFirstOpenOnly) { webhookEvents.push('firstOpen'); } if (triggers.Click.Enabled) { webhookEvents.push('click'); } if (triggers.Delivery.Enabled) { webhookEvents.push('delivery'); } if (triggers.Bounce.Enabled) { webhookEvents.push('bounce'); } if (triggers.Bounce.IncludeContent) { webhookEvents.push('bounceContent'); } if (triggers.SpamComplaint.Enabled) { webhookEvents.push('spamComplaint'); } if (triggers.SpamComplaint.IncludeContent) { webhookEvents.push('spamComplaintContent'); } if (triggers.SubscriptionChange.Enabled) { webhookEvents.push('subscriptionChange'); } return webhookEvents; } export function eventExists (currentEvents : string[], webhookEvents: string[]) { for (const currentEvent of currentEvents) { if (!webhookEvents.includes(currentEvent)) { return false; } } return true; }