UNPKG

n8n-nodes-redmine

Version:
325 lines 13.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeIssueOperation = executeIssueOperation; const n8n_workflow_1 = require("n8n-workflow"); async function executeIssueOperation(params) { var _a; const { operation, i, baseUrl, apiKey } = params; let endpoint = ''; let method = 'GET'; let body = {}; let qs = {}; if (operation === 'get') { const issueId = this.getNodeParameter('issueId', i); method = 'GET'; endpoint = `/issues/${issueId}.json`; const include = this.getNodeParameter('include', i, []); if (include.length > 0) { qs.include = include.join(','); } } else if (operation === 'getAll') { const returnAll = this.getNodeParameter('returnAll', i); method = 'GET'; endpoint = '/issues.json'; if (!returnAll) { const limit = this.getNodeParameter('limit', i); const offset = this.getNodeParameter('offset', i, 0); qs.limit = limit; qs.offset = offset; } const sort = this.getNodeParameter('sort', i, ''); if (sort) { qs.sort = sort; } const include = this.getNodeParameter('include', i, []); if (include.length > 0) { qs.include = include.join(','); } const filters = this.getNodeParameter('filters', i, {}); if (filters.issue_id) qs.issue_id = filters.issue_id; if (filters.project_id) qs.project_id = filters.project_id; if (filters.subproject_id) qs.subproject_id = filters.subproject_id; if (filters.tracker_id) qs.tracker_id = filters.tracker_id; if (filters.status_id) { if (filters.status_id === 'custom' && filters.custom_status_id) { qs.status_id = filters.custom_status_id; } else { qs.status_id = filters.status_id; } } if (filters.assigned_to_id) qs.assigned_to_id = filters.assigned_to_id; if (filters.parent_id) qs.parent_id = filters.parent_id; if (filters.author_id) qs.author_id = filters.author_id; if (filters.priority_id) qs.priority_id = filters.priority_id; if (filters.category_id) qs.category_id = filters.category_id; if (filters.fixed_version_id) qs.fixed_version_id = filters.fixed_version_id; if (filters.target_version_id) qs.target_version_id = filters.target_version_id; if (filters.subject) qs.subject = filters.subject; if (filters.filterByCreationDate) { const filterType = filters.creationDateFilterType; switch (filterType) { case 'exact': if (filters.creationDate) { qs.created_on = filters.creationDate; } break; case 'range': if (filters.creationDateStart && filters.creationDateEnd) { qs.created_on = `><${filters.creationDateStart}|${filters.creationDateEnd}`; } break; case 'after': if (filters.creationDate) { qs.created_on = `>=${filters.creationDate}`; } break; case 'before': if (filters.creationDate) { qs.created_on = `<=${filters.creationDate}`; } break; } } if (filters.filterByUpdatedDate) { const filterType = filters.updatedDateFilterType; switch (filterType) { case 'exact': if (filters.updatedDate) { qs.updated_on = filters.updatedDate; } break; case 'range': if (filters.updatedDateStart && filters.updatedDateEnd) { qs.updated_on = `><${filters.updatedDateStart}|${filters.updatedDateEnd}`; } break; case 'after': if (filters.updatedDate) { qs.updated_on = `>=${filters.updatedDate}`; } break; case 'before': if (filters.updatedDate) { qs.updated_on = `<=${filters.updatedDate}`; } break; } } if (filters.customFields && filters.customFields.field) { for (const customField of filters.customFields.field) { qs[`cf_${customField.id}`] = customField.value; } } } else if (operation === 'create') { const projectId = this.getNodeParameter('projectId', i); const subject = this.getNodeParameter('subject', i); const additionalFields = this.getNodeParameter('additionalFields', i); method = 'POST'; endpoint = '/issues.json'; const issueData = { project_id: projectId, subject, }; if (additionalFields.description) issueData.description = additionalFields.description; if (additionalFields.category_id) issueData.category_id = additionalFields.category_id; if (additionalFields.status_id) issueData.status_id = additionalFields.status_id; if (additionalFields.tracker_id) issueData.tracker_id = additionalFields.tracker_id; if (additionalFields.priority_id) issueData.priority_id = additionalFields.priority_id; if (additionalFields.assigned_to_id) issueData.assigned_to_id = additionalFields.assigned_to_id; if (additionalFields.parent_issue_id) issueData.parent_issue_id = additionalFields.parent_issue_id; if (additionalFields.fixed_version_id) issueData.fixed_version_id = additionalFields.fixed_version_id; if (additionalFields.start_date) issueData.start_date = additionalFields.start_date; if (additionalFields.due_date) issueData.due_date = additionalFields.due_date; if (additionalFields.estimated_hours) issueData.estimated_hours = additionalFields.estimated_hours; if (additionalFields.is_private !== undefined) issueData.is_private = additionalFields.is_private; if (additionalFields.customFields && additionalFields.customFields.field) { const customFields = []; for (const customField of additionalFields.customFields.field) { customFields.push({ id: customField.id, value: customField.value, }); } if (customFields.length > 0) { issueData.custom_fields = customFields; } } body = { issue: issueData, }; } else if (operation === 'update') { const issueId = this.getNodeParameter('issueId', i); const subject = this.getNodeParameter('subject', i); const notes = this.getNodeParameter('notes', i); const privateNotes = this.getNodeParameter('private_notes', i); const additionalFields = this.getNodeParameter('additionalFields', i); method = 'PUT'; endpoint = `/issues/${issueId}.json`; const issueData = {}; if (subject) issueData.subject = subject; if (notes) issueData.notes = notes; if (privateNotes) issueData.private_notes = true; if (additionalFields.description) issueData.description = additionalFields.description; if (additionalFields.category_id) issueData.category_id = additionalFields.category_id; if (additionalFields.status_id) issueData.status_id = additionalFields.status_id; if (additionalFields.tracker_id) issueData.tracker_id = additionalFields.tracker_id; if (additionalFields.priority_id) issueData.priority_id = additionalFields.priority_id; if (additionalFields.assigned_to_id !== undefined && additionalFields.assigned_to_id !== null) { issueData.assigned_to_id = additionalFields.assigned_to_id; } if (additionalFields.parent_issue_id) issueData.parent_issue_id = additionalFields.parent_issue_id; if (additionalFields.fixed_version_id) issueData.fixed_version_id = additionalFields.fixed_version_id; if (additionalFields.start_date) issueData.start_date = additionalFields.start_date; if (additionalFields.due_date) issueData.due_date = additionalFields.due_date; if (additionalFields.estimated_hours) issueData.estimated_hours = additionalFields.estimated_hours; if (additionalFields.is_private !== undefined) issueData.is_private = additionalFields.is_private; if (additionalFields.customFields && additionalFields.customFields.field) { const customFields = []; for (const customField of additionalFields.customFields.field) { customFields.push({ id: customField.id, value: customField.value, }); } if (customFields.length > 0) { issueData.custom_fields = customFields; } } body = { issue: issueData, }; } else if (operation === 'delete') { const issueId = this.getNodeParameter('issueId', i); method = 'DELETE'; endpoint = `/issues/${issueId}.json`; } else if (operation === 'addWatcher') { const issueId = this.getNodeParameter('issueId', i); const userId = this.getNodeParameter('userId', i); method = 'POST'; endpoint = `/issues/${issueId}/watchers.json`; body = { user_id: userId, }; } const optionsData = this.getNodeParameter('options', i, {}); const impersonateUser = optionsData.impersonateUser; const headers = { 'X-Redmine-API-Key': apiKey, 'Content-Type': 'application/json', }; if (impersonateUser) { headers['X-Redmine-Switch-User'] = impersonateUser; } const options = { method, body, qs, uri: `${baseUrl}/` + endpoint.replace(/^\//, ''), headers, json: true, }; if (Object.keys(body).length === 0) { delete options.body; } let responseData; try { if (operation === 'getAll' && this.getNodeParameter('returnAll', i)) { const allIssues = []; const maxItems = this.getNodeParameter('maxItems', i, 1000); const pageSize = 100; let offset = 0; let totalCount = Number.POSITIVE_INFINITY; let reportedTotalCount; while (allIssues.length < maxItems && offset < totalCount) { const remainingItems = maxItems - allIssues.length; const pageLimit = Math.min(pageSize, remainingItems); const pageOptions = { ...options, qs: { ...((_a = options.qs) !== null && _a !== void 0 ? _a : {}), limit: pageLimit, offset, }, }; const pageResponse = await this.helpers.request(pageOptions); const issues = Array.isArray(pageResponse === null || pageResponse === void 0 ? void 0 : pageResponse.issues) ? pageResponse.issues : []; const issuesToAdd = issues.slice(0, remainingItems); allIssues.push(...issuesToAdd); if (typeof (pageResponse === null || pageResponse === void 0 ? void 0 : pageResponse.total_count) === 'number') { totalCount = pageResponse.total_count; reportedTotalCount = pageResponse.total_count; } else if (issues.length < pageLimit) { break; } if (issues.length === 0) { break; } offset += issues.length; } responseData = { issues: allIssues, total_count: reportedTotalCount !== null && reportedTotalCount !== void 0 ? reportedTotalCount : allIssues.length, offset: 0, limit: allIssues.length, }; } else { responseData = await this.helpers.request(options); } } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Redmine API error: ${error.message}`, { itemIndex: i }); } return { json: responseData, pairedItem: { item: i, }, }; } //# sourceMappingURL=IssueExecute.js.map