import BrowserConnection from '../connection/Browser.js';
type RpcApiHandler = (p?: any) => any | undefined;
type RpcApi<Api> = {
    [k in keyof Api]: RpcApiHandler;
};
type WithOrigin<Api extends RpcApi<Api>> = {
    [k in keyof Api]: (p: Parameters<Api[k]>[0], origin: string) => ReturnType<Api[k]>;
};
/**
 * Contain functionality for using RPC conection
 * @category aepp wallet communication
 * @param connection - Connection object
 * @param onDisconnect - Disconnect callback
 * @param methods - Object containing handlers for each request by name
 */
export default class RpcClient<RemoteApi extends RpcApi<RemoteApi>, LocalApi extends RpcApi<LocalApi>> {
    #private;
    connection: BrowserConnection;
    constructor(connection: BrowserConnection, onDisconnect: () => void, methods: WithOrigin<LocalApi>);
    /**
     * Make a request
     * @param name - Method name
     * @param params - Method params
     * @returns Promise which will be resolved after receiving response message
     */
    request<Name extends keyof RemoteApi>(name: Name, params: Parameters<RemoteApi[Name]>[0]): Promise<ReturnType<RemoteApi[Name]>>;
    /**
     * Make a notification
     * @param name - Method name
     * @param params - Method params
     */
    notify<Name extends keyof RemoteApi>(name: Name, params: Parameters<RemoteApi[Name]>[0]): void;
}
export {};
