@gongrzhe/server-jira 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 (66) hide show
  1. package/README.md +374 -0
  2. package/dist/common/context.d.ts +15 -0
  3. package/dist/common/context.d.ts.map +1 -0
  4. package/dist/common/context.js +33 -0
  5. package/dist/common/context.js.map +1 -0
  6. package/dist/common/errors.d.ts +26 -0
  7. package/dist/common/errors.d.ts.map +1 -0
  8. package/dist/common/errors.js +71 -0
  9. package/dist/common/errors.js.map +1 -0
  10. package/dist/common/token-parser.d.ts +53 -0
  11. package/dist/common/token-parser.d.ts.map +1 -0
  12. package/dist/common/token-parser.js +117 -0
  13. package/dist/common/token-parser.js.map +1 -0
  14. package/dist/common/types.d.ts +151 -0
  15. package/dist/common/types.d.ts.map +1 -0
  16. package/dist/common/types.js +2 -0
  17. package/dist/common/types.js.map +1 -0
  18. package/dist/common/utils.d.ts +9 -0
  19. package/dist/common/utils.d.ts.map +1 -0
  20. package/dist/common/utils.js +116 -0
  21. package/dist/common/utils.js.map +1 -0
  22. package/dist/common/version.d.ts +2 -0
  23. package/dist/common/version.d.ts.map +1 -0
  24. package/dist/common/version.js +3 -0
  25. package/dist/common/version.js.map +1 -0
  26. package/dist/index.d.ts +3 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +505 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/operations/atlassian.d.ts +27 -0
  31. package/dist/operations/atlassian.d.ts.map +1 -0
  32. package/dist/operations/atlassian.js +27 -0
  33. package/dist/operations/atlassian.js.map +1 -0
  34. package/dist/operations/comments.d.ts +117 -0
  35. package/dist/operations/comments.d.ts.map +1 -0
  36. package/dist/operations/comments.js +153 -0
  37. package/dist/operations/comments.js.map +1 -0
  38. package/dist/operations/issues.d.ts +146 -0
  39. package/dist/operations/issues.d.ts.map +1 -0
  40. package/dist/operations/issues.js +250 -0
  41. package/dist/operations/issues.js.map +1 -0
  42. package/dist/operations/metadata.d.ts +176 -0
  43. package/dist/operations/metadata.d.ts.map +1 -0
  44. package/dist/operations/metadata.js +143 -0
  45. package/dist/operations/metadata.js.map +1 -0
  46. package/dist/operations/projects.d.ts +159 -0
  47. package/dist/operations/projects.d.ts.map +1 -0
  48. package/dist/operations/projects.js +175 -0
  49. package/dist/operations/projects.js.map +1 -0
  50. package/dist/operations/users.d.ts +130 -0
  51. package/dist/operations/users.d.ts.map +1 -0
  52. package/dist/operations/users.js +214 -0
  53. package/dist/operations/users.js.map +1 -0
  54. package/dist/operations/workflow.d.ts +110 -0
  55. package/dist/operations/workflow.d.ts.map +1 -0
  56. package/dist/operations/workflow.js +203 -0
  57. package/dist/operations/workflow.js.map +1 -0
  58. package/dist/operations/worklog.d.ts +175 -0
  59. package/dist/operations/worklog.d.ts.map +1 -0
  60. package/dist/operations/worklog.js +322 -0
  61. package/dist/operations/worklog.js.map +1 -0
  62. package/dist/test-token-discovery.d.ts +6 -0
  63. package/dist/test-token-discovery.d.ts.map +1 -0
  64. package/dist/test-token-discovery.js +26 -0
  65. package/dist/test-token-discovery.js.map +1 -0
  66. package/package.json +54 -0
