Skip to content
Effect Days 2026 Get your ticket

WorkflowProxy

4 exports Added in v1.0.0 Source

Constructors

Derives an HttpApiGroup from a list of workflows.

Signature

declare function toHttpApiGroup<Name extends string, Workflows extends readonly [Any, Any]>(name: Name, workflows: Workflows): HttpApiGroup<Name, ConvertHttpApi<Workflows[number]>>

Example

import { HttpApi, HttpApiBuilder } from "@effect/platform"
import { Workflow, WorkflowProxy, WorkflowProxyServer } from "@effect/workflow"
import { Layer, Schema } from "effect"
const EmailWorkflow = Workflow.make({
name: "EmailWorkflow",
payload: {
id: Schema.String,
to: Schema.String
},
idempotencyKey: ({ id }) => id
})
const myWorkflows = [EmailWorkflow] as const
// Use WorkflowProxy.toHttpApiGroup to create a `HttpApiGroup` from the
// workflows
class MyApi extends HttpApi.make("api")
.add(WorkflowProxy.toHttpApiGroup("workflows", myWorkflows))
{}
// Use WorkflowProxyServer.layerHttpApi to create a layer that implements the
// workflows HttpApiGroup
const ApiLayer = HttpApiBuilder.api(MyApi).pipe(
Layer.provide(WorkflowProxyServer.layerHttpApi(MyApi, "workflows", myWorkflows))
)

toRpcGroup

Added in v1.0.0 Source

Derives an RpcGroup from a list of workflows.

Signature

declare function toRpcGroup<Workflows extends readonly [Any, Any], Prefix extends string = "">(workflows: Workflows, options?: {
readonly prefix?: Prefix;
}): RpcGroup<ConvertRpcs<Workflows[number], Prefix>>

Example

import { RpcServer } from "@effect/rpc"
import { Workflow, WorkflowProxy, WorkflowProxyServer } from "@effect/workflow"
import { Layer, Schema } from "effect"
const EmailWorkflow = Workflow.make({
name: "EmailWorkflow",
payload: {
id: Schema.String,
to: Schema.String
},
idempotencyKey: ({ id }) => id
})
const myWorkflows = [EmailWorkflow] as const
// Use WorkflowProxy.toRpcGroup to create a `RpcGroup` from the
// workflows
class MyRpcs extends WorkflowProxy.toRpcGroup(myWorkflows) {}
// Use WorkflowProxyServer.layerRpcHandlers to create a layer that implements
// the rpc handlers
const ApiLayer = RpcServer.layer(MyRpcs).pipe(
Layer.provide(WorkflowProxyServer.layerRpcHandlers(myWorkflows))
)

Other

ConvertHttpApi type

Added in v1.0.0 Source

Signature

type ConvertHttpApi<Workflows extends Workflow.Any> = Workflows extends Workflow.Workflow<infer _Name, infer _Payload, infer _Success, infer _Error> ? HttpApiEndpoint.HttpApiEndpoint<_Name, "POST", never, never, _Payload["Type"], never, _Success["Type"], _Error["Type"], _Payload["Context"] | _Success["Context"], _Error["Context"]> | HttpApiEndpoint.HttpApiEndpoint<`${_Name}Discard`, "POST", never, never, _Payload["Type"], never, void, never, _Payload["Context"]> | HttpApiEndpoint.HttpApiEndpoint<`${_Name}Resume`, "POST", never, never, typeof ResumePayload.Type, never, void, never, typeof ResumePayload.Context> : never

ConvertRpcs type

Added in v1.0.0 Source

Signature

type ConvertRpcs<Workflows extends Workflow.Any, Prefix extends string> = Workflows extends Workflow.Workflow<infer _Name, infer _Payload, infer _Success, infer _Error> ? Rpc.Rpc<`${Prefix}${_Name}`, _Payload, _Success, _Error> | Rpc.Rpc<`${Prefix}${_Name}Discard`, _Payload> | Rpc.Rpc<`${Prefix}${_Name}Resume`, typeof ResumePayload> : never