import { CommandBus } from '../../../../core/command/CommandBus';
import Account from '../../../../domain/context/account/Account';
import { Factories } from '../../../../domain/context/factory/Factories';
import { Resolvers } from '../../../../domain/context/factory/Resolvers';
import { JsonRpcRelays } from '../../../../domain/context/network/JsonRpcRelay';
import { MirrorNodes } from '../../../../domain/context/network/MirrorNode';
import { MirrorNodeAdapter } from '../../../../port/out/mirror/MirrorNodeAdapter';
import EventService from '../../event/EventService';
import { Signer } from 'ethers';
import type { Provider } from '@ethersproject/providers';
import TransactionAdapter, { InitializationData } from '../../../../port/out/TransactionAdapter';
import NetworkService from '../../network/NetworkService';
import Service from '../../Service';
export default class MetamaskService extends Service {
    private signerOrProvider;
    private account;
    private factories;
    private resolvers;
    private mirrorNodes;
    private jsonRpcRelays;
    private eventService;
    private commandBus;
    private networkService;
    private mirrorNodeAdapter;
    constructor(eventService: EventService, commandBus: CommandBus, networkService: NetworkService, mirrorNodeAdapter: MirrorNodeAdapter);
    init(debug?: boolean): Promise<string>;
    register(handler: TransactionAdapter, account?: Account, debug?: boolean): Promise<InitializationData>;
    stop(): Promise<boolean>;
    connectMetamask(pair?: boolean): Promise<void>;
    getSignerOrProvider(): Signer | Provider;
    setSignerOrProvider(setSignerOrProvider: Signer | Provider): void;
    getAccount(): Account;
    setConfig(config: {
        mirrorNodes?: MirrorNodes;
        jsonRpcRelays?: JsonRpcRelays;
        factories?: Factories;
        resolvers?: Resolvers;
    }): void;
    registerMetamaskEvents(): void;
    private pairWallet;
    private setMetamaskNetwork;
    private setMetasmaskAccount;
    private getFirstAccount;
    private getNetworkConfig;
    private emitWalletPairedEvent;
}
