cli / mcp for bitbucket
1import {
2 getRepositoriesByWorkspaceByRepoSlugCommitByCommit,
3 getRepositoriesByWorkspaceByRepoSlugCommits,
4} from '../generated/bitbucket-client/sdk.gen';
5import type { BaseCommit, Commit } from '../generated/bitbucket-client/types.gen';
6import type { PaginationParams } from '../types/pagination.types';
7import { apiError, fail, ok, type Result } from '../types/result.types';
8
9export type ListCommitsParams = {
10 workspace: string;
11 repoSlug: string;
12 revision?: string;
13} & PaginationParams;
14
15export type GetCommitParams = {
16 workspace: string;
17 repoSlug: string;
18 commit: string;
19};
20
21export const listCommits = async (params: ListCommitsParams): Promise<Result<BaseCommit[]>> => {
22 const { workspace, repoSlug } = params;
23 const response = await getRepositoriesByWorkspaceByRepoSlugCommits({
24 path: { workspace, repo_slug: repoSlug },
25 });
26
27 if (response.error) {
28 return fail(apiError(response.response.status, 'Failed to list commits', response.error));
29 }
30
31 return ok(response.data?.values ?? []);
32};
33
34export const getCommit = async (params: GetCommitParams): Promise<Result<Commit>> => {
35 const { workspace, repoSlug, commit } = params;
36 const response = await getRepositoriesByWorkspaceByRepoSlugCommitByCommit({
37 path: { workspace, repo_slug: repoSlug, commit },
38 });
39
40 if (response.error) {
41 return fail(apiError(response.response.status, `Commit '${commit}' not found`, response.error));
42 }
43
44 return response.data ? ok(response.data) : fail(apiError(404, `Commit '${commit}' not found`));
45};