trustgraph/ts/packages/flow/src/gateway/rpc-contract.ts
2026-06-01 16:22:25 -05:00

35 lines
1 KiB
TypeScript

import { Schema as S } from "effect";
import * as Rpc from "effect/unstable/rpc/Rpc";
import * as RpcGroup from "effect/unstable/rpc/RpcGroup";
export class DispatchPayload extends S.Class<DispatchPayload>("DispatchPayload")({
scope: S.Literals(["global", "flow"]),
service: S.String,
flow: S.optionalKey(S.String),
request: S.Record(S.String, S.Unknown),
}) {}
export class DispatchStreamChunk extends S.Class<DispatchStreamChunk>("DispatchStreamChunk")({
response: S.Unknown,
complete: S.Boolean,
}) {}
export class DispatchError extends S.ErrorClass<DispatchError>("DispatchError")({
_tag: S.tag("DispatchError"),
message: S.String,
}) {}
export class Dispatch extends Rpc.make("Dispatch", {
payload: DispatchPayload,
success: S.Unknown,
error: DispatchError,
}) {}
export class DispatchStream extends Rpc.make("DispatchStream", {
payload: DispatchPayload,
success: DispatchStreamChunk,
error: DispatchError,
stream: true,
}) {}
export const TrustGraphRpcs = RpcGroup.make(Dispatch, DispatchStream);