import { CreateConnectorFn } from "../types/connector.js";
import { UTXOConnectorParameters, UTXOWalletProvider } from "./types.js";
import { Account, Address, AddressPurpose } from "@bigmi/core";

//#region src/connectors/ctrl.d.ts
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;
}
type CtrlBitcoinEventMap = {
  accountsChanged(accounts: Address[]): void;
};
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;
declare function ctrl(parameters?: UTXOConnectorParameters): CreateConnectorFn<UTXOWalletProvider | undefined, CtrlConnectorProperties>;
declare namespace ctrl {
  export var type: "UTXO";
}
//#endregion
export { CtrlBitcoinEventMap, CtrlBitcoinEvents, ctrl };
//# sourceMappingURL=ctrl.d.ts.map