Reuse webhook if one exists - Woocommerce Trigger (#1196)

This commit is contained in:
Ricardo Espinoza 2020-11-20 10:56:51 -05:00 committed by GitHub
parent 8214a7f22a
commit 07ed360f8f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 16 deletions

View file

@ -1,6 +1,6 @@
import { OptionsWithUri } from 'request';
import { createHash } from 'crypto';
import { snakeCase } from 'change-case';
import {
OptionsWithUri,
} from 'request';
import {
IExecuteFunctions,
@ -13,6 +13,7 @@ import {
ICredentialDataDecryptedObject,
IDataObject,
} from 'n8n-workflow';
import {
ICouponLine,
IFeeLine,
@ -20,6 +21,14 @@ import {
IShoppingLine,
} from './OrderInterface';
import {
createHash,
} from 'crypto';
import {
snakeCase,
} from 'change-case';
export async function woocommerceApiRequest(this: IHookFunctions | IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions | IWebhookFunctions, method: string, resource: string, body: any = {}, qs: IDataObject = {}, uri?: string, option: IDataObject = {}): Promise<any> { // tslint:disable-line:no-any
const credentials = this.getCredentials('wooCommerceApi');
if (credentials === undefined) {
@ -40,6 +49,7 @@ export async function woocommerceApiRequest(this: IHookFunctions | IExecuteFunct
delete options.form;
}
options = Object.assign({}, options, option);
try {
return await this.helpers.request!(options);
} catch (error) {
@ -58,7 +68,7 @@ export async function woocommerceApiRequest(this: IHookFunctions | IExecuteFunct
}
}
export async function woocommerceApiRequestAllItems(this: IExecuteFunctions | ILoadOptionsFunctions, method: string, endpoint: string, body: any = {}, query: IDataObject = {}): Promise<any> { // tslint:disable-line:no-any
export async function woocommerceApiRequestAllItems(this: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions, method: string, endpoint: string, body: any = {}, query: IDataObject = {}): Promise<any> { // tslint:disable-line:no-any
const returnData: IDataObject[] = [];
@ -135,4 +145,4 @@ export function toSnakeCase(data:
}
}
}
}
}

View file

@ -15,7 +15,9 @@ import {
woocommerceApiRequest,
} from './GenericFunctions';
import { createHmac } from 'crypto';
import {
createHmac,
} from 'crypto';
export class WooCommerceTrigger implements INodeType {
description: INodeTypeDescription = {
@ -112,17 +114,22 @@ export class WooCommerceTrigger implements INodeType {
webhookMethods = {
default: {
async checkExists(this: IHookFunctions): Promise<boolean> {
const webhookUrl = this.getNodeWebhookUrl('default');
const webhookData = this.getWorkflowStaticData('node');
if (webhookData.webhookId === undefined) {
return false;
const currentEvent = this.getNodeParameter('event') as string;
const endpoint = `/webhooks`;
const webhooks = await woocommerceApiRequest.call(this, 'GET', endpoint, {}, { status: 'active', per_page: 100 });
for (const webhook of webhooks) {
if (webhook.status === 'active'
&& webhook.delivery_url === webhookUrl
&& webhook.topic === currentEvent) {
webhookData.webhookId = webhook.id;
return true;
}
}
const endpoint = `/webhooks/${webhookData.webhookId}`;
try {
await woocommerceApiRequest.call(this, 'GET', endpoint);
} catch (e) {
return false;
}
return true;
return false;
},
async create(this: IHookFunctions): Promise<boolean> {
const credentials = this.getCredentials('wooCommerceApi');
@ -178,4 +185,4 @@ export class WooCommerceTrigger implements INodeType {
],
};
}
}
}