@tuanltntu/n8n-nodes-bitrix24
Version:
Comprehensive n8n community node for Bitrix24 API integration with CRM, Tasks, Chat, Telephony, and more
200 lines • 7.67 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProductResourceHandler = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const ResourceHandlerBase_1 = require("./ResourceHandlerBase");
const GenericFunctions_1 = require("../GenericFunctions");
/**
* Handle Bitrix24 CRM Product operations
*/
class ProductResourceHandler extends ResourceHandlerBase_1.ResourceHandlerBase {
constructor(executeFunctions, returnData, options = {}) {
super(executeFunctions, returnData, options);
this.resourceEndpoints = {
add: "crm.product.add",
update: "crm.product.update",
delete: "crm.product.delete",
get: "crm.product.get",
list: "crm.product.list",
fields: "crm.product.fields",
};
}
/**
* Process product 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 Product 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 Product resource`);
}
return endpoint;
}
/**
* Handle getting product fields
*/
async handleGetFields(itemIndex) {
const endpoint = this.getEndpoint("getFields");
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, {}, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle creating a product
*/
async handleCreate(itemIndex) {
const productFields = this.getNodeParameter("productFields", itemIndex, {});
// Make API call
const endpoint = this.getEndpoint("create");
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, { fields: productFields }, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle updating a product
*/
async handleUpdate(itemIndex) {
const productId = this.getNodeParameter("productId", itemIndex);
const productFields = this.getNodeParameter("productFields", itemIndex, {});
// Make API call
const endpoint = this.getEndpoint("update");
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, {
id: productId,
fields: productFields,
}, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle deleting a product
*/
async handleDelete(itemIndex) {
const productId = this.getNodeParameter("productId", itemIndex);
const endpoint = this.getEndpoint("delete");
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, { id: productId }, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle getting a product
*/
async handleGet(itemIndex) {
const productId = this.getNodeParameter("productId", itemIndex);
// Get options
const options = this.getNodeParameter("options", itemIndex, {});
const params = { id: productId };
// Add select fields if specified
if (options.select) {
params.select = options.select;
}
const endpoint = this.getEndpoint("get");
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, params, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle getting all products
*/
async handleGetAll(itemIndex) {
const options = this.getNodeParameter("options", itemIndex, {});
const additionalOptions = this.getNodeParameter("additionalOptions", itemIndex, {});
const params = {};
// 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 });
}
}
// Add order if provided
if (additionalOptions.order) {
try {
params.order =
typeof additionalOptions.order === "string"
? JSON.parse(additionalOptions.order)
: additionalOptions.order;
}
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 (additionalOptions.start) {
params.start = additionalOptions.start;
}
// Check for returnAll parameter
const returnAll = this.getNodeParameter("returnAll", itemIndex, false);
if (!returnAll) {
const limit = this.getNodeParameter("limit", itemIndex, 50);
params.limit = limit;
}
const endpoint = this.getEndpoint("getAll");
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, params, itemIndex);
this.returnData.push({
json: responseData,
});
}
}
exports.ProductResourceHandler = ProductResourceHandler;
//# sourceMappingURL=ProductResourceHandler.js.map