( app: TasksRouteHost, ix: IInstantiationService, )
| 69 | const detailsSchema = z.array(z.object({ path: z.string(), message: z.string() })); |
| 70 | |
| 71 | export function registerTasksRoutes( |
| 72 | app: TasksRouteHost, |
| 73 | ix: IInstantiationService, |
| 74 | ): void { |
| 75 | // GET /sessions/{session_id}/tasks ------------------------------------ |
| 76 | const listRoute = defineRoute( |
| 77 | { |
| 78 | method: 'GET', |
| 79 | path: '/sessions/{session_id}/tasks', |
| 80 | params: sessionIdParamSchema, |
| 81 | querystring: listTasksQuerySchema, |
| 82 | success: { data: listTasksResponseSchema }, |
| 83 | errors: { |
| 84 | [ErrorCode.VALIDATION_FAILED]: { detailsSchema }, |
| 85 | [ErrorCode.SESSION_NOT_FOUND]: {}, |
| 86 | }, |
| 87 | description: 'List background tasks for a session', |
| 88 | tags: ['tasks'], |
| 89 | }, |
| 90 | async (req, reply) => { |
| 91 | try { |
| 92 | const { session_id } = req.params; |
| 93 | const query = req.query; |
| 94 | const items = await ix.invokeFunction((a) => |
| 95 | a.get(ITaskService).list(session_id, query), |
| 96 | ); |
| 97 | reply.send(okEnvelope({ items }, req.id)); |
| 98 | } catch (err) { |
| 99 | sendMappedError(reply, req.id, err); |
| 100 | } |
| 101 | }, |
| 102 | ); |
| 103 | app.get(listRoute.path, listRoute.options, listRoute.handler as Parameters<TasksRouteHost['get']>[2]); |
| 104 | |
| 105 | // GET /sessions/{session_id}/tasks/{task_id} -------------------------- |
| 106 | const getRoute = defineRoute( |
| 107 | { |
| 108 | method: 'GET', |
| 109 | path: '/sessions/{session_id}/tasks/{task_id}', |
| 110 | params: sessionAndTaskIdParamSchema, |
| 111 | querystring: getTaskQuerySchema, |
| 112 | success: { data: getTaskResponseSchema }, |
| 113 | errors: { |
| 114 | [ErrorCode.VALIDATION_FAILED]: { detailsSchema }, |
| 115 | [ErrorCode.SESSION_NOT_FOUND]: {}, |
| 116 | [ErrorCode.TASK_NOT_FOUND]: {}, |
| 117 | }, |
| 118 | description: 'Get a background task by ID', |
| 119 | tags: ['tasks'], |
| 120 | }, |
| 121 | async (req, reply) => { |
| 122 | try { |
| 123 | const { session_id, task_id } = req.params; |
| 124 | const query = req.query as { with_output?: boolean; output_bytes?: number }; |
| 125 | const task = await ix.invokeFunction((a) => |
| 126 | a.get(ITaskService).get(session_id, task_id, { |
| 127 | withOutput: query.with_output, |
| 128 | outputBytes: query.output_bytes, |
no test coverage detected