@tuanltntu/n8n-nodes-bitrix24
Version:
Comprehensive n8n community node for Bitrix24 API integration with CRM, Tasks, Chat, Telephony, and more
259 lines • 11 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocumentGeneratorResourceHandler = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const ResourceHandlerBase_1 = require("./ResourceHandlerBase");
/**
* Handles Document Generator operations in Bitrix24
*/
class DocumentGeneratorResourceHandler extends ResourceHandlerBase_1.ResourceHandlerBase {
constructor(executeFunctions, returnData, options = {}) {
super(executeFunctions, returnData, options);
this.resourceEndpoints = {
template: {
list: "documentgenerator.template.list",
get: "documentgenerator.template.get",
add: "documentgenerator.template.add",
update: "documentgenerator.template.update",
delete: "documentgenerator.template.delete",
},
document: {
get: "documentgenerator.document.get",
add: "documentgenerator.document.add",
delete: "documentgenerator.document.delete",
download: "documentgenerator.document.download",
},
fields: {
get: "documentgenerator.template.getFields",
},
};
}
/**
* Process all items with document generator operations
*/
async process() {
for (let itemIndex = 0; itemIndex < this.items.length; itemIndex++) {
try {
const operation = this.getNodeParameter("operation", itemIndex);
switch (operation) {
// Template operations
case "getTemplates":
await this.handleGetTemplates(itemIndex);
break;
case "getTemplate":
await this.handleGetTemplate(itemIndex);
break;
case "addTemplate":
await this.handleAddTemplate(itemIndex);
break;
case "updateTemplate":
await this.handleUpdateTemplate(itemIndex);
break;
case "deleteTemplate":
await this.handleDeleteTemplate(itemIndex);
break;
// Document operations
case "generateDocument":
await this.handleGenerateDocument(itemIndex);
break;
case "getDocument":
await this.handleGetDocument(itemIndex);
break;
case "deleteDocument":
await this.handleDeleteDocument(itemIndex);
break;
case "downloadDocument":
await this.handleDownloadDocument(itemIndex);
break;
// Field operations
case "getFields":
await this.handleGetFields(itemIndex);
break;
default:
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), `Operation ${operation} is not supported for resource documentgenerator`);
}
}
catch (error) {
if (this.continueOnFail()) {
this.addErrorToReturnData(error, itemIndex);
}
else {
throw error;
}
}
}
return this.returnData;
}
/**
* Handle 'getTemplates' operation
*/
async handleGetTemplates(itemIndex) {
const filter = this.getNodeParameter("filter", itemIndex, {});
const options = this.getNodeParameter("options", itemIndex, {});
const requestParams = {};
if (Object.keys(filter).length) {
requestParams.filter = filter;
}
if (options.select) {
requestParams.select = options.select;
}
if (options.order) {
if (typeof options.order === "string" && options.order.trim() !== "") {
requestParams.order = this.parseJsonParameter(options.order, "order", itemIndex);
}
else if (typeof options.order === "object") {
requestParams.order = options.order;
}
}
const endpoint = this.resourceEndpoints.template.list;
const responseData = await this.makeApiCall(endpoint, requestParams, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handle 'getTemplate' operation
*/
async handleGetTemplate(itemIndex) {
const templateId = this.getNodeParameter("templateId", itemIndex);
const requestParams = {
id: templateId,
};
const endpoint = this.resourceEndpoints.template.get;
const responseData = await this.makeApiCall(endpoint, requestParams, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handle 'addTemplate' operation
*/
async handleAddTemplate(itemIndex) {
const templateData = this.getNodeParameter("templateData", itemIndex);
if (!templateData || templateData.trim() === "") {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Template data must not be empty", { itemIndex });
}
const fields = this.parseJsonParameter(templateData, "templateData", itemIndex);
const requestParams = {
fields,
};
const endpoint = this.resourceEndpoints.template.add;
const responseData = await this.makeApiCall(endpoint, requestParams, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handle 'updateTemplate' operation
*/
async handleUpdateTemplate(itemIndex) {
const templateId = this.getNodeParameter("templateId", itemIndex);
const templateData = this.getNodeParameter("templateData", itemIndex);
if (!templateData || templateData.trim() === "") {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Template data must not be empty", { itemIndex });
}
const fields = this.parseJsonParameter(templateData, "templateData", itemIndex);
const requestParams = {
id: templateId,
fields,
};
const endpoint = this.resourceEndpoints.template.update;
const responseData = await this.makeApiCall(endpoint, requestParams, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handle 'deleteTemplate' operation
*/
async handleDeleteTemplate(itemIndex) {
const templateId = this.getNodeParameter("templateId", itemIndex);
const requestParams = {
id: templateId,
};
const endpoint = this.resourceEndpoints.template.delete;
const responseData = await this.makeApiCall(endpoint, requestParams, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handle 'generateDocument' operation
*/
async handleGenerateDocument(itemIndex) {
const templateId = this.getNodeParameter("templateId", itemIndex);
const valuesJson = this.getNodeParameter("values", itemIndex);
const format = this.getNodeParameter("format", itemIndex);
if (!valuesJson || valuesJson.trim() === "") {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Values must not be empty", { itemIndex });
}
const values = this.parseJsonParameter(valuesJson, "values", itemIndex);
const requestParams = {
templateId,
values,
format,
};
const endpoint = this.resourceEndpoints.document.add;
const responseData = await this.makeApiCall(endpoint, requestParams, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handle 'getDocument' operation
*/
async handleGetDocument(itemIndex) {
const documentId = this.getNodeParameter("documentId", itemIndex);
const requestParams = {
id: documentId,
};
const endpoint = this.resourceEndpoints.document.get;
const responseData = await this.makeApiCall(endpoint, requestParams, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handle 'deleteDocument' operation
*/
async handleDeleteDocument(itemIndex) {
const documentId = this.getNodeParameter("documentId", itemIndex);
const requestParams = {
id: documentId,
};
const endpoint = this.resourceEndpoints.document.delete;
const responseData = await this.makeApiCall(endpoint, requestParams, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handle 'downloadDocument' operation
*/
async handleDownloadDocument(itemIndex) {
const documentId = this.getNodeParameter("documentId", itemIndex);
const binaryPropertyName = this.getNodeParameter("binaryPropertyName", itemIndex);
const requestParams = {
id: documentId,
};
// Make API call to download the document
const endpoint = this.resourceEndpoints.document.download;
const response = await this.makeApiCall(endpoint, requestParams, { returnBinary: true }, itemIndex);
// Add the binary data to the return data
const newItem = {
json: { ...this.items[itemIndex].json },
binary: {
...(this.items[itemIndex].binary || {}),
},
};
if (response.fileName && response.fileContent) {
newItem.binary[binaryPropertyName] = {
data: response.fileContent,
mimeType: response.mimeType || "application/octet-stream",
fileName: response.fileName,
};
}
// Replace the item at the given index with the new item
this.returnData[itemIndex] = newItem;
}
/**
* Handle 'getFields' operation
*/
async handleGetFields(itemIndex) {
const moduleId = this.getNodeParameter("moduleId", itemIndex);
const entityTypeName = this.getNodeParameter("entityTypeName", itemIndex);
const requestParams = {
moduleId,
entityTypeName,
};
const endpoint = this.resourceEndpoints.fields.get;
const responseData = await this.makeApiCall(endpoint, requestParams, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
}
exports.DocumentGeneratorResourceHandler = DocumentGeneratorResourceHandler;
//# sourceMappingURL=DocumentGeneratorResourceHandler.js.map