From 0e340a1e2b843331ec3039aca5538de3730dfdd6 Mon Sep 17 00:00:00 2001 From: Ricardo Espinoza Date: Sat, 21 Dec 2019 21:44:56 -0500 Subject: [PATCH 1/2] done done --- .../credentials/TogglApi.credentials.ts | 24 ++ .../nodes/Toggl/GenericFunctions.ts | 46 +++ .../nodes/Toggl/TogglTrigger.node.ts | 275 ++++++++++++++++++ packages/nodes-base/nodes/Toggl/toggl.png | Bin 0 -> 36857 bytes packages/nodes-base/package.json | 6 +- 5 files changed, 349 insertions(+), 2 deletions(-) create mode 100644 packages/nodes-base/credentials/TogglApi.credentials.ts create mode 100644 packages/nodes-base/nodes/Toggl/GenericFunctions.ts create mode 100644 packages/nodes-base/nodes/Toggl/TogglTrigger.node.ts create mode 100644 packages/nodes-base/nodes/Toggl/toggl.png diff --git a/packages/nodes-base/credentials/TogglApi.credentials.ts b/packages/nodes-base/credentials/TogglApi.credentials.ts new file mode 100644 index 0000000000..d2af640c46 --- /dev/null +++ b/packages/nodes-base/credentials/TogglApi.credentials.ts @@ -0,0 +1,24 @@ +import { + ICredentialType, + NodePropertyTypes, +} from 'n8n-workflow'; + + +export class TogglApi implements ICredentialType { + name = 'togglApi'; + displayName = 'Toggl API'; + properties = [ + { + displayName: 'Username', + name: 'username', + type: 'string' as NodePropertyTypes, + default: '', + }, + { + displayName: 'Password', + name: 'password', + type: 'string' as NodePropertyTypes, + default: '', + }, + ]; +} diff --git a/packages/nodes-base/nodes/Toggl/GenericFunctions.ts b/packages/nodes-base/nodes/Toggl/GenericFunctions.ts new file mode 100644 index 0000000000..c971d7e2bb --- /dev/null +++ b/packages/nodes-base/nodes/Toggl/GenericFunctions.ts @@ -0,0 +1,46 @@ +import { OptionsWithUri } from 'request'; + +import { + IExecuteFunctions, + IHookFunctions, + ILoadOptionsFunctions, + IExecuteSingleFunctions, + ITriggerFunctions, + BINARY_ENCODING, + getLoadOptionsFunctions +} from 'n8n-core'; + +import { + IDataObject, +} from 'n8n-workflow'; + +export async function togglApiRequest(this: ITriggerFunctions | IHookFunctions | IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, method: string, resource: string, body: any = {}, query?: IDataObject, uri?: string): Promise { // tslint:disable-line:no-any + const credentials = this.getCredentials('togglApi'); + if (credentials === undefined) { + throw new Error('No credentials got returned!'); + } + const headerWithAuthentication = Object.assign({}, + { Authorization: ` Basic ${Buffer.from(`${credentials.username}:${credentials.password}`).toString(BINARY_ENCODING)}` }); + + const options: OptionsWithUri = { + headers: headerWithAuthentication, + method, + qs: query, + uri: uri || `https://www.toggl.com/api/v8${resource}`, + body, + json: true + }; + if (Object.keys(options.body).length === 0) { + delete options.body; + } + try { + return await this.helpers.request!(options); + } catch (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/Toggl/TogglTrigger.node.ts b/packages/nodes-base/nodes/Toggl/TogglTrigger.node.ts new file mode 100644 index 0000000000..4b515ff26d --- /dev/null +++ b/packages/nodes-base/nodes/Toggl/TogglTrigger.node.ts @@ -0,0 +1,275 @@ +import { ITriggerFunctions } from 'n8n-core'; +import { + INodeType, + INodeTypeDescription, + ITriggerResponse, + IDataObject, +} from 'n8n-workflow'; + +import { CronJob } from 'cron'; +import * as moment from 'moment'; +import { togglApiRequest } from './GenericFunctions'; + +export class TogglTrigger implements INodeType { + description: INodeTypeDescription = { + displayName: 'Toggl', + name: 'Toggl', + icon: 'file:toggl.png', + group: ['trigger'], + version: 1, + description: 'Starts the workflow when Toggl events occure', + defaults: { + name: 'Toggl', + color: '#00FF00', + }, + credentials: [ + { + name: 'togglApi', + required: true, + } + ], + inputs: [], + outputs: ['main'], + properties: [ + { + displayName: 'Event', + name: 'event', + type: 'options', + options: [ + { + name: 'New Time Entry', + value: 'newTimeEntry', + } + ], + required: true, + default: 'newTimeEntry', + }, + { + displayName: 'Mode', + name: 'mode', + type: 'options', + options: [ + { + name: 'Every Minute', + value: 'everyMinute' + }, + { + name: 'Every Hour', + value: 'everyHour' + }, + { + name: 'Every Day', + value: 'everyDay' + }, + { + name: 'Every Week', + value: 'everyWeek' + }, + { + name: 'Every Month', + value: 'everyMonth' + }, + { + name: 'Custom', + value: 'custom' + }, + ], + default: 'everyDay', + description: 'How often to trigger.', + }, + { + displayName: 'Hour', + name: 'hour', + type: 'number', + typeOptions: { + minValue: 0, + maxValue: 23, + }, + displayOptions: { + hide: { + mode: [ + 'custom', + 'everyHour', + 'everyMinute' + ], + }, + }, + default: 14, + description: 'The hour of the day to trigger (24h format).', + }, + { + displayName: 'Minute', + name: 'minute', + type: 'number', + typeOptions: { + minValue: 0, + maxValue: 59, + }, + displayOptions: { + hide: { + mode: [ + 'custom', + 'everyMinute' + ], + }, + }, + default: 0, + description: 'The minute of the day to trigger.', + }, + { + displayName: 'Day of Month', + name: 'dayOfMonth', + type: 'number', + displayOptions: { + show: { + mode: [ + 'everyMonth', + ], + }, + }, + typeOptions: { + minValue: 1, + maxValue: 31, + }, + default: 1, + description: 'The day of the month to trigger.', + }, + { + displayName: 'Weekday', + name: 'weekday', + type: 'options', + displayOptions: { + show: { + mode: [ + 'everyWeek', + ], + }, + }, + options: [ + { + name: 'Monday', + value: '1', + }, + { + name: 'Tuesday', + value: '2', + }, + { + name: 'Wednesday', + value: '3', + }, + { + name: 'Thursday', + value: '4', + }, + { + name: 'Friday', + value: '5', + }, + { + name: 'Saturday', + value: '6', + }, + { + name: 'Sunday', + value: '0', + }, + ], + default: '1', + description: 'The weekday to trigger.', + }, + { + displayName: 'Cron Expression', + name: 'cronExpression', + type: 'string', + displayOptions: { + show: { + mode: [ + 'custom', + ], + }, + }, + default: '* * * * * *', + description: 'Use custom cron expression. Values and ranges as follows:', + }, + ] + }; + + async trigger(this: ITriggerFunctions): Promise { + const webhookData = this.getWorkflowStaticData('node'); + const mode = this.getNodeParameter('mode') as string; + const event = this.getNodeParameter('event') as string; + // Get all the trigger times + let cronTime; + let endpoint: string; + //let parameterName: string; + if (mode === 'custom') { + const cronExpression = this.getNodeParameter('cronExpression') as string; + cronTime = cronExpression as string; + } + if (mode === 'everyMinute') { + cronTime = `* * * * *`; + } + if (mode === 'everyHour') { + const minute = this.getNodeParameter('minute') as string; + cronTime = `${minute} * * * *`; + } + if (mode === 'everyDay') { + const hour = this.getNodeParameter('hour') as string; + const minute = this.getNodeParameter('minute') as string; + cronTime = `${minute} ${hour} * * *`; + } + if (mode === 'everyWeek') { + const weekday = this.getNodeParameter('weekday') as string; + const hour = this.getNodeParameter('hour') as string; + const minute = this.getNodeParameter('minute') as string; + cronTime = `${minute} ${hour} * * ${weekday}`; + } + if (mode === 'everyMonth') { + const dayOfMonth = this.getNodeParameter('dayOfMonth') as string; + const hour = this.getNodeParameter('hour') as string; + const minute = this.getNodeParameter('minute') as string; + cronTime = `${minute} ${hour} ${dayOfMonth} * *`; + } + if (event === 'newTimeEntry') { + endpoint = '/time_entries'; + } + + const executeTrigger = async () => { + const qs: IDataObject = {}; + let timeEntries = []; + qs.start_date = webhookData.lastTimeChecked; + qs.end_date = moment().format(); + try { + timeEntries = await togglApiRequest.call(this, 'GET', endpoint, {}, qs); + } catch (err) { + throw new Error(`Toggl Trigger Error: ${err}`); + } + if (Array.isArray(timeEntries) && timeEntries.length !== 0) { + this.emit([this.helpers.returnJsonArray(timeEntries)]); + } + webhookData.lastTimeChecked = qs.end_date; + }; + + const timezone = this.getTimezone(); + + // Start the cron-jobs + const cronJob = new CronJob(cronTime as string, executeTrigger, undefined, true, timezone); + + // Stop the cron-jobs + async function closeFunction() { + cronJob.stop(); + } + + async function manualTriggerFunction() { + executeTrigger(); + } + if (webhookData.lastTimeChecked === undefined) { + webhookData.lastTimeChecked = moment().format(); + } + return { + closeFunction, + manualTriggerFunction, + }; + } +} diff --git a/packages/nodes-base/nodes/Toggl/toggl.png b/packages/nodes-base/nodes/Toggl/toggl.png new file mode 100644 index 0000000000000000000000000000000000000000..06cbdb7caac83739e48625b22b8d57615f3072f1 GIT binary patch literal 36857 zcmeHQ2|SeB-=897r%frcM3G^3GZV6J*+QkR%FGxH!_1u-TdSpoNGd5y+!n1$g-Tj1 zrA@Raty)zSH>J|@KF^HjnW;LU;o z*Nj3%Vo<0T0Vou8BMPO#%{@8|OhumSJd2M)nd*bT17ZrMM4?cN`7B>QfuFk@mB9%& zr3G^6Ow*WfE)W~YIfe@S8_pEabYjBU5qxTlrJgVb75EiM~Q>DY02 zOdX;r!4#usrJ$puW5EjyqI%mqcEf>hmU5^+kz5>DV**3?7RsU~wXJz;tPJPNcw6PY=up{^>4fI2X<+g5O;$ zpnhgCG_D!e6l2y4$ld+Nu<-C6k$izSQ(UtiGvxcma+zk{Og<-)$6x}{^?ND;U*Hf0 zRH?g({zgI$QOpQIk4XW<`FaKaI4yx0H@L?N0br*eLwm;Y1@^4)9|J`V0Yqa)@Bt

{@K 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 J`)mUe{s(k^K)C<_ literal 0 HcmV?d00001 diff --git a/packages/nodes-base/package.json b/packages/nodes-base/package.json index 5afa6b431c..a657584302 100644 --- a/packages/nodes-base/package.json +++ b/packages/nodes-base/package.json @@ -72,7 +72,8 @@ "dist/credentials/TypeformApi.credentials.js", "dist/credentials/MandrillApi.credentials.js", "dist/credentials/TodoistApi.credentials.js", - "dist/credentials/TypeformApi.credentials.js" + "dist/credentials/TypeformApi.credentials.js", + "dist/credentials/TogglApi.credentials.js" ], "nodes": [ "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", @@ -152,7 +153,8 @@ "dist/nodes/Trello/Trello.node.js", "dist/nodes/Trello/TrelloTrigger.node.js", "dist/nodes/Twilio/Twilio.node.js", - "dist/nodes/Typeform/TypeformTrigger.node.js", + "dist/nodes/Typeform/TypeformTrigger.node.js", + "dist/nodes/Toggl/TogglTrigger.node.js", "dist/nodes/WriteBinaryFile.node.js", "dist/nodes/Webhook.node.js", "dist/nodes/Xml.node.js", From c630a3583c5504ecb28c38c668e2ce80fcff2411 Mon Sep 17 00:00:00 2001 From: Ricardo Espinoza Date: Sun, 22 Dec 2019 08:12:12 -0500 Subject: [PATCH 2/2] fix --- packages/nodes-base/package.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/nodes-base/package.json b/packages/nodes-base/package.json index d767f6beed..7912bf3169 100644 --- a/packages/nodes-base/package.json +++ b/packages/nodes-base/package.json @@ -72,13 +72,9 @@ "dist/credentials/TypeformApi.credentials.js", "dist/credentials/MandrillApi.credentials.js", "dist/credentials/TodoistApi.credentials.js", -<<<<<<< HEAD - "dist/credentials/TypeformApi.credentials.js", - "dist/credentials/TogglApi.credentials.js" -======= "dist/credentials/TypeformApi.credentials.js", + "dist/credentials/TogglApi.credentials.js", "dist/credentials/VeroApi.credentials.js" ->>>>>>> master ], "nodes": [ "dist/nodes/ActiveCampaign/ActiveCampaign.node.js",