n8n-nodes-fatture-in-cloud
Version:
n8n community node for Fatture in Cloud integration using the official TypeScript SDK
296 lines • 14 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FattureInCloud = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const UserModule_1 = require("./modules/UserModule");
const CompaniesModule_1 = require("./modules/CompaniesModule");
const ClientsModule_1 = require("./modules/ClientsModule");
const IssuedDocumentsModule_1 = require("./modules/IssuedDocumentsModule");
const SuppliersModule_1 = require("./modules/SuppliersModule");
const ProductsModule_1 = require("./modules/ProductsModule");
const ReceivedDocumentsModule_1 = require("./modules/ReceivedDocumentsModule");
const ReceiptsModule_1 = require("./modules/ReceiptsModule");
const TaxesModule_1 = require("./modules/TaxesModule");
const ArchiveModule_1 = require("./modules/ArchiveModule");
const CashbookModule_1 = require("./modules/CashbookModule");
const InfoModule_1 = require("./modules/InfoModule");
const WebhooksModule_1 = require("./modules/WebhooksModule");
const SettingsModule_1 = require("./modules/SettingsModule");
const EInvoicesModule_1 = require("./modules/EInvoicesModule");
const EmailsModule_1 = require("./modules/EmailsModule");
class FattureInCloud {
constructor() {
this.description = {
displayName: 'Fatture in Cloud',
name: 'fattureInCloud',
icon: 'file:fic.svg',
group: ['productivity'],
version: 1,
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Interact with Fatture in Cloud API',
defaults: {
name: 'Fatture in Cloud',
},
inputs: ["main"],
outputs: ["main"],
usableAsTool: true,
credentials: [
{
name: 'fattureInCloudOAuth2Api',
required: true,
},
],
properties: [
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: [
{
name: 'Archive Document',
value: 'archive',
},
{
name: 'Cashbook',
value: 'cashbook',
},
{
name: 'Client',
value: 'client',
},
{
name: 'Company',
value: 'company',
},
{
name: 'E-Invoice',
value: 'eInvoices',
},
{
name: 'Email',
value: 'emails',
},
{
name: 'Info',
value: 'info',
},
{
name: 'Issued Document',
value: 'issuedDocument',
},
{
name: 'Product',
value: 'product',
},
{
name: 'Receipt',
value: 'receipt',
},
{
name: 'Received Document',
value: 'receivedDocument',
},
{
name: 'Setting',
value: 'settings',
},
{
name: 'Supplier',
value: 'supplier',
},
{
name: 'Tax (F24)',
value: 'tax',
},
{
name: 'User',
value: 'user',
},
{
name: 'Webhook',
value: 'webhook',
},
],
default: 'issuedDocument',
},
],
};
this.modules = new Map();
const userModule = new UserModule_1.UserModule();
const companiesModule = new CompaniesModule_1.CompaniesModule();
const clientsModule = new ClientsModule_1.ClientsModule();
const issuedDocumentsModule = new IssuedDocumentsModule_1.IssuedDocumentsModule();
const suppliersModule = new SuppliersModule_1.SuppliersModule();
const productsModule = new ProductsModule_1.ProductsModule();
const receivedDocumentsModule = new ReceivedDocumentsModule_1.ReceivedDocumentsModule();
const receiptsModule = new ReceiptsModule_1.ReceiptsModule();
const taxesModule = new TaxesModule_1.TaxesModule();
const archiveModule = new ArchiveModule_1.ArchiveModule();
const cashbookModule = new CashbookModule_1.CashbookModule();
const infoModule = new InfoModule_1.InfoModule();
const webhooksModule = new WebhooksModule_1.WebhooksModule();
const settingsModule = new SettingsModule_1.SettingsModule();
const eInvoicesModule = new EInvoicesModule_1.EInvoicesModule();
const emailsModule = new EmailsModule_1.EmailsModule();
this.modules.set(userModule.resource.name, userModule);
this.modules.set(companiesModule.resource.name, companiesModule);
this.modules.set(clientsModule.resource.name, clientsModule);
this.modules.set(issuedDocumentsModule.resource.name, issuedDocumentsModule);
this.modules.set(suppliersModule.resource.name, suppliersModule);
this.modules.set(productsModule.resource.name, productsModule);
this.modules.set(receivedDocumentsModule.resource.name, receivedDocumentsModule);
this.modules.set(receiptsModule.resource.name, receiptsModule);
this.modules.set(taxesModule.resource.name, taxesModule);
this.modules.set(archiveModule.resource.name, archiveModule);
this.modules.set(cashbookModule.resource.name, cashbookModule);
this.modules.set(infoModule.resource.name, infoModule);
this.modules.set(webhooksModule.resource.name, webhooksModule);
this.modules.set(settingsModule.resource.name, settingsModule);
this.modules.set(eInvoicesModule.resource.name, eInvoicesModule);
this.modules.set(emailsModule.resource.name, emailsModule);
this.buildProperties();
}
buildProperties() {
const resourceOperations = {};
const allProperties = [];
this.modules.forEach((module, resourceName) => {
const resource = module.resource;
resourceOperations[resourceName] = {
displayName: 'Operation',
name: 'operation',
type: 'options',
default: '',
noDataExpression: true,
displayOptions: {
show: {
resource: [resourceName],
},
},
options: resource.operations.map(op => ({
name: op.displayName,
value: op.value,
description: op.description,
action: op.action,
})),
};
resource.properties.forEach(prop => {
if (!prop.displayOptions) {
prop.displayOptions = {};
}
if (!prop.displayOptions.show) {
prop.displayOptions.show = {};
}
prop.displayOptions.show.resource = [resourceName];
allProperties.push(prop);
});
resource.operations.forEach(operation => {
if (operation.properties) {
operation.properties.forEach(prop => {
if (!prop.displayOptions) {
prop.displayOptions = {};
}
if (!prop.displayOptions.show) {
prop.displayOptions.show = {};
}
prop.displayOptions.show.resource = [resourceName];
if (!prop.displayOptions.show.operation) {
prop.displayOptions.show.operation = [];
}
if (Array.isArray(prop.displayOptions.show.operation)) {
prop.displayOptions.show.operation.push(operation.value);
}
allProperties.push(prop);
});
}
});
});
Object.values(resourceOperations).forEach(prop => {
this.description.properties.push(prop);
});
this.description.properties.push(...allProperties);
}
async execute() {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
const items = this.getInputData();
const returnData = [];
const length = items.length;
const resource = this.getNodeParameter('resource', 0);
const operation = this.getNodeParameter('operation', 0);
const createModule = (resourceName) => {
switch (resourceName) {
case 'user':
return new UserModule_1.UserModule();
case 'company':
return new CompaniesModule_1.CompaniesModule();
case 'client':
return new ClientsModule_1.ClientsModule();
case 'issuedDocument':
return new IssuedDocumentsModule_1.IssuedDocumentsModule();
case 'supplier':
return new SuppliersModule_1.SuppliersModule();
case 'product':
return new ProductsModule_1.ProductsModule();
case 'receivedDocument':
return new ReceivedDocumentsModule_1.ReceivedDocumentsModule();
case 'receipt':
return new ReceiptsModule_1.ReceiptsModule();
case 'tax':
return new TaxesModule_1.TaxesModule();
case 'archive':
return new ArchiveModule_1.ArchiveModule();
case 'cashbook':
return new CashbookModule_1.CashbookModule();
case 'info':
return new InfoModule_1.InfoModule();
case 'webhook':
return new WebhooksModule_1.WebhooksModule();
case 'emails':
return new EmailsModule_1.EmailsModule();
case 'settings':
return new SettingsModule_1.SettingsModule();
case 'eInvoices':
return new EInvoicesModule_1.EInvoicesModule();
default:
return null;
}
};
const module = createModule(resource);
if (!module) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Unknown resource: ${resource}`, { level: 'warning' });
}
for (let i = 0; i < length; i++) {
try {
const responseData = await module.execute(this, operation, i);
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData || {}), { itemData: { item: i } });
returnData.push(...executionData);
}
catch (error) {
const errorMessage = ((_c = (_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.error) === null || _c === void 0 ? void 0 : _c.validation_result) ||
((_e = (_d = error.response) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.error_description) ||
((_g = (_f = error.response) === null || _f === void 0 ? void 0 : _f.data) === null || _g === void 0 ? void 0 : _g.message) ||
error.message ||
'Unknown error';
const errorDetails = {
message: errorMessage,
status: (_h = error.response) === null || _h === void 0 ? void 0 : _h.status,
statusText: (_j = error.response) === null || _j === void 0 ? void 0 : _j.statusText,
data: (_k = error.response) === null || _k === void 0 ? void 0 : _k.data,
};
if (this.continueOnFail()) {
const executionErrorData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray({ error: errorDetails }), { itemData: { item: i } });
returnData.push(...executionErrorData);
continue;
}
const nodeError = new n8n_workflow_1.NodeOperationError(this.getNode(), `Fatture in Cloud API Error: ${errorMessage}`, {
itemIndex: i,
description: `Status: ${((_l = error.response) === null || _l === void 0 ? void 0 : _l.status) || 'Unknown'}, Details: ${JSON.stringify(((_m = error.response) === null || _m === void 0 ? void 0 : _m.data) || {})}`,
});
throw nodeError;
}
}
return [returnData];
}
}
exports.FattureInCloud = FattureInCloud;
//# sourceMappingURL=FattureInCloud.node.js.map