UNPKG

@aashari/mcp-server-atlassian-jira

Version:

Node.js/TypeScript MCP server for Atlassian Jira. Equips AI systems (LLMs) with tools to list/get projects, search/get issues (using JQL/ID), and view dev info (commits, PRs). Connects AI capabilities directly into Jira project management and issue tracki

64 lines (63 loc) 3.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const logger_util_js_1 = require("../utils/logger.util.js"); const transport_util_js_1 = require("../utils/transport.util.js"); const vendor_atlassian_statuses_types_js_1 = require("./vendor.atlassian.statuses.types.js"); const error_util_js_1 = require("../utils/error.util.js"); const validation_util_js_1 = require("../utils/validation.util.js"); // Create a contextualized logger for this file const serviceLogger = logger_util_js_1.Logger.forContext('services/vendor.atlassian.statuses.service.ts'); const API_PATH = '/rest/api/3'; /** * List available Jira statuses. * * If projectKeyOrId is provided, fetches statuses relevant to that specific project's workflows. * Otherwise, fetches all statuses available in the Jira instance. * * @param {ListStatusesParams} params - Parameters including optional projectKeyOrId. * @returns {Promise<JiraGlobalStatusesResponse | JiraProjectStatusesResponse>} Raw API response. * @throws {Error} If credentials are missing or API request fails. */ async function listStatuses(params = {}) { const methodLogger = serviceLogger.forMethod('listStatuses'); const credentials = (0, transport_util_js_1.getAtlassianCredentials)(); if (!credentials) { throw (0, error_util_js_1.createAuthMissingError)('List statuses'); } let path; if (params.projectKeyOrId) { methodLogger.debug(`Fetching statuses for project: ${params.projectKeyOrId}`); path = `${API_PATH}/project/${encodeURIComponent(params.projectKeyOrId)}/statuses`; try { const rawData = await (0, transport_util_js_1.fetchAtlassian)(credentials, path); return (0, validation_util_js_1.validateResponse)(rawData, vendor_atlassian_statuses_types_js_1.JiraProjectStatusesResponseSchema, `project statuses for ${params.projectKeyOrId}`, 'statuses.service'); } catch (error) { // McpError is already properly structured from fetchAtlassian or validation if (error instanceof error_util_js_1.McpError) { throw error; } // Unexpected errors need to be wrapped methodLogger.error(`Unexpected error fetching statuses for project ${params.projectKeyOrId}:`, error); throw error; } } else { methodLogger.debug('Fetching global statuses'); path = `${API_PATH}/status`; try { const rawData = await (0, transport_util_js_1.fetchAtlassian)(credentials, path); return (0, validation_util_js_1.validateResponse)(rawData, vendor_atlassian_statuses_types_js_1.JiraGlobalStatusesResponseSchema, 'global statuses', 'statuses.service'); } catch (error) { // McpError is already properly structured from fetchAtlassian or validation if (error instanceof error_util_js_1.McpError) { throw error; } // Unexpected errors need to be wrapped methodLogger.error('Unexpected error fetching global statuses:', error); throw error; } } } exports.default = { listStatuses };