bitbucket-mcp-server 1.0.16 → 1.0.18

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 CHANGED
@@ -73,6 +73,7 @@ To create a User API token:
73
73
 
74
74
  | Variable | Default | Description |
75
75
  |---|---|---|
76
+ | `BITBUCKET_WORKSPACE` | *(none)* | Default workspace used by all tools when `workspace` parameter is not provided |
76
77
  | `BITBUCKET_LOG_LEVEL` | `info` | Log verbosity: `error`, `warn`, `info`, `debug` |
77
78
  | `BITBUCKET_TIMEOUT` | `30000` | Request timeout in milliseconds (1000–60000) |
78
79
  | `BITBUCKET_ENABLE_METRICS` | `true` | Enable performance metrics collection (`true`/`false`) |
@@ -96,7 +97,8 @@ Add this server to your MCP client configuration. For Claude Desktop, add to you
96
97
  "args": ["/ABSOLUTE/PATH/TO/bitbucket_mcp/build/index.js"],
97
98
  "env": {
98
99
  "BITBUCKET_USERNAME": "your-atlassian-email@example.com",
99
- "BITBUCKET_API_TOKEN": "your-api-token"
100
+ "BITBUCKET_API_TOKEN": "your-api-token",
101
+ "BITBUCKET_WORKSPACE": "your-workspace-name"
100
102
  }
101
103
  }
102
104
  }
@@ -112,7 +114,8 @@ Add this server to your MCP client configuration. For Claude Desktop, add to you
112
114
  "args": ["C:\\ABSOLUTE\\PATH\\TO\\bitbucket_mcp\\build\\index.js"],
113
115
  "env": {
114
116
  "BITBUCKET_USERNAME": "your-atlassian-email@example.com",
115
- "BITBUCKET_API_TOKEN": "your-api-token"
117
+ "BITBUCKET_API_TOKEN": "your-api-token",
118
+ "BITBUCKET_WORKSPACE": "your-workspace-name"
116
119
  }
117
120
  }
118
121
  }
@@ -128,7 +131,8 @@ Add this server to your MCP client configuration. For Claude Desktop, add to you
128
131
  "args": ["bitbucket-mcp-server"],
129
132
  "env": {
130
133
  "BITBUCKET_USERNAME": "your-atlassian-email@example.com",
131
- "BITBUCKET_API_TOKEN": "your-api-token"
134
+ "BITBUCKET_API_TOKEN": "your-api-token",
135
+ "BITBUCKET_WORKSPACE": "your-workspace-name"
132
136
  }
133
137
  }
134
138
  }
@@ -137,6 +141,8 @@ Add this server to your MCP client configuration. For Claude Desktop, add to you
137
141
 
138
142
  > **Note:** If you are using a Workspace or Project access token instead of a User API token, you can omit `BITBUCKET_USERNAME` from the configuration.
139
143
 
144
+ > **Tip:** Set `BITBUCKET_WORKSPACE` to your default workspace so you don't need to pass `workspace` on every tool call. You can still override it per-call by providing the `workspace` argument explicitly.
145
+
140
146
  ## Usage Examples
141
147
 
142
148
  ### List Repositories
@@ -215,7 +221,7 @@ Show the last 5 commits on the main branch of myworkspace/myrepo
215
221
  Lists repositories in a Bitbucket workspace.
216
222
 
217
223
  **Parameters:**
218
- - `workspace` (required): Bitbucket workspace name
224
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
219
225
  - `role` (optional): Filter by user role (owner, admin, contributor, member)
220
226
  - `sort` (optional): Sort by (created_on, updated_on, name, size)
221
227
 
@@ -223,14 +229,14 @@ Lists repositories in a Bitbucket workspace.
223
229
  Gets detailed information about a specific repository.
224
230
 
225
231
  **Parameters:**
226
- - `workspace` (required): Bitbucket workspace name
232
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
227
233
  - `repo_slug` (required): Repository name/slug
228
234
 
229
235
  ### list-pull-requests
230
236
  Lists pull requests for a repository.
231
237
 
232
238
  **Parameters:**
