From edc6651a9b0e79173f3fcf5a1cb3ae5311aa4834 Mon Sep 17 00:00:00 2001 From: Ricardo Espinoza Date: Fri, 8 Nov 2019 23:11:01 -0500 Subject: [PATCH] rocketchat-node-setup --- .../credentials/RocketchatApi.credentials.ts | 18 ++++++ .../nodes/Rocketchat/GenericFunctions.ts | 51 +++++++++++++++++ .../nodes/Rocketchat/Rocketchat.node.ts | 53 ++++++++++++++++++ .../nodes/Rocketchat/rocketchat.png | Bin 0 -> 5747 bytes packages/nodes-base/package.json | 6 +- 5 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 packages/nodes-base/credentials/RocketchatApi.credentials.ts create mode 100644 packages/nodes-base/nodes/Rocketchat/GenericFunctions.ts create mode 100644 packages/nodes-base/nodes/Rocketchat/Rocketchat.node.ts create mode 100644 packages/nodes-base/nodes/Rocketchat/rocketchat.png diff --git a/packages/nodes-base/credentials/RocketchatApi.credentials.ts b/packages/nodes-base/credentials/RocketchatApi.credentials.ts new file mode 100644 index 0000000000..ab6d0019ed --- /dev/null +++ b/packages/nodes-base/credentials/RocketchatApi.credentials.ts @@ -0,0 +1,18 @@ +import { + ICredentialType, + NodePropertyTypes, +} from 'n8n-workflow'; + + +export class RocketchatApi implements ICredentialType { + name = 'rocketchatApi'; + displayName = 'Rocket API'; + properties = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string' as NodePropertyTypes, + default: '', + }, + ]; +} diff --git a/packages/nodes-base/nodes/Rocketchat/GenericFunctions.ts b/packages/nodes-base/nodes/Rocketchat/GenericFunctions.ts new file mode 100644 index 0000000000..1e00514fc7 --- /dev/null +++ b/packages/nodes-base/nodes/Rocketchat/GenericFunctions.ts @@ -0,0 +1,51 @@ +import { OptionsWithUri } from 'request'; + +import { + IExecuteFunctions, + IHookFunctions, + ILoadOptionsFunctions, + IExecuteSingleFunctions, + BINARY_ENCODING +} from 'n8n-core'; + +import * as _ from 'lodash'; + +export async function rocketchatApiRequest(this: IHookFunctions | IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, resource: string, method: string, body: any = {}, headers?: object): Promise { // tslint:disable-line:no-any + + const credentials = this.getCredentials('rocketchatApi'); + + if (credentials === undefined) { + throw new Error('No credentials got returned!'); + } + + const apiKey = `${credentials.apiKey}:X`; + + const headerWithAuthentication = Object.assign({}, headers, { Authorization: `${Buffer.from(apiKey).toString(BINARY_ENCODING)}` }); + + const endpoint = ''; + + const options: OptionsWithUri = { + headers: headerWithAuthentication, + method, + body, + uri: `https://${credentials.domain}.${endpoint}${resource}`, + json: true + }; + + if (_.isEmpty(options.body)) { + delete options.body; + } + + try { + return await this.helpers.request!(options); + } catch (error) { + console.error(error); + + const errorMessage = error.response.body.message || error.response.body.Message; + + if (errorMessage !== undefined) { + throw errorMessage; + } + throw error.response.body; + } +} diff --git a/packages/nodes-base/nodes/Rocketchat/Rocketchat.node.ts b/packages/nodes-base/nodes/Rocketchat/Rocketchat.node.ts new file mode 100644 index 0000000000..1a2ff65341 --- /dev/null +++ b/packages/nodes-base/nodes/Rocketchat/Rocketchat.node.ts @@ -0,0 +1,53 @@ +import { + IExecuteSingleFunctions, +} from 'n8n-core'; +import { + IDataObject, + INodeTypeDescription, + INodeExecutionData, + INodeType, + ILoadOptionsFunctions, + INodePropertyOptions, +} from 'n8n-workflow'; +import { + rocketchatApiRequest +} from './GenericFunctions'; + + +export class Rocketchat implements INodeType { + + description: INodeTypeDescription = { + displayName: 'Rocketchat', + name: 'Rocketchat', + icon: 'file:Rocketchat.png', + group: ['output'], + version: 1, + subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', + description: 'Consume Rocketchat API', + defaults: { + name: 'Rocketchat', + color: '#c02428', + }, + inputs: ['main'], + outputs: ['main'], + credentials: [ + { + name: 'rocketchatApi', + required: true, + } + ], + properties: [ + + ] + }; + + methods = { + + }; + + async executeSingle(this: IExecuteSingleFunctions): Promise { + return { + json: {} + }; + } +} diff --git a/packages/nodes-base/nodes/Rocketchat/rocketchat.png b/packages/nodes-base/nodes/Rocketchat/rocketchat.png new file mode 100644 index 0000000000000000000000000000000000000000..93dfcacf17fb871a068195cc057ae93aa56fe6b3 GIT binary patch literal 5747 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