import type { CreateWebhookRequest, GetMeResponse, PublicAppConfigResponse, GetProjectRunsResponse, GetProjectsResponse, GetProjectWebhooksResponse, LogStreamTicketResponse, ProjectDetail, ProjectResponse, RotateWebhookSecretResponse, RunDetail, TriggerRunAcceptedResponse, TriggerRunRequest, UpdateWebhookRequest, UpsertWebhookResponse, WebhookProvider, } from "@/contracts"; export interface ApiClient { getAppConfig(): Promise; logout(): Promise; getMe(): Promise; getProjects(): Promise; createProject(payload: unknown): Promise; updateProject(projectId: string, payload: unknown): Promise; getProjectDetail(projectId: string): Promise; getProjectRuns(projectId: string, query?: { limit?: number; cursor?: string }): Promise; triggerRun(projectId: string, payload?: TriggerRunRequest): Promise; getRunDetail(runId: string): Promise; cancelRun(runId: string): Promise; getLogStreamTicket(runId: string): Promise; getProjectWebhooks(projectId: string): Promise; createWebhook( projectId: string, provider: WebhookProvider, payload: CreateWebhookRequest, ): Promise; updateWebhook( projectId: string, provider: WebhookProvider, payload: UpdateWebhookRequest, ): Promise; rotateWebhookSecret(projectId: string, provider: WebhookProvider): Promise; deleteWebhook(projectId: string, provider: WebhookProvider): Promise; } export class ApiError extends Error { public readonly status: number; public readonly code: string; public readonly details: unknown; public constructor(status: number, code: string, message: string, details?: unknown) { super(message); this.name = "ApiError"; this.status = status; this.code = code; this.details = details ?? null; } }