Skip to content
File

Blob: src/client/lib/api-contract.ts

typescript61 lines
1import type {
2 CreateWebhookRequest,
3 GetMeResponse,
4 PublicAppConfigResponse,
5 GetProjectRunsResponse,
6 GetProjectsResponse,
7 GetProjectWebhooksResponse,
8 LogStreamTicketResponse,
9 ProjectDetail,
10 ProjectResponse,
11 RotateWebhookSecretResponse,
12 RunDetail,
13 TriggerRunAcceptedResponse,
14 TriggerRunRequest,
15 UpdateWebhookRequest,
16 UpsertWebhookResponse,
17 WebhookProvider,
18} from "@/contracts";
19 
20export interface ApiClient {
21 getAppConfig(): Promise<PublicAppConfigResponse>;
22 logout(): Promise<void>;
23 getMe(): Promise<GetMeResponse>;
24 getProjects(): Promise<GetProjectsResponse>;
25 createProject(payload: unknown): Promise<ProjectResponse>;
26 updateProject(projectId: string, payload: unknown): Promise<ProjectResponse>;
27 getProjectDetail(projectId: string): Promise<ProjectDetail>;
28 getProjectRuns(projectId: string, query?: { limit?: number; cursor?: string }): Promise<GetProjectRunsResponse>;
29 triggerRun(projectId: string, payload?: TriggerRunRequest): Promise<TriggerRunAcceptedResponse>;
30 getRunDetail(runId: string): Promise<RunDetail>;
31 cancelRun(runId: string): Promise<RunDetail>;
32 getLogStreamTicket(runId: string): Promise<LogStreamTicketResponse>;
33 getProjectWebhooks(projectId: string): Promise<GetProjectWebhooksResponse>;
34 createWebhook(
35 projectId: string,
36 provider: WebhookProvider,
37 payload: CreateWebhookRequest,
38 ): Promise<UpsertWebhookResponse>;
39 updateWebhook(
40 projectId: string,
41 provider: WebhookProvider,
42 payload: UpdateWebhookRequest,
43 ): Promise<UpsertWebhookResponse>;
44 rotateWebhookSecret(projectId: string, provider: WebhookProvider): Promise<RotateWebhookSecretResponse>;
45 deleteWebhook(projectId: string, provider: WebhookProvider): Promise<void>;
46}
47 
48export class ApiError extends Error {
49 public readonly status: number;
50 public readonly code: string;
51 public readonly details: unknown;
52 
53 public constructor(status: number, code: string, message: string, details?: unknown) {
54 super(message);
55 this.name = "ApiError";
56 this.status = status;
57 this.code = code;
58 this.details = details ?? null;
59 }
60}