import { type Account, type Address, type AddressPurpose } from '@bigmi/core';
import type { UTXOConnectorParameters, UTXOWalletProvider } from './types.js';
interface GetAccountsRequest {
    purposes: AddressPurpose[];
}
type CtrlResponse<T> = {
    status: 'success';
    result: T;
    error?: never;
} | {
    status: 'error';
    error: string;
    result?: never;
};
interface CtrlSignPsbtResult {
    psbt: string;
    txid: string;
}
interface CtrlAccount {
    address: string;
    publicKey: string;
    purpose: AddressPurpose;
    addressType: string;
    walletType: string;
}
export type CtrlBitcoinEventMap = {
    accountsChanged(accounts: Address[]): void;
};
export type CtrlBitcoinEvents = {
    addListener<TEvent extends keyof CtrlBitcoinEventMap>(event: TEvent, listener: CtrlBitcoinEventMap[TEvent]): void;
    removeListener<TEvent extends keyof CtrlBitcoinEventMap>(event: TEvent, listener: CtrlBitcoinEventMap[TEvent]): void;
};
type CtrlConnectorProperties = {
    getAccounts(): Promise<readonly Account[]>;
    onAccountsChanged(accounts: Address[]): void;
    getInternalProvider(): Promise<CtrlBitcoinProvider>;
} & UTXOWalletProvider;
type CtrlBitcoinProvider = {
    signPsbt({ psbt, }: {
        psbt: string;
        broadcast: boolean;
    }): Promise<CtrlResponse<CtrlSignPsbtResult>>;
    requestAccounts(): Promise<Address[]>;
    getAccounts(): Promise<Address[]>;
    request({ method, params, }: {
        method: 'request_accounts_and_keys';
        params: GetAccountsRequest;
    }): Promise<CtrlResponse<CtrlAccount[]>>;
} & CtrlBitcoinEvents;
export declare function ctrl(parameters?: UTXOConnectorParameters): import("../index.js").CreateConnectorFn<UTXOWalletProvider | undefined, CtrlConnectorProperties, Record<string, unknown>>;
export declare namespace ctrl {
    var type: "UTXO";
}
export {};
