@vwork-digital/n8n-nodes-fillout
Version:
N8N nodes for Fillout forms - includes both trigger and action nodes.
174 lines • 6.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FilloutTrigger = void 0;
const n8n_workflow_1 = require("n8n-workflow");
class FilloutTrigger {
constructor() {
this.description = {
displayName: 'Fillout Trigger',
name: 'filloutTrigger',
icon: 'file:fillout.svg',
group: ['trigger'],
version: 1,
description: 'Starts the workflow when a Fillout form is submitted',
defaults: {
name: 'Fillout Trigger',
},
inputs: [],
outputs: ["main"],
credentials: [
{
name: 'filloutApi',
required: true,
},
],
webhooks: [
{
name: 'default',
httpMethod: 'POST',
responseMode: 'onReceived',
path: 'webhook',
},
],
properties: [
{
displayName: 'Form',
name: 'formId',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getForms',
},
default: '',
required: true,
description: 'The Fillout form that will trigger this workflow when a submission is received',
},
],
};
this.methods = {
loadOptions: {
async getForms() {
const credentials = await this.getCredentials('filloutApi');
try {
const response = await this.helpers.request({
method: 'GET',
url: `${credentials.apiUrl}/v1/api/forms`,
headers: {
Authorization: `Bearer ${credentials.apiKey}`,
},
json: true,
});
const forms = response;
return forms.map(form => ({
name: form.name,
value: form.formId,
}));
}
catch (error) {
console.error('[Fillout Trigger] Error loading forms:', error);
throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
}
},
},
};
this.webhookMethods = {
default: {
async checkExists() {
const webhookData = this.getWorkflowStaticData('node');
if (webhookData.webhookId === undefined) {
return false;
}
return true;
},
async create() {
const webhookUrl = this.getNodeWebhookUrl('default');
const webhookData = this.getWorkflowStaticData('node');
const formId = this.getNodeParameter('formId');
const credentials = await this.getCredentials('filloutApi');
try {
const response = await this.helpers.request({
method: 'POST',
url: `${credentials.apiUrl}/v1/api/webhook/create`,
body: {
formId,
url: webhookUrl,
},
headers: {
Authorization: `Bearer ${credentials.apiKey}`,
'Content-Type': 'application/json',
},
json: true,
});
if (!response || !response.id) {
throw new Error(`Failed to create webhook for form ${formId}. Response: ${JSON.stringify(response)}`);
}
webhookData.webhookId = response.id;
webhookData.formId = formId;
return true;
}
catch (error) {
console.error('[Fillout Trigger] Error creating webhook:', error);
throw error;
}
},
async delete() {
const webhookData = this.getWorkflowStaticData('node');
const credentials = await this.getCredentials('filloutApi');
if (webhookData.webhookId === undefined) {
return false;
}
const webhookId = webhookData.webhookId;
try {
const response = await this.helpers.request({
method: 'POST',
url: `${credentials.apiUrl}/v1/api/webhook/delete`,
body: {
webhookId,
},
headers: {
Authorization: `Bearer ${credentials.apiKey}`,
'Content-Type': 'application/json',
},
json: true,
});
console.log('[Fillout Trigger] Deleted webhook:', response);
delete webhookData.webhookId;
delete webhookData.formId;
return true;
}
catch (error) {
console.error('[Fillout Trigger] Error deleting webhook:', error);
return false;
}
},
},
};
}
async webhook() {
try {
let bodyData = this.getBodyData();
if (typeof bodyData === 'string') {
try {
bodyData = JSON.parse(bodyData);
}
catch (e) {
}
}
const processedData = (typeof bodyData === 'object') ? bodyData : { rawData: bodyData };
return {
workflowData: [
this.helpers.returnJsonArray([processedData]),
],
};
}
catch (error) {
console.error('[Fillout Trigger] Error processing webhook data:', error);
return {
workflowData: [
this.helpers.returnJsonArray([{ error: 'Error processing webhook data' }]),
],
};
}
}
}
exports.FilloutTrigger = FilloutTrigger;
//# sourceMappingURL=FilloutTrigger.node.js.map