n8n-nodes-supersaas
Version:
n8n node to create webhook in SuperSaaS
218 lines • 9.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SuperSaaSTrigger = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const GenericFunctions_1 = require("./GenericFunctions");
class SuperSaaSTrigger {
constructor() {
this.description = {
displayName: 'SuperSaaS Trigger',
name: 'superSaaSTrigger',
icon: 'file:superSaaS.svg',
group: ['trigger'],
version: 1,
subtitle: '={{ $parameter["operation"] + ": " + $parameter["resource"] }}',
description: 'SuperSaaS trigger',
defaults: {
name: 'SuperSaaS Trigger',
},
inputs: [],
outputs: ["main"],
credentials: [
{
name: 'superSaaSApi',
required: true,
},
],
webhooks: [
{
name: 'default',
httpMethod: 'POST',
responseMode: 'onReceived',
path: 'webhook',
},
],
properties: [
{
displayName: 'Event (gets parent ID)',
name: 'events',
type: 'options',
options: [
{
name: 'Changed Appointment',
value: 'C',
},
{
name: 'Changed Credit',
value: 'P',
},
{
name: 'Changed Form',
value: 'O',
},
{
name: 'Changed User',
value: 'M',
},
{
name: 'New Appointment',
value: 'N',
},
{
name: 'New Form',
value: 'S',
},
{
name: 'New User',
value: 'U',
},
{
name: 'Send Mail',
value: 'H',
},
{
name: 'Sent Follow-Up',
value: 'F',
},
{
name: 'Sent Reminder',
value: 'R',
},
],
default: 'U',
description: 'Select Event',
required: true,
},
{
displayName: 'Parent ID',
name: 'schedule',
type: 'options',
default: [],
typeOptions: {
loadOptionsDependsOn: ['events'],
loadOptionsMethod: 'getSchedules',
},
description: 'Account, Schedule, FormID',
},
],
};
this.methods = {
loadOptions: {
async getSchedules() {
const event = this.getNodeParameter('events', 0);
let optionsRet = [];
if (event === 'U' || event === 'M' || event === 'H' || event === 'P') {
let account = await GenericFunctions_1.getAccount.call(this);
optionsRet.push({
name: "Account",
value: account
});
}
else if (event === 'N' || event === 'C' || event === 'R' || event === 'F') {
let responseData = await GenericFunctions_1.superSaaSApiRequest.call(this, 'GET', '/api/schedules.json');
let responseJSON = JSON.parse(responseData);
for (const item of responseJSON) {
const itemName = item["name"];
const itemID = item["id"];
optionsRet.push({
name: "Schedule: " + itemName,
value: itemID,
});
}
}
else if (event === 'S' || event === 'O') {
let responseData = await GenericFunctions_1.superSaaSApiRequest.call(this, 'GET', '/api/super_forms.json');
let responseJSON = JSON.parse(responseData);
for (const item of responseJSON) {
const itemName = item["name"];
const itemID = item["id"];
optionsRet.push({
name: "Form: " + itemName,
value: itemID,
});
}
}
return optionsRet;
},
}
};
this.webhookMethods = {
default: {
async checkExists() {
const webhookUrl = this.getNodeWebhookUrl('default');
const event = this.getNodeParameter('events');
let parentID = this.getNodeParameter('schedule');
let responseData = await GenericFunctions_1.superSaaSApiRequest.call(this, 'GET', '/api/hooks');
let responseJSON = JSON.parse(responseData);
for (const webhook of responseJSON) {
if (webhook.url === webhookUrl && webhook.trigger === event && webhook.parent_id === parentID) {
return true;
}
}
return false;
},
async create() {
var webhookUrl = this.getNodeWebhookUrl('default');
const event = this.getNodeParameter('events');
const parentId = this.getNodeParameter('schedule');
if (!parentId) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Parent ID is required');
}
try {
const creds = await this.getCredentials('superSaaSApi');
if (creds.ngrok && creds.ngrok.length > 0) {
webhookUrl = webhookUrl?.replace("http://localhost:5678", creds.ngrok);
}
console.log('Creating webhook with:', {
webhookUrl,
event,
parentId,
account: creds.account,
});
const responseData = await GenericFunctions_1.superSaaSApiRequest.call(this, 'POST', '/api/hooks', parentId, event, webhookUrl);
const response = typeof responseData === 'string' ? JSON.parse(responseData) : responseData;
if (!response || !response.id) {
throw new Error('Invalid response from webhook creation');
}
return true;
}
catch (error) {
console.error('Failed to create webhook, check API key:', {
error,
account: (await this.getCredentials('superSaaSApi')).account,
params: {
webhookUrl,
event,
parentId,
}
});
throw error;
}
},
async delete() {
const webhookData = this.getWorkflowStaticData('node');
if (webhookData.webhookID === undefined || webhookData.webhookParentID === undefined) {
return false;
}
try {
await GenericFunctions_1.superSaaSApiRequest.call(this, 'DELETE', '/api/hooks', webhookData.webhookParentID, null, null, webhookData.webhookID);
}
catch (error) {
return false;
}
delete webhookData.webhookID;
delete webhookData.webhookParentID;
return true;
},
},
};
}
async webhook() {
const bodyData = this.getBodyData();
return {
workflowData: [this.helpers.returnJsonArray(bodyData)],
};
}
}
exports.SuperSaaSTrigger = SuperSaaSTrigger;
//# sourceMappingURL=SuperSaaSTrigger.node.js.map