64 lines · 1.9 KB · TypeScript
RawDownload
import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from "@effect/platform";import { Schema } from "effect"; // ---------------------------------------------------------------------------// Schemas// --------------------------------------------------------------------------- const ExecuteRequest = Schema.Struct({  code: Schema.String,}); const CompletedResult = Schema.Struct({  status: Schema.Literal("completed"),  text: Schema.String,  structured: Schema.Unknown,  isError: Schema.Boolean,}); const PausedResult = Schema.Struct({  status: Schema.Literal("paused"),  text: Schema.String,  structured: Schema.Unknown,}); const ExecuteResponse = Schema.Union(CompletedResult, PausedResult); const ResumeRequest = Schema.Struct({  action: Schema.Literal("accept", "decline", "cancel"),  content: Schema.optional(Schema.Unknown),}); const ResumeResponse = Schema.Struct({  text: Schema.String,  structured: Schema.Unknown,  isError: Schema.Boolean,}); const ExecutionNotFoundError = Schema.TaggedStruct("ExecutionNotFoundError", {  executionId: Schema.String,}).annotations(HttpApiSchema.annotations({ status: 404 })); // ---------------------------------------------------------------------------// Params// --------------------------------------------------------------------------- const executionIdParam = HttpApiSchema.param("executionId", Schema.String); // ---------------------------------------------------------------------------// Group// --------------------------------------------------------------------------- export class ExecutionsApi extends HttpApiGroup.make("executions")  .add(    HttpApiEndpoint.post("execute")`/executions`      .setPayload(ExecuteRequest)      .addSuccess(ExecuteResponse),  )  .add(    HttpApiEndpoint.post("resume")`/executions/${executionIdParam}/resume`      .setPayload(ResumeRequest)      .addSuccess(ResumeResponse)      .addError(ExecutionNotFoundError),  )  {}