233
- - `workspace` (required): Bitbucket workspace name
239
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
234
240
  - `repo_slug` (required): Repository name/slug
235
241
  - `state` (optional): Filter by state (OPEN, MERGED, DECLINED, SUPERSEDED)
236
242
 
@@ -238,7 +244,7 @@ Lists pull requests for a repository.
238
244
  Gets detailed information about a specific pull request.
239
245
 
240
246
  **Parameters:**
241
- - `workspace` (required): Bitbucket workspace name
247
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
242
248
  - `repo_slug` (required): Repository name/slug
243
249
  - `pull_request_id` (required): Pull request ID
244
250
 
@@ -246,7 +252,7 @@ Gets detailed information about a specific pull request.
246
252
  Creates a new pull request in a repository.
247
253
 
248
254
  **Parameters:**
249
- - `workspace` (required): Bitbucket workspace name
255
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
250
256
  - `repo_slug` (required): Repository name/slug
251
257
  - `title` (required): Title of the pull request
252
258
  - `source_branch` (required): Source branch name (the branch with your changes)
@@ -261,7 +267,7 @@ Creates a new pull request in a repository.
261
267
  Updates the title and/or description of an existing pull request.
262
268
 
263
269
  **Parameters:**
264
- - `workspace` (required): Bitbucket workspace name
270
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
265
271
  - `repo_slug` (required): Repository name/slug
266
272
  - `pull_request_id` (required): Pull request ID
267
273
  - `title` (optional): New title for the pull request
@@ -273,7 +279,7 @@ Updates the title and/or description of an existing pull request.
273
279
  Creates a comment on a pull request. This tool can create both regular comments and inline comments on specific files and line numbers.
274
280
 
275
281
  **Parameters:**
276
- - `workspace` (required): Bitbucket workspace name
282
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
277
283
  - `repo_slug` (required): Repository name/slug
278
284
  - `pull_request_id` (required): Pull request ID
279
285
  - `content` (required): Comment content in plain text
@@ -287,7 +293,7 @@ Creates a comment on a pull request. This tool can create both regular comments
287
293
  Lists all comments on a pull request, including inline comments and replies.
288
294
 
289
295
  **Parameters:**
290
- - `workspace` (required): Bitbucket workspace name
296
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
291
297
  - `repo_slug` (required): Repository name/slug
292
298
  - `pull_request_id` (required): Pull request ID
293
299
 
@@ -295,7 +301,7 @@ Lists all comments on a pull request, including inline comments and replies.
295
301
  Gets detailed information about a specific comment on a pull request.
296
302
 
297
303
  **Parameters:**
298
- - `workspace` (required): Bitbucket workspace name
304
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
299
305
  - `repo_slug` (required): Repository name/slug
300
306
  - `pull_request_id` (required): Pull request ID
301
307
  - `comment_id` (required): Comment ID
@@ -304,7 +310,7 @@ Gets detailed information about a specific comment on a pull request.
304
310
  Lists issues for a repository.
305
311
 
306
312
  **Parameters:**
307
- - `workspace` (required): Bitbucket workspace name
313
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
308
314
  - `repo_slug` (required): Repository name/slug
309
315
  - `state` (optional): Filter by state (new, open, resolved, on hold, invalid, duplicate, wontfix, closed)
310
316
  - `kind` (optional): Filter by kind (bug, enhancement, proposal, task)
@@ -313,23 +319,24 @@ Lists issues for a repository.
313
319
  Lists branches for a repository.
314
320
 
315
321
  **Parameters:**
316
- - `workspace` (required): Bitbucket workspace name
322
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
317
323
  - `repo_slug` (required): Repository name/slug
318
324
 
319
325
  ### get-commits
320
326
  Gets recent commits for a repository.
321
327
 
322
328
  **Parameters:**
323
- - `workspace` (required): Bitbucket workspace name
329
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
324
330
  - `repo_slug` (required): Repository name/slug
325
331
  - `branch` (optional): Specific branch name
326
- - `limit` (optional): Number of commits (1-50, default: 10)
332
+ - `page` (optional): Page number or opaque next page URL from Bitbucket pagination
333
+ - `pagelen` (optional): Number of commits per page (default: 10, min: 10, max: 100)
327
334
 
