UNPKG

n8n-nodes-netbox

Version:

n8n community node for NetBox API integration with comprehensive DCIM, IPAM, and data center management operations

175 lines (174 loc) 6.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.listManufacturers = listManufacturers; exports.getManufacturer = getManufacturer; exports.createManufacturer = createManufacturer; exports.updateManufacturer = updateManufacturer; exports.deleteManufacturer = deleteManufacturer; const apiRequest_1 = require("../../../helpers/apiRequest"); const responseFormatter_1 = require("../../../helpers/responseFormatter"); async function listManufacturers() { try { // Get pagination parameters const returnAll = this.getNodeParameter('returnAll', 0); // Get filters const filters = this.getNodeParameter('filters', 0, {}); // Prepare query parameters const queryParams = { ...filters }; let responseData; if (returnAll === true) { responseData = await apiRequest_1.apiRequestAllItems.call(this, 'GET', '/api/dcim/manufacturers/', {}, queryParams); return responseFormatter_1.formatResponse.call(this, responseData); } else { const limit = this.getNodeParameter('limit', 0); queryParams.limit = limit; responseData = await apiRequest_1.apiRequest.call(this, 'GET', '/api/dcim/manufacturers/', {}, queryParams); return responseFormatter_1.formatResponse.call(this, responseData); } } catch (error) { console.log('ERROR in listManufacturers:', error); if (error.response?.body?.detail) { throw new Error(`NetBox API error: ${error.response.body.detail}`); } else { throw error; } } } async function getManufacturer() { try { const manufacturerId = this.getNodeParameter('manufacturerId', 0); // Fix the endpoint path to include /api/ const endpoint = `/api/dcim/manufacturers/${manufacturerId}/`; const response = await apiRequest_1.apiRequest.call(this, 'GET', endpoint, {}, {}); return responseFormatter_1.formatResponse.call(this, response); } catch (error) { console.log('ERROR in getManufacturer:', error); if (error.response?.body?.detail) { throw new Error(`NetBox API error: ${error.response.body.detail}`); } else { throw error; } } } async function createManufacturer() { try { // Get required fields const name = this.getNodeParameter('name', 0); // Get additional fields const additionalFields = this.getNodeParameter('additionalFields', 0, {}); // Build the manufacturer data const manufacturerData = { name, ...additionalFields, }; // Handle tags (convert from comma-separated to array) if (additionalFields.tags && typeof additionalFields.tags === 'string') { const tagsArray = additionalFields.tags .split(',') .map((tag) => tag.trim()) .filter((tag) => tag !== ''); manufacturerData.tags = tagsArray; delete additionalFields.tags; } // Handle custom fields (parse JSON string to object) if (additionalFields.custom_fields && typeof additionalFields.custom_fields === 'string') { try { manufacturerData.custom_fields = JSON.parse(additionalFields.custom_fields); } catch (e) { throw new Error(`Invalid JSON in custom_fields: ${e.message}`); } delete additionalFields.custom_fields; } const endpoint = '/api/dcim/manufacturers/'; const response = await apiRequest_1.apiRequest.call(this, 'POST', endpoint, manufacturerData, {}); return responseFormatter_1.formatResponse.call(this, response); } catch (error) { console.log('ERROR in createManufacturer:', error); if (error.response?.body?.detail) { throw new Error(`NetBox API error: ${error.response.body.detail}`); } else if (error.response?.body?.name) { throw new Error(`Name error: ${error.response.body.name[0]}`); } else if (error.response?.body?.slug) { throw new Error(`Slug error: ${error.response.body.slug[0]}`); } else { throw error; } } } async function updateManufacturer() { try { const manufacturerId = this.getNodeParameter('manufacturerId', 0); const updateFields = this.getNodeParameter('updateFields', 0, {}); // Handle tags (convert from comma-separated to array) if (updateFields.tags && typeof updateFields.tags === 'string') { const tagsArray = updateFields.tags .split(',') .map((tag) => tag.trim()) .filter((tag) => tag !== ''); updateFields.tags = tagsArray; } // Handle custom fields (parse JSON string to object) if (updateFields.custom_fields && typeof updateFields.custom_fields === 'string') { try { updateFields.custom_fields = JSON.parse(updateFields.custom_fields); } catch (e) { throw new Error(`Invalid JSON in custom_fields: ${e.message}`); } } // Fix the endpoint path to include /api/ const endpoint = `/api/dcim/manufacturers/${manufacturerId}/`; const response = await apiRequest_1.apiRequest.call(this, 'PATCH', endpoint, updateFields, {}); return responseFormatter_1.formatResponse.call(this, response); } catch (error) { console.log('ERROR in updateManufacturer:', error); if (error.response?.body?.detail) { throw new Error(`NetBox API error: ${error.response.body.detail}`); } else if (error.response?.body?.name) { throw new Error(`Name error: ${error.response.body.name[0]}`); } else if (error.response?.body?.slug) { throw new Error(`Slug error: ${error.response.body.slug[0]}`); } else { throw error; } } } async function deleteManufacturer() { try { const manufacturerId = this.getNodeParameter('manufacturerId', 0); // Fix the endpoint path to include /api/ const endpoint = `/api/dcim/manufacturers/${manufacturerId}/`; await apiRequest_1.apiRequest.call(this, 'DELETE', endpoint, {}, {}); return [ { json: { success: true, message: `Manufacturer with ID ${manufacturerId} successfully deleted`, }, }, ]; } catch (error) { console.log('ERROR in deleteManufacturer:', error); if (error.response?.body?.detail) { throw new Error(`NetBox API error: ${error.response.body.detail}`); } else { throw error; } } }