import { Address, WithAddress } from '@hyperlane-xyz/utils';
import { DispatchedMessage } from '../core/types.js';
import { MultiProvider } from '../providers/MultiProvider.js';
import { ChainNameOrId } from '../types.js';
import { HyperlaneReader } from '../utils/HyperlaneReader.js';
import { AggregationIsmConfig, ArbL2ToL1IsmConfig, DerivedIsmConfig, IsmConfig, ModuleType, MultisigIsmConfig, NullIsmConfig, OffchainLookupIsmConfig } from './types.js';
export interface IsmReader {
    deriveIsmConfig(address: Address): Promise<DerivedIsmConfig>;
    deriveOffchainLookupConfig(address: string): Promise<WithAddress<OffchainLookupIsmConfig>>;
    deriveRoutingConfig(address: Address): Promise<WithAddress<DerivedIsmConfig>>;
    deriveAggregationConfig(address: Address): Promise<WithAddress<AggregationIsmConfig>>;
    deriveMultisigConfig(address: Address): Promise<WithAddress<MultisigIsmConfig>>;
    deriveNullConfig(address: Address): Promise<WithAddress<NullIsmConfig>>;
    deriveArbL2ToL1Config(address: Address): Promise<WithAddress<ArbL2ToL1IsmConfig>>;
    assertModuleType(moduleType: ModuleType, expectedModuleType: ModuleType): void;
}
export declare class EvmIsmReader extends HyperlaneReader implements IsmReader {
    protected readonly multiProvider: MultiProvider;
    protected readonly chain: ChainNameOrId;
    protected readonly concurrency: number;
    protected readonly messageContext?: DispatchedMessage | undefined;
    protected readonly logger: import("pino").default.Logger<never>;
    protected isZkSyncChain: boolean;
    constructor(multiProvider: MultiProvider, chain: ChainNameOrId, concurrency?: number, messageContext?: DispatchedMessage | undefined);
    deriveIsmConfigFromAddress(address: Address): Promise<DerivedIsmConfig>;
    deriveOffchainLookupConfig(address: string): Promise<WithAddress<OffchainLookupIsmConfig>>;
    deriveIsmConfig(config: IsmConfig): Promise<DerivedIsmConfig>;
    private preserveUnredeployableIsm;
    deriveRoutingConfig(address: Address): Promise<WithAddress<DerivedIsmConfig>>;
    /**
     * Detects whether the contract at `address` is an ICA router
     * by probing for CCIP_READ_ISM() (full router) or bytecodeHash() (minimal router).
     */
    private isIcaRouter;
    private deriveRemoteIsmConfigs;
    private deriveNonOwnableRoutingConfig;
    deriveAggregationConfig(address: Address): Promise<WithAddress<AggregationIsmConfig>>;
    deriveMultisigConfig(address: string): Promise<WithAddress<MultisigIsmConfig>>;
    deriveNullConfig(address: Address): Promise<WithAddress<NullIsmConfig>>;
    deriveArbL2ToL1Config(address: Address): Promise<WithAddress<ArbL2ToL1IsmConfig>>;
    assertModuleType(moduleType: ModuleType, expectedModuleType: ModuleType): void;
}
//# sourceMappingURL=EvmIsmReader.d.ts.map