Skip to content
Effect Days 2026 Get your ticket

Rpc

50 exports Added in v1.0.0 Source

Constructors

AnySchema interface

Added in v1.0.0 Source

Signature

interface AnySchema extends Pipeable {
[key: number]: any;
readonly annotations: any;
readonly ast: AST;
readonly Context: any;
readonly Encoded: any;
readonly make?: (params: any, ...rest: readonly Array<any>) => any;
readonly Type: any;
}

AnyTaggedRequestSchema interface

Added in v1.0.0 Source

Signature

interface AnyTaggedRequestSchema extends AnySchema {
[key: number]: any;
readonly _tag: string;
readonly failure: All;
readonly success: Any;
}

exitSchema

Added in v1.0.0 Source

Signature

declare function exitSchema<R extends Any>(self: R): any

Signature

declare function fromTaggedRequest<S extends AnyTaggedRequestSchema>(schema: S): From<S>

make

Added in v1.0.0 Source

Signature

declare function make<Tag extends string, Payload extends any = Void, Success extends Any = Void, Error extends All = Never, Stream extends boolean = false>(tag: Tag, options?: {
readonly defect?: any;
readonly error?: Error;
readonly payload?: Payload;
readonly primaryKey?: [Payload] extends [Fields] ? (payload: Simplify<View<NoInfer<Payload>, "Type", TypeOptionalKeys<NoInfer<Payload>>, TypeMutableKeys<NoInfer<Payload>>>>) => string : never;
readonly stream?: Stream;
readonly success?: Success;
}): Rpc<Tag, Payload extends Fields ? Struct<Payload> : Payload, Stream extends true ? Stream<Success, Error> : Success, Stream extends true ? Never : Error>

Guards

isRpc

Added in v1.0.0 Source

Signature

declare function isRpc(u: unknown): u is Rpc<any, any, any, Never, never>

Models

AddError type

Added in v1.0.0 Source

Signature

type AddError<R extends Any, Error extends Schema.Schema.All> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? Rpc<_Tag, _Payload, _Success, _Error | Error, _Middleware> : never

AddMiddleware type

Added in v1.0.0 Source

Signature

type AddMiddleware<R extends Any, Middleware extends RpcMiddleware.TagClassAny> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? Rpc<_Tag, _Payload, _Success, _Error, _Middleware | Middleware> : never

Any interface

Added in v1.0.0 Source

Signature

interface Any extends Pipeable {
readonly _tag: string;
readonly [TypeId]: typeof TypeId;
readonly key: string;
}

AnyWithProps interface

Added in v1.0.0 Source

Signature

interface AnyWithProps {
readonly _tag: string;
readonly [TypeId]: typeof TypeId;
readonly annotations: Context<never>;
readonly defectSchema: any;
readonly errorSchema: All;
readonly key: string;
readonly middlewares: ReadonlySet<TagClassAnyWithProps>;
readonly payloadSchema: AnySchema;
readonly successSchema: Any;
}

Context type

Added in v1.0.0 Source

Signature

type Context<R> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? _Payload["Context"] | _Success["Context"] | _Error["Context"] : never

Error type

Added in v1.0.0 Source

Signature

type Error<R> = Schema.Schema.Type<ErrorSchema<R>>

ErrorEncoded type

Added in v1.0.0 Source

Signature

type ErrorEncoded<R> = Schema.Schema.Encoded<ErrorSchema<R>>

ErrorExit type

Added in v1.0.0 Source

Signature

type ErrorExit<R> = SuccessSchema<R> extends RpcSchema.Stream<infer _A, infer _E> ? _E["Type"] | Error<R> : Error<R>

ErrorExitEncoded type

Added in v1.0.0 Source

Signature

type ErrorExitEncoded<R> = SuccessSchema<R> extends RpcSchema.Stream<infer _A, infer _E> ? _E["Encoded"] | ErrorEncoded<R> : ErrorEncoded<R>

ErrorSchema type

Added in v1.0.0 Source

Signature

type ErrorSchema<R> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? _Error | _Middleware : never

ExcludeProvides type

Added in v1.0.0 Source

Signature

