@tuanltntu/n8n-nodes-bitrix24
Version:
Comprehensive n8n community node for Bitrix24 API integration with CRM, Tasks, Chat, Telephony, and more
236 lines • 9.71 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StatusResourceHandler = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const ResourceHandlerBase_1 = require("./ResourceHandlerBase");
const GenericFunctions_1 = require("../GenericFunctions");
/**
* Handler for Status resource operations in Bitrix24
*/
class StatusResourceHandler extends ResourceHandlerBase_1.ResourceHandlerBase {
constructor() {
super(...arguments);
this.resourceEndpoints = {
create: "crm.status.add",
update: "crm.status.update",
delete: "crm.status.delete",
get: "crm.status.get",
getAll: "crm.status.list",
getFields: "crm.status.fields",
};
}
/**
* Process all operations related to Status
*/
async process() {
for (let i = 0; i < this.items.length; i++) {
try {
const operation = this.getNodeParameter("operation", i);
switch (operation) {
case "create":
await this.handleCreate(i);
break;
case "update":
await this.handleUpdate(i);
break;
case "delete":
await this.handleDelete(i);
break;
case "get":
await this.handleGet(i);
break;
case "getAll":
await this.handleGetAll(i);
break;
case "getFields":
await this.handleGetFields(i);
break;
default:
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), `Operation '${operation}' is not supported for Status resource`, { itemIndex: i });
}
}
catch (error) {
if (this.continueOnFail()) {
this.addErrorToReturnData(error, i);
continue;
}
throw error;
}
}
return this.returnData;
}
/**
* Handles the creation of a new status
*/
async handleCreate(itemIndex) {
const fields = this.getNodeParameter("fields", itemIndex, {});
// Validate required fields
if (!fields.ENTITY_ID || fields.ENTITY_ID === "") {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Entity ID is required for creating a status", { itemIndex });
}
if (!fields.STATUS_ID || fields.STATUS_ID === "") {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Status ID is required for creating a status", { itemIndex });
}
if (!fields.NAME || fields.NAME === "") {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Name is required for creating a status", { itemIndex });
}
// Build the request body according to Bitrix24 API
const parameters = {
fields: {
ENTITY_ID: fields.ENTITY_ID,
STATUS_ID: fields.STATUS_ID,
NAME: fields.NAME,
SORT: fields.SORT || 100,
},
};
// Add extra parameters if provided
if (fields.EXTRA) {
try {
const extra = typeof fields.EXTRA === "string"
? JSON.parse(fields.EXTRA)
: fields.EXTRA;
parameters.fields.EXTRA = extra;
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "EXTRA field must be valid JSON", { itemIndex });
}
}
const endpoint = this.resourceEndpoints.create;
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, parameters, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handles updating a status
*/
async handleUpdate(itemIndex) {
const statusId = this.getNodeParameter("statusId", itemIndex);
const fields = this.getNodeParameter("fields", itemIndex, {});
// Build the request body according to Bitrix24 API
const parameters = {
id: statusId,
fields: {},
};
const paramFields = parameters.fields;
// Add only the fields that are provided
if (fields.NAME)
paramFields.NAME = fields.NAME;
if (fields.SORT !== undefined)
paramFields.SORT = fields.SORT;
if (fields.EXTRA) {
try {
const extra = typeof fields.EXTRA === "string"
? JSON.parse(fields.EXTRA)
: fields.EXTRA;
paramFields.EXTRA = extra;
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "EXTRA field must be valid JSON", { itemIndex });
}
}
const endpoint = this.resourceEndpoints.update;
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, parameters, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handles the deletion of a status
*/
async handleDelete(itemIndex) {
const statusId = this.getNodeParameter("statusId", itemIndex);
const parameters = {
id: statusId,
};
const endpoint = this.resourceEndpoints.delete;
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, parameters, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handles retrieving a single status
*/
async handleGet(itemIndex) {
const statusId = this.getNodeParameter("statusId", itemIndex);
const parameters = {
id: statusId,
};
const endpoint = this.resourceEndpoints.get;
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, parameters, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handles retrieving all statuses
*/
async handleGetAll(itemIndex) {
const options = this.getNodeParameter("options", itemIndex, {});
const parameters = {};
// Add entity ID filter if specified
if (options.entityId) {
parameters.filter = {
ENTITY_ID: options.entityId,
};
}
// Add filter if specified
if (options.filter) {
try {
const filterJson = typeof options.filter === "string"
? JSON.parse(options.filter)
: options.filter;
if (parameters.filter) {
Object.assign(parameters.filter, filterJson);
}
else {
parameters.filter = filterJson;
}
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Filter must be valid JSON", { itemIndex });
}
}
// Add order if specified
if (options.order) {
try {
const orderJson = typeof options.order === "string"
? JSON.parse(options.order)
: options.order;
parameters.order = orderJson;
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Order must be valid JSON", { itemIndex });
}
}
// Add select fields if specified
if (options.select) {
parameters.select = options.select
.split(",")
.map((field) => field.trim())
.filter((field) => field.length > 0);
}
// Add language if specified
if (options.lang) {
parameters.lang = options.lang;
}
// Add custom parameters if specified
if (options.customParameters) {
try {
const customParams = typeof options.customParameters === "string"
? JSON.parse(options.customParameters)
: options.customParameters;
Object.assign(parameters, customParams);
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Custom parameters must be valid JSON", { itemIndex });
}
}
const endpoint = this.resourceEndpoints.getAll;
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, parameters, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handles getting status fields
*/
async handleGetFields(itemIndex) {
const endpoint = this.resourceEndpoints.getFields;
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, {}, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
}
exports.StatusResourceHandler = StatusResourceHandler;
//# sourceMappingURL=StatusResourceHandler.js.map