@bretwardjames/ghp-cli 0.1.1 → 0.1.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/dist/branch-linker.d.ts +31 -9
- package/dist/branch-linker.d.ts.map +1 -1
- package/dist/branch-linker.js +61 -35
- package/dist/branch-linker.js.map +1 -1
- package/dist/commands/link-branch.d.ts.map +1 -1
- package/dist/commands/link-branch.js +20 -0
- package/dist/commands/link-branch.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +235 -95
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/set-field.d.ts.map +1 -1
- package/dist/commands/set-field.js +25 -1
- package/dist/commands/set-field.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +21 -0
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/switch.d.ts.map +1 -1
- package/dist/commands/switch.js +20 -0
- package/dist/commands/switch.js.map +1 -1
- package/dist/commands/sync.d.ts +2 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +77 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/work.d.ts +5 -0
- package/dist/commands/work.d.ts.map +1 -1
- package/dist/commands/work.js +226 -36
- package/dist/commands/work.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/git-utils.d.ts +6 -52
- package/dist/git-utils.d.ts.map +1 -1
- package/dist/git-utils.js +7 -137
- package/dist/git-utils.js.map +1 -1
- package/dist/github-api.d.ts +17 -108
- package/dist/github-api.d.ts.map +1 -1
- package/dist/github-api.js +48 -579
- package/dist/github-api.js.map +1 -1
- package/dist/index.js +16 -2
- package/dist/index.js.map +1 -1
- package/dist/table.d.ts +16 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +230 -0
- package/dist/table.js.map +1 -0
- package/dist/types.d.ts +6 -36
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
package/dist/github-api.js
CHANGED
|
@@ -1,35 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* CLI-specific GitHub API wrapper.
|
|
3
|
+
*
|
|
4
|
+
* This module wraps the core GitHubAPI class with CLI-specific behavior:
|
|
5
|
+
* - Token from `gh auth token` or environment variables
|
|
6
|
+
* - Chalk-colored error messages
|
|
7
|
+
* - process.exit on auth errors
|
|
8
|
+
*/
|
|
2
9
|
import { exec } from 'child_process';
|
|
3
10
|
import { promisify } from 'util';
|
|
4
11
|
import chalk from 'chalk';
|
|
12
|
+
import { GitHubAPI as CoreGitHubAPI, } from '@bretwardjames/ghp-core';
|
|
5
13
|
const execAsync = promisify(exec);
|
|
6
14
|
/**
|
|
7
|
-
*
|
|
15
|
+
* CLI token provider that gets tokens from environment or gh CLI
|
|
8
16
|
*/
|
|
9
|
-
|
|
10
|
-
if (error && typeof error === 'object' && 'errors' in error) {
|
|
11
|
-
const gqlError = error;
|
|
12
|
-
const scopeError = gqlError.errors?.find(e => e.type === 'INSUFFICIENT_SCOPES');
|
|
13
|
-
if (scopeError) {
|
|
14
|
-
console.error(chalk.red('\nError:'), 'Your GitHub token is missing required scopes.');
|
|
15
|
-
console.error(chalk.dim('GitHub Projects requires the'), chalk.cyan('read:project'), chalk.dim('scope.'));
|
|
16
|
-
console.error();
|
|
17
|
-
console.error('Run this command to add the required scope:');
|
|
18
|
-
console.error(chalk.cyan(' gh auth refresh -s read:project -s project'));
|
|
19
|
-
console.error();
|
|
20
|
-
process.exit(1);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
throw error;
|
|
24
|
-
}
|
|
25
|
-
export class GitHubAPI {
|
|
26
|
-
graphqlWithAuth = null;
|
|
27
|
-
username = null;
|
|
28
|
-
/**
|
|
29
|
-
* Get token from gh CLI or environment variable
|
|
30
|
-
*/
|
|
17
|
+
const cliTokenProvider = {
|
|
31
18
|
async getToken() {
|
|
32
|
-
// First try environment
|
|
19
|
+
// First try environment variables
|
|
33
20
|
if (process.env.GITHUB_TOKEN) {
|
|
34
21
|
return process.env.GITHUB_TOKEN;
|
|
35
22
|
}
|
|
@@ -44,561 +31,43 @@ export class GitHubAPI {
|
|
|
44
31
|
catch {
|
|
45
32
|
return null;
|
|
46
33
|
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return this.graphqlWithAuth !== null;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Get projects linked to a repository
|
|
83
|
-
*/
|
|
84
|
-
async getProjects(repo) {
|
|
85
|
-
if (!this.graphqlWithAuth)
|
|
86
|
-
throw new Error('Not authenticated');
|
|
87
|
-
try {
|
|
88
|
-
const response = await this.graphqlWithAuth(`
|
|
89
|
-
query($owner: String!, $name: String!) {
|
|
90
|
-
repository(owner: $owner, name: $name) {
|
|
91
|
-
projectsV2(first: 20) {
|
|
92
|
-
nodes {
|
|
93
|
-
id
|
|
94
|
-
title
|
|
95
|
-
number
|
|
96
|
-
url
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
`, {
|
|
102
|
-
owner: repo.owner,
|
|
103
|
-
name: repo.name,
|
|
104
|
-
});
|
|
105
|
-
return response.repository.projectsV2.nodes;
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
handleScopeError(error);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Get items from a project
|
|
113
|
-
*/
|
|
114
|
-
async getProjectItems(projectId, projectTitle) {
|
|
115
|
-
if (!this.graphqlWithAuth)
|
|
116
|
-
throw new Error('Not authenticated');
|
|
117
|
-
const response = await this.graphqlWithAuth(`
|
|
118
|
-
query($projectId: ID!) {
|
|
119
|
-
node(id: $projectId) {
|
|
120
|
-
... on ProjectV2 {
|
|
121
|
-
items(first: 100) {
|
|
122
|
-
nodes {
|
|
123
|
-
id
|
|
124
|
-
fieldValues(first: 20) {
|
|
125
|
-
nodes {
|
|
126
|
-
__typename
|
|
127
|
-
... on ProjectV2ItemFieldSingleSelectValue {
|
|
128
|
-
name
|
|
129
|
-
field { ... on ProjectV2SingleSelectField { name } }
|
|
130
|
-
}
|
|
131
|
-
... on ProjectV2ItemFieldTextValue {
|
|
132
|
-
text
|
|
133
|
-
field { ... on ProjectV2Field { name } }
|
|
134
|
-
}
|
|
135
|
-
... on ProjectV2ItemFieldNumberValue {
|
|
136
|
-
number
|
|
137
|
-
field { ... on ProjectV2Field { name } }
|
|
138
|
-
}
|
|
139
|
-
... on ProjectV2ItemFieldDateValue {
|
|
140
|
-
date
|
|
141
|
-
field { ... on ProjectV2Field { name } }
|
|
142
|
-
}
|
|
143
|
-
... on ProjectV2ItemFieldIterationValue {
|
|
144
|
-
title
|
|
145
|
-
field { ... on ProjectV2IterationField { name } }
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
content {
|
|
150
|
-
__typename
|
|
151
|
-
... on Issue {
|
|
152
|
-
title
|
|
153
|
-
number
|
|
154
|
-
url
|
|
155
|
-
issueType { name }
|
|
156
|
-
assignees(first: 5) { nodes { login } }
|
|
157
|
-
labels(first: 10) { nodes { name color } }
|
|
158
|
-
repository { name }
|
|
159
|
-
}
|
|
160
|
-
... on PullRequest {
|
|
161
|
-
title
|
|
162
|
-
number
|
|
163
|
-
url
|
|
164
|
-
assignees(first: 5) { nodes { login } }
|
|
165
|
-
labels(first: 10) { nodes { name color } }
|
|
166
|
-
repository { name }
|
|
167
|
-
}
|
|
168
|
-
... on DraftIssue {
|
|
169
|
-
title
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
`, { projectId });
|
|
178
|
-
return response.node.items.nodes
|
|
179
|
-
.filter(item => item.content)
|
|
180
|
-
.map(item => {
|
|
181
|
-
const content = item.content;
|
|
182
|
-
// Extract all field values into a map
|
|
183
|
-
const fields = {};
|
|
184
|
-
for (const fv of item.fieldValues.nodes) {
|
|
185
|
-
const fieldName = fv.field?.name;
|
|
186
|
-
if (!fieldName)
|
|
187
|
-
continue;
|
|
188
|
-
if (fv.__typename === 'ProjectV2ItemFieldSingleSelectValue' && fv.name) {
|
|
189
|
-
fields[fieldName] = fv.name;
|
|
190
|
-
}
|
|
191
|
-
else if (fv.__typename === 'ProjectV2ItemFieldTextValue' && fv.text) {
|
|
192
|
-
fields[fieldName] = fv.text;
|
|
193
|
-
}
|
|
194
|
-
else if (fv.__typename === 'ProjectV2ItemFieldNumberValue' && fv.number !== undefined) {
|
|
195
|
-
fields[fieldName] = fv.number.toString();
|
|
196
|
-
}
|
|
197
|
-
else if (fv.__typename === 'ProjectV2ItemFieldDateValue' && fv.date) {
|
|
198
|
-
fields[fieldName] = fv.date;
|
|
199
|
-
}
|
|
200
|
-
else if (fv.__typename === 'ProjectV2ItemFieldIterationValue' && fv.title) {
|
|
201
|
-
fields[fieldName] = fv.title;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
let type = 'draft';
|
|
205
|
-
if (content.__typename === 'Issue')
|
|
206
|
-
type = 'issue';
|
|
207
|
-
else if (content.__typename === 'PullRequest')
|
|
208
|
-
type = 'pull_request';
|
|
209
|
-
return {
|
|
210
|
-
id: item.id,
|
|
211
|
-
title: content.title || 'Untitled',
|
|
212
|
-
number: content.number || null,
|
|
213
|
-
type,
|
|
214
|
-
issueType: content.issueType?.name || null,
|
|
215
|
-
status: fields['Status'] || null,
|
|
216
|
-
assignees: content.assignees?.nodes.map(a => a.login) || [],
|
|
217
|
-
labels: content.labels?.nodes || [],
|
|
218
|
-
repository: content.repository?.name || null,
|
|
219
|
-
url: content.url || null,
|
|
220
|
-
projectId,
|
|
221
|
-
projectTitle,
|
|
222
|
-
fields,
|
|
223
|
-
};
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* CLI error handler that prints colored messages and exits
|
|
38
|
+
*/
|
|
39
|
+
function handleAuthError(error) {
|
|
40
|
+
if (error.type === 'INSUFFICIENT_SCOPES') {
|
|
41
|
+
console.error(chalk.red('\nError:'), 'Your GitHub token is missing required scopes.');
|
|
42
|
+
console.error(chalk.dim('GitHub Projects requires the'), chalk.cyan('read:project'), chalk.dim('scope.'));
|
|
43
|
+
console.error();
|
|
44
|
+
console.error('Run this command to add the required scope:');
|
|
45
|
+
console.error(chalk.cyan(' gh auth refresh -s read:project -s project'));
|
|
46
|
+
console.error();
|
|
47
|
+
}
|
|
48
|
+
else if (error.type === 'SSO_REQUIRED') {
|
|
49
|
+
console.error(chalk.red('\nError:'), 'SSO authentication required for this organization.');
|
|
50
|
+
console.error(chalk.dim('Please re-authenticate with SSO enabled.'));
|
|
51
|
+
console.error();
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.error(chalk.red('\nError:'), error.message);
|
|
55
|
+
}
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Extended GitHubAPI class for CLI with pre-configured token provider
|
|
60
|
+
*/
|
|
61
|
+
class CLIGitHubAPI extends CoreGitHubAPI {
|
|
62
|
+
constructor() {
|
|
63
|
+
super({
|
|
64
|
+
tokenProvider: cliTokenProvider,
|
|
65
|
+
onAuthError: handleAuthError,
|
|
224
66
|
});
|
|
225
67
|
}
|
|
226
|
-
/**
|
|
227
|
-
* Get the Status field info for a project
|
|
228
|
-
*/
|
|
229
|
-
async getStatusField(projectId) {
|
|
230
|
-
if (!this.graphqlWithAuth)
|
|
231
|
-
throw new Error('Not authenticated');
|
|
232
|
-
const response = await this.graphqlWithAuth(`
|
|
233
|
-
query($projectId: ID!) {
|
|
234
|
-
node(id: $projectId) {
|
|
235
|
-
... on ProjectV2 {
|
|
236
|
-
fields(first: 20) {
|
|
237
|
-
nodes {
|
|
238
|
-
__typename
|
|
239
|
-
... on ProjectV2SingleSelectField {
|
|
240
|
-
id
|
|
241
|
-
name
|
|
242
|
-
options { id name }
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
`, { projectId });
|
|
250
|
-
const statusField = response.node.fields.nodes.find(f => f.__typename === 'ProjectV2SingleSelectField' && f.name === 'Status');
|
|
251
|
-
if (!statusField || !statusField.options)
|
|
252
|
-
return null;
|
|
253
|
-
return {
|
|
254
|
-
fieldId: statusField.id,
|
|
255
|
-
options: statusField.options,
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Update an item's status
|
|
260
|
-
*/
|
|
261
|
-
async updateItemStatus(projectId, itemId, fieldId, optionId) {
|
|
262
|
-
if (!this.graphqlWithAuth)
|
|
263
|
-
throw new Error('Not authenticated');
|
|
264
|
-
try {
|
|
265
|
-
await this.graphqlWithAuth(`
|
|
266
|
-
mutation($projectId: ID!, $itemId: ID!, $fieldId: ID!, $optionId: String!) {
|
|
267
|
-
updateProjectV2ItemFieldValue(input: {
|
|
268
|
-
projectId: $projectId
|
|
269
|
-
itemId: $itemId
|
|
270
|
-
fieldId: $fieldId
|
|
271
|
-
value: { singleSelectOptionId: $optionId }
|
|
272
|
-
}) {
|
|
273
|
-
projectV2Item { id }
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
`, { projectId, itemId, fieldId, optionId });
|
|
277
|
-
return true;
|
|
278
|
-
}
|
|
279
|
-
catch (error) {
|
|
280
|
-
console.error('Failed to update status:', error);
|
|
281
|
-
return false;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Find an item by issue number across all projects for this repo
|
|
286
|
-
*/
|
|
287
|
-
async findItemByNumber(repo, issueNumber) {
|
|
288
|
-
const projects = await this.getProjects(repo);
|
|
289
|
-
for (const project of projects) {
|
|
290
|
-
const items = await this.getProjectItems(project.id, project.title);
|
|
291
|
-
const item = items.find(i => i.number === issueNumber);
|
|
292
|
-
if (item)
|
|
293
|
-
return item;
|
|
294
|
-
}
|
|
295
|
-
return null;
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Get all fields for a project
|
|
299
|
-
*/
|
|
300
|
-
async getProjectFields(projectId) {
|
|
301
|
-
if (!this.graphqlWithAuth)
|
|
302
|
-
throw new Error('Not authenticated');
|
|
303
|
-
const response = await this.graphqlWithAuth(`
|
|
304
|
-
query($projectId: ID!) {
|
|
305
|
-
node(id: $projectId) {
|
|
306
|
-
... on ProjectV2 {
|
|
307
|
-
fields(first: 30) {
|
|
308
|
-
nodes {
|
|
309
|
-
__typename
|
|
310
|
-
... on ProjectV2Field {
|
|
311
|
-
id
|
|
312
|
-
name
|
|
313
|
-
}
|
|
314
|
-
... on ProjectV2SingleSelectField {
|
|
315
|
-
id
|
|
316
|
-
name
|
|
317
|
-
options { id name }
|
|
318
|
-
}
|
|
319
|
-
... on ProjectV2IterationField {
|
|
320
|
-
id
|
|
321
|
-
name
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
`, { projectId });
|
|
329
|
-
return response.node.fields.nodes.map(f => ({
|
|
330
|
-
id: f.id,
|
|
331
|
-
name: f.name,
|
|
332
|
-
type: f.__typename.replace('ProjectV2', '').replace('Field', ''),
|
|
333
|
-
options: f.options,
|
|
334
|
-
}));
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Set a field value on a project item
|
|
338
|
-
*/
|
|
339
|
-
async setFieldValue(projectId, itemId, fieldId, value) {
|
|
340
|
-
if (!this.graphqlWithAuth)
|
|
341
|
-
throw new Error('Not authenticated');
|
|
342
|
-
try {
|
|
343
|
-
await this.graphqlWithAuth(`
|
|
344
|
-
mutation($projectId: ID!, $itemId: ID!, $fieldId: ID!, $value: ProjectV2FieldValue!) {
|
|
345
|
-
updateProjectV2ItemFieldValue(input: {
|
|
346
|
-
projectId: $projectId
|
|
347
|
-
itemId: $itemId
|
|
348
|
-
fieldId: $fieldId
|
|
349
|
-
value: $value
|
|
350
|
-
}) {
|
|
351
|
-
projectV2Item { id }
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
`, { projectId, itemId, fieldId, value });
|
|
355
|
-
return true;
|
|
356
|
-
}
|
|
357
|
-
catch (error) {
|
|
358
|
-
console.error('Failed to set field value:', error);
|
|
359
|
-
return false;
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
/**
|
|
363
|
-
* Create a new issue
|
|
364
|
-
*/
|
|
365
|
-
async createIssue(repo, title, body) {
|
|
366
|
-
if (!this.graphqlWithAuth)
|
|
367
|
-
throw new Error('Not authenticated');
|
|
368
|
-
try {
|
|
369
|
-
// First get the repository ID
|
|
370
|
-
const repoResponse = await this.graphqlWithAuth(`
|
|
371
|
-
query($owner: String!, $name: String!) {
|
|
372
|
-
repository(owner: $owner, name: $name) {
|
|
373
|
-
id
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
`, { owner: repo.owner, name: repo.name });
|
|
377
|
-
const response = await this.graphqlWithAuth(`
|
|
378
|
-
mutation($repositoryId: ID!, $title: String!, $body: String) {
|
|
379
|
-
createIssue(input: {
|
|
380
|
-
repositoryId: $repositoryId
|
|
381
|
-
title: $title
|
|
382
|
-
body: $body
|
|
383
|
-
}) {
|
|
384
|
-
issue {
|
|
385
|
-
id
|
|
386
|
-
number
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
`, {
|
|
391
|
-
repositoryId: repoResponse.repository.id,
|
|
392
|
-
title,
|
|
393
|
-
body: body || '',
|
|
394
|
-
});
|
|
395
|
-
return response.createIssue.issue;
|
|
396
|
-
}
|
|
397
|
-
catch (error) {
|
|
398
|
-
console.error('Failed to create issue:', error);
|
|
399
|
-
return null;
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
/**
|
|
403
|
-
* Add an issue to a project
|
|
404
|
-
*/
|
|
405
|
-
async addToProject(projectId, contentId) {
|
|
406
|
-
if (!this.graphqlWithAuth)
|
|
407
|
-
throw new Error('Not authenticated');
|
|
408
|
-
try {
|
|
409
|
-
const response = await this.graphqlWithAuth(`
|
|
410
|
-
mutation($projectId: ID!, $contentId: ID!) {
|
|
411
|
-
addProjectV2ItemById(input: {
|
|
412
|
-
projectId: $projectId
|
|
413
|
-
contentId: $contentId
|
|
414
|
-
}) {
|
|
415
|
-
item { id }
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
`, { projectId, contentId });
|
|
419
|
-
return response.addProjectV2ItemById.item.id;
|
|
420
|
-
}
|
|
421
|
-
catch (error) {
|
|
422
|
-
console.error('Failed to add to project:', error);
|
|
423
|
-
return null;
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
/**
|
|
427
|
-
* Get full issue details including body and comments
|
|
428
|
-
*/
|
|
429
|
-
async getIssueDetails(repo, issueNumber) {
|
|
430
|
-
if (!this.graphqlWithAuth)
|
|
431
|
-
throw new Error('Not authenticated');
|
|
432
|
-
try {
|
|
433
|
-
const response = await this.graphqlWithAuth(`
|
|
434
|
-
query($owner: String!, $name: String!, $number: Int!) {
|
|
435
|
-
repository(owner: $owner, name: $name) {
|
|
436
|
-
issueOrPullRequest(number: $number) {
|
|
437
|
-
__typename
|
|
438
|
-
... on Issue {
|
|
439
|
-
title
|
|
440
|
-
body
|
|
441
|
-
state
|
|
442
|
-
createdAt
|
|
443
|
-
author { login }
|
|
444
|
-
labels(first: 10) { nodes { name color } }
|
|
445
|
-
comments(first: 50) {
|
|
446
|
-
totalCount
|
|
447
|
-
nodes {
|
|
448
|
-
author { login }
|
|
449
|
-
body
|
|
450
|
-
createdAt
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
... on PullRequest {
|
|
455
|
-
title
|
|
456
|
-
body
|
|
457
|
-
state
|
|
458
|
-
createdAt
|
|
459
|
-
author { login }
|
|
460
|
-
labels(first: 10) { nodes { name color } }
|
|
461
|
-
comments(first: 50) {
|
|
462
|
-
totalCount
|
|
463
|
-
nodes {
|
|
464
|
-
author { login }
|
|
465
|
-
body
|
|
466
|
-
createdAt
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
`, {
|
|
474
|
-
owner: repo.owner,
|
|
475
|
-
name: repo.name,
|
|
476
|
-
number: issueNumber,
|
|
477
|
-
});
|
|
478
|
-
const issue = response.repository.issueOrPullRequest;
|
|
479
|
-
if (!issue)
|
|
480
|
-
return null;
|
|
481
|
-
return {
|
|
482
|
-
title: issue.title,
|
|
483
|
-
body: issue.body,
|
|
484
|
-
state: issue.state,
|
|
485
|
-
type: issue.__typename === 'PullRequest' ? 'pull_request' : 'issue',
|
|
486
|
-
createdAt: issue.createdAt,
|
|
487
|
-
author: issue.author?.login || 'unknown',
|
|
488
|
-
labels: issue.labels.nodes,
|
|
489
|
-
comments: issue.comments.nodes.map(c => ({
|
|
490
|
-
author: c.author?.login || 'unknown',
|
|
491
|
-
body: c.body,
|
|
492
|
-
createdAt: c.createdAt,
|
|
493
|
-
})),
|
|
494
|
-
totalComments: issue.comments.totalCount,
|
|
495
|
-
};
|
|
496
|
-
}
|
|
497
|
-
catch (error) {
|
|
498
|
-
console.error('Failed to get issue details:', error);
|
|
499
|
-
return null;
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
/**
|
|
503
|
-
* Add a comment to an issue or PR
|
|
504
|
-
*/
|
|
505
|
-
async addComment(repo, issueNumber, body) {
|
|
506
|
-
if (!this.graphqlWithAuth)
|
|
507
|
-
throw new Error('Not authenticated');
|
|
508
|
-
try {
|
|
509
|
-
// First get the issue/PR node ID
|
|
510
|
-
const issueResponse = await this.graphqlWithAuth(`
|
|
511
|
-
query($owner: String!, $name: String!, $number: Int!) {
|
|
512
|
-
repository(owner: $owner, name: $name) {
|
|
513
|
-
issueOrPullRequest(number: $number) {
|
|
514
|
-
... on Issue { id }
|
|
515
|
-
... on PullRequest { id }
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
`, {
|
|
520
|
-
owner: repo.owner,
|
|
521
|
-
name: repo.name,
|
|
522
|
-
number: issueNumber,
|
|
523
|
-
});
|
|
524
|
-
const subjectId = issueResponse.repository.issueOrPullRequest?.id;
|
|
525
|
-
if (!subjectId) {
|
|
526
|
-
console.error('Issue not found');
|
|
527
|
-
return false;
|
|
528
|
-
}
|
|
529
|
-
await this.graphqlWithAuth(`
|
|
530
|
-
mutation($subjectId: ID!, $body: String!) {
|
|
531
|
-
addComment(input: { subjectId: $subjectId, body: $body }) {
|
|
532
|
-
commentEdge {
|
|
533
|
-
node { id }
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
`, { subjectId, body });
|
|
538
|
-
return true;
|
|
539
|
-
}
|
|
540
|
-
catch (error) {
|
|
541
|
-
console.error('Failed to add comment:', error);
|
|
542
|
-
return false;
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
/**
|
|
546
|
-
* Get repository collaborators (for @ mention suggestions)
|
|
547
|
-
*/
|
|
548
|
-
async getCollaborators(repo) {
|
|
549
|
-
if (!this.graphqlWithAuth)
|
|
550
|
-
throw new Error('Not authenticated');
|
|
551
|
-
try {
|
|
552
|
-
const response = await this.graphqlWithAuth(`
|
|
553
|
-
query($owner: String!, $name: String!) {
|
|
554
|
-
repository(owner: $owner, name: $name) {
|
|
555
|
-
collaborators(first: 50) {
|
|
556
|
-
nodes { login name }
|
|
557
|
-
}
|
|
558
|
-
assignableUsers(first: 50) {
|
|
559
|
-
nodes { login name }
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
`, { owner: repo.owner, name: repo.name });
|
|
564
|
-
// Use collaborators if available, fall back to assignable users
|
|
565
|
-
const users = response.repository.collaborators?.nodes
|
|
566
|
-
|| response.repository.assignableUsers.nodes
|
|
567
|
-
|| [];
|
|
568
|
-
return users.map(u => ({ login: u.login, name: u.name }));
|
|
569
|
-
}
|
|
570
|
-
catch {
|
|
571
|
-
// Collaborators might not be accessible, return empty
|
|
572
|
-
return [];
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
/**
|
|
576
|
-
* Get recent issues (for # reference suggestions)
|
|
577
|
-
*/
|
|
578
|
-
async getRecentIssues(repo, limit = 20) {
|
|
579
|
-
if (!this.graphqlWithAuth)
|
|
580
|
-
throw new Error('Not authenticated');
|
|
581
|
-
try {
|
|
582
|
-
const response = await this.graphqlWithAuth(`
|
|
583
|
-
query($owner: String!, $name: String!, $limit: Int!) {
|
|
584
|
-
repository(owner: $owner, name: $name) {
|
|
585
|
-
issues(first: $limit, orderBy: { field: UPDATED_AT, direction: DESC }) {
|
|
586
|
-
nodes {
|
|
587
|
-
number
|
|
588
|
-
title
|
|
589
|
-
state
|
|
590
|
-
}
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
`, { owner: repo.owner, name: repo.name, limit });
|
|
595
|
-
return response.repository.issues.nodes;
|
|
596
|
-
}
|
|
597
|
-
catch {
|
|
598
|
-
return [];
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
68
|
}
|
|
602
|
-
// Singleton instance
|
|
603
|
-
export const api = new
|
|
69
|
+
// Singleton instance for CLI usage
|
|
70
|
+
export const api = new CLIGitHubAPI();
|
|
71
|
+
// Also export the class for testing
|
|
72
|
+
export { CLIGitHubAPI as GitHubAPI };
|
|
604
73
|
//# sourceMappingURL=github-api.js.map
|
package/dist/github-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-api.js","sourceRoot":"","sources":["../src/github-api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"github-api.js","sourceRoot":"","sources":["../src/github-api.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACH,SAAS,IAAI,aAAa,GAG7B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC;;GAEG;AACH,MAAM,gBAAgB,GAAkB;IACpC,KAAK,CAAC,QAAQ;QACV,kCAAkC;QAClC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACpC,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAChC,CAAC;QAED,aAAa;QACb,IAAI,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;CACJ,CAAC;AAEF;;GAEG;AACH,SAAS,eAAe,CAAC,KAAgB;IACrC,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,+CAA+C,CAAC,CAAC;QACtF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1G,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,oDAAoD,CAAC,CAAC;QAC3F,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,YAAa,SAAQ,aAAa;IACpC;QACI,KAAK,CAAC;YACF,aAAa,EAAE,gBAAgB;YAC/B,WAAW,EAAE,eAAe;SAC/B,CAAC,CAAC;IACP,CAAC;CACJ;AAaD,mCAAmC;AACnC,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,YAAY,EAAE,CAAC;AAEtC,oCAAoC;AACpC,OAAO,EAAE,YAAY,IAAI,SAAS,EAAE,CAAC"}
|