| 1 | import type { ControlResult } from "./types"; |
| 2 | import type { |
| 3 | TaskActionRequest, TaskCatalogStatus, TaskEventPage, TaskEventPageRequest, TaskPage, TaskPageRequest, |
| 4 | } from "./taskCatalogTypes"; |
| 5 | |
| 6 | export interface TaskCatalogBindings { |
| 7 | ListTaskPage(req: TaskPageRequest): Promise<TaskPage>; |
| 8 | ListTaskEventPage(req: TaskEventPageRequest): Promise<TaskEventPage>; |
| 9 | StopTaskByKey(req: TaskActionRequest): Promise<ControlResult>; |
| 10 | CancelTaskByKey(req: TaskActionRequest): Promise<ControlResult>; |
| 11 | RequeueTaskByKey(req: TaskActionRequest): Promise<ControlResult>; |
| 12 | OpenTaskSessionByKey(req: { projectKey: string; taskId: string }): Promise<ControlResult>; |
| 13 | GetTaskCatalogStatus(): Promise<TaskCatalogStatus>; |
| 14 | RebuildTaskCatalog(): Promise<void>; |
| 15 | } |
| 16 | |
| 17 | export function makeMockTaskCatalogBindings(): TaskCatalogBindings { |
| 18 | const unavailable = (command: string): ControlResult => ({ schema_version: 1, command, task_id: "", accepted: false, idempotent: false, error: { code: "mock", message: "not available in browser mock" } }); |
| 19 | return { |
| 20 | async ListTaskPage() { return { items: [], nextCursor: "", revision: 1, partial: false, staleCursor: false, status: await this.GetTaskCatalogStatus() }; }, |
| 21 | async ListTaskEventPage(req) { return { items: [], nextSequence: req.after, partial: false }; }, |
| 22 | async StopTaskByKey() { return unavailable("stop"); }, async CancelTaskByKey() { return unavailable("cancel"); }, |
| 23 | async RequeueTaskByKey() { return unavailable("requeue"); }, async OpenTaskSessionByKey() { return unavailable("open_session"); }, |
| 24 | async GetTaskCatalogStatus() { return { state: "ready", mode: "memory", revision: 1, indexed: 0, total: 0, pending: 0, failed: 0 }; }, |
| 25 | async RebuildTaskCatalog() {}, |
| 26 | }; |
| 27 | } |
| 28 |