package/dist/index.js ADDED
@@ -0,0 +1,505 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
4
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
+ import { zodToJsonSchema } from 'zod-to-json-schema';
6
+ import express from 'express';
7
+ import { AsyncLocalStorage } from 'node:async_hooks';
8
+ // Import operations
9
+ import * as issues from './operations/issues.js';
10
+ import * as comments from './operations/comments.js';
11
+ import * as projects from './operations/projects.js';
12
+ import * as workflow from './operations/workflow.js';
13
+ import * as users from './operations/users.js';
14
+ import * as metadata from './operations/metadata.js';
15
+ import * as worklog from './operations/worklog.js';
16
+ // Import common utilities
17
+ import { VERSION } from "./common/version.js";
18
+ import { authStorage } from "./common/context.js";
19
+ import { isJiraError, } from './common/errors.js';
20
+ import { truncateText } from './common/utils.js';
21
+ import { getCachedSiteInfo } from './common/token-parser.js';
22
+ const asyncLocalStorage = new AsyncLocalStorage();
23
+ // Factory function to create fresh server instances
24
+ function createStatelessServer() {
25
+ const server = new Server({
26
+ name: "jira-mcp-server",
27
+ version: VERSION,
28
+ }, {
29
+ capabilities: {
30
+ tools: {},
31
+ },
32
+ });
33
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
34
+ return {
35
+ tools: [
36
+ // Issue Management Tools
37
+ {
38
+ name: "jira_get_issue",
39
+ description: "Get details of a specific JIRA issue by key",
40
+ inputSchema: zodToJsonSchema(issues.GetIssueSchema),
41
+ },
42
+ {
43
+ name: "jira_search_issues",
44
+ description: "Search for JIRA issues using JQL (JIRA Query Language)",
45
+ inputSchema: zodToJsonSchema(issues.SearchIssuesSchema),
46
+ },
47
+ {
48
+ name: "jira_create_issue",
49
+ description: "Create a new JIRA issue",
50
+ inputSchema: zodToJsonSchema(issues.CreateIssueSchema),
51
+ },
52
+ {
53
+ name: "jira_update_issue",
54
+ description: "Update an existing JIRA issue",
55
+ inputSchema: zodToJsonSchema(issues.UpdateIssueSchema),
56
+ },
57
+ {
58
+ name: "jira_delete_issue",
59
+ description: "Delete a JIRA issue",
60
+ inputSchema: zodToJsonSchema(issues.DeleteIssueSchema),
61
+ },
62
+ {
63
+ name: "jira_assign_issue",
64
+ description: "Assign a JIRA issue to a user",
65
+ inputSchema: zodToJsonSchema(issues.AssignIssueSchema),
66
+ },
67
+ {
68
+ name: "jira_link_issues",
69
+ description: "Create a link between two JIRA issues",
70
+ inputSchema: zodToJsonSchema(issues.LinkIssuesSchema),
71
+ },
72
+ // Comment Tools
73
+ {
74
+ name: "jira_get_comments",
75
+ description: "Get all comments from a JIRA issue",
76
+ inputSchema: zodToJsonSchema(comments.GetCommentsSchema),
77
+ },
78
+ {
79
+ name: "jira_add_comment",
80
+ description: "Add a comment to a JIRA issue",
81
+ inputSchema: zodToJsonSchema(comments.AddCommentSchema),
82
+ },
83
+ {
84
+ name: "jira_update_comment",
85
+ description: "Update an existing comment on a JIRA issue",
86
+ inputSchema: zodToJsonSchema(comments.UpdateCommentSchema),
87
+ },
88
+ {
89
+ name: "jira_delete_comment",
90
+ description: "Delete a comment from a JIRA issue",
91
+ inputSchema: zodToJsonSchema(comments.DeleteCommentSchema),
92
+ },
93
+ // Project Tools
94
+ {
95
+ name: "jira_list_projects",
96
+ description: "List all accessible JIRA projects",
97
+ inputSchema: zodToJsonSchema(projects.ListProjectsSchema),
98
+ },
99
+ {
100
+ name: "jira_get_project",
101
+ description: "Get details of a specific JIRA project",
102
+ inputSchema: zodToJsonSchema(projects.GetProjectSchema),
103
+ },
104
+ {
105
+ name: "jira_get_project_issues",
106
+ description: "Get all issues in a specific JIRA project",
107
+ inputSchema: zodToJsonSchema(projects.GetProjectIssuesSchema),
108
+ },
109
+ {
110
+ name: "jira_get_project_versions",
111
+ description: "Get all versions of a JIRA project",
112
+ inputSchema: zodToJsonSchema(projects.GetProjectVersionsSchema),
113
+ },
114
+ {
115
+ name: "jira_get_project_components",
116
+ description: "Get all components of a JIRA project",
117
+ inputSchema: zodToJsonSchema(projects.GetProjectComponentsSchema),
118
+ },
119
+ {
120
+ name: "jira_search_projects",
121
+ description: "Search for JIRA projects",
122
+ inputSchema: zodToJsonSchema(projects.SearchProjectsSchema),
123
+ },
124
+ // Workflow Tools
125
+ {
126
+ name: "jira_get_transitions",
127
+ description: "Get available workflow transitions for a JIRA issue",
128
+ inputSchema: zodToJsonSchema(workflow.GetTransitionsSchema),
129
+ },
130
+ {
131
+ name: "jira_transition_issue",
132
+ description: "Transition a JIRA issue through workflow",
133
+ inputSchema: zodToJsonSchema(workflow.TransitionIssueSchema),
134
+ },
135
+ {
136
+ name: "jira_get_workflows",
137
+ description: "Get workflow information",
138
+ inputSchema: zodToJsonSchema(workflow.GetWorkflowsSchema),
139
+ },
140
+ // User Tools
141
+ {
142
+ name: "jira_get_current_user",
143
+ description: "Get current user information",
144
+ inputSchema: zodToJsonSchema(users.GetCurrentUserSchema),
145
+ },
146
+ {
147
+ name: "jira_search_users",
148
+ description: "Search for JIRA users",
149
+ inputSchema: zodToJsonSchema(users.SearchUsersSchema),
150
+ },
151
+ {
152
+ name: "jira_get_watchers",
153
+ description: "Get watchers of a JIRA issue",
154
+ inputSchema: zodToJsonSchema(users.GetWatchersSchema),
155
+ },
156
+ {
157
+ name: "jira_add_watcher",
158
+ description: "Add a watcher to a JIRA issue",
159
+ inputSchema: zodToJsonSchema(users.AddWatcherSchema),
160
+ },
161
+ {
162
+ name: "jira_remove_watcher",
163
+ description: "Remove a watcher from a JIRA issue",
164
+ inputSchema: zodToJsonSchema(users.RemoveWatcherSchema),
165
+ },
166
+ // Metadata Tools
167
+ {
168
+ name: "jira_get_issue_types",
169
+ description: "Get available issue types",
170
+ inputSchema: zodToJsonSchema(metadata.GetIssueTypesSchema),
171
+ },
172
+ {
173
+ name: "jira_get_priorities",
174
+ description: "Get available issue priorities",
175
+ inputSchema: zodToJsonSchema(metadata.GetPrioritiesSchema),
176
+ },
177
+ {
178
+ name: "jira_get_statuses",
179
+ description: "Get available issue statuses",
180
+ inputSchema: zodToJsonSchema(metadata.GetStatusesSchema),
181
+ },
182
+ {
183
+ name: "jira_get_fields",
184
+ description: "Get available fields (system and custom)",
185
+ inputSchema: zodToJsonSchema(metadata.GetFieldsSchema),
186
+ },
187
+ {
188
+ name: "jira_get_resolutions",
189
+ description: "Get available issue resolutions",
190
+ inputSchema: zodToJsonSchema(metadata.GetResolutionsSchema),
191
+ },
192
+ // Worklog Tools
193
+ {
194
+ name: "jira_get_worklogs",
195
+ description: "Get worklogs (time tracking entries) from a JIRA issue",
196
+ inputSchema: zodToJsonSchema(worklog.GetWorklogsSchema),
197
+ },
198
+ {
199
+ name: "jira_add_worklog",
200
+ description: "Add a worklog (time tracking entry) to a JIRA issue",
201
+ inputSchema: zodToJsonSchema(worklog.AddWorklogSchema),
202
+ },
203
+ {
204
+ name: "jira_update_worklog",
205
+ description: "Update an existing worklog on a JIRA issue",
206
+ inputSchema: zodToJsonSchema(worklog.UpdateWorklogSchema),
207
+ },
208
+ {
209
+ name: "jira_delete_worklog",
210
+ description: "Delete a worklog from a JIRA issue",
211
+ inputSchema: zodToJsonSchema(worklog.DeleteWorklogSchema),
212
+ },
213
+ ],
214
+ };
215
+ });
216
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
217
+ const context = asyncLocalStorage.getStore();
218
+ const userAuthToken = context?.userToken;
219
+ return await asyncLocalStorage.run({ token: null, userToken: userAuthToken }, async () => {
220
+ try {
221
+ if (!request.params.arguments) {
222
+ throw new Error("Arguments are required");
223
+ }
224
+ const token = userAuthToken;
225
+ if (!token) {
226
+ return {
227
+ content: [{
228
+ type: "text",
229
+ text: JSON.stringify({
230
+ error: "Authentication required",
231
+ message: "Please provide Authorization: Bearer <token> header",
232
+ required_header: "Authorization"
233
+ }, null, 2)
234
+ }],
235
+ };
236
+ }
237
+ // Automatically discover jiraUrl and cloudId from the API token
238
+ let jiraUrl;
239
+ let cloudId;
240
+ try {
241
+ const siteInfo = await getCachedSiteInfo(token);
242
+ jiraUrl = siteInfo.url;
243
+ cloudId = siteInfo.cloudId;
244
+ }
245
+ catch (error) {
246
+ return {
247
+ content: [{
248
+ type: "text",
249
+ text: JSON.stringify({
250
+ error: "Failed to discover Jira site",
251
+ message: error.message || "Could not determine Jira instance from token",
252
+ hint: "Please verify your OAuth token has access to a Jira instance"
253
+ }, null, 2)
254
+ }],
255
+ isError: true,
256
+ };
257
+ }
258
+ return await authStorage.run({ token, jiraUrl, cloudId }, async () => {
259
+ const toolName = request.params.name;
260
+ const args = request.params.arguments;
261
+ try {
262
+ let result;
263
+ // Route to appropriate handler based on tool name
264
+ switch (toolName) {
265
+ // Issue Management
266
+ case "jira_get_issue":
267
+ result = await issues.getIssue(args);
268
+ break;
269
+ case "jira_search_issues":
270
+ result = await issues.searchIssues(args);
271
+ break;
272
+ case "jira_create_issue":
273
+ result = await issues.createIssue(args);
274
+ break;
275
+ case "jira_update_issue":
276
+ result = await issues.updateIssue(args);
277
+ break;
278
+ case "jira_delete_issue":
279
+ result = await issues.deleteIssue(args);
280
+ break;
281
+ case "jira_assign_issue":
282
+ result = await issues.assignIssue(args);
283
+ break;
284
+ case "jira_link_issues":
285
+ result = await issues.linkIssues(args);
286
+ break;
287
+ // Comments
288
+ case "jira_get_comments":
289
+ result = await comments.getComments(args);
290
+ break;
291
+ case "jira_add_comment":
292
+ result = await comments.addComment(args);
293
+ break;
294
+ case "jira_update_comment":
295
+ result = await comments.updateComment(args);
296
+ break;
297
+ case "jira_delete_comment":
298
+ result = await comments.deleteComment(args);
299
+ break;
300
+ // Projects
301
+ case "jira_list_projects":
302
+ result = await projects.listProjects(args);
303
+ break;
304
+ case "jira_get_project":
305
+ result = await projects.getProject(args);
306
+ break;
307
+ case "jira_get_project_issues":
308
+ result = await projects.getProjectIssues(args);
309
+ break;
310
+ case "jira_get_project_versions":
311
+ result = await projects.getProjectVersions(args);
312
+ break;
313
+ case "jira_get_project_components":
314
+ result = await projects.getProjectComponents(args);
315
+ break;
316
+ case "jira_search_projects":
317
+ result = await projects.searchProjects(args);
318
+ break;
319
+ // Workflow
320
+ case "jira_get_transitions":
321
+ result = await workflow.getTransitions(args);
322
+ break;
323
+ case "jira_transition_issue":
324
+ result = await workflow.transitionIssue(args);
325
+ break;
326
+ case "jira_get_workflows":
327
+ result = await workflow.getWorkflows(args);
328
+ break;
329
+ // Users
330
+ case "jira_get_current_user":
331
+ result = await users.getCurrentUser(args);
332
+ break;
333
+ case "jira_search_users":
334
+ result = await users.searchUsers(args);
335
+ break;
336
+ case "jira_get_watchers":
337
+ result = await users.getWatchers(args);
338
+ break;
339
+ case "jira_add_watcher":
340
+ result = await users.addWatcher(args);
341
+ break;
342
+ case "jira_remove_watcher":
343
+ result = await users.removeWatcher(args);
344
+ break;
345
+ // Metadata
346
+ case "jira_get_issue_types":
347
+ result = await metadata.getIssueTypes(args);
348
+ break;
349
+ case "jira_get_priorities":
350
+ result = await metadata.getPriorities(args);
351
+ break;
352
+ case "jira_get_statuses":
353
+ result = await metadata.getStatuses(args);
354
+ break;
355
+ case "jira_get_fields":
356
+ result = await metadata.getFields(args);
357
+ break;
358
+ case "jira_get_resolutions":
359
+ result = await metadata.getResolutions(args);
360
+ break;
361
+ // Worklog
362
+ case "jira_get_worklogs":
363
+ result = await worklog.getWorklogs(args);
364
+ break;
365
+ case "jira_add_worklog":
366
+ result = await worklog.addWorklog(args);
367
+ break;
368
+ case "jira_update_worklog":
369
+ result = await worklog.updateWorklog(args);
370
+ break;
371
+ case "jira_delete_worklog":
372
+ result = await worklog.deleteWorklog(args);
373
+ break;
374
+ default:
375
+ throw new Error(`Unknown tool: ${toolName}`);
376
+ }
377
+ // Format result for display
378
+ const resultText = typeof result === 'string'
379
+ ? result
380
+ : JSON.stringify(result, null, 2);
381
+ return {
382
+ content: [{
383
+ type: "text",
384
+ text: resultText,
385
+ }],
386
+ };
387
+ }
388
+ catch (error) {
389
+ let errorMessage = `Error in ${toolName}:`;
390
+ if (isJiraError(error)) {
391
+ errorMessage += ` [${error.statusCode || 'Unknown'}] ${error.message}`;
392
+ }
393
+ else {
394
+ errorMessage += ` ${error.message || 'Unknown error'}`;
395
+ }
396
+ // Truncate very long error messages
397
+ errorMessage = truncateText(errorMessage, 1000);
398
+ return {
399
+ content: [{
400
+ type: "text",
401
+ text: JSON.stringify({
402
+ error: true,
403
+ tool: toolName,
404
+ message: errorMessage,
405
+ timestamp: new Date().toISOString()
406
+ }, null, 2)
407
+ }],
408
+ isError: true,
409
+ };
410
+ }
411
+ });
412
+ }
413
+ catch (error) {
414
+ return {
415
+ content: [{
416
+ type: "text",
417
+ text: JSON.stringify({
418
+ error: true,
419
+ message: error.message || 'Unknown error',
420
+ timestamp: new Date().toISOString()
421
+ }, null, 2)
422
+ }],
423
+ isError: true,
424
+ };
425
+ }
426
+ });
427
+ });
428
+ return server;
429
+ }
430
+ // Stateless HTTP server
431
+ async function startStatelessServer() {
432
+ const app = express();
433
+ app.use(express.json());
434
+ console.log('🚀 Starting JIRA MCP Server (Stateless Mode)...');
435
+ app.post('/mcp', async (req, res) => {
436
+ try {
437
+ // Extract auth token from Authorization header
438
+ const authHeader = req.headers.authorization;
439
+ const userAuthToken = authHeader?.startsWith('Bearer ')
440
+ ? authHeader.substring(7)
441
+ : undefined;
442
+ // Create fresh instances for complete isolation
443
+ const server = createStatelessServer();
444
+ const transport = new StreamableHTTPServerTransport({
445
+ sessionIdGenerator: undefined, // Key: stateless mode
446
+ });
447
+ // Clean up on request close
448
+ res.on('close', () => {
449
+ transport.close();
450
+ server.close();
451
+ });
452
+ // Set request context with auth token
453
+ await asyncLocalStorage.run({ token: null, userToken: userAuthToken }, async () => {
454
+ await server.connect(transport);
455
+ await transport.handleRequest(req, res, req.body);
456
+ });
457
+ }
458
+ catch (error) {
459
+ console.error('Error handling MCP request:', error);
460
+ if (!res.headersSent) {
461
+ res.status(500).json({
462
+ jsonrpc: '2.0',
463
+ error: { code: -32603, message: 'Internal server error' },
464
+ id: null
465
+ });
466
+ }
467
+ }
468
+ });
469
+ // Disable GET/DELETE for stateless mode
470
+ app.get('/mcp', (req, res) => {
471
+ res.status(405).json({
472
+ jsonrpc: "2.0",
473
+ error: { code: -32000, message: "Method not allowed in stateless mode" },
474
+ id: null
475
+ });
476
+ });
477
+ app.delete('/mcp', (req, res) => {
478
+ res.status(405).json({
479
+ jsonrpc: "2.0",
480
+ error: { code: -32000, message: "Method not allowed in stateless mode" },
481
+ id: null
482
+ });
483
+ });
484
+ // Health check endpoint
485
+ app.get('/health', (req, res) => {
486
+ res.json({
487
+ status: 'healthy',
488
+ version: VERSION,
489
+ timestamp: new Date().toISOString(),
490
+ mode: 'stateless'
491
+ });
492
+ });
493
+ const port = process.env.PORT || 30000;
494
+ app.listen(port, () => {
495
+ console.log(`✅ Stateless JIRA MCP Server listening on port ${port}`);
496
+ console.log(`📡 Endpoint: http://localhost:${port}/mcp`);
497
+ console.log(`🔓 Session management: DISABLED (stateless)`);
498
+ console.log(`🏥 Health check: http://localhost:${port}/health`);
499
+ });
500
+ }
501
+ startStatelessServer().catch((error) => {
502
+ console.error("Fatal error:", error);
503
+ process.exit(1);
504
+ });
505
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ export declare const GetAccessibleResourcesSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
3
+ export declare const GetAtlassianUserInfoSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
4
+ interface AtlassianAccessibleResource {
5
+ id: string;
6
+ url: string;
7
+ name: string;
8
+ scopes: string[];
9
+ avatarUrl?: string;
10
+ }
11
+ interface AtlassianUserInfo {
12
+ account_id: string;
13
+ email?: string;
14
+ name?: string;
15
+ picture?: string;
16
+ account_status?: string;
17
+ last_updated?: string;
18
+ nickname?: string;
19
+ locale?: string;
20
+ extended_profile?: Record<string, unknown>;
21
+ account_type?: string;
22
+ email_verified?: boolean;
23
+ }
24
+ export declare function getAccessibleResources(token?: string): Promise<AtlassianAccessibleResource[]>;
25
+ export declare function getAtlassianUserInfo(token?: string): Promise<AtlassianUserInfo>;
26
+ export {};
27
+ //# sourceMappingURL=atlassian.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atlassian.d.ts","sourceRoot":"","sources":["../../operations/atlassian.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,4BAA4B,gDAAe,CAAC;AAEzD,eAAO,MAAM,0BAA0B,gDAAe,CAAC;AAEvD,UAAU,2BAA2B;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,iBAAiB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAqBD,wBAAsB,sBAAsB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAKnG;AAED,wBAAsB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAErF"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import { requireAuthToken, getAuthToken } from '../common/context.js';
3
+ import { JiraError } from '../common/errors.js';
4
+ export const GetAccessibleResourcesSchema = z.object({});
5
+ export const GetAtlassianUserInfoSchema = z.object({});
6
+ async function callAtlassianApi(endpoint, tokenOverride) {
7
+ const token = tokenOverride ?? getAuthToken() ?? requireAuthToken();
8
+ const response = await fetch(endpoint, {
9
+ headers: {
10
+ Authorization: `Bearer ${token}`,
11
+ Accept: 'application/json',
12
+ },
13
+ });
14
+ if (!response.ok) {
15
+ const body = await response.text();
16
+ const message = `Atlassian API request failed: ${response.status} ${response.statusText}${body ? ` - ${body}` : ''}`;
17
+ throw new JiraError(message, response.status);
18
+ }
19
+ return response.json();
20
+ }
21
+ export async function getAccessibleResources(token) {
22
+ return callAtlassianApi('https://api.atlassian.com/oauth/token/accessible-resources', token);
23
+ }
24
+ export async function getAtlassianUserInfo(token) {
25
+ return callAtlassianApi('https://api.atlassian.com/me', token);
26
+ }
27
+ //# sourceMappingURL=atlassian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atlassian.js","sourceRoot":"","sources":["../../operations/atlassian.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAwBvD,KAAK,UAAU,gBAAgB,CAAI,QAAgB,EAAE,aAAsB;IACzE,MAAM,KAAK,GAAG,aAAa,IAAI,YAAY,EAAE,IAAI,gBAAgB,EAAE,CAAC;IAEpE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACrC,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,MAAM,EAAE,kBAAkB;SAC3B;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,iCAAiC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACrH,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAc;IACzD,OAAO,gBAAgB,CACrB,4DAA4D,EAC5D,KAAK,CACN,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAc;IACvD,OAAO,gBAAgB,CAAoB,8BAA8B,EAAE,KAAK,CAAC,CAAC;AACpF,CAAC"}