bitbucket-data-center-client 1.0.0 → 1.0.8
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 +21 -449
- package/dist/client.d.ts +98 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +201 -0
- package/dist/client.js.map +1 -1
- package/dist/types.d.ts +664 -13
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/package.json +14 -17
- package/BitbucketServerSwagger.json +0 -67522
- package/LICENSE +0 -21
package/dist/client.js
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
|
+
/**
|
|
3
|
+
* Bitbucket Server/Data Center API client.
|
|
4
|
+
* Provides typed methods for interacting with Bitbucket Server REST API.
|
|
5
|
+
*/
|
|
2
6
|
export class BitbucketClient {
|
|
3
7
|
client;
|
|
4
8
|
constructor(config) {
|
|
5
9
|
const { token, baseUrl, axiosConfig = {} } = config;
|
|
10
|
+
// Merge user config with baseURL and authentication defaults
|
|
6
11
|
this.client = axios.create({
|
|
7
12
|
...axiosConfig,
|
|
8
13
|
baseURL: `${baseUrl}/rest/api/latest`,
|
|
@@ -13,45 +18,132 @@ export class BitbucketClient {
|
|
|
13
18
|
},
|
|
14
19
|
});
|
|
15
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Get a Bitbucket Server user profile by username
|
|
23
|
+
*/
|
|
16
24
|
async getUserProfile(params) {
|
|
17
25
|
const response = await this.client.get(`/users/${params.username}`);
|
|
18
26
|
return response.data;
|
|
19
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Get all users, optionally filtered by search term
|
|
30
|
+
*/
|
|
20
31
|
async getAllUsers(params) {
|
|
21
32
|
const response = await this.client.get('/users', {
|
|
22
33
|
params: params?.filter ? { filter: params.filter } : {},
|
|
23
34
|
});
|
|
24
35
|
return response.data;
|
|
25
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* List projects, optionally filtered by name or permission
|
|
39
|
+
*/
|
|
26
40
|
async listProjects(params) {
|
|
27
41
|
const response = await this.client.get('/projects', {
|
|
28
42
|
params,
|
|
29
43
|
});
|
|
30
44
|
return response.data;
|
|
31
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* List all repositories in a project
|
|
48
|
+
*/
|
|
32
49
|
async listRepositories(params) {
|
|
33
50
|
const response = await this.client.get(`/projects/${params.projectKey}/repos`);
|
|
34
51
|
return response.data;
|
|
35
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Get a repository by project key and slug
|
|
55
|
+
*/
|
|
56
|
+
async getRepository(params) {
|
|
57
|
+
const { projectKey, repositorySlug } = params;
|
|
58
|
+
const response = await this.client.get(`/projects/${projectKey}/repos/${repositorySlug}`);
|
|
59
|
+
return response.data;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get pull requests in the authenticated user's inbox (where they are assigned as reviewer)
|
|
63
|
+
*/
|
|
36
64
|
async getInboxPullRequests(params) {
|
|
37
65
|
const response = await this.client.get('/inbox/pull-requests', { params });
|
|
38
66
|
return response.data;
|
|
39
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Get pull requests from the user's dashboard.
|
|
70
|
+
* Can filter by role (AUTHOR, REVIEWER, PARTICIPANT), state, and more.
|
|
71
|
+
*/
|
|
72
|
+
async getDashboardPullRequests(params) {
|
|
73
|
+
const response = await this.client.get('/dashboard/pull-requests', {
|
|
74
|
+
params: {
|
|
75
|
+
role: 'AUTHOR',
|
|
76
|
+
state: 'OPEN',
|
|
77
|
+
order: 'NEWEST',
|
|
78
|
+
...params,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
return response.data;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get pull request details (title, description, author, branches, etc.)
|
|
85
|
+
*/
|
|
40
86
|
async getPullRequest(params) {
|
|
41
87
|
const { projectKey, repositorySlug, pullRequestId } = params;
|
|
42
88
|
const response = await this.client.get(`/projects/${projectKey}/repos/${repositorySlug}/pull-requests/${pullRequestId}`);
|
|
43
89
|
return response.data;
|
|
44
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Create a new pull request.
|
|
93
|
+
* Supports both same-repo PRs (default) and cross-repo PRs (when fromRepositorySlug is provided).
|
|
94
|
+
* Branch names are automatically converted to full refs (e.g., "main" → "refs/heads/main").
|
|
95
|
+
*/
|
|
96
|
+
async createPullRequest(params) {
|
|
97
|
+
const { projectKey, repositorySlug, title, description, fromBranch, toBranch, fromRepositorySlug, fromProjectKey, reviewers, draft, } = params;
|
|
98
|
+
// Convert branch names to full refs if needed
|
|
99
|
+
const toRefId = (branch) => (branch.startsWith('refs/') ? branch : `refs/heads/${branch}`);
|
|
100
|
+
const body = {
|
|
101
|
+
title,
|
|
102
|
+
...(description && { description }),
|
|
103
|
+
fromRef: {
|
|
104
|
+
id: toRefId(fromBranch),
|
|
105
|
+
...(fromRepositorySlug && {
|
|
106
|
+
repository: {
|
|
107
|
+
slug: fromRepositorySlug,
|
|
108
|
+
project: { key: fromProjectKey || projectKey },
|
|
109
|
+
},
|
|
110
|
+
}),
|
|
111
|
+
},
|
|
112
|
+
toRef: {
|
|
113
|
+
id: toRefId(toBranch),
|
|
114
|
+
},
|
|
115
|
+
...(reviewers &&
|
|
116
|
+
reviewers.length > 0 && {
|
|
117
|
+
reviewers: reviewers.map((username) => ({ user: { name: username } })),
|
|
118
|
+
}),
|
|
119
|
+
...(draft !== undefined && { draft }),
|
|
120
|
+
};
|
|
121
|
+
const response = await this.client.post(`/projects/${projectKey}/repos/${repositorySlug}/pull-requests`, body);
|
|
122
|
+
return response.data;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get all changed files in a pull request
|
|
126
|
+
*/
|
|
45
127
|
async getPullRequestChanges(params) {
|
|
46
128
|
const { projectKey, repositorySlug, pullRequestId, limit } = params;
|
|
47
129
|
const response = await this.client.get(`/projects/${projectKey}/repos/${repositorySlug}/pull-requests/${pullRequestId}/changes`, { params: limit ? { limit } : {} });
|
|
48
130
|
return response.data;
|
|
49
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Get structured line-by-line diff for a specific file in a pull request
|
|
134
|
+
*/
|
|
50
135
|
async getPullRequestFileDiff(params) {
|
|
51
136
|
const { projectKey, repositorySlug, pullRequestId, path, contextLines } = params;
|
|
52
137
|
const response = await this.client.get(`/projects/${projectKey}/repos/${repositorySlug}/pull-requests/${pullRequestId}/diff/${path}`, { params: contextLines ? { contextLines } : {} });
|
|
53
138
|
return response.data;
|
|
54
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Get diff for a pull request (or specific file).
|
|
142
|
+
* When path is empty or undefined, returns the full PR diff.
|
|
143
|
+
* Format controls the response type:
|
|
144
|
+
* - 'text': Raw diff as plain text string
|
|
145
|
+
* - 'json': Structured diff object (DiffResponse)
|
|
146
|
+
*/
|
|
55
147
|
async getPullRequestDiff(params) {
|
|
56
148
|
const { projectKey, repositorySlug, pullRequestId, path, sinceId, untilId, contextLines, whitespace, format = 'text', } = params;
|
|
57
149
|
const queryParams = {};
|
|
@@ -69,11 +161,17 @@ export class BitbucketClient {
|
|
|
69
161
|
});
|
|
70
162
|
return response.data;
|
|
71
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Get activity on a pull request (comments, approvals, merges, reviews, updates)
|
|
166
|
+
*/
|
|
72
167
|
async getPullRequestActivities(params) {
|
|
73
168
|
const { projectKey, repositorySlug, pullRequestId, ...queryParams } = params;
|
|
74
169
|
const response = await this.client.get(`/projects/${projectKey}/repos/${repositorySlug}/pull-requests/${pullRequestId}/activities`, { params: queryParams });
|
|
75
170
|
return response.data;
|
|
76
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Add a comment to a pull request (supports general comments, replies, and inline file/line comments)
|
|
174
|
+
*/
|
|
77
175
|
async addPullRequestComment(params) {
|
|
78
176
|
const { projectKey, repositorySlug, pullRequestId, text, parentId, path, line, lineType, fileType } = params;
|
|
79
177
|
const body = { text };
|
|
@@ -91,31 +189,134 @@ export class BitbucketClient {
|
|
|
91
189
|
const response = await this.client.post(`/projects/${projectKey}/repos/${repositorySlug}/pull-requests/${pullRequestId}/comments`, body);
|
|
92
190
|
return response.data;
|
|
93
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* Delete a pull request comment. Returns void on success (HTTP 204).
|
|
194
|
+
* Anyone can delete their own comment. Only REPO_ADMIN can delete others' comments.
|
|
195
|
+
* Comments with replies cannot be deleted.
|
|
196
|
+
*/
|
|
94
197
|
async deletePullRequestComment(params) {
|
|
95
198
|
const { projectKey, repositorySlug, pullRequestId, commentId, version } = params;
|
|
96
199
|
await this.client.delete(`/projects/${projectKey}/repos/${repositorySlug}/pull-requests/${pullRequestId}/comments/${commentId}`, {
|
|
97
200
|
params: { version },
|
|
98
201
|
});
|
|
99
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Update review status for a pull request (approve, request changes, or remove approval)
|
|
205
|
+
*/
|
|
100
206
|
async updateReviewStatus(params) {
|
|
101
207
|
const { projectKey, repositorySlug, pullRequestId, status } = params;
|
|
208
|
+
// Get authenticated user slug from application properties
|
|
102
209
|
const propertiesResponse = await this.client.get('/application-properties');
|
|
103
210
|
const userSlug = propertiesResponse.headers['x-ausername'];
|
|
104
211
|
const response = await this.client.put(`/projects/${projectKey}/repos/${repositorySlug}/pull-requests/${pullRequestId}/participants/${userSlug}`, { status });
|
|
105
212
|
return response.data;
|
|
106
213
|
}
|
|
214
|
+
/**
|
|
215
|
+
* Add an emoticon reaction to a pull request comment
|
|
216
|
+
*/
|
|
107
217
|
async addPullRequestCommentReaction(params) {
|
|
108
218
|
const { projectKey, repositorySlug, pullRequestId, commentId, emoticon } = params;
|
|
219
|
+
// Use comment-likes plugin API endpoint
|
|
109
220
|
const response = await this.client.put(`/comment-likes/latest/projects/${projectKey}/repos/${repositorySlug}/pull-requests/${pullRequestId}/comments/${commentId}/reactions/${emoticon}`, {}, {
|
|
110
221
|
baseURL: this.client.defaults.baseURL?.replace('/rest/api/latest', '/rest'),
|
|
111
222
|
});
|
|
112
223
|
return response.data;
|
|
113
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* Remove an emoticon reaction from a pull request comment
|
|
227
|
+
*/
|
|
114
228
|
async removePullRequestCommentReaction(params) {
|
|
115
229
|
const { projectKey, repositorySlug, pullRequestId, commentId, emoticon } = params;
|
|
230
|
+
// Use comment-likes plugin API endpoint
|
|
116
231
|
await this.client.delete(`/comment-likes/latest/projects/${projectKey}/repos/${repositorySlug}/pull-requests/${pullRequestId}/comments/${commentId}/reactions/${emoticon}`, {
|
|
117
232
|
baseURL: this.client.defaults.baseURL?.replace('/rest/api/latest', '/rest'),
|
|
118
233
|
});
|
|
119
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* Get the list of required/default reviewers for a pull request.
|
|
237
|
+
* Returns users who would be automatically assigned as reviewers based on configured rules.
|
|
238
|
+
* Note: Default reviewers are NOT auto-added when creating PRs via API - you must
|
|
239
|
+
* fetch them with this method and pass them to createPullRequest().
|
|
240
|
+
* Branch names are automatically converted to full refs (e.g., "main" → "refs/heads/main").
|
|
241
|
+
* Use getRepository() to obtain the repositoryId.
|
|
242
|
+
*/
|
|
243
|
+
async getRequiredReviewers(params) {
|
|
244
|
+
const { projectKey, repositorySlug, repositoryId, sourceBranch, targetBranch } = params;
|
|
245
|
+
// Convert branch names to full refs if needed
|
|
246
|
+
const toRefId = (branch) => (branch.startsWith('refs/') ? branch : `refs/heads/${branch}`);
|
|
247
|
+
// Uses /default-reviewers/latest base path (not /rest/api/latest)
|
|
248
|
+
const response = await this.client.get(`/default-reviewers/latest/projects/${projectKey}/repos/${repositorySlug}/reviewers`, {
|
|
249
|
+
params: {
|
|
250
|
+
sourceRepoId: repositoryId,
|
|
251
|
+
targetRepoId: repositoryId,
|
|
252
|
+
sourceRefId: toRefId(sourceBranch),
|
|
253
|
+
targetRefId: toRefId(targetBranch),
|
|
254
|
+
},
|
|
255
|
+
baseURL: this.client.defaults.baseURL?.replace('/rest/api/latest', '/rest'),
|
|
256
|
+
});
|
|
257
|
+
return response.data;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Browse repository contents at a given path (structured JSON response).
|
|
261
|
+
* Returns different response based on path type:
|
|
262
|
+
* - Directory: { children: [...] } with file/folder entries
|
|
263
|
+
* - File: { lines: [...] } with file content
|
|
264
|
+
* Check 'children' in response to determine type.
|
|
265
|
+
*/
|
|
266
|
+
async browse(params) {
|
|
267
|
+
const { projectKey, repositorySlug, path, at, limit, start } = params;
|
|
268
|
+
const queryParams = {};
|
|
269
|
+
if (at)
|
|
270
|
+
queryParams['at'] = at;
|
|
271
|
+
if (limit !== undefined)
|
|
272
|
+
queryParams['limit'] = limit;
|
|
273
|
+
if (start !== undefined)
|
|
274
|
+
queryParams['start'] = start;
|
|
275
|
+
const response = await this.client.get(`/projects/${projectKey}/repos/${repositorySlug}/browse/${path || ''}`, { params: queryParams });
|
|
276
|
+
return response.data;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Get raw content from repository (plain text).
|
|
280
|
+
* Returns file content as plain text, or git tree listing for directories.
|
|
281
|
+
*/
|
|
282
|
+
async getRawContent(params) {
|
|
283
|
+
const { projectKey, repositorySlug, path, at } = params;
|
|
284
|
+
const queryParams = {};
|
|
285
|
+
if (at)
|
|
286
|
+
queryParams['at'] = at;
|
|
287
|
+
const response = await this.client.get(`/projects/${projectKey}/repos/${repositorySlug}/raw/${path}`, {
|
|
288
|
+
params: queryParams,
|
|
289
|
+
headers: { Accept: 'text/plain' },
|
|
290
|
+
});
|
|
291
|
+
return response.data;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Check repository permissions for the authenticated token.
|
|
295
|
+
* Returns read/write access flags without modifying anything.
|
|
296
|
+
*/
|
|
297
|
+
async checkRepositoryPermissions(params) {
|
|
298
|
+
const { projectKey, repositorySlug } = params;
|
|
299
|
+
const repoPath = `/projects/${projectKey}/repos/${repositorySlug}`;
|
|
300
|
+
// Check READ permission
|
|
301
|
+
try {
|
|
302
|
+
await this.client.get(repoPath);
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
return { read: false, write: false };
|
|
306
|
+
}
|
|
307
|
+
// Check WRITE permission (try creating branch with invalid body)
|
|
308
|
+
try {
|
|
309
|
+
await this.client.post(`${repoPath}/branches`, {});
|
|
310
|
+
return { read: true, write: true }; // Unlikely path
|
|
311
|
+
}
|
|
312
|
+
catch (error) {
|
|
313
|
+
// Validation error ("name field is required") = has write
|
|
314
|
+
// Permission error = no write
|
|
315
|
+
const message = error?.response?.data?.errors?.[0]
|
|
316
|
+
?.message || '';
|
|
317
|
+
const write = message.includes('name') && message.includes('required');
|
|
318
|
+
return { read: true, write };
|
|
319
|
+
}
|
|
320
|
+
}
|
|
120
321
|
}
|
|
121
322
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|