Specta LogoSpecta
RspcTypescript apiTs rspc client

@rspc/client

TypeScript API reference for @rspc/client, version 0.3.0.

Public exports of @rspc/client at version 0.3.0.

This page documents 0.3.0. The documented version is 0.3.1.

Classes

Client

export declare class Client<TProcedures extends ProceduresDef> {
    _rspc_def: ProceduresDef;
    private transport;
    private subscriptionMap;
    private onError?;
    constructor(args: ClientArgs);
    query<K extends TProcedures["queries"]["key"] & string>(keyAndInput: [
        key: K,
        ...input: _inferProcedureHandlerInput<TProcedures, "queries", K>
    ]): Promise<inferQueryResult<TProcedures, K>>;
    mutation<K extends TProcedures["mutations"]["key"] & string>(keyAndInput: [
        key: K,
        ...input: _inferProcedureHandlerInput<TProcedures, "mutations", K>
    ]): Promise<inferMutationResult<TProcedures, K>>;
    addSubscription<K extends TProcedures["subscriptions"]["key"] & string, TData = inferSubscriptionResult<TProcedures, K>>(keyAndInput: [
        key: K,
        ...input: _inferProcedureHandlerInput<TProcedures, "subscriptions", K>
    ], opts: SubscriptionOptions<TData>): () => void;
}

View source ↗

FetchTransport

export declare class FetchTransport implements Transport {
    private url;
    clientSubscriptionCallback?: (id: string, key: string, value: any) => void;
    private fetch;
    constructor(url: string, fetch?: typeof globalThis.fetch);
    doRequest(operation: OperationType, key: string, input: any): Promise<any>;
}

View source ↗

NoOpTransport

export declare class NoOpTransport implements Transport {
    constructor();
    doRequest(operation: OperationType, key: string, input: string): Promise<any>;
}

View source ↗

RSPCError

export declare class RSPCError {
    code: number;
    message: string;
    constructor(code: number, message: string);
}

View source ↗

WebsocketTransport

export declare class WebsocketTransport implements Transport {
    private url;
    private ws;
    private requestMap;
    clientSubscriptionCallback?: (id: string, value: any) => void;
    constructor(url: string);
    attachEventListeners(): void;
    reconnect(timeoutIndex?: number): Promise<void>;
    doRequest(operation: OperationType, key: string, input: any, opts?: {
        id?: string;
    }): Promise<any>;
}

View source ↗

Interfaces

ClientArgs

export interface ClientArgs {
    transport: Transport;
    onError?: (err: RSPCError) => void | Promise<void>;
}

View source ↗

SubscriptionOptions

export interface SubscriptionOptions<TOutput> {
    onStarted?: () => void;
    onData: (data: TOutput) => void;
    onError?: (err: RSPCError) => void;
}

View source ↗

Transport

export interface Transport {
    clientSubscriptionCallback?: (id: string, key: string, value: any) => void;
    doRequest(operation: OperationType, key: string, input: any): Promise<any>;
}

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 ↗

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 ↗

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, K extends inferMutations<TProcedures>["key"]> = Extract<inferMutations<TProcedures>, {
    key: K;
}>;

View source ↗

inferMutationInput

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

View source ↗

inferMutationResult

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

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 ↗

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, K extends inferQueries<TProcedures>["key"]> = Extract<inferQueries<TProcedures>, {
    key: K;
}>;

View source ↗

inferQueryInput

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

View source ↗

inferQueryResult

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

View source ↗

inferSubscription

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

View source ↗

inferSubscriptionInput

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

View source ↗

inferSubscriptionResult

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

View source ↗

inferSubscriptions

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

View source ↗

OperationType

export type OperationType = "query" | "mutation" | "subscription" | "subscriptionStop";

View source ↗

ProcedureDef

export type ProcedureDef = {
    key: string;
    input: any;
    result: any;
};

View source ↗

ProceduresDef

/**
 * This type represents the Typescript bindings which are generated from the router by Rust.
 */
export type ProceduresDef = {
    queries: ProcedureDef;
    mutations: ProcedureDef;
    subscriptions: ProcedureDef;
};

This type represents the Typescript bindings which are generated from the router by Rust.

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 ↗

Functions

createClient

export declare function createClient<TProcedures extends ProceduresLike>(args: ClientArgs): Client<inferProcedures<TProcedures>>;

View source ↗

Variables

randomId

randomId: () => string

View source ↗

On this page