import type { GitHubAppRepositoryBranchPage, GitHubBindingStatus, GitHubInstallationBinding, GitHubRepository } from "@opengeni/contracts"; import { type GitHubRepositoryBranchesResponse, type ListGitHubRepositoryBranchesQuery } from "@opengeni/contracts/github-repository-contracts"; import { areGitHubRepositoriesAllowedForWorkspace, listGitHubInstallationAccessForWorkspace } from "@opengeni/db"; import type { ApiRouteDeps } from "@opengeni/core"; export type GitHubRepositoryBranchAuthorityErrorCode = "changed" | "not_authorized"; export declare class GitHubRepositoryBranchAuthorityError extends Error { readonly code: GitHubRepositoryBranchAuthorityErrorCode; constructor(code: GitHubRepositoryBranchAuthorityErrorCode); } export type WorkspaceGitHubRepositoryBranchServices = { listInstallationAccess: typeof listGitHubInstallationAccessForWorkspace; areRepositoriesAllowed: typeof areGitHubRepositoriesAllowedForWorkspace; listProviderBranches: (deps: ApiRouteDeps, input: { installationId: number; repositoryId: number; page: number; limit: number; }) => Promise; }; export declare function listWorkspaceGitHubInstallationBindings(deps: ApiRouteDeps, workspaceId: string): Promise; export declare function githubBindingStatus(configured: boolean, installations: GitHubInstallationBinding[]): GitHubBindingStatus; export type LiveGitHubInstallation = { installationId: number; accountId: number; suspended: boolean; }; export declare function githubInstallationBindingLifecycle(stored: Awaited>[number], liveById: Map, installationId: number, lifecycleVerified: boolean): GitHubInstallationBinding["lifecycle"]; export declare function listWorkspaceGitHubRepositories(deps: ApiRouteDeps, workspaceId: string): Promise; export declare function listWorkspaceGitHubRepositoryBranches(deps: ApiRouteDeps, input: { accountId: string; workspaceId: string; installationId: number; repositoryId: number; query: ListGitHubRepositoryBranchesQuery; }, services?: WorkspaceGitHubRepositoryBranchServices): Promise;