328
335
  ### get-commit
329
336
  Gets detailed information about a specific commit in a repository.
330
337
 
331
338
  **Parameters:**
332
- - `workspace` (required): Bitbucket workspace name
339
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
333
340
  - `repo_slug` (required): Repository name/slug
334
341
  - `commit_hash` (required): Commit hash (full 40-char or short 7+ char)
335
342
 
@@ -337,7 +344,7 @@ Gets detailed information about a specific commit in a repository.
337
344
  Searches across repositories, pull requests, issues, and commits in a workspace.
338
345
 
339
346
  **Parameters:**
340
- - `workspace` (required): Bitbucket workspace name
347
+ - `workspace` (optional): Bitbucket workspace name. Defaults to `BITBUCKET_WORKSPACE` env var if not provided.
341
348
  - `query` (required): Search query (searches in titles, descriptions, and content)
342
349
  - `types` (optional): Types of items to search (repositories, pull-requests, issues, commits) (default: `["repositories", "pull-requests", "issues"]`)
343
350
  - `limit` (optional): Maximum number of results per type (default: 10)
@@ -202,26 +202,38 @@ export declare class BitbucketAPI {
202
202
  pagelen?: number;
203
203
  }>;
204
204
  getRepository(workspace: string, repoSlug: string): Promise<Repository>;
