import Transport from "@ledgerhq/hw-transport";
import { GetAddressFn } from "@ledgerhq/coin-framework/bridge/getAddressWrapper";
import { SignerContext } from "@ledgerhq/coin-framework/signer";
import { MessageSignerFn, SignMessage } from "../hw/signMessage/types";
import { Resolver } from "../hw/getAddress/types";
export type CreateSigner<T> = (transport: Transport) => T;
export type CoinResolver<T> = (signerContext: SignerContext<T>) => GetAddressFn;
export type MessageSigner<T> = (signerContext: SignerContext<T>) => MessageSignerFn;
/**
 * Retrieve `transport` to provide it to the signer and give some sort of scope for which the `transport` will be valid.
 * @param signerFactory
 * @returns SignerContext
 */
export declare function executeWithSigner<T>(signerFactory: CreateSigner<T>): SignerContext<T>;
/**
 * Inject the `signer` so it can be used by the resolver function.
 * @param signer
 * @param coinResolver
 * @returns Resolver
 */
export declare function createResolver<T>(signerFactory: CreateSigner<T>, coinResolver: CoinResolver<T>): Resolver;
/**
 * Inject the `signer` so it can be used by the hw-signMessage function.
 */
export declare function createMessageSigner<T>(signerFactory: CreateSigner<T>, messageSigner: MessageSigner<T>): SignMessage;
//# sourceMappingURL=setup.d.ts.map