@geeveeh/atlassian-tools 0.2.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/LICENSE +21 -0
- package/README.md +228 -0
- package/dist/cli/confluence.d.ts +3 -0
- package/dist/cli/confluence.d.ts.map +1 -0
- package/dist/cli/confluence.js +209 -0
- package/dist/cli/confluence.js.map +1 -0
- package/dist/cli/helpers.d.ts +3 -0
- package/dist/cli/helpers.d.ts.map +1 -0
- package/dist/cli/helpers.js +24 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +12 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/jira.d.ts +3 -0
- package/dist/cli/jira.d.ts.map +1 -0
- package/dist/cli/jira.js +264 -0
- package/dist/cli/jira.js.map +1 -0
- package/dist/confluence/client.d.ts +16 -0
- package/dist/confluence/client.d.ts.map +1 -0
- package/dist/confluence/client.js +92 -0
- package/dist/confluence/client.js.map +1 -0
- package/dist/confluence/index.d.ts +3 -0
- package/dist/confluence/index.d.ts.map +1 -0
- package/dist/confluence/index.js +3 -0
- package/dist/confluence/index.js.map +1 -0
- package/dist/confluence/types.d.ts +46 -0
- package/dist/confluence/types.d.ts.map +1 -0
- package/dist/confluence/types.js +2 -0
- package/dist/confluence/types.js.map +1 -0
- package/dist/core/auth.d.ts +3 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +22 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/client.d.ts +9 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +40 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +5 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/markdown.d.ts +15 -0
- package/dist/core/markdown.d.ts.map +1 -0
- package/dist/core/markdown.js +83 -0
- package/dist/core/markdown.js.map +1 -0
- package/dist/core/types.d.ts +22 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +12 -0
- package/dist/core/types.js.map +1 -0
- package/dist/jira/client.d.ts +18 -0
- package/dist/jira/client.d.ts.map +1 -0
- package/dist/jira/client.js +86 -0
- package/dist/jira/client.js.map +1 -0
- package/dist/jira/helpers.d.ts +5 -0
- package/dist/jira/helpers.d.ts.map +1 -0
- package/dist/jira/helpers.js +35 -0
- package/dist/jira/helpers.js.map +1 -0
- package/dist/jira/index.d.ts +4 -0
- package/dist/jira/index.d.ts.map +1 -0
- package/dist/jira/index.js +4 -0
- package/dist/jira/index.js.map +1 -0
- package/dist/jira/types.d.ts +68 -0
- package/dist/jira/types.d.ts.map +1 -0
- package/dist/jira/types.js +2 -0
- package/dist/jira/types.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +367 -0
- package/dist/mcp/index.js.map +1 -0
- package/package.json +50 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Shadowgandor
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# atlassian-tools
|
|
2
|
+
|
|
3
|
+
CLI and MCP server for Atlassian Cloud. Manage Confluence pages and Jira issues from your terminal or AI agent — with a single set of credentials.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Confluence** — Full CRUD for pages: search, read, create, update, delete
|
|
8
|
+
- **Jira** — Issues: search (JQL), view, create, update, transition, delete
|
|
9
|
+
- **Shared auth** — One set of credentials (`ATLASSIAN_URL`, `ATLASSIAN_EMAIL`, `ATLASSIAN_TOKEN`) for all products
|
|
10
|
+
- **CLI** — `atlassian` command with product subcommands, interactive confirmations, coloured output
|
|
11
|
+
- **MCP server** — Expose all operations as tools for AI agents (Claude Code, etc.)
|
|
12
|
+
- **Markdown support** — Automatically converts `.md` files to Confluence storage format
|
|
13
|
+
- **Secure by design** — Credentials are read from environment variables only, never written to disk
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install -g atlassian-tools
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Or run without installing:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx atlassian-tools atlassian confluence auth
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Environment variables
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
export ATLASSIAN_URL="https://your-instance.atlassian.net"
|
|
31
|
+
export ATLASSIAN_EMAIL="you@example.com"
|
|
32
|
+
export ATLASSIAN_TOKEN="your-api-token"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Generate an API token at https://id.atlassian.com/manage-profile/security/api-tokens
|
|
36
|
+
|
|
37
|
+
> **Migration note:** The legacy `CONFLUENCE_URL`, `CONFLUENCE_EMAIL`, and `CONFLUENCE_TOKEN` variables are still supported. `CONFLUENCE_URL` is expected to include `/wiki` — the tool strips it automatically.
|
|
38
|
+
|
|
39
|
+
## CLI usage
|
|
40
|
+
|
|
41
|
+
### Confluence
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Verify connection
|
|
45
|
+
atlassian confluence auth
|
|
46
|
+
|
|
47
|
+
# List spaces
|
|
48
|
+
atlassian confluence spaces
|
|
49
|
+
|
|
50
|
+
# Read a page
|
|
51
|
+
atlassian confluence read 12345678
|
|
52
|
+
atlassian confluence read 12345678 --json
|
|
53
|
+
|
|
54
|
+
# Search pages in a space
|
|
55
|
+
atlassian confluence search -s DEV -t "Architecture"
|
|
56
|
+
|
|
57
|
+
# Create a page (prompts for confirmation)
|
|
58
|
+
atlassian confluence create -s DEV -t "New RFC" -f proposal.md
|
|
59
|
+
|
|
60
|
+
# Update a page
|
|
61
|
+
atlassian confluence update 12345678 -f updated.md -m "Revised section 3"
|
|
62
|
+
|
|
63
|
+
# Delete a page
|
|
64
|
+
atlassian confluence delete 12345678
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Jira
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Verify connection
|
|
71
|
+
atlassian jira auth
|
|
72
|
+
|
|
73
|
+
# List projects
|
|
74
|
+
atlassian jira projects
|
|
75
|
+
|
|
76
|
+
# Search issues
|
|
77
|
+
atlassian jira list --project CARD --status "In Progress"
|
|
78
|
+
atlassian jira list --jql 'assignee = currentUser() AND status != Done'
|
|
79
|
+
|
|
80
|
+
# View an issue
|
|
81
|
+
atlassian jira view CARD-42
|
|
82
|
+
atlassian jira view CARD-42 --json
|
|
83
|
+
|
|
84
|
+
# Create an issue (prompts for confirmation)
|
|
85
|
+
atlassian jira create --project CARD --type Bug --summary "Fix login"
|
|
86
|
+
|
|
87
|
+
# Update an issue
|
|
88
|
+
atlassian jira update CARD-42 --priority High --summary "Fix login regression"
|
|
89
|
+
|
|
90
|
+
# Transition an issue
|
|
91
|
+
atlassian jira transition CARD-42 --to "In Progress"
|
|
92
|
+
atlassian jira transition CARD-42 --list # show available transitions
|
|
93
|
+
|
|
94
|
+
# Delete an issue
|
|
95
|
+
atlassian jira delete CARD-42
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
All write/delete commands prompt for confirmation. Pass `-y` to skip (useful in scripts).
|
|
99
|
+
|
|
100
|
+
## MCP server usage
|
|
101
|
+
|
|
102
|
+
Add to your Claude Code config (`~/.claude.json` or project `.mcp.json`):
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"mcpServers": {
|
|
107
|
+
"atlassian": {
|
|
108
|
+
"command": "atlassian-mcp",
|
|
109
|
+
"env": {
|
|
110
|
+
"ATLASSIAN_URL": "https://your-instance.atlassian.net",
|
|
111
|
+
"ATLASSIAN_EMAIL": "you@example.com",
|
|
112
|
+
"ATLASSIAN_TOKEN": "your-api-token"
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Or without a global install:
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"mcpServers": {
|
|
124
|
+
"atlassian": {
|
|
125
|
+
"command": "npx",
|
|
126
|
+
"args": ["--package=atlassian-tools", "-y", "atlassian-mcp"],
|
|
127
|
+
"env": {
|
|
128
|
+
"ATLASSIAN_URL": "https://your-instance.atlassian.net",
|
|
129
|
+
"ATLASSIAN_EMAIL": "you@example.com",
|
|
130
|
+
"ATLASSIAN_TOKEN": "your-api-token"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Available tools
|
|
138
|
+
|
|
139
|
+
#### Confluence
|
|
140
|
+
|
|
141
|
+
| Tool | Description | Confirmation needed |
|
|
142
|
+
|----------------------------|--------------------------------------|---------------------|
|
|
143
|
+
| `confluence_auth` | Verify connection | No |
|
|
144
|
+
| `confluence_list_spaces` | List spaces | No |
|
|
145
|
+
| `confluence_read_page` | Read page content by ID | No |
|
|
146
|
+
| `confluence_search_pages` | Search by space key and title | No |
|
|
147
|
+
| `confluence_create_page` | Create a new page | **Yes** |
|
|
148
|
+
| `confluence_update_page` | Update an existing page | **Yes** |
|
|
149
|
+
| `confluence_delete_page` | Delete a page | **Yes** |
|
|
150
|
+
|
|
151
|
+
#### Jira
|
|
152
|
+
|
|
153
|
+
| Tool | Description | Confirmation needed |
|
|
154
|
+
|----------------------------|--------------------------------------|---------------------|
|
|
155
|
+
| `jira_auth` | Verify connection | No |
|
|
156
|
+
| `jira_list_projects` | List projects | No |
|
|
157
|
+
| `jira_get_issue` | Get issue details by key | No |
|
|
158
|
+
| `jira_search_issues` | Search with JQL or filters | No |
|
|
159
|
+
| `jira_create_issue` | Create a new issue | **Yes** |
|
|
160
|
+
| `jira_update_issue` | Update an existing issue | **Yes** |
|
|
161
|
+
| `jira_transition_issue` | Transition issue status | **Yes** |
|
|
162
|
+
| `jira_delete_issue` | Delete an issue | **Yes** |
|
|
163
|
+
|
|
164
|
+
## Project structure
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
src/
|
|
168
|
+
├── core/ # Shared: auth, HTTP client, types, markdown converter
|
|
169
|
+
│ ├── client.ts # Generic Atlassian HTTP client (auth, fetch, errors)
|
|
170
|
+
│ ├── auth.ts # Environment-based config loader
|
|
171
|
+
│ ├── markdown.ts # Markdown → Confluence storage format converter
|
|
172
|
+
│ ├── types.ts # Shared TypeScript interfaces
|
|
173
|
+
│ └── index.ts # Barrel export
|
|
174
|
+
├── confluence/ # Confluence-specific client + types
|
|
175
|
+
│ ├── client.ts # Confluence REST API client
|
|
176
|
+
│ ├── types.ts # Confluence interfaces
|
|
177
|
+
│ └── index.ts # Barrel export
|
|
178
|
+
├── jira/ # Jira-specific client + types
|
|
179
|
+
│ ├── client.ts # Jira REST API v3 client
|
|
180
|
+
│ ├── types.ts # Jira interfaces
|
|
181
|
+
│ └── index.ts # Barrel export
|
|
182
|
+
├── cli/ # Commander.js with product subcommands
|
|
183
|
+
│ ├── index.ts # Main entry point
|
|
184
|
+
│ ├── helpers.ts # Shared CLI utilities
|
|
185
|
+
│ ├── confluence.ts
|
|
186
|
+
│ └── jira.ts
|
|
187
|
+
└── mcp/ # MCP server exposing all tools
|
|
188
|
+
└── index.ts
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Programmatic usage
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
import { ConfluenceClient } from "atlassian-tools/confluence";
|
|
195
|
+
import { JiraClient } from "atlassian-tools/jira";
|
|
196
|
+
import { loadConfigFromEnv } from "atlassian-tools";
|
|
197
|
+
|
|
198
|
+
const config = loadConfigFromEnv();
|
|
199
|
+
const confluence = new ConfluenceClient(config);
|
|
200
|
+
const jira = new JiraClient(config);
|
|
201
|
+
|
|
202
|
+
const pages = await confluence.searchPages({ spaceKey: "DEV", title: "RFC" });
|
|
203
|
+
const issues = await jira.searchIssues({ project: "CARD", status: "In Progress" });
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Development
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# Run CLI in dev mode (no build step)
|
|
210
|
+
npm run dev:cli -- confluence auth
|
|
211
|
+
npm run dev:cli -- jira list --project CARD
|
|
212
|
+
|
|
213
|
+
# Run MCP server in dev mode
|
|
214
|
+
npm run dev:mcp
|
|
215
|
+
|
|
216
|
+
# Build
|
|
217
|
+
npm run build
|
|
218
|
+
|
|
219
|
+
# Test
|
|
220
|
+
npm test
|
|
221
|
+
|
|
222
|
+
# Lint
|
|
223
|
+
npm run lint
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## License
|
|
227
|
+
|
|
228
|
+
MIT — GeeveeH Software
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confluence.d.ts","sourceRoot":"","sources":["../../src/cli/confluence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,QAuM1D"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { loadConfigFromEnv } from "../core/auth.js";
|
|
3
|
+
import { resolveBody } from "../core/markdown.js";
|
|
4
|
+
import { ConfluenceClient } from "../confluence/client.js";
|
|
5
|
+
import { handleError, confirm } from "./helpers.js";
|
|
6
|
+
function createClient() {
|
|
7
|
+
return new ConfluenceClient(loadConfigFromEnv());
|
|
8
|
+
}
|
|
9
|
+
function formatPage(page) {
|
|
10
|
+
return `${chalk.bold(page.title)} ${chalk.dim(`(id: ${page.id}, v${page.version?.number ?? "?"}, ${page.status})`)}`;
|
|
11
|
+
}
|
|
12
|
+
function pageUrl(page) {
|
|
13
|
+
const base = page._links?.base ?? process.env.ATLASSIAN_URL ?? process.env.CONFLUENCE_URL?.replace(/\/wiki\/?$/, "") ?? "";
|
|
14
|
+
return `${base}/wiki/pages/${page.id}`;
|
|
15
|
+
}
|
|
16
|
+
export function registerConfluenceCommands(program) {
|
|
17
|
+
const confluence = program
|
|
18
|
+
.command("confluence")
|
|
19
|
+
.description("Atlassian Confluence — create, read, update, delete pages");
|
|
20
|
+
confluence
|
|
21
|
+
.command("auth")
|
|
22
|
+
.description("Verify your Confluence connection")
|
|
23
|
+
.action(async () => {
|
|
24
|
+
try {
|
|
25
|
+
const client = createClient();
|
|
26
|
+
const spaces = await client.verifyConnection();
|
|
27
|
+
console.log(chalk.green("✓ Connected successfully."));
|
|
28
|
+
console.log(` Found ${spaces.length} space(s):`);
|
|
29
|
+
for (const s of spaces) {
|
|
30
|
+
console.log(` • ${chalk.bold(s.name)} ${chalk.dim(`[${s.key}]`)}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
handleError(err);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
confluence
|
|
38
|
+
.command("spaces")
|
|
39
|
+
.description("List available spaces")
|
|
40
|
+
.option("-l, --limit <n>", "Max spaces to return", "25")
|
|
41
|
+
.action(async (opts) => {
|
|
42
|
+
try {
|
|
43
|
+
const client = createClient();
|
|
44
|
+
const spaces = await client.listSpaces(Number(opts.limit));
|
|
45
|
+
for (const s of spaces) {
|
|
46
|
+
console.log(`${chalk.bold(s.name)} ${chalk.dim(`[${s.key}] id:${s.id}`)}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
handleError(err);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
confluence
|
|
54
|
+
.command("read <pageId>")
|
|
55
|
+
.description("Read a page by ID")
|
|
56
|
+
.option("--json", "Output raw JSON")
|
|
57
|
+
.action(async (pageId, opts) => {
|
|
58
|
+
try {
|
|
59
|
+
const client = createClient();
|
|
60
|
+
const page = await client.getPage(pageId);
|
|
61
|
+
if (opts.json) {
|
|
62
|
+
console.log(JSON.stringify(page, null, 2));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
console.log(formatPage(page));
|
|
66
|
+
if (page.body?.storage?.value) {
|
|
67
|
+
console.log(chalk.dim("─".repeat(60)));
|
|
68
|
+
console.log(page.body.storage.value);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
handleError(err);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
confluence
|
|
77
|
+
.command("search")
|
|
78
|
+
.description("Search for pages in a space")
|
|
79
|
+
.requiredOption("-s, --space <key>", "Space key")
|
|
80
|
+
.option("-t, --title <title>", "Filter by title")
|
|
81
|
+
.option("-l, --limit <n>", "Max results", "25")
|
|
82
|
+
.action(async (opts) => {
|
|
83
|
+
try {
|
|
84
|
+
const client = createClient();
|
|
85
|
+
const pages = await client.searchPages({
|
|
86
|
+
spaceKey: opts.space,
|
|
87
|
+
title: opts.title,
|
|
88
|
+
limit: Number(opts.limit),
|
|
89
|
+
});
|
|
90
|
+
if (pages.length === 0) {
|
|
91
|
+
console.log(chalk.yellow("No pages found."));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
for (const p of pages) {
|
|
95
|
+
console.log(formatPage(p));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
handleError(err);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
confluence
|
|
103
|
+
.command("create")
|
|
104
|
+
.description("Create a new page")
|
|
105
|
+
.requiredOption("-s, --space <key>", "Space key")
|
|
106
|
+
.requiredOption("-t, --title <title>", "Page title")
|
|
107
|
+
.requiredOption("-f, --file <path>", "Content file (.md, .html) or inline string")
|
|
108
|
+
.option("-p, --parent <id>", "Parent page ID")
|
|
109
|
+
.option("--draft", "Create as draft")
|
|
110
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
111
|
+
.action(async (opts) => {
|
|
112
|
+
try {
|
|
113
|
+
const client = createClient();
|
|
114
|
+
const space = await client.getSpaceByKey(opts.space);
|
|
115
|
+
const body = await resolveBody(opts.file);
|
|
116
|
+
if (!opts.yes) {
|
|
117
|
+
console.log(chalk.yellow("⚠ About to create page:"));
|
|
118
|
+
console.log(` Space: ${space.name} [${space.key}]`);
|
|
119
|
+
console.log(` Title: ${opts.title}`);
|
|
120
|
+
if (opts.parent)
|
|
121
|
+
console.log(` Parent: ${opts.parent}`);
|
|
122
|
+
console.log(` Status: ${opts.draft ? "draft" : "published"}`);
|
|
123
|
+
console.log();
|
|
124
|
+
const ok = await confirm("Proceed?");
|
|
125
|
+
if (!ok) {
|
|
126
|
+
console.log(chalk.dim("Cancelled."));
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const page = await client.createPage({
|
|
131
|
+
spaceId: space.id,
|
|
132
|
+
title: opts.title,
|
|
133
|
+
body,
|
|
134
|
+
parentId: opts.parent,
|
|
135
|
+
status: opts.draft ? "draft" : "current",
|
|
136
|
+
});
|
|
137
|
+
console.log(chalk.green(`✓ Created: ${formatPage(page)}`));
|
|
138
|
+
console.log(` ${chalk.cyan(pageUrl(page))}`);
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
handleError(err);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
confluence
|
|
145
|
+
.command("update <pageId>")
|
|
146
|
+
.description("Update an existing page")
|
|
147
|
+
.option("-t, --title <title>", "New title")
|
|
148
|
+
.option("-f, --file <path>", "New content file (.md, .html) or inline string")
|
|
149
|
+
.option("-m, --message <msg>", "Version message")
|
|
150
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
151
|
+
.action(async (pageId, opts) => {
|
|
152
|
+
try {
|
|
153
|
+
const client = createClient();
|
|
154
|
+
const current = await client.getPage(pageId);
|
|
155
|
+
const body = opts.file ? await resolveBody(opts.file) : undefined;
|
|
156
|
+
if (!opts.yes) {
|
|
157
|
+
console.log(chalk.yellow("⚠ About to update page:"));
|
|
158
|
+
console.log(` Page: ${formatPage(current)}`);
|
|
159
|
+
if (opts.title)
|
|
160
|
+
console.log(` Title: ${current.title} → ${opts.title}`);
|
|
161
|
+
if (body)
|
|
162
|
+
console.log(` Body: will be replaced`);
|
|
163
|
+
console.log();
|
|
164
|
+
const ok = await confirm("Proceed?");
|
|
165
|
+
if (!ok) {
|
|
166
|
+
console.log(chalk.dim("Cancelled."));
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const updated = await client.updatePage({
|
|
171
|
+
pageId,
|
|
172
|
+
title: opts.title,
|
|
173
|
+
body,
|
|
174
|
+
versionMessage: opts.message,
|
|
175
|
+
});
|
|
176
|
+
console.log(chalk.green(`✓ Updated: ${formatPage(updated)}`));
|
|
177
|
+
console.log(` ${chalk.cyan(pageUrl(updated))}`);
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
handleError(err);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
confluence
|
|
184
|
+
.command("delete <pageId>")
|
|
185
|
+
.description("Delete a page")
|
|
186
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
187
|
+
.action(async (pageId, opts) => {
|
|
188
|
+
try {
|
|
189
|
+
const client = createClient();
|
|
190
|
+
const page = await client.getPage(pageId);
|
|
191
|
+
if (!opts.yes) {
|
|
192
|
+
console.log(chalk.red("⚠ About to DELETE page:"));
|
|
193
|
+
console.log(` ${formatPage(page)}`);
|
|
194
|
+
console.log();
|
|
195
|
+
const ok = await confirm("This cannot be undone. Proceed?");
|
|
196
|
+
if (!ok) {
|
|
197
|
+
console.log(chalk.dim("Cancelled."));
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
await client.deletePage(pageId);
|
|
202
|
+
console.log(chalk.green(`✓ Deleted page "${page.title}" (id: ${pageId})`));
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
handleError(err);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=confluence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../src/cli/confluence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAQ/C;AAED,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUhE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { AtlassianApiError } from "../core/types.js";
|
|
3
|
+
export function handleError(err) {
|
|
4
|
+
if (err instanceof AtlassianApiError) {
|
|
5
|
+
console.error(chalk.red(`✗ API error ${err.statusCode}: ${err.message}`));
|
|
6
|
+
if (err.data)
|
|
7
|
+
console.error(chalk.dim(JSON.stringify(err.data, null, 2)));
|
|
8
|
+
}
|
|
9
|
+
else if (err instanceof Error) {
|
|
10
|
+
console.error(chalk.red(`✗ ${err.message}`));
|
|
11
|
+
}
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
export async function confirm(question) {
|
|
15
|
+
const { createInterface } = await import("node:readline");
|
|
16
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
17
|
+
return new Promise((resolve) => {
|
|
18
|
+
rl.question(`${question} [y/N] `, (answer) => {
|
|
19
|
+
rl.close();
|
|
20
|
+
resolve(answer.trim().toLowerCase().startsWith("y"));
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,GAAG,CAAC,IAAI;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;SAAM,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,QAAgB;IAC5C,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAC1D,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { registerConfluenceCommands } from "./confluence.js";
|
|
4
|
+
import { registerJiraCommands } from "./jira.js";
|
|
5
|
+
const program = new Command()
|
|
6
|
+
.name("atlassian")
|
|
7
|
+
.description("CLI for Atlassian Cloud — Confluence, Jira, and more")
|
|
8
|
+
.version("0.2.0");
|
|
9
|
+
registerConfluenceCommands(program);
|
|
10
|
+
registerJiraCommands(program);
|
|
11
|
+
program.parse();
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,sDAAsD,CAAC;KACnE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira.d.ts","sourceRoot":"","sources":["../../src/cli/jira.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAmQpD"}
|