@atlassian-dc-mcp/confluence 0.12.2 → 0.13.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.
- package/CHANGELOG.md +12 -0
- package/README.md +41 -2
- package/build/__tests__/config.test.d.ts +2 -0
- package/build/__tests__/config.test.d.ts.map +1 -0
- package/build/__tests__/config.test.js +49 -0
- package/build/__tests__/config.test.js.map +1 -0
- package/build/__tests__/confluence-response-mapper.test.d.ts +2 -0
- package/build/__tests__/confluence-response-mapper.test.d.ts.map +1 -0
- package/build/__tests__/confluence-response-mapper.test.js +24 -0
- package/build/__tests__/confluence-response-mapper.test.js.map +1 -0
- package/build/__tests__/confluence-service.test.js +125 -5
- package/build/__tests__/confluence-service.test.js.map +1 -1
- package/build/config.d.ts +4 -0
- package/build/config.d.ts.map +1 -0
- package/build/config.js +11 -0
- package/build/config.js.map +1 -0
- package/build/confluence-response-mapper.d.ts +13 -0
- package/build/confluence-response-mapper.d.ts.map +1 -0
- package/build/confluence-response-mapper.js +87 -0
- package/build/confluence-response-mapper.js.map +1 -0
- package/build/confluence-service.d.ts +18 -4
- package/build/confluence-service.d.ts.map +1 -1
- package/build/confluence-service.js +42 -22
- package/build/confluence-service.js.map +1 -1
- package/build/index.js +27 -14
- package/build/index.js.map +1 -1
- package/package.json +3 -3
- package/server.json +12 -5
- package/src/__tests__/config.test.ts +64 -0
- package/src/__tests__/confluence-response-mapper.test.ts +26 -0
- package/src/__tests__/confluence-service.test.ts +161 -5
- package/src/config.ts +13 -0
- package/src/confluence-response-mapper.ts +104 -0
- package/src/confluence-service.ts +69 -26
- package/src/index.ts +31 -16
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.13.0](https://github.com/b1ff/atlassian-dc-mcp/compare/v0.12.2...v0.13.0) (2026-03-21)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* add ability to specify external config file to MCP, to provide configuration to MCP without specifying credentials in the file ([c97d380](https://github.com/b1ff/atlassian-dc-mcp/commit/c97d38004ebc7e233ea276a36c2e233536d2d0ca))
|
|
12
|
+
* **confluence:** add token-optimized content shaping ([0a23201](https://github.com/b1ff/atlassian-dc-mcp/commit/0a232014c8de1d8f1c0d10d3e1d9377949ca90ad))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
6
18
|
## [0.12.2](https://github.com/b1ff/atlassian-dc-mcp/compare/v0.12.1...v0.12.2) (2026-03-21)
|
|
7
19
|
|
|
8
20
|
**Note:** Version bump only for package @atlassian-dc-mcp/confluence
|
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ This package provides a Machine Comprehension Protocol (MCP) server for interact
|
|
|
16
16
|
npm install
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
2. Create a `.env` file in the packages/confluence directory
|
|
19
|
+
2. Create a `.env` file in the packages/confluence directory, or put the same values in a shared dotenv file and set `ATLASSIAN_DC_MCP_CONFIG_FILE` to its absolute path:
|
|
20
20
|
```
|
|
21
21
|
# Either CONFLUENCE_HOST or CONFLUENCE_API_BASE_PATH must be set
|
|
22
22
|
CONFLUENCE_HOST=your-confluence-instance.atlassian.net
|
|
@@ -28,8 +28,29 @@ This package provides a Machine Comprehension Protocol (MCP) server for interact
|
|
|
28
28
|
|
|
29
29
|
# 2. Or continue using CONFLUENCE_HOST with the default API path (/rest):
|
|
30
30
|
# CONFLUENCE_HOST=your-confluence-instance.atlassian.net
|
|
31
|
+
|
|
32
|
+
# Optional: default page size for paginated search tools (fallback: 25)
|
|
33
|
+
CONFLUENCE_DEFAULT_PAGE_SIZE=25
|
|
31
34
|
```
|
|
32
35
|
|
|
36
|
+
Shared file example:
|
|
37
|
+
```
|
|
38
|
+
CONFLUENCE_HOST=your-confluence-instance.atlassian.net
|
|
39
|
+
CONFLUENCE_API_TOKEN=your-personal-access-token
|
|
40
|
+
CONFLUENCE_DEFAULT_PAGE_SIZE=25
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Start the server with:
|
|
44
|
+
```
|
|
45
|
+
ATLASSIAN_DC_MCP_CONFIG_FILE=/absolute/path/to/atlassian-dc-mcp.env npm run dev
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Windows example:
|
|
49
|
+
```
|
|
50
|
+
set ATLASSIAN_DC_MCP_CONFIG_FILE=C:\Users\your-user\AppData\Roaming\atlassian-dc-mcp.env
|
|
51
|
+
npm run dev
|
|
52
|
+
```
|
|
53
|
+
|
|
33
54
|
Note: You have two options for configuring the API URL:
|
|
34
55
|
|
|
35
56
|
1. Set `CONFLUENCE_API_BASE_PATH` to the full API URL (e.g., "https://host.com/rest/api" or "https://host.com/wiki/rest/api").
|
|
@@ -39,6 +60,8 @@ This package provides a Machine Comprehension Protocol (MCP) server for interact
|
|
|
39
60
|
|
|
40
61
|
3. Confluence uses `/rest` as a path part always, so it will be added automatically, no need to add it manually.
|
|
41
62
|
|
|
63
|
+
Direct environment variables override values loaded from `ATLASSIAN_DC_MCP_CONFIG_FILE`.
|
|
64
|
+
|
|
42
65
|
To create a personal access token:
|
|
43
66
|
- In Confluence, select your profile picture at the top right
|
|
44
67
|
- Select **Settings** > **Personal Access Tokens**
|
|
@@ -83,6 +106,8 @@ Get Confluence Data Center content by ID.
|
|
|
83
106
|
Parameters:
|
|
84
107
|
- `contentId` (string, required): The ID of the content to retrieve
|
|
85
108
|
- `expand` (string, optional): Comma-separated list of properties to expand (e.g., "body.storage,version")
|
|
109
|
+
- `bodyMode` (`storage` | `text` | `none`, optional): Response shape for the content body. Defaults to `storage` for backward compatibility.
|
|
110
|
+
- `maxBodyChars` (number, optional): Maximum number of characters to keep when `bodyMode=text`
|
|
86
111
|
|
|
87
112
|
#### 2. confluence_searchContent
|
|
88
113
|
|
|
@@ -90,9 +115,10 @@ Search for content in Confluence Data Center using CQL.
|
|
|
90
115
|
|
|
91
116
|
Parameters:
|
|
92
117
|
- `cql` (string, required): Confluence Query Language search string
|
|
93
|
-
- `limit` (number, optional): Maximum number of results to return
|
|
118
|
+
- `limit` (number, optional): Maximum number of results to return. Defaults to `CONFLUENCE_DEFAULT_PAGE_SIZE` or `25`.
|
|
94
119
|
- `start` (number, optional): Start index for pagination
|
|
95
120
|
- `expand` (string, optional): Comma-separated list of properties to expand
|
|
121
|
+
- `excerpt` (`none` | `highlight`, optional): Excerpt mode for search results. Defaults to `none`.
|
|
96
122
|
|
|
97
123
|
#### 3. confluence_createContent
|
|
98
124
|
|
|
@@ -104,6 +130,7 @@ Parameters:
|
|
|
104
130
|
- `type` (string, default: "page"): Content type (page, blogpost, etc)
|
|
105
131
|
- `content` (string, required): Content body in Confluence Data Center's storage format (XML-based storage format)
|
|
106
132
|
- `parentId` (string, optional): ID of the parent page (if creating a child page)
|
|
133
|
+
- `output` (`ack` | `full`, optional): Return a compact acknowledgement or the full API response. Defaults to `ack`.
|
|
107
134
|
|
|
108
135
|
#### 4. confluence_updateContent
|
|
109
136
|
|
|
@@ -115,3 +142,15 @@ Parameters:
|
|
|
115
142
|
- `content` (string, optional): New content body in Confluence Data Center's storage format (XML-based)
|
|
116
143
|
- `version` (number, required): New version number (must be incremented from current version)
|
|
117
144
|
- `versionComment` (string, optional): Comment for this version
|
|
145
|
+
- `output` (`ack` | `full`, optional): Return a compact acknowledgement or the full API response. Defaults to `ack`.
|
|
146
|
+
|
|
147
|
+
#### 5. confluence_searchSpace
|
|
148
|
+
|
|
149
|
+
Search for Confluence spaces by name text.
|
|
150
|
+
|
|
151
|
+
Parameters:
|
|
152
|
+
- `searchText` (string, required): Text to search for in space names or descriptions
|
|
153
|
+
- `limit` (number, optional): Maximum number of results to return. Defaults to `CONFLUENCE_DEFAULT_PAGE_SIZE` or `25`.
|
|
154
|
+
- `start` (number, optional): Start index for pagination
|
|
155
|
+
- `expand` (string, optional): Comma-separated list of properties to expand
|
|
156
|
+
- `excerpt` (`none` | `highlight`, optional): Excerpt mode for search results. Defaults to `none`.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
describe('Confluence config', () => {
|
|
5
|
+
const originalEnv = process.env;
|
|
6
|
+
const originalCwd = process.cwd();
|
|
7
|
+
let tempDir;
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
jest.resetModules();
|
|
10
|
+
process.env = { ...originalEnv };
|
|
11
|
+
delete process.env.ATLASSIAN_DC_MCP_CONFIG_FILE;
|
|
12
|
+
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'confluence-config-'));
|
|
13
|
+
process.chdir(tempDir);
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
17
|
+
process.chdir(originalCwd);
|
|
18
|
+
});
|
|
19
|
+
afterAll(() => {
|
|
20
|
+
process.env = originalEnv;
|
|
21
|
+
});
|
|
22
|
+
it('uses the configured page size when the env var is a positive integer', async () => {
|
|
23
|
+
process.env.CONFLUENCE_DEFAULT_PAGE_SIZE = '40';
|
|
24
|
+
const { getDefaultPageSize } = await import('../config.js');
|
|
25
|
+
expect(getDefaultPageSize()).toBe(40);
|
|
26
|
+
});
|
|
27
|
+
it('falls back to 25 when the env var is invalid', async () => {
|
|
28
|
+
process.env.CONFLUENCE_DEFAULT_PAGE_SIZE = '0';
|
|
29
|
+
const { getDefaultPageSize } = await import('../config.js');
|
|
30
|
+
expect(getDefaultPageSize()).toBe(25);
|
|
31
|
+
});
|
|
32
|
+
it('reads the page size from the shared config file', async () => {
|
|
33
|
+
const sharedConfigPath = path.join(tempDir, 'shared.env');
|
|
34
|
+
fs.writeFileSync(sharedConfigPath, 'CONFLUENCE_HOST=file-host\nCONFLUENCE_API_TOKEN=file-token\nCONFLUENCE_DEFAULT_PAGE_SIZE=35\n');
|
|
35
|
+
process.env.ATLASSIAN_DC_MCP_CONFIG_FILE = sharedConfigPath;
|
|
36
|
+
const { getConfluenceRuntimeConfig, getDefaultPageSize } = await import('../config.js');
|
|
37
|
+
expect(getDefaultPageSize()).toBe(35);
|
|
38
|
+
expect(getConfluenceRuntimeConfig().token).toBe('file-token');
|
|
39
|
+
});
|
|
40
|
+
it('keeps env values higher priority than the shared config file', async () => {
|
|
41
|
+
const sharedConfigPath = path.join(tempDir, 'shared.env');
|
|
42
|
+
fs.writeFileSync(sharedConfigPath, 'CONFLUENCE_HOST=file-host\nCONFLUENCE_API_TOKEN=file-token\nCONFLUENCE_DEFAULT_PAGE_SIZE=35\n');
|
|
43
|
+
process.env.ATLASSIAN_DC_MCP_CONFIG_FILE = sharedConfigPath;
|
|
44
|
+
process.env.CONFLUENCE_DEFAULT_PAGE_SIZE = '45';
|
|
45
|
+
const { getDefaultPageSize } = await import('../config.js');
|
|
46
|
+
expect(getDefaultPageSize()).toBe(45);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAChC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,IAAI,OAAe,CAAC;IAEpB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;QAChD,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,IAAI,CAAC;QAEhD,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,GAAG,CAAC;QAE/C,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC1D,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,+FAA+F,CAAC,CAAC;QACpI,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,gBAAgB,CAAC;QAE5D,MAAM,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAExF,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,0BAA0B,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC1D,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,+FAA+F,CAAC,CAAC;QACpI,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,gBAAgB,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,IAAI,CAAC;QAEhD,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confluence-response-mapper.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/confluence-response-mapper.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { shapeConfluenceMutationAck } from '../confluence-response-mapper.js';
|
|
2
|
+
describe('shapeConfluenceMutationAck', () => {
|
|
3
|
+
it('returns a compact acknowledgement with a resolved content URL', () => {
|
|
4
|
+
expect(shapeConfluenceMutationAck({
|
|
5
|
+
id: '123',
|
|
6
|
+
type: 'page',
|
|
7
|
+
title: 'Test page',
|
|
8
|
+
space: { key: 'DOCS' },
|
|
9
|
+
version: { number: 7 },
|
|
10
|
+
_links: {
|
|
11
|
+
base: 'https://confluence.example.com',
|
|
12
|
+
webui: '/pages/viewpage.action?pageId=123',
|
|
13
|
+
},
|
|
14
|
+
})).toEqual({
|
|
15
|
+
id: '123',
|
|
16
|
+
type: 'page',
|
|
17
|
+
title: 'Test page',
|
|
18
|
+
spaceKey: 'DOCS',
|
|
19
|
+
version: 7,
|
|
20
|
+
url: 'https://confluence.example.com/pages/viewpage.action?pageId=123',
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=confluence-response-mapper.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confluence-response-mapper.test.js","sourceRoot":"","sources":["../../src/__tests__/confluence-response-mapper.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAE9E,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CACJ,0BAA0B,CAAC;YACzB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;YACtB,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;YACtB,MAAM,EAAE;gBACN,IAAI,EAAE,gCAAgC;gBACtC,KAAK,EAAE,mCAAmC;aAC3C;SACF,CAAC,CACH,CAAC,OAAO,CAAC;YACR,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,CAAC;YACV,GAAG,EAAE,iEAAiE;SACvE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { ConfluenceService, escapeSearchTextForCql } from '../confluence-service.js';
|
|
2
|
-
import { SearchService } from '../confluence-client/index.js';
|
|
2
|
+
import { ContentResourceService, SearchService } from '../confluence-client/index.js';
|
|
3
3
|
jest.mock('../confluence-client/index.js', () => ({
|
|
4
|
-
ContentResourceService: {
|
|
4
|
+
ContentResourceService: {
|
|
5
|
+
getContentById: jest.fn(),
|
|
6
|
+
createContent: jest.fn(),
|
|
7
|
+
update2: jest.fn(),
|
|
8
|
+
},
|
|
5
9
|
SearchService: {
|
|
6
10
|
search1: jest.fn(),
|
|
7
11
|
},
|
|
@@ -55,17 +59,17 @@ describe('ConfluenceService.searchSpaces', () => {
|
|
|
55
59
|
it('builds CQL with escaped searchText and calls SearchService', async () => {
|
|
56
60
|
SearchService.search1.mockResolvedValue({ results: [] });
|
|
57
61
|
await service.searchSpaces('my space', 10, 0);
|
|
58
|
-
expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '10', '0',
|
|
62
|
+
expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '10', '0', 'none', 'type=space AND title ~ "my space"');
|
|
59
63
|
});
|
|
60
64
|
it('escapes quotes in searchText in the CQL passed to the API', async () => {
|
|
61
65
|
SearchService.search1.mockResolvedValue({ results: [] });
|
|
62
66
|
await service.searchSpaces('say "hello"', 5);
|
|
63
|
-
expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '5', undefined,
|
|
67
|
+
expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '5', undefined, 'none', 'type=space AND title ~ "say \\"hello\\""');
|
|
64
68
|
});
|
|
65
69
|
it('escapes backslashes in searchText in the CQL passed to the API', async () => {
|
|
66
70
|
SearchService.search1.mockResolvedValue({ results: [] });
|
|
67
71
|
await service.searchSpaces('path\\to\\space', 5);
|
|
68
|
-
expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '5', undefined,
|
|
72
|
+
expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '5', undefined, 'none', 'type=space AND title ~ "path\\\\to\\\\space"');
|
|
69
73
|
});
|
|
70
74
|
it('forwards API errors via handleApiOperation', async () => {
|
|
71
75
|
const err = new Error('API error');
|
|
@@ -75,4 +79,120 @@ describe('ConfluenceService.searchSpaces', () => {
|
|
|
75
79
|
expect(result.error).toBeDefined();
|
|
76
80
|
});
|
|
77
81
|
});
|
|
82
|
+
describe('ConfluenceService token optimization paths', () => {
|
|
83
|
+
let service;
|
|
84
|
+
beforeEach(() => {
|
|
85
|
+
service = new ConfluenceService('test-host', 'test-token');
|
|
86
|
+
jest.clearAllMocks();
|
|
87
|
+
});
|
|
88
|
+
it('keeps storage mode as the default body shape', async () => {
|
|
89
|
+
const mockContent = {
|
|
90
|
+
id: '123',
|
|
91
|
+
type: 'page',
|
|
92
|
+
title: 'Test page',
|
|
93
|
+
body: {
|
|
94
|
+
storage: {
|
|
95
|
+
value: '<p>Hello</p>',
|
|
96
|
+
representation: 'storage',
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
ContentResourceService.getContentById.mockResolvedValue(mockContent);
|
|
101
|
+
const result = await service.getContent('123');
|
|
102
|
+
expect(result.success).toBe(true);
|
|
103
|
+
expect(result.data).toBe(mockContent);
|
|
104
|
+
expect(ContentResourceService.getContentById).toHaveBeenCalledWith('123', 'body.storage');
|
|
105
|
+
});
|
|
106
|
+
it('converts storage XML to text when bodyMode is text', async () => {
|
|
107
|
+
ContentResourceService.getContentById.mockResolvedValue({
|
|
108
|
+
id: '123',
|
|
109
|
+
type: 'page',
|
|
110
|
+
title: 'Test page',
|
|
111
|
+
body: {
|
|
112
|
+
storage: {
|
|
113
|
+
value: '<p>Hello & <strong>world</strong></p><ul><li>One</li><li>Two</li></ul>',
|
|
114
|
+
representation: 'storage',
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
version: { number: 3 },
|
|
118
|
+
});
|
|
119
|
+
const result = await service.getContent('123', 'version', 'text');
|
|
120
|
+
expect(result.success).toBe(true);
|
|
121
|
+
expect(ContentResourceService.getContentById).toHaveBeenCalledWith('123', 'version,body.storage');
|
|
122
|
+
expect(result.data).toMatchObject({
|
|
123
|
+
id: '123',
|
|
124
|
+
type: 'page',
|
|
125
|
+
title: 'Test page',
|
|
126
|
+
version: { number: 3 },
|
|
127
|
+
body: {
|
|
128
|
+
text: {
|
|
129
|
+
representation: 'text',
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
expect(result.data.body.text.value).toContain('Hello & world');
|
|
134
|
+
expect(result.data.body.text.value).toContain('- One');
|
|
135
|
+
expect(result.data.body.text.value).toContain('- Two');
|
|
136
|
+
});
|
|
137
|
+
it('truncates text bodies when maxBodyChars is provided', async () => {
|
|
138
|
+
ContentResourceService.getContentById.mockResolvedValue({
|
|
139
|
+
id: '123',
|
|
140
|
+
type: 'page',
|
|
141
|
+
title: 'Test page',
|
|
142
|
+
body: {
|
|
143
|
+
storage: {
|
|
144
|
+
value: '<p>Hello world</p>',
|
|
145
|
+
representation: 'storage',
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
const result = await service.getContent('123', undefined, 'text', 5);
|
|
150
|
+
expect(result.success).toBe(true);
|
|
151
|
+
expect(result.data).toEqual({
|
|
152
|
+
id: '123',
|
|
153
|
+
type: 'page',
|
|
154
|
+
title: 'Test page',
|
|
155
|
+
body: {
|
|
156
|
+
text: {
|
|
157
|
+
value: 'Hello',
|
|
158
|
+
representation: 'text',
|
|
159
|
+
truncated: true,
|
|
160
|
+
originalLength: 11,
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
it('omits the body when bodyMode is none', async () => {
|
|
166
|
+
ContentResourceService.getContentById.mockResolvedValue({
|
|
167
|
+
id: '123',
|
|
168
|
+
type: 'page',
|
|
169
|
+
title: 'Test page',
|
|
170
|
+
body: {
|
|
171
|
+
storage: {
|
|
172
|
+
value: '<p>Hello</p>',
|
|
173
|
+
representation: 'storage',
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
version: { number: 1 },
|
|
177
|
+
});
|
|
178
|
+
const result = await service.getContent('123', undefined, 'none');
|
|
179
|
+
expect(result.success).toBe(true);
|
|
180
|
+
expect(result.data).toEqual({
|
|
181
|
+
id: '123',
|
|
182
|
+
type: 'page',
|
|
183
|
+
title: 'Test page',
|
|
184
|
+
version: { number: 1 },
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
it('uses the package default limit and no excerpt for content search', async () => {
|
|
188
|
+
SearchService.search1.mockResolvedValue({ results: [] });
|
|
189
|
+
await service.searchContent('type=page');
|
|
190
|
+
expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '25', undefined, 'none', 'type=page');
|
|
191
|
+
});
|
|
192
|
+
it('forwards explicit excerpt for space search', async () => {
|
|
193
|
+
SearchService.search1.mockResolvedValue({ results: [] });
|
|
194
|
+
await service.searchSpaces('docs', 5, 10, 'space.icon', 'highlight');
|
|
195
|
+
expect(SearchService.search1).toHaveBeenCalledWith(undefined, 'space.icon', undefined, '5', '10', 'highlight', 'type=space AND title ~ "docs"');
|
|
196
|
+
});
|
|
197
|
+
});
|
|
78
198
|
//# sourceMappingURL=confluence-service.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confluence-service.test.js","sourceRoot":"","sources":["../../src/__tests__/confluence-service.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"confluence-service.test.js","sourceRoot":"","sources":["../../src/__tests__/confluence-service.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,wBAAgB,0BAA0B,4DAEzC;AAED,wBAAgB,kBAAkB,WAEjC;AAED,wBAAgB,gBAAgB,aAE/B"}
|
package/build/config.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { getProductRuntimeConfig, validateProductRuntimeConfig } from '@atlassian-dc-mcp/common';
|
|
2
|
+
export function getConfluenceRuntimeConfig() {
|
|
3
|
+
return getProductRuntimeConfig('confluence');
|
|
4
|
+
}
|
|
5
|
+
export function getDefaultPageSize() {
|
|
6
|
+
return getConfluenceRuntimeConfig().defaultPageSize;
|
|
7
|
+
}
|
|
8
|
+
export function getMissingConfig() {
|
|
9
|
+
return validateProductRuntimeConfig('confluence');
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAEjG,MAAM,UAAU,0BAA0B;IACxC,OAAO,uBAAuB,CAAC,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,0BAA0B,EAAE,CAAC,eAAe,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,4BAA4B,CAAC,YAAY,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type ConfluenceBodyMode = 'storage' | 'text' | 'none';
|
|
2
|
+
export type ConfluenceMutationOutputMode = 'ack' | 'full';
|
|
3
|
+
export declare function confluenceStorageToText(storageValue: string): string;
|
|
4
|
+
export declare function shapeConfluenceContent(content: any, bodyMode?: ConfluenceBodyMode, maxBodyChars?: number): any;
|
|
5
|
+
export declare function shapeConfluenceMutationAck(content: any): {
|
|
6
|
+
url?: string | undefined;
|
|
7
|
+
version?: any;
|
|
8
|
+
spaceKey?: any;
|
|
9
|
+
title?: any;
|
|
10
|
+
type?: any;
|
|
11
|
+
id?: any;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=confluence-response-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confluence-response-mapper.d.ts","sourceRoot":"","sources":["../src/confluence-response-mapper.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7D,MAAM,MAAM,4BAA4B,GAAG,KAAK,GAAG,MAAM,CAAC;AAgC1D,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAapE;AAiBD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAE,kBAA8B,EAAE,YAAY,CAAC,EAAE,MAAM,OA2BnH;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,GAAG;;;;;;;EAWtD"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
const ENTITY_MAP = {
|
|
2
|
+
' ': ' ',
|
|
3
|
+
'&': '&',
|
|
4
|
+
'<': '<',
|
|
5
|
+
'>': '>',
|
|
6
|
+
'"': '"',
|
|
7
|
+
''': "'",
|
|
8
|
+
};
|
|
9
|
+
function decodeHtmlEntities(value) {
|
|
10
|
+
return value
|
|
11
|
+
.replace(/&(nbsp|amp|lt|gt|quot);|'/g, match => ENTITY_MAP[match] ?? match)
|
|
12
|
+
.replace(/&#(\d+);/g, (_, code) => {
|
|
13
|
+
const parsed = Number.parseInt(code, 10);
|
|
14
|
+
return Number.isNaN(parsed) ? '' : String.fromCodePoint(parsed);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function truncateText(value, maxBodyChars) {
|
|
18
|
+
if (maxBodyChars === undefined || maxBodyChars < 1 || value.length <= maxBodyChars) {
|
|
19
|
+
return { value };
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
value: value.slice(0, maxBodyChars).trimEnd(),
|
|
23
|
+
truncated: true,
|
|
24
|
+
originalLength: value.length,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function confluenceStorageToText(storageValue) {
|
|
28
|
+
const withLineBreaks = storageValue
|
|
29
|
+
.replace(/<br\s*\/?>/gi, '\n')
|
|
30
|
+
.replace(/<li\b[^>]*>/gi, '\n- ')
|
|
31
|
+
.replace(/<\/(?:p|div|h[1-6]|li|tr|td|th|blockquote|pre|ul|ol|table|section|article)\s*>/gi, '\n')
|
|
32
|
+
.replace(/<[^>]+>/g, ' ');
|
|
33
|
+
return decodeHtmlEntities(withLineBreaks)
|
|
34
|
+
.replace(/\r\n/g, '\n')
|
|
35
|
+
.replace(/[ \t]+\n/g, '\n')
|
|
36
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
37
|
+
.replace(/[ \t]{2,}/g, ' ')
|
|
38
|
+
.trim();
|
|
39
|
+
}
|
|
40
|
+
function getContentUrl(content) {
|
|
41
|
+
const self = content?._links?.self;
|
|
42
|
+
if (typeof self === 'string') {
|
|
43
|
+
return self;
|
|
44
|
+
}
|
|
45
|
+
const base = content?._links?.base;
|
|
46
|
+
const webui = content?._links?.webui;
|
|
47
|
+
if (typeof base === 'string' && typeof webui === 'string') {
|
|
48
|
+
return `${base}${webui}`;
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
export function shapeConfluenceContent(content, bodyMode = 'storage', maxBodyChars) {
|
|
53
|
+
if (!content || typeof content !== 'object' || bodyMode === 'storage') {
|
|
54
|
+
return content;
|
|
55
|
+
}
|
|
56
|
+
const { body, ...rest } = content;
|
|
57
|
+
if (bodyMode === 'none') {
|
|
58
|
+
return rest;
|
|
59
|
+
}
|
|
60
|
+
const storageValue = typeof body?.storage?.value === 'string' ? body.storage.value : undefined;
|
|
61
|
+
if (storageValue === undefined) {
|
|
62
|
+
return rest;
|
|
63
|
+
}
|
|
64
|
+
const textBody = truncateText(confluenceStorageToText(storageValue), maxBodyChars);
|
|
65
|
+
return {
|
|
66
|
+
...rest,
|
|
67
|
+
body: {
|
|
68
|
+
text: {
|
|
69
|
+
value: textBody.value,
|
|
70
|
+
representation: 'text',
|
|
71
|
+
...(textBody.truncated ? { truncated: true, originalLength: textBody.originalLength } : {}),
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export function shapeConfluenceMutationAck(content) {
|
|
77
|
+
const url = getContentUrl(content);
|
|
78
|
+
return {
|
|
79
|
+
...(content?.id !== undefined ? { id: content.id } : {}),
|
|
80
|
+
...(typeof content?.type === 'string' ? { type: content.type } : {}),
|
|
81
|
+
...(typeof content?.title === 'string' ? { title: content.title } : {}),
|
|
82
|
+
...(typeof content?.space?.key === 'string' ? { spaceKey: content.space.key } : {}),
|
|
83
|
+
...(content?.version?.number !== undefined ? { version: content.version.number } : {}),
|
|
84
|
+
...(url ? { url } : {}),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=confluence-response-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confluence-response-mapper.js","sourceRoot":"","sources":["../src/confluence-response-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { ConfluenceBodyMode } from './confluence-response-mapper.js';
|
|
2
3
|
/**
|
|
3
4
|
* Escapes user input for safe use inside a CQL quoted string.
|
|
4
5
|
* Escapes backslash first, then double quote, so that neither can break out of the phrase.
|
|
@@ -27,19 +28,26 @@ export interface ConfluenceContent {
|
|
|
27
28
|
}>;
|
|
28
29
|
}
|
|
29
30
|
export declare class ConfluenceService {
|
|
31
|
+
private readonly getPageSize;
|
|
30
32
|
/**
|
|
31
33
|
* Creates a new ConfluenceService instance
|
|
32
34
|
* @param host The hostname of the Confluence server (e.g., "host.com")
|
|
33
35
|
* @param token The API token for authentication
|
|
34
36
|
* @param fullApiUrl Optional full API URL (e.g., "https://host.com/wiki/"). If provided, host and apiBasePath are ignored.
|
|
35
37
|
*/
|
|
36
|
-
constructor(host: string | undefined, token: string, fullApiUrl?: string);
|
|
38
|
+
constructor(host: string | undefined, token: string | (() => string | undefined), fullApiUrl?: string, getPageSize?: () => number);
|
|
37
39
|
/**
|
|
38
40
|
* Get a Confluence page by ID
|
|
39
41
|
* @param contentId The ID of the page to retrieve
|
|
40
42
|
* @param expand Optional comma-separated list of properties to expand
|
|
41
43
|
*/
|
|
42
|
-
|
|
44
|
+
getContentRaw(contentId: string, expand?: string): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<import("./confluence-client/index.js").Content>>;
|
|
45
|
+
getContent(contentId: string, expand?: string, bodyMode?: ConfluenceBodyMode, maxBodyChars?: number): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<import("./confluence-client/index.js").Content> | {
|
|
46
|
+
data: any;
|
|
47
|
+
success: boolean;
|
|
48
|
+
error?: string;
|
|
49
|
+
details?: any;
|
|
50
|
+
}>;
|
|
43
51
|
/**
|
|
44
52
|
* Search for content in Confluence using CQL
|
|
45
53
|
* @param cql Confluence Query Language string
|
|
@@ -47,7 +55,7 @@ export declare class ConfluenceService {
|
|
|
47
55
|
* @param start Start index for pagination
|
|
48
56
|
* @param expand Optional comma-separated list of properties to expand
|
|
49
57
|
*/
|
|
50
|
-
searchContent(cql: string, limit?: number, start?: number, expand?: string): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<{
|
|
58
|
+
searchContent(cql: string, limit?: number, start?: number, expand?: string, excerpt?: 'none' | 'highlight'): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<{
|
|
51
59
|
results?: Array<import("./confluence-client/index.js").SearchResult>;
|
|
52
60
|
totalCount?: number;
|
|
53
61
|
start?: number;
|
|
@@ -79,7 +87,7 @@ export declare class ConfluenceService {
|
|
|
79
87
|
* @param start Start index for pagination
|
|
80
88
|
* @param expand Optional comma-separated list of properties to expand
|
|
81
89
|
*/
|
|
82
|
-
searchSpaces(searchText: string, limit?: number, start?: number, expand?: string): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<{
|
|
90
|
+
searchSpaces(searchText: string, limit?: number, start?: number, expand?: string, excerpt?: 'none' | 'highlight'): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<{
|
|
83
91
|
results?: Array<import("./confluence-client/index.js").SearchResult>;
|
|
84
92
|
totalCount?: number;
|
|
85
93
|
start?: number;
|
|
@@ -99,12 +107,15 @@ export declare const confluenceToolSchemas: {
|
|
|
99
107
|
getContent: {
|
|
100
108
|
contentId: z.ZodString;
|
|
101
109
|
expand: z.ZodOptional<z.ZodString>;
|
|
110
|
+
bodyMode: z.ZodOptional<z.ZodEnum<["storage", "text", "none"]>>;
|
|
111
|
+
maxBodyChars: z.ZodOptional<z.ZodNumber>;
|
|
102
112
|
};
|
|
103
113
|
searchContent: {
|
|
104
114
|
cql: z.ZodString;
|
|
105
115
|
limit: z.ZodOptional<z.ZodNumber>;
|
|
106
116
|
start: z.ZodOptional<z.ZodNumber>;
|
|
107
117
|
expand: z.ZodOptional<z.ZodString>;
|
|
118
|
+
excerpt: z.ZodOptional<z.ZodEnum<["none", "highlight"]>>;
|
|
108
119
|
};
|
|
109
120
|
createContent: {
|
|
110
121
|
title: z.ZodString;
|
|
@@ -112,6 +123,7 @@ export declare const confluenceToolSchemas: {
|
|
|
112
123
|
type: z.ZodDefault<z.ZodString>;
|
|
113
124
|
content: z.ZodString;
|
|
114
125
|
parentId: z.ZodOptional<z.ZodString>;
|
|
126
|
+
output: z.ZodOptional<z.ZodEnum<["ack", "full"]>>;
|
|
115
127
|
};
|
|
116
128
|
updateContent: {
|
|
117
129
|
contentId: z.ZodString;
|
|
@@ -119,12 +131,14 @@ export declare const confluenceToolSchemas: {
|
|
|
119
131
|
content: z.ZodOptional<z.ZodString>;
|
|
120
132
|
version: z.ZodNumber;
|
|
121
133
|
versionComment: z.ZodOptional<z.ZodString>;
|
|
134
|
+
output: z.ZodOptional<z.ZodEnum<["ack", "full"]>>;
|
|
122
135
|
};
|
|
123
136
|
searchSpaces: {
|
|
124
137
|
searchText: z.ZodString;
|
|
125
138
|
limit: z.ZodOptional<z.ZodNumber>;
|
|
126
139
|
start: z.ZodOptional<z.ZodNumber>;
|
|
127
140
|
expand: z.ZodOptional<z.ZodString>;
|
|
141
|
+
excerpt: z.ZodOptional<z.ZodEnum<["none", "highlight"]>>;
|
|
128
142
|
};
|
|
129
143
|
};
|
|
130
144
|
//# sourceMappingURL=confluence-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confluence-service.d.ts","sourceRoot":"","sources":["../src/confluence-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,IAAI,CAAC,EAAE;QACL,OAAO,EAAE;YACP,KAAK,EAAE,MAAM,CAAC;YACd,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;KACH,CAAC;IACF,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnC;
|
|
1
|
+
{"version":3,"file":"confluence-service.d.ts","sourceRoot":"","sources":["../src/confluence-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,kBAAkB,EAA0B,MAAM,iCAAiC,CAAC;AAE7F;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,IAAI,CAAC,EAAE;QACL,OAAO,EAAE;YACP,KAAK,EAAE,MAAM,CAAC;YACd,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;KACH,CAAC;IACF,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnC;AAYD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAE3C;;;;;OAKG;gBAED,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,EAC1C,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,GAAE,MAAM,MAA2B;IAahD;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAQhD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,kBAA8B,EAAE,YAAY,CAAC,EAAE,MAAM;;;;;;IAYpH;;;;;;OAMG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,GAAG,WAAoB;;;;;;;gBA3BnF,CAAC;mBAC9B,CAAA;gBAA0B,CAAC;gBACxB,CAAC;gBAA0B,CAAC;;;IAwCvC;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,iBAAiB;IAI9C;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB;IAIjE;;;;;;OAMG;IACG,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE,MAAM,GAAG,WAAoB;;;;;;;gBAvEH,CAAC;mBAC9B,CAAA;gBAA0B,CAAC;gBACxB,CAAC;gBAA0B,CAAC;;;IAuFvC,MAAM,CAAC,cAAc,IAAI,MAAM,EAAE;CAGlC;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCjC,CAAC"}
|