import type { RpcParams, RpcResultMapping } from "@tai-kun/surrealdb/types";
import type { UnionToIntersection, ValueOf } from "type-fest";
import { type InlineRpcMethod, type InlineRpcOptions } from "./rpc";
export type CreateInlineRpcOptions = Omit<InlineRpcOptions, "signal"> & {
    readonly timeout?: number | undefined;
};
interface RpcWithRequiredParams<TMethod extends InlineRpcMethod> {
    <TResult extends RpcResultMapping[TMethod]>(method: TMethod, options: InlineRpcOptions & {
        readonly params: RpcParams<TMethod>;
    }): Promise<TResult>;
}
interface RpcWithOptionalParams<TMethod extends InlineRpcMethod> {
    <TResult extends RpcResultMapping[TMethod]>(method: TMethod, options?: (InlineRpcOptions & {
        readonly params?: RpcParams<TMethod>;
    }) | undefined): Promise<TResult>;
}
/**
 * @experimental
 */
export default function createRpc(endpoint: string | URL, options?: CreateInlineRpcOptions | undefined): UnionToIntersection<ValueOf<{
    [TMethod in InlineRpcMethod]: undefined extends RpcParams<TMethod> ? RpcWithOptionalParams<TMethod> : RpcWithRequiredParams<TMethod>;
}>>;
export {};
//# sourceMappingURL=create-rpc.d.ts.map