import { AnyRouter, inferRouterError } from "@trpc/server";
import { Observer, UnsubscribeFn } from "@trpc/server/observable";
import { TRPCResponseMessage } from "@trpc/server/rpc";
import { Operation, TRPCLink, TRPCClientError } from "@trpc/client";
type RTCCallbackResult<TRouter extends AnyRouter, TOutput> = TRPCResponseMessage<TOutput, inferRouterError<TRouter>>;
type RTCCallbackObserver<TRouter extends AnyRouter, TOutput> = Observer<RTCCallbackResult<TRouter, TOutput>, TRPCClientError<TRouter>>;
export interface DataChannelClientOptions {
    dataChannel: RTCDataChannel;
}
export declare function createDataChannelClient(opts: DataChannelClientOptions): {
    close: () => void;
    request: (op: Operation, callbacks: RTCCallbackObserver<AnyRouter, unknown>) => UnsubscribeFn;
    getConnection(): RTCDataChannel;
};
export type TRPCDataChannelClient = ReturnType<typeof createDataChannelClient>;
export interface DataChannelLinkOptions {
    client: TRPCDataChannelClient;
}
export declare function dataChannelLink<TRouter extends AnyRouter>(opts: DataChannelLinkOptions): TRPCLink<TRouter>;
export {};
