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

//#region src/connectors/xverse.d.ts
type XverseBitcoinNetwork = "Mainnet" | "Testnet" | "Testnet4" | "Signet";
type XverseStacksNetwork = "Mainnet" | "Testnet";
type XverseNetworkChangeEventParams = {
  type: "network_change";
  bitcoin: {
    name: XverseBitcoinNetwork;
  };
  stacks: {
    name: XverseStacksNetwork;
  };
  addresses: Account[];
};
type XverseBitcoinEventMap = {
  accountChange(accounts: Account[]): void;
  networkChange(event: XverseNetworkChangeEventParams): void;
};
type XverseBitcoinEvents = {
  addListener<TEvent extends keyof XverseBitcoinEventMap>(event: TEvent, listener: XverseBitcoinEventMap[TEvent]): void;
  removeListener?<TEvent extends keyof XverseBitcoinEventMap>(event: TEvent, listener: XverseBitcoinEventMap[TEvent]): void;
};
type XverseConnectorProperties = {
  getAccounts(): Promise<readonly Account[]>;
  onAccountsChanged(accounts: Account[]): void;
  getInternalProvider(): Promise<XverseBitcoinProvider>;
} & UTXOWalletProvider;
type Error = {
  code: number;
  message: string;
};
interface GetAccountsRequest {
  purposes: AddressPurpose[];
}
interface GetAccountsResponse {
  result?: {
    addresses: Account[];
  };
  error?: Error;
}
interface RequestPermissionsResponse {
  result?: boolean;
  error?: Error;
}
interface GetNetworkResponse {
  result?: {
    bitcoin: {
      name: XverseBitcoinNetwork;
    };
    stacks: {
      name: XverseStacksNetwork;
    };
  };
  error?: Error;
}
type XverseBitcoinProvider = {
  request(method: "signPsbt", options: {
    psbt: string;
    allowedSignHash: number;
    signInputs: Record<string, number[]>;
    broadcast: boolean;
  }): Promise<string>;
  request(method: "getAccounts" | "getAddresses", options: GetAccountsRequest): Promise<GetAccountsResponse>;
  request(method: "wallet_requestPermissions" | "wallet_renouncePermissions"): Promise<RequestPermissionsResponse>;
  request(method: "wallet_getNetwork"): Promise<GetNetworkResponse>;
} & XverseBitcoinEvents;
declare function xverse(parameters?: UTXOConnectorParameters): CreateConnectorFn<UTXOWalletProvider | undefined, XverseConnectorProperties>;
declare namespace xverse {
  export var type: "UTXO";
}
//#endregion
export { XverseBitcoinEventMap, XverseBitcoinEvents, XverseBitcoinNetwork, XverseNetworkChangeEventParams, XverseStacksNetwork, xverse };
//# sourceMappingURL=xverse.d.ts.map