205
- getPullRequests(workspace: string, repoSlug: string, state?: string, page?: string): Promise<{
205
+ getPullRequests(workspace: string, repoSlug: string, state?: string | string[], page?: string, pagelen?: number): Promise<{
206
206
  pullRequests: PullRequest[];
207
207
  hasMore: boolean;
208
+ next?: string;
209
+ page?: number;
210
+ pagelen?: number;
208
211
  }>;
209
212
  getPullRequest(workspace: string, repoSlug: string, pullRequestId: number): Promise<PullRequest>;
210
213
  updatePullRequest(workspace: string, repoSlug: string, pullRequestId: number, updates: {
211
214
  title?: string;
212
215
  description?: string;
213
216
  }): Promise<PullRequest>;
214
- getIssues(workspace: string, repoSlug: string, state?: string, page?: string): Promise<{
217
+ getIssues(workspace: string, repoSlug: string, state?: string, page?: string, pagelen?: number): Promise<{
215
218
  issues: Issue[];
216
219
  hasMore: boolean;
220
+ next?: string;
221
+ page?: number;
222
+ pagelen?: number;
217
223
  }>;
218
- getBranches(workspace: string, repoSlug: string, page?: string): Promise<{
224
+ getBranches(workspace: string, repoSlug: string, page?: string, pagelen?: number): Promise<{
219
225
  branches: Branch[];
220
226
  hasMore: boolean;
227
+ next?: string;
228
+ page?: number;
229
+ pagelen?: number;
221
230
  }>;
222
- getCommits(workspace: string, repoSlug: string, branch?: string, page?: string): Promise<{
231
+ getCommits(workspace: string, repoSlug: string, branch?: string, page?: string, pagelen?: number): Promise<{
223
232
  commits: Commit[];
224
233
  hasMore: boolean;
234
+ next?: string;
235
+ page?: number;
236
+ pagelen?: number;
225
237
  }>;
226
238
  getPullRequestComments(workspace: string, repoSlug: string, pullRequestId: number, options?: string | {
227
239
  page?: string;
@@ -209,18 +209,32 @@ export class BitbucketAPI {
209
209
  const url = `${BITBUCKET_API_BASE}/repositories/${workspace}/${repoSlug}`;
210
210
  return this.makeRequest(url);
211
211
  }
212
- async getPullRequests(workspace, repoSlug, state, page) {
212
+ async getPullRequests(workspace, repoSlug, state, page, pagelen) {
213
213
  let url = `${BITBUCKET_API_BASE}/repositories/${workspace}/${repoSlug}/pullrequests`;
214
- if (page) {
214
+ if (page && page.startsWith('http')) {
215
215
  url = page;
216
216
  }
217
- else if (state) {
218
- url += `?state=${state}`;
217
+ else {
218
+ const queryParams = new URLSearchParams();
219
+ if (state) {
220
+ const states = Array.isArray(state) ? state : [state];
221
+ for (const s of states) {
222
+ queryParams.append('state', s);
223
+ }
224
+ }
225
+ if (page)
226
+ queryParams.append('page', page);
227
+ const clampedPagelen = pagelen !== undefined ? Math.min(100, Math.max(10, pagelen)) : 10;
228
+ queryParams.append('pagelen', clampedPagelen.toString());
229
+ url += `?${queryParams.toString()}`;
219
230
  }
220
231
  const response = await this.makeRequest(url);
221
232
  return {
222
233
  pullRequests: response.values,
223
- hasMore: !!response.next
234
+ hasMore: !!response.next,
235
+ next: response.next,
236
+ page: response.page,
237
+ pagelen: response.pagelen
224
238
  };
225
239
  }
226
240
  async getPullRequest(workspace, repoSlug, pullRequestId) {
@@ -245,43 +259,75 @@ export class BitbucketAPI {
245
259
  body: JSON.stringify(payload)
246
260
  });
247
261
  }
248
- async getIssues(workspace, repoSlug, state, page) {
262
+ async getIssues(workspace, repoSlug, state, page, pagelen) {
249
263
  let url = `${BITBUCKET_API_BASE}/repositories/${workspace}/${repoSlug}/issues`;
250
- if (page) {
264
+ if (page && page.startsWith('http')) {
251
265
  url = page;
252
266
  }
253
- else if (state) {
254
- url += `?state=${state}`;
267
+ else {
268
+ const queryParams = new URLSearchParams();
269
+ if (state)
270
+ queryParams.append('state', state);
271
+ if (page)
272
+ queryParams.append('page', page);
273
+ const clampedPagelen = pagelen !== undefined ? Math.min(100, Math.max(10, pagelen)) : 10;
274
+ queryParams.append('pagelen', clampedPagelen.toString());
275
+ url += `?${queryParams.toString()}`;
255
276
  }
256
277
  const response = await this.makeRequest(url);
257
278
  return {
258
279
  issues: response.values,
259
- hasMore: !!response.next
280
+ hasMore: !!response.next,
281
+ next: response.next,
282
+ page: response.page,
283
+ pagelen: response.pagelen
260
284
  };
261
285
  }
262
- async getBranches(workspace, repoSlug, page) {
286
+ async getBranches(workspace, repoSlug, page, pagelen) {
263
287
  let url = `${BITBUCKET_API_BASE}/repositories/${workspace}/${repoSlug}/refs/branches`;
264
- if (page) {
288
+ if (page && page.startsWith('http')) {
265
289
  url = page;
266
290
  }
291
+ else {
292
+ const queryParams = new URLSearchParams();
293
+ if (page)
294
+ queryParams.append('page', page);
295
+ const clampedPagelen = pagelen !== undefined ? Math.min(100, Math.max(10, pagelen)) : 10;
296
+ queryParams.append('pagelen', clampedPagelen.toString());
297
+ url += `?${queryParams.toString()}`;
298
+ }
267
299
  const response = await this.makeRequest(url);
268
300
  return {
269
301
  branches: response.values,
270
- hasMore: !!response.next
302
+ hasMore: !!response.next,
303
+ next: response.next,
304
+ page: response.page,
305
+ pagelen: response.pagelen
271
306
  };
272
307
  }
273
- async getCommits(workspace, repoSlug, branch, page) {
308
+ async getCommits(workspace, repoSlug, branch, page, pagelen) {
274
309
  let url = `${BITBUCKET_API_BASE}/repositories/${workspace}/${repoSlug}/commits`;
275
- if (page) {
310
+ if (page && page.startsWith('http')) {
276
311
  url = page;
277
312
  }
278
- else if (branch) {
279
- url += `/${branch}`;
313
+ else {
314
+ if (branch) {
315
+ url += `/${branch}`;
316
+ }
317
+ const queryParams = new URLSearchParams();
318
+ if (page)
319
+ queryParams.append('page', page);
320
+ const clampedPagelen = pagelen !== undefined ? Math.min(100, Math.max(10, pagelen)) : 10;
321
+ queryParams.append('pagelen', clampedPagelen.toString());
322
+ url += `?${queryParams.toString()}`;
280
323
  }
281
324
  const response = await this.makeRequest(url);
282
325
  return {
283
326
  commits: response.values,
284
- hasMore: !!response.next
327
+ hasMore: !!response.next,
328
+ next: response.next,
329
+ page: response.page,
330
+ pagelen: response.pagelen
285
331
  };
286
332
  }
287
333
  async getPullRequestComments(workspace, repoSlug, pullRequestId, options) {
@@ -1 +1 @@
1
- {"version":3,"file":"bitbucket-api.js","sourceRoot":"","sources":["../src/bitbucket-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bitbucket-api.js","sourceRoot":"","sources":["../src/bitbucket-api.ts"],"names":[],"mappings":"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"}
@@ -764,5 +764,239 @@ describe('BitbucketAPI', () => {
764
764
  await expect(api.getPullRequestComment('ws', 'repo', 1, 999)).rejects.toThrow();
765
765
  });
766
766
  });
767
+ describe('getPullRequests', () => {
768
+ it('should return pull requests with pagination metadata', async () => {
769
+ const mockResponse = {
770
+ ok: true,
771
+ status: 200,
772
+ json: vi.fn().mockResolvedValue({
773
+ values: [{ id: 1, title: 'Test PR', state: 'OPEN' }],
774
+ page: 1,
775
+ pagelen: 10,
776
+ next: 'https://api.bitbucket.org/2.0/repositories/ws/repo/pullrequests?page=2',
777
+ }),
778
+ };
779
+ mockFetch.mockResolvedValue(mockResponse);
780
+ const result = await api.getPullRequests('ws', 'repo');
781
+ expect(result.pullRequests).toHaveLength(1);
782
+ expect(result.hasMore).toBe(true);
783
+ expect(result.next).toBe('https://api.bitbucket.org/2.0/repositories/ws/repo/pullrequests?page=2');
784
+ expect(result.page).toBe(1);
785
+ expect(result.pagelen).toBe(10);
786
+ });
787
+ it('should use opaque next URL directly when page starts with http', async () => {
788
+ const mockResponse = {
789
+ ok: true,
790
+ status: 200,
791
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
792
+ };
793
+ mockFetch.mockResolvedValue(mockResponse);
794
+ await api.getPullRequests('ws', 'repo', undefined, 'https://api.bitbucket.org/2.0/repositories/ws/repo/pullrequests?page=3&pagelen=25');
795
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/pullrequests?page=3&pagelen=25', expect.any(Object));
796
+ });
797
+ it('should include state filter when page is not an opaque URL', async () => {
798
+ const mockResponse = {
799
+ ok: true,
800
+ status: 200,
801
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
802
+ };
803
+ mockFetch.mockResolvedValue(mockResponse);
804
+ await api.getPullRequests('ws', 'repo', 'OPEN');
805
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/pullrequests?state=OPEN&pagelen=10', expect.any(Object));
806
+ });
807
+ it('should support multiple state values as repeated query parameters', async () => {
808
+ const mockResponse = {
809
+ ok: true,
810
+ status: 200,
811
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
812
+ };
813
+ mockFetch.mockResolvedValue(mockResponse);
814
+ await api.getPullRequests('ws', 'repo', ['OPEN', 'MERGED']);
815
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/pullrequests?state=OPEN&state=MERGED&pagelen=10', expect.any(Object));
816
+ });
817
+ it('should clamp pull request pagelen to Bitbucket minimum', async () => {
818
+ const mockResponse = {
819
+ ok: true,
820
+ status: 200,
821
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
822
+ };
823
+ mockFetch.mockResolvedValue(mockResponse);
824
+ await api.getPullRequests('ws', 'repo', undefined, undefined, 1);
825
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/pullrequests?pagelen=10', expect.any(Object));
826
+ });
827
+ it('should honor custom pull request pagelen within range', async () => {
828
+ const mockResponse = {
829
+ ok: true,
830
+ status: 200,
831
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
832
+ };
833
+ mockFetch.mockResolvedValue(mockResponse);
834
+ await api.getPullRequests('ws', 'repo', undefined, undefined, 50);
835
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/pullrequests?pagelen=50', expect.any(Object));
836
+ });
837
+ });
838
+ describe('getIssues', () => {
839
+ it('should return issues with pagination metadata', async () => {
840
+ const mockResponse = {
841
+ ok: true,
842
+ status: 200,
843
+ json: vi.fn().mockResolvedValue({
844
+ values: [{ id: 10, title: 'Test Issue', state: 'open', kind: 'bug' }],
845
+ page: 1,
846
+ pagelen: 10,
847
+ next: 'https://api.bitbucket.org/2.0/repositories/ws/repo/issues?page=2',
848
+ }),
849
+ };
850
+ mockFetch.mockResolvedValue(mockResponse);
851
+ const result = await api.getIssues('ws', 'repo');
852
+ expect(result.issues).toHaveLength(1);
853
+ expect(result.hasMore).toBe(true);
854
+ expect(result.next).toBe('https://api.bitbucket.org/2.0/repositories/ws/repo/issues?page=2');
855
+ expect(result.page).toBe(1);
856
+ expect(result.pagelen).toBe(10);
857
+ });
858
+ it('should use opaque next URL directly when page starts with http', async () => {
859
+ const mockResponse = {
860
+ ok: true,
861
+ status: 200,
862
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
863
+ };
864
+ mockFetch.mockResolvedValue(mockResponse);
865
+ await api.getIssues('ws', 'repo', undefined, 'https://api.bitbucket.org/2.0/repositories/ws/repo/issues?page=2&pagelen=25');
866
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/issues?page=2&pagelen=25', expect.any(Object));
867
+ });
868
+ it('should include state filter when page is not an opaque URL', async () => {
869
+ const mockResponse = {
870
+ ok: true,
871
+ status: 200,
872
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
873
+ };
874
+ mockFetch.mockResolvedValue(mockResponse);
875
+ await api.getIssues('ws', 'repo', 'open');
876
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/issues?state=open&pagelen=10', expect.any(Object));
877
+ });
878
+ it('should clamp issue pagelen to Bitbucket minimum', async () => {
879
+ const mockResponse = {
880
+ ok: true,
881
+ status: 200,
882
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
883
+ };
884
+ mockFetch.mockResolvedValue(mockResponse);
885
+ await api.getIssues('ws', 'repo', undefined, undefined, 1);
886
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/issues?pagelen=10', expect.any(Object));
887
+ });
888
+ });
889
+ describe('getBranches', () => {
890
+ it('should return branches with pagination metadata', async () => {
891
+ const mockResponse = {
892
+ ok: true,
893
+ status: 200,
894
+ json: vi.fn().mockResolvedValue({
895
+ values: [{ name: 'main', target: { hash: 'abc123', author: { raw: 'Test' }, message: 'Init', date: '2023-01-01' }, links: { html: { href: 'https://bitbucket.org' } } }],
896
+ page: 1,
897
+ pagelen: 10,
898
+ next: 'https://api.bitbucket.org/2.0/repositories/ws/repo/refs/branches?page=2',
899
+ }),
900
+ };
901
+ mockFetch.mockResolvedValue(mockResponse);
902
+ const result = await api.getBranches('ws', 'repo');
903
+ expect(result.branches).toHaveLength(1);
904
+ expect(result.hasMore).toBe(true);
905
+ expect(result.next).toBe('https://api.bitbucket.org/2.0/repositories/ws/repo/refs/branches?page=2');
906
+ expect(result.page).toBe(1);
907
+ expect(result.pagelen).toBe(10);
908
+ });
909
+ it('should use opaque next URL directly when page starts with http', async () => {
910
+ const mockResponse = {
911
+ ok: true,
912
+ status: 200,
913
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
914
+ };
915
+ mockFetch.mockResolvedValue(mockResponse);
916
+ await api.getBranches('ws', 'repo', 'https://api.bitbucket.org/2.0/repositories/ws/repo/refs/branches?page=3&pagelen=25');
917
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/refs/branches?page=3&pagelen=25', expect.any(Object));
918
+ });
919
+ it('should include default pagelen in the request URL', async () => {
920
+ const mockResponse = {
921
+ ok: true,
922
+ status: 200,
923
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
924
+ };
925
+ mockFetch.mockResolvedValue(mockResponse);
926
+ await api.getBranches('ws', 'repo');
927
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/refs/branches?pagelen=10', expect.any(Object));
928
+ });
929
+ it('should clamp branch pagelen to Bitbucket minimum', async () => {
930
+ const mockResponse = {
931
+ ok: true,
932
+ status: 200,
933
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
934
+ };
935
+ mockFetch.mockResolvedValue(mockResponse);
936
+ await api.getBranches('ws', 'repo', undefined, 1);
937
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/refs/branches?pagelen=10', expect.any(Object));
938
+ });
939
+ });
940
+ describe('getCommits', () => {
941
+ it('should return commits with pagination metadata', async () => {
942
+ const mockResponse = {
943
+ ok: true,
944
+ status: 200,
945
+ json: vi.fn().mockResolvedValue({
946
+ values: [{ hash: 'abc123def456', message: 'Fix bug', author: { raw: 'Dev' }, date: '2023-01-01', parents: [], links: { html: { href: 'https://bitbucket.org' } } }],
947
+ page: 1,
948
+ pagelen: 10,
949
+ next: 'https://api.bitbucket.org/2.0/repositories/ws/repo/commits?page=2',
950
+ }),
951
+ };
952
+ mockFetch.mockResolvedValue(mockResponse);
953
+ const result = await api.getCommits('ws', 'repo');
954
+ expect(result.commits).toHaveLength(1);
955
+ expect(result.hasMore).toBe(true);
956
+ expect(result.next).toBe('https://api.bitbucket.org/2.0/repositories/ws/repo/commits?page=2');
957
+ expect(result.page).toBe(1);
958
+ expect(result.pagelen).toBe(10);
959
+ });
960
+ it('should use opaque next URL directly when page starts with http', async () => {
961
+ const mockResponse = {
962
+ ok: true,
963
+ status: 200,
964
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
965
+ };
966
+ mockFetch.mockResolvedValue(mockResponse);
967
+ await api.getCommits('ws', 'repo', undefined, 'https://api.bitbucket.org/2.0/repositories/ws/repo/commits?page=3&pagelen=25');
968
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/commits?page=3&pagelen=25', expect.any(Object));
969
+ });
970
+ it('should append branch to the URL when branch is provided', async () => {
971
+ const mockResponse = {
972
+ ok: true,
973
+ status: 200,
974
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
975
+ };
976
+ mockFetch.mockResolvedValue(mockResponse);
977
+ await api.getCommits('ws', 'repo', 'main');
978
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/commits/main?pagelen=10', expect.any(Object));
979
+ });
980
+ it('should support custom pagelen for commits', async () => {
981
+ const mockResponse = {
982
+ ok: true,
983
+ status: 200,
984
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
985
+ };
986
+ mockFetch.mockResolvedValue(mockResponse);
987
+ await api.getCommits('ws', 'repo', undefined, undefined, 50);
988
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/commits?pagelen=50', expect.any(Object));
989
+ });
990
+ it('should clamp commit pagelen to Bitbucket minimum', async () => {
991
+ const mockResponse = {
992
+ ok: true,
993
+ status: 200,
994
+ json: vi.fn().mockResolvedValue({ values: [], next: null }),
995
+ };
996
+ mockFetch.mockResolvedValue(mockResponse);
997
+ await api.getCommits('ws', 'repo', undefined, undefined, 1);
998
+ expect(mockFetch).toHaveBeenCalledWith('https://api.bitbucket.org/2.0/repositories/ws/repo/commits?pagelen=10', expect.any(Object));
999
+ });
1000
+ });
767
1001
  });
768
1002
  //# sourceMappingURL=bitbucket-api.test.js.map