@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
JavaScript
"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