import type { GitHubAPI, GitHubAuthStatus, GitHubIssueCommentsResult, GitHubIssueGetResult, GitHubIssuesListResult, GitHubPullRequestContextResult, GitHubPullRequestsListResult, GitHubPullRequest, GitHubPullRequestCreateInput, GitHubPullRequestMergeInput, GitHubPullRequestMergeResult, GitHubPullRequestReadyInput, GitHubPullRequestReadyResult, GitHubPullRequestUpdateInput, GitHubPullRequestStatus, GitHubDeviceFlowComplete, GitHubDeviceFlowStart, GitHubRepoUpstreamResult, GitHubUserSummary, } from '@openchamber/ui/lib/api/types'; import { sendBridgeMessage } from './bridge'; export const createVSCodeGitHubAPI = (): GitHubAPI => ({ authStatus: async () => sendBridgeMessage('api:github/auth:status'), authStart: async () => sendBridgeMessage('api:github/auth:start'), authComplete: async (deviceCode: string) => sendBridgeMessage('api:github/auth:complete', { deviceCode }), authDisconnect: async () => sendBridgeMessage<{ removed: boolean }>('api:github/auth:disconnect'), authActivate: async (accountId: string) => sendBridgeMessage('api:github/auth:activate', { accountId }), authSetGhCliDisabled: async () => { throw new Error('gh CLI fallback is not supported in VS Code'); }, me: async () => sendBridgeMessage('api:github/me'), prStatus: async (directory: string, branch: string) => sendBridgeMessage('api:github/pr:status', { directory, branch }), prCreate: async (payload: GitHubPullRequestCreateInput) => sendBridgeMessage('api:github/pr:create', payload), prUpdate: async (payload: GitHubPullRequestUpdateInput) => sendBridgeMessage('api:github/pr:update', payload), prMerge: async (payload: GitHubPullRequestMergeInput) => sendBridgeMessage('api:github/pr:merge', payload), prReady: async (payload: GitHubPullRequestReadyInput) => sendBridgeMessage('api:github/pr:ready', payload), issuesList: async (directory: string, options?: { page?: number; query?: string }) => sendBridgeMessage('api:github/issues:list', { directory, page: options?.page ?? 1, query: options?.query ?? '' }), issueGet: async (directory: string, number: number, options?: { sourceRepo?: { owner: string; repo: string } | null }) => sendBridgeMessage('api:github/issues:get', { directory, number, sourceRepo: options?.sourceRepo ?? null }), issueComments: async (directory: string, number: number, options?: { sourceRepo?: { owner: string; repo: string } | null }) => sendBridgeMessage('api:github/issues:comments', { directory, number, sourceRepo: options?.sourceRepo ?? null }), prsList: async (directory: string, options?: { page?: number; query?: string }) => sendBridgeMessage('api:github/pulls:list', { directory, page: options?.page ?? 1, query: options?.query ?? '' }), prContext: async (directory: string, number: number, options?: { includeDiff?: boolean; includeCheckDetails?: boolean; sourceRepo?: { owner: string; repo: string } | null }) => sendBridgeMessage('api:github/pulls:context', { directory, number, includeDiff: Boolean(options?.includeDiff), includeCheckDetails: Boolean(options?.includeCheckDetails), sourceRepo: options?.sourceRepo ?? null, }), repoUpstream: async (directory: string) => sendBridgeMessage('api:github/repo:upstream', { directory }), repoBranches: async (owner: string, repo: string) => sendBridgeMessage('api:github/repo:branches', { owner, repo }), });