Skip to content

RpcMessage

Message envelopes shared by unstable RPC clients, servers, serializers, and transports.

RpcMessage is the protocol vocabulary below RpcClient and RpcServer. It defines decoded messages for in-process channels and encoded messages for transport boundaries, so custom protocols can move the same request, streaming, acknowledgement, interrupt, keepalive, and defect signals as the built-in HTTP, socket, worker, and test transports.

33 exports Added in v4.0.0 Source

Constants

constEof

Added in v4.0.0 Source

Represents the reusable Eof message value.

Signature

declare const constEof: Eof;

constPing

Added in v4.0.0 Source

Represents the reusable Ping message value.

Signature

declare const constPing: Ping;

constPong

Added in v4.0.0 Source

Represents the reusable Pong message value.

Signature

declare const constPong: Pong;

Constructors

RequestId

Added in v4.0.0 Source

Converts a bigint or string request id into the branded RequestId type.

Signature

declare const RequestId: (id: string | number) => RequestId;

Creates a transport-encoded defect response by encoding the input with Schema.Defect().

Signature

declare const ResponseDefectEncoded: (input: unknown) => ResponseDefectEncoded;

Creates an encoded terminal response for a request whose exit is a defect encoded with Schema.Defect().

Signature

declare function ResponseExitDieEncoded(options: {
  readonly defect: unknown;
  readonly requestId: RequestId;
}): ResponseExitEncoded;

Guards

Checks if the response type is terminal.

Signature

declare function isTerminalResponse(response: FromServerEncoded): boolean;

Models

Ack interface

Added in v4.0.0 Source

A decoded acknowledgement for a streamed RPC response chunk.

Signature

interface Ack {
  readonly _tag: "Ack";
  readonly requestId: RequestId;
}

AckEncoded interface

Added in v4.0.0 Source

The transport-encoded acknowledgement for a streamed RPC response chunk.

Signature

interface AckEncoded {
  readonly _tag: "Ack";
  readonly requestId: string | number;
}

ClientEnd interface

Added in v4.0.0 Source

A server message indicating that the client connection has ended.

Signature

interface ClientEnd {
  readonly _tag: "ClientEnd";
  readonly clientId: number;
}

ClientProtocolError interface

Added in v4.0.0 Source

A server-to-client protocol message reporting a client protocol error to all affected in-flight requests.

Signature

interface ClientProtocolError {
  readonly _tag: "ClientProtocolError";
  readonly error: RpcClientError;
}

Eof interface

Added in v4.0.0 Source

A client-to-server message indicating that the client has finished sending input for the current connection or request batch.

Signature

interface Eof {
  readonly _tag: "Eof";
}

ExitEncoded type

Added in v4.0.0 Source

The transport representation of an RPC Exit, encoding success values or a failure cause made of failures, defects, and interrupts.

Signature

type ExitEncoded<A, E> =
  | {
      readonly _tag: "Success";
      readonly value: A;
    }
  | {
      readonly _tag: "Failure";
      readonly cause: ReadonlyArray<
        | {
            readonly _tag: "Fail";
            readonly error: E;
          }
        | {
            readonly _tag: "Die";
            readonly defect: unknown;
          }
        | {
            readonly _tag: "Interrupt";
            readonly fiberId: number | undefined;
          }
      >;
    };

FromClient type

Added in v4.0.0 Source

Decoded messages that can be sent from an RPC client to a server.

Signature

type FromClient<A extends Rpc.Any> = Request<A> | Ack | Interrupt | Eof;

FromClientEncoded type

Added in v4.0.0 Source

Transport-encoded messages that can be sent from an RPC client to a server.

Signature

type FromClientEncoded = RequestEncoded | AckEncoded | InterruptEncoded | Ping | Eof;

FromServer type

Added in v4.0.0 Source

Decoded messages that can be sent from an RPC server to a client.

Signature

type FromServer<A extends Rpc.Any> =
  | ResponseChunk<A>
  | ResponseExit<A>
  | ResponseDefect
  | ClientEnd;

FromServerEncoded type

Added in v4.0.0 Source

Transport-encoded messages that can be sent from an RPC server to a client.

Signature

type FromServerEncoded =
  | ResponseChunkEncoded
  | ResponseExitEncoded
  | ResponseDefectEncoded
  | Pong
  | ClientProtocolError;

Interrupt interface

Added in v4.0.0 Source

