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/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
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}