UNPKG

n8n-nodes-awx

Version:

n8n node to interact with Ansible AWX/Tower with improved type safety

146 lines 8.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handleProjectOperations = handleProjectOperations; const n8n_workflow_1 = require("n8n-workflow"); const SharedHelpers_1 = require("../utils/SharedHelpers"); const resourceHelpers_1 = require("../utils/resourceHelpers"); async function handleProjectOperations(action, itemIndex = 0) { if (action === 'list') { try { const filter = this.getNodeParameter('filter', itemIndex, ''); const returnAll = this.getNodeParameter('returnAll', itemIndex, false); const endpoint = '/projects/'; const queryParams = {}; if (filter) { queryParams.search = filter; } const fetchMode = returnAll ? 'allPages' : 'firstPage'; const projects = await SharedHelpers_1.getAwxResources.call(this, endpoint, fetchMode, queryParams); const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly'); const formattedProjects = projects.map(project => (0, resourceHelpers_1.formatResourceResponse)(project, responseFormat, 'project')); return [this.helpers.returnJsonArray(formattedProjects)]; } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to list projects: ${error.message}`, { itemIndex }); } } else if (action === 'get') { try { const idKeys = ['projectId', 'Project_ID', 'id']; const nameKeys = ['projectName', 'Project_Name', 'name']; const { id, name } = resourceHelpers_1.resolveResourceParameters.call(this, idKeys, nameKeys, 'project', itemIndex); const project = await SharedHelpers_1.getAwxResource.call(this, 'projects', { id, name }); const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly'); const formattedProject = (0, resourceHelpers_1.formatResourceResponse)(project, responseFormat, 'project'); return [[{ json: formattedProject }]]; } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to get project: ${error.message}`, { itemIndex }); } } else if (action === 'create') { try { const name = this.getNodeParameter('name', itemIndex); const description = this.getNodeParameter('description', itemIndex, ''); const scmType = this.getNodeParameter('scmType', itemIndex); const scmUrl = this.getNodeParameter('scmUrl', itemIndex); const scmBranch = this.getNodeParameter('scmBranch', itemIndex, ''); const scmClean = this.getNodeParameter('scmClean', itemIndex, false); const scmDeleteOnUpdate = this.getNodeParameter('scmDeleteOnUpdate', itemIndex, false); const credentialId = this.getNodeParameter('credentialId', itemIndex, ''); const organizationId = this.getNodeParameter('organizationId', itemIndex, ''); const projectData = { name, description, scm_type: scmType, scm_url: scmUrl, scm_branch: scmBranch, scm_clean: scmClean, scm_delete_on_update: scmDeleteOnUpdate, }; if (credentialId) { projectData.credential = credentialId; } if (organizationId) { projectData.organization = organizationId; } const project = await SharedHelpers_1.createAwxResource.call(this, 'projects', projectData); const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly'); const formattedProject = (0, resourceHelpers_1.formatResourceResponse)(project, responseFormat, 'project'); return [[{ json: formattedProject }]]; } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to create project: ${error.message}`, { itemIndex }); } } else if (action === 'update') { try { const idKeys = ['projectId', 'Project_ID', 'id']; const nameKeys = ['projectName', 'Project_Name', 'name']; const { id, name } = resourceHelpers_1.resolveResourceParameters.call(this, idKeys, nameKeys, 'project', itemIndex); let resolvedProjectId = id; if (!resolvedProjectId && name) { const project = await SharedHelpers_1.getAwxResource.call(this, 'projects', { name }); resolvedProjectId = project.id; } if (!resolvedProjectId) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Project ID could not be determined for update.'); } const updateFields = this.getNodeParameter('updateFields', itemIndex, {}); const project = await SharedHelpers_1.updateAwxResource.call(this, `/projects/${resolvedProjectId}/`, updateFields); const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly'); const formattedProject = (0, resourceHelpers_1.formatResourceResponse)(project, responseFormat, 'project'); return [[{ json: formattedProject }]]; } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to update project: ${error.message}`, { itemIndex }); } } else if (action === 'delete') { try { const idKeys = ['projectId', 'Project_ID', 'id']; const nameKeys = ['projectName', 'Project_Name', 'name']; const { id, name } = resourceHelpers_1.resolveResourceParameters.call(this, idKeys, nameKeys, 'project', itemIndex); let resolvedProjectId = id; if (!resolvedProjectId && name) { const project = await SharedHelpers_1.getAwxResource.call(this, 'projects', { name }); resolvedProjectId = project.id; } if (!resolvedProjectId) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Project ID could not be determined for deletion.'); } await SharedHelpers_1.deleteAwxResourceWithLogging.call(this, `/projects/${resolvedProjectId}/`, itemIndex); return [ this.helpers.returnJsonArray([{ success: true, message: `Project ${name || resolvedProjectId} deleted successfully.`, }]), ]; } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to delete project: ${error.message}`, { itemIndex }); } } else if (action === 'sync') { try { const idKeys = ['projectId', 'Project_ID', 'id']; const nameKeys = ['projectName', 'Project_Name', 'name']; const { id, name } = resourceHelpers_1.resolveResourceParameters.call(this, idKeys, nameKeys, 'project', itemIndex); let resolvedProjectId = id; if (!resolvedProjectId && name) { const project = await SharedHelpers_1.getAwxResource.call(this, 'projects', { name }); resolvedProjectId = project.id; } if (!resolvedProjectId) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Project ID could not be determined for sync.'); } const response = await SharedHelpers_1.syncAwxResource.call(this, `/projects/${resolvedProjectId}/update/`); return [[{ json: response }]]; } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to sync project: ${error.message}`, { itemIndex }); } } throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The action "${action}" is not supported for projects`); } //# sourceMappingURL=ProjectResources.js.map