A decoded request to interrupt an in-flight RPC, carrying the request id and interrupting fiber ids.

Signature

interface Interrupt {
  readonly _tag: "Interrupt";
  readonly interruptors: readonly Array<number>;
  readonly requestId: RequestId;
}

InterruptEncoded interface

Added in v4.0.0 Source

The transport-encoded request to interrupt an in-flight RPC.

Signature

interface InterruptEncoded {
  readonly _tag: "Interrupt";
  readonly requestId: string | number;
}

Ping interface

Added in v4.0.0 Source

A client-to-server keepalive message used by protocols that monitor connection liveness.

Signature

interface Ping {
  readonly _tag: "Ping";
}

Pong interface

Added in v4.0.0 Source

A server-to-client keepalive response to a Ping message.

Signature

interface Pong {
  readonly _tag: "Pong";
}

Request interface

Added in v4.0.0 Source

The decoded RPC request envelope for an RPC union, carrying a branded request id, typed RPC tag, decoded payload, headers, and optional trace context.

Signature

interface Request<A extends Rpc.Any> {
  readonly _tag: "Request";
  readonly headers: Headers;
  readonly id: RequestId;
  readonly payload: Payload<A>;
  readonly sampled?: boolean;
  readonly spanId?: string;
  readonly tag: Tag<A>;
  readonly traceId?: string;
}

RequestEncoded interface

Added in v4.0.0 Source

The transport-encoded RPC request envelope, including the string request id, RPC tag, encoded payload, headers, and optional trace context.

Signature

interface RequestEncoded {
  readonly _tag: "Request";
  readonly headers: readonly Array<[string, string]>;
  readonly id: string | number;
  readonly isNotification?: true;
  readonly payload: unknown;
  readonly sampled?: boolean;
  readonly spanId?: string;
  readonly tag: string;
  readonly traceId?: string;
}

RequestId type

Added in v4.0.0 Source

A branded request identifier used to correlate RPC requests, responses, chunks, acknowledgements, and interrupts.

Signature

type RequestId = Branded<string | number, "~effect/rpc/RpcMessage/RequestId">;

ResponseChunk interface

Added in v4.0.0 Source

The decoded response message containing a non-empty batch of stream chunk values for a specific client and request.

Signature

interface ResponseChunk<A extends Rpc.Any> {
  readonly _tag: "Chunk";
  readonly clientId: number;
  readonly requestId: RequestId;
  readonly values: readonly [SuccessChunk<A>, SuccessChunk<A>];
}

ResponseChunkEncoded interface

Added in v4.0.0 Source

The transport-encoded response message containing a non-empty batch of stream chunk values for a request.

Signature

interface ResponseChunkEncoded {
  readonly _tag: "Chunk";
  readonly requestId: string | number;
  readonly values: readonly [unknown, unknown];
}

ResponseDefect interface

Added in v4.0.0 Source

The decoded server defect message for a client connection.

Signature

interface ResponseDefect {
  readonly _tag: "Defect";
  readonly clientId: number;
  readonly defect: unknown;
}

ResponseDefectEncoded interface

Added in v4.0.0 Source

The transport-encoded server defect message used for protocol-level defects that affect the client connection.

Signature

interface ResponseDefectEncoded {
  readonly _tag: "Defect";
  readonly defect: unknown;
}

ResponseExit interface

Added in v4.0.0 Source

The decoded terminal response for a request, carrying the typed Rpc.Exit for the RPC.

Signature

interface ResponseExit<A extends Rpc.Any> {
  readonly _tag: "Exit";
  readonly clientId: number;
  readonly exit: Exit<A>;
  readonly requestId: RequestId;
}

ResponseExitEncoded interface

Added in v4.0.0 Source

The transport-encoded terminal response for a request, carrying the encoded Exit.

Signature

interface ResponseExitEncoded {
  readonly _tag: "Exit";
  readonly exit: ExitEncoded<unknown, unknown>;
  readonly requestId: string | number;
}

ResponseId type

Added in v4.0.0 Source

A branded numeric identifier for server responses.

Signature

type ResponseId = Branded<number, ResponseIdTypeId>;

Type IDs

The brand identifier used by the ResponseId type.

Signature

declare const ResponseIdTypeId: "~effect//rpc/RpcServer/ResponseId";

ResponseIdTypeId type

Added in v4.0.0 Source

The literal type of the ResponseId brand identifier.

Signature

type ResponseIdTypeId = typeof ResponseIdTypeId;