Specta LogoSpecta
RspcTypescript apiTs rspc client

@rspc/client

TypeScript API reference for @rspc/client, version 0.0.0-main-a5d698cd.

Public exports of @rspc/client at version 0.0.0-main-a5d698cd.

This page documents 0.0.0-main-a5d698cd. The documented version is 0.3.1.

Classes

AlphaClient

export declare class AlphaClient<P extends ProceduresDef> {
    _rspc_def: ProceduresDef;
    private links;
    private onError?;
    private mapQueryKey?;
    constructor(args: ClientArgs<P>);
    query<K extends P["queries"]["key"] & string>(keyAndInput: [
        key: K,
        ...input: _inferProcedureHandlerInput<P, "queries", K>
    ], opts?: OperationOpts): Promise<Result<inferQueryResult<P, K>, inferQueryError<P, K>>>;
    mutation<K extends P["mutations"]["key"] & string>(keyAndInput: [
        key: K,
        ...input: _inferProcedureHandlerInput<P, "mutations", K>
    ], opts?: OperationOpts): Promise<Result<inferMutationResult<P, K>, inferMutationError<P, K>>>;
    addSubscription<K extends P["subscriptions"]["key"] & string>(keyAndInput: [
        K,
        ..._inferProcedureHandlerInput<P, "subscriptions", K>
    ], opts: SubscriptionOptions<inferSubscription<P, K>> & {
        context?: OperationContext;
    }): () => void;
// … truncated, see the source link

View source ↗

Interfaces

LinkOperation

/**
 * The argument to a link. Contains information about the current operation and a function to call the next link.
 *
 * @internal
 */
export interface LinkOperation<P extends ProceduresDef> {
    op: Operation;
    next(op: {
        op: Operation;
    }): LinkResult<P>;
}

The argument to a link. Contains information about the current operation and a function to call the next link. @internal

View source ↗

SubscriptionOptions

export interface SubscriptionOptions<P extends ProcedureDef> {
    onData: (data: P["result"]) => void;
    onError?: (err: P["error"] | rspc.Error) => void;
}

View source ↗

Type aliases

_inferInfiniteQueryProcedureHandlerInput

export type _inferInfiniteQueryProcedureHandlerInput<TProcedures extends ProceduresLike, K extends inferInfiniteQueries<TProcedures>["key"]> = inferInfiniteQueryInput<TProcedures, K> extends never ? [
] : [
    inferInfiniteQueryInput<TProcedures, K>
];

View source ↗

_inferProcedureHandlerInput

export type _inferProcedureHandlerInput<TProcedures extends ProceduresLike, TOperation extends keyof ProceduresDef, K extends inferProcedures<TProcedures>[TOperation]["key"]> = inferProcedure<TProcedures, TOperation, K>["input"] extends never ? [
] : [
    inferProcedure<TProcedures, TOperation, K>["input"]
];

View source ↗

AbortFn

/**
 * TODO
 *
 * @internal
 */
export type AbortFn = () => void;

TODO @internal

View source ↗

Error

export type Error = {
    code: ErrorCode;
    message: string;
};

View source ↗

ErrorCode

/**
 * TODO
 */
export type ErrorCode = "BadRequest" | "Unauthorized" | "Forbidden" | "NotFound" | "Timeout" | "Conflict" | "PreconditionFailed" | "PayloadTooLarge" | "MethodNotSupported" | "ClientClosedRequest" | "InternalServerError";

TODO

View source ↗

FakeObservable

/**
 * TODO
 *
 * @internal
 */
export type FakeObservable = {
    exec: () => PromiseAndCancel<any>;
};

TODO @internal

View source ↗

inferInfiniteQueries

export type inferInfiniteQueries<TProcedures extends ProceduresLike> = Exclude<Extract<inferProcedures<TProcedures>["queries"], {
    input: {
        cursor: any;
    };
}>, {
    input: never;
}>;

View source ↗

inferInfiniteQuery

export type inferInfiniteQuery<TProcedures extends ProceduresLike, K extends inferInfiniteQueries<TProcedures>["key"]> = Extract<inferInfiniteQueries<TProcedures>, {
    key: K;
}>;

View source ↗

inferInfiniteQueryError

export type inferInfiniteQueryError<TProcedures extends ProceduresLike, K extends inferInfiniteQueries<TProcedures>["key"]> = inferInfiniteQuery<TProcedures, K>["error"];

View source ↗

inferInfiniteQueryInput

export type inferInfiniteQueryInput<TProcedures extends ProceduresLike, K extends inferInfiniteQueries<TProcedures>["key"]> = EmptyObjToNever<Omit<inferInfiniteQuery<TProcedures, K>["input"], "cursor">>;

// Referenced local context (not public exports):
type EmptyObjToNever<T> = keyof T extends never ? never : T;

View source ↗

inferInfiniteQueryResult

export type inferInfiniteQueryResult<TProcedures extends ProceduresLike, K extends inferInfiniteQueries<TProcedures>["key"]> = inferInfiniteQuery<TProcedures, K>["result"];

View source ↗

inferMutation

export type inferMutation<TProcedures extends ProceduresLike, T extends inferMutations<TProcedures>["key"][0]> = inferProcedure<inferProcedures<TProcedures>, "mutations", T>;

View source ↗

inferMutationError

export type inferMutationError<TProcedures extends ProceduresLike, T extends inferMutations<TProcedures>["key"][0]> = inferMutation<inferProcedures<TProcedures>, T>["error"] | rspc.Error;

View source ↗

inferMutationInput

export type inferMutationInput<TProcedures extends ProceduresLike, T extends inferMutations<TProcedures>["key"][0]> = inferMutation<inferProcedures<TProcedures>, T>["input"];

View source ↗

inferMutationResult

export type inferMutationResult<TProcedures extends ProceduresLike, T extends inferMutations<TProcedures>["key"][0]> = inferMutation<inferProcedures<TProcedures>, T>["result"];

View source ↗

inferMutations

export type inferMutations<TProcedures extends ProceduresLike> = inferProcedures<TProcedures>["mutations"];

View source ↗

inferProcedure

export type inferProcedure<TProcedures extends ProceduresLike, TOperation extends keyof ProceduresDef, K extends inferProcedureKey<TProcedures, TOperation>> = Extract<inferProcedures<TProcedures>[TOperation], {
    key: K;
}>;

View source ↗

inferProcedureError

export type inferProcedureError<TProcedures extends ProceduresLike, TOperation extends keyof ProceduresDef, K extends inferProcedureKey<TProcedures, TOperation>> = inferProcedure<TProcedures, TOperation, K>["error"] | Error;

View source ↗

inferProcedureInput

export type inferProcedureInput<TProcedures extends ProceduresLike, TOperation extends keyof ProceduresDef, K extends inferProcedureKey<TProcedures, TOperation>> = inferProcedure<TProcedures, TOperation, K>["input"];

View source ↗

inferProcedureKey

export type inferProcedureKey<TProcedures extends ProceduresLike, TOperation extends keyof ProceduresDef> = inferProcedures<TProcedures>[TOperation]["key"];

View source ↗

inferProcedureResult

export type inferProcedureResult<TProcedures extends ProceduresLike, TOperation extends keyof ProceduresDef, K extends inferProcedureKey<TProcedures, TOperation>> = inferProcedure<TProcedures, TOperation, K>["result"];

View source ↗

inferProcedures

/**
 * This is a helper method to infer the type of bindings for this router off other rspc types.
 * The inferred type is what is generated by Rust.
 * @example
 * const rspc = createReactQueryHooks<Operations>();
 * type Bindings = inferBindingsType<typeof rspc>
 */
export type inferProcedures<TProcedures extends ProceduresLike> = TProcedures extends {
    _rspc_def: ProceduresDef;
} ? TProcedures["_rspc_def"] : TProcedures;

This is a helper method to infer the type of bindings for this router off other rspc types. The inferred type is what is generated by Rust. @example const rspc = createReactQueryHooks<Operations>(); type Bindings = inferBindingsType<typeof rspc>

View source ↗

inferQueries

export type inferQueries<TProcedures extends ProceduresLike> = inferProcedures<TProcedures>["queries"];

View source ↗

inferQuery

export type inferQuery<TProcedures extends ProceduresLike, T extends inferQueries<TProcedures>["key"][0]> = inferProcedure<inferProcedures<TProcedures>, "queries", T>;

View source ↗

inferQueryError

export type inferQueryError<TProcedures extends ProceduresLike, T extends inferQueries<TProcedures>["key"][0]> = inferQuery<inferProcedures<TProcedures>, T>["error"] | rspc.Error;

View source ↗

inferQueryInput

export type inferQueryInput<TProcedures extends ProceduresLike, T extends inferQueries<TProcedures>["key"][0]> = inferQuery<inferProcedures<TProcedures>, T>["input"];

View source ↗

inferQueryResult

export type inferQueryResult<TProcedures extends ProceduresLike, T extends inferQueries<TProcedures>["key"][0]> = inferQuery<inferProcedures<TProcedures>, T>["result"];

View source ↗

inferSubscription

export type inferSubscription<TProcedures extends ProceduresLike, T extends inferSubscriptions<TProcedures>["key"][0]> = inferProcedure<inferProcedures<TProcedures>, "subscriptions", T>;

View source ↗

inferSubscriptionError

export type inferSubscriptionError<TProcedures extends ProceduresLike, T extends inferSubscriptions<TProcedures>["key"][0]> = inferSubscription<inferProcedures<TProcedures>, T>["result"] | rspc.Error;

View source ↗

inferSubscriptionInput

export type inferSubscriptionInput<TProcedures extends ProceduresLike, T extends inferSubscriptions<TProcedures>["key"][0]> = inferSubscription<inferProcedures<TProcedures>, T>["input"];

View source ↗

inferSubscriptionResult

export type inferSubscriptionResult<TProcedures extends ProceduresLike, T extends inferSubscriptions<TProcedures>["key"][0]> = inferSubscription<inferProcedures<TProcedures>, T>["result"];

View source ↗

inferSubscriptions

export type inferSubscriptions<TProcedures extends ProceduresLike> = inferProcedures<TProcedures>["subscriptions"];

View source ↗

/**
 * TODO
 *
 * @internal
 */
export type Link<P extends ProceduresDef> = (p: LinkOperation<P>) => LinkResult<P>;

TODO @internal

View source ↗

LinkResult

/**
 * TODO
 *
 * @internal
 */
export type LinkResult<P extends ProceduresDef> = {
    exec: (resolve: (result: P[keyof ProceduresDef]["result"]) => void, reject: (error: P[keyof ProceduresDef]["error"] | rspc.Error) => void) => void;
    abort: () => void;
};

TODO @internal

View source ↗

LoggerLinkOpts

export type LoggerLinkOpts = {
    enabled: boolean | (() => boolean);
};

View source ↗

Operation

/**
 * TODO
 *
 * @internal
 */
export type Operation = {
    method: "query" | "mutation" | "subscription";
    path: string;
    input: any | null;
    context: OperationContext;
};

TODO @internal

View source ↗

OperationContext

/**
 * A map of data that can be used by links to store metadata about the current operation.
 * This allows links to communicate with each other.
 *
 * @internal
 */
export type OperationContext = Record<string, unknown>;

A map of data that can be used by links to store metadata about the current operation. This allows links to communicate with each other. @internal

View source ↗

ProcedureDef

/**
 * Represents a Typescript procedure file which is generated by the Rust code.
 * This is codegenerated Typescript file is how we can validate the types on the frontend match Rust.
 *
 * @internal
 */
export type ProcedureDef = {
    key: string;
    input: any;
    result: any;
    error: any;
};

Represents a Typescript procedure file which is generated by the Rust code. This is codegenerated Typescript file is how we can validate the types on the frontend match Rust. @internal

View source ↗

ProcedureError

export type ProcedureError = {
    Exec: Error;
} | {
    Resolver: any;
};

View source ↗

ProceduresDef

/**
 * @internal
 */
export type ProceduresDef = {
    queries: ProcedureDef;
    mutations: ProcedureDef;
    subscriptions: ProcedureDef;
};

@internal

View source ↗

ProceduresLike

/**
 * A type which allows inferring the type of the bindings
 */
export type ProceduresLike = {
    _rspc_def: ProceduresDef;
} | ProceduresDef;

A type which allows inferring the type of the bindings

View source ↗

PromiseAndCancel

/**
 * TODO
 *
 * @internal
 */
export type PromiseAndCancel<TValue> = {
    promise: Promise<TValue>;
    abort: AbortFn;
};

TODO @internal

View source ↗

Request

/**
 * The type of a request to rspc.
 *
 * @internal
 */
export type Request = {
    method: "query";
    id: number;
    path: string;
    input: any | null;
} | {
    method: "mutation";
    id: number;
    path: string;
    input: any | null;
} | {
    method: "subscription";
    id: number;
    path: string;
    input: any | null;
} | {
    method: "subscriptionStop";
    id: number;
};

The type of a request to rspc. @internal

View source ↗

Response

/**
 * The type of a response from rspc.
 *
 * @internal
 */
export type Response = ({
    type: "value";
    value: any;
} | {
    type: "error";
    value: ProcedureError;
} | {
    type: "complete";
}) & {
    id: number;
};

The type of a response from rspc. @internal

View source ↗

ResponseInner

/**
 * A value that can be a successful result or an error.
 *
 * @internal
 */
export type ResponseInner = {
    type: "value";
    value: any;
} | {
    type: "error";
    value: ProcedureError;
} | {
    type: "complete";
};

A value that can be a successful result or an error. @internal

View source ↗

Result

export type Result<TOk, TErr> = {
    status: "ok";
    data: TOk;
} | {
    status: "error";
    error: TErr;
};

View source ↗

Functions

_internal_fireResponse

/**
 * @internal
 */
export declare function _internal_fireResponse<P extends ProceduresDef>(resp: ResponseInner, i: BatchedItem<P> | {
    resolve: (result: P[keyof ProceduresDef]["result"]) => void;
    reject: (error: P[keyof ProceduresDef]["error"] | rspc.Error) => void;
}): Promise<void>;

@internal

View source ↗

_internal_wsLinkInternal

/**
 * @internal
 */
export declare function _internal_wsLinkInternal<P extends ProceduresDef>([activeMap, send,]: ReturnType<typeof newWsManager>): Link<P>;

// Referenced local context (not public exports):
declare function newWsManager<P extends ProceduresDef>(opts: WsLinkOpts): readonly [
    Map<number, {
        oneshot: boolean;
        resolve: (result: P[keyof ProceduresDef]["result"]) => void;
        reject: (error: P[keyof ProceduresDef]["error"] | rspc.Error) => void;
    }>,
    (data: rspc.Request | rspc.Request[]) => Promise<void>
];

type WsLinkOpts = {
    url: string;
    /**
     * Add ponyfill for WebSocket
     */
    WebSocket?: typeof WebSocket;
};

@internal

View source ↗

/**
 * HTTP Fetch link for rspc
 */
export declare function httpLink<P extends ProceduresDef>(opts: HttpLinkOpts): Link<P>;

// Referenced local context (not public exports):
type HttpLinkOpts = {
    url: string;
    /**
     * Add ponyfill for fetch
     */
    fetch?: typeof fetch;
    /**
     * Add ponyfill for AbortController
     */
    AbortController?: typeof AbortController | null;
} & ({
    /**
     * Headers to be set on outgoing requests or a callback that of said headers
     */
    headers?: HTTPHeaders | ((opts: {
        op: Operation;
    }) => HTTPHeaders);
} | {
    /**
     * Headers to be set on outgoing requests or a callback that of said headers
     */
    headers?: HTTPHeaders | ((opts: {
        ops: Operation[];
    }) => HTTPHeaders);
    /**
     * Batch multiple rspc queries into a single HTTP request. Disabled by default.
     *
     * NOTE: This is great for performance but may be problematic if your using HTTP caching.
     */
    batch: true | {
// … truncated, see the source link

HTTP Fetch link for rspc

View source ↗

initRspc

export declare function initRspc<P extends ProceduresDef>(args: ClientArgs<P>): AlphaClient<P>;

// Referenced local context (not public exports):
interface ClientArgs<P extends ProceduresDef> {
    links: Link<P>[];
    onError?: OnErrorHandler<P>;
}

type OnErrorHandler<P extends ProceduresDef> = (err: P[keyof ProceduresDef]["error"]) => void | Promise<void>;

View source ↗

/**
 * Link for logging operations.
 *
 * This must go before the terminating link for it to work!
 *
 */
export declare function loggerLink<P extends ProceduresDef>(opts?: LoggerLinkOpts): Link<P>;

Link for logging operations.

This must go before the terminating link for it to work!

View source ↗

/**
 * Websocket link for rspc
 *
 * Note: This link applies request batching by default.
 */
export declare function wsLink<P extends ProceduresDef>(opts: WsLinkOpts): Link<P>;

// Referenced local context (not public exports):
type WsLinkOpts = {
    url: string;
    /**
     * Add ponyfill for WebSocket
     */
    WebSocket?: typeof WebSocket;
};

Websocket link for rspc

Note: This link applies request batching by default.

View source ↗

On this page