@gohcltech/bitbucket-mcp
Version:
Bitbucket integration for Claude via Model Context Protocol
323 lines • 15.6 kB
TypeScript
/**
* @fileoverview Main Bitbucket client facade that composes all domain-specific clients.
*
* This module provides the primary interface for interacting with the Bitbucket API
* through a facade pattern that delegates operations to specialized domain clients.
* It maintains backward compatibility while providing a cleaner, more organized structure.
*
* Usage patterns:
* - client.workspaces.list()
* - client.repositories.create(workspace, name, config)
* - client.branches.list(workspace, repo)
* - client.pullRequests.create(workspace, repo, prData)
* - client.commits.getDiff(workspace, repo, hash)
* - client.issues.create(workspace, repo, issueData)
*
*/
import { AuthService } from '../auth-service.js';
import { WorkspaceClient } from './workspace-client.js';
import { RepositoryClient } from './repository-client.js';
import { BranchClient } from './branch-client.js';
import { PullRequestClient } from './pull-request-client.js';
import { CommitClient } from './commit-client.js';
import { IssueClient } from './issue-client.js';
import { BitbucketApiResponse } from './base-client.js';
export type { BitbucketApiResponse } from './base-client.js';
export type { Workspace, Repository, Branch, PullRequest, Comment, Commit, CommitDiff, Issue, IssueComment, BranchingModel, BranchPermissions, DefaultReviewers, Component, Milestone, Version, } from '../types/index.js';
/**
* Main Bitbucket API client facade.
*
* This class provides a unified interface to all Bitbucket API operations
* through domain-specific client instances. Each domain client handles
* its own specialized operations while sharing common infrastructure
* from the BaseClient.
*
* The facade pattern allows for:
* - Clean separation of concerns by domain
* - Consistent error handling and logging
* - Shared authentication and rate limiting
* - Backward compatibility with existing code
* - Easy testing and mocking of specific domains
*/
export declare class BitbucketClient {
/** Domain-specific client instances */
readonly workspaces: WorkspaceClient;
readonly repositories: RepositoryClient;
readonly branches: BranchClient;
readonly pullRequests: PullRequestClient;
readonly commits: CommitClient;
readonly issues: IssueClient;
/** Logger instance for client-level operations */
private logger;
/**
* Creates a new Bitbucket API client facade.
*
* Initializes all domain-specific clients with the shared authentication service,
* ensuring consistent authentication and configuration across all operations.
*
* @param authService - Authentication service for token management
*/
constructor(authService: AuthService);
/**
* @deprecated Use client.workspaces.getWorkspaces() instead
*/
getWorkspaces(): Promise<BitbucketApiResponse<import("../types/index.js").Workspace>>;
/**
* @deprecated Use client.workspaces.getAllWorkspaces() instead
*/
getAllWorkspaces(): Promise<import("../types/index.js").Workspace[]>;
/**
* @deprecated Use client.workspaces.getWorkspace() instead
*/
getWorkspace(workspaceSlug: string): Promise<import("../types/index.js").Workspace>;
/**
* @deprecated Use client.repositories.getRepositories() instead
*/
getRepositories(workspaceSlug: string): Promise<BitbucketApiResponse<import("../types/index.js").Repository>>;
/**
* @deprecated Use client.repositories.getAllRepositories() instead
*/
getAllRepositories(workspaceSlug: string): Promise<import("../types/index.js").Repository[]>;
/**
* @deprecated Use client.repositories.getRepository() instead
*/
getRepository(workspaceSlug: string, repoSlug: string): Promise<import("../types/index.js").Repository>;
/**
* @deprecated Use client.repositories.createRepository() instead
*/
createRepository(workspaceSlug: string, name: string, payload: any): Promise<import("../types/index.js").Repository>;
/**
* @deprecated Use client.repositories.updateRepository() instead
*/
updateRepository(workspaceSlug: string, repoSlug: string, payload: any): Promise<import("../types/index.js").Repository>;
/**
* @deprecated Use client.repositories.deleteRepository() instead
*/
deleteRepository(workspaceSlug: string, repoSlug: string): Promise<void>;
/**
* @deprecated Use client.branches.getBranches() instead
*/
getBranches(workspaceSlug: string, repoSlug: string): Promise<BitbucketApiResponse<import("../types/index.js").Branch>>;
/**
* @deprecated Use client.branches.getAllBranches() instead
*/
getAllBranches(workspaceSlug: string, repoSlug: string): Promise<import("../types/index.js").Branch[]>;
/**
* @deprecated Use client.branches.getBranch() instead
*/
getBranch(workspaceSlug: string, repoSlug: string, branchName: string): Promise<import("../types/index.js").Branch>;
/**
* @deprecated Use client.branches.createBranch() instead
*/
createBranch(workspaceSlug: string, repoSlug: string, payload: any): Promise<import("../types/index.js").Branch>;
/**
* @deprecated Use client.branches.deleteBranch() instead
*/
deleteBranch(workspaceSlug: string, repoSlug: string, branchName: string): Promise<void>;
/**
* @deprecated Use client.branches.getBranchingModel() instead
*/
getBranchingModel(workspaceSlug: string, repoSlug: string): Promise<import("../types/index.js").BranchingModel>;
/**
* @deprecated Use client.branches.getBranchPermissions() instead
*/
getBranchPermissions(workspaceSlug: string, repoSlug: string, params?: Record<string, string>): Promise<import("../types/index.js").BranchPermissions>;
/**
* @deprecated Use client.branches.getAllBranchPermissions() instead
*/
getAllBranchPermissions(workspaceSlug: string, repoSlug: string, params?: Record<string, string>): Promise<{
id: number;
kind: "push" | "force" | "delete" | "restrict_merges" | "enforce_merge_checks";
pattern: string;
users?: Array<{
display_name: string;
uuid: string;
}>;
groups?: Array<{
name: string;
slug: string;
}>;
value?: string | number | boolean;
links?: {
self: {
href: string;
};
};
}[]>;
/**
* @deprecated Use client.branches.getDefaultReviewers() instead
*/
getDefaultReviewers(workspaceSlug: string, repoSlug: string, params?: Record<string, string>): Promise<import("../types/index.js").DefaultReviewers>;
/**
* @deprecated Use client.branches.getAllDefaultReviewers() instead
*/
getAllDefaultReviewers(workspaceSlug: string, repoSlug: string, params?: Record<string, string>): Promise<{
user: {
display_name: string;
uuid: string;
account_id: string;
links: {
avatar: {
href: string;
};
html: {
href: string;
};
};
};
pattern?: string;
repository?: {
name: string;
full_name: string;
uuid: string;
};
}[]>;
/**
* @deprecated Use client.pullRequests.getPullRequests() instead
*/
getPullRequests(workspaceSlug: string, repoSlug: string, params?: Record<string, string>): Promise<BitbucketApiResponse<import("../types/index.js").PullRequest>>;
/**
* @deprecated Use client.pullRequests.getAllPullRequests() instead
*/
getAllPullRequests(workspaceSlug: string, repoSlug: string, params?: Record<string, string>): Promise<import("../types/index.js").PullRequest[]>;
/**
* @deprecated Use client.pullRequests.getPullRequest() instead
*/
getPullRequest(workspaceSlug: string, repoSlug: string, pullRequestId: number): Promise<import("../types/index.js").PullRequest>;
/**
* @deprecated Use client.pullRequests.createPullRequest() instead
*/
createPullRequest(workspaceSlug: string, repoSlug: string, payload: any): Promise<import("../types/index.js").PullRequest>;
/**
* @deprecated Use client.pullRequests.updatePullRequest() instead
*/
updatePullRequest(workspaceSlug: string, repoSlug: string, pullRequestId: number, payload: any): Promise<import("../types/index.js").PullRequest>;
/**
* @deprecated Use client.pullRequests.approvePullRequest() instead
*/
approvePullRequest(workspaceSlug: string, repoSlug: string, pullRequestId: number): Promise<void>;
/**
* @deprecated Use client.pullRequests.unapprovePullRequest() instead
*/
unapprovePullRequest(workspaceSlug: string, repoSlug: string, pullRequestId: number): Promise<void>;
/**
* @deprecated Use client.pullRequests.mergePullRequest() instead
*/
mergePullRequest(workspaceSlug: string, repoSlug: string, pullRequestId: number, payload?: any): Promise<import("../types/index.js").PullRequest>;
/**
* @deprecated Use client.pullRequests.declinePullRequest() instead
*/
declinePullRequest(workspaceSlug: string, repoSlug: string, pullRequestId: number): Promise<import("../types/index.js").PullRequest>;
/**
* @deprecated Use client.pullRequests.addComment() instead
*/
addComment(workspaceSlug: string, repoSlug: string, pullRequestId: number, payload: any): Promise<import("../types/index.js").Comment>;
/**
* @deprecated Use client.pullRequests.getComments() instead
*/
getComments(workspaceSlug: string, repoSlug: string, pullRequestId: number): Promise<BitbucketApiResponse<import("../types/index.js").Comment>>;
/**
* @deprecated Use client.pullRequests.getAllComments() instead
*/
getAllComments(workspaceSlug: string, repoSlug: string, pullRequestId: number): Promise<import("../types/index.js").Comment[]>;
/**
* @deprecated Use client.commits.getCommits() instead
*/
getCommits(workspaceSlug: string, repoSlug: string, params?: Record<string, string>): Promise<BitbucketApiResponse<import("../types/index.js").Commit>>;
/**
* @deprecated Use client.commits.getAllCommits() instead
*/
getAllCommits(workspaceSlug: string, repoSlug: string, params?: Record<string, string>): Promise<import("../types/index.js").Commit[]>;
/**
* @deprecated Use client.commits.getCommit() instead
*/
getCommit(workspaceSlug: string, repoSlug: string, commitHash: string): Promise<import("../types/index.js").Commit>;
/**
* @deprecated Use client.commits.getCommitDiff() instead
*/
getCommitDiff(workspaceSlug: string, repoSlug: string, commitHash: string, params?: Record<string, string>): Promise<import("../types/index.js").CommitDiff>;
/**
* @deprecated Use client.commits.getCommitPatch() instead
*/
getCommitPatch(workspaceSlug: string, repoSlug: string, commitHash: string): Promise<string>;
/**
* @deprecated Use client.issues.getIssues() instead
*/
getIssues(workspaceSlug: string, repoSlug: string, params?: Record<string, string | number>): Promise<BitbucketApiResponse<import("../types/index.js").Issue>>;
/**
* @deprecated Use client.issues.getAllIssues() instead
*/
getAllIssues(workspaceSlug: string, repoSlug: string, params?: Record<string, string | number>): Promise<import("../types/index.js").Issue[]>;
/**
* @deprecated Use client.issues.getIssue() instead
*/
getIssue(workspaceSlug: string, repoSlug: string, issueId: number): Promise<import("../types/index.js").Issue>;
/**
* @deprecated Use client.issues.createIssue() instead
*/
createIssue(workspaceSlug: string, repoSlug: string, payload: any): Promise<import("../types/index.js").Issue>;
/**
* @deprecated Use client.issues.updateIssue() instead
*/
updateIssue(workspaceSlug: string, repoSlug: string, issueId: number, payload: any): Promise<import("../types/index.js").Issue>;
/**
* @deprecated Use client.issues.deleteIssue() instead
*/
deleteIssue(workspaceSlug: string, repoSlug: string, issueId: number): Promise<void>;
/**
* @deprecated Use client.issues.getIssueComments() instead
*/
getIssueComments(workspaceSlug: string, repoSlug: string, issueId: number, params?: Record<string, string | number>): Promise<BitbucketApiResponse<import("../types/index.js").IssueComment>>;
/**
* @deprecated Use client.issues.addIssueComment() instead
*/
addIssueComment(workspaceSlug: string, repoSlug: string, issueId: number, content: string): Promise<import("../types/index.js").IssueComment>;
/**
* @deprecated Use client.issues.getComponents() instead
*/
getComponents(workspaceSlug: string, repoSlug: string): Promise<BitbucketApiResponse<import("../types/index.js").Component>>;
/**
* @deprecated Use client.issues.getMilestones() instead
*/
getMilestones(workspaceSlug: string, repoSlug: string, params?: Record<string, string>): Promise<BitbucketApiResponse<import("../types/index.js").Milestone>>;
/**
* @deprecated Use client.issues.getVersions() instead
*/
getVersions(workspaceSlug: string, repoSlug: string, params?: Record<string, string | boolean>): Promise<BitbucketApiResponse<import("../types/index.js").Version>>;
/**
* @deprecated Use client.issues.assignIssue() instead
*/
assignIssue(workspaceSlug: string, repoSlug: string, issueId: number, assignee: string): Promise<import("../types/index.js").Issue>;
/**
* @deprecated Use client.issues.voteIssue() instead
*/
voteIssue(workspaceSlug: string, repoSlug: string, issueId: number): Promise<void>;
/**
* @deprecated Use client.issues.watchIssue() instead
*/
watchIssue(workspaceSlug: string, repoSlug: string, issueId: number, watch?: boolean): Promise<void>;
searchIssues(workspaceSlug: string, repoSlug: string, query: string, params?: Record<string, string | number>): Promise<void>;
getIssueChanges(workspaceSlug: string, repoSlug: string, issueId: number): Promise<void>;
getIssueWatchers(workspaceSlug: string, repoSlug: string, issueId: number): Promise<void>;
getIssueComment(workspaceSlug: string, repoSlug: string, issueId: number, commentId: number): Promise<void>;
updateIssueComment(workspaceSlug: string, repoSlug: string, issueId: number, commentId: number, content: string): Promise<void>;
deleteIssueComment(workspaceSlug: string, repoSlug: string, issueId: number, commentId: number): Promise<void>;
getComponent(workspaceSlug: string, repoSlug: string, componentId: number): Promise<void>;
getMilestone(workspaceSlug: string, repoSlug: string, milestoneId: number): Promise<void>;
getVersion(workspaceSlug: string, repoSlug: string, versionId: number): Promise<void>;
/**
* Performs a health check to verify API connectivity and authentication.
*
* This method tests both authentication status and basic API connectivity
* by making a simple API call. Use this to verify the client is properly
* configured and can communicate with Bitbucket.
*
* @returns Promise resolving to health status including authentication state
*/
healthCheck(): Promise<{
status: 'ok' | 'error';
isAuthenticated: boolean;
timestamp: number;
}>;
}
//# sourceMappingURL=bitbucket-client.d.ts.map