UNPKG

n8n-nodes-inflow-crm

Version:

Official Inflow CRM integration for n8n. Create, update, search records and handle webhooks with dynamic field support.

116 lines (115 loc) 5.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeCreateAction = void 0; const api_1 = require("../../lib/api"); const endpoints_1 = require("../../lib/endpoints"); const logger_1 = require("../../lib/logger"); const helpers_1 = require("../../lib/helpers"); const api_2 = require("../../lib/api"); const fieldsAccess_1 = require("../../access/fieldsAccess"); async function executeCreateAction(itemIndex, moduleName, fields, fileUploads) { // Context validation if (!this || typeof this.getNodeParameter !== 'function') { throw new Error('Context error: IExecuteFunctions context is required'); } if (!moduleName || typeof moduleName !== 'string') { throw new Error('module name is required'); } if (!fields || typeof fields !== 'object' || Object.keys(fields).length === 0) { throw new Error('fields object is required and must contain at least one field'); } logger_1.actionsLogger.info('===== STARTING CREATE ACTION ====='); logger_1.actionsLogger.info(`Creating record in module: ${moduleName}`); logger_1.actionsLogger.info('Fields:', JSON.stringify(fields, null, 2)); logger_1.actionsLogger.info('File uploads:', fileUploads?.length || 0); try { logger_1.actionsLogger.info('Starting field validation and processing...'); // Fetch valid API field names for the module const validFieldNames = await (0, fieldsAccess_1.getValidApiFieldNames)(moduleName, this); logger_1.actionsLogger.info('Valid API field names:', validFieldNames); // Filter input fields to only allowed API field names let filteredFields = (0, fieldsAccess_1.filterFieldsByApiFieldName)(fields, validFieldNames); logger_1.actionsLogger.info('Filtered fields:', JSON.stringify(filteredFields, null, 2)); // Process fields with relationships (e.g., process fields that need to be split into process ID and stage) filteredFields = (0, fieldsAccess_1.processFieldsWithRelationships)(filteredFields, validFieldNames); logger_1.actionsLogger.info('Processed fields:', JSON.stringify(filteredFields, null, 2)); // Check if files are provided if (fileUploads && fileUploads.length > 0) { logger_1.actionsLogger.info('Using multipart request with files'); const processedFiles = await helpers_1.processFileUploads.call(this, itemIndex, fileUploads); // For multipart, all fields must be top-level (not nested under data) const multipartBody = { module: moduleName, ...filteredFields }; let response; try { response = await (0, api_2.inflowApiRequestWithFiles)(this, 'POST', endpoints_1.Endpoints.CREATE_RECORD, multipartBody, processedFiles); } catch (apiError) { logger_1.actionsLogger.error('API request failed with error:', apiError); if (apiError?.error && apiError.error.code) { throw new Error(`[${apiError.error.code}] ${apiError.error.message}`); } throw apiError; } // Expect { data, meta } if (!response || typeof response !== 'object' || !('data' in response)) { logger_1.actionsLogger.error('Unexpected API response format:', response); throw new Error('API returned unexpected response format'); } return { json: { success: true, operation: 'create', module: moduleName, data: response.data, meta: response.meta, filesUploaded: processedFiles.length, }, pairedItem: { item: itemIndex }, }; } else { logger_1.actionsLogger.info('Using JSON request (no files)'); const requestBody = { module: moduleName, data: filteredFields, }; logger_1.actionsLogger.info('About to make API request...'); logger_1.actionsLogger.info('Request body:', JSON.stringify(requestBody, null, 2)); let response; try { response = await (0, api_1.inflowApiRequest)(this, 'POST', endpoints_1.Endpoints.CREATE_RECORD, requestBody); logger_1.actionsLogger.info('API request completed successfully'); } catch (apiError) { logger_1.actionsLogger.error('API request failed with error:', apiError); if (apiError?.error && apiError.error.code) { throw new Error(`[${apiError.error.code}] ${apiError.error.message}`); } throw apiError; } // Expect { data, meta } if (!response || typeof response !== 'object' || !('data' in response)) { logger_1.actionsLogger.error('Unexpected API response format:', response); throw new Error('API returned unexpected response format'); } return { json: { success: true, operation: 'create', module: moduleName, data: response.data, meta: response.meta, }, pairedItem: { item: itemIndex }, }; } } catch (error) { logger_1.actionsLogger.error('Error creating record:', error); if (error?.error && error.error.code) { throw new Error(`[${error.error.code}] ${error.error.message}`); } throw new Error(`Failed to create record in "${moduleName}": ${error.message || 'unknown error'}`); } } exports.executeCreateAction = executeCreateAction;