@crypto512/jicon-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/.env.example +9 -0
  2. package/.jicon.json.custom +21 -0
  3. package/.jicon.json.example +15 -0
  4. package/.jicon.json.readonly +15 -0
  5. package/CLAUDE.md +596 -0
  6. package/CONTRIBUTING.md +371 -0
  7. package/DEVELOPMENT.md +400 -0
  8. package/LICENSE +21 -0
  9. package/README.md +300 -0
  10. package/TOOL_LIST.md +435 -0
  11. package/dist/config/constants.d.ts +14 -0
  12. package/dist/config/constants.d.ts.map +1 -0
  13. package/dist/config/constants.js +18 -0
  14. package/dist/config/constants.js.map +1 -0
  15. package/dist/config/loader.d.ts +35 -0
  16. package/dist/config/loader.d.ts.map +1 -0
  17. package/dist/config/loader.js +108 -0
  18. package/dist/config/loader.js.map +1 -0
  19. package/dist/config/types.d.ts +130 -0
  20. package/dist/config/types.d.ts.map +1 -0
  21. package/dist/config/types.js +32 -0
  22. package/dist/config/types.js.map +1 -0
  23. package/dist/confluence/client.d.ts +30 -0
  24. package/dist/confluence/client.d.ts.map +1 -0
  25. package/dist/confluence/client.js +176 -0
  26. package/dist/confluence/client.js.map +1 -0
  27. package/dist/confluence/defaults.d.ts +23 -0
  28. package/dist/confluence/defaults.d.ts.map +1 -0
  29. package/dist/confluence/defaults.js +29 -0
  30. package/dist/confluence/defaults.js.map +1 -0
  31. package/dist/confluence/formatters.d.ts +22 -0
  32. package/dist/confluence/formatters.d.ts.map +1 -0
  33. package/dist/confluence/formatters.js +125 -0
  34. package/dist/confluence/formatters.js.map +1 -0
  35. package/dist/confluence/tools.d.ts +266 -0
  36. package/dist/confluence/tools.d.ts.map +1 -0
  37. package/dist/confluence/tools.js +376 -0
  38. package/dist/confluence/tools.js.map +1 -0
  39. package/dist/confluence/types.d.ts +122 -0
  40. package/dist/confluence/types.d.ts.map +1 -0
  41. package/dist/confluence/types.js +5 -0
  42. package/dist/confluence/types.js.map +1 -0
  43. package/dist/index.d.ts +6 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +161 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/jira/client.d.ts +46 -0
  48. package/dist/jira/client.d.ts.map +1 -0
  49. package/dist/jira/client.js +178 -0
  50. package/dist/jira/client.js.map +1 -0
  51. package/dist/jira/defaults.d.ts +19 -0
  52. package/dist/jira/defaults.d.ts.map +1 -0
  53. package/dist/jira/defaults.js +57 -0
  54. package/dist/jira/defaults.js.map +1 -0
  55. package/dist/jira/formatters.d.ts +22 -0
  56. package/dist/jira/formatters.d.ts.map +1 -0
  57. package/dist/jira/formatters.js +128 -0
  58. package/dist/jira/formatters.js.map +1 -0
  59. package/dist/jira/tools.d.ts +334 -0
  60. package/dist/jira/tools.d.ts.map +1 -0
  61. package/dist/jira/tools.js +372 -0
  62. package/dist/jira/tools.js.map +1 -0
  63. package/dist/jira/types.d.ts +110 -0
  64. package/dist/jira/types.d.ts.map +1 -0
  65. package/dist/jira/types.js +5 -0
  66. package/dist/jira/types.js.map +1 -0
  67. package/dist/permissions/filter.d.ts +30 -0
  68. package/dist/permissions/filter.d.ts.map +1 -0
  69. package/dist/permissions/filter.js +89 -0
  70. package/dist/permissions/filter.js.map +1 -0
  71. package/dist/permissions/tool-registry.d.ts +49 -0
  72. package/dist/permissions/tool-registry.d.ts.map +1 -0
  73. package/dist/permissions/tool-registry.js +111 -0
  74. package/dist/permissions/tool-registry.js.map +1 -0
  75. package/dist/tempo/client.d.ts +32 -0
  76. package/dist/tempo/client.d.ts.map +1 -0
  77. package/dist/tempo/client.js +125 -0
  78. package/dist/tempo/client.js.map +1 -0
  79. package/dist/tempo/formatters.d.ts +30 -0
  80. package/dist/tempo/formatters.d.ts.map +1 -0
  81. package/dist/tempo/formatters.js +172 -0
  82. package/dist/tempo/formatters.js.map +1 -0
  83. package/dist/tempo/tools.d.ts +184 -0
  84. package/dist/tempo/tools.d.ts.map +1 -0
  85. package/dist/tempo/tools.js +392 -0
  86. package/dist/tempo/tools.js.map +1 -0
  87. package/dist/tempo/types.d.ts +98 -0
  88. package/dist/tempo/types.d.ts.map +1 -0
  89. package/dist/tempo/types.js +5 -0
  90. package/dist/tempo/types.js.map +1 -0
  91. package/dist/types.d.ts +27 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +6 -0
  94. package/dist/types.js.map +1 -0
  95. package/dist/utils/http-client.d.ts +22 -0
  96. package/dist/utils/http-client.d.ts.map +1 -0
  97. package/dist/utils/http-client.js +137 -0
  98. package/dist/utils/http-client.js.map +1 -0
  99. package/dist/utils/response-formatter.d.ts +8 -0
  100. package/dist/utils/response-formatter.d.ts.map +1 -0
  101. package/dist/utils/response-formatter.js +38 -0
  102. package/dist/utils/response-formatter.js.map +1 -0
  103. package/package.json +50 -0
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Confluence-specific types
3
+ */
4
+ export interface ConfluencePage {
5
+ id: string;
6
+ type: "page" | "blogpost";
7
+ status: string;
8
+ title: string;
9
+ space?: {
10
+ key: string;
11
+ name: string;
12
+ };
13
+ version: {
14
+ number: number;
15
+ when: string;
16
+ by: {
17
+ displayName: string;
18
+ email?: string;
19
+ };
20
+ };
21
+ body?: {
22
+ storage?: {
23
+ value: string;
24
+ representation: "storage";
25
+ };
26
+ view?: {
27
+ value: string;
28
+ representation: "view";
29
+ };
30
+ };
31
+ ancestors?: Array<{
32
+ id: string;
33
+ title: string;
34
+ }>;
35
+ children?: {
36
+ page?: {
37
+ results: ConfluencePage[];
38
+ };
39
+ };
40
+ metadata?: {
41
+ labels?: {
42
+ results: Array<{
43
+ name: string;
44
+ }>;
45
+ };
46
+ };
47
+ _links: {
48
+ webui: string;
49
+ self: string;
50
+ };
51
+ }
52
+ export interface ConfluenceSearchResult {
53
+ results: ConfluencePage[];
54
+ start: number;
55
+ limit: number;
56
+ size: number;
57
+ totalSize: number;
58
+ }
59
+ export interface ConfluenceSpace {
60
+ id: string;
61
+ key: string;
62
+ name: string;
63
+ type: "global" | "personal";
64
+ status: string;
65
+ description?: {
66
+ plain: {
67
+ value: string;
68
+ };
69
+ };
70
+ homepage?: {
71
+ id: string;
72
+ title: string;
73
+ };
74
+ _links: {
75
+ webui: string;
76
+ self: string;
77
+ };
78
+ }
79
+ export interface ConfluenceComment {
80
+ id: string;
81
+ type: "comment";
82
+ status: string;
83
+ title: string;
84
+ body: {
85
+ storage: {
86
+ value: string;
87
+ representation: "storage";
88
+ };
89
+ };
90
+ version: {
91
+ number: number;
92
+ when: string;
93
+ by: {
94
+ displayName: string;
95
+ email?: string;
96
+ };
97
+ };
98
+ }
99
+ export interface ConfluenceAttachment {
100
+ id: string;
101
+ type: "attachment";
102
+ status: string;
103
+ title: string;
104
+ metadata: {
105
+ mediaType: string;
106
+ fileSize: number;
107
+ comment?: string;
108
+ };
109
+ version: {
110
+ number: number;
111
+ when: string;
112
+ by: {
113
+ displayName: string;
114
+ email?: string;
115
+ };
116
+ };
117
+ _links: {
118
+ download: string;
119
+ webui: string;
120
+ };
121
+ }
122
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/confluence/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Confluence-specific types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/confluence/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Jira and Confluence MCP Server
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG"}
package/dist/index.js ADDED
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Jira and Confluence MCP Server
4
+ */
5
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
6
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
7
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
8
+ import { JiraClient } from "./jira/client.js";
9
+ import { ConfluenceClient } from "./confluence/client.js";
10
+ import { TempoClient } from "./tempo/client.js";
11
+ import { createJiraTools } from "./jira/tools.js";
12
+ import { createConfluenceTools } from "./confluence/tools.js";
13
+ import { createTempoTools } from "./tempo/tools.js";
14
+ import { ConfigLoader } from "./config/loader.js";
15
+ import { PermissionFilter } from "./permissions/filter.js";
16
+ // Load configuration
17
+ const config = ConfigLoader.load();
18
+ // Initialize permission filter (default: full access)
19
+ const permissionFilter = new PermissionFilter(config.permissions);
20
+ // Convert to ApiConfig format
21
+ const JIRA_CONFIG = ConfigLoader.toApiConfig(config.jira);
22
+ const CONFLUENCE_CONFIG = ConfigLoader.toApiConfig(config.confluence);
23
+ // Initialize clients
24
+ const jiraClient = JIRA_CONFIG ? new JiraClient(JIRA_CONFIG) : null;
25
+ const confluenceClient = CONFLUENCE_CONFIG
26
+ ? new ConfluenceClient(CONFLUENCE_CONFIG)
27
+ : null;
28
+ // Tempo uses the same Jira configuration and authentication
29
+ const tempoClient = JIRA_CONFIG ? new TempoClient(JIRA_CONFIG, "3") : null;
30
+ // Create tools
31
+ const jiraTools = jiraClient ? createJiraTools(jiraClient) : {};
32
+ const confluenceTools = confluenceClient
33
+ ? createConfluenceTools(confluenceClient)
34
+ : {};
35
+ const tempoTools = tempoClient ? createTempoTools(tempoClient) : {};
36
+ const allTools = { ...jiraTools, ...confluenceTools, ...tempoTools };
37
+ // Create MCP server
38
+ const server = new Server({
39
+ name: "jicon-mcp-server",
40
+ version: "0.1.0",
41
+ }, {
42
+ capabilities: {
43
+ tools: {},
44
+ },
45
+ });
46
+ // Handle list_tools request
47
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
48
+ // Filter tools based on permissions
49
+ const tools = Object.entries(allTools)
50
+ .filter(([name]) => permissionFilter.isToolAllowed(name))
51
+ .map(([name, tool]) => ({
52
+ name,
53
+ description: tool.description,
54
+ inputSchema: {
55
+ type: "object",
56
+ properties: tool.inputSchema.shape,
57
+ required: Object.keys(tool.inputSchema.shape).filter((key) => !tool.inputSchema.shape[key]?.isOptional?.()),
58
+ },
59
+ }));
60
+ return { tools };
61
+ });
62
+ // Handle call_tool request
63
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
64
+ const toolName = request.params.name;
65
+ const tool = allTools[toolName];
66
+ if (!tool) {
67
+ return {
68
+ content: [
69
+ {
70
+ type: "text",
71
+ text: JSON.stringify({
72
+ error: true,
73
+ message: `Unknown tool: ${toolName}`,
74
+ }),
75
+ },
76
+ ],
77
+ isError: true,
78
+ };
79
+ }
80
+ // Check permission before executing
81
+ if (!permissionFilter.isToolAllowed(toolName)) {
82
+ return {
83
+ content: [
84
+ {
85
+ type: "text",
86
+ text: JSON.stringify({
87
+ error: true,
88
+ message: permissionFilter.getDenialMessage(toolName),
89
+ }),
90
+ },
91
+ ],
92
+ isError: true,
93
+ };
94
+ }
95
+ try {
96
+ // Validate and parse arguments
97
+ const parsedArgs = tool.inputSchema.parse(request.params.arguments || {});
98
+ // Execute tool handler
99
+ const result = await tool.handler(parsedArgs);
100
+ return result;
101
+ }
102
+ catch (error) {
103
+ return {
104
+ content: [
105
+ {
106
+ type: "text",
107
+ text: JSON.stringify({
108
+ error: true,
109
+ message: error instanceof Error ? error.message : String(error),
110
+ details: error instanceof Error
111
+ ? { stack: error.stack, name: error.name }
112
+ : undefined,
113
+ }),
114
+ },
115
+ ],
116
+ isError: true,
117
+ };
118
+ }
119
+ });
120
+ // Start server
121
+ async function main() {
122
+ // Check if at least one service is configured
123
+ if (!JIRA_CONFIG && !CONFLUENCE_CONFIG) {
124
+ console.error("Error: No services configured!");
125
+ console.error("Please configure at least one service using one of these methods:");
126
+ console.error("\n1. Project config file: .jicon.json");
127
+ console.error("2. User config file: $HOME/.config/jicon/jicon.json");
128
+ console.error("3. Environment variables:");
129
+ console.error("\n Jira:");
130
+ console.error(" JIRA_URL");
131
+ console.error(" JIRA_USERNAME");
132
+ console.error(" JIRA_API_TOKEN");
133
+ console.error("\n Confluence:");
134
+ console.error(" CONFLUENCE_URL");
135
+ console.error(" CONFLUENCE_USERNAME");
136
+ console.error(" CONFLUENCE_API_TOKEN");
137
+ process.exit(1);
138
+ }
139
+ // Log configured services
140
+ console.error("Jicon MCP Server starting...");
141
+ if (JIRA_CONFIG) {
142
+ console.error(`✓ Jira configured: ${JIRA_CONFIG.url}`);
143
+ console.error(`✓ Tempo configured: ${JIRA_CONFIG.url} (using Jira auth)`);
144
+ }
145
+ if (CONFLUENCE_CONFIG) {
146
+ console.error(`✓ Confluence configured: ${CONFLUENCE_CONFIG.url}`);
147
+ }
148
+ // Log permission info
149
+ const allowedTools = permissionFilter.getAllowedTools();
150
+ const permMode = permissionFilter.getMode();
151
+ console.error(`✓ Permission mode: ${permMode}`);
152
+ console.error(`✓ Allowed tools: ${allowedTools.length}/${Object.keys(allTools).length}`);
153
+ const transport = new StdioServerTransport();
154
+ await server.connect(transport);
155
+ console.error("Jicon MCP Server running on stdio");
156
+ }
157
+ main().catch((error) => {
158
+ console.error("Fatal error:", error);
159
+ process.exit(1);
160
+ });
161
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Jira API Client
3
+ */
4
+ import type { ApiConfig } from "../types.js";
5
+ import type { JiraIssue, JiraSearchResult, JiraProject, JiraComment, JiraTransition, JiraBoard, JiraSprint } from "./types.js";
6
+ export declare class JiraClient {
7
+ private http;
8
+ constructor(config: ApiConfig);
9
+ searchIssues(jql: string, maxResults?: number, fields?: string[]): Promise<JiraSearchResult>;
10
+ getIssue(issueKey: string, fields?: string[], expand?: string[]): Promise<JiraIssue>;
11
+ createIssue(issueData: {
12
+ projectKey: string;
13
+ issueType: string;
14
+ summary: string;
15
+ description?: string;
16
+ priority?: string;
17
+ assignee?: string;
18
+ labels?: string[];
19
+ components?: string[];
20
+ customFields?: Record<string, unknown>;
21
+ }): Promise<JiraIssue>;
22
+ updateIssue(issueKey: string, fields: Record<string, unknown>, notifyUsers?: boolean): Promise<void>;
23
+ transitionIssue(issueKey: string, transitionName: string, comment?: string, fields?: Record<string, unknown>): Promise<void>;
24
+ getTransitions(issueKey: string): Promise<JiraTransition[]>;
25
+ addComment(issueKey: string, comment: string, visibility?: {
26
+ type: string;
27
+ value: string;
28
+ }): Promise<JiraComment>;
29
+ getComments(issueKey: string, maxResults?: number, orderBy?: string): Promise<JiraComment[]>;
30
+ linkIssues(issueKey: string, linkedIssueKey: string, linkType: string, comment?: string): Promise<void>;
31
+ listProjects(recent?: boolean, expand?: string[]): Promise<JiraProject[]>;
32
+ getProject(projectKey: string, expand?: string[]): Promise<JiraProject>;
33
+ getBoard(boardId: number): Promise<JiraBoard>;
34
+ getSprints(boardId: number, state?: "active" | "future" | "closed"): Promise<JiraSprint[]>;
35
+ getSprintIssues(sprintId: number, maxResults?: number): Promise<JiraSearchResult>;
36
+ getIssueWatchers(issueKey: string): Promise<{
37
+ self: string;
38
+ isWatching: boolean;
39
+ watchCount: number;
40
+ watchers: Array<{
41
+ displayName: string;
42
+ emailAddress?: string;
43
+ }>;
44
+ }>;
45
+ }
46
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/jira/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Jira API Client
3
+ */
4
+ import { HttpClient } from "../utils/http-client.js";
5
+ import { DEFAULT_SEARCH_FIELDS, DEFAULT_ISSUE_FIELDS } from "./defaults.js";
6
+ export class JiraClient {
7
+ http;
8
+ constructor(config) {
9
+ this.http = new HttpClient(config);
10
+ }
11
+ // Issue operations
12
+ async searchIssues(jql, maxResults = 50, fields) {
13
+ const params = {
14
+ jql,
15
+ maxResults,
16
+ startAt: 0,
17
+ };
18
+ // Use default fields if none specified to reduce response size
19
+ // For POST requests, fields must be an array, not a comma-separated string
20
+ const fieldsToUse = fields && fields.length > 0 ? fields : DEFAULT_SEARCH_FIELDS;
21
+ params.fields = fieldsToUse;
22
+ return this.http.post("/rest/api/2/search", params);
23
+ }
24
+ async getIssue(issueKey, fields, expand) {
25
+ const params = new URLSearchParams();
26
+ // Use default fields if none specified to reduce response size
27
+ const fieldsToUse = fields && fields.length > 0 ? fields : DEFAULT_ISSUE_FIELDS;
28
+ params.append("fields", fieldsToUse.join(","));
29
+ if (expand && expand.length > 0) {
30
+ params.append("expand", expand.join(","));
31
+ }
32
+ const queryString = params.toString();
33
+ const url = `/rest/api/2/issue/${issueKey}${queryString ? `?${queryString}` : ""}`;
34
+ return this.http.get(url);
35
+ }
36
+ async createIssue(issueData) {
37
+ const fields = {
38
+ project: { key: issueData.projectKey },
39
+ issuetype: { name: issueData.issueType },
40
+ summary: issueData.summary,
41
+ };
42
+ if (issueData.description) {
43
+ fields.description = issueData.description;
44
+ }
45
+ if (issueData.priority) {
46
+ fields.priority = { name: issueData.priority };
47
+ }
48
+ if (issueData.assignee) {
49
+ fields.assignee = { name: issueData.assignee };
50
+ }
51
+ if (issueData.labels && issueData.labels.length > 0) {
52
+ fields.labels = issueData.labels;
53
+ }
54
+ if (issueData.components && issueData.components.length > 0) {
55
+ fields.components = issueData.components.map((name) => ({ name }));
56
+ }
57
+ if (issueData.customFields) {
58
+ Object.assign(fields, issueData.customFields);
59
+ }
60
+ const response = await this.http.post("/rest/api/2/issue", { fields });
61
+ return this.getIssue(response.key);
62
+ }
63
+ async updateIssue(issueKey, fields, notifyUsers = true) {
64
+ const params = new URLSearchParams();
65
+ params.append("notifyUsers", String(notifyUsers));
66
+ await this.http.put(`/rest/api/2/issue/${issueKey}?${params.toString()}`, { fields });
67
+ }
68
+ async transitionIssue(issueKey, transitionName, comment, fields) {
69
+ // First, get available transitions
70
+ const transitions = await this.getTransitions(issueKey);
71
+ const transition = transitions.find((t) => t.name.toLowerCase() === transitionName.toLowerCase());
72
+ if (!transition) {
73
+ throw new Error(`Transition '${transitionName}' not found. Available transitions: ${transitions.map((t) => t.name).join(", ")}`);
74
+ }
75
+ const body = {
76
+ transition: { id: transition.id },
77
+ };
78
+ if (comment) {
79
+ body.update = {
80
+ comment: [
81
+ {
82
+ add: { body: comment },
83
+ },
84
+ ],
85
+ };
86
+ }
87
+ if (fields) {
88
+ body.fields = fields;
89
+ }
90
+ await this.http.post(`/rest/api/2/issue/${issueKey}/transitions`, body);
91
+ }
92
+ async getTransitions(issueKey) {
93
+ const response = await this.http.get(`/rest/api/2/issue/${issueKey}/transitions`);
94
+ return response.transitions;
95
+ }
96
+ // Comment operations
97
+ async addComment(issueKey, comment, visibility) {
98
+ const body = { body: comment };
99
+ if (visibility) {
100
+ body.visibility = visibility;
101
+ }
102
+ return this.http.post(`/rest/api/2/issue/${issueKey}/comment`, body);
103
+ }
104
+ async getComments(issueKey, maxResults, orderBy) {
105
+ const params = new URLSearchParams();
106
+ if (maxResults) {
107
+ params.append("maxResults", String(maxResults));
108
+ }
109
+ if (orderBy) {
110
+ params.append("orderBy", orderBy);
111
+ }
112
+ const queryString = params.toString();
113
+ const url = `/rest/api/2/issue/${issueKey}/comment${queryString ? `?${queryString}` : ""}`;
114
+ const response = await this.http.get(url);
115
+ return response.comments;
116
+ }
117
+ // Issue linking
118
+ async linkIssues(issueKey, linkedIssueKey, linkType, comment) {
119
+ const body = {
120
+ type: { name: linkType },
121
+ inwardIssue: { key: issueKey },
122
+ outwardIssue: { key: linkedIssueKey },
123
+ };
124
+ if (comment) {
125
+ body.comment = { body: comment };
126
+ }
127
+ await this.http.post("/rest/api/2/issueLink", body);
128
+ }
129
+ // Project operations
130
+ async listProjects(recent, expand) {
131
+ const params = new URLSearchParams();
132
+ if (recent !== undefined) {
133
+ params.append("recent", String(recent));
134
+ }
135
+ if (expand && expand.length > 0) {
136
+ params.append("expand", expand.join(","));
137
+ }
138
+ const queryString = params.toString();
139
+ const url = `/rest/api/2/project${queryString ? `?${queryString}` : ""}`;
140
+ return this.http.get(url);
141
+ }
142
+ async getProject(projectKey, expand) {
143
+ const params = new URLSearchParams();
144
+ if (expand && expand.length > 0) {
145
+ params.append("expand", expand.join(","));
146
+ }
147
+ const queryString = params.toString();
148
+ const url = `/rest/api/2/project/${projectKey}${queryString ? `?${queryString}` : ""}`;
149
+ return this.http.get(url);
150
+ }
151
+ // Agile/Board operations
152
+ async getBoard(boardId) {
153
+ return this.http.get(`/rest/agile/1.0/board/${boardId}`);
154
+ }
155
+ async getSprints(boardId, state) {
156
+ const params = new URLSearchParams();
157
+ if (state) {
158
+ params.append("state", state);
159
+ }
160
+ const queryString = params.toString();
161
+ const url = `/rest/agile/1.0/board/${boardId}/sprint${queryString ? `?${queryString}` : ""}`;
162
+ const response = await this.http.get(url);
163
+ return response.values;
164
+ }
165
+ async getSprintIssues(sprintId, maxResults) {
166
+ const params = new URLSearchParams();
167
+ if (maxResults) {
168
+ params.append("maxResults", String(maxResults));
169
+ }
170
+ const queryString = params.toString();
171
+ const url = `/rest/agile/1.0/sprint/${sprintId}/issue${queryString ? `?${queryString}` : ""}`;
172
+ return this.http.get(url);
173
+ }
174
+ async getIssueWatchers(issueKey) {
175
+ return this.http.get(`/rest/api/2/issue/${issueKey}/watchers`);
176
+ }
177
+ }
178
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/jira/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Default field configurations for Jira API responses
3
+ * These defaults help reduce response size and improve performance
4
+ */
5
+ /**
6
+ * Essential fields for issue search results
7
+ * Includes only the most commonly needed information
8
+ */
9
+ export declare const DEFAULT_SEARCH_FIELDS: string[];
10
+ /**
11
+ * Detailed fields for single issue retrieval
12
+ * Includes more information than search but still selective
13
+ */
14
+ export declare const DEFAULT_ISSUE_FIELDS: string[];
15
+ /**
16
+ * Minimal fields for listing projects
17
+ */
18
+ export declare const DEFAULT_PROJECT_FIELDS: string[];
19
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/jira/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,eAAO,MAAM,qBAAqB,UAajC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,UAmBhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,UAMlC,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Default field configurations for Jira API responses
3
+ * These defaults help reduce response size and improve performance
4
+ */
5
+ /**
6
+ * Essential fields for issue search results
7
+ * Includes only the most commonly needed information
8
+ */
9
+ export const DEFAULT_SEARCH_FIELDS = [
10
+ "summary",
11
+ "status",
12
+ "priority",
13
+ "assignee",
14
+ "reporter",
15
+ "created",
16
+ "updated",
17
+ "issuetype",
18
+ "project",
19
+ "description",
20
+ "labels",
21
+ "components",
22
+ ];
23
+ /**
24
+ * Detailed fields for single issue retrieval
25
+ * Includes more information than search but still selective
26
+ */
27
+ export const DEFAULT_ISSUE_FIELDS = [
28
+ "summary",
29
+ "status",
30
+ "priority",
31
+ "assignee",
32
+ "reporter",
33
+ "created",
34
+ "updated",
35
+ "issuetype",
36
+ "project",
37
+ "description",
38
+ "labels",
39
+ "components",
40
+ "fixVersions",
41
+ "duedate",
42
+ "comment",
43
+ "attachment",
44
+ "subtasks",
45
+ "issuelinks",
46
+ ];
47
+ /**
48
+ * Minimal fields for listing projects
49
+ */
50
+ export const DEFAULT_PROJECT_FIELDS = [
51
+ "key",
52
+ "name",
53
+ "description",
54
+ "lead",
55
+ "projectTypeKey",
56
+ ];
57
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/jira/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,SAAS;IACT,QAAQ;IACR,UAAU;IACV,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,WAAW;IACX,SAAS;IACT,aAAa;IACb,QAAQ;IACR,YAAY;CACb,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,SAAS;IACT,QAAQ;IACR,UAAU;IACV,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,WAAW;IACX,SAAS;IACT,aAAa;IACb,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,SAAS;IACT,SAAS;IACT,YAAY;IACZ,UAAU;IACV,YAAY;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,KAAK;IACL,MAAM;IACN,aAAa;IACb,MAAM;IACN,gBAAgB;CACjB,CAAC"}