type ExcludeProvides<Env, R extends Any, Tag extends string> = Exclude<Env, ExtractProvides<R, Tag>>

Exit type

Added in v1.0.0 Source

Signature

type Exit<R> = Exit_<SuccessExit<R>, ErrorExit<R>>

ExitEncoded type

Added in v1.0.0 Source

Signature

type ExitEncoded<R, Defect = unknown> = Schema.ExitEncoded<SuccessExitEncoded<R>, ErrorExitEncoded<R>, Defect>

ExtractProvides type

Added in v1.0.0 Source

Signature

type ExtractProvides<R extends Any, Tag extends string> = R extends Rpc<Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? _Middleware extends {
readonly provides: Context_.Tag<infer _I, infer _S>;
} ? _I : never : never

ExtractTag type

Added in v1.0.0 Source

Signature

type ExtractTag<R extends Any, Tag extends string> = R extends Rpc<Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? R : never

From interface

Added in v1.0.0 Source

Signature

interface From<S extends AnyTaggedRequestSchema> extends Rpc<S["_tag"], S, S["success"], S["failure"]> {
constructor(_: never);
}

Handler interface

Added in v1.0.0 Source

Represents an implemented rpc.

Signature

interface Handler<Tag extends string> {
readonly _: typeof _;
readonly context: never;
readonly handler: (request: any, options: {
readonly clientId: number;
readonly headers: Headers;
}) => Effect<any, any, never> | Stream<any, any, never>;
readonly tag: Tag;
}

IsStream type

Added in v1.0.0 Source

Signature

type IsStream<R extends Any, Tag extends string> = R extends Rpc<Tag, infer _Payload, RpcSchema.Stream<infer _A, infer _E>, infer _Error, infer _Middleware> ? true : never

Middleware type

Added in v1.0.0 Source

Signature

type Middleware<R> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? Context_.Tag.Identifier<_Middleware> : never

MiddlewareClient type

Added in v1.0.0 Source

Signature

type MiddlewareClient<R> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? _Middleware extends {
readonly requiredForClient: true;
} ? RpcMiddleware.ForClient<Context_.Tag.Identifier<_Middleware>> : never : never

Payload type

Added in v1.0.0 Source

Signature

type Payload<R> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? _Payload["Type"] : never

PayloadConstructor type

Added in v1.0.0 Source

Signature

type PayloadConstructor<R> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? _Payload extends {
readonly fields: Schema.Struct.Fields;
} ? Schema.Simplify<Schema.Struct.Constructor<_Payload["fields"]>> : _Payload["Type"] : never

Prefixed type

Added in v1.0.0 Source

Signature

type Prefixed<Rpcs extends Any, Prefix extends string> = Rpcs extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? Rpc<`${Prefix}${_Tag}`, _Payload, _Success, _Error, _Middleware> : never

ResultFrom type

Added in v1.0.0 Source

Signature

type ResultFrom<R extends Any, Context> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? [_Success] extends [RpcSchema.Stream<infer _SA, infer _SE>] ? Stream<_SA["Type"], _SE["Type"] | _Error["Type"], Context> | Effect<ReadonlyMailbox<_SA["Type"], _SE["Type"] | _Error["Type"]>, _SE["Type"] | Schema.Schema.Type<_Error>, Context> : Effect<_Success["Type"], _Error["Type"], Context> : never

Rpc interface

Added in v1.0.0 Source

Represents an API endpoint. An API endpoint is mapped to a single route on the underlying HttpRouter.

Signature

