@jagadeesh52423/atlassian-mcp-server 1.0.1 → 1.0.3
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.
- package/README.md +92 -45
- package/dist/clients/base-client.d.ts +26 -0
- package/dist/clients/base-client.d.ts.map +1 -0
- package/dist/clients/base-client.js +58 -0
- package/dist/clients/base-client.js.map +1 -0
- package/dist/clients/bitbucket-client.d.ts +17 -0
- package/dist/clients/bitbucket-client.d.ts.map +1 -0
- package/dist/clients/bitbucket-client.js +36 -0
- package/dist/clients/bitbucket-client.js.map +1 -0
- package/dist/clients/confluence-client.d.ts +8 -0
- package/dist/clients/confluence-client.d.ts.map +1 -0
- package/dist/clients/confluence-client.js +16 -0
- package/dist/clients/confluence-client.js.map +1 -0
- package/dist/clients/index.d.ts +5 -0
- package/dist/clients/index.d.ts.map +1 -0
- package/dist/clients/index.js +5 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/jira-client.d.ts +8 -0
- package/dist/clients/jira-client.d.ts.map +1 -0
- package/dist/clients/jira-client.js +16 -0
- package/dist/clients/jira-client.js.map +1 -0
- package/dist/constants.d.ts +67 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +78 -0
- package/dist/constants.js.map +1 -0
- package/dist/error-handler.d.ts +77 -0
- package/dist/error-handler.d.ts.map +1 -0
- package/dist/error-handler.js +135 -0
- package/dist/error-handler.js.map +1 -0
- package/dist/formatters/adf-formatter.d.ts +25 -0
- package/dist/formatters/adf-formatter.d.ts.map +1 -0
- package/dist/formatters/adf-formatter.js +609 -0
- package/dist/formatters/adf-formatter.js.map +1 -0
- package/dist/formatters/index.d.ts +2 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +2 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/handlers/bitbucket-handlers.d.ts +94 -0
- package/dist/handlers/bitbucket-handlers.d.ts.map +1 -0
- package/dist/handlers/bitbucket-handlers.js +251 -0
- package/dist/handlers/bitbucket-handlers.js.map +1 -0
- package/dist/handlers/confluence-handlers.d.ts +84 -0
- package/dist/handlers/confluence-handlers.d.ts.map +1 -0
- package/dist/handlers/confluence-handlers.js +255 -0
- package/dist/handlers/confluence-handlers.js.map +1 -0
- package/dist/handlers/index.d.ts +4 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +4 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/jira-handlers.d.ts +153 -0
- package/dist/handlers/jira-handlers.d.ts.map +1 -0
- package/dist/handlers/jira-handlers.js +577 -0
- package/dist/handlers/jira-handlers.js.map +1 -0
- package/dist/index.js +147 -2536
- package/dist/index.js.map +1 -1
- package/dist/services/bitbucket.d.ts +11 -1
- package/dist/services/bitbucket.d.ts.map +1 -1
- package/dist/services/bitbucket.js +78 -0
- package/dist/services/bitbucket.js.map +1 -1
- package/dist/services/confluence.d.ts.map +1 -1
- package/dist/services/confluence.js +5 -4
- package/dist/services/confluence.js.map +1 -1
- package/dist/services/jira.d.ts +4 -0
- package/dist/services/jira.d.ts.map +1 -1
- package/dist/services/jira.js +159 -24
- package/dist/services/jira.js.map +1 -1
- package/dist/tools/bitbucket-tools.d.ts +6 -0
- package/dist/tools/bitbucket-tools.d.ts.map +1 -0
- package/dist/tools/bitbucket-tools.js +386 -0
- package/dist/tools/bitbucket-tools.js.map +1 -0
- package/dist/tools/confluence-tools.d.ts +17 -0
- package/dist/tools/confluence-tools.d.ts.map +1 -0
- package/dist/tools/confluence-tools.js +337 -0
- package/dist/tools/confluence-tools.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/jira-tools.d.ts +6 -0
- package/dist/tools/jira-tools.d.ts.map +1 -0
- package/dist/tools/jira-tools.js +656 -0
- package/dist/tools/jira-tools.js.map +1 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,23 +7,29 @@ A comprehensive Model Context Protocol (MCP) server that provides AI assistants
|
|
|
7
7
|
|
|
8
8
|
## Features
|
|
9
9
|
|
|
10
|
-
### Confluence Integration
|
|
10
|
+
### Confluence Integration (14 tools)
|
|
11
11
|
- Search pages by text query
|
|
12
12
|
- Get specific pages by ID
|
|
13
|
-
- Create
|
|
14
|
-
- Update existing pages
|
|
13
|
+
- Create and update pages with content
|
|
15
14
|
- List spaces and pages within spaces
|
|
15
|
+
- **Attachments**: Add, list, and delete attachments
|
|
16
|
+
- **Comments**: Full CRUD operations on page comments
|
|
17
|
+
- **Images**: Embed images in page content
|
|
16
18
|
- Full support for Confluence storage format
|
|
17
19
|
|
|
18
|
-
### Jira Integration
|
|
19
|
-
- Search issues by text query
|
|
20
|
+
### Jira Integration (29 tools)
|
|
21
|
+
- Search issues by text or JQL query
|
|
20
22
|
- Get specific issues by key
|
|
21
|
-
- Create
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
23
|
+
- Create and update issues with customizable fields
|
|
24
|
+
- **Comments**: Full CRUD operations on issue comments
|
|
25
|
+
- **Transitions**: Move issues between statuses with **Smart Field Handling**
|
|
26
|
+
- **Attachments**: Add, list, and delete attachments
|
|
27
|
+
- **Issue Links**: Create and manage links between issues
|
|
28
|
+
- **Worklogs**: Track time spent on issues
|
|
29
|
+
- **Watchers**: Manage issue watchers
|
|
30
|
+
- **Subtasks**: Create and list subtasks
|
|
31
|
+
- **History**: View issue change history
|
|
25
32
|
- List projects and issue types
|
|
26
|
-
- Assign issues to users
|
|
27
33
|
|
|
28
34
|
#### Smart Field Handling
|
|
29
35
|
Advanced transition management with intelligent field suggestions:
|
|
@@ -32,14 +38,13 @@ Advanced transition management with intelligent field suggestions:
|
|
|
32
38
|
- **Auto-Suggestions**: Provides context-aware suggestions with reasoning
|
|
33
39
|
- **Enhanced Error Handling**: Returns detailed field information instead of cryptic errors
|
|
34
40
|
|
|
35
|
-
### Bitbucket Integration
|
|
41
|
+
### Bitbucket Integration (11 tools)
|
|
36
42
|
- List and search repositories
|
|
37
43
|
- Get repository details
|
|
38
44
|
- Create new repositories
|
|
39
45
|
- Manage branches and commits
|
|
40
|
-
-
|
|
46
|
+
- **Pull Requests**: Create, list, and get PR details with diffs
|
|
41
47
|
- Issue tracking within repositories
|
|
42
|
-
- File content operations
|
|
43
48
|
|
|
44
49
|
## Installation
|
|
45
50
|
|
|
@@ -211,38 +216,80 @@ Add the following to your Claude Desktop configuration file:
|
|
|
211
216
|
|
|
212
217
|
## Available Tools
|
|
213
218
|
|
|
214
|
-
### Confluence Tools
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
219
|
+
### Confluence Tools (14 tools)
|
|
220
|
+
|
|
221
|
+
| Tool | Description |
|
|
222
|
+
|------|-------------|
|
|
223
|
+
| `confluence_search_pages` | Search pages by text query |
|
|
224
|
+
| `confluence_get_page` | Get specific page by ID |
|
|
225
|
+
| `confluence_create_page` | Create new page with content |
|
|
226
|
+
| `confluence_update_page` | Update existing page |
|
|
227
|
+
| `confluence_get_spaces` | List all spaces |
|
|
228
|
+
| `confluence_get_pages_by_space` | Get pages from specific space |
|
|
229
|
+
| `confluence_get_attachments` | List attachments on a page |
|
|
230
|
+
| `confluence_add_attachment` | Add attachment to a page |
|
|
231
|
+
| `confluence_delete_attachment` | Delete attachment from a page |
|
|
232
|
+
| `confluence_embed_image` | Embed image in page content |
|
|
233
|
+
| `confluence_get_comments` | Get comments on a page |
|
|
234
|
+
| `confluence_add_comment` | Add comment to a page |
|
|
235
|
+
| `confluence_update_comment` | Update existing comment |
|
|
236
|
+
| `confluence_delete_comment` | Delete comment from a page |
|
|
237
|
+
|
|
238
|
+
### Jira Tools (29 tools)
|
|
239
|
+
|
|
240
|
+
| Tool | Description |
|
|
241
|
+
|------|-------------|
|
|
242
|
+
| `jira_search_issues` | Search issues by text or JQL |
|
|
243
|
+
| `jira_get_issue` | Get specific issue by key |
|
|
244
|
+
| `jira_create_issue` | Create new issue |
|
|
245
|
+
| `jira_update_issue` | Update existing issue |
|
|
246
|
+
| `jira_get_projects` | List all projects |
|
|
247
|
+
| **Comments** | |
|
|
248
|
+
| `jira_add_comment` | Add comment to issue |
|
|
249
|
+
| `jira_get_comments` | Get comments on an issue |
|
|
250
|
+
| `jira_update_comment` | Update existing comment |
|
|
251
|
+
| `jira_delete_comment` | Delete comment from issue |
|
|
252
|
+
| **Transitions** | |
|
|
253
|
+
| `jira_get_issue_transitions` | Get available transitions |
|
|
254
|
+
| `jira_transition_issue` | Change issue status (basic) |
|
|
255
|
+
| `jira_transition_issue_interactive` | Change status with smart field handling |
|
|
256
|
+
| **Attachments** | |
|
|
257
|
+
| `jira_get_attachments` | List attachments on an issue |
|
|
258
|
+
| `jira_add_attachment` | Add attachment to issue |
|
|
259
|
+
| `jira_delete_attachment` | Delete attachment from issue |
|
|
260
|
+
| **Issue Links** | |
|
|
261
|
+
| `jira_get_issue_links` | Get linked issues |
|
|
262
|
+
| `jira_create_issue_link` | Create link between issues |
|
|
263
|
+
| `jira_delete_issue_link` | Delete issue link |
|
|
264
|
+
| `jira_get_link_types` | Get available link types |
|
|
265
|
+
| **Worklogs** | |
|
|
266
|
+
| `jira_get_worklogs` | Get work logs on an issue |
|
|
267
|
+
| `jira_add_worklog` | Add work log entry |
|
|
268
|
+
| `jira_update_worklog` | Update work log entry |
|
|
269
|
+
| `jira_delete_worklog` | Delete work log entry |
|
|
270
|
+
| **Watchers** | |
|
|
271
|
+
| `jira_get_watchers` | Get issue watchers |
|
|
272
|
+
| `jira_add_watcher` | Add watcher to issue |
|
|
273
|
+
| `jira_remove_watcher` | Remove watcher from issue |
|
|
274
|
+
| **Subtasks & History** | |
|
|
275
|
+
| `jira_get_subtasks` | Get subtasks of an issue |
|
|
276
|
+
| `jira_create_subtask` | Create subtask for an issue |
|
|
277
|
+
| `jira_get_issue_history` | Get issue change history |
|
|
278
|
+
|
|
279
|
+
### Bitbucket Tools (11 tools)
|
|
280
|
+
|
|
281
|
+
| Tool | Description |
|
|
282
|
+
|------|-------------|
|
|
283
|
+
| `bitbucket_get_repositories` | List repositories in workspace |
|
|
284
|
+
| `bitbucket_get_repository` | Get specific repository details |
|
|
285
|
+
| `bitbucket_create_repository` | Create new repository |
|
|
286
|
+
| `bitbucket_get_pull_requests` | List pull requests |
|
|
287
|
+
| `bitbucket_get_pull_request` | Get specific PR with diff |
|
|
288
|
+
| `bitbucket_create_pull_request` | Create new pull request |
|
|
289
|
+
| `bitbucket_get_branches` | List branches |
|
|
290
|
+
| `bitbucket_get_commits` | List commits |
|
|
291
|
+
| `bitbucket_get_issues` | List repository issues |
|
|
292
|
+
| `bitbucket_create_issue` | Create new issue |
|
|
246
293
|
|
|
247
294
|
## Example Usage with AI Assistant
|
|
248
295
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AxiosInstance } from 'axios';
|
|
2
|
+
export interface ClientConfig {
|
|
3
|
+
baseUrl: string;
|
|
4
|
+
auth: string;
|
|
5
|
+
serviceName: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Base API client that provides common HTTP methods for all Atlassian services.
|
|
9
|
+
* Eliminates code duplication across confluence-client, jira-client, and atlassian-client.
|
|
10
|
+
*/
|
|
11
|
+
export declare abstract class BaseApiClient {
|
|
12
|
+
protected client: AxiosInstance;
|
|
13
|
+
protected baseUrl: string;
|
|
14
|
+
protected serviceName: string;
|
|
15
|
+
constructor(config: ClientConfig);
|
|
16
|
+
get<T>(endpoint: string, params?: any): Promise<T>;
|
|
17
|
+
post<T>(endpoint: string, data: any): Promise<T>;
|
|
18
|
+
put<T>(endpoint: string, data: any): Promise<T>;
|
|
19
|
+
delete<T>(endpoint: string): Promise<T>;
|
|
20
|
+
postFormData<T>(endpoint: string, formData: any): Promise<T>;
|
|
21
|
+
/**
|
|
22
|
+
* For Bitbucket which needs access to the raw axios instance for custom requests
|
|
23
|
+
*/
|
|
24
|
+
protected getAxiosInstance(): AxiosInstance;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=base-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-client.d.ts","sourceRoot":"","sources":["../../src/clients/base-client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAiB,MAAM,OAAO,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,8BAAsB,aAAa;IACjC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;IAChC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;gBAElB,MAAM,EAAE,YAAY;IAsB1B,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAKlD,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAKhD,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAK/C,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAKvC,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAUlE;;OAEG;IACH,SAAS,CAAC,gBAAgB,IAAI,aAAa;CAG5C"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
/**
|
|
3
|
+
* Base API client that provides common HTTP methods for all Atlassian services.
|
|
4
|
+
* Eliminates code duplication across confluence-client, jira-client, and atlassian-client.
|
|
5
|
+
*/
|
|
6
|
+
export class BaseApiClient {
|
|
7
|
+
client;
|
|
8
|
+
baseUrl;
|
|
9
|
+
serviceName;
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.baseUrl = config.baseUrl;
|
|
12
|
+
this.serviceName = config.serviceName;
|
|
13
|
+
this.client = axios.create({
|
|
14
|
+
baseURL: this.baseUrl,
|
|
15
|
+
headers: {
|
|
16
|
+
'Authorization': `Basic ${config.auth}`,
|
|
17
|
+
'Accept': 'application/json',
|
|
18
|
+
'Content-Type': 'application/json',
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
this.client.interceptors.response.use((response) => response, (error) => {
|
|
22
|
+
console.error(`${this.serviceName} API Error:`, error.response?.data || error.message);
|
|
23
|
+
throw error;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
async get(endpoint, params) {
|
|
27
|
+
const response = await this.client.get(endpoint, { params });
|
|
28
|
+
return response.data;
|
|
29
|
+
}
|
|
30
|
+
async post(endpoint, data) {
|
|
31
|
+
const response = await this.client.post(endpoint, data);
|
|
32
|
+
return response.data;
|
|
33
|
+
}
|
|
34
|
+
async put(endpoint, data) {
|
|
35
|
+
const response = await this.client.put(endpoint, data);
|
|
36
|
+
return response.data;
|
|
37
|
+
}
|
|
38
|
+
async delete(endpoint) {
|
|
39
|
+
const response = await this.client.delete(endpoint);
|
|
40
|
+
return response.data;
|
|
41
|
+
}
|
|
42
|
+
async postFormData(endpoint, formData) {
|
|
43
|
+
const response = await this.client.post(endpoint, formData, {
|
|
44
|
+
headers: {
|
|
45
|
+
...formData.getHeaders(),
|
|
46
|
+
'X-Atlassian-Token': 'no-check',
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
return response.data;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* For Bitbucket which needs access to the raw axios instance for custom requests
|
|
53
|
+
*/
|
|
54
|
+
getAxiosInstance() {
|
|
55
|
+
return this.client;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=base-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-client.js","sourceRoot":"","sources":["../../src/clients/base-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAQ5D;;;GAGG;AACH,MAAM,OAAgB,aAAa;IACvB,MAAM,CAAgB;IACtB,OAAO,CAAS;IAChB,WAAW,CAAS;IAE9B,YAAY,MAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAEtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE;gBACP,eAAe,EAAE,SAAS,MAAM,CAAC,IAAI,EAAE;gBACvC,QAAQ,EAAE,kBAAkB;gBAC5B,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACnC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACtB,CAAC,KAAK,EAAE,EAAE;YACR,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,aAAa,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YACvF,MAAM,KAAK,CAAC;QACd,CAAC,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,QAAgB,EAAE,MAAY;QACzC,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/E,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,QAAgB,EAAE,IAAS;QACvC,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1E,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,QAAgB,EAAE,IAAS;QACtC,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACzE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAI,QAAgB;QAC9B,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,YAAY,CAAI,QAAgB,EAAE,QAAa;QACnD,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE;YAC5E,OAAO,EAAE;gBACP,GAAG,QAAQ,CAAC,UAAU,EAAE;gBACxB,mBAAmB,EAAE,UAAU;aAChC;SACF,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACO,gBAAgB;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseApiClient } from './base-client.js';
|
|
2
|
+
/**
|
|
3
|
+
* Bitbucket API client extending the base client
|
|
4
|
+
*/
|
|
5
|
+
export declare class BitbucketClient extends BaseApiClient {
|
|
6
|
+
readonly workspace: string;
|
|
7
|
+
constructor();
|
|
8
|
+
/**
|
|
9
|
+
* Get raw text content (for diffs and file contents)
|
|
10
|
+
*/
|
|
11
|
+
getRawText(endpoint: string): Promise<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Post form data for file uploads
|
|
14
|
+
*/
|
|
15
|
+
postMultipartFormData(endpoint: string, formData: FormData): Promise<any>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=bitbucket-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitbucket-client.d.ts","sourceRoot":"","sources":["../../src/clients/bitbucket-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKjD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD,SAAgB,SAAS,EAAE,MAAM,CAAC;;IAWlC;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKnD;;OAEG;IACG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;CAQhF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BaseApiClient } from './base-client.js';
|
|
2
|
+
import { bitbucketConfig, getBitbucketAuth } from '../config.js';
|
|
3
|
+
import { SERVICE_NAMES, API_ENDPOINTS } from '../constants.js';
|
|
4
|
+
/**
|
|
5
|
+
* Bitbucket API client extending the base client
|
|
6
|
+
*/
|
|
7
|
+
export class BitbucketClient extends BaseApiClient {
|
|
8
|
+
workspace;
|
|
9
|
+
constructor() {
|
|
10
|
+
super({
|
|
11
|
+
baseUrl: API_ENDPOINTS.BITBUCKET_BASE_URL,
|
|
12
|
+
auth: getBitbucketAuth(),
|
|
13
|
+
serviceName: SERVICE_NAMES.BITBUCKET,
|
|
14
|
+
});
|
|
15
|
+
this.workspace = bitbucketConfig.workspace;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get raw text content (for diffs and file contents)
|
|
19
|
+
*/
|
|
20
|
+
async getRawText(endpoint) {
|
|
21
|
+
const response = await this.getAxiosInstance().get(endpoint, { responseType: 'text' });
|
|
22
|
+
return response.data;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Post form data for file uploads
|
|
26
|
+
*/
|
|
27
|
+
async postMultipartFormData(endpoint, formData) {
|
|
28
|
+
const response = await this.getAxiosInstance().post(endpoint, formData, {
|
|
29
|
+
headers: {
|
|
30
|
+
'Content-Type': 'multipart/form-data',
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
return response.data;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=bitbucket-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitbucket-client.js","sourceRoot":"","sources":["../../src/clients/bitbucket-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG/D;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAChC,SAAS,CAAS;IAElC;QACE,KAAK,CAAC;YACJ,OAAO,EAAE,aAAa,CAAC,kBAAkB;YACzC,IAAI,EAAE,gBAAgB,EAAE;YACxB,WAAW,EAAE,aAAa,CAAC,SAAS;SACrC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;QACvF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,QAAgB,EAAE,QAAkB;QAC9D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE;YACtE,OAAO,EAAE;gBACP,cAAc,EAAE,qBAAqB;aACtC;SACF,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confluence-client.d.ts","sourceRoot":"","sources":["../../src/clients/confluence-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,aAAa;;CAQlD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseApiClient } from './base-client.js';
|
|
2
|
+
import { confluenceConfig, getConfluenceAuth } from '../config.js';
|
|
3
|
+
import { SERVICE_NAMES } from '../constants.js';
|
|
4
|
+
/**
|
|
5
|
+
* Confluence API client extending the base client
|
|
6
|
+
*/
|
|
7
|
+
export class ConfluenceClient extends BaseApiClient {
|
|
8
|
+
constructor() {
|
|
9
|
+
super({
|
|
10
|
+
baseUrl: `https://${confluenceConfig.domain}`,
|
|
11
|
+
auth: getConfluenceAuth(),
|
|
12
|
+
serviceName: SERVICE_NAMES.CONFLUENCE,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=confluence-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confluence-client.js","sourceRoot":"","sources":["../../src/clients/confluence-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IACjD;QACE,KAAK,CAAC;YACJ,OAAO,EAAE,WAAW,gBAAgB,CAAC,MAAM,EAAE;YAC7C,IAAI,EAAE,iBAAiB,EAAE;YACzB,WAAW,EAAE,aAAa,CAAC,UAAU;SACtC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira-client.d.ts","sourceRoot":"","sources":["../../src/clients/jira-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD;;GAEG;AACH,qBAAa,UAAW,SAAQ,aAAa;;CAQ5C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseApiClient } from './base-client.js';
|
|
2
|
+
import { jiraConfig, getJiraAuth } from '../config.js';
|
|
3
|
+
import { SERVICE_NAMES } from '../constants.js';
|
|
4
|
+
/**
|
|
5
|
+
* Jira API client extending the base client
|
|
6
|
+
*/
|
|
7
|
+
export class JiraClient extends BaseApiClient {
|
|
8
|
+
constructor() {
|
|
9
|
+
super({
|
|
10
|
+
baseUrl: `https://${jiraConfig.domain}`,
|
|
11
|
+
auth: getJiraAuth(),
|
|
12
|
+
serviceName: SERVICE_NAMES.JIRA,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=jira-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira-client.js","sourceRoot":"","sources":["../../src/clients/jira-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,aAAa;IAC3C;QACE,KAAK,CAAC;YACJ,OAAO,EAAE,WAAW,UAAU,CAAC,MAAM,EAAE;YACvC,IAAI,EAAE,WAAW,EAAE;YACnB,WAAW,EAAE,aAAa,CAAC,IAAI;SAChC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application-wide constants
|
|
3
|
+
* Centralizes all magic numbers and hardcoded values for easy maintenance
|
|
4
|
+
*/
|
|
5
|
+
export declare const PAGINATION: {
|
|
6
|
+
readonly CONFLUENCE_DEFAULT_LIMIT: 25;
|
|
7
|
+
readonly JIRA_DEFAULT_LIMIT: 50;
|
|
8
|
+
readonly BITBUCKET_DEFAULT_LIMIT: 10;
|
|
9
|
+
readonly USER_SEARCH_LIMIT: 10;
|
|
10
|
+
};
|
|
11
|
+
export declare const DEFAULTS: {
|
|
12
|
+
readonly BRANCH_NAME: "main";
|
|
13
|
+
readonly JIRA_ISSUE_TYPE: "Task";
|
|
14
|
+
readonly JIRA_DATE_FILTER: "-90d";
|
|
15
|
+
readonly BITBUCKET_ISSUE_KIND: "bug";
|
|
16
|
+
readonly BITBUCKET_ISSUE_PRIORITY: "major";
|
|
17
|
+
readonly BITBUCKET_PR_STATE: "OPEN";
|
|
18
|
+
readonly BITBUCKET_ISSUE_STATE: "open";
|
|
19
|
+
};
|
|
20
|
+
export declare const API_ENDPOINTS: {
|
|
21
|
+
readonly CONFLUENCE_CONTENT: "/wiki/rest/api/content";
|
|
22
|
+
readonly CONFLUENCE_CONTENT_SEARCH: "/wiki/rest/api/content/search";
|
|
23
|
+
readonly CONFLUENCE_SPACE: "/wiki/rest/api/space";
|
|
24
|
+
readonly JIRA_SEARCH: "/rest/api/3/search/jql";
|
|
25
|
+
readonly JIRA_ISSUE: "/rest/api/3/issue";
|
|
26
|
+
readonly JIRA_PROJECT: "/rest/api/3/project";
|
|
27
|
+
readonly JIRA_USER_SEARCH: "/rest/api/3/user/search";
|
|
28
|
+
readonly JIRA_ISSUE_LINK: "/rest/api/3/issueLink";
|
|
29
|
+
readonly JIRA_ISSUE_LINK_TYPE: "/rest/api/3/issueLinkType";
|
|
30
|
+
readonly JIRA_ATTACHMENT: "/rest/api/3/attachment";
|
|
31
|
+
readonly BITBUCKET_BASE_URL: "https://api.bitbucket.org/2.0";
|
|
32
|
+
};
|
|
33
|
+
export declare const CONFLUENCE_EXPAND: {
|
|
34
|
+
readonly PAGE_DEFAULT: readonly ["body.storage", "version", "space"];
|
|
35
|
+
readonly COMMENT_DEFAULT: readonly ["body.storage", "version", "history"];
|
|
36
|
+
};
|
|
37
|
+
export declare const JIRA_FIELDS: {
|
|
38
|
+
readonly SEARCH_FIELDS: "summary,description,status,assignee,created,updated";
|
|
39
|
+
readonly ISSUE_FIELDS: readonly ["summary", "description", "status", "assignee", "created", "updated"];
|
|
40
|
+
};
|
|
41
|
+
export declare const SERVICE_NAMES: {
|
|
42
|
+
readonly CONFLUENCE: "Confluence";
|
|
43
|
+
readonly JIRA: "Jira";
|
|
44
|
+
readonly BITBUCKET: "Bitbucket";
|
|
45
|
+
readonly ATLASSIAN: "Atlassian";
|
|
46
|
+
};
|
|
47
|
+
export declare const ERROR_MESSAGES: {
|
|
48
|
+
readonly MISSING_FILE_INPUT: "Either filePath or fileContent must be provided";
|
|
49
|
+
readonly FILE_NOT_FOUND: (path: string) => string;
|
|
50
|
+
readonly UNKNOWN_TOOL: (name: string) => string;
|
|
51
|
+
};
|
|
52
|
+
export declare const ICONS: {
|
|
53
|
+
readonly SUCCESS: "✅";
|
|
54
|
+
readonly ERROR: "❌";
|
|
55
|
+
readonly SUGGESTION: "💡";
|
|
56
|
+
readonly TICKET: "🎫";
|
|
57
|
+
readonly SUMMARY: "📝";
|
|
58
|
+
readonly STATUS: "📊";
|
|
59
|
+
readonly DATE: "📅";
|
|
60
|
+
readonly DESCRIPTION: "📄";
|
|
61
|
+
readonly LINK: "🔗";
|
|
62
|
+
readonly PRIORITY: "🔥";
|
|
63
|
+
readonly LABELS: "🏷️";
|
|
64
|
+
readonly COMPONENTS: "🧩";
|
|
65
|
+
readonly ASSIGNEE: "👤";
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAGX,eAAO,MAAM,QAAQ;;;;;;;;CAQX,CAAC;AAGX,eAAO,MAAM,aAAa;;;;;;;;;;;;CAiBhB,CAAC;AAGX,eAAO,MAAM,iBAAiB;;;CAGpB,CAAC;AAGX,eAAO,MAAM,WAAW;;;CAGd,CAAC;AAGX,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC;AAGX,eAAO,MAAM,cAAc;;oCAEF,MAAM;kCACR,MAAM;CACnB,CAAC;AAGX,eAAO,MAAM,KAAK;;;;;;;;;;;;;;CAcR,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application-wide constants
|
|
3
|
+
* Centralizes all magic numbers and hardcoded values for easy maintenance
|
|
4
|
+
*/
|
|
5
|
+
// Pagination defaults
|
|
6
|
+
export const PAGINATION = {
|
|
7
|
+
CONFLUENCE_DEFAULT_LIMIT: 25,
|
|
8
|
+
JIRA_DEFAULT_LIMIT: 50,
|
|
9
|
+
BITBUCKET_DEFAULT_LIMIT: 10,
|
|
10
|
+
USER_SEARCH_LIMIT: 10,
|
|
11
|
+
};
|
|
12
|
+
// Default values
|
|
13
|
+
export const DEFAULTS = {
|
|
14
|
+
BRANCH_NAME: 'main',
|
|
15
|
+
JIRA_ISSUE_TYPE: 'Task',
|
|
16
|
+
JIRA_DATE_FILTER: '-90d',
|
|
17
|
+
BITBUCKET_ISSUE_KIND: 'bug',
|
|
18
|
+
BITBUCKET_ISSUE_PRIORITY: 'major',
|
|
19
|
+
BITBUCKET_PR_STATE: 'OPEN',
|
|
20
|
+
BITBUCKET_ISSUE_STATE: 'open',
|
|
21
|
+
};
|
|
22
|
+
// API endpoints
|
|
23
|
+
export const API_ENDPOINTS = {
|
|
24
|
+
// Confluence
|
|
25
|
+
CONFLUENCE_CONTENT: '/wiki/rest/api/content',
|
|
26
|
+
CONFLUENCE_CONTENT_SEARCH: '/wiki/rest/api/content/search',
|
|
27
|
+
CONFLUENCE_SPACE: '/wiki/rest/api/space',
|
|
28
|
+
// Jira
|
|
29
|
+
JIRA_SEARCH: '/rest/api/3/search/jql',
|
|
30
|
+
JIRA_ISSUE: '/rest/api/3/issue',
|
|
31
|
+
JIRA_PROJECT: '/rest/api/3/project',
|
|
32
|
+
JIRA_USER_SEARCH: '/rest/api/3/user/search',
|
|
33
|
+
JIRA_ISSUE_LINK: '/rest/api/3/issueLink',
|
|
34
|
+
JIRA_ISSUE_LINK_TYPE: '/rest/api/3/issueLinkType',
|
|
35
|
+
JIRA_ATTACHMENT: '/rest/api/3/attachment',
|
|
36
|
+
// Bitbucket
|
|
37
|
+
BITBUCKET_BASE_URL: 'https://api.bitbucket.org/2.0',
|
|
38
|
+
};
|
|
39
|
+
// Confluence expand options
|
|
40
|
+
export const CONFLUENCE_EXPAND = {
|
|
41
|
+
PAGE_DEFAULT: ['body.storage', 'version', 'space'],
|
|
42
|
+
COMMENT_DEFAULT: ['body.storage', 'version', 'history'],
|
|
43
|
+
};
|
|
44
|
+
// Jira field defaults
|
|
45
|
+
export const JIRA_FIELDS = {
|
|
46
|
+
SEARCH_FIELDS: 'summary,description,status,assignee,created,updated',
|
|
47
|
+
ISSUE_FIELDS: ['summary', 'description', 'status', 'assignee', 'created', 'updated'],
|
|
48
|
+
};
|
|
49
|
+
// Service names for logging
|
|
50
|
+
export const SERVICE_NAMES = {
|
|
51
|
+
CONFLUENCE: 'Confluence',
|
|
52
|
+
JIRA: 'Jira',
|
|
53
|
+
BITBUCKET: 'Bitbucket',
|
|
54
|
+
ATLASSIAN: 'Atlassian',
|
|
55
|
+
};
|
|
56
|
+
// Error messages
|
|
57
|
+
export const ERROR_MESSAGES = {
|
|
58
|
+
MISSING_FILE_INPUT: 'Either filePath or fileContent must be provided',
|
|
59
|
+
FILE_NOT_FOUND: (path) => `File not found: ${path}`,
|
|
60
|
+
UNKNOWN_TOOL: (name) => `Unknown tool: ${name}`,
|
|
61
|
+
};
|
|
62
|
+
// Success icons for formatted responses
|
|
63
|
+
export const ICONS = {
|
|
64
|
+
SUCCESS: '✅',
|
|
65
|
+
ERROR: '❌',
|
|
66
|
+
SUGGESTION: '💡',
|
|
67
|
+
TICKET: '🎫',
|
|
68
|
+
SUMMARY: '📝',
|
|
69
|
+
STATUS: '📊',
|
|
70
|
+
DATE: '📅',
|
|
71
|
+
DESCRIPTION: '📄',
|
|
72
|
+
LINK: '🔗',
|
|
73
|
+
PRIORITY: '🔥',
|
|
74
|
+
LABELS: '🏷️',
|
|
75
|
+
COMPONENTS: '🧩',
|
|
76
|
+
ASSIGNEE: '👤',
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sBAAsB;AACtB,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,wBAAwB,EAAE,EAAE;IAC5B,kBAAkB,EAAE,EAAE;IACtB,uBAAuB,EAAE,EAAE;IAC3B,iBAAiB,EAAE,EAAE;CACb,CAAC;AAEX,iBAAiB;AACjB,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,WAAW,EAAE,MAAM;IACnB,eAAe,EAAE,MAAM;IACvB,gBAAgB,EAAE,MAAM;IACxB,oBAAoB,EAAE,KAAK;IAC3B,wBAAwB,EAAE,OAAO;IACjC,kBAAkB,EAAE,MAAM;IAC1B,qBAAqB,EAAE,MAAM;CACrB,CAAC;AAEX,gBAAgB;AAChB,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,aAAa;IACb,kBAAkB,EAAE,wBAAwB;IAC5C,yBAAyB,EAAE,+BAA+B;IAC1D,gBAAgB,EAAE,sBAAsB;IAExC,OAAO;IACP,WAAW,EAAE,wBAAwB;IACrC,UAAU,EAAE,mBAAmB;IAC/B,YAAY,EAAE,qBAAqB;IACnC,gBAAgB,EAAE,yBAAyB;IAC3C,eAAe,EAAE,uBAAuB;IACxC,oBAAoB,EAAE,2BAA2B;IACjD,eAAe,EAAE,wBAAwB;IAEzC,YAAY;IACZ,kBAAkB,EAAE,+BAA+B;CAC3C,CAAC;AAEX,4BAA4B;AAC5B,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,YAAY,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC;IAClD,eAAe,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC;CAC/C,CAAC;AAEX,sBAAsB;AACtB,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,aAAa,EAAE,qDAAqD;IACpE,YAAY,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC;CAC5E,CAAC;AAEX,4BAA4B;AAC5B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,UAAU,EAAE,YAAY;IACxB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;CACd,CAAC;AAEX,iBAAiB;AACjB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,kBAAkB,EAAE,iDAAiD;IACrE,cAAc,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,mBAAmB,IAAI,EAAE;IAC3D,YAAY,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,iBAAiB,IAAI,EAAE;CAC/C,CAAC;AAEX,wCAAwC;AACxC,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,IAAI;IACjB,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;CACN,CAAC"}
|