diff --git a/packages/components/nodes/tools/MakeWebhook/MakeWebhook.ts b/packages/components/nodes/tools/MakeWebhook/MakeWebhook.ts new file mode 100644 index 000000000..38e0cdd1e --- /dev/null +++ b/packages/components/nodes/tools/MakeWebhook/MakeWebhook.ts @@ -0,0 +1,48 @@ +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { getBaseClasses } from '../../../src/utils' +import { MakeWebhookTool } from './core' + +class MakeWebhook_Tools implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'Make.com Webhook' + this.name = 'makeWebhook' + this.type = 'MakeWebhook' + this.icon = 'make.png' + this.category = 'Tools' + this.description = 'Execute webhook calls on Make.com' + this.inputs = [ + { + label: 'Webhook Url', + name: 'url', + type: 'string', + placeholder: 'https://hook.eu1.make.com/abcdefg' + }, + { + label: 'Tool Description', + name: 'desc', + type: 'string', + rows: 4, + placeholder: 'Useful when need to send message to Discord' + } + ] + this.baseClasses = [this.type, ...getBaseClasses(MakeWebhookTool)] + } + + async init(nodeData: INodeData): Promise { + const url = nodeData.inputs?.url as string + const desc = nodeData.inputs?.desc as string + + return new MakeWebhookTool(url, desc, 'GET') + } +} + +module.exports = { nodeClass: MakeWebhook_Tools } diff --git a/packages/components/nodes/tools/MakeWebhook/core.ts b/packages/components/nodes/tools/MakeWebhook/core.ts new file mode 100644 index 000000000..8b04ecb96 --- /dev/null +++ b/packages/components/nodes/tools/MakeWebhook/core.ts @@ -0,0 +1,41 @@ +import axios, { AxiosRequestConfig, Method } from 'axios' +import { Tool } from 'langchain/tools' +import { ICommonObject } from '../../../src/Interface' + +export class MakeWebhookTool extends Tool { + private url: string + + name: string + + description: string + + method: string + + headers: ICommonObject + + constructor(url: string, description: string, method = 'POST', headers: ICommonObject = {}) { + super() + this.url = url + this.name = 'make_webhook' + this.description = description ?? `useful for when you need to execute tasks on Make` + this.method = method + this.headers = headers + } + + async _call(): Promise { + try { + const axiosConfig: AxiosRequestConfig = { + method: this.method as Method, + url: this.url, + headers: { + ...this.headers, + 'Content-Type': 'application/json' + } + } + const response = await axios(axiosConfig) + return typeof response.data === 'object' ? JSON.stringify(response.data) : response.data + } catch (error) { + throw new Error(`HTTP error ${error}`) + } + } +} diff --git a/packages/components/nodes/tools/MakeWebhook/make.png b/packages/components/nodes/tools/MakeWebhook/make.png new file mode 100644 index 000000000..968afcb58 Binary files /dev/null and b/packages/components/nodes/tools/MakeWebhook/make.png differ