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
JavaScript
;
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;
}
}
}