From 9310d64131de11ee5a2b5a9e9a554d7e7d0fdf43 Mon Sep 17 00:00:00 2001 From: Jam Risser Date: Thu, 28 Nov 2019 01:20:15 +0000 Subject: [PATCH 1/2] Delete asana webhooks --- .../nodes/Asana/AsanaTrigger.node.ts | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/nodes-base/nodes/Asana/AsanaTrigger.node.ts b/packages/nodes-base/nodes/Asana/AsanaTrigger.node.ts index 10358b902d..60c0fe5691 100644 --- a/packages/nodes-base/nodes/Asana/AsanaTrigger.node.ts +++ b/packages/nodes-base/nodes/Asana/AsanaTrigger.node.ts @@ -53,6 +53,14 @@ export class AsanaTrigger implements INodeType { required: true, description: 'The resource ID to subscribe to. The resource can be a task or project.', }, + { + displayName: 'Workspace', + name: 'workspace', + type: 'string', + default: '', + required: false, + description: 'The workspace ID the resource is registered under. This is only required if you want to allow overriding existing webhooks.', + }, ], }; @@ -93,6 +101,8 @@ export class AsanaTrigger implements INodeType { const resource = this.getNodeParameter('resource') as string; + const workspace = this.getNodeParameter('workspace') as string; + const endpoint = `webhooks`; const body = { @@ -100,7 +110,22 @@ export class AsanaTrigger implements INodeType { target: webhookUrl, }; - const responseData = await asanaApiRequest.call(this, 'POST', endpoint, body); + let responseData + try { + responseData = await asanaApiRequest.call(this, 'POST', endpoint, body); + } catch(error) { + // delete webhook if it already exists + if (error.statusCode === 403) { + const webhookData = await asanaApiRequest.call(this, 'GET', endpoint, {}, { workspace }); + const webhook = webhookData.data.find((webhook: any) => { + return webhook.target === webhookUrl && webhook.resource.gid === resource + }); + await asanaApiRequest.call(this, 'DELETE', `${endpoint}/${webhook.gid}`, {}); + responseData = await asanaApiRequest.call(this, 'POST', endpoint, body); + } else { + throw error + } + } if (responseData.data === undefined || responseData.data.id === undefined) { // Required data is missing so was not successful From f6808f212cb43383856ad962455b40e3eb7339b6 Mon Sep 17 00:00:00 2001 From: Jan Oberhauser Date: Sat, 30 Nov 2019 18:05:34 +0100 Subject: [PATCH 2/2] :shirt: Fix lint issue --- packages/nodes-base/nodes/Asana/AsanaTrigger.node.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/nodes-base/nodes/Asana/AsanaTrigger.node.ts b/packages/nodes-base/nodes/Asana/AsanaTrigger.node.ts index 60c0fe5691..77e79620e9 100644 --- a/packages/nodes-base/nodes/Asana/AsanaTrigger.node.ts +++ b/packages/nodes-base/nodes/Asana/AsanaTrigger.node.ts @@ -110,20 +110,20 @@ export class AsanaTrigger implements INodeType { target: webhookUrl, }; - let responseData + let responseData; try { responseData = await asanaApiRequest.call(this, 'POST', endpoint, body); } catch(error) { // delete webhook if it already exists if (error.statusCode === 403) { const webhookData = await asanaApiRequest.call(this, 'GET', endpoint, {}, { workspace }); - const webhook = webhookData.data.find((webhook: any) => { - return webhook.target === webhookUrl && webhook.resource.gid === resource + const webhook = webhookData.data.find((webhook: any) => { // tslint:disable-line:no-any + return webhook.target === webhookUrl && webhook.resource.gid === resource; }); await asanaApiRequest.call(this, 'DELETE', `${endpoint}/${webhook.gid}`, {}); responseData = await asanaApiRequest.call(this, 'POST', endpoint, body); } else { - throw error + throw error; } }