UNPKG

@tuanltntu/n8n-nodes-bitrix24

Version:

Comprehensive n8n community node for Bitrix24 API integration with CRM, Tasks, Chat, Telephony, and more

208 lines 8.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UploadResourceHandler = void 0; const n8n_workflow_1 = require("n8n-workflow"); const ResourceHandlerBase_1 = require("./ResourceHandlerBase"); /** * Upload Resource Handler - Handles file upload operations * Based on Bitrix24 Files API: https://apidocs.bitrix24.com/api-reference/files/how-to-upload-files.html */ class UploadResourceHandler extends ResourceHandlerBase_1.ResourceHandlerBase { constructor(executeFunctions, returnData, options = {}) { super(executeFunctions, returnData, options); } async process() { const items = this.items; const returnData = []; for (let itemIndex = 0; itemIndex < items.length; itemIndex++) { try { const operation = this.getNodeParameter("operation", itemIndex); let responseData; switch (operation) { case "uploadToFolder": responseData = await this.handleUploadToFolder(itemIndex); break; case "uploadFile": responseData = await this.handleUploadFile(itemIndex); break; case "uploadVersion": responseData = await this.handleUploadVersion(itemIndex); break; case "uploadToStorage": responseData = await this.handleUploadToStorage(itemIndex); break; case "uploadToCrm": responseData = await this.handleUploadToCrm(itemIndex); break; default: throw new n8n_workflow_1.NodeApiError(this.executeFunctions.getNode(), { message: `Unknown operation: ${operation}`, }); } this.addResponseToReturnData(responseData, itemIndex); } catch (error) { if (this.continueOnFail()) { this.addErrorToReturnData(error, itemIndex); } else { throw error; } } } return this.returnData; } /** * Upload file to a specific folder (disk.folder.uploadfile) */ async handleUploadToFolder(itemIndex) { const folderId = this.getNodeParameter("folderId", itemIndex); const fileName = this.getNodeParameter("fileName", itemIndex); const fileContent = this.getNodeParameter("fileContent", itemIndex); const uploadOptions = this.getNodeParameter("uploadOptions", itemIndex, {}); const requestBody = { id: folderId, data: { NAME: fileName, }, fileContent: fileContent, }; // Add optional parameters if (uploadOptions.generateUniqueName) { requestBody.data.GENERATE_UNIQUE_NAME = "Y"; } if (uploadOptions.rights) { requestBody.data.RIGHTS = uploadOptions.rights; } if (uploadOptions.description) { requestBody.data.DETAIL_TEXT = uploadOptions.description; } console.log("Uploading file to folder", { folderId, fileName }); const response = await this.makeApiCall("disk.folder.uploadfile", requestBody, {}, itemIndex); console.log("File uploaded to folder successfully", response); return response; } /** * Basic file upload (disk.file.upload) */ async handleUploadFile(itemIndex) { const fileName = this.getNodeParameter("fileName", itemIndex); const fileContent = this.getNodeParameter("fileContent", itemIndex); const uploadOptions = this.getNodeParameter("uploadOptions", itemIndex, {}); const requestBody = { data: { NAME: fileName, }, fileContent: fileContent, }; // Add optional parameters if (uploadOptions.generateUniqueName) { requestBody.data.GENERATE_UNIQUE_NAME = "Y"; } if (uploadOptions.replaceExisting) { requestBody.data.REPLACE = "Y"; } console.log("Uploading file", { fileName }); const response = await this.makeApiCall("disk.file.upload", requestBody, {}, itemIndex); console.log("File uploaded successfully", response); return response; } /** * Upload new version of existing file (disk.file.uploadversion) */ async handleUploadVersion(itemIndex) { const fileId = this.getNodeParameter("fileId", itemIndex); const fileName = this.getNodeParameter("fileName", itemIndex); const fileContent = this.getNodeParameter("fileContent", itemIndex); const uploadOptions = this.getNodeParameter("uploadOptions", itemIndex, {}); const requestBody = { id: fileId, data: { NAME: fileName, }, fileContent: fileContent, }; // Add optional parameters if (uploadOptions.rights) { requestBody.data.RIGHTS = uploadOptions.rights; } console.log("Uploading new file version", { fileId, fileName }); const response = await this.makeApiCall("disk.file.uploadversion", requestBody, {}, itemIndex); console.log("File version uploaded successfully", response); return response; } /** * Upload file to storage (disk.storage.uploadfile) */ async handleUploadToStorage(itemIndex) { const storageId = this.getNodeParameter("storageId", itemIndex); const fileName = this.getNodeParameter("fileName", itemIndex); const fileContent = this.getNodeParameter("fileContent", itemIndex); const uploadOptions = this.getNodeParameter("uploadOptions", itemIndex, {}); const requestBody = { id: storageId, data: { NAME: fileName, }, fileContent: fileContent, }; // Add optional parameters if (uploadOptions.generateUniqueName) { requestBody.data.GENERATE_UNIQUE_NAME = "Y"; } if (uploadOptions.rights) { requestBody.data.RIGHTS = uploadOptions.rights; } console.log("Uploading file to storage", { storageId, fileName }); const response = await this.makeApiCall("disk.storage.uploadfile", requestBody, {}, itemIndex); console.log("File uploaded to storage successfully", response); return response; } /** * Upload file to CRM entity (crm.*.file.upload) */ async handleUploadToCrm(itemIndex) { const crmEntityType = this.getNodeParameter("crmEntityType", itemIndex); const crmEntityId = this.getNodeParameter("crmEntityId", itemIndex); const fileName = this.getNodeParameter("fileName", itemIndex); const fileContent = this.getNodeParameter("fileContent", itemIndex); const uploadOptions = this.getNodeParameter("uploadOptions", itemIndex, {}); // Map entity types to API endpoints const entityEndpointMap = { deal: "crm.deal.file.upload", contact: "crm.contact.file.upload", company: "crm.company.file.upload", lead: "crm.lead.file.upload", quote: "crm.quote.file.upload", }; const apiEndpoint = entityEndpointMap[crmEntityType]; if (!apiEndpoint) { throw new Error(`Unsupported CRM entity type: ${crmEntityType}`); } const requestBody = { id: crmEntityId, data: { NAME: fileName, }, fileContent: fileContent, }; // Add optional parameters if (uploadOptions.description) { requestBody.data.DETAIL_TEXT = uploadOptions.description; } if (uploadOptions.tags) { requestBody.data.TAGS = uploadOptions.tags; } console.log("Uploading file to CRM entity", { entityType: crmEntityType, entityId: crmEntityId, fileName, endpoint: apiEndpoint, }); const response = await this.makeApiCall(apiEndpoint, requestBody, {}, itemIndex); console.log("File uploaded to CRM entity successfully", response); return response; } } exports.UploadResourceHandler = UploadResourceHandler; //# sourceMappingURL=UploadResourceHandler.js.map