Skip to main content Link Search Menu Expand Document (external link)

WorkflowProxy.ts overview

Since v1.0.0


Exports Grouped by Category


Constructors

toHttpApiGroup

Derives an HttpApiGroup from a list of workflows.

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))
)

Signature

declare const toHttpApiGroup: <const Name extends string, const Workflows extends NonEmptyReadonlyArray<Workflow.Any>>(
  name: Name,
  workflows: Workflows
) => HttpApiGroup.HttpApiGroup<Name, ConvertHttpApi<Workflows[number]>>

Source

Since v1.0.0

toRpcGroup

Derives an RpcGroup from a list of workflows.

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)))

Signature

declare const toRpcGroup: <
  const Workflows extends NonEmptyReadonlyArray<Workflow.Any>,
  const Prefix extends string = ""
>(
  workflows: Workflows,
  options?: { readonly prefix?: Prefix | undefined }
) => RpcGroup.RpcGroup<ConvertRpcs<Workflows[number], Prefix>>

Source

Since v1.0.0

utils

ConvertHttpApi (type alias)

Signature

type ConvertHttpApi<Workflows> =
  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"]
          >
    : never

Source

Since v1.0.0

ConvertRpcs (type alias)

Signature

type ConvertRpcs<Workflows, Prefix> =
  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>
    : never

Source

Since v1.0.0