interface Rpc<in out Tag extends string, out Payload extends AnySchema = typeof Schema.Void, out Success extends Schema.Schema.Any = typeof Schema.Void, out Error extends Schema.Schema.All = typeof Schema.Never, out Middleware extends RpcMiddleware.TagClassAny = never> extends Pipeable {
constructor(_: never);
readonly _tag: Tag;
readonly [TypeId]: typeof TypeId;
readonly annotations: Context<never>;
readonly defectSchema: any;
readonly errorSchema: Error;
readonly key: string;
readonly middlewares: ReadonlySet<Middleware>;
readonly payloadSchema: Payload;
readonly successSchema: Success;
annotate<I, S>(tag: Tag<I, S>, value: S): Rpc<Tag, Payload, Success, Error, Middleware>;
annotateContext<I>(context: Context<I>): Rpc<Tag, Payload, Success, Error, Middleware>;
middleware<M extends TagClassAny>(middleware: M): Rpc<Tag, Payload, Success, Error, Middleware | M>;
prefix<Prefix extends string>(prefix: Prefix): Rpc<`${Prefix}${Tag}`, Payload, Success, Error, Middleware>;
setError<E extends Any>(schema: E): Rpc<Tag, Payload, Success, E, Middleware>;
setPayload<P extends Fields | Struct<any>>(schema: P): Rpc<Tag, P extends Struct<_> ? P : P extends Fields ? Struct<P> : never, Success, Error, Middleware>;
setSuccess<S extends Any>(schema: S): Rpc<Tag, Payload, S, Error, Middleware>;
}

Success type

Added in v1.0.0 Source

Signature

type Success<R> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? _Success["Type"] : never

SuccessChunk type

Added in v1.0.0 Source

Signature

type SuccessChunk<R> = Success<R> extends Stream<infer _A, infer _E, infer _Env> ? _A : never

SuccessChunkEncoded type

Added in v1.0.0 Source

Signature

type SuccessChunkEncoded<R> = SuccessEncoded<R> extends Stream<infer _A, infer _E, infer _Env> ? _A : never

SuccessEncoded type

Added in v1.0.0 Source

Signature

type SuccessEncoded<R> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? _Success["Encoded"] : never

SuccessExit type

Added in v1.0.0 Source

Signature

type SuccessExit<R> = SuccessSchema<R> extends infer S ? S extends RpcSchema.Stream<infer _A, infer _E> ? void : Schema.Schema.Type<S> : never

SuccessExitEncoded type

Added in v1.0.0 Source

Signature

type SuccessExitEncoded<R> = SuccessSchema<R> extends infer S ? S extends RpcSchema.Stream<infer _A, infer _E> ? void : Schema.Schema.Encoded<S> : never

SuccessSchema type

Added in v1.0.0 Source

Signature

type SuccessSchema<R> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? _Success : never

Tag type

Added in v1.0.0 Source

Signature

type Tag<R> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? _Tag : never

ToHandler type

Added in v1.0.0 Source

Signature

type ToHandler<R extends Any> = R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? Handler<_Tag> : never

ToHandlerFn type

Added in v1.0.0 Source

Signature

type ToHandlerFn<Current extends Any, R = any> = (payload: Payload<Current>, options: {
readonly clientId: number;
readonly headers: Headers;
}) => ResultFrom<Current, R> | Wrapper<ResultFrom<Current, R>>

Type Ids

TypeId

Added in v1.0.0 Source

Signature

declare const TypeId: unique symbol

TypeId type

Added in v1.0.0 Source

Signature

type TypeId = typeof TypeId

Wrapper

fork

Added in v1.0.0 Source

You can use fork to wrap a response Effect or Stream, to ensure that the response is executed concurrently regardless of the RpcServer concurrency setting.

Signature

declare const fork: <A extends object>(value: A) => A extends Wrapper<infer _> ? A : Wrapper<A>

isWrapper

Added in v1.0.0 Source

Signature

declare function isWrapper(u: object): u is Wrapper<any>

You can use uninterruptible to wrap a response Effect or Stream, to ensure that it is executed inside an uninterruptible region.

Signature

declare const uninterruptible: <A extends object>(value: A) => A extends Wrapper<infer _> ? A : Wrapper<A>

wrap

Added in v1.0.0 Source

Signature

declare function wrap(options: {
readonly fork?: boolean;
readonly uninterruptible?: boolean;
}): <A extends object>(value: A) => A extends Wrapper<_> ? A : Wrapper<A>

Wrapper interface

Added in v1.0.0 Source

Signature

interface Wrapper<A> {
readonly [WrapperTypeId]: typeof WrapperTypeId;
readonly fork: boolean;
readonly uninterruptible: boolean;
readonly value: A;
}

Signature

declare const WrapperTypeId: unique symbol

WrapperTypeId type

Added in v1.0.0 Source

Signature

type WrapperTypeId = typeof WrapperTypeId