UNPKG

@tuanltntu/n8n-nodes-bitrix24

Version:

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

282 lines 10.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CatalogResourceHandler = void 0; const n8n_workflow_1 = require("n8n-workflow"); const ResourceHandlerBase_1 = require("./ResourceHandlerBase"); /** * Handle Bitrix24 CRM Catalog operations */ class CatalogResourceHandler extends ResourceHandlerBase_1.ResourceHandlerBase { constructor(executeFunctions, returnData, options = {}) { super(executeFunctions, returnData, options); this.resourceEndpoints = { add: "crm.catalog.add", update: "crm.catalog.update", delete: "crm.catalog.delete", get: "crm.catalog.get", list: "crm.catalog.list", fields: "crm.catalog.fields", }; } /** * Process catalog operations */ 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(), `Unsupported operation "${operation}" for Catalog resource`, { itemIndex: i }); } } catch (error) { if (this.executeFunctions.continueOnFail()) { this.returnData.push({ json: { error: error.message } }); continue; } throw error; } } return this.returnData; } /** * Get endpoint for the specified operation */ getEndpoint(operation) { const endpointMap = { create: "add", update: "update", delete: "delete", get: "get", getAll: "list", getFields: "fields", }; const endpoint = this.resourceEndpoints[endpointMap[operation]]; if (!endpoint) { throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), `Unsupported operation "${operation}" for Catalog resource`); } return endpoint; } /** * Handle getting catalog fields */ async handleGetFields(itemIndex) { const endpoint = this.getEndpoint("getFields"); const responseData = await this.makeApiCall(endpoint, {}, {}, itemIndex); this.returnData.push({ json: responseData, }); } /** * Handle creating a catalog */ async handleCreate(itemIndex) { // Get required fields const name = this.getNodeParameter("name", itemIndex); const isDefault = this.getNodeParameter("isDefault", itemIndex); const isSku = this.getNodeParameter("isSku", itemIndex); // Get additional fields const additionalFields = this.getNodeParameter("additionalFields", itemIndex, {}); // Prepare fields const fields = { NAME: name, IS_DEFAULT: isDefault ? "Y" : "N", IS_SKU: isSku ? "Y" : "N", }; // Add additional fields if provided if (additionalFields.description) { fields.DESCRIPTION = additionalFields.description; } if (additionalFields.sort) { fields.SORT = additionalFields.sort; } if (additionalFields.ownerId) { fields.OWNER_ID = additionalFields.ownerId; } if (additionalFields.xmlId) { fields.XML_ID = additionalFields.xmlId; } // Make API call const endpoint = this.getEndpoint("create"); const responseData = await this.makeApiCall(endpoint, { fields }, {}, itemIndex); this.returnData.push({ json: responseData, }); } /** * Handle updating a catalog */ async handleUpdate(itemIndex) { const catalogId = this.getNodeParameter("catalogId", itemIndex); // Get optional required fields const name = this.getNodeParameter("name", itemIndex, ""); const isDefault = this.getNodeParameter("isDefault", itemIndex, null); const isSku = this.getNodeParameter("isSku", itemIndex, null); // Get additional fields const additionalFields = this.getNodeParameter("additionalFields", itemIndex, {}); // Prepare fields const fields = {}; // Add fields only if they have values if (name) { fields.NAME = name; } if (isDefault !== null) { fields.IS_DEFAULT = isDefault ? "Y" : "N"; } if (isSku !== null) { fields.IS_SKU = isSku ? "Y" : "N"; } // Add additional fields if provided if (additionalFields.description) { fields.DESCRIPTION = additionalFields.description; } if (additionalFields.sort) { fields.SORT = additionalFields.sort; } if (additionalFields.ownerId) { fields.OWNER_ID = additionalFields.ownerId; } if (additionalFields.xmlId) { fields.XML_ID = additionalFields.xmlId; } // Check if there are any fields to update if (Object.keys(fields).length === 0) { throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Please provide at least one field to update", { itemIndex }); } // Make API call const endpoint = this.getEndpoint("update"); const responseData = await this.makeApiCall(endpoint, { id: catalogId, fields, }, {}, itemIndex); this.returnData.push({ json: responseData, }); } /** * Handle deleting a catalog */ async handleDelete(itemIndex) { const catalogId = this.getNodeParameter("catalogId", itemIndex); const endpoint = this.getEndpoint("delete"); const responseData = await this.makeApiCall(endpoint, { id: catalogId }, {}, itemIndex); this.returnData.push({ json: responseData, }); } /** * Handle getting a catalog */ async handleGet(itemIndex) { const catalogId = this.getNodeParameter("catalogId", itemIndex); // Get options const options = this.getNodeParameter("options", itemIndex, {}); const params = { id: catalogId }; // Add select fields if specified if (options.select) { params.select = options.select; } // Add filter if provided if (options.filter) { try { params.filter = typeof options.filter === "string" ? JSON.parse(options.filter) : options.filter; } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Filter must be a valid JSON", { itemIndex }); } } const endpoint = this.getEndpoint("get"); const responseData = await this.makeApiCall(endpoint, params, {}, itemIndex); this.returnData.push({ json: responseData, }); } /** * Handle getting all catalogs */ async handleGetAll(itemIndex) { // Get parameters for filter and options const jsonParameters = this.getNodeParameter("jsonParameters", itemIndex, false); const options = this.getNodeParameter("options", itemIndex, {}); const additionalOptions = this.getNodeParameter("additionalOptions", itemIndex, {}); const params = {}; // Handle filter parameters if (jsonParameters && options.filtersJson) { const filtersJson = this.getNodeParameter("filtersJson", itemIndex, ""); if (filtersJson) { try { params.filter = JSON.parse(filtersJson); } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Filter must be a valid JSON", { itemIndex }); } } } else if (options.filter) { try { params.filter = typeof options.filter === "string" ? JSON.parse(options.filter) : options.filter; } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Filter must be a valid JSON", { itemIndex }); } } // Add order if provided if (options.order || additionalOptions.order) { const orderValue = options.order || additionalOptions.order; try { params.order = typeof orderValue === "string" ? JSON.parse(orderValue) : orderValue; } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Order must be a valid JSON", { itemIndex }); } } // Add select fields if specified if (options.select) { params.select = options.select; } // Add pagination parameters if (options.start || additionalOptions.start) { params.start = options.start || additionalOptions.start; } // Check for returnAll parameter const returnAll = this.getNodeParameter("returnAll", itemIndex, false); if (returnAll) { // No limits for returnAll } const endpoint = this.getEndpoint("getAll"); const responseData = await this.makeApiCall(endpoint, params, {}, itemIndex); this.returnData.push({ json: responseData, }); } } exports.CatalogResourceHandler = CatalogResourceHandler; //# sourceMappingURL=CatalogResourceHandler.js.map