diff --git a/packages/nodes-base/nodes/Signl4/GenericFunctions.ts b/packages/nodes-base/nodes/Signl4/GenericFunctions.ts index 5281ae8c25ede..78e745e76cfb8 100644 --- a/packages/nodes-base/nodes/Signl4/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Signl4/GenericFunctions.ts @@ -8,17 +8,26 @@ import { import { OptionsWithUri, - } from 'request'; +} from 'request'; /** * Make an API request to SIGNL4 * * @param {IHookFunctions | IExecuteFunctions} this - * @param {object} message + * @param {string} method + * @param {string} contentType + * @param {string} body + * @param {object} query + * @param {string} teamSecret + * @param {object} options * @returns {Promise} + * */ -export async function SIGNL4ApiRequest(this: IExecuteFunctions, method: string, resource: string, body: any = {}, query: IDataObject = {}, uri?: string, option: IDataObject = {}): Promise { // tslint:disable-line:no-any +export async function SIGNL4ApiRequest(this: IExecuteFunctions, method: string, body: string, query: IDataObject = {}, option: IDataObject = {}): Promise { // tslint:disable-line:no-any + const credentials = this.getCredentials('signl4Api'); + + const teamSecret = credentials?.teamSecret as string; let options: OptionsWithUri = { headers: { @@ -27,7 +36,7 @@ export async function SIGNL4ApiRequest(this: IExecuteFunctions, method: string, method, body, qs: query, - uri: uri || ``, + uri: `https://connect.signl4.com/webhook/${teamSecret}`, json: true, }; diff --git a/packages/nodes-base/nodes/Signl4/Signl4.node.json b/packages/nodes-base/nodes/Signl4/Signl4.node.json index e6e06e864fcad..8337da9d3017e 100644 --- a/packages/nodes-base/nodes/Signl4/Signl4.node.json +++ b/packages/nodes-base/nodes/Signl4/Signl4.node.json @@ -1,7 +1,7 @@ { "node": "n8n-nodes-base.signl4", - "nodeVersion": "1.0", - "codexVersion": "1.0", + "nodeVersion": "1.1", + "codexVersion": "1.1", "categories": [ "Communication", "Development" diff --git a/packages/nodes-base/nodes/Signl4/Signl4.node.ts b/packages/nodes-base/nodes/Signl4/Signl4.node.ts index 2b8defc44095e..1a729502ab68e 100644 --- a/packages/nodes-base/nodes/Signl4/Signl4.node.ts +++ b/packages/nodes-base/nodes/Signl4/Signl4.node.ts @@ -264,20 +264,18 @@ export class Signl4 implements INodeType { // Send alert if (operation === 'send') { const message = this.getNodeParameter('message', i) as string; - const additionalFields = this.getNodeParameter('additionalFields',i) as IDataObject; + const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject; const data: IDataObject = { message, }; - if (additionalFields.alertingScenario) { - data['X-S4-AlertingScenario'] = additionalFields.alertingScenario as string; - } - if (additionalFields.externalId) { - data['X-S4-ExternalID'] = additionalFields.externalId as string; + if (additionalFields.title) { + data.title = additionalFields.title as string; } - if (additionalFields.filtering) { - data['X-S4-Filtering'] = (additionalFields.filtering as boolean).toString(); + + if (additionalFields.service) { + data.service = additionalFields.service as string; } if (additionalFields.locationFieldsUi) { const locationUi = (additionalFields.locationFieldsUi as IDataObject).locationFieldsValues as IDataObject; @@ -285,16 +283,25 @@ export class Signl4 implements INodeType { data['X-S4-Location'] = `${locationUi.latitude},${locationUi.longitude}`; } } - if (additionalFields.service) { - data['X-S4-Service'] = additionalFields.service as string; + + if (additionalFields.alertingScenario) { + data['X-S4-AlertingScenario'] = additionalFields.alertingScenario as string; } - data['X-S4-Status'] = 'new'; - if (additionalFields.title) { - data['title'] = additionalFields.title as string; + + if (additionalFields.filtering) { + data['X-S4-Filtering'] = (additionalFields.filtering as boolean).toString(); } - const attachments = additionalFields.attachmentsUi as IDataObject; + if (additionalFields.externalId) { + data['X-S4-ExternalID'] = additionalFields.externalId as string; + } + data['X-S4-Status'] = 'new'; + + data['X-S4-SourceSystem'] = 'n8n'; + + // Attachments + const attachments = additionalFields.attachmentsUi as IDataObject; if (attachments) { if (attachments.attachmentsBinary && items[i].binary) { @@ -304,14 +311,14 @@ export class Signl4 implements INodeType { if (binaryProperty) { - const supportedFileExtension = ['png', 'jpg', 'txt']; + const supportedFileExtension = ['png', 'jpg', 'jpeg', 'bmp', 'gif', 'mp3', 'wav']; if (!supportedFileExtension.includes(binaryProperty.fileExtension as string)) { throw new Error(`Invalid extension, just ${supportedFileExtension.join(',')} are supported}`); } - data['file'] = { + data.attachment = { value: Buffer.from(binaryProperty.data, BINARY_ENCODING), options: { filename: binaryProperty.fileName, @@ -325,18 +332,14 @@ export class Signl4 implements INodeType { } } - const credentials = this.getCredentials('signl4Api'); - - const endpoint = `https://connect.signl4.com/webhook/${credentials?.teamSecret}`; - responseData = await SIGNL4ApiRequest.call( this, 'POST', '', - data, - {}, - endpoint, {}, + { + formData: data, + }, ); } // Resolve alert @@ -348,26 +351,24 @@ export class Signl4 implements INodeType { data['X-S4-Status'] = 'resolved'; - const credentials = this.getCredentials('signl4Api'); - - const endpoint = `https://connect.signl4.com/webhook/${credentials?.teamSecret}`; + data['X-S4-SourceSystem'] = 'n8n'; responseData = await SIGNL4ApiRequest.call( this, 'POST', '', - data, - {}, - endpoint, {}, + { + formData: data, + }, ); } } - } - if (Array.isArray(responseData)) { - returnData.push.apply(returnData, responseData as IDataObject[]); - } else if (responseData !== undefined) { - returnData.push(responseData as IDataObject); + if (Array.isArray(responseData)) { + returnData.push.apply(returnData, responseData as IDataObject[]); + } else if (responseData !== undefined) { + returnData.push(responseData as IDataObject); + } } return [this.helpers.returnJsonArray(returnData)]; }