Skip to content

Commit

Permalink
✨ Add attachment types to Signl4 Node (#1388)
Browse files Browse the repository at this point in the history
* SIGNL4: Attachment Support

Attachment support added to SIGNL4.

* SI'GNL4: Attachment Support

Attachment support added for SIGNL4.

* Update GenericFunctions.ts

* Update GenericFunctions.ts

* Update GenericFunctions.ts

* Update GenericFunctions.ts

* ⚡ Improvements to #1356

Co-authored-by: rons4 <ron@signl4.com>
  • Loading branch information
janober and rons4 authored Jan 31, 2021
2 parents 63f2865 + 044218b commit 5549550
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 40 deletions.
17 changes: 13 additions & 4 deletions packages/nodes-base/nodes/Signl4/GenericFunctions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<any>}
*
*/

export async function SIGNL4ApiRequest(this: IExecuteFunctions, method: string, resource: string, body: any = {}, query: IDataObject = {}, uri?: string, option: IDataObject = {}): Promise<any> { // tslint:disable-line:no-any
export async function SIGNL4ApiRequest(this: IExecuteFunctions, method: string, body: string, query: IDataObject = {}, option: IDataObject = {}): Promise<any> { // tslint:disable-line:no-any
const credentials = this.getCredentials('signl4Api');

const teamSecret = credentials?.teamSecret as string;

let options: OptionsWithUri = {
headers: {
Expand All @@ -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,
};

Expand Down
4 changes: 2 additions & 2 deletions packages/nodes-base/nodes/Signl4/Signl4.node.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"node": "n8n-nodes-base.signl4",
"nodeVersion": "1.0",
"codexVersion": "1.0",
"nodeVersion": "1.1",
"codexVersion": "1.1",
"categories": [
"Communication",
"Development"
Expand Down
69 changes: 35 additions & 34 deletions packages/nodes-base/nodes/Signl4/Signl4.node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -264,37 +264,44 @@ 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;
if (locationUi) {
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) {

Expand All @@ -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,
Expand All @@ -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
Expand All @@ -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)];
}
Expand Down

0 comments on commit 5549550

Please sign in to comment.